Data Analysis - Association Rules (适用于销售市场、产品开发、大数据平台等)

Data Analysis - Association Rules (适用于销售市场、产品开发、大数据平台等),第1张

Data Analysis - Association Rules (适用于销售市场、产品开发、大数据平台等)

   在当今各市场领域里,数据分析是最重要的其中一环,在每一个企业中,每个部门每天都会产出其对应的数据,根据产出的这些数据就可分析给每个部门下达的任务是否达标,所以,数据在一个企业中有着至关重要的作用,各种大小企业几乎都会用到数据分析来做决策。在实际的运营办理过程中,数据剖析可以综合数据的信息,得出适合公司的,具有针对性的意见和决议计划,从而可以有用的协助办理者关于公司的发展和办理作出改善。各类数据的总结、整合、分析、研究对企业的发展、决策起着非常重要的作用。

   在数据分析中,维度是一个比较关键的量度,把它进一步的结构化,所谓结构化,就是从多个维度中提炼出更加底层的逻辑,将维度进行合理的组织,并考察它们之间的联系。因此,其中一个比较重要的就是 关联规则算法 ,可应用于用于对用户行为的分析。


   以航运业为例,假如你是销售经理/总监,要对一个季度的数据进行分析,例如得出其中的10个客户的数据,
图1 ,可见每个客户订单中,有各自不同的洲为目的地。(当然,洲只是一个板块整体,如果需要再对每个洲进行分析,可以对每个国家所在的洲进行再拆分不同的维度去分析)。


   从图1的数据结构中,如果我们需要统计每个目的地的洲究竟有多少客户订了,那岂不是要逐个去计数? 因此,可以适当转换一下数据格式,把每个洲视为一个统计对象(独立商品),这样就可以清晰看到每个洲有哪些客户订了,有哪些没有,图2


   通过重新整合的数据结构,例如我们要知道欧洲究竟有多少客户订了,那么我们直接定位“欧洲”这一列,就可以统计到结果。将每件商品作为列,对购物清单重新编码的方式,称为 独热编码 (One Hot Encoding),在数据分析中,比较重要。


关联的概念


商品组合:一个商品组合包含一个以上的产品。


关联规则:如果一个商品组合 A 和另一个商品组合 B 同时出现在一个或者多个客户的购物清单上,那么我们就说这两个商品组合中存在关联规则。


如果我们要研究买了 A 的客户再买 B 的情况,这样的规则就表示为 A→B,A为 前导,B为 后继。


   支持度(Support):某个商品组合出现的次数与总次数之间的比例。以图2的数据为例,亚洲和欧洲在10个客户中,都同为各出现了9次,因此它们的支持度都是 9/10 = 0.9,而大洋洲只出现了4次,它的支持度为 4/10 = 0.4。 同时出现 欧洲/亚洲/大洋洲 的次数为5,因此这组合的支持度为 5/10 = 0.2,如此类推。


   置信度(Confidence):购买了商品 A 的客户中,有多大比例购买商品 B。


   例如在图2数据中,6位客户订了去非洲的,其中2位客户还订了去大洋洲的,那么就存在一条从非洲到大洋洲的关联规则,这规则的置信度为 2/6 = 0.3,表达式为置信度(非洲 → 大洋洲) = 0.3


   提升度(Lift):购买了商品 A 的客户,相比于一般客户,多大程度更倾向于购买商品 B


   这提升度好像和置信度含义一样,既然已经有了置信度,怎么还要多一个提升度呢?刚才已经计算了置信度(非洲 → 大洋洲) = 0.3,同理,也可得知 置信度(非洲 → 北美洲) = 2/6 = 0.3 但在所有客户中,订大洋洲的比例为0.6,因此订非洲的客户相比于订大洋洲来说,更倾向于订北美洲。因此,提升度 这个指标,就是要将 (A→B) 的置信度和 B 的支持度进行对比,所以对应的计算公式是:提升度(A→B) = 置信度(A→B) / 支持度(B)。


   杠杆率(Leverage):杠杆率(A→B) = 置信度(A→B) − 支持度(A) × 支持度(B)。

   杠杆率越大,A 和 B 的关系越密切,当杠杆率为 0 时说明 A 和 B 互相独立。

   确信度(Conviction):确信度(A→B) = (1 − 支持度(B)) / (1 − 置信度(A→B))。

   确信度也用来衡量 A 和 B 的独立性,值越大,A 和 B 的关联性也越强。


   如果销售数据中存在一定的关联规则,我们希望符合规律的商品/商品组合本身有足够销量,也就是有足够的 支持度,例如如就算发现了商品或者商品组合 A 和 B 之间存在很强的销售规律,但是买 A 和 B 的客户数量或比例很少,那这样的规则意义也不大。另外,我们希望商品组合 A 对商品组合 B 有足够强的 提升度。


   对数据进行布尔值转换,代码如下,输出图3


