# 亲和性分析示例
亲和性分析是根据样本个体之间的相似度,确定它们关系的亲疏。
比如:向网站用户提供多样化的服务或定向投放广告
亲和性还有多种测量方法,比如,统计两件商品一起出售的概率,或者统计用户购买了商品1后再购买商品2的比率。
下面具体分析下如何计算个体之间的相似度。
场景:
一个人去超市买东西,买了面包后又买了牛奶。
作为数据挖掘入门性质的例子,我们希望得到下面这样的规则:
“如果一个人买了商品X,那么他可能购买Y”
下面我们导入具体的数据集
|
|
输出
|
|
dataset.txt的文件请从后面提供的git地址上下载
|
|
输出
|
|
每行代表用户每次购买的5个商品
假设每列分别代表面包、牛奶、奶酪、苹果和香蕉
比如第一行是[0. 0. 1. 1. 1.]
代表用户买了奶酪、苹果和香蕉,没有买面包、牛奶
1-> 表示买了该商品
0-> 表示没有买该商品
|
|
## 实现简单的排序规则
如果要找出"如果一个人买了商品X,那么他可能购买Y"这样的规则。
简单的办法就是找出数据集中所有同时购买两件商品的情况,找到规则后,我们还需要判断规则的优劣,最后选择最优的。
规则的优劣有多种衡量方法,常用的方法有“支持度”和“置信度”
支持度指数据集里面规则有效的次数,统计起来很简单。
有时候,还需要对支持度进行规范化,即再除以规则有效的总数量。
我们这里只简单统计规则有效的次数。
支持度衡量的是给定规则有效的比例,而置信度衡量的则是规则有效准确率,即符合给定条件(即规则的“如果”语句所表示的前提条件)的所有规则里,跟当前规则结论一致的比例有多大。
计算方法为首先统计当前规则的出现次数,再用它来除以条件(“如果”语句)相同的规则数量
如下面的代码所示,通过判断交易数据中data[3]的值,就能知道一个顾客是否买了苹果。 这里,data表示一条交易信息,也就是数据集里的一行数据。
|
|
输出
|
|
有多少人买了苹果有买了香蕉呢
|
|
输出
|
|
现在有了所有需要的数据,我们就可以计算支持度和置信度
|
|
输出
|
|
为了计算所有规则的置信度和支持度,首先创建一个字典,用来存放计算结果。
需要统计的量有
1、有效规则
2、无效规则
3、条件相同的规则数量
|
|
|
|
输出
|
|
|
|
输出
|
|
## 排序找出最佳规则
我们上面已经拿到了所有有效规则及对应的置信度和支持度,为了找出最佳规则,我们还需要根据支持度和置信度对规则进行排序。
为了找出支持度最高的规则,首先对支持度字典进行排序。
|
|
输出
|
|
|
|
输出
|
|
|
|
输出
|
|
|
|
输出
|
|
|
|
输出
|
|
从排序结果来看,“顾客买苹果,也会买奶酪”和“顾客买奶酪,也会买香蕉”,这两条规则的支持度和置信度都很高。
超市经理可以根据这些规则来调整商品摆放位置。
例如,如果本周苹果促销,就在旁边摆上奶酪。
但是香蕉和奶酪同时搞促销就没有多大意义了,因为我们发现购买奶酪的顾客中,接近66%的人即使不搞促销也会买香蕉——即使搞促销,也不会给销量带来多大提升
实例代码:https://github.com/durban89/python_data_mining_Affinity-analysis