关联分析案例

关联分析:

通过寻找最能够解释数据变量之间的关系的规则,来找出大量多元数据集中有用的关联规则,它是从大量数据中发现多种数据之间关系的一种方法。

常见算法:

Apriori、FP-Growth、PrefixSpan、SPADE、ApriooriAll、AprioriSome等

应用:

购物篮分析、捆绑销售、库存管理、商品促销设计、页面促销设计、货架设计、商品陈列设计、页面内容排版、推荐系统、商品价格策略和基于购买的用户特征分析等。

案例——使用python实现商品交叉销售分析

基本场景

业务部门希望数据部门能对用户购买数据做分析,从而得到用户的商品频繁模式,以此来帮助业务部门根据的频繁模式,做相应的打包销售或产品组合销售。

实现方法

基于自定义开发的Apriori关联算法库,导入python环境中挖掘关联模式

代码

part 1 导入库

import pandas as pd
import apriori

part 2 定义数据文件

data = pd.read_csv('order_table.csv')

转换为关联所用的记录模式。

由于导入的是事务性的数据记录,这里转换为关联算法所需的记录,记录的格式为每个订单ID对应的商品合并为一条记录。

order_ids = pd.unique(data['order_id'])
order_records = [data[data['order_id'] == each_id]['product_name'].tolist() for each_id in order_ids]

part 3 调用自定义的apriori做关联分析

minS = 0.01 #定义最小支持度阈值
minC = 0.05 #定义最小置信度阈值
L, suppData = apriori.apriori(order_records, minSupport=minS) #计算得到满足最小支持度的规则
rules = apriori.generateRules(order_records, L, suppData, minConf=minC) #计算得到满足最小置信度的规则

步骤:

第一步,通过定义好的最小支持度查找频繁项集

第二步,通过最小置信度查找满足条件的规则

part 4 关联结果报表评估

先输出数据集记录以及满足阈值定义的规则数量,再将规则转换为数据框,并用sort_values方法提升度排序,使用head()展示前十条记录。

model_summary = 'data record: {1} \nassociation rules count : {0}'
print(model_summary.format(len(rules), len(order_records)), '\n', '-'*60)
rules_all = pd.DataFrame(rules, columns=['item1', 'item2', 'instance', 'support', 'confidence', 'lift'])
rules_sort = rules_all.sort_values(['lift'], ascending=False)
rules_sort.head(10)

#输出结果
data record: 2240 
association rules count : 582 
 ------------------------------------------------------------

 part 5 关联分析结果展示

导入库

from pyecharts.charts.basic_charts.graph import Graph
from pyecharts import options as opts 

选择有效数据

rules_sort_filt = rules_sort[rules_sort['lift']>1]
display_data = rules_sort_filt.iloc[:,:3]

汇总每个item出现次数

item1 = display_data[['item1', 'instance']].rename(index=str, columns={"item1":"item"})
item2 = display_data[['item2', 'instance']].rename(index=str, columns={"item2":"item"})
item_concat = pd.concat((item1, item2),axis=0)
item_count = item_concat.groupby(['item'])['instance'].sum()

取出规则最多的TOP N items

control_num = 10
top_n_rules = item_count.sort_values(ascending=False).iloc[:control_num]
top_n_items = top_n_rules.index
top_rule_list = [all((item1 in top_n_items, item2 in top_n_items)) for item1, item2 in zip(display_data['item1'], display_data['item2'])]
top_display_data = display_data[top_rule_list]

画图

node_data = top_n_rules/100
nodes = [{"name": ('').join(i[0]), "symbolSize": i[1], "value": j} for i,j in zip(node_data.to_dict().items(), item_count)]
#创建边数据以及边权重数据
edges = [{"source": ('').join(i), "target": ('').join(j), "value": k} for i,j,k in top_display_data.values]
#创建关系图
graph = Graph(init_opts=opts.InitOpts(width="800px", height="800px"))
graph.add("", nodes, edges, repulsion=8000,layout="circular",is_rotate_label=True)
graph.set_global_opts(title_opts=opts.TitleOpts(title="商品关联结果图"))
graph.render_notebook()

 结果图显示了每个Item之间的关联关系,标记点越大的item产生的关联规则越多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值