关联规则挖掘

日常关联规则

关联规则 —— 基本设置

● 输入数据库:

   ■ 交易集合   ■ 交易 = 物品集合

● 输出:关联规则

   ■ 基于其他物品的出现来预测某些物品的出现的规则。

TID  Items 

1     item1, item2, item3, item4, item5 

2     item2, item3, item5 

3     item1, item4, item5 

4     item2, item3, item5, item6, item7 

5     item1, item3, item5, item7 

前提 → 结果

\{item_2,item_3\}\rightarrow \{item_5\}

\{item_1\}\rightarrow \{item_3\}

  1. 关联规则 {item2, item3} → {item5}:

    • TID 1: 包含 item2, item3, 和 item5。
    • TID 2: 包含 item2, item3, 和 item5。
    • TID 4: 包含 item2, item3, 和 item5。

    在这三次交易中,每次 item2 和 item3 都出现时,item5 也都出现了。因此,这个关联规则在给定的数据集中是有效的。

  2. 关联规则 {item1} → {item3}:

    • TID 1: 包含 item1 和 item3。
    • TID 3: 只包含 item1,但不包含 item3。
    • TID 5: 包含 item1 和 item3。

    在这三次交易中,有两次 item1 出现时,item3 也出现了,但在 TID 3 中,item1 出现而 item3 没有出现。因此,这个关联规则在给定的数据集中不是100%准确的,但仍然有一定的关联度。

应用 —— 市场篮子分析

● 理解顾客的购物行为

   ■ 物品:超市/商店中的产品 ■ 交易:结账时的购物篮

● 有趣的规则:

   ■ 购买 {a, b} 的顾客也倾向于购买 {x, y}  ■ 例子:{麦片}→{牛奶}

● 目的

   ■ 货架管理 / 商品摆放  ■ 促销(产品捆绑) ■ 推荐  ■ 定价策略

TID  物品
1    面包,酸奶
2    面包,牛奶,麦片,鸡蛋
3    酸奶,牛奶,麦片,奶酪
4    面包,酸奶,牛奶,麦片
5    面包,酸奶,牛奶,奶酪

应用 —— 医疗数据分析

● 诊断支持系统

   ■ 物品:症状、疾病  ■ 交易:患者的医疗史

● ADR 发现(不良药物反应)

   ■ 物品:药物、反应/症状  ■ 交易:患者的医疗史

应用 —— 人口普查数据分析

● 洞察人口情况

   ■ 物品:人口统计数据  ■ 交易:人口普查记录

● 有趣的规则:

   ■ 基于共同的人口统计特征对人群之间的相关性    ■ 例子:{大学毕业, ≥30}→{高收入}

● 目的

   ■ 政策与决策制定  ■ 资源分配   ■ 城市规划

应用 —— 行为数据分析

● 用户偏好与关联

   ■ 物品:电影、歌曲、书籍等。 ■ 交易:观看/听/读历史

● 有趣的规则(电影):

   ■ 观看了电影 {a, b} 的观众 也观看了电影 {x, y}   ■ 例子:{大白鲨}→{它}

● 目的

   ■ 推荐系统

关联规则 —— 问题陈述

● 关联规则不是“硬性”规则

   ■ 例如,{麦片}→{牛奶} 并不意味着顾客 在购买麦片时总是购买牛奶

   ■ 每一种可能的组合(例如,{酸奶, 面包}→{牛奶}) 都是潜在的关联规则

● 给定独特的物品 ➜ 3^d-2^{d+1}+1 规则

d=6 ➜ 有602种可能的规则!

● 关联规则挖掘

   ■ 找到有趣/显著的关联规则

   ■ 高效地找到这样的规则

定义 — 项集(Itemset),K-项集(K-itemset)

● 项集(Itemset)

■ 一组物品的子集,例如:{面包}、{酸奶}、{面包, 酸奶}、{牛奶}、{麦片}、{鸡蛋}、{面包, 牛奶}、{面包, 牛奶, 麦片} 等。

● K-项集(K-itemset)

