3分钟了解“关联规则”推荐

转载自 3分钟了解“关联规则”推荐

“把啤酒放在尿布旁,有助于提升啤酒销售量”是关联规则推荐的经典案例,今天,和大家聊聊“关联规则推荐”,正文不含任何公式,保证PM弄懂。

 

一、概念

什么是关联规则(Association Rules)?

:关联规则是数据挖掘中的概念,通过分析数据,找到数据之间的关联。电商中经常用来分析购买物品之间的相关性,例如,“购买尿布的用户,有大概率购买啤酒”,这就是一个关联规则。

画外音:如果把买尿布记作A,买啤酒记作B

“买尿布的用户有较大概率买啤酒”这个关联规则记作A -> B

 

什么是关联规则推荐(Association Rule Based Recommendaion)?

:顾名思义,利用关联规则,来实施推荐。关联规则推荐的目标,是希望达到

 “将尿布放入购物车之后,再推荐啤酒”

“直接推荐啤酒”

获取有更好的售卖效果

画外音:这个目标非常非常重要,有些场景,或许直接推荐更有效。

 

关联规则推荐的典型应用

  • 线下,可以将尿布和啤酒放在一起

  • 线上,可以在用户将尿布放入购物车后,立刻推荐啤酒

 

二、如何实施

假设某电商会售卖ABCD四种商品,历史上共5笔订单,分别卖出{A,B,C}, {B,C,D}, {A,B,C,D}, {A,C}, {C} 如何来实施“关联规则”推荐呢?

 

第一步:数据准备

如上图,纵坐标所有历史订单横坐标每笔订单售出的商品

 

第二步:计算关联规则(组合商品)的支持度

 

什么是支持度(support)?

:共5笔订单,3笔包含商品AA的支持度是3/5

很容易计算出,各个商品的支持度。从支持度可以看出,Best Seller是商品C100%的订单中都包含商品CC的支持度是1。

 

除了单个商品,组合商品也有支持度。

5笔订单,2笔同时包含AB,即A->B的支持度是2/5

画外音:全局总共4种商品,假设关联规则只关联2种商品,则一共需要计算C(4,2)6种组合商品的支持度{AB,AC,AD,BC,BD,CD}

 

支持度评估商品包含在订单中的“概率”,一个订单,有多大概率包含这个商品。

画外音:一般会先对支持度高的商品实施推荐,如果先实优化支持度低的商品,即使推荐效果翻倍,总体订单提升效果也会很有限。

 

第三步:计算关联规则的置信度

 

什么是置信度(confidence)?

:已知购买了A,有多大概率购买了B(即同时购买了AB),称A -> B的置信度。

可以看到,商品A3次购买,这3次中有2次购买了BA->B的置信度是2/3

 

画外音:额,本来不想贴公式的

confidence(A->B) = support(A->B)/support(A)= (2/5)/(3/5) = 2/3

这也相对比较好理解,

  • 分子:support(A->B)是同时购买AB的比例

  • 分母:support(A)是只购买A的比例

二者相除,得到“购买了A,有多大概率购买B”,置信度的本质是条件概率

 

这里需要注意的是,X->YY->X的置信度不一定相等。

如上图:

B->C的置信度是1,买商品B时,100%会买C

C->B的置信度是3/5,买商品C时,只有3/5买了B

画外音:

support(B->C)=3/5

support(C->B)=3/5

confidence(B->C)=support(B->C)/support(B)=1

confidence(C->B)=support(C->B)/support(C)=3/5

公式是给程序看的,excel表格是给人看的,结果都一样。

 

第四步:计算关联规则的提升度

 

上一个例子里,confidence(B->C)=1,即:如果用户购买商品B100%会买C,那是不是意味着,如果用户将商品B放入购物车,就可以向用户推荐商品C呢?

:不是。

 

我们来回顾一下,关联规则推荐的目标,是希望达到

 “将尿布放入购物车之后,再推荐啤酒”

“直接推荐啤酒”

获取有更好的售卖效果

虽然购买商品B100%会买C

画外音:confidence(B->C)=1

但直接推荐C,用户也100%会买C

画外音:support(C)=1

 

会发现,购买B与购买C是独立事件,用户买不买C和用户买不买B没有直接关系。这里的关联规则推荐,并没有比直接推荐获取更好的效果

 

用什么指标来评估关联规则推荐的效果呢?

:提升度。

 

什么是提升度(lift)?

A->B关联规则推荐,与直接推荐B,的比值,可以用来评估推荐效果:

  • 大于1,说明有效,在购买A时推荐B,比直接推荐B,效果更好

  • 等于1,说明无关,购买A与购买B,是独立事件

  • 小于1,说明负相关,购买A时推荐B,效果还不如直接推荐B

画外音:又有公式了

lift(A->B) =confidence(A->B)/support(B)

