Big Data 大數據是什麼?從醫療大數據案例看AI數據問題與解方

大數據是什麼?

大數據(Big Data) 又被稱為巨量資料, 隨著儲存設備越來越便宜, 越來越大量的資料被儲存,不論企業或研究員都開始思考, 巨量資料對我們的幫助以及如何從中萃取知識。

目前大數據用資料特性可以定義為以下5V:

  • Volume(容量/大):資料量「大」。像是網頁資訊,在社群軟體內,每天可能會產生數億個文章以及按讚、回覆資訊,而日積月累下,將會存放非常巨量的資料。
  • Velocity(速度/快):資料產生和更新速度「快」。
  • Variety(多樣性/雜):資料來源多元、總類繁多,格式雜「亂」,儲存大量的非結構化資料(Unstructured data)。
  • Veracity(真實性/疑): 對於資料的質量與可信賴度存「疑」。
  • Value(價值/珍):資料量龐大,「珍」貴的資訊藏在其中。

簡單來說,大數據就是資料量大、產生快速、結構複雜且資料髒亂,用傳統的儲存方法以及運算軟體無法處理。

然而,這些大數據資料在現今已經如同公司的資本,隨著科技的進步,越來越多新技術以及設備能應付大數據的發展,藉此產生出許多擁有高獨特性、有價值的產品。

因此,我們可以說

「擁有數據,就等於掌握霸權」


[optin-monster-inline slug=”efwng9h4usmda0bxuwbi”]


什麼是「醫療」大數據?

在醫院,每天都會產生數以萬計的資料。

每個病人來到了醫院,會做各種不同檢查,像是量測病人的身體資訊(身高, 體重), 生命特徵(血壓, 心跳, 呼吸速度等等) 或是 放射影像 ( X-ray, CT 等等 )。

而這些檢查的結果都會被存放在醫院的資料庫內,並且隨著時間不斷的倍數增長,對於醫師和研究員來說,這些數據埋藏了許多寶藏在裡面,相對的,也埋藏了許多陷阱。

醫療數據比你想像中的還要髒亂,”大數據不等於好數據”

像是新生兒的名字,在一開始建檔的時候會寫成 “XXX之子”;  或是時態的資料,每個科別都會有自己的儲存方法 (ex: 年/月/日, 月/日/年, 年/月/日 時:分:秒) 等等,尤其是急診資料,在很多緊急情況下,醫師或是護理師時常會不小心輸入錯誤資訊。

但是當克服這些資料髒亂問題後,我認為「 AI + 醫療大數據」可以產生無限種可能。

只有在醫院的資料才能將病人的疾病歷程建立起來,包含著這個病人用過哪些藥,做過哪些手術,術後狀況如何等等資訊,當擁有這些資訊後,絕對可以針對各個病人做出精準治療。

資料科學五大 Q&A:如何成為資料科學家?資料科學產業的未來


但實際上AI醫療數據為甚麼會失敗

「AI in Healthcare」 議題其實已經有許多大企業開始投入開發,但是 Watson 和 Google都陸續宣告失敗[1],原因是什麼呢?

我以個人觀點列出以下原因:

  1. 醫療體系封閉

醫療資料因為隱私的問題,基本上是完全無法攜出各醫院的,導致資料和模型在各醫院無法做交流。當資料量不夠全面時,各醫院訓練出來的模型通常都會有資料偏差(Bias)問題,使得A醫院訓練出來的模型無法在B醫院使用。

要做一個所有人都可以使用的AI模型很難

當資料集的某些元素比其他元素具有更大的權重或大小時,我們稱之為有偏見的資料集,此類的資料集通常做不出通用模型,從而導致結果偏斜,準確性水平低和分析錯誤。舉例來說: 當資料集內都只有黃種人資料而訓練出來的模型,通常用在白種人的資料集內會導致結果與預期差距甚大。

  1. 資料面的問題

我們從標籤(label)來談討,對於同個病徵的病人,不同醫生可能會下不同的診斷,就算是相同體系教學出來的醫師,都有可能會有不同的見解,這樣會導致在相同的特徵底下,會有不同的標籤產生,我們稱這樣的資料是擁有雜亂標籤(noise label)的資料。說直白的,AI 模型就是從大量資料中找出規則,但是如果連資料本身的標籤都沒辦法穩定的話,AI也會跟著不知所措。

醫療資料面的另一個問題為資料不平衡(Imbalanced Data)問題,通常患病的病人在所有資料中可能會占的相當少數。舉例來說: 以癌症預測為例,根據國健署最新癌症登記報告,107年男性年齡標準化癌症發生率為每10萬人口341.3人,也就是說資料標籤分布為99659:341,比例相當懸殊,在這樣的資料分布底下,只要我模型全猜病人都是健康的人,準確度就會是99%,而這樣的模型不是我們想要的。

醫療資料會有 noise label 和 imbalanced data問題需要解決

  1. 現行的AI演算法,高準確度的模型大多都十分複雜,尤其是深度類神經網絡,由於多個隱藏層與大量非線性神經元的轉換,幾乎難以理解輸入和結果輸出之間的關係。模型頂多跟你說現在預測這個結果的機率是多少,卻很難解釋背後的理由是什麼。然而,模型解釋性對於醫生來說十分重要,他的決定必須對看診的病人有所交代,因此決定的前因後果必須要清楚。

AI模型在醫院不應該是黑盒子,應該是要可以打開和醫生一起探討其因果關係


醫療AI需要注意的問題

  1. 8:2 法則  → 6:2:2 法則

