微信扫码登录

其他登录方式

绑定手机号

注册

我同意用户协议

忘记密码

用户协议

绑定手机号

近期有不法分子打着爱盈利的旗号,制作“爱盈利”名称的App,并伪造爱盈利证件,骗取用户信任,以抖音点赞赚钱或其他方式赚钱为名义,过程中以升级会员获得高佣金为名让用户充值。
爱盈利公司郑重声明:我司没有研发或运营过任何名为“爱盈利”的APP,我司做任务赚钱类产品从没有让任何普通用户充值升级会员。我公司产品均在本网站可查询,请将网站拉至底部,点击“关于我们”可查看爱盈利相关产品与服务。
温馨提示:当遇到此类问题请拨打官方电话或添加官方微信,以免财产损失。爱盈利官网地址:www.aiyingli.com。
  • 推广与合作
X

大数据挖掘: FPGrowth初识–进行商品关联规则挖掘

来源: 2926
爱盈利(aiyingli.com)移动互联网最具影响力的盈利指导网站。定位于服务移动互联网创业者,移动盈利指导。我们的目标是让盈利目标清晰可见!降低门槛,让缺乏经验、资金有限的个人和团队获得经验和机会,提高热情,激发产品。

大数据挖掘: FPGrowth初识–进行商品关联规则挖掘

作者:王安琪

简介

经典的关联规则挖掘算法包括Apriori算法和FP-growth算法。Apriori算法多次扫描交易数据库,每次利用候选频繁集产生频繁集;而FP-growth则利用树形结构,无需产生候选频繁集而是直接得到频繁集,大大减少扫描交易数据库的次数,从而提高了算法的效率。但是apriori的算法扩展性较好,可以用于并行计算等领域。

关联规则的目的就是在一个数据集中找出项与项之间的关系,适用于在大数量的项集中发现关联共现的项。也被称为购物篮分析 (Market Basket analysis),因为“购物篮分析”很贴切的表达了适用该算法情景中的一个子集。

购物网站里你买了一个商品,旁边列出一系列买过该商品的人还买的其他商品,并且按置信度高低排序,一般会发现买手机的还会买充电器(买充电器的人不一定会买手机),买牙刷的还会买牙膏,这大概就是关联规则的用处。

基础环境:

CentOS-6.5

JDK-1.7

spark:spark-1.2.0+cdh5.3.6+379

一、Apriori算法

支持度(Support):定义为/[supp(X) = /frac{包含X的记录数}{数据集记录总数}= P(X)=/frac{occur(X)}{count(D)}/]

置信度(Confidence): 定义为/[ conf(X=>Y) = /frac{同时包含X和Y的记录数}{数据集中包含X的记录数}=P(Y|X)=/frac{P(X /cap Y)}{P(X)} = /frac{occur(X /cap Y)}{occur(X)}/]

FP-growth算法是Apriori算法的优化。

二、MLlib实现

spark-1.2.0 版本中Mliib的FPGrowthModel并没有generateAssociationRules(minConfidence)方法。因此要引用高版本的jar包,并在提交任务时指定才行。这是可以实现的。

Ⅰ、获取购买历史数据

下面共选取了6931条购买历史记录,作为关联规则挖掘的数据集。

1、产生源数据

我们可能需要使用类Mysql中的group_concat()来产生源数据。在Hive中的替代方案是concat_ws()。但若要连接的列是非string型,会报以下错误:Argument 2 of function CONCAT_WS must be “string or array”, but “array” was found.。使用以下hiveSQL可以避免此问题:

SELECT concat_ws(‘,’, collect_set(cast(item_id AS String))) AS items FROM ods_angel_useritem tb GROUP BY tb.user_id;

得到item1,item2,item3式数据结构。

数据结构如下所示:

大数据挖掘: FPGrowth初识–进行商品关联规则挖掘

2、构造JavaRDD

JavaRDD<list> transactions = …;

Ⅱ、过滤掉出现频率较低的数据

Java代码:

大数据挖掘: FPGrowth初识&#8211;进行商品关联规则挖掘

结果:

大数据挖掘: FPGrowth初识&#8211;进行商品关联规则挖掘

/[/frac{208}{6931}=0.03001>0.03/],6931是交易的订单数量,即数据源总条数。

可见,商品732994正好高于支持率下限。

Ⅲ、过滤掉可信度过低的判断

Java代码:

大数据挖掘: FPGrowth初识&#8211;进行商品关联规则挖掘

