R语言-用户细分

小说:老婆怀上了二胎,已经作为奶爸的你要还是不要?作者:卓成辛更新时间:2019-03-25字数:14117

R语言-用户细分


案例:通过使用R语言的聚类算法将用户进行合理的划分,找出对超市贡献度,光临度最高的优质客户,对后期的推广有更深远的影响

1.导入包

library(dplyr)
library(reshape2)
library(cluster)
library(fpc)
library(mclust)

2.加载数据集

options(digits = 18) #小数可以显示到第18位
lss_all_cust_ls_info <- read.table("E:\Udacity\Data Analysis High\R\R_Study\高级课程代码\数据集\第一天\1顾客细分\lss_all_cust_ls_info.txt",header=T,sep="	")
head(lss_all_cust_ls_info)
lss_cust_payment <- read.table("E:\Udacity\Data Analysis High\R\R_Study\高级课程代码\数据集\第一天\1顾客细分\lss_cust_payment.txt",header=T,sep="	")
head(lss_cust_payment)
lss_cust_spend_info <- read.table("E:\Udacity\Data Analysis High\R\R_Study\高级课程代码\数据集\第一天\1顾客细分\lss_cust_spend_info.txt",header=T,sep="	")
head(lss_cust_spend_info)

3.查看数据集

#客户信息
head(lss_all_cust_ls_info)
str(lss_all_cust_ls_info)
summary(lss_all_cust_ls_info)

#支付信息
head(lss_cust_payment)
str(lss_cust_payment)
summary(lss_cust_payment)

#商品信息
head(lss_cust_spend_info)
str(lss_cust_spend_info)
summary(lss_cust_spend_info)

4.数据集预处理(将三个数据集合并成一个数据集,通过cust_id进行关联)

data_cat_wide = dcast(lss_cust_spend_info,cust_id~ls_category,value.var = "ls_spd_share")
head(data_cat_wide)
names(data_cat_wide)
data_cat_wide = data_cat_wide[,-2]
#dim(data_cat_wide)
#summary(data_cat_wide)


data_payment_wide = dcast(lss_cust_payment,cust_id~payment_category_desc,value.var = "payment_amount_share")
head(data_payment_wide)
#dim(data_payment_wide)

### 3. join data
##把三张表进行合并,通过cust_id来进行列合并
cust_all = merge(lss_all_cust_ls_info,data_payment_wide, by="cust_id")
cust_all_fnl = merge(cust_all,data_cat_wide, by="cust_id")
## 查看合并后的结果
head(cust_all_fnl,10)

dim(cust_all_fnl)
summary(cust_all_fnl)

 

 结论:将所有的纵向表转换成横向表,同时把所有数据集的所有字段汇总到一张表

5.数据清洗

## 提取出客户ID和性别
cust_id = cust_all_fnl[,1]
cust_sex  = cust_all_fnl[,2]

## 去除客户ID和性别,同时将除了这两个列之外的缺失值填充0
cust_all_fnl2 = cust_all_fnl[,-c(1,2)]
cust_all_fnl2[is.na(cust_all_fnl2)] =0

## 把性别缺失值变成1.5
cust_sex [is.na(cust_sex )] =1.5

##把处理后的数据合并
cust_all_fnl = data.frame(cust_id,cust_sex,cust_all_fnl2)
head(cust_all_fnl)
#summary(cust_all_fnl)


## 对于异常值进行处理,如果百分比小于0,则变成0,如果百分比大于1 则等于1
dim(cust_all_fnl)
for(i in 7:dim(cust_all_fnl)[2])
{
  cust_all_fnl[,i][cust_all_fnl[,i]<0] = 0
  cust_all_fnl[,i][cust_all_fnl[,i]>1] = 1
}

dim(cust_all_fnl)
## 去除礼品字段,因为0值较多,会给后期的聚类操作带来影响
mydata = cust_all_fnl[,-28]
dim(mydata)
summary(mydata)

 结论:生成一张所有属性的统计值,查看是否还有NA的值

6.选择K值

# 如果数据集中的变量过多,要先使用主成分分析找到影响因子在95%以上的列即可
# 选择K使得差异最小,下降幅度最小
comp = scale(mydata[,-1])

wss <- (nrow(comp)-1)*sum(apply(comp,2,var))

for (i in 2:15) wss[i] <- sum(kmeans(comp,centers=i)$withinss)
plot(1:15, wss, type="b", xlab="Number of Clusters",ylab="Within groups sum of squares")

