让机器猜猜你喜欢的歌手-R关联分析

作者 CDA 数据分析师

关联规则挖掘是数据挖掘中成果颇丰而且比较活跃的研究分支。采用关联模型比较典型的案例是“尿布与啤酒”的故事。在美国,一些年轻的父亲下班后经常要到超市去买婴儿尿布,超市也因此发现了一个规律,在购买婴儿尿布的年轻父亲们中,有30%~40%的人同时要买一些啤酒。超市随后调整了货架的摆放,把尿布和啤酒放在一起,明显增加了销售额。同样的,我们还可以根据关联规则在商品销售方面做各种促销活动。

除此以外,关联规则挖掘还经常被用于:

· 电信套餐的捆绑销售

· 歌曲推荐或者视频的“猜你喜欢”

· 电商的产品推荐

· 财务的归因分析

最近参加了一些学生的创新创业活动,令人印象深刻的是,他们的脑海中总能迸发出无穷的创意。受此启发,我想着尽快把这部分的内容整理出来,希望能够对大家在商业模式的选择上有所帮助。

CDA考点:数据挖掘—关联分析

CDA命题组委会成员 傅毅

先了解几个相关的概念:

· 关联(association):两个或多个变量的取值之间存在某种规律性。

· 关联规则(association rule):指在同一个事件中出现的不同项的相关性。

· 关联分析(association analysis):用于发现隐藏在大型数据集中的令人感兴趣的联系。

· 项和事物:令I={i1, i2, ……,id}是购物篮数据中所有项的集合,而T={t1, t2, ……,tn}是所有事务的集合。

· 项集(itemset):包含0个或者多个项的集合被称为项集。

· 支持度计数,即包含特定项集的事务个数。

关联规则是形如A=>B的蕴含表达式,其中A和B是不相交的项集。下面我们来看三个重要的公式:

· 支持度(support):support(A=>B)=P(A or B)

· 置信度(confidence) confidence(A=>B)=P(B|A)

· 提升度(lift) lift(A=>B)=P(B|A)/P(B)

这里我们不难看出,支持度指的是两个事件同时发生的概率(实践中用频率表示),这个值如果太小,只能认为是偶尔事件,而不能认为是规则,置信度是指条件概率,表示A发生条件下B发生的强度,提升度是一个比值,用来衡量A条件的重要性。

看一个小例子:

下面是一个购物篮清单

这里TID是交易编号,不参与计算,右边ABCDEF分别表示不同的商品,下面两个规则的支持度和置信度分别为:

· A => C (50%, 66.6%)

· C =>A (50%, 100%)

关联规则挖掘的基本过程

给定事务的集合T,关联规则发现是指找出支持度大于等于minsup,并且置信度大于等于minconf的所有规则,其中minsup和minconf是对应的支持度和置信度的阈值。由于需要计算每一个可能规则的支持度和置信度,这种方法过高的代价让人望而却步。因此,我们将目标做相应转化为找出所有频繁项集,即发现满足最小支持度阈值的所有项集,这些项集称作频繁项集(frequent itemset),并进一步由频繁项集中提取所有高置信度的规则(受篇幅影响,这部分暂时省略),这些规则称作强规则(strong rule)。下面我们通过算例来实现上面的想法。

让“机器”猜猜谁是你喜欢的歌手

这是我在概率论课上的一个案例,目的是帮助学生理解条件概率,于是让学生每人填写3个以上的华语歌手(呵呵,要是填英语歌手的话,“事物”太多,而学生有限,这样结果会不好)。于是,同学们填出来的结果是这样的:

学号

喜欢的歌手

13*34

梁静茹

13*45

邓紫棋

……

……

为了计算歌手之间的相关规则,我们可以调用R语言的arules包来进行计算,代码如下:

##### code start #####

# 加载包

library(arules)#加载程序包arules,当然如果你前面没有下载过这个包,就要先install.packages(arules)

setwd("G:\\公文包\\R语言 关联分析")#这里设置你自己的工作路径

# 加载数据

singer <- read.csv("singer1.csv")

# 将数据转换为arules关联规则方法apriori 可以处理的数据形式.交易数据

data <- as(split(singer$歌手, singer$学号), "transactions")

# 查看一下数据

attributes(data)

# 使用apriori函数生成关联规则

rules <- apriori(data,parameter=list(minlen=2, supp=0.01, conf=0.8))

####说明

#apriori(data, parameter = NULL, appearance = NULL, control = NULL)

#data:数据

