R 语言里面做关联规则挖掘,核心依靠 arules 这个扩展包,最经典算法就是 Apriori,关联规则算法主要用来挖掘事务数据里面项集之间的关联关系,最典型场景就是购物篮分析,找出买了 A 商品之后大概率还会买 B 商品这种搭配规律,算法核心指标有支持度 置信度 提升度三个,学习的时候要先理解这三个指标含义,再掌握数据格式转换,也就是普通数据转成事务类型,之后调用 apriori 函数生成规则,最后用 arulesViz 包做可视化展示,很多初学者容易踩坑,原始数据是宽表格式,没有转成 transaction 事务对象就直接跑算法,代码直接报错,还有就是支持度置信度阈值设置不合理,阈值太高挖不出规则,阈值太低生成成千上万条无效冗余规则,下面分层讲解原理 环境准备 代码流程 参数调优 结果解读。
关联规则核心指标
支持度 代表包含前项加后项这个组合的事务,占全部事务的比例,用来衡量这个组合出现的普遍程度
置信度 在已经购买前项的前提下,同时购买后项的概率,衡量规则的可靠程度
提升度 置信度除以后项本身的支持度,提升度大于 1 代表前项和后项是正相关,数值越大关联越强,等于 1 代表没有关联,小于 1 代表负相关
环境准备
第一步 打开 R 或者 RStudio
第二步 安装 arules 包,执行 install.packages 安装 arules
第三步 安装可视化包 arulesViz,install.packages 安装 arulesViz
第四步 加载包 library arules library arulesViz
注意新版 R 语言版本,安装包的时候如果提示依赖包缺失,要把依赖包一并安装,Linux 系统还需要提前配置编译环境
数据格式转换重点
关联规则算法要求输入是 transaction 事务格式,常见原始数据有两种
第一种 列表格式,每一条事务是一个向量,里面存放本次交易所有商品
第二种 二元矩阵宽表,行代表每一笔交易,列代表商品,单元格是 1 代表购买,0 代表没有购买
转换函数 as,把数据转为 transaction 对象,转换之后可以用 inspect 查看事务内容,summary 查看事务统计信息
Apriori 算法执行步骤
第一步 准备购物篮事务数据,完成事务格式转换
第二步 设置最小支持度 minSupport,最小置信度 minConfidence,还有最小项集长度 minlen
第三步 调用 apriori 函数,传入事务对象和阈值参数,生成 rules 规则对象
第四步 使用 inspect 函数打印规则,提取前项后项支持度置信度提升度
第五步 根据提升度排序,筛选高价值规则,过滤冗余规则
第六步 使用 arulesViz 绘制散点图 分组图 规则网络图,直观展示关联规则算法结果
参数调优思路
minSupport 一般从 0.01 0.02 0.05 从小到大尝试,商品种类多就调低,商品种类少可以调高
minConfidence 常用 0.6 0.7 0.8,数值越高规则越严格
minlen 设置最小项数量,一般设置为 2,过滤单条项集没有意义的规则
maxlen 限制最大项集长度,防止生成过长复杂规则,长规则业务解释难度大
结果筛选与冗余规则处理
生成规则之后会出现大量冗余规则,比如已经存在 A 推 B,又出现 A C 推 B,这种就是冗余规则,可以使用 is.redundant 函数识别冗余规则,然后筛选保留非冗余规则,业务落地优先挑选提升度大于 1,同时支持度和置信度都满足业务要求的规则,不要只看置信度,高置信度有可能是后项本身出现概率就很高,这种规则业务价值很低,必须结合提升度判断。
关联规则算法对比表
| 项目 | Apriori | Eclat |
|---|---|---|
| 算法类型 | 逐层搜索生成频繁项集 | 基于垂直数据格式挖掘 |
| R 语言实现 | arules 包内置 | arules 包内置 eclat 函数 |
| 优点 | 原理简单容易理解 | 运算速度更快 |
| 缺点 | 多次扫描数据集,大数据慢 | 不方便直接输出关联规则 |
常见业务应用场景
超市商品搭配陈列 捆绑促销套餐设计
电商用户浏览购买行为挖掘
医疗处方药品联用分析
网页用户访问路径关联挖掘
【常见问题】
问题 1 R 语言学习之关联规则算法,运行 apriori 提示数据不是 transaction 类型怎么办
回答 1 R 语言学习之关联规则算法出现这个报错,是因为原始宽表或者列表没有使用 as 函数转为 transaction 事务对象,需要先完成事务格式转换,再调用 apriori,这是 R 语言关联规则算法最常见入门报错。
问题 2 R 语言学习之关联规则算法,为什么生成的关联规则数量特别多
回答 2 R 语言学习之关联规则算法生成规则过多,一般是最小支持度和最小置信度阈值设置太低,需要适当调高 minSupport 和 minConfidence,同时设置 minlen 等于 2,过滤无效单元素规则,减少冗余关联规则。
问题 3 R 语言学习之关联规则算法,提升度小于 1 的规则可以直接舍弃吗
回答 3 R 语言学习之关联规则算法里面提升度小于 1 代表前项和后项负相关,大部分业务场景可以舍弃,但是特殊业务如果需要挖掘排斥关系,这种关联规则依然具备分析价值,不能无条件全部删除。
【免责申明】
本文仅为 R 语言关联规则算法学习科普,代码示例仅用于教学演示,实际业务数据集结构存在差异,正式项目请结合业务需求调整阈值,本文内容不构成商业决策建议。


