1. 引言
医疗保险欺诈,是指公民在参加医疗保险、缴纳医疗保险费、享受国家医疗保险等福利待遇过程中,故意捏造事实、弄虚作假、隐瞒真实情况而导致医疗保险基金损失的行为。孙梦秋 [1] 指出:骗保人在进行医保欺诈时主要的行为,一是使用他人的医保卡配药,二是在不同的医院或医生处重复配药。为维护国家医疗保险基金,结合现今的大数据时代,如何在海量的数据中寻找到可能发生医保欺诈行为的个案是具有现实意义的。
目前,针对医保欺诈识别的模型,大多采用统计回归、神经网络等辅助(有监督)的学习方法,抑或是非辅助(无监督)学习等。狄萱 [2] 使用了孤立森林与随机森林的无监督学习方法,刘蓥 [3] 使用了基于深度学习的有监督学习方法,李金灿、徐珂琳等人 [4] 总结了应用大数据技术的各类算法,陈富秋、吕亚兰等人 [5] 证明了依托数据分析对医保异常行为检测的可行性。
诸如机器学习,神经网络等辅助学习(有监督)方法在机器进行学习步骤前,需要人工筛选出一定量的欺诈数据作为训练集,因此存在较强的主观性、工作量较大等问题。而经典的非辅助学习(无监督)方法,如聚类分析、决策树等会将不同指标的重要程度视为等同的,忽略指标间权重的差异,极大地影响了分类精度。
以上的已有文献对于医保欺诈行为识别的算法进行了较深入的研究,得益于人工智能的快速发展,其研究大多数集中在辅助学习(有监督)方法,经典的非辅助学习(无监督)方法的相关文献还较少。基于已有文献的研究思路 [6],本文选择改进经典的非辅助学习–聚类分析,定义信息熵并以熵权法引入指标权重,通过引入“依托权重改进的欧氏距离”,对不同指标间的“距离”进行改进,得到一种全新的“距离”用于层次聚类分析,聚类得到的孤立点将作为医保欺诈个案。
2. 模型准备
2.1. 数据的获取
本文采用2015年深圳杯数学建模夏令营A题数据 [7]。
2.2. 研究方法
本文研究的主要问题是在没有先验条件,即没有已知欺诈数据的情况下寻找出可能的欺诈记录。如果通过人工筛选给出部分欺诈数据作为学习材料,存在较强的主观性。为解决这样的问题,本文将采用非辅助学习(无监督学习)方法。通过比较分析,本文将采用聚类分析算法,对数据进行分类处理,认为出现的孤立点为疑似欺诈点。作为一个实际的聚类问题,各种指标对于距离函数贡献程度是不同的,在传统的聚类分析算法中,无论是使用欧氏距离还是马氏距离,都将所有指标赋予相同的权重。本文考虑给重要指标赋予较大权重,可以很大程度提高聚类效果。本文通过定义信息熵并引入熵权法在无先验条件的情况下给出各指标的权重,再使用基于属性权重的改进欧氏距离进行聚类分析,从而通过描述数据的相似程度,区分出具有异于常态的个案。
2.3. 研究假设
· 假设每个患者是否发生欺诈行为是相互独立的,不存在相互学习与模仿。
· 假设医保欺诈只体现在医药费上,与住院费、治疗费无关(数据中仅存在各类药物费用)。
· 假设姓名、身份证号、出生日期、性别、电话号码等显著无效识别指标不会对是否欺诈造成影响。
· 假设欺诈记录只出现在孤立点中 [8] (欺诈行为的单次金额及拿药次数会与正常情况偏离较大)。
3. 建立识别模型
由于欺诈数据(单张处方钱数较高、一定时间内开药次数较多)都会与正常数据之间有较大差异,因此本文以聚类过程中出现的孤立点为疑似欺诈点。而传统聚类方法忽略了各因素的权重差异,本文引入考虑各项指标权重的欧氏距离作为衡量数据间差异的指标。为了得出一组只依赖基础交易数据而完全剔除主观性的权重值,本文引入信息熵的概念:指标的变异程度越小,所反应的信息量也就越少,其对应的权值应该更低。对于原样本数据集,结合现实医保欺诈行为案例,求出选取的五个指标的的值。基于以上分析,本节将建立识别模型并检验,见图1。

