R 中的购物篮分析
Christopher Bruffaerts
Statistician
关联规则挖掘用于从大型交易数据库中发现项目间的有趣关系。
该任务分为两个子任务:
频繁项集生成:在可能很大的交易库中找出所有频繁项集。若项集满足最小支持度阈值,则为频繁。
规则生成:基于上述频繁项集,生成置信度高于最小置信度阈值的关联规则。
Apriori 算法是经典且快速的关联规则挖掘算法。
Apriori 算法:
Apriori 原理:

| TID | 交易 |
|---|---|
| 1 | {A, B, C, D} |
| 2 | {A, B, D} |
| 3 | {A, B} |
| 4 | {B, C, D} |
| 5 | {B, C} |
| 6 | {C, D} |
| 7 | {B, D} |

| TID | 交易 |
|---|---|
| 1 | {A, B, C, D} |
| 2 | {A, B, D} |
| 3 | {A, B} |
| 4 | {B, C, D} |
| 5 | {B, C} |
| 6 | {C, D} |
| 7 | {B, D} |

| TID | 交易 |
|---|---|
| 1 | {A, B, C, D} |
| 2 | {A, B, D} |
| 3 | {A, B} |
| 4 | {B, C, D} |
| 5 | {B, C} |
| 6 | {C, D} |
| 7 | {B, D} |

| 项集 | 计数 | 支持度 |
|---|---|---|
| {A} | 3 | 0.42 |
| {B} | 6 | 0.85 |
| {C} | 4 | 0.57 |
| {D} | 5 | 0.71 |
| {A,B} | 3 | 0.42 |
| {B,C} | 3 | 0.42 |
| {B,D} | 4 | 0.57 |
| {C,D} | 3 | 0.42 |
在代价高的频繁项集生成之后,Apriori 开始生成规则:
技巧:剪枝关联规则
例如:若 {B,C,D} $\rightarrow$ {A} 的置信度低,则所有后件含 A 的规则都可丢弃(如 {B,D} $\rightarrow$ {A, C} 或 {D} $\rightarrow$ {A,B, C})。
事务型数据
inspect(head(trans,2))
items transactionID
[1] {A,B,C,D} 1
[2] {A,B,D} 2
首次调用 apriori 函数——频繁项集
support.all = apriori(trans,
parameter = list(supp = 3/7, target="frequent itemsets"))
频繁项集
inspect(support.all)
items support count
[1] {A} 0.4285714 3
[2] {C} 0.5714286 4
[3] {D} 0.7142857 5
[4] {B} 0.8571429 6
[5] {A,B} 0.4285714 3
[6] {C,D} 0.4285714 3
[7] {B,C} 0.4285714 3
[8] {B,D} 0.5714286 4

参数:挖掘参数会影响项集或规则的特性。
使用特定参数调用 apriori 进行规则生成
rules.all = apriori(trans,
parameter = list(supp=3/7, conf=0.6, minlen=2),
control = list(verbose=F)
)
检查规则
inspect(rules.all)
lhs rhs support confidence lift count
[1] {A} => {B} 0.4285714 1.0000000 1.1666667 3
[2] {C} => {D} 0.4285714 0.7500000 1.0500000 3
[3] {D} => {C} 0.4285714 0.6000000 1.0500000 3
[4] {C} => {B} 0.4285714 0.7500000 0.8750000 3
[5] {D} => {B} 0.5714286 0.8000000 0.9333333 4
[6] {B} => {D} 0.5714286 0.6666667 0.9333333 4
R 中的购物篮分析