结果:

大数据挖掘: FPGrowth初识&#8211;进行商品关联规则挖掘

  1. /(P(733850|733480)=/frac{occur(733850 /cap 733480)}{occur(733480)}=/frac{339}{1051}=0.3225499524262607/)
  2. /(P(733480|731246)=/frac{occur(733480 /cap 731246)}{occur(731246)}=/frac{233}{500}=0.466/)
  3. /(P(733480|733850)=/frac{occur(733850 /cap 733480)}{occur(733850)}=/frac{339}{878}=0.38610478359908884/)

以上表明,用户在购买商品733480后往往还会购买商品733480,可信度为0.3225499524262607;用户在购买商品731246后往往还会购买商品731246,可信度为0.466;用户在购买商品733850后往往还会购买商品733480,可信度为0.38610478359908884。

三、提交任务

Ⅰ、Spark On Standalone

spark-submit –master spark://node190:7077 –class com.angel.mlib.FPGrowthTest –jars lib/hbase-client-0.98.6-cdh5.3.6.jar,lib/hbase-common-0.98.6-cdh5.3.6.jar,lib/hbase-protocol-0.98.6-cdh5.3.6.jar,lib/hbase-server-0.98.6-cdh5.3.6.jar,lib/htrace-core-2.04.jar,lib/zookeeper.jar,lib/spark-mllib_2.10-1.5.2.jar,lib/spark-core_2.10-1.5.2.jar spark-test-1.0.jarⅡ、Spark On Yarn

II、Spark On Yarn

spark-submit –master yarn-client –class com.angel.mlib.FPGrowthTest –jars lib/hbase-client-0.98.6-cdh5.3.6.jar,lib/hbase-common-0.98.6-cdh5.3.6.jar,lib/hbase-protocol-0.98.6-cdh5.3.6.jar,lib/hbase-server-0.98.6-cdh5.3.6.jar,lib/htrace-core-2.04.jar,lib/zookeeper.jar,lib/spark-mllib_2.10-1.5.2.jar,lib/spark-core_2.10-1.5.2.jar spark-test-1.0.jar

四、FPGrowth算法在现实中的应用调优

在实际情况中,真实的业务数据处处都是噪声。活用数据,设计有业务含义的特征体系,是构造鲁棒模型的基础!

具体的解决办法,我们可以多算法并用,这些将在后续的aitanjupt文章中详述。

五、综上所述

也就是说,“购买了该宝贝的人32%还购买了某某商品”就是使用商品关联规则挖掘实现的;还有一些捆绑销售,例如牙膏和牙刷一起卖,尿布和啤酒放在一起卖。

关联规则挖掘算法不只是能用在商品销售,使用它我们可以挖掘出更多的关联关系,比如我们可以挖掘出,温度、天气、性别等等与心情之间是否有关联关系,这是非常有意义的。

关联规则挖掘算法应用场景非常庞大,遥记多年前做的手机用户关联分析,那时尚未用到关联规则挖掘算法,用的是自己编写的类join算法,现在看起来,关联规则挖掘算法是再适合不过的了。

大数据挖掘: FPGrowth初识&#8211;进行商品关联规则挖掘
上面是mllib下所有的算法。

某一数据挖掘算法可以做某种特定的分析,也可以跨界使用,还可以联合应用,重要的是理解其思想以灵活运用。

幸福是有一颗感恩的心,健康的身体,称心的工作,一位深爱你的人,一帮信赖的朋友!

原文>>>

End.

转载请注明来自36大数据(36dsj.com):36大数据 » 大数据挖掘: FPGrowth初识–进行商品关联规则挖掘

爱盈利-运营小咖秀 始终坚持研究分享移动互联网App数据运营推广经验、策略、全案、渠道等纯干货知识内容;是广大App运营从业者的知识启蒙、成长指导、进阶学习的集聚平台;

评论

相关文章推荐

SELECT dw_posts.ID,dw_posts.post_title,dw_posts.post_content FROM dw_posts INNER JOIN dw_term_relationships ON (dw_posts.ID = dw_term_relationships.object_id) WHERE 1=1 AND(dw_term_relationships.term_taxonomy_id = 3413 ) AND dw_posts.post_type = 'post' AND (dw_posts.post_status = 'publish') GROUP BY dw_posts.ID ORDER BY RAND() LIMIT 0, 6

京ICP备15063977号-2 © 2012-2018 aiyingli.com. All Rights Reserved. 京公网安备 11010102003938号