■ 包含k个物品的项集,例如,当k=3时:{面包, 牛奶, 麦片}、{面包, 酸奶, 奶酪}、{酸奶, 牛奶, 麦片}、{酸奶, 麦片, 奶酪}、{牛奶, 麦片, 奶酪}、{面包, 牛奶, 鸡蛋} 等。

定义 — 针对项集的支持计数、支持度

● 支持计数 SC (Support Count)

   ■ 包含某个项集的交易数量

   ■ 例如,SC({面包, 酸奶, 牛奶}) = 2,出现了两次。

● 支持度 S  (Support)

   ■ 包含某个项集的交易的比例

   ■ 例如,S({面包, 酸奶, 牛奶}) = 2/5,在五个人中出现了两次。

TID  物品
1    面包,酸奶
2    面包,牛奶,麦片,鸡蛋
3    酸奶,牛奶,麦片,奶酪
4    面包,酸奶,牛奶,麦片
5    面包,酸奶,牛奶,奶酪

定义 — 频繁项集

● 频繁项集 (Frequent Itemset)

■ 支持度大于或等于最小阈值 minsup 的项集

■ 例如,如果 minsup=\frac{3}{5},所有的频繁项集

    k=1:  面包:4/5.  酸奶: 4/5.  牛奶: 3/5.  麦片: 3/5

    k=2:  面包, 酸奶: 3/5.  酸奶, 牛奶: 3/5.  牛奶, 麦片: 3/5

定义 — 关联规则

● 关联规则 (Association Rule)

   ■ 蕴含表达式 X→Y, 其中 X 和 Y 是项集

   ■ 例如,{酸奶, 牛奶}→{面包}

定义 — 关联规则的支持度

● 关联规则的支持度

   ■ 包含关联规则 X→Y 中所有物品的交易的比例  S(X\rightarrow Y)= \frac{SC(X\bigcup Y)}{N} = S(X\bigcup Y)

     N 是交易数量

   ■ 示例:

S(\{yogurt,milk\}\rightarrow \{bread\})=\frac{SC(\{yogurt,milk ,bread\})}{N}=\frac{2}{5}

S(\{yogurt,bread\}\rightarrow \{milk\})=\frac{SC(\{yogurt,milk ,bread\})}{N}=\frac{2}{5}

● 区别

  • 项集的支持度:是数据集中包含该项集的交易的比例。例如,如果有100笔交易,其中10笔交易包含了项集 {面包, 牛奶},那么该项集的支持度是10/100 = 0.1或10%。
  • 关联规则的支持度:是数据集中同时包含关联规则左侧和右侧的项集的交易的比例。例如,对于关联规则 {面包} → {牛奶},其支持度是同时包含面包和牛奶的交易的比例。

定义 — 置信度

● 关联规则 X→Y 的置信度 (Confidence)

   ■ 在给定 X 的情况下 Y 的概率   C(X\rightarrow Y)=\frac{S(X\rightarrow Y)}{S(X)} = \frac{S(X\bigcup Y)}{S(X)}

C(\{yogurt,milk\}\rightarrow \{bread\})=\frac{S(\{yogurt,milk ,bread\})}{S(\{yogurt,milk\})}=\frac{2}{3}

X=\{yogurt, milk\} \Rightarrow S(X)=\frac{3}{5}\\ Y=\{bread\}\\ X\bigcup Y = \{yogurt, milk, bread\}\Rightarrow S(X\bigcup Y)=\frac{2}{5}\\

高支持度、高置信度 ➜ 有趣的规则

低支持度:(X∪Y) 中的物品不经常一起出现

高支持度:(X∪Y) 中的物品经常一起出现

低置信度:即使 X 中的物品一起出现,它们经常不与 Y 中的物品一起出现

高置信度:如果 X 中的物品一起出现,它们经常与 Y 中的物品一起出现

暴力法

暴力法 — 算法

● 给定一组交易, 找到所有满足以下条件的关联规则 X→Y:

   ■ 支持度 S(X→Y) ≥ minsup

   ■ 置信度 C(X→Y) ≥ minconf

● 暴力法算法:

   ■ 列出所有可能的关联规则 X→Y

   ■ 计算每个规则的支持度 S(X→Y) 和置信度 C(X→Y)

   ■ 剔除那些 S(X→Y) < minsup 和 C(X→Y) < minconf 的规则

