附注:不要问我为什么写这么快,是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系列:关联分析;某电商平台的数据;做捆绑销售和商品关联推荐的更多相关文章

  1. 一言不合就动手系列篇一-仿电商平台前端搜索插件(filterMore)

    话说某年某月某日,后台系统需要重构,当时公司还没有专业前端,由我负责前台页面框架搭建,做过后台系统的都知道,传统的管理系统大部分都是列表界面和编辑界面.列表界面又由表格和搜索框组成, 对于全部都是输入 ...

  2. 更新几篇之前写在公众号上的文章:线性可分时SVM理论推导;关联分析做捆绑销售和推荐;分词、去停用词和画词云

    适合阅读人群:有一定的数学基础. 这几篇文章是16年写的,之前发布在个人公众号上,公众号现已弃用.回过头来再看这几篇文章,发现写的过于稚嫩,思考也不全面,这说明我又进步了,但还是作为学习笔记记在这里了 ...

  3. 企业如何做好B2C电商平台

    导语本文主要讲了两个方面:1.企业如何定位B2C电商平台:2.企业做B2C遇到的问题. 一.企业如何定位B2C电商平台传统企业做B2C电子商务一般选用品牌.渠道.平台模式这三种,品牌模式是在网上建立一 ...

  4. Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构

    Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留 ...

  5. Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考

    Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考 说明:在生鲜电商的库存设计,是后台的重点,也是难点,关乎商品是否存在超卖.商品的库存增加方式倒不难,直接在后台添加即可,而扣 ...

  6. Java生鲜电商平台-电商促销业务分析设计与系统架构

    Java生鲜电商平台-电商促销业务分析设计与系统架构 说明:Java开源生鲜电商平台-电商促销业务分析设计与系统架构,列举的是常见的促销场景与源代码下载 左侧为享受促销的资格,常见为这三种: 首单 大 ...

  7. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

  8. Java生鲜电商平台-电商数据运营统计与分析

    Java生鲜电商平台-电商数据运营统计与分析 今天分享将会分为以下几个方面来阐述: 1. 作为运营我们需要统计与分析的几个核心数据是什么? 2. 核心数据对业务的指导价值在哪里呢? 3. 作为产品PM ...

  9. Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载)

    Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构,我采用以下三种维度来讲解 1.  代码层面. 2.  数 ...

随机推荐

  1. angularjs ajax传参

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  2. 继续PHP

    2014-04-08 09:44:43 继续PHP. 邵杨继续回来 工作,安卓还是交给他.

  3. iOS 之 界面编程解析

    参考:http://www.cocoachina.com/design/20151225/14789.html 0. 内容概述 基础与本质:说明普遍意义上的UI系统的三大模块,让读者从整体上对UI系统 ...

  4. Android应用性能优化方案

    1.避免创建不必要的对象 2.如果方法用不到成员变量,可以把方法声明为静态(static),这样性能会提高百分之十五到百分之二十 3.避免使用get/set存取字段,可以把字段声明为public直接访 ...

  5. Antx简介(ali_PPT)

    Antx的由来: §最早,我们用Makefile来build系统 •Makefile不适合Java的编译 §后来,我们用Ant来build系统 •开始时很不错 •随着项目增多,出现困难 §利用bean ...

  6. atoi

    , KInvalid}; int g_nStatus=kValid; int StrToInt(const char *str) { g_nStatus=KInvalid; ; if((str!=NU ...

  7. AIX系统开启ftp服务

    http://blog.itpub.net/28227905/viewspace-1060183/ 当然,首先网络工程师给你放开策略,开通ftp端口之后,你才能做下一步. [@more@] AIX开启 ...

  8. abstract、override、new、virtual、sealed使用和示例

    abstract修饰类名为抽象类,修饰方法为抽象方法.如果一个类为抽象类,则这个类智能是其他某个类的基类.抽象方法在抽象类中没有函数体.抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽 ...

  9. 负载均衡软件LVS分析二(安装)

    一.  安装LVS软件 1.安装前准备工作操作系统:统一采用Centos4.4版本.地址规划,如表1所示:表1 更详细的信息如图2所示: 图2  LVS DR模式安装部署结构图 图2中的VIP指的是虚 ...

  10. Java中的封装、继承、多态

    封装 在如何理解面向对象这篇文章中,提到所谓的封装就是"功能都给你做好了,你不必去理解它是怎么写出来的,直接使用即可.".但你得清楚一点,那就是这句话是相对于使用者来说的,而作为开 ...