在學校聽到的 8:2 法則,在資料界裡面代表,通常在一個AI專案裡,清理資料通常會花掉8成的時間,訓練模型的時間戰剩下2成。但是場景換到醫療領域,我認為應該是 6:2:2 法則,清理資料的時間佔六成,訓練模型的時間佔兩成,而剩下的2成的時間會花在臨床驗證上(包含申請IRB資格,設計驗證標準等等)。臨床驗證的成功與否是決定這個專案成功或失敗的關鍵,要考慮模型在真實場域上是否能擁有足夠的穩健性,通常驗證時間會花到三到六個月。

  1. 資料標註要注意的事情

通常擁有標籤的醫療資料很少,舉例來說,假設我們想用胸腔X-ray圖做癌症病癥的偵測,就必須拿影像請醫生幫我們標註出癌症的確切位置,後續才能丟入AI模型做訓練,但是在請醫師標記前一定要建立標註標準!!!

下圖為範例,左邊是一張需要被標註的資料,而中間那張和右邊那張都算是標出病徵的區域,但是對於模型來說這兩張標籤是完全不同的,因此,在請醫師標註前最好先定好標準,像是標記的精確度、標記的工具等等。

任何不精確的標註都可能使AI做出物意義的輸出

  1. 要考慮到資料特徵的成本

在醫療資料裡面,其實特徵是擁有成本的。像是病人的身高、體重因為很好取得,所以獲取的成本會比較低,而需要抽血或是需要拍攝X光才能獲得的特徵,獲取成本相對地就會十分的高。當一個病患到醫院看診時,通常不能馬上取到抽血的資訊,如果模型在訓練的時候有使用到抽血的資訊的話,這時候產生出來的預測結果一定會失真。成本的取得需和醫師討論才能更符合真實情境,最終產生的AI模型一定要是成本最低,準確度最高的模型,這樣對於真正的應用情境才會是最有幫助。


解決方法

以下我會針對上面提到的困難,介紹一些現有處理的方法

  1. 當出現資料偏差(Data Bias)該怎麼做?:

在醫療資料內,會有很多原因造成資料偏差,包含病人的生理差異(男生/女生)、種族差異(黃種人/白種人)、甚至社會文化差異(閩南人/原住民)。訓練偏差的資料會產生偏差的模型,而導致錯誤的分類結果。而為了解決此問題,可以嘗試使用 Google 在2017年提出的新想法 — 聯邦式學習 (Federated learning) $^2$。在近幾年,AI LAB致力於推動台灣的聯邦學習醫療聯盟[2],期望能共同打造善用台灣醫療大數據的智慧醫療產品。

資料偏差議題可以參考的影片 :


推薦的聯邦學習Python Package: https://www.tensorflow.org/federated

聯邦式學習的主要概念是去中心化,在不交換資料樣本的情況下,統合多個分散的邊緣裝置或伺服器上演算法訓練的結果,更新模型權重,使得模型能擁有更高的穩健性

  1. 當出現雜亂標籤(Noise Label)該怎麼做?

在很多的AI專案裡面,其實會遇到很多標籤錯誤的資料,如何辨識標籤錯誤,是一件重要的任務,尤其在資料量十分巨大時,這項任務會變得更加艱鉅。在醫療資料內,因為不同醫師對於同份資料的見解時常會有出入,所以去除Noise label是個必要處理的步驟,關於 Noise label 議題,在學界其實有許多論文已經有在探討了,我們可以透過一些演算法的篩檢,在訓練時先去除掉不確定性高的資料,藉此提升模型的效果。

推薦的Python Package : https://github.com/cgnorthcutt/cleanlab

  1. 當出現資料不平衡(Imbalanced data)該怎麼做?

(陰性樣本為沒患病的人,陽性樣本為有患病的人)

  • 抽樣方法:
  1. Oversampling:  隨機複製多個陽性樣本,使得陽性樣本和陰性樣本比例達到 1: 1
  2. Downsampling: 隨機丟掉多個陰性樣本,使得陽性樣本和陰性樣本比例達到 1: 1
  • 產生合成樣本: 透過合成的方法增加正樣本

常見演算法: SMOTE/ AdaSyn/ Bayesian Network/ GAN

  • 集成學習 (ensemble learning): 結合多個弱分類器產生強分類器

常見方法: Bagging/ Boosting

  • 調整損失函數(loss function): 在訓練的時候,當陽性樣本預測錯時,給予此次學習較大的懲罰值

推薦的Python Package : https://imbalanced-learn.org/stable/

  1. 模型解釋性

通常解釋力高的模型,由於結構簡單(例如:線性回歸,決策數等等)難以處理比較複雜的問題( 例如:文本生成,影像辨識等等 )。反之,複雜的模型可以得到較高的準確度,但由於模型結構複雜,人類難以理解特徵與結果的關係。通常有兩種方法來解決:

a. 發展新的可解釋演算法

b. 找出事後可解釋的方法 (事後歸因)

通常會使用視覺化的方法來解釋,透過繪製顯著圖(saliency map)是最廣為使用的方法,它可以讓我們了解一張圖片中,哪些特定部位對模型結果預測的影響較大,如下圖,醫生可以從這樣的表示方法來知道我們的AI模型主要是看圖片的哪個區塊來做預測的。


結論

如果把AI比喻成一艘行駛在水上的大船,而水就是我們的大數據。水亦能載舟,也能覆舟。在航行的時候,會遇到各種不同類型的水,要怎麼航行到達目的地,就要靠各個掌舵人大顯身手了。

「如果你懂海,海就會幫你」— 海龍王彼得


參考資料

[1] https://www.businessweekly.com.tw/business/blog/3006961

[2] https://www.ithome.com.tw/news/138575