未经授权严禁商用,科研合作请联系作者。Email:[email protected]
作者:
辛昊,青岛大学附属青岛市第三人民医院药学部
指导老师:
曹建华,青岛大学附属青岛市第三人民医院药学部
李春凯,青岛大学附属青岛市第三人民医院药学部
思路及创意来源:
王丰,西安交通大学医学院第一附属医院药学部
信息药师技术赋能门诊自动发药系统流程重构与优化 - 中国知网 (cnki.net)
首先向王丰老师表示感谢和致敬,开创性地将该算法用于门诊自动发药系统流程重构与优化并开源了相关代码,同时也将该算法的应用撰写后发表了相关的学术论文。
在形成该思路及创意之前,笔者与王丰老师以及"1520"团队的伙伴们进行了相当多的技术沟通及软硬件共享,团队们的鼓励也对我带来了很大的支持,在此一并感谢。
同时致谢青岛大学附属青岛市第三人民医院药学部门诊药房、草药房的各位同事。
一、总体功能描述
1.开发语言
软件使用Python语言进行开发。
2.目的
本操作手册旨在指导用户正确、高效地使用FP-growth算法药品货位优化系统,帮助用户熟悉系统的各项功能和操作流程,以提高货位优化效率和质量。
3.系统简介
系统作为数据处理的辅助工具,选择指定Excel格式的数据文件后,点击“开始计算”,则对Excel数据进行获取,并按照输入的“最小支持度”与既定的算法开始处理数据,并在计算过程中实时显示计算进度的百分比。系统处理完成之后会生成三个新的Excel文件到“文件输出路径”中指定的路径。
4.使用对象
本操作手册适用于药学相关专业技术人员,包括但不限于调剂药师、配方药师、部门负责人等。
5.使用前准备
在使用本操作手册前,请确保已经具备以下条件:
(1)熟悉药学调剂及药品货位摆放相关要求
(2)具备基本的计算机操作知识和网络使用能力
(3)了解基础的信息化系统知识和概念
(4)了解FP-growth算法相关的参数和原理
6.结构说明
本操作手册按照系统的功能模块进行组织,方便用户按需查阅。
7.使用方法
用户可根据实际需求,在系统使用过程中查阅本操作手册,按照指引逐步完成操作。如遇到问题或不清楚的地方,可联系技术支持人员进行咨询或指导。
8.系统特点
基于FP-growth算法的药品货位优化程序,旨在通过挖掘药品销售或库存数据中的频繁项集,来优化药品在仓库中的存储位置,从而提高仓库管理效率、减少拣选时间和错误率。以下是该程序的系统特点:
(1)高效的数据挖掘能力
FP-growth算法应用:该程序采用FP-growth(Frequent Pattern Growth)算法,这是一种高效的频繁模式挖掘算法,能够快速从大量数据中发现经常一起出现的药品组合。
1.Apriori算法
Apriori算法是一种基于候选项集的频繁项集挖掘算法,其核心思想是通过不断剪枝来减少候选集的数量,从而有效地发现频繁项集。Apriori算法采用了一种水平方向的方法,即通过事务数据库中的所有项目来生成初步的候选项集,然后扫描事务数据库以计算每个候选项集的支持度。在生成新的候选项集时,Apriori算法利用了先验性质,即如果一个项集是非频繁的,那么它的所有子集也必定是非频繁的。这一性质帮助算法有效地减少了候选项集的数量。
然而,Apriori算法存在一个显著的问题,即可能会产生大量的候选项集,从而导致算法的效率较低。此外,Apriori算法对于大数据集来说可能不太实用,因为它需要多次扫描数据库,并在内存中存储大量的候选项集。
2.FP-Growth算法
与Apriori算法不同,FP-Growth算法采用了一种垂直方向的方法来发现频繁项集。该算法首先将数据集压缩到一个名为FP-Tree(频繁模式树)的高度压缩数据结构中,然后通过在FP树中挖掘频繁模式来发现频繁项集。FP-growth算法通过构建FP-Tree(频繁模式树)来压缩数据,只需要对数据集进行两次扫描,避免了Apriori算法中重复扫描数据库的缺点,从而显著提高了处理速度,因此它的时间复杂度低于Apriori算法。
FP-Growth算法的主要优势在于其高效的候选项集生成方式。它通过将数据集压缩到FP树中,有效地减少了内存使用和磁盘I/O操作。此外,FP-Growth算法在挖掘频繁项集时采用了递归的思想,使得它可以更快速地处理大型数据集。
然而,FP-Growth算法也存在一些局限性。首先,它需要额外的空间来构建FP树,这可能会在处理大型数据集时遇到内存限制。其次,虽然FP-Growth算法在许多情况下都比Apriori算法更快,但它仍然可能受到输入数据顺序的影响。此外,与Apriori算法相比,FP-Growth算法的实现更为复杂,这可能会增加开发和维护的难度。
3.总结
Apriori和FP-Growth算法是两种广泛使用的频繁项集挖掘算法。Apriori算法基于先验性质来减少候选项集的数量,而FP-Growth算法通过压缩数据集并利用递归思想来提高效率。在实际应用中,应根据具体的数据特征和需求选择合适的算法。对于小型数据集或低维度问题,Apriori算法可能更为合适;而对于大型数据集或高维度问题,FP-Growth算法则更具优势。此外,这两种算法都可以与其他数据挖掘技术结合使用,以更全面地了解数据的内在关联和模式。
在这里就引出了笔者采用FP-Growth算法的原因:
在用Apriori算法处理数据时候采用i9-12900H处理器计算了我院2024年半年的西成药处方支持度计数为50,耗时约八个半小时。然后转而处理某时间段的草药处方数据1.1万张,支持度计数设置为10、20、50、100、200在耗时1-2.5天不等时间内均未计算出结果--内存(64G)崩了。
虽然提高支持度计数可以减小内存占用,进而求解出高支持度计数的结果,但是草药房的老师提出了需求,希望5张以上的大处方也能纳入计算,遂开始考虑高精度的求解。
在研究应用FP-growth算法之后,测试西成药方47万张,支持度计数为5,计算时间为58秒;1.1万张草药方支持度计数为2,计算时间为40min;支持度计数为10,时间约为3min。大大地减少了数据的计算时间和内存占用,解决了时间问题以及设备硬件配置的门槛。
详见FP-growth算法药品货位优化系统简介及软件操作_哔哩哔哩_bilibili的视频。
(2) 精准的货位优化建议
频繁项集分析:通过分析药品销售或库存数据中的频繁项集,程序能够识别出哪些药品经常一起被需求或消耗,从而为这些药品分配相近的货位。
智能布局建议:基于频繁项集的分析结果,将高频共现的药品放置在相邻区域,减少拣选人员的移动距离和时间。
(3)灵活的适应性
支持多数据源:程序能够处理来自不同数据源的药品销售或库存数据,具有高度的灵活性和可扩展性。
参数可调:用户可以根据实际需求调整最小支持度阈值等参数,以适应不同的业务场景和数据特点。
(4)提升仓库管理效率
减少拣选时间:通过优化药品货位布局,减少了拣选人员在不同药品之间的移动距离和时间,提高了拣选效率。
降低错误率:将高频共现的药品放置在相邻区域,有助于减少拣选过程中的错误和遗漏。
提高患者满意度:更快的拣选速度和更低的错误率意味着更快的订单处理时间和更高的患者满意度。
综上所述,基于FP-growth算法的药品货位优化程序具有高效的数据挖掘能力、精准的货位优化建议、灵活的适应性以及提升仓库管理效率等系统特点。
二、软件用法
1、点击“选择文件”,加载要处理的文件,效果如图:
点击“开始计算”,加载要处理的文件,并继续计算,下方绿色的进度条会显示实时进度,效果如图:
下方绿色进度条进度达到100%后弹出对话框,显示“成功”的对话框,提示文本“文件成功导出到:文件输出路径”,点击“OK”对话框消失,效果如图:
4、在“文件输出路径”路径下的文件夹中会生成三个Excel文件,分别命名为“frequent_itemsets”、“itemsets”、“output”为处理后的输出数据。
- 软件处理的Excel输入数据格式
第一行不参与计算,从第二行开始每一个横行代表一张处方,每一个单元格代表处方上的一个药品:
- 软件处理的Excel输出数据格式
输出Excel文件一:《frequent_itemsets》
输出Excel文件二:《itemsets》
输出Excel文件三:《output》
三、名词解释
在FP-Growth算法中,关联规则挖掘涉及多个关键术语,包括antecedents(前项)、consequents(后项)、antecedent support(前项支持度)、consequent support(后项支持度)、support(支持度)、confidence(置信度)、lift(提升度)、leverage(杠杆率)、conviction(确信度)。以下是对这些术语在FP-Growth算法中的详细解释:
1. antecedents(前项)
定义:在关联规则中,规则左边的项集称为前项(antecedents),也称为规则头(antecedent)。
特点:前项是规则的前提条件,用于触发规则的应用。
重要性:在FP-Growth算法中,前项的选择对于挖掘出有意义的关联规则至关重要。
2. consequents(后项)
定义:在关联规则中,规则右边的项集称为后项(consequents),也称为规则尾(consequent)。
特点:后项是规则的结果,表示当前项出现时,后项也倾向于出现的趋势。
重要性:后项的选择和确定有助于揭示数据中的潜在关系和模式。
3. antecedent support(前项支持度)
定义:前项支持度是指包含前项(antecedents)的事务数占总事务数的比例。
计算公式:前项支持度=包含前项的事务数/总事务数
特点:用于衡量前项在数据集中的普遍性或重要性。
重要性:是筛选频繁项集的重要依据,只有支持度达到预设阈值的前项才能被进一步考虑。
4. consequent support(后项支持度)
定义:后项支持度是指包含后项(consequents)的事务数占总事务数的比例。
计算公式:后项支持度=包含后项的事务数/总事务数
特点:反映了后项在数据集中的普遍性或重要性。
重要性:虽然直接用于FP-Growth算法中的频率较低,但在评估规则的整体价值时仍具有参考价值。
5. support(支持度)
定义:支持度是指同时包含前项和后项的事务数占总事务数的比例。
计算公式:支持度=同时包含前项和后项的事务数/总事务数
特点:衡量了规则在数据集中的普遍性或频率。
重要性:是评估关联规则重要性的关键指标之一,只有支持度达到预设阈值的规则才被认为是有意义的。
6. confidence(置信度)
定义:置信度是指在包含前项的事务中,同时也包含后项的比例。
计算公式:置信度=同时包含前项和后项的事务数/包含前项的事务数
特点:反映了前项对后项出现的条件概率。
重要性:是评估规则可靠性的重要指标,高置信度意味着当前项出现时,后项也极有可能出现。
7. lift(提升度)
定义:提升度是指规则的置信度与后项支持度的比值。
计算公式:提升度=置信度/后项支持度
特点:衡量了规则中前项对后项出现的提升作用。
重要性:提升度大于1表示前项和后项之间存在正相关关系,且提升度越高,关联关系越强。
8. leverage(杠杆率)
定义:杠杆率是一种衡量规则重要性的指标,它考虑了规则的支持度和整体数据集的分布。
计算公式:杠杆率=支持度×(log2(支持度/前项支持度*后项支持度))
特点:能够揭示出那些虽然支持度不高,但对数据集分布有显著影响的规则。
重要性:在挖掘稀有但重要的关联规则时尤其有用。
9. conviction(确信度)
定义:确信度是另一种衡量关联规则可靠性的指标,它考虑了在包含前项但不包含后项的事务数对规则强度的影响。高确信度表明,即使在没有后项出现的情况下,前项仍然频繁出现,但这并不减弱前项出现时后项也倾向于出现的信念。
计算公式:确信度=(1−置信度)/(1−后项支持度)
注意:这个公式可能根据不同的文献或资源略有不同,但基本思想是一致的,即衡量在给定前项出现的情况下,后项不出现的难度或成本。
特点:确信度提供了一个与前项和后项支持度及置信度不同的视角来评估规则的可靠性。
重要性:在评估那些即使在没有后项出现时前项也仍然频繁的场景下,确信度是一个有用的指标。