推荐系统实战-出租公寓项目6-关联规则

代码托管在这里, https://github.com/worry1613/gongyu-recommend

什么是关联规则

所谓数据挖掘就是以某种方式分析源数据,从中发现一些潜在的有用的信息,即数据挖掘又可以称作知识发现。而机器学习算法则是这种“某种方式”,关联规则作为十大经典机器学习算法之一,因此搞懂关联规则(虽然目前使用的不多)自然有着很重要的意义。顾名思义,关联规则就是发现数据背后存在的某种规则或者联系。

  举个简单的例子(尿布和啤酒太经典):通过调研超市顾客购买的东西,可以发现30%的顾客会同时购买床单和枕套,而在购买床单的顾客中有80%的人购买了枕套,这就存在一种隐含的关系:床单→枕套,也就是说购买床单的顾客会有很大可能购买枕套,因此商场可以将床单和枕套放在同一个购物区,方便顾客购买。

   以出租公寓项目为例,对于用户群体来说,关联规则用来挖掘出用户群体对房屋位置,价格,面积,楼层,品牌的相关性,用户细分群体中对上述要求都有不同的需求,怎么找到,关联规则。对于单独用户来说,挖掘用户对房屋的各种要求或者说对要租房屋的喜好用关联规则。

关联规则可以应用的场景有:       

  • 优化货架商品摆放或者优化邮寄商品的目录       
  • 交叉销售或者捆绑销售
  • 搜索词推荐或者识别异常

关联规则算法

  • 项目:交易数据库中的一个字段,对超市的交易来说一般是指一次交易中的一个物品,如:牛奶
  • 事务:某个客户在一次交易中,发生的所有项目的集合:如{牛奶,面包,啤酒}
  • 项集:包含若干个项目的集合(一次事务中的),一般会大于0个
  • 支持度:项集{X,Y}在总项集中出现的概率(见下面的例子)
  • 频繁项集:某个项集的支持度大于设定阈值(人为设定或者根据数据分布和经验来设定),即称这个项集为频繁项集。
  • 置信度:在先决条件X发生的条件下,由关联规则{X->Y }推出Y的概率(见下面的例子)
  • 提升度:表示含有X的条件下同时含有Y的概率,与无论含不含X含有Y的概率之比。

度和提升度示例
假如有一条规则:牛肉—>鸡肉,那么同时购买牛肉和鸡肉的顾客比例是3/7,而购买牛肉的顾客当中也购买了鸡肉的顾客比例是3/4。这两个比例参数是很重要的衡量指标,它们在关联规则中称作支持度(support)和置信度(confidence)。对于规则:牛肉—>鸡肉,它的支持度为3/7,表示在所有顾客当中有3/7同时购买牛肉和鸡肉,其反应了同时购买牛肉和鸡肉的顾客在所有顾客当中的覆盖范围;它的置信度为3/4,表示在买了牛肉的顾客当中有3/4的人买了鸡肉,其反应了可预测的程度,即顾客买了牛肉的话有多大可能性买鸡肉。其实可以从统计学和集合的角度去看这个问题, 假如看作是概率问题,则可以把“顾客买了牛肉之后又多大可能性买鸡肉”看作是条件概率事件,而从集合的角度去看,可以看下面这幅图:

上面这副图可以很好地描述这个问题,S表示所有的顾客,而A表示买了牛肉的顾客,B表示买了鸡肉的顾客,C表示既买了牛肉又买了鸡肉的顾客。那么C.count/S.count=3/7,C.count/A.count=3/4。  

提升度示例

1000名顾客,购买年货,A组有500人购买茶叶,有450人购买咖啡;B组有0人购买茶叶,有450人购买咖啡。

 购买茶叶购买咖啡
A组(500人)500450
B组(500人)0450

  茶叶->咖啡的支持度=450/1000=45%

  茶叶->咖啡的置信度=450/500=90%

  茶叶->咖啡的提升度=90%/90%=1  

说明:

  (1)由于lift(茶叶X->咖啡Y)=1,所以说明X与Y相互独立,即是否有X对于Y的出现没有影响。虽然支持度和置信度都高,但它们之间没有必然的关联关系。

  (2)满足最小支持度和最小置信度的关联关系叫做强关联关系

    • 如果lift>1,叫做有效的强关联关系,
    • 如果lift<=1,叫做无效的强关联关系
    • 特别的如果lift(X->Y)=1,则称X与Y相互独立

算法实现(Apriori算法,关联规则最基础的算法)

找出频繁“1项集”的集合,该集合记作L1。L1用于找频繁“2项集”的集合L2,而L2用于找L3。如此下去,直到不能找到“K项集”。找每个Lk都需要一次数据库扫描。
核心思想是:连接步和剪枝步。连接步是自连接,原则是保证前k-2项相同,并按照字典顺序连接。剪枝步,是使任一频繁项集的所有非空子集也必须是频繁的。反之,如果某
个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从CK中删除。

简单的讲,

1、发现频繁项集,过程为(1)扫描(2)计数(3)比较(4)产生频繁项集(5)连接、剪枝,产生候选项集   重复步骤(1)~(5)直到不能发现更大的频集

2、产生关联规则,过程为:根据前面提到的置信度的定义,关联规则的产生如下:
(1)对于每个频繁项集L,产生L的所有非空子集;
(2)对于L的每个非空子集S,如果
                P(L)/P(S)≧min_conf
则输出规则“SàL-S”

注:L-S表示在项集L中除去S子集的项集

以本项目为例,每条公寓信息有44个特征,我要找出频繁项集大于0.4的集合,所有的2项集2-2组合计算一遍,之后3项集3-3组合计算一遍。。。。。44项集44-44组合计算一遍,得出最终结果。

本节没有代码,只有数据清洗后的数据集提供给所有人,地址在上面。

代码托管在这里, https://github.com/worry1613/gongyu-recommend

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值