机器学习从入门到创业手记-关联与聚类分析

在基础软件部的主要负责的协助工程师完成数据分析,这段时间公司的业务主要来个各种电商平台,集中在用户画像,销售产品关联推荐等,这让我对之前高维提到过的啤酒尿布关联的案例有了兴趣。

 

一日无事,我走到高维旁边说:hi,你能给我讲讲牛奶啤酒尿布那个案例是怎么分析出来的?我觉得在那么多产品,那么大的销售量中如何才能找到对应的关联呢?

 

高维:这个可是我学电子商务的必修课程,我给你画个表来解释,表4.2.1里面我记录了每个客户的购买记录,现在需要找到里面出现最多的购买组合,这个出现最多的组合被称为频集。

 

客户ID

客户购买记录

1

牛奶,蛋糕

2

蛋糕,尿布,啤酒,鸡蛋

3

牛奶,尿布,饮料,啤酒

4

蛋糕,牛奶,啤酒,尿布

5

蛋糕,饮料,尿布,牛奶。

表4.2.1销售数据表

 

安逸:这个我知道的,是尿布和啤酒这对组合,这么少的数据人工就可以分析出来的,但若是有很多类似的数据,我怎么知道哪个关联度更强呢?

 

高维:这里面用支持度和置信度两个概念来描述是否关联的强度,比如我把牛奶,尿布定义为测试数据集,把啤酒定义数据关联项,支持度指的是同时包含数据关联项和测试数据集的单条数据在总体数据集中出现的频度,这里牛奶,尿布作为测试数据集一共在整体数据集中出现了两次,总体数据集一共五条记录,故可以的2/5=0.4就是牛奶,尿布关联啤酒的支持度,而置信度则是同时包含数据关联项和测试数据集的单条数据与只包含测试数据集的比例,这里只包含测试数据集的有三条,所以置信度是2/3=0.67。

 

安逸:为什么选择支持度和置信度作为关联度的标准呢?

 

高维:从商务角度看,支持度很低被认为是偶发行为,顾客可能很少有这种组合购买方式,我们做关联分析时应先将低支持度的删除。置信度则是使我们的推理结论更加有信服力,置信度代表在测试数据集组合被购买的情况下大约有多少可能会去购买关联商品,所以置信度越高关联度越大。

 

安逸:那这个关联规则也太简单了吧,我分别设置一个最小支持度与最小置信度的阈值不就可以了么?只要超过阈值的我就认为是有关联的。

 

高维:理论上是这样的,但是如果数据集非常大的话,大量的测试数据组合让算法的计算时间过长。所以在计算时要有有取舍,如测试数据集{1,2,3,4}是符合要求,那么{1,2,3}也会符合,所以还需找到测试数据集的最大包含项才行。

 

安逸:那算法还是比较复杂啊。

 

高维:去请教一下李里吧,

 

李里:Apriori算法正是高维描述的关联挖掘算法,其在算法上做了优化,比如按照表4.2.1里面描述的,将支持度的阈值设为3,那么像饮料的支持度只有2的,算法在下一轮迭代时删除所有带有饮料的测试集组合。这里weka里面也集成了Apriori算法,如图4.2.1在weka里面数据选择示例supermarket.arff,功能Tab选择Associate,在Choose中选择Apriori算法,点击start开始进行数据关联度分析。

 

图4.2.1 Associate中Apriori算法

      

       Weka的Apriori算法由数据项最小支持度是100%开始没次缩减5%,当找到最少有10个最小置信度为0.9或支持度仅剩10%的较小比列时停止,这些参数都可以通过界面进行配置,我们以最佳关联结果的第一行为例:biscuits=t frozen foods=t pet foods=t milk-cream=t vegetables=t 516 ==> bread and cake=t 475    <conf:(0.92)> lift:(1.28) lev:(0.02) [103] conv:(3.44),找到的购买关联是当消费者购买biscuits,frozen foods,pet foods,milk-cream,vagetables时,大概率会购买bread和cake,其中conf(0.92)是置信度得分,lift:(1.28)即提升度是置信度除以支持度的得分,conv:(3.44)被称为可信度得分,越高越可信。

 

=== Run information ===

 

Scheme:       weka.associations.Apriori -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -c -1

Relation:     supermarket-weka.filters.unsupervised.attribute.Remove-R217

Instances:    4627

Attributes:   216

              [list of attributes omitted]

=== Associator model (full training set) ===

 

 

Apriori

=======

 

Minimum support: 0.1 (463 instances)

Minimum metric <confidence>: 0.9

Number of cycles performed: 18

 

Generated sets of large itemsets:

 

Size of set of large itemsets L(1): 50

 

Size of set of large itemsets L(2): 562

 

Size of set of large itemsets L(3): 2169

 

Size of set of large itemsets L(4): 3107

 

Size of set of large itemsets L(5): 1744

 

Size of set of large itemsets L(6): 318

 

Size of set of large itemsets L(7): 11

 

