前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RFM模型+SOM聚类︱离群值筛选问题

RFM模型+SOM聚类︱离群值筛选问题

作者头像
悟乙己
发布2019-05-28 08:22:39
7490
发布2019-05-28 08:22:39
举报
文章被收录于专栏:素质云笔记素质云笔记

笔者寄语:一般情况下离群值不应该直接删除,应该进行筛选,然后进行专门的离群值分析。笔者在这进行一下思考,在聚类基础之上的一种离群点检验。

基于聚类的离群点检测的步骤如下:数据标准化——聚类——求每一类每一指标的均值点——每一类每一指标生成一个矩阵——计算欧式距离——画图判断。

1、数据聚类

利用RFM客户价值模型,进行SOM(自组织映射神经网络模型),可以参考笔者的博客。一般的聚类方式,比如K-mean均值是比较常用的聚类方法(可见笔者的其他博客——R语言︱异常值检验、离群点分析、异常值处理)。

当然聚类之前,需要进行数据标准化(scale函数)。

2、计算欧式距离

计算每一类人群的RFM三指标的均值。比如分成三类,计算三类指标的均值。

代码语言:javascript
复制
> km$centers
           R          F          M
1  3.4550549 -0.2956536  0.4491234
2 -0.1604506  1.1148015  0.3928444
3 -0.1493534 -0.6588930 -0.2717798

原理就是先生成一个每行都一样的均值矩阵(如下表),然后让原始数据减去均值矩阵的每一行,计算欧式距离。

> x1 [,1] [,2] [,3] [1,] 3.455055 -0.2956536 0.4491234 [2,] 3.455055 -0.2956536 0.4491234 [3,] 3.455055 -0.2956536 0.4491234 [4,] 3.455055 -0.2956536 0.4491234

欧式距离是公式=sqrt(rowSums((Data-均值矩阵)^2))

代码语言:javascript
复制
#各样本欧氏距离,每一行
x1=matrix(km$centers[1,], nrow = 940, ncol =3 , byrow = T)
juli1=sqrt(rowSums((Data-x1)^2))
x2=matrix(km$centers[2,], nrow = 940, ncol =3 , byrow = T)
juli2=sqrt(rowSums((Data-x2)^2))
x3=matrix(km$centers[3,], nrow = 940, ncol =3 , byrow = T)
juli3=sqrt(rowSums((Data-x3)^2))
dist=data.frame(juli1,juli2,juli3)

此时就会形成一个,三类欧式距离的变量列表。代表原始数据——三个聚类结果的欧式距离。计算每个客户,最小的欧式距离作为最好的筛选指标。

> dist juli1 juli2 juli3 1 3.1408725 2.4185049 1.2839514 2 4.4956224 1.9607109 1.2517772 3 4.6252512 1.1052795 1.7285993

3、画图并筛选

计算每个客户每个变量最小的欧式距离,然后进行画图,最后筛选出,这批数据的ID信息。

代码语言:javascript
复制
##欧氏距离最小值
y=apply(dist, 1, min)
plot(1:940,y,xlim=c(0,940),xlab="样本点",ylab="欧氏距离")
points(which(y>2.5),y[which(y>2.5)],pch=19,col="red")

##数据筛选
yy=data.frame(id=which(y>2.5),long=y[which(y>2.5)])  #2.5这个阀值自己调整
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年04月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、数据聚类
  • 2、计算欧式距离
  • 3、画图并筛选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档