代码链接:github代码
1.任务目标
针对所提供的CatalogCrossSell.xls数据集,要求对该数据及进行关联规则分析,并且解释生成的结果,评价指标包括lift,ratio, confidence, support等,并且最后根据这些结果为Exeter做出合理建议:
2.分析数据集:
给定的数据包含两个sheet,第一个为解释文档,第二个为真实数据集,该数据集包含4998行数据,第一列是用户编号,后面分别为Clothing,
House wares, Health, Automotive, Personal electronics, Computers, Garden, Novelty gift, Jewelry一共9列,主要利用这些列的数据进行关联规则分析。
3.数据预处理:
删除无关解释文档的sheet,删除文件中的空列,由于用户编号实际没有较大用处,在这里删除用户编号,并且为其重新编号0-4997。上述操作均在Python中进行。
4.建立关联规则方法进行分析:
(调用mlxtend进行数据分析,代码见附件CatalogCrossSell.ipynb,每一步处理后的数据文件见附件)
- Apriori 方法:
设置min_support=0.1, 它指的是关联规则占总的关联规则的最小比例,如果小于的直接忽略。
最后得到相应的关联规则及其它对应的支持度,共36条(apr_result.csv)。
对于以上给出的规则组合,生成关联规则,原本设置显示置信度大于0.7的关联规则展示如下(apr_con_asso.csv):
一共23条规则结果满足要求,第一列是antecedents,事先购买的产品类型;第二列是consequents,为给出的结果;后面几列为计算得到的相关支持度,置信度,lift等数据,具体计算如下:
- support(A->C) = support(A+C) [aka ‘support’], range: [0, 1]
- confidence(A->C) = support(A+C) / support(A), range: [0, 1]
- lift(A->C) = confidence(A->C) / support©, range: [0, inf]
- leverage(A->C) = support(A->C) - support(A)*support©, range: [-1, 1]
- conviction = [1 - support©] / [1 - confidence(A->C)], range: [0, inf]
如图给出的是置信度大于0.7的结果,可以看到推荐的结果大量集中在‘Health Products Division’,说明给出的数据集中大部分用户都选择了这一款,如果按照这种推荐方法,不论事先购买了哪种产品,都会选择这一类产品,推荐意义不大。
因此后面我们选择采用lift参数做过滤,设置lift>1.4的规则结果展示出来,有以下结果(apr_lift_asso.csv):
共52条结果,该结果的分布比较均衡,在各种情况下都有相应的推荐。例如对第30条结果规则,如果用户事先购买了’Health Products Division’, ‘Novelty Gift Division’, ‘Personal Electronics Division’,则推荐该用户购买’Housewares Division’,该方法的支持度为0.108,置信度0.638,lift为1.62,推荐的结果较为合理。
- FP-growth 方法
设置min_support=0.1,最后得到相应的关联规则及其它对应的支持度,共36条(fpg_result.csv)。
对于以上给出的规则组合,生成关联规则,原本设置显示置信度大于0.7的关联规则展示如下(fpg_con_asso.csv):
一共23条规则结果满足要求,跟刚才方法结果一样,推荐的结果大量集中在‘Health Products Division’,推荐意义不大。
后面我们仍然选择采用lift参数做过滤,设置lift>1.4的规则结果展示出来,有以下结果(fpg_lift_asso.csv):
共53条结果,该结果的分布比较均衡,在各种情况下都有相应的推荐。例如对第47条结果规则,如果用户事先购买’Jewelry Division’, ‘Health Products Division’, ‘Personal Electronics Division’,则推荐该用户购买’Housewares Division’,该方法的支持度为0.132,置信度0.669,lift为1.699,推荐的结果较为合理。
通过两种方法的对比分析,可以看到有一些推荐结果会同时出现,例如Apriori方法的第30条数据和FP-growth方法的第20条数据。其中,相对来说,很难直接判断两种方法的好坏,FP-growth方法的运行速度会高于Apriori方法,但本题数据量不是特别大,差异也不是很明显。由于都是采用关联规则推荐,推荐的结果两者有重叠的部分,也有一些微小的差别,但总体来说,都能够基本符合预期结果,为商家提供有效建议。
# 代码片段
import numpy as np
import pandas as pd
from mlxtend.frequent_patterns import apriori, fpgrowth
from mlxtend.frequent_patterns import association_rules
data = pd.read_excel('CatalogCrossSell.xls')
# data = data.set_index('Customer Number')
data.drop(columns = 'Customer Number', inplace = True)
apr_result = apriori(data, min_support = 0.1, use_colnames = True)
代码链接:github代码
如果感觉对你有所帮助,不妨点个赞,关注一波,激励博主持续更新!