来源:AI入门学习
作者:小伍哥
1、算法概述
关联规则挖掘可以让我们从数据集中发现项与项(item 与 item)之间的关系,它在我们的生活中有很多应用场景,“购物篮分析”就是一个常见的场景,这个场景可以从消费者交易记录中发掘商品与商品之间的关联关系,进而通过商品捆绑销售或者相关推荐的方式带来更多的销售量。所以说,关联规则挖掘是个非常有用的技术。
关联规则是反映一个事物与其他事物之间的相互依存性和关联性,常用于实体商店或在线电商的推荐系统:通过对顾客的购买记录数据库进行关联规则挖掘,最终目的是发现顾客群体的购买习惯的内在共性,例如购买产品A的同时也连带购买产品B的概率,根据挖掘结果,调整货架的布局陈列、设计促销组合方案,实现销量的提升,最经典的应用案例莫过于<啤酒和尿布>。
关联分析又称关联挖掘,就是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。能从大量数据中发现项集之间有趣的关联和相关联系。关联分析的一个典型例子是购物篮分析。该过程通过发现顾客放人其购物篮中的不同商品之间的联系,分析顾客的购买习惯。通过了解哪些商品频繁地被顾客同时购买,这种关联的发现可以帮助零售商制定营销策略。其他的应用还包括价目表设计、商品促销、商品的排放和基于购买模式的顾客划分。
可从数据库中关联分析出形如“由于某些事件的发生而引起另外一些事件的发生”之类的规则。如“67%的顾客在购买啤酒的同时也会购买尿布”,因此通过合理的啤酒和尿布的货架摆放或捆绑销售可提高超市的服务质量和效益。又如“C语言课程优秀的同学,在学习‘数据结构’时为优秀的可能性达88%”,那么就可以通过强化“C语言”的学习来提高教学效果。
2、应用场景
01)互联网推荐
个性化推荐:在界面上给用户推荐相关商品
组合优惠券:给购买过得用户发放同时购买组合内商品的优惠券
捆绑销售:将相关商品组合起来销售
02)线下店铺分析
商品配置分析:哪些商品可以一起购买,关联商品如何陈列/促销
客户需求分析:分析顾客的购买习惯/顾客购买商品的时间/地点等
3)金融保险
经由购物篮分析能够设计不同的服务组合以扩大利润;能藉由购物篮分析侦测出可能不寻常的投保组合并作预防。
4)风控领域
分析同时行动的账号、寻找有效的策略组合
3、几个概念
关联规则三个核心概念:支持度、置信度、提升度,用最经典的啤酒-尿不湿给大家举例说明这三个概念,以下是几名客户购买的商品列表:
01)支持度
支持度 (Support):指某个商品组合出现的次数与总次数之间的比例。
在这个例子中,我们可以看到“牛奶”出现了 4 次,那么这 5 笔订单中“牛奶”的支持度就是 4/5=0.8。
同样“牛奶 + 面包”出现了 3 次,那么这 5 笔订单中“牛奶 + 面包”的支持度就是 3/5=0.6
这样理解起来是不是非常简单了呢,大家可以动动手计算下 '尿不湿+啤酒'的支持度是多少
02)置信度
置信度 (Confidence):指的就是当你购买了商品 A,会有多大的概率购买商品 B
置信度(牛奶→啤酒)= 3/4=0.75,代表如果你购买了牛奶,有多大的概率会购买啤酒
置信度(啤酒→牛奶)= 3/4=0.75,代表如果你购买了啤酒,有多大的概率会购买牛奶?
置信度(啤酒→尿不湿)= 4/4=1.0,代表如果你购买了啤酒,有多大的概率会买尿不湿
由上面的例子可以看出,置信度是个条件概念,就是说在 A 发生的情况下,B 发生的概率是多少。
03)提升度
提升度 (Lift):我们在做商品推荐或者策略的时候,重点考虑的是提升度,因为提升度代表的是商品 A 的出现,对商品 B 的出现概率提升的程度。
提升度 (A→B) = 置信度 (A→B)/ 支持度 (B)
所以提升度有三种可能:
提升度 (A→B)>1:代表有提升;
提升度 (A→B)=1:代表有没有提升,也没有下降;
提升度 (A→B)<1:代表有下降。
提升度 (啤酒→尿不湿) =置信度 (啤酒→尿不湿)/支持度 (尿不湿)=1.0/0.8=1.25
可见啤酒对尿不湿是有提升的,提升度为1.25,其实可以简单理解为:在全集的情况下,尿不湿的概率为0.8,
而在包含啤酒这个子集中,尿不湿的概率为1,因此,子集的限定,提高了尿不湿的概率。
04)频繁项集
频繁项集(frequent itemset) :就是支持度大于等于最小支持度 (Min Support) 阈值的项集,
所以小于最小值支持度的项目就是非频繁项集,而大于等于最小支持度的的项集就是频繁项集。项集可以是单个商品,也可以是组合
Apriori算法核心思想:
某个项集是频繁的,那么它的所有子集也是频繁的。
{Milk, Bread, Coke} is frequent → {Milk, Coke} is frequent
如果一个项集是 非频繁项集,那么它的所有超集也是非频繁项集
{Battery} is infrequent → {Milk, Battery} is infrequent
如图所示,我们发现{A,B}这个项集是非频繁的,那么{A,B}这个项集的超集,{A,B,C},{A,B,D}等等也都是非频繁的,这些就都可以忽略不去计算。
运用Apriori算法的思想,我们就能去掉很多非频繁的项集,大大简化计算量。
这里用的是Python举例,用的包是apriori,当然R语言等其他语言,也有对应的算法包,原来都是一样的。
#包安装 pip install efficient-apriori #加载包 from efficient_apriori import apriori #
构造数据集 data = [('牛奶','面包','尿不湿','啤酒','榴莲'),
('可乐','面包','尿不湿','啤酒','牛仔裤'),
('牛奶','尿不湿','啤酒','鸡蛋','咖啡'),
('面包','牛奶','尿不湿','啤酒','睡衣'),
('面包','牛奶','尿不湿','可乐','鸡翅')] #挖掘频繁项集和频繁规则 itemsets, rules =
apriori(data, min_support=0.6, min_confidence=1) #频繁项集 print(itemsets)
{1: {('啤酒',): 4, ('尿不湿',): 5, ('牛奶',): 4, ('面包',): 4}, 2: {('啤酒', '尿不湿'): 4,
('啤酒', '牛奶'): 3, ('啤酒', '面包'): 3, ('尿不湿', '牛奶'): 4, ('尿不湿', '面包'): 4,
('牛奶', '面包'): 3}, 3: {('啤酒', '尿不湿', '牛奶'): 3, ('啤酒', '尿不湿', '面包'): 3,
('尿不湿', '牛奶', '面包'): 3}}
itemsets[1] #满足条件的一元组合 {('啤酒',): 4, ('尿不湿',): 5, ('牛奶',): 4, ('面包',): 4}
itemsets[2]#满足条件的二元组合 {('啤酒', '尿不湿'): 4,('啤酒', '牛奶'): 3,('啤酒', '面包'):
3,('尿不湿', '牛奶'): 4,('尿不湿', '面包'): 4,('牛奶', '面包'): 3}
itemsets[3]#满足条件的三元组合 {('啤酒', '尿不湿', '牛奶'): 3, ('啤酒', '尿不湿', '面包'):
3, ('尿不湿', '牛奶', '面包'): 3} #频繁规则 print(rules)
[{啤酒} -> {尿不湿}, {牛奶} -> {尿不湿}, {面包} -> {尿不湿}, {啤酒, 牛奶} ->
{尿不湿}, {啤酒, 面包} -> {尿不湿}, {牛奶, 面包} -> {尿不湿}]
每个导演都有自己的偏好、比如周星驰有星女郎,张艺谋有谋女郎,且巩俐经常在张艺谋的电影里面出现,因此,每个导演对演员的选择都有一定的偏爱,我们以宁浩导演为例,分析下选择演员的一些偏好,没有找到公开的数据集,自己手动扒了一部分,大概如下,有些实在有点多,于是简化下进行分析
可以看到,我们一共扒了9部电影,计算的时候,支持度的时候,总数就是9.
#把电影数据转换成列表 data = [['葛优','黄渤','范伟','邓超','沈腾','张占义','
王宝强','徐峥','闫妮','马丽'],
['黄渤','张译','韩昊霖','杜江','葛优','刘昊然','宋佳','王千源','任素汐','吴京'],
['郭涛','刘桦','连晋','黄渤','徐峥','优恵','罗兰','王迅'],
['黄渤','舒淇','王宝强','张艺兴','于和伟','王迅','李勤勤','李又麟','宁浩','管虎','梁静','
徐峥','陈德森','张磊'],
['黄渤','沈腾','汤姆·派福瑞','马修·莫里森','徐峥','于和伟','雷佳音','刘桦','邓飞','
蔡明凯','王戈','凯特·纳尔逊','王砚伟','呲路'],
['徐峥','黄渤','余男','多布杰','王双宝','巴多','杨新鸣','郭虹','陶虹','黄精一','赵虎','王辉'],
['黄渤','戎祥','九孔','徐峥','王双宝','巴多','董立范','高捷','马少骅','王迅','刘刚','
WorapojThuantanon','赵奔','李麒麟','姜志刚','王鹭','宁浩'],
['黄渤','徐峥','袁泉','周冬雨','陶慧','岳小军','沈腾','张俪','马苏','刘美含','王砚辉','焦俊艳','郭涛'],
['雷佳音','陶虹','程媛媛','山崎敬一','郭涛','范伟','孙淳','刘桦','黄渤','岳小军','傅亨','王文','杨新鸣']]
#算法应用 itemsets, rules = apriori(data, min_support=0.5, min_confidence=1) print(itemsets)
{1: {('徐峥',): 7, ('黄渤',): 9}, 2: {('徐峥', '黄渤'): 7}} print(rules)
[{徐峥} -> {黄渤}]
通过上述分析可以看出:
在宁浩的电影中,用的最多的是黄渤和徐峥,黄渤9次,支持度100%,徐峥7次,支持度78%,('徐峥', '黄渤') 同时出现7次,置信度为100%,看来有徐峥,必有黄渤,真是宁浩必请的黄金搭档。
当然,这个数据量比较小,基本上肉眼也能看出来,这里只是提供一个分析案例,巩固下基础知识,大规模的数据,人眼无法直接感知的时候,算法的挖掘与发现,就显得特别有意义了。
数据分析咨询请扫描二维码
CDA持证人Louis CDA持证人基本情况 我大学是在一个二线城市的一所普通二本院校读的,专业是旅游管理,非计算机非统计学。毕业之 ...
2024-12-18最近,知乎上有个很火的话题:“一个人为何会陷入社会底层”? 有人说,这个世界上只有一个分水岭,就是“羊水”;还有人说,一 ...
2024-12-18在这个数据驱动的时代,数据分析师的技能需求快速增长。掌握适当的编程语言不仅能增强分析能力,还能帮助分析师从海量数据中提取 ...
2024-12-17在当今信息爆炸的时代,数据分析已经成为许多行业中不可或缺的一部分。想要在这个领域脱颖而出,除了热情和毅力外,你还需要掌握 ...
2024-12-17数据分析,是一项通过科学方法处理数据以获取洞察并支持决策的艺术。无论是在商业环境中提升业绩,还是在科研领域推动创新,数据 ...
2024-12-17在数据分析领域,图表是我们表达数据故事的重要工具。它们不仅让数据变得更加直观,也帮助我们更好地理解数据中的趋势和模式。相 ...
2024-12-16在当今社会,我们身处着一个飞速发展、变化迅猛的时代。不同行业在科技进步、市场需求和政策支持的推动下蓬勃发展,呈现出令人瞩 ...
2024-12-16在现代商业世界中,数据分析师扮演着至关重要的角色。他们通过解析海量数据,为企业战略决策提供有力支持。要有效完成这项任务, ...
2024-12-16在当今数据爆炸的时代,数据分析师是组织中不可或缺的导航者。他们通过从大量数据中提取可操作的洞察力,帮助企业在竞争激烈的市 ...
2024-12-16在现代企业中,数据分析师扮演着至关重要的角色。他们不仅负责处理和分析大量的数据,还需要将这些分析结果转化为切实可行的商业 ...
2024-12-16在当今的大数据时代,数据分析已经成为推动企业战略的重要组成部分。无论是金融、医疗、零售,还是制造业,各个行业对数据分析的 ...
2024-12-16在当今这个以数据为驱动力的时代,数据分析领域正在迅速扩展与发展。随着大数据、人工智能和机器学习技术的不断进步,数据分析已 ...
2024-12-16在信息爆炸和数据驱动的时代,数据分析专业是否值得一选成为许多人思考的议题。无论是刚刚迈入大学校门的新生,还是考虑职业转型 ...
2024-12-16适合数据分析专业学生的实习岗位有很多,以下是一些推荐: 阿里巴巴数据分析岗位实习:适合经济、统计学、数学及计算机专业的 ...
2024-12-16在数据科学领域,探索实习机会是一个理想的学习和成长方式。实习不仅可以提供宝贵的实践经验,还能帮助学生发展关键的数据分析技 ...
2024-12-16在当今信息驱动的时代,数据分析不仅成为了企业决策的重要一环,还催生了各种职业机会。从技术到业务,数据分析专业的就业岗位种 ...
2024-12-16在现代企业中,数据分析师被誉为“数据探险家”,他们通过揭示隐藏在数据背后的故事,帮助公司优化业务策略和做出明智的决策。然 ...
2024-12-16在大数据崛起的时代,数据分析师被誉为企业的“幕后英雄”。他们通过解读数据,揭示隐藏的真相,为企业战略提供重要的指导。这份 ...
2024-12-16在这个信息大爆炸的时代,数据分析师成为了企业中的“福尔摩斯”,他们能够从庞杂的数据中提取关键洞察,为业务发展提供坚实支持 ...
2024-12-16在这个数据为王的现代社会,数据分析师如同企业的导航员,洞悉数据背后所隐藏的商业机会和战略优势。然而,成为一名优秀的数据分 ...
2024-12-16