R系列:关联分析;某电商平台的数据;做捆绑销售和商品关联推荐
附注:不要问我为什么写这么快,是16年写的。
一、分析目的
I用户在某电商平台买了A,那么平台接下来应该给用户推荐什么,即用户在买了商品A之后接下来买什么的倾向性最大;
II应该把哪些商品在一起做捆绑销售。
二、理论介绍
数据挖掘中的经典算法之一:关联分析。关联分析内部理论又分为apriori , eclat , FP-Growth。这里采用apriori。关于他们的优缺点,适应条件什么的,只能等我看完理论再写了。
三、R包介绍
介绍将要用到的两个软件包:arules和arulesViz。
arules:关联规则的数字化生成,提供apriori和eclat这两种挖掘频繁项集和关联规则算法的实现函数。
arulesViz:实现关联规则的可视化。
四、数据准备
1.数据介绍:选取某电商平台2014年8月-2014年10月的交易数据,下图1所示,提取用户id、商品id两个字段;共204KB;csv格式。
图1 交易数据格式展示
2.数据形式
arules支持的数据输入格式有两种,transactions类型和tidLists类型。下图2和3所示。本文直接用read.transactions()读入图1的数据,通过设置参数,把数据转换成下图3的形式。具体可参考程序部分。
图2 transactions类型
图3 tidLists类型
五、运行结果及结论
数据概览如下图4:
结果显示,统计时间段内,购买最多的商品id分别是gtqf3891、fxr281 、kp1g3917、pzsm3922、h0i21683。所代表的商品分别是:
测试商品
xx正品全智能10000mah移动电源数显充电宝
xx宝纳庄园珍藏红葡萄酒双支礼盒装
xx乐薇丝桃红葡萄汽酒+汉凯沃德斯俱乐部起泡葡萄
xx先农氏 糙米·响水大米 2.5kg
这里发现一个问题,排在第一名的是测试商品,如果不分青红皂白的去和运营说,这段时间用户经常买的是"测试商品",就太囧了,所以算法不是全部,业务才是王道啊。
图4 数据概览
关联规则如下图5:
下面是设定支持度阈值为0.002,按照置信度大小排序的结果,糟糕的是此刻在家,连不上数据库,所以我只知道商品id,不知道其代表的真实商品,没有办法做具体分析。明天晚上补上这部分。从下图5可知如果用户在该平台购买了商品k2l34304,那么接下来用户最有可能购买的商品是fxr281,系统便可以自动给用户推荐fxr281,以达到提升销量的目的。
图5 关联规则
补充:查阅数据库后得知图5前四条规则分别代表着:
xx系列石英男表
xx正品全智能10000mah移动电源数显充电宝
测试商品3
测试商品
三星Class10-48MB/S TF卡 16GB
xx乐薇丝桃红葡萄汽酒+汉凯沃德斯俱乐部起泡葡萄
红米note 移动4G增强版
xx正品全智能10000mah移动电源数显充电宝
即购买商品“xx系列石英男表”的用户接下来最有可能购买的是“xx正品全智能10000mah移动电源数显充电宝”;而购买了商品“红米note 移动4G增强版”的用户接下来更倾向于购买“xx正品全智能10000mah移动电源数显充电宝”等,平台便可根据此信息采取相应的营销活动。
和商品fxr281捆绑销售的结果:
假设平台的运营者想要促销商品fxr281(xx正品全智能10000mah移动电源数显充电宝),那么我们便可找到fxr281的强关联商品,来作为捆绑商品。下图6显示商品k2l34304(xx系列石英男表)和u2xm6551(红米note 移动4G增强版)是商品fxr281的强关联商品,因此平台运营者可考虑将k2l34304或u2xm6551和fxr281捆绑起来共同销售,并制定一个合适的共同购买价格,从而对两种商品都产生促销效果。这一步在程序中我把maxlen设为2,控制lhs中仅包含一种商品,这是因为在实际的情形中,一般只将两种商品进行捆绑,而不是一堆商品。(maxlen设置为多少要根据实际业务来,我已经迫不及待想接手这样的项目了。)
图6 fxr281捆绑销售的结果
关联规则的可视化:
图7按照lift参数来看,关联性(颜色最深)最强的为:{trz83012} => {deyc3994}。
图7 可视化
六、程序
#载入关联分析的包 library(arules) #读入数据 dx=read.transactions("C:/Users/Thinkpad/Desktop/1.csv",format="single",sep=",",cols=c(1,2)) #展示数据的前一百行 inspect(dx[1:100,]) #看交易数据的总体情况 summary(dx) #随便给参数设置一个初始值,支持度设定为0.001,置信度设置为0.5,结果有11425条规则 rules0=apriori(dx,parameter= list(supp=0.001,conf=0.5,target="rules")) inspect(rules0[1:10,]) #不断调整支持度以得到前几条规则,支持度设为0.002,结果有12条规则 rules1=apriori(dx,parameter= list(supp=0.002,conf=0.5,target="rules")) rules1 inspect(rules1) #给定支持度阈值0.002,按置信度排序 rules.sorted_con=sort(rules1,by="confidence") inspect(rules.sorted_con) ###捆绑销售### ###想促销商品fxr281,找到与之有关的相关联规则##### rules2=apriori(dx,parameter=list(maxlen=2,supp=0.002,conf=0.5),appearance=list(rhs="fxr281",default="lhs")) inspect(rules2) ##########关联规则的可视化##### library(arulesViz) plot(rules1,method="grouped")
七、附注
关联分析一定要紧跟业务,如你发现了一条强关联规则:苹果→苹果醋。你非常开心激动地想把他推荐给运营,但运营告诉你上个月他们做了促销,买苹果就送苹果醋。所以.....你就悲剧了,你的老大不灭了你才怪。
end!
R系列:关联分析;某电商平台的数据;做捆绑销售和商品关联推荐的更多相关文章
- 一言不合就动手系列篇一-仿电商平台前端搜索插件(filterMore)
话说某年某月某日,后台系统需要重构,当时公司还没有专业前端,由我负责前台页面框架搭建,做过后台系统的都知道,传统的管理系统大部分都是列表界面和编辑界面.列表界面又由表格和搜索框组成, 对于全部都是输入 ...
- 更新几篇之前写在公众号上的文章:线性可分时SVM理论推导;关联分析做捆绑销售和推荐;分词、去停用词和画词云
适合阅读人群:有一定的数学基础. 这几篇文章是16年写的,之前发布在个人公众号上,公众号现已弃用.回过头来再看这几篇文章,发现写的过于稚嫩,思考也不全面,这说明我又进步了,但还是作为学习笔记记在这里了 ...
- 企业如何做好B2C电商平台
导语本文主要讲了两个方面:1.企业如何定位B2C电商平台:2.企业做B2C遇到的问题. 一.企业如何定位B2C电商平台传统企业做B2C电子商务一般选用品牌.渠道.平台模式这三种,品牌模式是在网上建立一 ...
- Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构
Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留 ...
- Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考
Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考 说明:在生鲜电商的库存设计,是后台的重点,也是难点,关乎商品是否存在超卖.商品的库存增加方式倒不难,直接在后台添加即可,而扣 ...
- Java生鲜电商平台-电商促销业务分析设计与系统架构
Java生鲜电商平台-电商促销业务分析设计与系统架构 说明:Java开源生鲜电商平台-电商促销业务分析设计与系统架构,列举的是常见的促销场景与源代码下载 左侧为享受促销的资格,常见为这三种: 首单 大 ...
- Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战
Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...
- Java生鲜电商平台-电商数据运营统计与分析
Java生鲜电商平台-电商数据运营统计与分析 今天分享将会分为以下几个方面来阐述: 1. 作为运营我们需要统计与分析的几个核心数据是什么? 2. 核心数据对业务的指导价值在哪里呢? 3. 作为产品PM ...
- Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载)
Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构,我采用以下三种维度来讲解 1. 代码层面. 2. 数 ...
随机推荐
- angularjs ajax传参
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- 继续PHP
2014-04-08 09:44:43 继续PHP. 邵杨继续回来 工作,安卓还是交给他.
- iOS 之 界面编程解析
参考:http://www.cocoachina.com/design/20151225/14789.html 0. 内容概述 基础与本质:说明普遍意义上的UI系统的三大模块,让读者从整体上对UI系统 ...
- Android应用性能优化方案
1.避免创建不必要的对象 2.如果方法用不到成员变量,可以把方法声明为静态(static),这样性能会提高百分之十五到百分之二十 3.避免使用get/set存取字段,可以把字段声明为public直接访 ...
- Antx简介(ali_PPT)
Antx的由来: §最早,我们用Makefile来build系统 •Makefile不适合Java的编译 §后来,我们用Ant来build系统 •开始时很不错 •随着项目增多,出现困难 §利用bean ...
- atoi
, KInvalid}; int g_nStatus=kValid; int StrToInt(const char *str) { g_nStatus=KInvalid; ; if((str!=NU ...
- AIX系统开启ftp服务
http://blog.itpub.net/28227905/viewspace-1060183/ 当然,首先网络工程师给你放开策略,开通ftp端口之后,你才能做下一步. [@more@] AIX开启 ...
- abstract、override、new、virtual、sealed使用和示例
abstract修饰类名为抽象类,修饰方法为抽象方法.如果一个类为抽象类,则这个类智能是其他某个类的基类.抽象方法在抽象类中没有函数体.抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽 ...
- 负载均衡软件LVS分析二(安装)
一. 安装LVS软件 1.安装前准备工作操作系统:统一采用Centos4.4版本.地址规划,如表1所示:表1 更详细的信息如图2所示: 图2 LVS DR模式安装部署结构图 图2中的VIP指的是虚 ...
- Java中的封装、继承、多态
封装 在如何理解面向对象这篇文章中,提到所谓的封装就是"功能都给你做好了,你不必去理解它是怎么写出来的,直接使用即可.".但你得清楚一点,那就是这句话是相对于使用者来说的,而作为开 ...