首先解释一下什么是亲和性
举一个简单的例子:当顾客在购买一件商品时,往往还会购买另一件商品。比如我们买了面包就还会买牛奶,买了刀就还会买叉子等等。也就是说,顾客买了商品A,还会购买商品B,这就是亲和性的简单例子
那么,亲和性分析就是对这种规律进行分析,商家就可以将这些同时购买的物品放在一起以提升销售额啦。当然,实际上的应用远远不止这些。亲和性分析其实就是根据样本个体之间的相似度,确定它们关系的亲疏。像我们平时看到的电影推荐,广告推荐等等,就是亲和性分析的应用
下面开始分析一个简单的数据集,来实现商品推荐
数据集
给出一个txt文件,可以看到数据是这样的(affinity_dataset.txt)
0 1 1 0 1
0 1 0 0 0
0 0 1 1 1
0 0 1 1 1
0 1 0 1 0
这里每一列表示为一种商品,分别为面包、牛奶、奶酪、苹果和香蕉
每一行为一次购买记录,1表示购买,0表示未购买
下面开始用Python对这个数据集进行分析
加载数据集
环境:Python3.6
使用模块:numpy
#coding: utf-8#coding: utf-8
import numpy as np
# 定义数据集文件名
dataset_filename = "affinity_dataset.txt"
# 加载数据集
X = np.loadtxt(dataset_filename)
# 打印数据集,行为交易信息,列为商品,各列假设为面包、牛奶、奶酪、苹果和香蕉,1表示购买
n_samples, n_features = X.shape
print("数据集共有{0}个样本和{1}个分支".format(n_samples, n_features))
print(X)
执行结果为:
简单的数据查询
现在来一个很简单的数据查询,那就是查询一下有多少位顾客购买了苹果
# 查询多少顾客购买了苹果
num_apple_purchases = 0 # 初始化
for sample in X:
if sample[3] == 1:
num_apple_purchases += 1
print("共有{0}人购买了苹果".format(num_apple_purchases))
思路很简单,若每一行第四列的值为1时,变量num_ apple_ purchases的值加一
那么最终的值即为购买苹果人数
执行结果为:共有39人购买了苹果
规则查找及优劣判断
现在,开始来寻找一个规则
如果顾客购买了苹果,那么他们还购买了香蕉
用代码实现很简单,其实就是统计数据集中第四列和第五列同为1的次数即可
这里还要补充一下规则的优劣的衡量,常用的是支持度和置信度
比较简单的支持度即数据集中规则应验的次数,也就是成立了几条,就是支持度
置信度就是规则成立的比例,也就是前提成立时这条规则应验次数占所有次数的比例
知道了这些,现在开始用代码来实现
# 查询多少人既买了苹果又买了香蕉,并记录下规则有效和规则无效的次数
rule_valid = 0
rule_invalid = 0
for sample in X:
if sample[3] == 1: # 购买苹果
if sample[4] == 1: # 购买香蕉
rule_valid += 1 # 规则成立,次数加一
else:
rule_invalid += 1 # 否则规则不成立
print("共有{0}人既买了苹果又买了香蕉".format(rule_valid))
print("共有{0}人买了苹果但没买香蕉".format(rule_invalid))
# 计算支持度和置信度
support = rule_valid # 支持度即规则有效次数
confidence = rule_valid / num_apple_purchases # 置信度即规则有效比例
print("支持度为:{0},置信度为:{1:.3f}.".format(support, confidence))
# 置信度表示为百分比形式
print("置信度为:{0:.1f}%.".format(100 * confidence))
执行结果为:
共有24人既买了苹果又买了香蕉
共有15人买了苹果但没买香蕉
支持度为:24,置信度为:0.615
置信度为:61.5%.
通过分析,我们知道了“如果顾客购买了苹果,那么他们还购买了香蕉”这条规则支持度为24,置信度为0.615。但这只是所有规则中的一种规则,还有其他规则我们还没有分析。所以,下一次,将会讲如何统计所有规则