跳到主要内容

机器学习与数据挖掘

Apriori 关联规则

在事务型 0/1 项或展开后的定类项上找频繁共现,并用支持度、置信度与提升度判断规则是否优于独立出现。

更新日期 2026-08-29 机器学习

这篇能回答什么

Apriori 回答的是「哪些项目经常一起出现,以及看见前项时后项是否比随机更常见」。它先按最小支持度找出频繁项集,再按置信度生成 A→B 规则,最后用提升度判断 A 与 B 是相互促进、彼此独立,还是此消彼长。StatsX 对已经是 0/1 的列直接当购物篮项;多分类列会先展开为哑变量项。

适合:多选题勾选、症状是否出现、商品是否入篮这类事务共现。教学示例用学生问卷里五列厌学勾选项:不想上数学课、不愿完成数学作业、一提到数学就感到烦躁、考试前因数学感到焦虑不安、故意逃避数学相关的活动。

什么时候不该用

不要把连续成绩、金额或编号塞进项目变量——购物篮需要的是「出现 / 不出现」。两个定类变量的独立性检验应改用卡方检验或列联表。多选题只想报告「选中率」而不是规则,用多重响应。没有事务结构、只想把人分成群,用K-Means。

如何选择方法

先分清你要的是共现规则、交叉频数还是选项普及率。Apriori 输出的是「若 A 则 B」的条件概率与提升度;卡方检验的是整张交叉表是否偏离独立;多重响应只清点各选项被勾了多少次。

  • Apriori 关联规则:≥2 个项目变量(0/1 或定类),输出规则、支持度、置信度、提升度。

  • 多重响应:同一套多选题,只报告响应率与普及率,不生成 A→B。

  • 列联表 / 卡方:两个定类字段的格子人数与独立性,不扫全部项集。

  • K-Means:定量画像分群,不是购物篮规则。

输入、输出与限制

输入

项目变量为分组定类或普通定类。0/1、真/假列原样作为一项;其它取值会按水平展开成「列名_水平」。不要把准标识符、高基数编号当作项。

  • 项目变量:最少 2 个,最多 50 个。

  • 默认最小支持度 0.05,默认最小置信度 0.50;稀疏二值篮在无规则时会把置信度逐级放到 0.40、0.35、0.30、0.25、0.20。

输出

结果表列:关联规则(前项 ➔ 后项)、支持度、置信度、提升度。规则按提升度再按置信度降序,最多保留 50 条。同时输出以提升度为横轴的规则排序图与文字洞察。

产品限制

  • 有效事务至少 10 行;超过 20000 行会拒绝,需先筛选。

  • 展开后的唯一项不得超过 40,否则请合并稀疏水平或少选列。

  • 置信度自动放宽时,表注会写实际阈值,论文应引用该值而不是默认 0.50。

  • 这些上限来自 StatsX(mlxtend Apriori),不要用 SPSS Modeler 的默认支持度或「只输出提升度>1」的过滤器逐格核对。

案例

研究问题。 学生问卷把厌学拆成五道「有 / 无」勾选,希望看这些表现是否成套出现,而不是只报告每一题的选中率。

教学示例来自学生问卷「有效样本数据」,有效事务 500。五列都是 0/1:不想上数学课 222 人勾选,感到烦躁 98 人勾选。挖掘后只留下 1 条过线规则:[厌学表现情况_一提到数学就感到烦躁] → [厌学表现情况_不想上数学课],支持度 0.07,置信度 0.3571,提升度 0.8044。置信度已从 0.50 放到 0.35。下载后勾选这五列即可复现。

下载教学示例表(学生问卷)

在 StatsX 中操作

  1. 步骤 1 · 上传表格

    打开工作台,将 Excel / CSV / JSON 拖入上传区。本案例使用学生问卷 xlsx,确认工作表为「有效样本数据」。单文件不超过 20 MB。

  2. 步骤 2 · 查看画像与质量

    确认五列厌学表现均为二元 0/1,缺失可接受。不要把学生性别、就读年级这类人口学字段和厌学项混在同一批项目变量里,除非你明确想挖「年级×症状」共现。

  3. 步骤 3 · 选择「Apriori 关联规则」

    在算法目录搜索「Apriori」或「关联规则」并点选。适合/可用标记仅供参考。

  4. 步骤 4 · 指定项目变量并运行

    项目变量勾选厌学表现情况_不想上数学课、厌学表现情况_不愿完成数学作业、厌学表现情况_一提到数学就感到烦躁、厌学表现情况_考试前因数学感到焦虑不安、厌学表现情况_故意逃避数学相关的活动(至少 2 列)。点击运行分析。

  5. 步骤 5 · 阅读结果

    先看表注里的实际置信度阈值,再读提升度是否大于 1。本例提升度小于 1,不能写成「烦躁就会逃课」的促销式结论。