Best rules found:

 

 1. biscuits=t frozen foods=t pet foods=t milk-cream=t vegetables=t 516 ==> bread and cake=t 475    <conf:(0.92)> lift:(1.28) lev:(0.02) [103] conv:(3.44)

 2. baking needs=t biscuits=t milk-cream=t margarine=t fruit=t vegetables=t 505 ==> bread and cake=t 464    <conf:(0.92)> lift:(1.28) lev:(0.02) [100] conv:(3.37)

 3. biscuits=t frozen foods=t milk-cream=t margarine=t vegetables=t 585 ==> bread and cake=t 537    <conf:(0.92)> lift:(1.28) lev:(0.03) [115] conv:(3.35)

 4. biscuits=t canned vegetables=t frozen foods=t fruit=t vegetables=t 536 ==> bread and cake=t 492    <conf:(0.92)> lift:(1.28) lev:(0.02) [106] conv:(3.34)

 5. baking needs=t frozen foods=t milk-cream=t margarine=t fruit=t vegetables=t 517 ==> bread and cake=t 474    <conf:(0.92)> lift:(1.27) lev:(0.02) [101] conv:(3.29)

 6. biscuits=t frozen foods=t pet foods=t milk-cream=t fruit=t 511 ==> bread and cake=t 468    <conf:(0.92)> lift:(1.27) lev:(0.02) [100] conv:(3.26)

 7. biscuits=t frozen foods=t tissues-paper prd=t milk-cream=t vegetables=t 575 ==> bread and cake=t 526    <conf:(0.91)> lift:(1.27) lev:(0.02) [112] conv:(3.22)

 8. biscuits=t frozen foods=t beef=t fruit=t vegetables=t 536 ==> bread and cake=t 490    <conf:(0.91)> lift:(1.27) lev:(0.02) [104] conv:(3.2)

 9. baking needs=t biscuits=t frozen foods=t cheese=t fruit=t 538 ==> bread and cake=t 491    <conf:(0.91)> lift:(1.27) lev:(0.02) [103] conv:(3.14)

10. biscuits=t frozen foods=t milk-cream=t margarine=t fruit=t 592 ==> bread and cake=t 540    <conf:(0.91)> lift:(1.27) lev:(0.02) [113] conv:(3.13)

 

 

安逸:真是简单好用啊,我这也秒变数据分析师了。

 

李里:真正的分析师还要有领域经验,比如,面包和果酱经过分析关联度很高,但对业务层来说这个是众所周知的,分析出来也是多余的。

 

高维:比如以电商数据分析为例,在实际操作中有什么经验可以分享么?

 

李里:在做支持度分析时,有些属性被用到的不是很频繁拖累了包括其属性的数据集,比如,再对一个省的消费能力进行分析时,这个省包括几百个城镇,而每个城镇的名称只会出现几次,这样分析出来的结果就会有问题,我们一般会将地域位置较近城镇进行合并,将地区属性由几百个城镇名称变为中部,东部,北部,西部,南部五部分,这样就不会造成数据的稀疏了,类似这样的属性还有年龄,一般也是将年龄分段比如18~23岁被分为大学生,24~28岁被分为职场新人。还有些属性出现的太过频繁,导致分析出大量冗余关联分析,比如,是否有智能手机这个属性,一般都会直接过滤掉,我们认为喜欢网上购物的一般都有智能手机。另外,对购物篮数据进行分析时,要重点关注商品的购买时间信息,通过客户购买商品的时间轴,可以勾画出用户从选择到购买的整体操作序列,当固定的操作序列出现时,对应的关联行为就会大概率出现。

 

高维:关联分析可以将不相关的属性之间变得有意义。

 

       李里:不同于关联分析,聚类分析会将所有具有相似目标的数据划分到同一组去。最通常的算法就是采用K均值算法来实现聚类,回忆一下该算法,首先选择K个初始化质心,这个K则是初始自定的聚类数,然后每个点都被分配到最近的质心,然后根据新分配点的位置更新质心,对这个过程进行迭代,直到质心不再变化为止。

 

       高维:我有个问题,开始时我并不知道要分几个聚类啊?

 

       李里:我的方法是尝试不同个个数进行试验,找到最合适的,即能使聚类中所有点距离其聚类中心的欧式距离的总和达到最小,可以用交叉验证方式来求解,KMeans算法和交叉验证都是很慢的,这个要注意,图4.2.2中显示了Weka中聚类的Kmeans算法,选择iris.arff数据集,并将原有的Class属性去除,并将KMeans算法的numClusters由默认值2改为3,点击start,会看到如图4.2.3的运行结果,每个属性对应后面三个分组的中心质点都列出来供参考,并在最后列出每个分类的数据比例。

 

图4.2.2 Cluster中SimpleMeans算法

 

 

图4.2.3 KMeans算法运行结果

 

       高维:这个操作虽然简单,但我怎么判断算法的结果是否Ok呢?

      

       李里:这里可以通过将数据可视化来验证一下,按照图4.2.4在算法列表中右键菜单选择Visualize cluster assignments,得到图4.2.5的结果可视化效果图,这里图示区的X轴是数据实例从0~149个共150条数据,而Y轴选择的在运行分类算法前去除Class属性,可以看到三个分类除了个别错误外基本都是正确的。

 

图4.2.4 可视化菜单

图4.2.5 可视化运行结果

 

       高维:这样可视化以后确实让结果看起来好理解多了,如果每个在数据分析中将数据都能可视化的话,那就太好了。

 

李里:数据可视化也是数据分析的基本功,而且做成好看易懂的数据报表才是运营人员所需要的,接下来你们就是要学习如何数据可视化。

 

猜你喜欢

转载自blog.csdn.net/yoki2009/article/details/88548078