import pandas as pd
from mlxtend.preprocessing import TransactionEncoder


dataset = [
  ['欧洲', '亚洲','大洋洲'],
  ['欧洲','非洲','北美洲','南美洲'],
  ['亚洲','非洲','北美洲','大洋洲'],
  ['欧洲','亚洲','非洲'],
  ['欧洲','亚洲','非洲','大洋洲'],
  ['欧洲', '亚洲','大洋洲'],
  ['欧洲','大洋洲','亚洲'],
  ['欧洲','欧洲','北美洲','大洋洲'],
  ['欧洲','亚洲','非洲'],
  ['欧洲', '非洲','亚洲']
]

te = TransactionEncoder()
encorder = te.fit(dataset)
one_hot_encoded_array = encorder.transform(dataset)

df = pd.Dataframe(one_hot_encoded_array, columns=encorder.columns_,index=['A','B','C','D','E','F','G','H','I','J'])
print(df)



   创建了一个 TransactionEncoder 的对象 te 后, 首先 执行 fit() 方法,参数是之前的双层列表对象 dataset,这个方法的作用是从数据中统计唯一的商品列表;执行 transform() 方法,再次把 dataset 作为参数传进去,这时候返回的值就是一个经过独热编码过的,numpy 的 ndarray 类型对象。每一行依然是代表一个客户的订单清单,其中每一个元素代表这位客户有没有订相对应的洲。现在的值全都是 布尔值的 True 和 False,程序后面怎么知道它们分别对应哪个洲呢?其实在执行 encorder = te.fit(dataset) 的时候,已经把每一列对应的洲标签都存储在 encoder.columns_ 这个属性里,我们如果执行下面这行代码, 得出 图4 的列表。最后创建一个 pandas 的 Dataframe 对象 df,将洲标签和数据组合在一起。



print(encorder.columns_)


关联规则挖掘: 运用apriori() 和 association_rules() 这两个函数,代码如下,得出 图5


from mlxtend.frequent_patterns import apriori, association_rules

# 1.找出支持度大于 0.4 的商品,仅对它们进行数据分析
frequent_itemsets = apriori(df, min_support=0.4, use_colnames=True)

# 2.找到置信度大于 0.8 的关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.8)

# 3.显示满足条件的规则,按照提升度从高向低排序
print(rules.sort_values("lift", ascending=False))

apriori() 函数的参数

df: 一个 Dataframe 对象,里面存放的是经过独热编码的顾客购物清单;
min_support: 最小支持度,这个自行决定
use_colnames: 如果是 True,那么结果会使用列标签的名称,否则使用序号。


association_rules() 函数的参数

df: 具有 support 和 itemsets 这两列的 Dataframe 对象;
metric: 作为条件的数据指标英语名称,支持三个指标:‘support’(支持度),‘confidence’(置信度)和 ‘lift’(提升度),默认为 ‘confidence’;
min_threshold: 数据指标的最小值,默认是 0.8。


图1


图2



图3


图4


图5

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5576011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存