暴力法 — 计算复杂度

● 给定独特的物品 d ➜ 3^d-2^{d+1}+1\in O(3^d) 规则

   ■ d=6 ➜ 理论上有602种可能的规则!

● 设 \omega 为数据库中一个交易内的物品的最大数量 ➜ O(N\cdot (3^w-2^{w+1}+1)) ; w\ll d 规则

   ■ N=5,w=4 ➜  ≤ 250种“可用”的规则!

250和602之间的差异似乎微不足道,但这只是因为在这个简化示例中,d=6 和 w=4 的数量级是相同的。 数字250也忽略了重复的规则。

TID  物品
1    面包,酸奶
2    面包,牛奶,麦片,鸡蛋
3    酸奶,牛奶,麦片,奶酪
4    面包,酸奶,牛奶,麦片
5    面包,酸奶,牛奶,奶酪

N : TID的数量, \omega 是独特物品的数量,真正不同规则的数量:154

解耦支持度和置信度

● 回顾 S(X\rightarrow Y)= \frac{SC(X\bigcup Y)}{N}

\left.\begin{matrix} S(\{yogurt,milk\}\rightarrow \{bread\})\\ S(\{yogurt,bread\}\rightarrow \{milk\})\\ S(\{bread,milk\}\rightarrow \{yogurt\})\\ \end{matrix}\right\} = \frac{S(\{yogurt,milk,bread\})}{N}=S\{y,m,b\}

● 观察1

   ■ 只有当 X∪Y 是一个频繁项集时,规则 X→Y 才有足够的支持度

      S(X\rightarrow Y)\geq minsup \Leftrightarrow S(X \bigcup Y)\geq minsup

   ■ 当 X∪Y 不是频繁项集时,无需计算规则的置信度

关联规则挖掘的两部分算法

● 第一部分 — 频繁项集生成

   ■ 生成支持度 ≥ minsup 的项集

   ■ "仅"需要检查 2^{d}-1 (仍然不好)个可能的项集

● 第二部分 — 关联规则生成

   ■ 通过项集的二进制分区从频繁项集中生成规则

   ■ 返回置信度 ≥ minconf 的规则

生成顺序:数据集 -> 频繁项集 -> 关联规则

频繁项集生成

● 项集格子(或称为格结构)

   ■ 节点:项集

   ■ 边:包含关系

2^{d}-1 个节点/项集

   ■ 当 d=5 时 ➜ 有 31 个项集 (从{{\phi }}开始,但是总项集不包含空集)

{A} {B} {C} {D} {E}  {A, B}  {A, C}  {A, D}  {A, E}  {B, C}  {B, D}  {B, E} {C, D} {C, E} {D, E}

{A, B, C} {A, B, D} {A, B, E} {A, C, D} {A, C, E} {A, D, E} {B, C, D} {B, C, E} {B, D, E} {C, D, E}

{A, B, C, D} {A, B, C, E} {A, B, D, E} {A, C, D, E} {B, C, D, E}  {A, B, C, D, E}

其中 {A, B, C, D} 包含 {A, B, C}

频繁项集生成 — 暴力算法

为所有找到的项集设置全局计数器

对于每个交易,生成 k-项集,其中 k = 1, 2, 3, … (直到交易中的物品数量)

对于 k-项集,其全局计数器增加1

问题:如果一个关联规则至少需要2个物品,那么我们为什么需要计算1-项集?

答案:用于计算置信度

频繁项集生成 — 暴力算法

● 复杂度分析  O(N\cdot 2^w)

APRIORI (关联规则挖掘算法)

Apriori原理(也称为反单调性原理)

● 观察2:如果 X 和 Y 是项集且 X⊆Y,那么

   ■ S(X) ≥ S(Y)

   ■ 如果 Y 是频繁的,那么 X 也是频繁的

   ■ 如果 X 不是频繁的,那么 Y 也不是频繁的

   ■ 示例:X= S({面包, 酸奶}) = 3/5  ; Y= S({面包, 酸奶, 牛奶}) = 2/5

   ■ 如果一个项集(例如,{B,C,D,E})是频繁的,那么它的任何子集(例如,{B,D,E}、{C,E})也必定是频繁的。这是因为子集的支持度总是大于或等于超集的支持度。换句话说,任何包含{B,C,D,E}的交易也必定包含{B,D,E}和{C,E}。

   ■ 如果一个项集(例如,{A,B})不是频繁的,那么它的任何超集(例如,{A,B,D}、{A,B,C,D})也必定不是频繁的。这是因为超集的支持度总是小于或等于子集的支持度。换句话说,任何包含{A,B,D}或{A,B,C,D}的交易也必定包含{A,B}。

