最近有做采购平台 订单,用户,商品关联分析 的任务
目的在于希望能产出 商品推荐商品或者 商品 推荐给用户 的数据
主要采用python的apriori 进行关联分析
样例代码如下
大概如下:
from apyori import apriori
import pandas as pd
def ResultDFToSave(rules): # 根据Qrange3关联分析生成的规则得到并返回对于的DataFrame数据结构的函数
returnRules = []
for i in rules:
temList = []
temList.append(i[0]);
temList.append(i[1]);
temList.append(i[2])
temList.append(i[3]);
returnRules.append(temList)
return pd.DataFrame(returnRules, columns=('规则项', '推荐项', '支持度', '置信度'))
data = [['豆奶','莴苣'],['莴苣','尿布','葡萄酒','甜菜'], ['豆奶','尿布','葡萄酒','橙汁'],['莴苣','豆奶','尿布','葡萄酒'],['莴苣','豆奶','尿布','橙汁']]
result = list(apriori(transactions=data))
for re in result:
cur_ordered_statistics=re.ordered_statistics[0]
print(re.support,cur_ordered_statistics.items_base,cur_ordered_statistics.items_add,cur_ordered_statistics.confidence)
依次输出关联分析结果 支持度,基本项 ,推荐项,置信度
在少数据量时 都能有一部分结果产出
但是从生产抽取了大概2W条订单数据进行行合并(订单号,sku|sku|sku..)
读入后
产出的结果为空
取数据前20条 发现置信度和支持度很低 结果很少
取50条发现发现置信度和支持度更低 结果很少
全量导入 结果为空
统计了下 订单号大概有 大概有1W多个 sku有9000多个 才明白 原来数据太分散了
基本都是各买各的 所以无结果产出
于是转变思路
改成抽取某一个品类采购订单下的订单数据
做简单统计 订单号3.6W sku4000多
sku相对集中的数据才能有较好的分析结果
尝试了下 有结果了 但是还是效果不理想
后来在宋天龙.《Python数据分析与数据化运营》看到这样一段话
抽样样本量问题:
1.以时间为维度分布的 至少包含一个能满足预测的完整业务周期的数据,比如做月度销售预测,至少要包含12个月的数据,做日销售预测,至少要包含30天的数据, 如果一天中包含特定周期,则需要重复多少个周期(暂时还不太理解这句话)
2.做预测(包含分类和回归)分析建模的,需要考虑特征数量和特征值域的分布,通常数据记录数需要至少为 特征数量 m个 和特征值域m个 的100倍 即100*m*n条数据以上
3.做关联规则分析建模的,根据关联前后项的数量(前后项可能包含多个关联的主体,例如品牌+商品+价格关联) 没个主体至少需要1000条数据,如果同时对品牌和单品关联 那么需要至少2000条数据
看来还是样本抽取的有问题 抽取订单采购的sku过于分散 不能形成有效的关联规则
于是又尝试了下新的抽取思路
对订单中出现的sku次数进行了 top排序
提取了出现次数超过1000次的sku
再提取购买过这些sku的用户采购过的sku
结果产出了了少量的推荐规则
在购买sku 59865 商品时 推荐购买 sku 64363
去数据库查了下
59865为 南孚7号碱性电池30粒
64363为 南孚5号碱性电池30粒
看来算法确实是可用的 无法产生有效的关联推荐 还是数据抽取的有问题