08 · 关联规则算法

医学数据分析与数据挖掘 · 与讲义 08 配套

← 演示列表 · 进入讲义

本节目标

  • 理解关联规则的核心指标(支持度、置信度、提升度)

  • 掌握 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牛奶面包尿布啤酒
T11100
T21011
T31111

长表(List)

visit_iditem(药物/检查)
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 的事务占比

衡量规则出现的频繁程度

supp(X⇒Y) = |X∪Y| / |T|

指标定义:置信度

包含 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. 扫描数据库:统计所有单项的支持度,得到频繁 1-项集 L₁

  2. 连接:将 Lₖ₋₁ 中具有相同前缀的项集合并,生成候选 k-项集 Cₖ

  3. 剪枝:删除 Cₖ 中包含不频繁子集的候选

  4. 扫描数据库:计算 Cₖ 中各候选的支持度,得到 Lₖ

  5. 重复:直到 Lₖ 为空

  6. 生成规则:对每个频繁项集枚举前后件组合,按置信度筛选

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 构建步骤

  1. 第一次扫描:统计各项支持度,删去不频繁项,按支持度从高到低排序

  2. 第二次扫描:对每条事务,将频繁项按排序插入 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),规则的应用范围
提升度是最常用的指标
它直接衡量了规则的实际关联强度
不受数据分布影响。

医学场景应用

关联规则在医学数据分析中有着广泛的应用,特别是在

处方分析、疾病关联、检查项目组合等方面。

数据整理为"事务"

  1. 将一次就诊视为一个事务

  2. 提取药物、检查项目作为项

  3. 处理缺失值和重复项

  4. 转换为事务格式


规则挖掘与解读

  1. 设置合理的支持度和置信度阈值

  2. 按提升度排序,筛选有意义的规则

  3. 结合医学专业知识解读规则

  4. 验证规则的临床价值
医学数据中,规则的临床意义比纯统计意义更重要,需要结合专业知识进行解读。

实战案例:中医药预防结直肠癌术后复发

通过关联规则分析,发现中医药预防结直肠癌术后复发的核心草药组合及其潜在机制。

研究背景

  • 结直肠癌(CRC)是常见恶性肿瘤,复发是患者死亡的主要原因

  • 中医药在延缓肿瘤进展和提高生活质量方面显示显著疗效

  • 处方策略存在差异,对配伍规律的系统理解不足

研究方法

  • 收集 38 个用于预防和治疗 CRC 复发的中医药处方

  • 使用基于 Apriori 的关联规则分析草药配伍规律

  • 应用复杂网络社区算法探索关键节点网络

  • 进行基因本体论(GO)和通路(KEGG)富集分析

研究结果:草药组成与特性分析

  • 共包含 185 种不同的草药,涵盖了中医常用的清热、止血、化瘀等类别
  • 大多数草药具有收敛和苦味特性,对应寒凉性质,符合中医对出血性疾病的治疗原则
  • 核心功能:清热、止血、化瘀、燥湿,这些功能组合体现了中医治疗出血性疾病的整体思路
  • 高频草药:三七、黄芪、当归等,这些草药在临床中被广泛用于止血和活血化瘀

研究结果:关联规则分析

  • 共识别出 36 条有效关联规则,其中提升度大于 3 的规则有 12 条
  • 最高提升度规则:"莪术、黄芪→三棱"(提升度 11),表明这三味药在处方中经常配伍使用
  • 置信度:100%(当处方中存在莪术和黄芪时,一定有三棱),说明这是一个非常稳定的配伍组合
  • 其他重要规则:"三七→当归"(提升度 5.2)、"蒲黄→五灵脂"(提升度 4.8)等经典配伍

网络分析与验证

网络分析

  • 草药可分为 6 个独立社区
  • 黄芪和莪术属于同一社区
  • 进一步证实了三种草药之间的密切配伍关联

实验验证

  • 验证核心草药组合的活性成分(如槲皮素和山柰酚)
  • 抑制结直肠癌细胞的增殖和迁移
  • 诱导细胞凋亡,发挥潜在的抗肿瘤作用

研究结论

  • 黄芪、三棱和莪术是预防 CRC 复发的核心草药组合

  • 潜在机制可能通过调节多个与肿瘤发生发展相关的信号通路实现

  • 为中医药在 CRC 术后预防和治疗中的临床应用提供了科学依据

  • 有助于标准化中医药处方策略,减少因医生经验差异导致的处方变异性

关联规则分析步骤

从数据收集到结果报告的完整流程

完整流程

  1. 数据收集与预处理:收集事务数据,处理缺失值和异常值

  2. 转换为事务格式:宽表或长表格式

  3. 选择算法:Apriori(中小规模)或 FP-Growth(大规模)

  4. 设置参数:最小支持度、最小置信度、最大项数

  5. 挖掘关联规则:运行算法生成规则

  6. 评估与筛选:按提升度等指标筛选有意义的规则

  7. 结果解读与验证:结合专业知识解读,必要时实验验证

  8. 可视化与报告:使用网络图等方式展示结果

练习与小结

通过练习巩固所学知识,总结关联规则分析的核心要点。

随堂练习

  1. 基于购物篮示例(T1-T5),手动识别 2-3 条可能的关联规则

  2. 将长表格式的医疗数据转换为宽表(Binary Matrix)格式

章节大练习

  1. 基于 8 条患者就诊记录,计算指定规则的支持度、置信度和提升度

  2. 判断哪些规则是有意义的(提升度 > 1)

  3. 思考这些规则在临床实践中的指导意义

小结

  • 关联规则是发现数据中隐藏模式的有力工具

  • 核心指标:支持度(频率)、置信度(准确率)、提升度(实际关联强度)

  • 经典算法:Apriori(直观易理解)和 FP-Growth(高效)

  • 医学应用:处方分析、疾病关联、检查项目组合等

  • 实战案例:中医药预防结直肠癌术后复发的关联规则分析

谢谢

返回演示列表 · 进入 08 讲义