Apriori算法

● 符号说明

   ■ L_k — 候选的k-项集

   ■ F_k— 频繁的k-项集 (F_k\subseteq L_k)

对于 k 从 1 到 w:这是一个循环,从1开始,每次增加1,直到达到最大的项集大小w。在每一步,我们都会尝试找到大小为k的频繁项集。

   ■ 生成:F_{k-1} 生成 L_k在这一步,我们使用已知的频繁的(k-1)-项集(F_{k-1})来生成候选的k-项集(L_k)。这通常是通过组合F_{k-1}中的项集来完成的。

   ■ 剪枝:使用 F_{k-1}L_k 中剪枝 k-项集:这是Apriori原理的应用。我们知道,如果一个(k-1)-项集不是频繁的,那么它的超集也不可能是频繁的。因此,我们可以使用F_{k-1}来检查L_k中的项集,如果一个k-项集的任何子集不在F_{k-1}中,那么这个k-项集可以被剪枝。

   ■ 计算:计算剩余 L_k 项集的支持计数(SC):对于剩下的候选项集,我们计算它们在数据集中的支持计数,即包含这些项集的交易数量。

   ■ 过滤:过滤支持计数不足的 L_k 项集 ➜ F_k在这一步,我们根据最小支持度阈值过滤掉支持计数不足的项集。剩下的项集构成了频繁的k-项集F_k

   ■ 停止:如果 |F_k| = 0, 停止:如果在某一步我们没有找到任何新的频繁项集,那么我们可以停止算法,因为更大的项集也不可能是频繁的。

示例:

minsup =0.4 最小支持数为2

L_1 ➜ F_1

生成:物品集:{面包}, {麦片}, {奶酪} , {鸡蛋} , {牛奶}, {酸奶}

计算:物品集:{面包} - 4, {麦片} - 3, {奶酪} - 2 , {鸡蛋} - 1 , {牛奶} - 4, {酸奶} - 4

过滤:物品集:{面包} - 4, {麦片} - 3, {奶酪} - 2 , {鸡蛋} - 1 , {牛奶} - 4, {酸奶} - 4

物品集:{面包} - 4, {麦片} - 3, {奶酪} - 2 , {牛奶} - 4, {酸奶} - 4

F_1 ➜ L_2

 生成:物品集:{面包, 麦片},  {面包, 奶酪},  {面包, 牛奶},  {面包, 酸奶},  {麦片, 奶酪},  {麦片, 牛奶}, {麦片, 酸奶},  {奶酪, 牛奶},  {奶酪, 酸奶},  {牛奶, 酸奶}

计算:物品集:{面包, 麦片}- 2,  {面包, 奶酪}- 1,  {面包, 牛奶}- 3,  {面包, 酸奶}- 3,  {麦片, 奶酪}- 1,  {麦片, 牛奶}- 3, {麦片, 酸奶}- 2,  {奶酪, 牛奶}- 2,  {奶酪, 酸奶}- 2,  {牛奶, 酸奶}- 3

过滤:物品集:{面包, 麦片}- 2,  {面包, 奶酪}- 1,  {面包, 牛奶}- 3,  {面包, 酸奶}- 3,  {麦片, 奶酪}- 1,  {麦片, 牛奶}- 3, {麦片, 酸奶}- 2,  {奶酪, 牛奶}- 2,  {奶酪, 酸奶}- 2,  {牛奶, 酸奶}- 3

L_2 ➜ F_2

物品集:{面包, 麦片}- 2,  {面包, 牛奶}- 3,  {面包, 酸奶}- 3,   {麦片, 牛奶}- 3, {麦片, 酸奶}- 2,  {奶酪, 牛奶}- 2,  {奶酪, 酸奶}- 2,  {牛奶, 酸奶}- 3

