今天给大家介绍下推荐系统中的 "关联规则推荐", 保证大伙弄懂. 画外音: 可以看 Excel 截图, 或者看公式, 大伙结合自己能够理解的程度自取.
工程架构方向的程序员, 看到推荐 / 搜索 / 广告等和算法相关的技术, 心中或多或少有一丝胆怯. 但认真研究之后, 发现其实没有这么难.
今天给大家介绍下推荐系统中的 "关联规则推荐", 保证大伙弄懂.
画外音: 可以看 Excel 截图, 或者看公式, 大伙结合自己能够理解的程度自取.
一, 概念
什么是关联规则(Association Rules)?
答: 关联规则是数据挖掘中的概念, 通过分析数据, 找到数据之间的关联. 电商中经常用来分析购买物品之间的相关性, 例如,"购买尿布的用户, 有大概率购买啤酒", 这就是一个关联规则.
画外音: 如果把买尿布记作 A, 买啤酒记作 B.
"买尿布的用户有较大概率买啤酒" 这个关联规则记作 A -> B.
什么是关联规则推荐(Association Rule Based Recommendaion)?
答: 顾名思义, 利用关联规则, 来实施推荐. 关联规则推荐的目标, 是希望达到
"将尿布放入购物车之后, 再推荐啤酒"
比
"直接推荐啤酒"
获取有更好的售卖效果.
画外音: 这个目标非常非常重要, 有些场景, 或许直接推荐更有效.
关联规则推荐的典型应用:
(1)线下, 可以将尿布和啤酒放在一起;
(2)线上, 可以在用户将尿布放入购物车后, 立刻推荐啤酒;
二, 如何实施
假设某电商会售卖 ABCD 四种商品, 历史上共 5 笔订单, 分别卖出{A,B,C}, {B,C,D}, {A,B,C,D}, {A,C}, {C}
如何来实施 "关联规则" 推荐呢?
第一步: 数据准备
如上图, 纵坐标是所有历史订单, 横坐标是每笔订单售出的商品.
第二步: 计算关联规则 (组合商品) 的支持度
什么是支持度(support)?
答: 共 5 笔订单, 3 笔包含商品 A,A 的支持度是 3/5.
很容易计算出, 各个商品的支持度. 从支持度可以看出, Best Seller 是商品 C,100% 的订单中都包含商品 C,C 的支持度是 1.
除了单个商品, 组合商品也有支持度.
共 5 笔订单, 2 笔同时包含 AB, 即 A->B 的支持度是 2/5.
画外音: 全局总共 4 种商品, 假设关联规则只关联 2 种商品, 则一共需要计算 C(4,2)共 6 种组合商品的支持度{AB,AC,AD,BC,BD,CD}.
支持度评估商品包含在订单中的 "概率", 一个订单, 有多大概率包含这个商品.
画外音: 一般会先对支持度高的商品实施推荐, 如果先实施优化支持度低的商品, 即使推荐效果翻倍, 总体订单提升效果也会很有限.
第三步: 计算关联规则的置信度
什么是置信度(confidence)?
答: 已知购买了 A, 有多大概率购买了 B(即同时购买了 AB), 称 A -> B 的置信度.
可以看到, 商品 A 有 3 次购买, 这 3 次中有 2 次购买了 B,A->B 的置信度是 2/3.
画外音: 额, 本来不想贴公式的
confidence(A->B) = support(A->B)/support(A)= (2/5)/(3/5) = 2/3
这也相对比较好理解,
(1)分子: support(A->B)是同时购买 AB 的比例;
(2)分母: support(A)是只购买 A 的比例;
二者相除, 得到 "购买了 A, 有多大概率购买 B", 置信度的本质是条件概率.
这里需要注意的是, X->Y 与 Y->X 的置信度不一定相等.
如上图:
B->C 的置信度是 1, 买商品 B 时, 100% 会买 C,
C->B 的置信度是 3/5, 买商品 C 时, 只有 3/5 买了 B.
画外音:
- support(B->C)=3/5
- support(C->B)=3/5
- confidence(B->C)=support(B->C)/support(B)=1
- confidence(C->B)=support(C->B)/support(C)=3/5
公式是给程序看的, Excel 表格是给人看的, 结果都一样.
第四步: 计算关联规则的提升度
上一个例子里, confidence(B->C)=1, 即: 如果用户购买商品 B,100% 会买 C, 那是不是意味着, 如果用户将商品 B 放入购物车, 就可以向用户推荐商品 C 呢?
答: 不是.
我们来回顾一下, 关联规则推荐的目标, 是希望达到
"将尿布放入购物车之后, 再推荐啤酒"
比
"直接推荐啤酒"
获取有更好的售卖效果.
虽然购买商品 B,100% 会买 C
画外音: confidence(B->C)=1
但直接推荐 C, 用户也 100% 会买 C
画外音: support(C)=1
会发现, 购买 B 与购买 C 是独立事件, 用户买不买 C 和用户买不买 B 没有直接关系. 这里的关联规则推荐, 并没有比直接推荐获取更好的效果.
用什么指标来评估关联规则推荐的效果呢?
答: 提升度.
什么是提升度(lift)?
答: A->B 关联规则推荐, 与直接推荐 B, 的比值, 可以用来评估推荐效果:
(1)大于 1, 说明有效, 在购买 A 时推荐 B, 比直接推荐 B, 效果更好;
(2)等于 1, 说明无关, 购买 A 与购买 B, 是独立事件;
(3)小于 1, 说明负相关, 购买 A 时推荐 B, 效果还不如直接推荐 B;
画外音: 又有公式了
lift(A->B) =confidence(A->B)/support(B)
这也相对比较好理解,
(1)分子: confidence(A->B), 购买 A 时, 有多大概率同时购买 B;
(2)分母: support(B), 有多大概率直接购买 B;
二者相除, 得到效果是否更好.
还是通过两个直观的例子来看.
来看看关联规则 A->B, 与直接推荐 B, 效果有没有提升:
(1)有 3 个订单购买 A, 这 3 个订单中有 2 个订单购买了 B, 所以 A->B 的置信度是 2/3, 即买了 A 有 2/3 的概率会买 B;
(2)直接推荐 B 的话, 5 个订单中有 3 个购买了 B, 所以 B 的支持度是 3/5, 即有 3/5 的概率会直接买 B;
会发现, 关联规则推荐的效果更好.
画外音: 根据公式
- confidence(A->B) =support(A->B)/support(A) = 2/3
- support(B) = 3/5
- lift(A->B) =confidence(A->B)/support(B) = 10/9
- lift(A->B) > 1
故关联规则推荐是正相关的.
来看看关联规则 A->D, 与直接推荐 D, 效果有没有提升:
(1)有 3 个订单购买 A, 这 3 个订单中有 1 个订单购买了 D, 所以 A->D 的置信度是 1/3, 即买了 A 有 1/3 的概率会买 D;
(2)直接推荐 D 的话, 5 个订单中有 2 个购买了 B, 所以 D 的支持度是 2/5, 即有 2/5 的概率会直接买 D;
会发现, 关联规则推荐的效果很差, 还不如直接推荐.
画外音: 根据公式
- confidence(A->D) =support(A->D)/support(A) = 1/3
- support(D) = 2/5
- lift(A->D) = confidence(A->D)/support(D)= 5/6
- lift(A->B) < 1
故关联规则推荐是负相关的.
三, 总结
(1)关联规则 A->B 推荐, 目标是, 在 "用户将 A 放入购物车时, 推荐 B" 比 "单独推荐 B" 获取更好的效果;
(2)A->B 的支持度, 是用户同时购买 A 和 B 概率;
(3)A->B 的置信度, 是用户购买 A 的同时, 有多大概率购买 B;
(4)A->B 的提升度, 是 "用户购买 A 的同时, 有多大概率购买 B" 与 "直接购买 B 的概率" 的比值:
这个值大于 1 时, 说明 A->B 有正向效果
这个值等于 1 时, 说明 A 和 B 是独立事件
这个值小于 1 时, 说明 A->B 有负向效果
1 分钟很快就过了, 希望大家能有收获.
来源: http://zhuanlan.51cto.com/art/202111/692144.htm