RS推荐系统-关联规则-Apriori
关联规则
关联规则又称为:Association Rules,旨在表达:如果一个消费者购买了产品A,那么他有多大几率会购买产品B?
故事背景:沃尔玛在分析销售记录时,发现啤酒和尿布经常一起被购买,于是他们调整了货架,把两者放在一起,结果真的提升了啤酒的销量。
原因解释:爸爸在给宝宝买尿布的时候,会顺便给自己买点啤酒?
沃尔玛是最早通过大数据分析而受益的传统零售企业,对消费者购物行为进行跟踪和分析。
对于关联规则,引入下面三个概念:支持度、置信度和提升度
支持度
支持度:是个百分比,指的是某个商品组合出现的次数与总次数之间的比例。支持度越高,代表这个组合出现的频率越大。
订单编号 | 购买的商品 |
---|---|
1 | 牛奶、面包、尿布 |
2 | 可乐、面包、尿布、啤酒 |
3 | 牛奶、尿布、啤酒、鸡蛋 |
4 | 面包、牛奶、尿布、啤酒 |
5 | 面包、牛奶、尿布、可乐 |
如上表所示,可以计算出:
“牛奶”的支持度=4/5=0.8
“牛奶+面包”的支持度=3/5=0.6。
置信度
置信度:是个条件概念,指的是当你购买了商品A,会有多大的概率购买商品B
订单编号 | 购买的商品 |
---|---|
1 | 牛奶、面包、尿布 |
2 | 可乐、面包、尿布、啤酒 |
3 | 牛奶、尿布、啤酒、鸡蛋 |
4 | 面包、牛奶、尿布、啤酒 |
5 | 面包、牛奶、尿布、可乐 |
如上表所示,可以计算出:
置信度(牛奶→啤酒)=2/4=0.5
置信度(啤酒→牛奶)=2/3=0.67
提升度
提升度:商品A的出现,对商品B的出现概率提升的程度
订单编号 | 购买的商品 |
---|---|
1 | 牛奶、面包、尿布 |
2 | 可乐、面包、尿布、啤酒 |
3 | 牛奶、尿布、啤酒、鸡蛋 |
4 | 面包、牛奶、尿布、啤酒 |
5 | 面包、牛奶、尿布、可乐 |
如上表所示,可以引发一个思考,如果我们单纯看置信度(可乐→尿布)=1,也就是说可乐出现的时候,用户都会购买尿布,那么当用户购买可乐的时候,就需要推荐尿布么?
这时候就需要引入提升度了,我们有以下公式:
提升度(A→B)=置信度(A→B)/支持度(B)
提升度的三种可能:
- 提升度(A→B)>1:代表有提升;
- 提升度(A→B)=1:代表有没有提升,也没有下降;
- 提升度(A→B)<1:代表有下降
对于提升度,如果还没有完全理解,可以换个通俗易懂的概念进行解释:对于itemA和itemB,
- 如果itemB单独出现的效果比itemA+itemB一起出现的效果好,这时提升度<1;
- 如果itemA+itemB一起出现的效果比itemB单独出现的效果好,这时提升度>1
Apriori
有了以上这三个概念,我们可以引入Apriori算法,所谓Apriori算法就是查找频繁项集(frequent itemset)的过程。
- 频繁项集:支持度大于等于最小支持度(Min Support)阈值的项集。
- 非频繁项集:支持度小于最小支持度的项集
我们把上面案例中的商品用ID来代表,牛奶、面包、尿布、可乐、啤酒、鸡蛋的商品ID分别设置为1-6。如下图所示
订单编号 | 购买的商品 |
---|---|
1 | 1、2、3 |
2 | 4、2、3、5 |
3 | 1、3、5、6 |
4 | 2、1、3、5 |
5 | 2、1、3、4 |
如下图所示,先计算k=1项的支持度,假设最小支持度=0.5,那么Item4和6不符合最小支持度的,不属于频繁项集。
商品项集 | 购买的商品 |
---|---|
1 | 4/5 |
2 | 4/5 |
3 | 5/5 |
4 | 2/5 (剔除) |
5 | 3/5 |
6 | 1/5 (剔除) |
在这个基础上,我们将商品两两组合,得到k=2项的支持度,筛选掉小于最小值支持度的商品组合。
商品项集 | 购买的商品 |
---|---|
1,2 | 3/5 |
1,3 | 4/5 |
1,5 | 1/5 (剔除) |
2,3 | 4/5 |
2,5 | 2/5 (剔除) |
3,5 | 3/5 |
将商品进行K=3项的商品组合,筛选掉小于最小值支持度的商品组合,可以得到:
商品项集 | 购买的商品 |
---|---|
1,2,3 | 3/5 |
2,3,5 | 2/5(剔除) |
1,2,5 | 1/5 (剔除) |
1,3,5 | 2/5 (剔除) |
最终的得到K=3项的频繁项集{1,2,3},也就是{牛奶、面包、尿布}的组合。
总结Apriori算法的流程:
- Step1,K=1,计算K项集的支持度;
- Step2,筛选掉小于最小支持度的项集;
- Step3,如果项集为空,则对应K-1项集的结果为最终结果。
- 否则K=K+1,重复1-3步。
Example
我们通过kaggle上面的一个超市购物篮的数据集,进行Apriori分析。
==>数据链接
该数据集为rawdata,没有记录TransactionID和列名,我们需要做的是统计交易中的频繁项集和关联规则。
import numpy as np
import pandas as pd#读取数据
data = pd.read_csv('./Market_Basket_Optimisation.csv',header = None)
#查看原始数据
data
#将原始数据做数据清洗,剔除空值,将数据转成文本str格式
corpus = pd.DataFrame(columns = ['items'])
for row in range(data.shape[0]):tmp = [i for i in data.iloc[row,:].values if str(i) != 'nan']corpus.loc[row,'items'] = ','.join(tmp)
corpus
#将items进行multi-hot
corpus = corpus['items'].str.get_dummies(sep=',')
corpus
#导入关联规则的包,输出频繁项集和关联规则
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules#此处设置最小支持度为0.02,可以根据需求进行调参
frequent_itemsets = apriori(corpus, min_support=0.02, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=0.5)#查看频繁项集
frequent_itemsets
#查看关联规则
rules
#按照提升度进行排序展示
rules_lift_rank = rules.sort_values(by = ['lift'],ascending=False)
rules_lift_rank
一般意大利面的购买,能够提升橄榄油/碎牛肉的购买率,反之亦然。
#按照置信度进行排序展示
rules_confidence_rank = rules.sort_values(by = ['confidence'],ascending=False)
rules_confidence_rank
大多数用户购买商品的同时,也会选择购买矿泉水。The combinations of(item,mineral wate)have high confidence
#按照支持度(k=2)进行排序展示
rules_support_rank = rules.sort_values(by = ['support'],ascending=False)
rules_support_rank
可以看出矿泉水的支持度是最高的,占购物篮总量的23%。 The mineral wate has highest support.
总结
Q:关联规则与协同过滤的区别?
A:
- 关联规则是基于transaction,而协同过滤基于用户偏好(评分)。
- 商品组合使用的是购物篮分析,也就是Apriori算法,协同过滤计算的是相似度。
- 关联规则没有利用“用户偏好”,而是基于购物订单进行的频繁项集挖掘。
在推荐系统中,两种推荐算法的思考维度不同,很多时候,我们需要把多种推荐方法的结果综合起来做一个混合的推荐。
RS推荐系统-关联规则-Apriori相关推荐
- python数据分析 - 关联规则Apriori算法
关联规则Apriori算法 导语 mlxtend实现Apriori算法 导语 关联规则: 是反映一个事物与其他事物之间的相互依存性和关联性 常用于实体商店或在线电商的推荐系统:通过对顾客的购买记录数据 ...
- 数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例...
全文链接:http://tecdat.cn/?p=27606 作为数据挖掘的一个重要研究方向-关联规则用于发现数据项之间隐含的深层次的关联,如Apriori模型可以通过对客户需求进行深入的分析来发现数 ...
- apriori算法_机器学习(无监督学习)关联规则Apriori算法原理与python实现
关联规则Apriori算法 1.关联规则概述 关联规则算法是在一堆数据集中寻找数据之间的某种关联,通过该算法我们可以对数据集做关联分析--在大规模的数据中寻找有趣关系的任务.这些关系可以有两种形式:频 ...
- 一步步教你轻松学关联规则Apriori算法
一步步教你轻松学关联规则Apriori算法 (白宁超 2018年10月22日09:51:05) 摘要:先验算法(Apriori Algorithm)是关联规则学习的经典算法之一,常常应用在商业等诸多领 ...
- 关联规则Apriori(python实现):Bakery Bussiness Model
关联规则Apriori(python实现):Bakery Bussiness Model 数据和编译环境说明 数据挖掘目标的建立 引入数据(CSV 文件)及相关库 数据探索 数据清洗 深度挖掘数据的深 ...
- php关联规则,如何理解关联规则apriori算法
理解关联规则apriori算法:Apriori算法是第一个关联规则挖掘算法,也是最经典的算法,它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接[类矩阵运算]与剪枝[去掉那些没必 ...
- 关联规则Apriori算法 python简单实现
1.基础知识 本文章主要参看博客 :关联规则Apriori算法 这里只是本人对该博主的代码做了一个简单的修改,能成功运行. 啦啦啦,我只是一个小小的知识搬运工! 2.代码 #加载数据集 import ...
- 【数据挖掘实验】关联规则——Apriori算法
一.实验项目名称: 关联规则--Apriori算法 二.实验目的与要求: 在软件方面:会用Clementine软件进行关联规则分析. 在理论方面:Apriori算法. 三.实验原理: 1.Aprior ...
- 基于关联规则(Apriori)+协同过滤(collaborative filtering)实现电影推荐系统
基于关联规则算法+协同过滤算法的电影推荐系统 一.前言 1.数据集介绍 2.方法概述 3.运行环境 二.数据准备与预处理 1.数据熟悉 2.数据读取 3.数据预处理 3.1 无用属性删除 3.2 缺失 ...
最新文章
- ​“手把手撕LeetCode题目,扒各种算法套路的裤子”
- (chap4 IP协议) 全局地址和私有地址
- 新兴机器学习算法:从无监督降维到监督降维
- P2146 [NOI2015] 软件包管理器
- 方正高影仪安装方法_铝合金门窗是怎么安装的?
- was修改堆内存_WAS问题解决思路
- 【Vue.js 知识量化】ES6 语法积累
- 原理优先的重要性_就signal探讨
- weUI多页面切换效果
- childNodes.length 的临时保存
- acr122ua9读写软件_NFC读卡器ACR122U-A9 非接触型IC读写器 龙杰读卡器 IC解密器
- 射频电路设计及PCB设计要点
- 计算机网络的性能指标
- Android 支付宝支付密码输入界面
- AKSHARE 上获取股票数据用于盘后分析以及自己的交易模型的测试。
- Totam animi repellendus consequuntur ad.Deserunt temporibMous nulla soluta distinctio voluptas esse.
- 烂大街的TCP/IP网络模型,你真的懂了?
- VS图像处理(一)——基本建立程序
- 完全免费,界面友好的文件批量更名工具Bulk Rename Utility
- Cision《2022全球媒体调查报告》:新闻源可信度是全球新闻业面临的最大挑战之一 | 美通社头条...
热门文章
- 项目2—职员有薪水了
- 中学计算机竞赛教程,全国中小学信息技术课程教学大赛获奖案例初中信息技术八年级-设置自定义动画动作路径...
- 基于机器学习的文本分类
- 阿德莱德大学语言班成绩为C,留学攻略—阿德莱德大学语言班
- 他说:“程序员是出轨率最高群体”,然后就被解约了...
- 如何用一根网线实现在两台电脑之间传输数据
- 电信机顶盒ty1208-z刷linux(armbian)
- C中的strlen()函数说明,以及使用时要注意事项
- 盛大资深软件工程师谈Android开发经验
- 噁二唑和三唑衍生物(PXZ-OXD, 2PXZ-OXD,2PXZ-TAZ,PXZ-TAZ)