附注:不要问我为什么写这么快,是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. IOS开发-OC学习-MD5加密

    MD5的全称是Message-Digest Algorithm 5. MD5加密算法为现在应用最广泛的哈希算法之一,该算法广泛应用于互联网网站的用户文件加密,能够将用户密码加密为128位的长整数.数据 ...

  2. cocos2d-x---开篇介绍

    关于cocos2d-x这一游戏引擎,现在受到了手机游戏开发者的青睐.其实cocos2d一开始是由于cocos2d-iphone的成功,然后带动各类开源项目越来越火.由苹果独家的Objective-C到 ...

  3. Python3基础 frozenset() 创建一个不可更改的集合

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  4. LINUX 无法登入系统(2017-1-16)

    很好的博文:http://blog.csdn.net/caizi001/article/details/38659189

  5. UVa 524 - Prime Ring Problem

    题目大意:输入正整数n,把整数1,2...,n组成一个环,使得相邻两个整数之和均为素数.输出时从整数1开始逆时针(题目中说的不是很明白??)排列.同一个环应恰好输出一次. 枚举,并在枚举每一个数是进行 ...

  6. AngularJS 讲解五, Factory ,Service , Provider

    一. 首先说一下,为什么要引入Factory,Service和Provider这三个Service层. 1.因为我们不应该在controller层写入大量的业务逻辑和持久化数据,controller层 ...

  7. 浅谈Log4j

    1 什么是Log4j Log4j 是Apache为Java提供的日志管理工具.为了你快速理解Log4j的作用,我们用下面的代码说明Log4j的作用.我们为了调试程序,总是需要在程序使用System.o ...

  8. iOS 登陆之界面设置

    1.界面构成 1.1. 效果图 1.2. 元素 背景图 用户名的输入框 密码的输入框 登陆按钮 忘记密码 用户注册 第三方登陆 两个分割线

  9. 上传预览 easyui部分控件获取focuse 表单验证

    js: $(document).ready(function () { //$('#creater').combobox({ // url: '/VMS.UI/BindData/ScheamData? ...

  10. MongoDB安装环境搭建

    Mongodb的默认端口号27017 _id是全局唯一值,不要去给这个列赋值,默认是唯一的,如果赋值,列入有两列的_id:2,则会报冲突不能插入 [root@HE4 ~]# tar xvf mongo ...