F_2 ➜ L_3

 生成:物品集:{面包, 麦片, 牛奶}, {面包, 麦片, 酸奶}, {面包, 牛奶, 酸奶},{麦片, 牛奶, 酸奶},{奶酪, 牛奶,酸奶}

计算:物品集:{面包, 麦片, 牛奶}- 2, {面包, 麦片, 酸奶}- 1, {面包, 牛奶, 酸奶}- 2,{麦片, 牛奶, 酸奶}- 2,{奶酪, 牛奶,酸奶}- 2

过滤:物品集:{面包, 麦片, 牛奶}- 2, {面包, 麦片, 酸奶}- 1, {面包, 牛奶, 酸奶}- 2,{麦片, 牛奶, 酸奶}- 2,{奶酪, 牛奶,酸奶}- 2

L_3 ➜ F_4

物品集:

完成!!!

● 输出:所有的频繁项集 F_i

    ■ i ≥ 2 — 不能从单一物品中创建规则。

    ■ |F_i|>0 — 项集的集合不为空。

● 实现细节

    ■ 生成/剪枝 — 如何从 F_{k-1}​ 得到 L_k​?

    ■ 计算 — 如何高效地为 L_k项集计算支持计数(SC)? (这里没有涉及,因为这是在实现层面完成的)

成/剪枝: F_{k-1} \cdot F_1 方法 

F_1 (频繁的1-项集):物品集:{面包} , {麦片} , {奶酪}  , {牛奶} , {酸奶} 

F_2 (频繁的2-项集):物品集:{面包, 麦片},  {面包, 牛奶},  {面包, 酸奶},   {麦片, 牛奶}, {麦片, 酸奶},  {奶酪, 牛奶},  {奶酪, 酸奶},  {牛奶, 酸奶}

生成: 合并频繁的 (k−1)-项集和频繁的1-项集,以获得所有可能的 k-项集。

生成: 合并在 (k−2) 项中有重叠的频繁的 (k−1)-项集,以获得所有可能的 k 项集。

L_3 (3-项集)物品集:{面包, 麦片, 奶酪} {面包, 麦片, 牛奶} {面包, 麦片, 酸奶} {面包, 奶酪, 牛奶} {面包, 奶酪, 酸奶} {面包, 牛奶, 酸奶} {麦片, 奶酪, 牛奶} {麦片, 奶酪, 酸奶} {麦片, 牛奶, 酸奶} {奶酪, 酸奶, 牛奶}

剪枝: 删除所有包含至少一个不在 F_{k-1}​ 中的 (k−1)-项集的 k-项集。

L_3 (3-项集)剪枝后的物品集:{面包, 麦片, 牛奶}, {面包, 麦片, 酸奶}, {面包, 牛奶, 酸奶},{麦片, 牛奶, 酸奶},{奶酪, 牛奶,酸奶}

计算支持计数:最小值

● 为 L_k 中的每个候选项集计算支持计数 (SC)。

   ■ 需要完全扫描数据库。

   ■ 对于每个交易 T,检查每个项集 s 是否属于 T。

   ■ 如果 s 属于 T,则更新 s 的计数器。

关于挖掘关联规则的两部分算法:

● 第1部分 — 频繁项集生成(以上完成第一部分)

   ■ 生成支持度 ≥ minsup 的项集

   ■ Apriori算法

● 第2部分 — 关联规则生成

   ■ 通过项集的二进制划分从频繁项集中生成规则

   ■ 返回置信度 ≥ minconf 的规则

规则生成:

● 对于每个频繁项集 S, 派生候选规则 X→Y

   ■ 一个规则是 s 的二进制分割,即 Y=S−X

对于每个频繁项集,可能有 2^{|S|}-2 个规则。

解释: 考虑一个频繁项集 S。对于这个项集,我们可以为其生成的规则是所有可能的子集与其补集之间的关联。例如,如果 S={A,B,C},那么一个可能的规则是 A,B→C,其中 A,B 是子集,而 C 是其补集。(A→B, C), (B→A, C).....

但是,我们不能有空集到某个项集的规则,也不能有某个项集到空集的规则。因此,我们需要从所有可能的规则中减去这两种情况。