StatsX 工作台上传学生问卷
将教学示例表拖入工作台上传区。
列画像确认厌学勾选项
列画像确认五列厌学表现为二元项。
在目录中选择 Apriori 关联规则
在算法目录中选定「Apriori 关联规则」。
为 Apriori 指定五列厌学项目
项目变量勾选五列 0/1 厌学表现后运行。

如何阅读输出

下表由同一份教学示例在 StatsX 中运行 Apriori 得到。有效事务 500,展开后项数为 5。唯一过线规则是烦躁 → 不想上课:支持度 0.07(约 35 人同时勾选),置信度 0.3571(烦躁者里约 36% 也勾了不想上课),提升度 0.8044。全样本「不想上课」底线约 44%,因此这条规则的条件概率还低于底线。

Apriori 强关联规则汇总表
关联规则 (前项 ➔ 后项)支持度 (Support)置信度 (Confidence)提升度 (Lift)
[厌学表现情况_一提到数学就感到烦躁] → [厌学表现情况_不想上数学课]0.070.35710.8044

左右滑动可查看完整表格

支持度表示该规则在全局发生的概率;置信度表示在前项发生的条件下,后项发生的条件概率;提升度>1代表两者正相关,通常提升度越大规则越有效。 实际使用置信度阈值=0.35(已由默认 0.5 自动放宽以适配稀疏二值项)。

Apriori 强关联规则汇总表
工作台中的关联规则表,数字应与上表一致。
关联规则提升度排序图
点的位置表示提升度,点大小与颜色分别提示支持度与置信度;本例仅一条规则且 Lift<1。

【Apriori关联规则】样本量=500,项数=5,规则数=1,支持度≥0.05,置信度≥0.35(置信度已由 0.5 自动放宽至 0.35)。

【提升度解读】最强规则 Lift=0.80<1,前项与后项呈负向共现(此消彼长)。

解读顺序建议:有效事务与项数 → 表注是否写了置信度放宽 → 支持度是否大到有业务意义 → 置信度相对后项底线 → 提升度是否大于 1。本例最能说明「支持度 / 置信度 ≠ 有用规则」:35.7% 的置信度读起来像「超过三分之一」,但提升度 0.80 说明前项并没有提高后项出现的机会。

理论与公式

把一条事务看成项的集合。项集 X、Y 不交。支持度是 X 与 Y 同时出现的事务比例;置信度是看见 X 之后看见 Y 的条件概率;提升度把该条件概率与 Y 的边际概率相比:

提升度大于 1 表示正共现,等于 1 表示独立,小于 1 表示负共现。Apriori 利用频繁项集的向下封闭性:若某项集不频繁,它的超集也不必再数。默认先在支持度 0.05 下生成频繁项集,再按置信度过滤规则。

注意事项

  • 置信度高、提升度小于 1 时,规则只是在重复一个本来就很常见的后项,或甚至低于底线。

  • 稀疏勾选会触发置信度自动放宽;写方法时必须抄表注里的实际阈值。

  • 定类列展开后项数膨胀很快,城市×装修这类高基数组合容易撞上 40 项上限。

  • 规则不是因果:同时勾选不等于「烦躁导致不想上课」。

  • 李克特 1–5 分若不当 0/1 处理,会被拆成五个水平项,解释会变成「打 4 分 → 打 5 分」,通常没有购物篮含义。

  • 超过 20000 行需先抽样或筛选,产品不会静默截断。

常见问题

参考文献

  • Agrawal, R., Srikant, R. Fast algorithms for mining association rules[C]//Proceedings of the 20th International Conference on Very Large Data Bases. 1994: 487–499.

  • Han, J., Kamber, M., Pei, J. Data Mining: Concepts and Techniques[M]. Morgan Kaufmann.

  • 贾俊平. 统计学[M]. 中国人民大学出版社.