天天看點

鄧侃解讀:醫療關鍵資料時間序列敏感度分析的通用方法

2018年2月13日,來自密歇根州立大學、康奈爾大學騰訊研究院的幾位學者,聯名在 Arxiv 上發表了一篇題為 “Identify Susceptible Locations in Medical Records” [1]的論文。 這篇文章講述了如何在病曆中找到敏感資料位置,以及如何利用這些關鍵資料對重症監護中的病人進行保護。

平時大家對自己的醫療資料或許并不怎麼關心,面對一大串的字元數字,身為外行基本也看不出個是以然來,更不要說如何用這些資料來救人和自救了。

但這些資料對于醫生們而言就十分寶貴了。根據病患的診療資料醫生們可以對病患的病情走向做出判斷,進而給出相應的治療手段。隻不過這些平鋪直叙的資料,即使是醫生看起來也難免會有一些遺漏,又或者被一些可疑資訊幹擾。

文章中提到的方法就是要從這些流水賬似的資料中找到可疑的“red flag”甚至是潛在的測量誤差,去提示醫生關注可能遺漏或錯誤判斷的關鍵資訊。

找到這些敏感資訊意味着什麼?

打個比方,對于病人來說,看醫生最在乎的除了身體是否康複外,大概就是花了多少錢了。為了少花錢或是從中賺錢,一些不法分子甚至會進行醫保詐騙。

醫保詐騙通常把無病說成有病,把小病說成大病。

要做到這一結果其實并不容易。詐騙犯們如果隻是篡改診斷結果中的疾病,那必須是行不通的。因為報帳稽核的時候,一定會核查現病史、化驗結果、檢查報告等以核對病情描述與診斷結果是否一緻

不妨把住院病曆的内容,看成一個時間序列。從入院到出院這一期間每一天的病情描述都是一個矢量,包含各種症狀、體征、化驗名額、檢查标志物,以及診斷、藥品、手術、護理等等。

這些資料資訊都是連貫的,僅修改結果就像一個錯誤的數學公式,很容易被發現。

而醫保欺詐的目标,是既要盡可能少地改動病曆,還得使之支援編纂出來的出院診斷。也就是說,最理想的情況是隻改動病曆時間序列中某一天某一項病情描述名額,就能使之得到期盼的診斷結果。

反過來說,實際測量時可能存在的小偏差,或者資料中不起眼的一個數值變化就像是這個詐騙犯,小小的變動可能就導緻了整個實際預測結果的改變。

要如何才能發現哪個病情名額對診斷結果最重要呢?文章基于這一疑問,便提出了一個“通用的方法”去對時間序列資料中各個時刻各個數值的敏感度做出分析。

如何實作搜尋

1. 首先,我們需要一個診斷模型,輸入是病情描述的時間序列,輸出結果是罹患各種疾病的機率。

診斷模型的實作方案有很多。最簡單的是用 LSTM 模型。

當然也可以用它辦法,譬如可以先用 LSTM,把不定長的病情描述的時間序列,轉換成定長的張量,然後用 CNN 對定長的張量做分類。

甚至也可以擯棄 LSTM,譬如 Attention,直接在時間序列中捕捉重要的資料,然後根據這些重要資料做分類。

2. 搞定診斷模型以後,接下去對時間序列中每一天的每一項資料,做敏感性分析。

做敏感性分析的辦法也很多,最粗暴的辦法是窮舉。保持時間序列中的其它資料項不變,隻改變一項資料,然後把篡改過了的時間序列,輸入進診斷模型。然後比較診斷模型的診斷結果,與病曆中記錄的真實的診斷結果。模型的結果,與真實結果,兩者相差越大,說明這一項資料,對診斷結果影響越大。

窮舉的辦法效率較差,論文提議,用前沿的對抗攻擊(Adversarial attack)技術,來快速找到敏感的資料項。

對抗攻擊技術的原理,不難懂。由于診斷模型是神經網絡,神經網絡的各個參數,是通過梯度下降算法确定的。下降梯度越陡,相關的參數對模型的輸出影響越大。

3. 為了讓敏感性分析的結果,看起來更直覺,做一個熱力圖。

橫軸是各項病情名額,縱軸是時間軸,從入院到出院。二維空間中的每一個點,對應着某一天某一項名額,對診斷結果的影響力,用顔色表示影響力。

方法的拓展應用

仔細想想時間序列敏感度分析的三步曲,會發現其實這個方法并不局限于對病曆記錄的敏感性分析,而就像之前說的,是一個實作對事件序列攻擊的通用辦法

站在醫保稽核的立場,隻有懂得了不法分子篡改病例的原理,才能更有針對性地研究如何甄别病曆記錄中,哪些時間的哪些資料,被人為篡改了。進而更為有效的保障病人以及醫療工作者的權益。

原文釋出時間為:2018-03-5

本文作者:鄧侃

本文來自雲栖社群合作夥伴新智元,了解相關資訊可以關注“AI_era”微信公衆号

繼續閱讀