● 对于每个规则 X→Y

   ■ 计算置信度 C(X→Y)

   ■ 如果置信度 ≥ minconf, 将规则添加到最终结果集中。

C(X\rightarrow Y)=\frac{SC(X \bigcup Y)}{SC(X)}

两个值在频繁项集生成过程中已经被计算过了! ➜ 无需访问数据库 ➜ 快速

Apriori原则 (反单调性原则):

● 给定项集 S 和两个派生规则 X_1\rightarrow Y_1​ 和 X_2\rightarrow Y_2​,满足X_1\bigcup Y_1​  =  X_2\bigcup Y_2​ = S。

   C(X_1\rightarrow Y_1)=\frac{S(X_1\bigcup Y_1)}{S(X_1)} ;  C(X_2\rightarrow Y_2)=\frac{S(X_2\bigcup Y_2)}{S(X_2)}

   X_1\subseteq X_2\Rightarrow S(X_1)\geq S(X_2)\Rightarrow C(X_1\rightarrow Y_1) \leq C(X_2\rightarrow Y_2)

● 例子:如果 {A,B,C}→{D} 的置信度很低,那么以下规则也会有低置信度:

   ■ {A}→{B,C,D} ,  {B}→{A,C,D} , {C}→{A,B,D} , {A,B}→{C,D} , {A,C}→{B,D} , {B,C}→{A,D}

● 规则格

   ■ 节点:关联规则

   ■ 边:包含关系,关于前提/后果

解释: 规则格是一个表示所有可能关联规则及其关系的结构。在这个格中,每个节点代表一个关联规则,而边表示一个规则是另一个规则的子集。

2^{|S|}-2 规则

   ■ 当 ∣S∣=4 ➜ 有14条规则。

如果规则 BCD→A 的置信度不足, 那么所有在后件中包含A的规则的置信度也都不足。

关于单一项集 S 的规则生成算法:

定义 — 提升度(Lift)

● 关联规则 X→Y 的提升度

   ■ 在控制了Y的支持度(即Y的受欢迎程度)的情况下,给定X时Y的概率。

L(X\rightarrow Y)=\frac{S(X\rightarrow Y)}{S(X)S(Y)}=\frac{S(X \bigcup Y)}{S(X)S(Y)}

TID  物品
1    面包,酸奶
2    面包,牛奶,麦片,鸡蛋
3    酸奶,牛奶,麦片,奶酪
4    面包,酸奶,牛奶,麦片
5    面包,酸奶,牛奶,奶酪

L(X\rightarrow Y)=\frac{S(X\rightarrow Y)}{S(X)S(Y)}=\frac{S(X \bigcup Y)}{S(X)S(Y)}

S(X) = 麦片=3/5=0.6 , S(Y) = 面包 =4/5=0.8, S(X->Y) =2/5=0.4

L(X\rightarrow Y)=\frac{S(X\rightarrow Y)}{S(X)S(Y)}=\frac{S(X \bigcup Y)}{S(X)S(Y)}=\frac{0.4}{0.6\cdot 0.8}=0.833

   ■ 面包的概率

   S(Y) = 面包 =4/5=0.8

   ■ 计算给定{麦片}时{面包}的概率

   P= 同时包含面包和麦片的交易数​/包含麦片的交易数= \frac{2/5}{3/5}=2/3

   ■ 当交易中有麦片时,面包出现的概率实际上是降低的。

   L( {麦片} —> {面包} ) \leq 1.0

● 关于关联规则的提升度(Lift)及其他度量的使用:

   ■ 进一步筛选和排名关联规则

   ■ 寻找“替代”物品。

注意:提升度并不是Apriori算法的一部分,因为这里的反单调性原则不适用。

总结

● 有趣的模式:关联规则 X→Y

   ■ 基于其他物品X的出现来预测某些物品Y的出现

   ■ 适用于事务数据的更广泛的任务

   ■ 定义规则是否有用的各种度量(例如,支持度、置信度、提升度)

● 处理复杂性的实用算法

   ■ 分离支持度和置信度的计算

   ■ Apriori算法用于频繁项集生成和关联规则生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值