#parameter:设置参数,默认情况下parameter=list(supp=0.1,conf=0.8,maxlen=10,minlen=1,target=”rules”)

#supp:支持度(support)

#conf:置信度(confidence)

#maxlen,minlen:每个项集所含项数的最大最小值

#target:“rules”或“frequent itemsets”(输出关联规则/频繁项集)

#apperence:对先决条件X(lhs),关联结果Y(rhs)中具体包含哪些项进行限制,如:设置lhs=beer,将仅输出lhs含有beer这一项的关联规则。默认情况下,所有项都将无限制出现。

#control:控制函数性能,如可以设定对项集进行升序sort=1或降序sort=-1排序,是否向使用者报告进程(verbose=F/T)

rules.sorted <- sort(rules, decreasing=TRUE, na.last=TRUE, by="lift")

#检查排序后的变量。

inspect(rules.sorted)

# 使用inspect函数提取规则

inspect(rules)

# find redundant rules

#生成一个关联规则的子集矩阵,

subset.matrix <- is.subset(rules.sorted, rules.sorted)

#将矩阵对角线以下的元素置为空

subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA

#将子集矩阵中每列元素和大于等于1的列找出来

redundant <- colSums(subset.matrix, na.rm=T) >= 1which(redundant)

#从规则矩阵中去掉这些列

rules.pruned <- rules.sorted[!redundant]

#检查最终生成的结果集

inspect(rules.pruned)

上述代码输出如下

结果说明

以No1为例,弦子、张韶涵和BY2 同时被喜欢的概率为1.7%(学生人数有限的原因),喜欢弦子, 张韶涵的同学会喜欢BY2的概率为100%,该规则的提升度为56.5。因此,如果有人在音乐平台上听了弦子和张韶涵的歌,那就放心的把BY2推荐给他吧!!

值得注意的是,陈奕迅真的是万人迷,居然有9位歌手能够指向他,好吧故事结束了,你也动手试试吧!!

原文发布于微信公众号 - CDA数据分析师(cdacdacda)

原文发表时间:2017-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏鸿的学习笔记

Upvote Dynamics on the Quora Network(上)

当一个答案被添加到Quora时,存在着将它分发给跟随作者的人的各种机制。其中最突出的是主页Feed和摘要电子邮件,但也有其他途径,如较新的“您关注的人”电子邮件...

7310
来自专栏玉树芝兰

如何用Python从海量文本抽取主题?

你在工作、学习中是否曾因信息过载叫苦不迭?有一种方法能够替你读海量文章,并将不同的主题和对应的关键词抽取出来,让你谈笑间观其大略。本文使用Python对超过10...

43620
来自专栏AI科技评论

开发 | 还在费心学编程?微软用深度学习 AI 帮你写代码

在过去的几十年中,无论在硬件组织还是软件架构上,计算机行业已经发生了翻天覆地的变化,各种软硬件产品的性能和用户体验均得到了显著提升。 但对程序员而言,软件编码的...

46490
来自专栏用户2442861的专栏

MATLAB 比较好入门书籍有哪些推荐

https://www.zhihu.com/topic/19559252/hot

48810
来自专栏大数据文摘

吴甘沙清华讲:大数据的10个技术前沿(中)

18630
来自专栏北京马哥教育

天龙八部:8步从Python白板到专家

如果你想做一个数据科学家,或者作为一个数据科学家你想扩展自己的工具和知识库,那么,你来对地方了。 这篇文章的目的,是给刚开始使用Python进行数据分析的...

42350
来自专栏月色的自留地

量子计算及量子计算的模拟

58350
来自专栏QQ会员技术团队的专栏

小明带你看WWDC 2017(day3实况)

作者介绍: 黄明,WWDC 2017大会的小时光茶社特派员 ,腾讯SNG增值产品部内容中心iOS组leader,主要负责手Q个性化业务、手Q WebView等项...

233100
来自专栏PPV课数据科学社区

【学习】天龙八部:8步从Python白板到专家

如果你想做一个数据科学家,或者作为一个数据科学家你想扩展自己的工具和知识库,那么,你来对地方了。 这篇文章的目的,是给刚开始使用Python进行数据分析的人,指...

28330
来自专栏数据科学与人工智能

【Python环境】玩转数据分析,必知必会的7款Python工具!

如果你有志于做一个数据专家,你就应该保持一颗好奇心,总是不断探索,学习,问各种问题。在线入门教程和视频教程能帮你走出第一步,但是最好的方式就是通过熟悉各种已经在...

21850

扫码关注云+社区

领取腾讯云代金券