Figure 1. Flowchart for building recognition models
图1. 建立识别模型步骤图
3.1. 分析及预处理数据
· 无意义数据的剔除及指标选取
根据生活经验,可以排除掉身高、性别等冗余项的干扰,而对于所在省份等不齐全的信息也不能考虑对于结果的影响。
对于指标的选取:首先,欺诈行为的主体一定是有医保的患者。所以要在数据中筛选掉无医保的患者的取药记录。
其次,林源、谌立平等人 [9] 指出:常见的两种欺诈类型表现为单张账单价格过高以及拿药次数过于频繁。因此单张账单的总价格和单个患者拿药次数应该分别作为判断是否为欺诈的第一项和第二项指标。
再次,考虑部分科室、或者个别医生可能存在不合理地开医嘱作为患者取药凭证的现象 [10],所以将执行科室以及开嘱医生ID作为影响判断是否欺诈的第三项和第四项指标。
最后,考虑到有一张欺诈类型的产生是刷他人的医保卡,可能存在部分人经常将自己的医保卡外借的情况 [10],所以将患者ID作为影响判断是否为欺诈的结果的第五项指标。
· 对原始数据的处理及结果
从获取到的数据中 [7],导入患者ID和医保手册号——根据是否有医保手册判断患者是否有医保,根据判断结果忽略数据中无医保患者的购药记录。
为了得到单张账单的总价以及患者的购药次数,从数据中导入账单号、价格、患者ID——将账单号相同的记录合并,进而计算出单张单据的总价;根据患者ID来统计每位患者的购药次数。
考虑到影响判断是否欺诈的其他因素,还应将数据中的执行科室和开嘱医生ID导入Matlab中。
· 数据处理后的形式
处理后的数据应该包括六项参数——单张账单总价、患者拿药次数、患者ID、执行科室、开嘱医生ID、账单号。其中前五项参数为影响判断结果是否是欺诈的判断指标,第六项数据账单号为索引值,用于根据判断的结果检索该条记录的其他信息。
3.2. 熵权法确定权重
· 信息熵的引入
信息理论的鼻祖之一Claude. E. Shannon把信息熵定义为离散随机事件的出现概率 [11]。所谓信息熵,不妨理解成某种特定信息出现的概率。从信息传播的角度来看,当某种信息出现的概率较高的时候,表明它被传播得更远,或者说,这个信息被引用的程度更高,本文认为其占比权值相应更高。定义事件X的信息熵为:
· 计算熵权
首先进行数据的标准化处理,形成标准至非负区间,n个评价对象,m个评价指标构成的标准化后的正向化矩阵(如购药次数,次数越多,代表更可能发生医保欺诈行为,已经为正向化数据则不作处理)。
计算第j项指标下第i个样本所占的比重,并将其看作相对熵计算中用到的概率。
计算每个指标j的信息熵
及信息效用值
,最后将其归一化得到熵权
,步骤见图2。
五个指标计算熵权后得到的结果为
。

Figure 2. Diagram of the process of calculating entropy weights
图2. 计算熵权过程图
3.3. 引入改进的欧氏距离
设
为待聚类的医保消费记录数据集,每个数据
由个指标组成,即维数为m,
,其中
是
的第j维属性。
为了描述样本点数据
和
在数据集X上的距离,通常使用的欧氏距离定义为
上式中的欧氏距离将所有属性(指标)赋予了相同的权重,未考虑不同指标对于在医保欺诈识别中贡献程度的差异,以此种欧氏距离为分类依据的聚类分析的结果可能与实际情况产生较大差异。为改善聚类效果,本文引入基于属性权重的欧氏距离
,称之为改进的欧氏距离,其定义为:
3.4. 依托权重进行层次聚类
· 层次聚类的定义
给出各个指标的权重,通过对距离赋权的到新的距离定义,利用距离矩阵构建聚类树,而后可从聚类树中选择聚类树。
· 层次聚类数据准备
首先对原数据进行标准化处理,取消量纲的影响,并大量减少计算复杂度(数据较大)。以对称矩阵的形式存储两个点之间的距离(平方欧氏距离)。
· 以给定距离权重构建聚类树
由于数据量过大,电脑的内存有限,我们将87,348个样本每10,000个分别讨论。以下以第1至第10,000个样本举例。
使用Matlab编程求解引入3.3中定义的加入权重的欧式距离构成新的对称矩阵,此时我们得到了新的加入权重后的两两距离矩阵。使用Matlab内置层次聚类函数linkage构建决策树。

Figure 3. Icicle plot by dendrogram function
图3. Dendrogram函数绘制的冰柱图
· 结果处理
使用Matlab内置函数cluster对已经构建的决策树提取一个聚类数为3的聚类。并使用内置函数dendrogram绘制冰柱图(由于节点限制,只能绘制部分)。
最后使用Matlab编程统计每一个聚类类目下所包含的记录数,以上操作均在程序中实现。第1~10,000个样本所得结果绘制冰柱图如图3所示。
3.5. 层次聚类结果
使用Matlab编程统计每一个聚类类目下所包含的记录数,第1~10,000的样本所得结果见表1。

Table 1. Clustering results for selected samples
表1. 部分样本的聚类结果表格
不难看出,聚类结果满足:欺诈数据(单张处方钱数较高、一定时间内开药次数较多)都会与正常数据之间有较大差异的条件。且完全的呈现孤立点分布。但聚类数是人为规定的,有一定的主观性,下将改变聚类数,探索规律并尽可能的多发现医保欺诈行为,聚类数为3,4,5,6,7的聚类结果见表2。

Table 2. Clustering results with different number of clusters
表2. 不同聚类数下的聚类结果
从结果中,我们发现当聚类数目为4时,疑似发生医保欺诈行为的样本数为3,但聚类数为5时,样本数为14,我们认为其不再满足条件所设:完全的呈孤立点分布。故我们选定聚类数为4。使用对余下7万余个数据进行同样的处理得到的全部样本聚类结果见表3。

Table 3. Results for all samples with a clustering number of 4
表3. 聚类数为4的全部样本结果
综上我们在87,348个个案中识别出发生医保欺诈行为的个案43个。
被识别为发生医保欺诈行为的个案见表4 (仅展示前20个)。

Table 4. Cases identified as having committed health insurance fraud
表4. 被识别为发生医保欺诈行为的个案
4. 结果分析
将由模型得出的可能欺诈记录进行人工复查,结果发现所得出的43条数据较好地被归属为两种情况,一是单张处方药费特别高,二是一张医保卡在数据给出的一个月时间内多次拿药。与现实中发生医保欺诈行为的案例十分吻合 [8] [9] [10],可以认为模型及结果是正确有效的。