这也相对比较好理解,

  • 分子:confidence(A->B),购买A时,有多大概率同时购买B

  • 分母:support(B),有多大概率直接购买B

二者相除,得到效果是否更好。

 

还是通过两个直观的例子来看。

来看看关联规则A->B,与直接推荐B,效果有没有提升:

  • 3个订单购买A,这3个订单中有2个订单购买了B,所以A->B的置信度是2/3,即买了A2/3的概率会买B

  • 直接推荐B的话,5个订单中有3个购买了B,所以B的支持度是3/5即有3/5的概率会直接买B

会发现,关联规则推荐的效果更好

 

画外音:根据公式

confidence(A->B) =support(A->B)/support(A) = 2/3

support(B) = 3/5

lift(A->B) =confidence(A->B)/support(B) = 10/9

lift(A->B) > 1,故关联规则推荐是正相关的。

 

来看看关联规则A->D,与直接推荐D,效果有没有提升:

  • 3个订单购买A,这3个订单中有1个订单购买了D,所以A->D的置信度是1/3,即买了A1/3的概率会买D

  • 直接推荐D的话,5个订单中有2个购买了B,所以D的支持度是2/5,即2/5的概率会直接买D

会发现,关联规则推荐的效果很差,还不如直接推荐。

 

画外音:根据公式

confidence(A->D) =support(A->D)/support(A) = 1/3

support(D) = 2/5

lift(A->D) = confidence(A->D)/support(D)= 5/6

lift(A->B) < 1,故关联规则推荐是负相关的。

 

三、总结

  • 关联规则A->B推荐,目标是,在“用户将A放入购物车时,推荐B”比“单独推荐B”获取更好的效果

  • A->B的支持度,是用户同时购买AB概率

  • A->B的置信度,是用户购买A的同时,有多大概率购买B

  • A->B的提升度,是“用户购买A的同时,有多大概率购买B”与“直接购买B的概率”的比值

1)这个值大于1时,说明A->B有正向效果

2)这个值等于1时,说明AB是独立事件

3)这个值小于1时,说明A->B有负向效果


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis_user_guide(5) 动态 SQL

【-1】README 1&#xff09;本文全文总结于 http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html 【0】动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元…

sqlserver还原差异备份

因为之前遇到还原差异备份&#xff0c;最开始遇到SQLServer报错&#xff1a;”无法还原日志备份或差异备份&#xff0c;因为没有文件可用于前滚“。查阅很多资料后&#xff0c;终于得到解决。收集整理成这篇随笔。   问题原因&#xff1a;出现这种错误绝大多数是因为还原完整…

1分钟了解相似性推荐

转载自 1分钟了解相似性推荐前几天聊的“协同过滤&#xff08;Collaborative Filtering&#xff09;”和“基于内容的推荐&#xff08;Content-based Recommendation&#xff09;”&#xff0c;都必须分析用户的历史行为数据&#xff08;例如电影点击数据&#xff0c;职位查看数…

mybatis_user_guide(6) Java API

【0】README1&#xff09;本文全文总结于 http://www.mybatis.org/mybatis-3/zh/java-api.html【1】SqlSessions1)intro&#xff1a; 我们知道&#xff0c; SqlSessionFactoryBuilder 创建 SqlSessionFactory &#xff0c; SqlSessionFactory 创建 SqlSession&#xff0c;然后…

hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法

1 当使用left join左连连接&#xff0c;sql语句为 select t from SecondPage t left join t.rightNavbar n where 11 页面中出现了部分空行的情况&#xff0c;上述语句返回的list集合为 DataGrid dataGrid new DataGrid(); List<SecondPage> listsecondPageDao.find(…

1分钟了解基于内容的推荐,pm又懂了

转载自 1分钟了解基于内容的推荐&#xff0c;pm又懂了什么是基于内容的推荐&#xff08;Content-based Recommendation&#xff09;&#xff1f; 答&#xff1a;通过用户历史感兴趣的信息&#xff0c;抽象信息内容共性&#xff0c;根据内容共性推荐其他信息。比如&#xff0c;如…

mybatis_user_guide(7) SQL语句构建器类

【0】README1&#xff09;本文全文总结于 http://www.mybatis.org/mybatis-3/zh/statement-builders.html【1】在Java代码中来动态生成SQL代码就是一场噩梦1&#xff09;problemsolutions&#xff1a;1.1&#xff09;problem&#xff1a;Java程序员面对的最痛苦的事情之一就是…

datagrid获取页面总记录数的方法,datagrid获取页面总记录数为0的解决方法

1 在网上查了一大堆博客&#xff0c;都只有下面这一段&#xff0c;也不知道这些人有没有测试 var data$(#tt).datagrid(getData); alert(总数据量:data.total)//注意你的数据源一定要定义了total&#xff0c;要不会为undefined&#xff0c;datagrid分页就是靠这个total定义 al…

