利用关联规则做商品推荐(python版)

关联规则最经典的例子是啤酒与尿布,我们当然也可以用来做商品的推荐

做这个之前需要数据,数据是自己随机生成的,当然会导致结果不是很理想


数据准备:

import numpy as np
import  pandas as pd
df= pd.DataFrame({'100001':[np.random.randint(0,2) for i  in range(10000)]})
for i in range(100):df[str(100002+i)]=[np.random.randint(0,2) for i  in range(10000)]
df.head()

 得到的数据结果:

100001 100002 100003 100004 100005 100006 100007 100008 100009 100010 ... 100092 100093 100094 100095 100096 100097 100098 100099 100100 100101
0 1 0 0 0 1 0 0 0 0 0 ... 0 0 1 1 1 1 0 0 1 0
1 1 1 0 1 1 1 1 0 0 1 ... 0 0 1 1 1 1 1 1 1 0
2 0 0 1 0 0 1 0 0 0 1 ... 0 1 1 1 1 1 1 1 1 0
3 0 0 0 1 1 1 1 0 0 1 ... 1 1 1 1 1 1 1 1 0 0
4 1 0 1 1 0 0 0 1 1 1 ... 0 0 0 1 0 0 0 0 1 0

5 rows × 101 columns

 需要说明的是,100001这类数字是商品ID,数据假设是采用每个用户购买记录,每一行对应一个用户,每一列代表一个商品


接下来就进入正题,使用关联规则进行推荐

构造频繁项集

from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
frequent_itemsets = apriori(df, min_support=0.2, use_colnames=True)
frequent_itemsets.tail()

 结果如下:

  support itemsets
5146 0.2610 (100098, 100100)
5147 0.2606 (100098, 100101)
5148 0.2505 (100099, 100100)
5149 0.2584 (100099, 100101)
5150 0.2570 (100101, 100100)

 在使用关联规则之前需要构造频繁项集,我们可以看到结果有两列,一列是支持度,一列是频繁项集

代码里面的最小支持度(min_support)其实是个阈值,也就是大于最小支持度是才算为频繁项集,小于是就过滤掉了

支持度可以理解成概率,虽然这个说法不太恰当

最小支持度根据自己的需要进行设定,可大可小,不一定是0.5哦 

获取到了频繁项集我们 就可以进行关联规则计算了 


 关联规则计算

rules = association_rules(frequent_itemsets, metric='lift', min_threshold=1)
rules.head()
  antecedents consequents antecedent support consequent support support confidence lift leverage conviction
0 (100073) (100052) 0.5030 0.4947 0.2502 0.497416 1.005489 0.001366 1.005403
1 (100052) (100073) 0.4947 0.5030 0.2502 0.505761 1.005489 0.001366 1.005587
2 (100026) (100096) 0.4980 0.4973 0.2500 0.502008 1.009467 0.002345 1.009454
3 (100096) (100026) 0.4973 0.4980 0.2500 0.502715 1.009467 0.002345 1.009481
4 (100099) (100086) 0.4982 0.5053 0.2532 0.508230 1.005798 0.001460 1.005957

 得到这个以后我们就可以进行筛选自己需要结果,比如confidence、support、lift我们需要设置在什么范围合适,需要自己设定

这样我们 就可以筛到想要的结果

注意的是,正常confidence会很高的,因为这个是随机生成的数据,所以在0.5附近

然后我们就可以根据这个,进行推荐了,比如上表的最后一行为例,用户购买了商品100099,我们就可以猜他可能会购买商品100086。

 

你可能感兴趣的:(Python)