1. 引言
近些年来,医患关系越来越引起人们的重视,尤其是对医生滥开检查单、过度用药、开大处方等问题。究其原因,一是医学的复杂性和医生的诊治水平因素;二是经济原因。医院过于市场化的发展,医务人员的收入与医院的经济效益直接关联,开单提成、药物回扣等以药养医行为屡见不鲜;三是法律规章制度。例如在医疗事故鉴定法中规定了医生在鉴定过程中举症倒置的制度,这可能导致医生对病人做大量检查、开具较多药物等“防御性”的行为 [1] 。
针对上述问题,本文提出一种检测医生用药异常的框架。此框架包含三个阶段,第一阶段,定性分析,将处方划分为相似团体,在相似团体下进行医生用药异常检测。第二阶段,定量分析,首先,针对复杂的处方数据,提出了基于耦合关系的处方相似度度量方法。然后,应用变色龙算法对处方数据进行聚类。第三阶段,异常检测,应用自定义的聚类指标检测医生用药异常。
大多数相似性度量都是基于数据之间相互独立的假设,但是在处方数据中,药物之间存在紧密配合与相互影响的关系,即耦合关系。考虑了耦合关系之后的医生处方用药异常检测,能够更准确地挖掘到医生用药异常情况。
论文其余部分的组织如下:第2节描述相关工作和相关概念,包括耦合相似度计算和变色龙聚类等。第3节给出了基于耦合关系的医生用药异常分析框架,包括定性分析,定量分析和异常检测。第4节在真实处方数据上进行了充分的实验,验证了所提出的框架和挖掘方法的有效性。
2. 相关工作和相关概念
2.1. 相关工作
相似度用于衡量对象之间的相似程度,是数据挖掘和自然语言处理的基础,在诸如聚类、异常点检测等数据挖掘技术中广泛使用。由于描述数据对象的属性多种多样,相似度计算方式也分为很多种。计算数值属性的相似度常用欧几里得距离、曼哈顿距离和闵可夫斯基距离。离散属性有二值属性和多值属性,Jaccard系数 [2] 是计算具有非对称二元属性的对象间的相似度的常用方法。序数属性是指其属性值之间具有意义的序或排位,而相继值之间的量值是未知的 [3] 。余弦相似度是查询检索中常用的相似度计算方法,可用来计算文档之间的相似度,也可以计算词条间的相似度 [4] [5] 。耦合相似度是不承认属性间以及对象间的相互独立,认为属性间以及对象间存在耦合关系。耦合相似度可以对离散属性 [6] 和数值属性 [7] 进行度量,针对不同类型的数据,使用的具体度量公式不同。关于离散属性的耦合相似度的具体内容在2.2.1节有详细介绍。
聚类分析简称聚类,根据数据对象及其关系的信息,将数据对象划分成子集的过程 [8] 。每个子集是一个簇,簇中的数据对象更加相似。因为没有提供类标号信息,所以聚类分析有时被称为无监督分类。通常情况下,主要的基本聚类算法可以分为层次聚类算法、划分式聚类算法、基于密度和网格的聚类算法和其他聚类算法等。变色龙算法 [9] 通过一个图划分方法将数据对象聚类为大量相对较小的子簇,然后用层次聚类算法通过反复合并子簇得到结果簇。此算法利用动态模型的层次聚类方法,不需要提前设定参数,可发现任意形状和密度的簇。K-means聚类算法 [10] 是最经典的划分式聚类算法的代表,但此算法通常会在获得一个局部最优值时终止,仅适合对数值型数据聚类,只适用于聚类结果为凸形(即类簇为凸形)的数据集。为克服K-means聚类算法的不足,研究者们提出了K-modes-CGC算法 [11] ,K-modes-Huang算法 [12] ,K-means-CP算法 [13] 等很多新的改进的K-means 算法。DBSCAN算法 [14] 是一个比较有代表性的基于密度的聚类算法,与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。Derya等人 [15] 对DBSCAN进行了与辨识核对象、噪音对象和邻近类簇相关的3个边缘扩展,进而提出一种新的基于密度的聚类算法。
聚类分析常被用于异常检测。目前异常检测已经应用到诈骗检测、入侵检测、医疗、纳税等方面 [16] 。在股市中,一群隐藏的操纵者之间相互合作操纵证券价格,CHMM-CBA方法用耦合关系来检测操纵行为。此外,一种更通用的CBA框架通过捕获更广泛的耦合关系去检测基于团体的市场操纵行为 [17] 。在医疗方面,针对社会上存在的一些不法分子在医疗行为上虚构事实,隐瞒真相,以骗取医保基金或医疗待遇的情况,潘 [18] 、王 [19] 和梁等 [20] 建立数据挖掘模型,预测各种医疗消费费用,并通过一系列的数据分析和挖掘,检测到医疗消费费用的异常记录。但是,将聚类分析应用到医生用药的异常检测的相关研究还很少。本文引入耦合相似度度量和变色龙聚类算法,检测医生用药异常。
2.2. 相关概念
本节主要介绍在定量分析中采用的耦合相似度 [6] 计算和变色龙聚类算法 [9] 。
2.2.1耦合相似度
本小节以信息表为例,介绍如何计算属性值的耦合相似度(CASV),以及对象的耦合相似度(CASO) [6] 。信息表如表1所示。
表示第i个对象,
表示第j个属性。
使用耦合关系进行相似度度量时,不承认信息表中属性间、对象间相互独立的假定。耦合分为属性内耦合和属性间耦合。
1) 属性内耦合相似度(IaASV)
同一个属性内,属性值出现的次数差异反映的是值的频率分布,同一个属性内的两个值出现的频率越相近,它们的相似度越高 [3] 。两个对象
和
的第j属性的属性值
和
的属性内耦合相似度(IaASV)可以通过下式计算:
(1)
其中,
表示属性值
对应的集合,
表示属性值
出现的次数,因此
,
,且
,m为信息表的规模。在表1中,
,
。
。
![](Images/Table_Tmp.jpg)
Table 1. An example of information table
表1. 信息表的例子
2) 属性间耦合相似度(IeASV)
属性间耦合是指属性之间的相互影响。属性
的属性值
(x表示此属性值在
行)和
的相似度,是由
和
受其他属性
的影响来计算求得。
![](//html.hanspub.org/file/11-1540696x33_hanspub.png)
其中,
是属性
的值,
,而
表示属性值
出现的次数。
表示
,而
表示与属性值
出现在同行的属性
的值的集合。
例如,计算
的两个属性值
受属性
影响下的相似度
。其中,
,
。
属性
的属性值
和
的属性间耦合相似度(IeASV)被描述为:
(2)
其中,
是一组属性
的属性值,
,n为属性个数。
是属性
的权重系数,
,并且
。例如在表1中,当
等于0.5时,
。
综上,IaASV强调的是属性内的属性值出现的频率,而IeASV强调的是属性间的相互影响。属性值耦合相似度(CASV)则通过这两种度量结合得到。
3) 属性值耦合相似度(CASV)
属性值
和
的耦合相似度(CASV)定义如下:
(3)
其中
和
分别是IaASV和IeASV。在表1中,属性值B1和B2的CASV是
。
4) 对象耦合相似度(CASO)
对象耦合相似度(CASO)可以由属性值耦合相似度(CASV)累计得到。对象
和对象
的耦合相似度(CASO)被定义为:
(4)
其中
是指CASV,
分别指对象
在属性
上的值,并且
。
在表1中,对象
和
的耦合相似度
。
2.2.2. 变色龙(Chameleon)聚类算法
变色龙聚类算法是利用动态模型的层次聚类算法,可以发现同构、自然的簇。它采用动态建模的方法来确定一对簇之间的相似度,不依赖于一个静态的、用户提供的模型,能自动地适应被合并簇的内部特征。所以,当簇具有不同的形状、大小和密度时,变色龙算法也能够有效地聚类。
变色龙算法可分为构造k-最近邻图,用最大生成树划分该k-最邻近图和合并子簇形成最终簇三个阶段。在第三阶段,通过子簇Ci和Cj之间的相对互连性RI{Ci, Cj}和相对近似度RC{Ci, Cj}来决定两个子簇之间的相似度,然后选择使得相似度函数取值最大的两个子簇合并。
3. 基于耦合关系的医生用药异常分析
本文提出的框架(如图1所示)由三个阶段组成:定性分析,把现有的医院的真实处方转换成合适的表示形式,处方按相似团体进行划分,为下阶段定量分析做准备。定量分析,利用耦合关系度量处方间的相似性,用变色龙算法对处方进行聚类。异常检测,利用自定义的聚类指标检测医生用药异常。
3.1. 定性分析
为方便说明,先给出一些相关概念。
定义1 (专向科室):是指专门诊治某一类疾病或某一身体部位病症的科室。例如,眼科、皮肤科。
定义2 (综合科室):除了专向科室的科室均视为综合科室,它不具体诊治某一类疾病或某一身体部位病症。例如,简易门诊、急诊。
定义3 (相似团体):综合科室中相同疾病为一个相似团体,是跨门诊的;而专向科室中每一个科室中相同疾病为一个相似团体。
在相似团体内的处方中进行异常检测,才有意义,还可以减少计算时间,减少结果偏差。
3.2. 定量分析
定量分析由相似度计算和聚类两部分组成。相似度计算引入了耦合。考虑药物和药物之间的耦合关系,更真实地反应药物间的相互影响。如有些药品之间是有相互辅助作用的,它们往往同时出现。
3.2.1. 相似度计算
本文以处方为数据对象,药物为属性。为方便计算相似度,采用1或0表示此处方是否使用该药物。数据组织如图2所示,其中第一列代表处方编号。
利用信息表中属性及对象的耦合相似度度量方法(2.2.1节中已介绍)对处方数据进行相似度度量,其步骤如下:
1) 使用公式(1)计算属性值
和
的内耦合相似度(IaASV);
2) 使用公式(2)计算属性值
和
的间耦合相似度(IeASV);
![](//html.hanspub.org/file/11-1540696x84_hanspub.png)
Figure 1. The framework for analyzing abnormal use of drugs
图1. 医生用药异常分析框架
3) 使用公式(3)计算属性值
和
的耦合相似度(CASV);
4) 使用公式(4)计算对象
和对象
的耦合相似度(CASO)。
计算CASO的时间复杂度为
,n为属性个数,R为各属性中不同属性值个数的最大值,即:
。
下面举例说明CASO的计算过程,表2是由三个处方构成的实例,利用CASO计算得到各处方之间的相似度,如表3所示,表2中的处方之间越相似,表3中的相似度值越大。
3.2.2. 聚类
本论文采用变色龙算法进行聚类,如算法1所示,变色龙有两个关键步骤:图划分和层次聚类。
本文中一个处方表示一个数据点。若点
是点
的k最邻近(或点
是点
的k最邻近),则两点之间存在一条边。变色龙算法第一阶段(第1,2步)是将处方聚类成若干子簇,每个子簇含有足够多的处方以满足动态建模生成子簇。将k-最近邻图划分成几部分,极大减少割边。由于k-最邻近图中的每条边表示处方之间的相似度,最小割边的划分可以有效减少不同子簇的处方间的关系。第二阶段(第3~5步),使用动态建模架构层次聚类数据项,合并成簇。找到子簇之后,变色龙算法使用相对接近度和相对互连度框架对子簇进行合并。
假定m是数据对象(处方)的个数,p是子簇的个数。划分图需要的时间复杂度 [9] 是
(第2步),在图划分得到的p个子簇上进行凝聚层次聚类需要
时间(第3~5步)。
![](Images/Table_Tmp.jpg)
Table 3. The CASO similarity between descriptions
表3. 处方间CASO相似度
Algorithm 1. Chameleon
算法1. 变色龙
3.3. 异常检测
利用变色龙算法对处方聚类后,再对结果进行统计,将处方的聚类结果映射到医生。通过处方异常点率PO和簇内处方比率CP对医生用药进行异常检测,PO和CP定义为:
(5)
(6)
其中
为聚类后相似团体t中第i个医生的异常点处方数,
为相似团体t中第i个医生的处方总量,
为在相似团体t中,第i个医生在j簇中的处方数,
为相似团体t中j簇包含的处方总数。
公式(6)主要检测:某医生诊治某相似团体次数较多,且使用的处方大致相似(医生一般都有自己的用药习惯),会导致该医生的处方可能自成一簇。将自成簇的医生按异常报告出来,由领域专家鉴别。
在异常检测中,PO和CP的大小分别与异常点率阈值C1和簇内处方比率阈值C2进行比较,如果PO或CP大于相应阈值,即可认定该医生在此相似团体中用药异常。其中,C1应大于该相似团体所有异常点数量与该相似团体处方总量的比值,C2的值需要考虑到该医生在此相似团体中处方比重较大的情况,因此C2应大于该医生在此相似团体中的处方数量与该相似团体中总的处方数量的比值。
例如在数据规模为500的情况下,A医生在综合诊室的上呼吸道感染这个相似团体中所开设处方104个,经聚类后该相似团体共有62个异常点,其中A医生共有5个异常点,将处方的结果映射到医生后,对A医生的聚类统计结果如表4所示。
按照上述阈值C1和C2的取值原则,C1大于62/500 = 0.124,取0.3,C2大于104/500 = 0.208,取0.4。A医生的处方群点率为5/104 = 0.048小于C1。A医生在簇2中处方比率为60/113 = 0.53大于0.4,因此可以把A医生在该相似团体的簇2中的用药情况报告出来,待专家鉴别。
4. 实验结果与分析
本论文中对象间耦合相似度(CASO)的计算由MATLAB 2012b完成,变色龙算法由JAVA语言实现。所有实验均在主频2.4 GHz的因特尔酷睿2处理器,1 GB内存,windows7操作系统的PC机上运行。
4.1. 数据集
本实验使用的是某医院的真实处方数据。本着实验数据全面、准确的原则,采用的是有多名医生诊治且每名医生都诊治较多次的相似团体——综合诊室的上呼吸道感染和消化内科的慢性胃炎两个相似团体,其中综合诊室的上呼吸道感染共涉及93个药品,经预处理后有50个药品,消化内科的慢性胃炎共涉及49个药品,即两类处方数据分别有50和49个属性,处方规模均为1000。
4.2. Jaccard和CASO对比分析
实验利用离散属性相似度计算中应用比较广泛的Jaccard相似度与对象耦合相似度CASO进行相似度度量,对比使用两者进行变色龙聚类得到的异常处方数和子簇个数,结果如图3,图4所示。
从图3中可以看出,使用Jaccard的异常点明显多于使用CASO的异常点。且随着数据集规模的增加,使用Jaccard的异常点数量增长速度明显大于使用CASO的增长速度。但不论使用哪种方法,上呼吸道感染的异常点数量均大于慢性胃炎,这是因为慢性胃炎的治疗药物主要集中在少数几个药品中,且处方的重复率较高。从图4可以看出,使用Jaccard的簇数量多于使用CASO的簇数量。经领域专家对聚类结果进行鉴定,由CASO得到的簇和异常点更合理和准确。这是由于Jaccard仅仅考虑两个对象间同时出现的属性个数是完全不够的,还需要考虑属性间耦合作用和属性内耦合作用,比如氨溴索注射液和氨溴索注射剂是不可能在同一处方中出现的,CASO就会考虑到这种情况。
从上述实验结果可以看出,CASO计算处方间相似度时充分考虑了属性以及对象的耦合作用,在聚类时有较好的效果。但是,正因为CASO充分考虑了耦合作用,其计算时间复杂度较高,并且其时间复杂度受属性个数影响很大,3.1节已阐述。
4.3. CASO的计算时间随着属性数量增加的变化
本节对CASO的计算时间随着属性数增加的变化情况进行了实验。从图5可以看出随着属性数量的
![](Images/Table_Tmp.jpg)
Table 4. The clustering results of doctor A
表4. A医生聚类结果
![](//html.hanspub.org/file/11-1540696x104_hanspub.png)
Figure 3. Influence of data size on the number of outliers
图3. 数据规模增加对异常点数量的影响
![](//html.hanspub.org/file/11-1540696x105_hanspub.png)
Figure 4. Influence of data size on the number of clusters
图4. 数据规模增加对簇数的影响
增加,CASO的计算时间增长较快。改善CASO计算复杂度也是未来工作中的主要任务之一。
4.4. 异常结果分析
将处方的聚类结果映射到医生,检验医生在该相似团体中用药是否异常。本文在消化科室的慢性胃炎的1000个处方中进行检验。表5为将处方聚类后的簇映射到医生时的聚类情况。而表6为每个医生的异常点数及其在该相似团体内的处方总数。
表7为异常检测结果,其中的异常情况列若为“异常点”,表示此医生所开的处方异常点比率(公式(5)所示)大于阈值C1。异常情况列若为“簇*、簇*”,表示此医生在这几个簇中的处方比重很大,被怀疑是自成簇。从表中可以看出医生B、C、D、E、F、G均有所异常,对簇中包含的主要药品进行分析可以发现,B医生偏于使用的药品有莫沙必利分散片、瑞巴派特片、泮托拉唑钠肠溶胶囊;C医生偏于使
![](//html.hanspub.org/file/11-1540696x106_hanspub.png)
Figure 5. Influence of data size on the number of clusters
图5. 数据规模增加对簇数的影响
![](Images/Table_Tmp.jpg)
Table 5. The clustering results after matching to doctors
表5. 映射为医生后的聚类结果
![](Images/Table_Tmp.jpg)
Table 6. The distribution of outliers after matching to doctors
表6. 异常点映射为医生后情况表
![](Images/Table_Tmp.jpg)
Table 7. The results of abnormal detection
表7. 异常检测结果
用养蔚灵颗粒;D医生则更加偏于使用胶体果胶铋干混悬剂、曲美布汀胶囊、猴头菌颗粒、复方尿囊素片、二氯乙酸二异丙胺片、伊托必利片;G医生虽然关于慢性胃炎的处方较少,但大部分都集中在复方聚乙二醇电解质散;而E医生虽然因为异常点认定为在诊治慢性胃炎时用药异常,但并没有为病人使用固定药物。
5. 结束语
本文针对医患矛盾中的医生用药异常问题,提出一种医生用药异常检测的框架。该框架包括定性分析,定量分析和异常检测三部分。其中定量分析中集成了处方数据的耦合相似度度量方法和变色龙聚类算法。实验验证了所提出的框架能够较好的发现医生用药异常的情况。未来的工作是改进利用CASO计算处方耦合相似度的效率,以及在此框架下提出更高效的算法进行医生用药异常检测。
基金项目
国家自然科学基金(61472346, 61662086);云南省自然科学基金(2016FA026, 2015FB149)。