【机器学习】关联规则算法

108 阅读8分钟

参考网址

juejin.cn/post/694794…

仅仅用于个人学习,感谢大佬分享

图片.png

0/总结

item和item之间的关系。 
项:item
项集:item的集合

频繁项集:出现次数多的项 或者 多个项,就是频繁项集。

关联规则:a出现,必然导致b出现,或者大概率b会出现。因果关系

捆绑销售,推荐商品。优惠券
比如,你在小象超市买了花甲,然后就会推荐你买辣椒,香菜等商品。

常常用于推荐系统。 

挖掘消费者购买商品的共性。
捆绑销售,调整货架的布局陈列,涉及促销的方案等。

购物篮分析

啤酒和尿不湿。


1/算法概述

关联规则挖掘,可以让我们从大量的数据集中发现项与项(item 与 item)之间的关系。
这在我们的生活中有很多应用场景,“购物篮分析”就是一个常见的场景,这个场景可以从消费者的购物记录中发掘商品与商品之间的关联关系,
进而通过商品`捆绑销售`或者相关推荐的方式带来更多的销售量。
所以说,关联规则挖掘是个非常有用的技术。

关联规则是反映一个事物与其他事物之间的关联性(频繁项集)和依赖性(关联规则),
常用于实体商店或在线电商的推荐系统。
通过对顾客的购买记录数据库进行关联规则挖掘,最终目的是发现顾客群体的购买习惯的内在共性,例如购买产品A的同时也连带购买产品B的概率,这就是关联规则。

根据挖掘结果,调整货架的布局陈列、设计促销组合方案,实现销量的提升。
最经典的应用案例莫过于<啤酒和尿布>。

关联分析又称关联挖掘,就是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。
能从大量数据中发现项集之间有趣的关联和相关联系。
关联分析的一个典型例子是购物篮分析。
该过程通过发现顾客放人其购物篮中的不同商品之间的联系,分析顾客的购买习惯。
通过了解哪些商品频繁地被顾客同时购买,这种关联的发现可以帮助零售商制定营销策略。其他的应用还包括价目表设计、商品促销、商品的排放和基于购买模式的顾客划分。

可从数据库中关联分析出形如“由于某些事件的发生而引起另外一些事件的发生”之类的规则。如“67%的顾客在购买啤酒的同时也会购买尿布”,因此通过合理的啤酒和尿布的货架摆放或捆绑销售可提高超市的服务质量和效益。
又如“C语言课程优秀的同学,在学习‘数据结构’时为优秀的可能性达88%”,那么就可以通过强化“C语言”的学习来提高教学效果。

2/应用的场景

互联网推荐(线上电商)

个性化推荐:在界面上给用户推荐相关商品
         如果用户浏览了某个商品,可以给他推荐其他的相关联的商品。
组合优惠券:给购买过得用户发放同时购买组合内商品的优惠券

捆绑销售:将相关商品组合起来销售

线下店铺分析(线下实体店)

商品配置分析:哪些商品可以一起购买,关联商品如何陈列/促销
客户需求分析:分析顾客的购买习惯/顾客购买商品的时间/地点等

金融保险

经由购物篮分析能够设计不同的服务组合以扩大利润;能藉由购物篮分析侦测出可能不寻常的投保组合并作预防。

风控领域

分析同时行动的账号、寻找有效的策略组合

3/概念

关联规则三个核心概念:支持度、置信度、提升度,
用最经典的啤酒-尿不湿给大家举例说明这三个概念,
以下是几名客户购买的商品列表:

图片.png

<1>支持度

支持度 (Support):指某个商品组合出现的次数与总次数之间的比例。
计算公式:出现某商品的次数 / 总次数

在这个例子中,我们可以看到“牛奶”出现了 4 次,那么这 5 笔订单中“牛奶”的支持度就是 4/5=0.8

图片.png

同样“牛奶 + 面包”出现了 3 次,那么这 5 笔订单中“牛奶 + 面包”的支持度就是 3/5=0.6

图片.png

<2>置信度

置信度 (Confidence):指的就是当你购买了商品 A,会有多大的概率购买商品 B
计算公式:a-->b的置信度的计算公式是:
   ab的支持度 / a的支持度

<1>置信度(牛奶→啤酒)= 3/4=0.75,代表如果你购买了牛奶,有多大的概率会购买啤酒。

图片.png

