2018 年 2 月 13 日, 来自密歇根州立大学康奈尔大学腾讯研究院的几位学者, 联名在 Arxiv 上发表了一篇题为 Identify Susceptible Locations in Medical Records [1]的论文 这篇文章讲述了如何在病历中找到敏感数据位置, 以及如何利用这些关键数据对重症监护中的病人进行保护
平时大家对自己的医疗数据或许并不怎么关心, 面对一大串的字符数字, 身为外行基本也看不出个所以然来, 更不要说如何用这些数据来救人和自救了
但这些数据对于医生们而言就十分宝贵了根据病患的诊疗数据医生们可以对病患的病情走向做出判断, 进而给出相应的治疗手段只不过这些平铺直叙的数据, 即使是医生看起来也难免会有一些遗漏, 又或者被一些可疑信息干扰
文章中提到的方法就是要从这些流水账似的数据中找到可疑的 red flag 甚至是潜在的测量误差, 去提示医生关注可能遗漏或错误判断的关键信息
找到这些敏感信息意味着什么?
打个比方, 对于病人来说, 看医生最在乎的除了身体是否康复外, 大概就是花了多少钱了为了少花钱或是从中赚钱, 一些不法分子甚至会进行医保诈骗
医保诈骗通常把无病说成有病, 把小病说成大病
要做到这一结果其实并不容易诈骗犯们如果只是篡改诊断结果中的疾病, 那必须是行不通的因为报销审核的时候, 一定会核查现病史化验结果检查报告等以核对病情描述与诊断结果是否一致
不妨把住院病历的内容, 看成一个时间序列从入院到出院这一期间每一天的病情描述都是一个矢量, 包含各种症状体征化验指标检查标志物, 以及诊断药品手术护理等等
这些数据信息都是连贯的, 仅修改结果就像一个错误的数学公式, 很容易被发现
而医保欺诈的目标, 是既要尽可能少地改动病历, 还得使之支持编纂出来的出院诊断也就是说, 最理想的情况是只改动病历时间序列中某一天某一项病情描述指标, 就能使之得到期盼的诊断结果
反过来说, 实际测量时可能存在的小偏差, 或者数据中不起眼的一个数值变化就像是这个诈骗犯, 小小的变动可能就导致了整个实际预测结果的改变
要如何才能发现哪个病情指标对诊断结果最重要呢? 文章基于这一疑问, 便提出了一个通用的方法去对时间序列数据中各个时刻各个数值的敏感度做出分析
如何实现搜寻
1. 首先, 我们需要一个诊断模型, 输入是病情描述的时间序列, 输出结果是罹患各种疾病的概率
诊断模型的实现方案有很多最简单的是用 LSTM 模型
当然也可以用它办法, 譬如可以先用 LSTM, 把不定长的病情描述的时间序列, 转换成定长的张量, 然后用 CNN 对定长的张量做分类
甚至也可以摈弃 LSTM, 譬如 Attention, 直接在时间序列中捕捉重要的数据, 然后根据这些重要数据做分类
2. 搞定诊断模型以后, 接下去对时间序列中每一天的每一项数据, 做敏感性分析
做敏感性分析的办法也很多, 最粗暴的办法是穷举保持时间序列中的其它数据项不变, 只改变一项数据, 然后把篡改过了的时间序列, 输入进诊断模型然后比较诊断模型的诊断结果, 与病历中记录的真实的诊断结果模型的结果, 与真实结果, 两者相差越大, 说明这一项数据, 对诊断结果影响越大
穷举的办法效率较差, 论文提议, 用前沿的对抗攻击 (Adversarial attack) 技术, 来快速找到敏感的数据项
对抗攻击技术的原理, 不难懂由于诊断模型是神经网络, 神经网络的各个参数, 是通过梯度下降算法确定的下降梯度越陡, 相关的参数对模型的输出影响越大
3. 为了让敏感性分析的结果, 看起来更直观, 做一个热力图
横轴是各项病情指标, 纵轴是时间轴, 从入院到出院二维空间中的每一个点, 对应着某一天某一项指标, 对诊断结果的影响力, 用颜色表示影响力
方法的拓展应用
仔细想想时间序列敏感度分析的三步曲, 会发现其实这个方法并不局限于对病历记录的敏感性分析, 而就像之前说的, 是一个实现对事件序列攻击的通用办法
站在医保审核的立场, 只有懂得了不法分子篡改病例的原理, 才能更有针对性地研究如何甄别病历记录中, 哪些时间的哪些数据, 被人为篡改了从而更为有效的保障病人以及医疗工作者的权益
来源: https://yq.aliyun.com/articles/509668