7.使用K-media找到中心点的坐标

# 如果数据量较大,首先应对数据进行抽样,然后在找中心点
s = sample(1:dim(mydata)[1],2000,replace = F)
clus = 4
medk = pam(scale(mydata[s,-1]),clus,trace=T)
plotcluster(scale(mydata[s,-1]),medk$clustering)
table(medk$clustering)
Kcenter = medk$medoids

 


8.使用K-mean进行聚类

# 每次抽取1000个点进行聚类
k = kmeans(scale(mydata[,-1]),centers = Kcenter,nstart = 25,iter.max = 1000)
plotcluster(scale(mydata),k$cluster)

 结论:k-means的好处是速度快,但是中心点不稳定,k-media的好处是中心点稳定但是速度慢,此案例结合两者,先通过抽样的方式找出中心点,再将中心点带入到k-means中,即可得到聚类的样本

9.生成结果

# 对每个变量求均值
mydata_mean_sd = aggregate(scale(mydata),by=list(k$cluster),FUN=mean)
head(mydata_mean_sd)

10.输出到本地

# 写入到csv文件
write.csv(mydata_mean_sd,"E:\Udacity\Data Analysis High\R\R_Study\高级课程代码\数据集\第一天\1顾客细分\mydata_mean_sd.csv")

# 写入数据库
data_sql <- data.frame(mydata, cluster=k$cluster)
data_sql_out =  data_sql[,c(1,dim(data_sql)[2])]

 结论:通过生成的csv文件,我们可以得出如下结论:

      通过tot_spend可以得出2,4组的顾客对超市的贡献度较大,其中2类客户是最应该保留的优质客户

      通过promo_share可以得出4类客户对折扣较为敏感

      通过wz_spend_share可以得出4类用户最喜欢参与打5折的活动

   通过对比购物时间段来看1,2类用户喜欢晚上购物,3类用户喜欢下午的时候购物,4类用户喜欢早上购物

   通过对比支付方式1,3,4组大部分是现金支付,2组客户喜欢用银行卡支付

     通过对比消费商品可得出结论:

          2类客户喜欢购买大家电,手机通讯设备,母婴食品的高价格产品

          4类客户喜欢购买生鲜,蔬菜等农产品

          1类客户喜欢购买一些零食,饮料之类的商品

          3类客户是散客,会不定期的购买一些商品

   针对1类客户,在下午的时间段可以对零食,饮料进行一些促销和活动

   针对2类客户,在晚上的时间段,一些大商品的家电,手机等高价格的产品做一些捆绑销售,同时定期去推送一些新的手机,电器,母婴食品的信息,会有不错的销售业绩

   针对4类客户,在早上对农产品,生鲜,肉类等商品可以进行一些打折,买一赠一的,兑换券等活动,提升生鲜商品的业绩

   针对3类用户,不是超市的重点客户,暂时不知道如何提升到店率

 

当前文章:http://cn7782.com/glick/

发布时间:2019-03-25 08:22:37

朴槿惠:我来,只为人要活得真诚和正直 关爱自闭症儿童,诺心携手ONE NIGHT爱心义卖 当朋友不听劝,我该怎么办? 揭露人性丑恶的五大心理实验 一篇文章看懂Android学习最佳路线 假装没天份 他说自己是潜力股,我就要答应他结婚,可笑吗? 刘墉:爱他!少骂他!一 有良心的孩子自己会觉悟 关于《人生》答某报记者问 爱,分享与孝顺

罗李华谈:属牛的人2016年运程 老公出轨之后我对他的恨意该如何消除呢? 历史,让我们看见 又一倒掉的“大师”! 被传绯闻最多的十大女明星 牛仔裤不会一直等你 没有仪式感的爱情,不会长久 未来婆婆会不会成为扼杀感情的主要原因? 在感情中,如何更好地依恋伴侣? 有些爱就是用来辜负的 我们对校园凶杀案反思的重大失误导致凶杀案连续发生! 谢谢你没娶我 就这样,成为女人说“我还要”的男人 罗李华谈:属牛的人2016年运程 婚姻是主宰一生幸福的关键 怎么确定家中的风水财位? 春节团聚时需关注的儿童心理 水杯除了喝水还能把妹? 如何向心爱之人表白

编辑:乙安

我要说两句: (0人参与)

发布