不同用户购买不同产品的聚类分析

Published: 2016-09-29 21:27:00
By ytwan

In Items.

tags: R

目的

从海量的数据中提取和挖掘出对企业有价值的规律和趋势,为企业的决策,营销,运维等提供支持
支持包括,评估,预见,改进
在这里做的是客户分群
使用的工具是R语言
时间是20160929

特征工程

将原始数据转化为特征数据

数据示意

Channel Region  Fresh   Milk    Grocery Frozen  Detergents_Paper    Delicassen
2   3   12669   9656    7561    214 2674    1338
2   3   7057    9810    9568    1762    3293    1776
2   3   6353    8808    7684    2405    3516    7844
1   3   13265   1196    4221    6404    507 1788
2   3   22615   5410    7198    3915    1777    5185
2   3   9413    8259    5126    666 1795    1451

输入数据

filename <- "C:/Data/Wholesale_customers_data.csv" dat <- read.table(filename,sep=",",header=TRUE,stringsAsFactors=TRUE)

描述性统计

数据剖析,离散数据与连续数据

各个属性的集中趋势

median(dat[,3])
summary(dat[,3])
summary(dat)

各个属性离中趋势

max(dat[,3])
min(dat[,3])
sd(dat[,3])
var(dat[,3])

离散数据的p频率

##统计一列
datfreq <- data.frame(table(dat[,1]),stringsAsFactors=F)
统计两列或者多列
##install.packages("plyr")
library(plyr)
Freq_table <- count(dat,vars=c("Channel", "Region"))
colnames(Freq_table ) <- c("Chal", "Reg","Frequence")

各个属性的偏峰态

install.packages("fBasics")
library(fBasics)
kurtosis(dat[,3])
skewness(dat[,3])

关联协方差

cov(dat[,3],dat[,4]) 
cov(dat[,3],dat[,4])
cov(dat)
var(dat)

简单相关系数以及其显著性检验

cor(dat$[,3],dat[4])  
cor(dat)  
cor.test(dat[,3],dat[,4])  
cor.test(dat[,3],dat[,4],method="spearman")

绘制图形

plot(dat)
barplot(dat[,3])
hist(dat[,3])

聚类分析

    clusdata <- dat[,3:6]
##距离矩阵
    kdat <- dist(clusdata,method="euclidean")
##centers是分类个数,nstar取随机初始中心的次数
    km <- kmeans(kdat,center=3)
##聚类的一些参数
    km$centers      #各类别中心坐标点
    km$tot.withinss #组内平方和
    km$betweenss    #组间平方和
    km$totss        #总平方和
##聚类示意图
    plot(kdat,pch=(km$cluster-1))
    points(km$centers,pch=8)
    legend(km$center[1,1],km$center[1,2],"center_1")
    legend(km$center[2,1],km$center[2,2],"center_2")
    legend(km$center[3,1],km$center[3,2],"center_3")
##聚类评价,聚类优度 取N/2中聚类个数,看哪个模型拟合效果会好一些
    N <- length( clusdata[,1])
    result = rep(0,N/2)
    for(k in 1:(N-1)){
      km =kmeans(kdat,center=k)
      result[k] =km$betweenss/km$totss
      }
    #取结果的两位小数,并画出聚类优度图
     round(result,2)
     plot(1:(N/2),xlab="number of cluster",ylab="betweenss/totss")
     points(5,result[5],pch=16)
     legend(5,result[5],paste("(5",sprintf("%.1f%",result[5]*100),")",sep=""))
    ##结果展示   
    clustertag <- data.frame(km$cluster)
    colnames(clustertag) <- c("tags")
    tyepdat <- cbind(dat,clustertag)
    ##统计标签的数目  
    tagfreq <- as.data.frame(table(tyepdat$tags) ,stringsAsFactors=F)  
    ##筛选,选出特定标签的数据进行查看
    subset(tyepdat,tags=="3",select=Channel:tags)
    ##按照聚类的标签进行排序
    heatdat <- tyepdat[order(tyepdat$tags),]
    ##绘制K均值聚类热图
        #install.packages("pheatmap")
        library(pheatmap)
        pheatmap(heatdat[,3:8], cluster_rows=F,cluster_cols=F,border_color=NA)
        #install.packages("RColorBrewer")
        library(RColorBrewer)##颜色扩展包,扩展聚类热图
        pheatmap(heatdat[,3:8], cluster_rows=F,cluster_cols=F, col=brewer.pal(3,"Set3"),border_color=NA)
        #对热图的解释
            ##参考Heatmap里kmeans聚类 和 纯Heatmap  
            ##http://joseph.yy.blog.163.com/blog/static/50973959201285102114376/
        ##使用ggplot2绘制热图
            #ggplot(heatdat,)+geom_tile()
            #ggplot(heatdat,)+geom_raster()
    #或者利用R语言heatmap.2函数进行聚类并画热图
    #http://www.plob.org/article/10045.html

聚类结果解读与业务联系

用户的消费行为的图像进行贴标签
目标用户的群体分类
不同产品的价值组合
探测、发现 孤立点和异常点

备注信息

K-modes采用相关性
library(cluster)    ##k-medoids
dist
pm <- pam(d,)
聚类本身就是一种模型技术,聚类得到的结果可以指导实践
聚类在数据分析前期过程的一种工具,用来进行数据摸底,数据清洗以及数据整理
不足是处,对初始值敏感

blogroll

social