回复我们公众号“1号程序员”的“E001”可以获取《BAT机器学习面试1000题》下载链接。[关注“1号程序员”,并回复:【E001】]
本文是以下系列教程的第一篇文章:
- 第1部分(本文):过程挖掘、数据预处理和初始数据探索。
- 第2部分:使用PM4Py(Python)库应用Alpha Miner算法进行过程发现。
- 第3部分:其他过程发现算法和模型表示。
- 第4部分:更全面的模型,集成控制过程、时间(如瓶颈、等待时间)、资源(如人员能力和绩效、人员间关系、科室/病房能力和绩效)、病例属性(如患者人口特征、临床状况)等。
我们将学习以医疗保健为应用场景的一系列动手案例。文末提供本文中涉及所有数据和代码的获取方式。
医疗保健中的过程挖掘
近年来,医疗记录的数字化和医疗过程的系统化使得越来越多的数据从复杂的医疗过程中生成。使用过程挖掘技术来优化和改进医疗过程,以提高护理质量和效率的研究兴趣也越来越浓厚。这些技术已被用于:
- 发现过程并在过程模型中描述它们。不同的图形语言,如petri网、直接跟随图和业务过程模型可以用来表示这些模型。
- 通过分析吞吐量和花费在每个事件上的时间,发现瓶颈并识别提高效率的机会。
- 确定实际医疗过程在多大程度上符合良好实践指南和治疗路径。
过程是什么?
在过程挖掘中,过程是为达到特定目标或结果而执行的事件(离散的动作)序列。例如,我们可以把每个患者的住院就诊描述为一个过程,从他们入院到出院。在医院里发生的每一件事都构成了这个过程。
案例、事件和资源的定义
为了进行过程挖掘,事件日志必须包含:
- 个案标识符,用以通过过程中的事件追踪实体,例如患者id、医生id;
- 事件名称/描述/标识符,它为我们提供了过程中事件类型的句柄;
- 时间戳(与每个事件相关联),它允许我们确定事件的顺序和持续时间。
您还可以选择拥有与每个事件相关的资源,例如所涉及的设备或医疗专业人员。除了时间戳和资源之外,事件属性也是可能的,例如事务信息、成本。对于病例,属性也是可能的,例如,患者年龄,诊断,结果,流动时间,上下文属性。
首先要确定的是我们试图找出什么,以及我们将哪些列作为案例、事件和(可选)资源来处理。由此,您将能够决定将哪一列视为案例,将哪一列视为事件,以及将哪一列视为资源(可选)。
完整示例
数据示例:
假设我们的目标是更好地理解患者经历的不同诊疗过程,案例就与patient栏相关联,事件与action栏相关联,资源与resource栏相关联(但如果我们有不同的目标,我们可能需要选择不同的映射,例如,如果我们是从医生的角度而不是从患者的角度来研究过程,我们可能会将resource栏视为案例)。
准备和探索事件日志
准备事件日志的第一步是计算每个事件的相对时间,即事件发生相对于过程开始的时间。
散点图
为了初步了解过程的具体细节,知道该过程“看起来像什么”,将(相对)时间内与每个案例相关的事件可视化是很有用的。这可以用过程挖掘中常用的“虚线图”来完成。您可以使用Python中的散点图或条形图来实现这一点,它根据时间绘制每个案例的事件序列。
散点图也可以用来了解绝对时间内的事件流,例如,是否有定期的病例,是否有每周或每天的趋势。
这显示了随着时间的推移,案例的稳定移动。
您还可以通过绘制与资源相关的事件来研究与资源相关的事件。
要研究每周趋势,首先需要将时间戳转换为每周的天数。这次您应该使用抖动图而不是条形图,因为x轴(星期几)是类别变量。
事件过滤
您可能还想要了解的是,哪些事件是所有过程共享的,哪些不是,因为在过程挖掘中,我们感兴趣的是非共享差异事件。
在本例中,首次会诊、验血、二次会诊、体检和最终会诊是所有患者共有的事件,而用药、外科和X光扫描是差异事件。
在下一篇文章中,我们将开始使用pm4py库来研究过程发现相关模型。