本节目标
- 理解关联规则的核心指标(支持度、置信度、提升度)
- 掌握 Apriori 算法的原理与流程
- 了解 FP-Growth 算法的优势与应用场景
- 在 R 中使用 arules 包进行关联规则挖掘
- 将关联规则应用于医学数据(处方分析、疾病关联)
- 分析中医药预防结直肠癌术后复发的实战案例
关联规则基础概念
在大量事务记录中,自动找出那些
"经常同时出现"
的项目组合,并用量化指标衡量其关联程度。
什么是关联规则?
关联规则描述了项目之间的共现关系,形式为:\(A \Rightarrow B\)(前件 ⇒ 后件)
经典场景:购物篮分析
- T1:{牛奶, 面包, 鸡蛋}
- T2:{啤酒, 尿布, 牛奶}
- T3:{牛奶, 尿布, 面包, 啤酒}
- T4:{尿布, 啤酒}
- T5:{牛奶, 面包}
经典发现:
购买尿布的男性顾客常同时购买啤酒
医学类比
- V1:{头孢, 布洛芬, 血常规}
- V2:{二甲双胍, 胰岛素, 空腹血糖}
- V3:{ACEI, 利尿剂, 肌酐, 钾离子}
- V4:{他汀, 阿司匹林, 血脂}
- V5:{二甲双胍, 他汀, 血脂}
目标:
发现药物/检查的共现模式
事务数据格式
关联规则分析的前提是将数据整理为"事务"格式
宽表(Binary Matrix)和长表(List)
宽表与长表
宽表(Binary Matrix)
| TID | 牛奶 | 面包 | 尿布 | 啤酒 |
| T1 | 1 | 1 | 0 | 0 |
| T2 | 1 | 0 | 1 | 1 |
| T3 | 1 | 1 | 1 | 1 |
长表(List)
| visit_id | item(药物/检查) |
| V1 | 头孢 |
| V1 | 布洛芬 |
| V2 | 二甲双胍 |
| V2 | 胰岛素 |
在 R 中用 split() 按 visit_id 聚合
为什么需要宽表和长表?
宽表的优势
- 直观易读,适合人工查看
- 便于直接进行矩阵运算
- 适合稀疏度低的数据集
- 与多数统计软件兼容
长表的优势
- 节省存储空间(特别是稀疏数据)
- 易于扩展(添加新项)
- 适合流式数据处理
- 与现代数据分析工具兼容
代码练习:R 语言中的格式转换
长表转宽表(List to Binary Matrix)
# 长表数据
df = data.frame(
visit_id = c("V1", "V1", "V2", "V2"),
item = c("头孢", "布洛芬", "二甲双胍", "胰岛素")
)
# 转换为事务对象(长表格式)
transactions = split(df$item, df$visit_id)
transactions = as(transactions, "transactions")
# 转换为宽表(二元矩阵)
matrix = as(transactions, "matrix")
head(matrix)
arules 包的 transactions 类是进行关联规则分析的标准格式
核心指标:支持度、置信度、提升度
这三个指标是评估关联规则质量的关键
频繁程度、准确性、实际关联强度。
指标定义:支持度
同时包含 X 和 Y 的事务占比
衡量规则出现的频繁程度
指标定义:置信度
包含 X 的事务中同时包含 Y 的比例
= P(Y | X),条件概率
conf(X⇒Y) = supp(X∪Y) / supp(X)
指标定义:提升度
置信度相对于后件基础概率的比值
>1:正相关;=1:独立;<1:负相关
lift(X⇒Y) = conf(X⇒Y) / supp(Y)
数值计算示例
假设有 100 条就诊记录:
- 含"二甲双胍":30 条,supp(二甲双胍) = 0.30
- 含"他汀":40 条,supp(他汀) = 0.40
- 同时含二者:18 条,supp(二甲双胍∪他汀) = 0.18
规则"二甲双胍 ⇒ 他汀"的指标:
conf = 0.18 / 0.30 = 0.60
lift = 0.18 / (0.30 × 0.40) = 1.5
使用二甲双胍的患者开具他汀的概率是随机情况的 1.5 倍
Apriori 算法
最经典的关联规则挖掘算法,利用反单调性剪枝加速搜索
适用于中小规模数据。
反单调性原理
- 若项集 X 是频繁的,则 X 的所有子集也都是频繁的
- 若项集 X 是不频繁的,则包含 X 的所有超集都不频繁
这一性质可用于剪枝,减少候选集数量,提高算法效率
算法流程
- 扫描数据库:统计所有单项的支持度,得到频繁 1-项集 L₁
- 连接:将 Lₖ₋₁ 中具有相同前缀的项集合并,生成候选 k-项集 Cₖ
- 剪枝:删除 Cₖ 中包含不频繁子集的候选
- 扫描数据库:计算 Cₖ 中各候选的支持度,得到 Lₖ
- 重复:直到 Lₖ 为空
- 生成规则:对每个频繁项集枚举前后件组合,按置信度筛选
4.3 优缺点分析
优点
- 思想直观,便于理解
- 反单调剪枝减少候选空间
- 实现简单,容易调试
缺点
- 多次扫描数据库,I/O 开销大
- 候选项集数量可能爆炸式增长
- 内存对大规模数据不友好
代码练习:R中使用 arules::apriori
# 安装包
install.packages(c("arules", "arulesViz"))
# 加载包和数据
library(arules)
data("Groceries")
# 运行 Apriori
rules <- apriori(
Groceries,
parameter = list(
supp = 0.01, # 最小支持度
conf = 0.5, # 最小置信度
minlen = 2, # 至少 2 个项
maxlen = 5 # 最多 5 个项
)
)
# 按提升度排序并查看
rules_sorted <- sort(rules, by = "lift", decreasing = TRUE)
inspect(head(rules_sorted, 10))
FP-Growth 算法
针对 Apriori 的性能瓶颈提出改进
将事务数据库压缩存储为 FP-Tree
然后在树上递归挖掘
FP-Tree 构建步骤
- 第一次扫描:统计各项支持度,删去不频繁项,按支持度从高到低排序
- 第二次扫描:对每条事务,将频繁项按排序插入 FP-Tree,相同前缀共享路径
FP-Growth 只需两次扫描数据库,不生成显式候选项集
与 Apriori 对比
Apriori
- 多次扫描数据库
- 生成显式候选项集
- 适合中小规模数据
- 实现简单,易于理解
FP-Growth
- 仅两次扫描数据库
- 不生成显式候选项集
- 适合大规模数据
- 内存效率更高
规则评估与筛选
除了基本的支持度、置信度、提升度
还有其他指标可以帮助我们筛选有价值的规则
提升度的深入理解
- lift > 1:X 与 Y 正相关,规则有价值
- lift = 1:X 与 Y 相互独立,规则无意义
- lift < 1:X 与 Y 负相关,规则反直觉
其他评估指标
- 杠杆率(Leverage):supp(X∪Y) - supp(X)×supp(Y)
- 确信度(Conviction):(1 - supp(Y)) / (1 - conf(X⇒Y))
- 覆盖度(Coverage):supp(X),规则的应用范围
提升度是最常用的指标
它直接衡量了规则的实际关联强度
不受数据分布影响。
医学场景应用
关联规则在医学数据分析中有着广泛的应用,特别是在
处方分析、疾病关联、检查项目组合等方面。
数据整理为"事务"
- 将一次就诊视为一个事务
- 提取药物、检查项目作为项
- 处理缺失值和重复项
- 转换为事务格式
规则挖掘与解读
- 设置合理的支持度和置信度阈值
- 按提升度排序,筛选有意义的规则
- 结合医学专业知识解读规则
- 验证规则的临床价值
医学数据中,规则的临床意义比纯统计意义更重要,需要结合专业知识进行解读。
实战案例:中医药预防结直肠癌术后复发
通过关联规则分析,发现中医药预防结直肠癌术后复发的核心草药组合及其潜在机制。
研究背景
- 结直肠癌(CRC)是常见恶性肿瘤,复发是患者死亡的主要原因
- 中医药在延缓肿瘤进展和提高生活质量方面显示显著疗效
- 处方策略存在差异,对配伍规律的系统理解不足
研究方法
- 收集 38 个用于预防和治疗 CRC 复发的中医药处方
- 使用基于 Apriori 的关联规则分析草药配伍规律
- 应用复杂网络社区算法探索关键节点网络
- 进行基因本体论(GO)和通路(KEGG)富集分析
研究结果:草药组成与特性分析
- 共包含 185 种不同的草药,涵盖了中医常用的清热、止血、化瘀等类别
- 大多数草药具有收敛和苦味特性,对应寒凉性质,符合中医对出血性疾病的治疗原则
- 核心功能:清热、止血、化瘀、燥湿,这些功能组合体现了中医治疗出血性疾病的整体思路
- 高频草药:三七、黄芪、当归等,这些草药在临床中被广泛用于止血和活血化瘀
研究结果:关联规则分析
- 共识别出 36 条有效关联规则,其中提升度大于 3 的规则有 12 条
- 最高提升度规则:"莪术、黄芪→三棱"(提升度 11),表明这三味药在处方中经常配伍使用
- 置信度:100%(当处方中存在莪术和黄芪时,一定有三棱),说明这是一个非常稳定的配伍组合
- 其他重要规则:"三七→当归"(提升度 5.2)、"蒲黄→五灵脂"(提升度 4.8)等经典配伍
网络分析与验证
网络分析
- 草药可分为 6 个独立社区
- 黄芪和莪术属于同一社区
- 进一步证实了三种草药之间的密切配伍关联
实验验证
- 验证核心草药组合的活性成分(如槲皮素和山柰酚)
- 抑制结直肠癌细胞的增殖和迁移
- 诱导细胞凋亡,发挥潜在的抗肿瘤作用
研究结论
- 黄芪、三棱和莪术是预防 CRC 复发的核心草药组合
- 潜在机制可能通过调节多个与肿瘤发生发展相关的信号通路实现
- 为中医药在 CRC 术后预防和治疗中的临床应用提供了科学依据
- 有助于标准化中医药处方策略,减少因医生经验差异导致的处方变异性
完整流程
- 数据收集与预处理:收集事务数据,处理缺失值和异常值
- 转换为事务格式:宽表或长表格式
- 选择算法:Apriori(中小规模)或 FP-Growth(大规模)
- 设置参数:最小支持度、最小置信度、最大项数
- 挖掘关联规则:运行算法生成规则
- 评估与筛选:按提升度等指标筛选有意义的规则
- 结果解读与验证:结合专业知识解读,必要时实验验证
- 可视化与报告:使用网络图等方式展示结果
练习与小结
通过练习巩固所学知识,总结关联规则分析的核心要点。
随堂练习
- 基于购物篮示例(T1-T5),手动识别 2-3 条可能的关联规则
- 将长表格式的医疗数据转换为宽表(Binary Matrix)格式
章节大练习
- 基于 8 条患者就诊记录,计算指定规则的支持度、置信度和提升度
- 判断哪些规则是有意义的(提升度 > 1)
- 思考这些规则在临床实践中的指导意义
小结
- 关联规则是发现数据中隐藏模式的有力工具
- 核心指标:支持度(频率)、置信度(准确率)、提升度(实际关联强度)
- 经典算法:Apriori(直观易理解)和 FP-Growth(高效)
- 医学应用:处方分析、疾病关联、检查项目组合等
- 实战案例:中医药预防结直肠癌术后复发的关联规则分析