<2>置信度(啤酒→牛奶)= 3/4=0.75,代表如果你购买了啤酒,有多大的概率会购买牛奶?

图片.png

<3>置信度(啤酒→尿不湿)= 4/4=1.0,代表如果你购买了啤酒,有多大的概率会买尿不湿.

图片.png

<3>提升度

我们在做商品推荐或者策略的时候,重点考虑的是提升度。
因为提升度代表的是商品 A 的出现,对商品 B 的出现概率提升的程度。

提升度 (AB) = 置信度 (AB)/ 支持度 (B)

所以提升度有三种可能:
    提升度 (AB)>1:代表有提升;

    提升度 (AB)=1:代表有没有提升,也没有下降;

    提升度 (AB)<1:代表有下降。

提升度 (啤酒→尿不湿) =置信度 (啤酒→尿不湿)/支持度  (尿不湿)=1.0/0.8=1.25

可见啤酒对尿不湿是有提升的,提升度为1.25。
其实可以简单理解为:在全集的情况下,尿不湿的概率为0.8,而在包含啤酒这个子集中,尿不湿的概率为1,因此,子集的限定,提高了尿不湿的概率。

<4>频繁项集

频繁项集(frequent itemset) :就是支持度大于等于最小支持度 (Min Support) 阈值的项集。
所以小于最小值支持度的项目就是非频繁项集,而大于等于最小支持度的的项集就是频繁项集。
项集可以是单个商品,也可以是组合

Apriori算法核心思想:

   某个项集是频繁的,那么它的所有子集也是频繁的

{Milk, Bread, Coke} is frequent  → {Milk, Coke} is frequent

   如果一个项集是非频繁项集,那么它的所有超集也是非频繁项集 
{Battery} is infrequent  → {Milk, Battery} is infrequent

图片.png

挖掘demo

每个导演都有自己的偏好、比如周星驰有星女郎,张艺谋有谋女郎,且巩俐经常在张艺谋的电影里面出现.
因此,每个导演对演员的选择都有一定的偏爱,我们以宁浩导演为例,分析下选择演员的一些偏好,没有找到公开的数据集,自己手动扒了一部分,大概如下,有些实在有点多,于是简化下进行分析

图片.png

可以看到,我们一共扒了9部电影,计算的时候,支持度的时候,总数就是9.
#把电影数据转换成列表
data = [['葛优','黄渤','范伟','邓超','沈腾','张占义','王宝强','徐峥','闫妮','马丽'],
['黄渤','张译','韩昊霖','杜江','葛优','刘昊然','宋佳','王千源','任素汐','吴京'],
['郭涛','刘桦','连晋','黄渤','徐峥','优恵','罗兰','王迅'],
['黄渤','舒淇','王宝强','张艺兴','于和伟','王迅','李勤勤','李又麟','宁浩','管虎','梁静','徐峥','陈德森','张磊'],
['黄渤','沈腾','汤姆·派福瑞','马修·莫里森','徐峥','于和伟','雷佳音','刘桦','邓飞','蔡明凯','王戈','凯特·纳尔逊','王砚伟','呲路'],
['徐峥','黄渤','余男','多布杰','王双宝','巴多','杨新鸣','郭虹','陶虹','黄精一','赵虎','王辉'],
['黄渤','戎祥','九孔','徐峥','王双宝','巴多','董立范','高捷','马少骅','王迅','刘刚','WorapojThuantanon','赵奔','李麒麟','姜志刚','王鹭','宁浩'],
['黄渤','徐峥','袁泉','周冬雨','陶慧','岳小军','沈腾','张俪','马苏','刘美含','王砚辉','焦俊艳','郭涛'],
['雷佳音','陶虹','程媛媛','山崎敬一','郭涛','范伟','孙淳','刘桦','黄渤','岳小军','傅亨','王文','杨新鸣']
]

通过上述分析可以看出:

在宁浩的电影中,用的最多的是黄渤和徐峥,
黄渤9次,支持度100%,
徐峥7次,支持度78%,
('**徐峥**', '**黄渤**') 同时出现7次,置信度为100%,看来有徐峥,必有黄渤,
真是宁浩必请的黄金搭档。

当然,这个数据量比较小,基本上肉眼也能看出来,这里只是提供一个分析案例,巩固下基础知识,大规模的数据,人眼无法直接感知的时候,算法的挖掘与发现,就显得特别有意义了。