一种基于电子病历的诊疗路径发现方法
技术领域
本发明涉及一种基于电子病历的诊疗路径发现方法,属于数据挖掘领域。
背景技术
电子病历是对单个患者或患者群体的医疗信息的系统收集。随着计算机软硬件技术的快速发展,电子病历越来越容易获得。目前,电子病历已成为生物医学信息学研究人员开展研究的一种十分重要的资源。探讨病人电子病历中事件之间的时间关系是生物医学信息学中的一个重要问题,其结果可以揭示病人面临的疾病状况。
发明内容
探索医学事件之间的时间关系方面的一个代表性的策略是时间抽象,时间抽象类型的方法需要原始序列具有数值和每个事件的持续时间这两个条件,但是,一般的电子病历数据库都比较稀疏,不能同时满足上述两个条件,我们将这类医疗事件称为在时间节点上的标称型医疗事件序列(其中序列中任何一对事件之间的关系简化为两种类型,即同时发生或一个事件发生在另一个事件之前)。因此,我们提出了一个流程,用于对在时间节点上的标称型医疗事件序列进行模式挖掘。
结果显示,我们提出的流程和解决方案,与现有的解决方案相比,我们的方法更加实用,在一定程度上能够提高预测患者发病风险的预测性能。
本发明采用的技术方案具体如下:
(1)构造序列
由于电子病历包含各种类型的病人信息(诊断、实验室、药物、程序等),序列构建器以统一的格式标准化这些不同的信息,在格式标准化时我们使用了一个四列表,包括患者ID、事件ID、时间戳ID和事件值。我们还构建了三个参考表,包括每个患者ID的详细信息(例如,相应的姓名、出生日期、性别等)、事件ID(例如,事件类型和事件名称)和时间戳ID。在信息标准化之后,序列构造器抓取不同的数据源(来自诊所,药房,实验室报告等)并将它们集成,通过根据发生时间来连接发生在患者身上的所有医疗事件,由此构建每个患者的医疗事件序列。
(2)对序列进行预处理
序列预处理器的主要任务是使用一组频繁子集(项集)来表示每个同时并发事件,支持度大于或等于我们设定支持度的项集称为频繁子集。这里,我们使用一种双向排序方法来将同时并发事件分解为频繁子集组成。
(3)挖掘频繁模式
我们使用了一种高效的序列模式挖掘方法(SPAM)来挖掘频繁的时间序列模式。
进一步的,所述步骤(2)的具体过程为:
利用双向排序分解方法对同时发生的医疗事件进行预处理,ABCDE表示5个同时并发事件。
步骤1:首先根据长度对医疗事件的频繁子集进行分类排序,然后对于具有相同长度的频繁子集将根据其观察到的频率进行分类排序。
步骤2:选择该医疗事件中一个最长且最频繁的子集,将该子集添加到集合Q中。
步骤3:对医疗事件序列中剩余的子集继续执行步骤2,直到剩余的事件子集长度为1。则同时发生的医疗事件集合可分解为集合Q中的若干个子集。
进一步的,所述步骤(3)的具体过程为:
使用序列模式挖掘(SPAM)方法对预处理后的医疗事件序列集进行模式挖掘。
首先介绍一些定义。
定义1.事件序列β=(β1,β2,...,βm)(βi∈Σ)是事件的有序列表,其中Σ是事件字典,m为事件的个数,i代表序列β的索引,βi表示第i个项集,βi发生在βi+1之前(或同时发生)。
定义2.序列ζ=(ζ1,ζ2,...,ζn)被定义为另一个序列β=(β1,β2,...,βm)的子序列,如果满足1≤i1≤i2≤...≤in≤m和ζ1=βi1,ζ2=βi2,...,ζn=βin,则记作其中n为序列ζ中事件的个数,in为序列ζ在序列β中的索引。
确定子序列(或模式)是否频繁的关键思想是支持度,其定义如下:
定义3.对于序列集S={β1,β2,...,βn},子序列ζ的支持度是指包含ζ的所有序列在S中所占的比例,其中βi为事件序列,n为事件序列的个数。
如果序列集S中的子序列的支持度超过了我们设定的支持度,那么对于序列集S,这个子序列是频繁的,被称为序列模式,其中子序列在S中出现的频率被称为支持度。
模式增长是从序列中检测频繁模式的常用策略。该策略从一个空的频繁顺序模式集F={}开始,然后检查∑中每个事件的支持度。
支持度超过设定的支持度的事件将被添加到F中。之后以两种方式对模式进行扩展:序列扩展和项集扩展,其中序列扩展代表事件β发生在序列ζn之后。项集扩展表示事件β和序列ζn同时发生。在对模式进行多次扩展后,将得到所有候选模式。
定义4.对包含事件β的序列ζ=(ζ1,ζ2,...,ζn)进行序列扩展操作,记作ζ→β,是在ζ的末尾附加β,使得β在ζn之后发生。
定义5.对包含事件β的序列ζ=(ζ1,ζ2,...,ζn)进行项集扩展操作,记作ζ,β,是在ζ的末端添加β,使得β和ζn同时发生。
通过对长度为l的频繁模式进行扩展,进而得到长度为l+1的所有候选模式,其中长度表示模式中包含的事件数。然后判断其支持度,保留频繁的序列模式。算法从l=1开始迭代,第l次迭代将得到长度为l的频繁序列,过程持续直到不能通过模式增长得到频繁的序列模式为止。
我们使用了一种基于位图序列的序列模式挖掘(SPAM)方法。在位图表示中,每个序列β由|β|×|Σ|的位图B(β)表示,其中|β|是β的长度,|Σ|是Σ的基数的长度,如果在β的第i个时间节点处观察到了D中的第j个事件,则B(β)(i,j)=1,否则B(β)(i,j)=0。我们使用序列扩展识别出第一次出现A的位置,并将其对应的位值设置为0,其他位值设置为1(此转换表示为T(A)),然后对T(A)和B执行AND操作,其中事件B是图4中的示例序列;如果在项集扩展中,则直接对A和B执行AND操作。
步骤1:设有序列集S={β1,β2,...,βn},对S中的所有序列构建位图表示;
步骤2:设置输出的频繁模式集为F={};
步骤3:计算所有单个事件频率,并将频率高于设定支持度的单个事件添加到F中;
步骤4:对F中的每一个单个事件β执行模式增长的步骤,并将频率高于设定支持度的候选模式添加到F中;
步骤5:最后得到频繁模式集F;
附图说明
本发明的上述方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的诊疗路径发现方法的流程图;
图2为本发明实施例的双向排序分解方法的示意图;
图3为本发明实施例的序列模式增长过程的示意图;
图4为本发明实施例的序列模式挖掘方法的基本思想的示意图;
图5为本发明实施例的序列模式挖掘方法的基本思想的示意图;
具体实施方式
本发明的目的、优点和特点,将通过下面优选实施例的非限制性说明进行图示和解释。这些实施例仅是应用本发明技术方案的典型范例,凡采取等同替换或者等效变换而形成的技术方案,均落在本发明要求保护的范围之内。
本发明揭示了一种基于电子病历的诊疗路径发现方法,该方法首先通过收集电子病历信息来构建每个患者的医疗事件序列,我们将医疗事件序列中任何一对事件之间的关系简化为两种类型,即同时发生或一个事件发生在另一个事件之前。
具体地,该方法包括以下步骤:
S1步骤:通过根据电子病历中疾病的发生时间来连接发生在患者身上的所有医疗事件,由此构建每个患者的医疗事件序列;
S2步骤:使用序列预处理器对医疗事件序列进行预处理。主要任务是使用一组频繁子集(项集)来表示每个同时并发事件,支持度大于或等于我们设定支持度的项集称为频繁子集。这里,我们使用一种双向排序方法来将同时并发事件分解为频繁子集组成。
S3步骤:我们使用了一种高效的序列模式挖掘方法来挖掘频繁的时间序列模式。
具体地,所述S1步骤包括以下步骤:
根据包含各种类型病人信息(诊断、实验室、药物、程序等)的电子病历数据集,序列构建器以统一的格式标准化所有这些不同的信息,在格式标准化时我们使用了一个四列表,包括患者ID、事件ID、时间戳ID和事件值。我们还构建了三个参考表,包括每个患者ID的详细信息(相应的姓名、出生日期、性别等)、事件ID(事件类型和事件名称)和时间戳ID。在信息标准化之后,序列构造器抓取不同的数据源(来自诊所,药房,实验室报告等)并将它们集成。
具体地,所述S2步骤包括以下步骤:
1、首先根据长度对医疗事件的频繁子集进行分类排序,然后对于具有相同长度的SE将根据其观察到的频率进行分类排序。2、然后选择该医疗事件中一个最长且最频繁的子集,将该子集添加到集合Q中。之后对医疗事件中剩余的子集继续执行步骤2,直到剩余的事件子集长度为1。则同时发生的医疗事件集合可分解为集合Q中的若干个子集。这里给出了一个例子来说明同时并发事件的分解过程。ABCDE是需要被分解为用频繁子集表示的同时并发事件。利用双向排序分解方法,首先根据长度对频繁子集进行分类,然后对于具有相同长度的频繁子集将根据其观察到的频率进行分类。为了分解ABCDE,我们的第一个方法是检查该医疗事件中最长和最频繁的频繁子集。ABC和ACE是最长的频繁子集,它们都是ABCDE的子集。再根据观察频率,我们选择观察频率较高的子集ABC。由于ABCDE-ABC=DE,对DE执行相同的步骤,直到剩余的频繁子集长度为1。由于在序列中没有长度为2的DE的子集,所以我们将寻找长度为1的子集。D比E出现的更加频繁,所以选择D。由于DE-D=E,所以下一个子集是E。因此,在经过排序分解过程之后,ABCDE被分解为ABC,D,E,这意味着包含5个事件的同时并发事件被分解为由3个频繁子集表示。通过S2步骤,降低了模式挖掘的计算复杂性。
具体地,所述S3步骤包括以下步骤:
设有序列集S={β1,β2,...,βn},对S中的所有序列构建位图表示,设置输出的频繁模式集为F={}。计算所有单个事件频率,并将频率高于设定支持度的单个事件加到F中。这里,我们将支持度分别设为0.1,0.2,0.3,0.4,0.5,结果将得到5个不同支持度下的频繁模式集。然后对F中的每一个单个事件β执行模式增长的步骤,通过模式增长得到候选模式,将支持度大于设定支持度的候选模式添加到F中,进而得到频繁模式集F。本方法在充血性心力衰竭的电子病历数据集上进行了测试,结果显示该方法实现了在原始医疗序列缺乏相关数值和单个事件持续时间时对序列中频繁模式的挖掘功能。