1分钟了解协同过滤,pm都懂了

转载自 1分钟了解协同过滤&#xff0c;pm都懂了工程架构方向的程序员&#xff0c;看到推荐/搜索/广告等和算法相关的技术&#xff0c;心中或多或少有一丝胆怯。但认真研究之后&#xff0c;发现其实没有这么难。今天的1分钟系列&#xff0c;给大家介绍下推荐系统中的“协同过滤”…

mybatis_user_guide(8) 日志

【0】README 1&#xff09;本文全文总结于 http://www.mybatis.org/mybatis-3/zh/logging.html 2&#xff09;Mybatis内置的日志工厂提供日志功能&#xff0c;具体的日志实现有以下几种工具&#xff1a; SLF4JApache Commons LoggingLog4j 2Log4jJDK logging 3&#xff09;具体…

hibernate在saveOrUpdate时,update报错:a different object with the same identifier value was already assoc

1 原因&#xff1a;网上说是&#xff0c;在hibernate中同一个session里面有了两个相同标识但是是不同实体。 2 我找出的解决方法是&#xff1a; getSession().clear(); //在dao层把session清理一下 3 网上查找出还有其他解决方法&#xff0c;其中 getSession().merge(arg0…

1分钟了解区块链的本质

转载自 1分钟了解区块链的本质区块链&#xff0c;比特币这些概念最近都很火&#xff0c;但很多人搞不清楚它究竟是啥&#xff0c;准备从技术的角度&#xff0c;从架构的角度&#xff0c;用通俗的语言谈谈楼主的理解。究竟啥是区块链&#xff1f;答&#xff1a;一句话&#xff0…

maven(7)生命周期和插件

【0】README1&#xff09;本文部分文字转自 “maven实战”&#xff0c;旨在 review “maven(7)生命周期和插件” 的相关知识&#xff1b;2&#xff09;maven 另外两个核心概念是生命周期和插件&#xff1a;maven的生命周期是抽象的&#xff0c;其实际行为都由插件来完成&#…

datagrid的文字换行与连续字符串换行处理,字符串三种截取方式

1 文字自动换行&#xff1a;nowrap:false 2 当时字符串&#xff0c;比如email这样的字段时&#xff0c;就需要用到字符串的拼接&#xff0c;首先&#xff0c;先贴出我解决问题的方法&#xff0c;再介绍字符串的三种拼接方式&#xff1a; 我解决问题的方法&#xff1a; {titl…

1分钟了解“区块链分叉”的本质

转载自 1分钟了解“区块链分叉”的本质 有不少朋友问&#xff0c;全球每个区块链节点都包含全部数据&#xff0c;都在最新的区块链数据上挖符合条件的区块&#xff0c;如何两个节点同时挖到新区块&#xff0c;出现数据不一致&#xff0c;该怎么办呢&#xff1f; 今天&#xff0…

sql server数据库:创建数据库、建立数据库用户、为用户赋予权限

1 使用sql创建数据库 use test go create database test2 on primary (nametest2_data, -- 主文件逻辑名filenameD:\DataSqlserver\test2_data.mdf,--物理路径size5MB,filegrowth15% ) log on (nametest2_log,filenameD:\DataSqlserver\test2_log.ldf, --日志物理文件名size…

review_core_basic_java(1)java程序设计概述

【0】README1&#xff09;本文部分文字描述转自 “core java volume 1” 旨在review “review_core_basic_java(1)java程序设计概述” 的相关知识&#xff1b;【1】 java 程序设计平台 【2】 java 白皮书的关键术语0&#xff09;intro&#xff1a;java的设计者编写了颇有影响力…

全球如何保证区块生成是匀速的?

转载自 全球如何保证区块生成是匀速的&#xff1f; 区块链有个特点&#xff1a;虽然大家都在采矿&#xff0c;但挖到矿的速度是均匀的。以承载比特币的区块链为例&#xff0c;平均每10分钟产出一个区块&#xff0c;这个速度基本是不变的。 有朋友就有疑问了&#xff0c;计算能力…

hibernate关联映射:多对一、一对一

配置对象关联关系 - 单向一对多关系 - 例如&#xff1a;班级与学生 Grade类中 public class Grade{private int gid;private String gname;private String gdesc;private Set student new HashSet();//set实现班级与学生的一对多关系 } Grade.hbm.xml中 <hibernate-m…

dom4j-cookbook

【0】README1&#xff09;本文译自http://dom4j.sourceforge.net/dom4j-1.6.1/cookbook.html 2&#xff09;intro&#xff1a; 2.1&#xff09;dom4j 是一个对象模型&#xff0c;在内存中表示一颗XML 树。dom4j 提供了易于使用的API以提供强大的处理特性&#xff0c;操纵或控制…