作者:稀饭

本文约2200字,建议阅读12分钟

5月份的时候曾经投过腾讯的数据分析实习,中午投的简历,午觉睡醒就被call,没有HR通知,南山必胜客直接就来技术面。当时准备的还不够充分,半小时后就感谢充值了,不过里面有一道题倒是想在今天拿来说一说,也和我的近期实习相关联。

问题由腾讯面试官所在组的业务问题引入,具体的内容记不清了,但主要问的是RFM模型和聚类的融合。抽象表达一下就是:某个业务场景,简化为RFM模型,基于RFM模型的指标结构,做聚类,完成用户分群。

先简要介绍一下RFM模型吧。RFM模型是由美国数据库营销研究所的Arthur Hughes提出的基于网店客户消费行为数据的一种客户细分方法,即将最近一次消费(Regency),消费频率(Frequency)和消费金额(Monetary)作为重要的指标来分析和细分客户:

(1)最近一次消费(Regency):是指在客户多次消费中,距离上一次消费的时间。理论上客户距离上一次消费的时间越近越好,营销者可以由此衡量出消费者的忠诚度;

(2)消费频率(Frequency):是指消费者在某一段时间内的购买次数。根据此指标,最常购买的客户,忠诚度就最高;

(3)消费金额(Monetary):是指在客户在一定时间内购买产品的总金额。在一段时间内客户的购买金额总和越高,表明该客户为企业创造的价值就越大。

简单来看,只要把指标抽象成类似上述的R、F和M三个,就可以认为是RFM模型。RFM模型本身就有用户分群的经验操作,如下图所示:

那么如何基于聚类去使用RFM模型呢?接下来就可以回到刚才的面试问题:某个业务场景,简化为RFM模型,基于RFM模型的指标结构,做聚类,完成用户分群。数据的结构很清楚,行是用户,列1是RFM模型中的R,列2是F,列3是M。设用户数量为N,则该数据表就是一个N×3的二维表,用kmeans聚类就可以很快地将用户进行分群。但实际上真的有这么简单吗?

不可否认,这种处理的思路是没有问题的,但是需要对RFM中的三个指标做更深入的思考。重新回到RFM的定义上来看,R是指“最近一次消费与当前时间的距离”,F是指“消费频率”,M是指“消费金额”。那么R的取数原理应该是:R = “当前时间 - 最近一次消费的时间”,给出的是一个时间长度数据;F的取数原理应该是:F = “某一时间段的消费次数 ÷ 该时间段的长度”,给出的是一个频率数据;M的取数原理则是“某一时间段的消费总金额”,给出的是一个总量数据。一个例子可以说明最后算出来RFM大概长什么样:“用户A,距离上一次消费已有28天,在上个月的消费次数为3次,消费总金额为5000元”。如果用一个三元向量来表示,这个用户A的聚类向量为(28 , 3 , 5000)。如果用户A是典型用户,也就是说用户池中的用户大多数和用户A各项RFM指标接近,那么整体来看,绝大多数的数据点都会集中在Z轴附近(以XYZ轴代表这个三元向量的各指标位置)。也就是说,如果以Z轴来作为主视图的位面,那么大多数的点将集中在Z轴某个点的附近,这个点如果视为原点,那么即相当于大多数数据被压缩到了原点附近。

在这种场景下做聚类,可能得到的结果并不理想。我们知道,数据越分散,聚类的结果越好。当数据越集中,聚类的结果一般就越差。所以RFM模型与聚类的结合,重点不是考察如何把聚类方法用在 RFM模型中,而是在考如何基于RFM模型中三个指标去设计具有可用性的聚类方案。更抽象的来说,如何对量级差异较大,指标性质迥乎不同的数据做聚类。

有两种思路是容易想到的的。第一种思路是做数据的标准化。将数据转化为scale的结果。但标准化并不能改变数据的分布,对数据的密集性未必有改善。下图为标准化前后的对比:

第二种思路是做降维,把数据的维度进行压缩,合成一个维度或者两个维度,在这种情况下就相当于把原先较为集中的数据进行了压缩处理,一般来说,好的降维方法是可以一方面对数据进行压缩,另一方面又可以松散化数据,从而使得聚类算法的效果得到提升,但问题在于,降维会损失信息,原维度只有三个,是否还经得起降维。

在当时面试的时候,上面两种思路我都有提及,但面试官其实并不是很满意,但他提示我需要先做分组。当时我并没有想明白什么叫“先要做分组”,后来我也对这个问题做了深入的思考之后,才明白他想要的答案可能是一种组合处理 ——“先分类再聚类”。

这种方法是怎样做的呢?首先我们对R、F和M三个指标做一个预先分类。简单来说,R可以按照某个经验指标,分为时间间隔较长的用户组、时间间隔中等的用户组、时间间隔较短的用户组;F可以按照消费频率的高低,分为高频率的用户组、中等频率的用户组和低频率的用户组;M也可以根据消费的金额,分为消费金额较大的用户组、消费金额适中的用户组以及消费金额较少的用户组。那么再把这R、F、M三个指标合起来,就变成了三个分类变量,每个分类变量有3个类别,也就是用户类型最多有3×3×3 = 27种。那么我们的目标其实就是把这27种用户进行聚类,分成少量了几个类,相当于“先分类再聚类”。

此时由于是分类数据,传统的kmeans聚类已经不再适合,需要换适合分类数据聚类的方法。这里提供一种聚类方法给大家,就是kmodes聚类。k-modes算法采用差异度来代替k-means算法中的距离。k-modes算法中差异度越小,则表示距离越小。简单来说,一个样本和一个聚类中心的差异度就是它们各个属性不相同的个数,不相同则记为1,最后计算1的总和。这个和就是某个样本到某个聚类中心的差异度。

那么通过这种“先分类再聚类”的操作,就可以使得原来密集的数据点得到改善,也不会因为指标数量过少而无法合理利用降维算法这种途径。

r型聚类典型指标_聚类与RFM模型 —— 从5月的一道腾讯数据分析面试题说起相关推荐

  1. r型聚类典型指标_应用统计学与R语言实现学习笔记(十)——聚类分析

    Chapter 10 Cluster Analysis 本篇是第十章,内容是聚类分析.由于之后的几章是典型的分析方法.而且在14章的案例里面可能不会体现,所以内容里会渗透较多的R语言操作.由于简书不支 ...

  2. r型聚类典型指标_常用的聚类算法及聚类算法评价指标

    1. 典型聚类算法 1.1 基于划分的方法 代表:kmeans算法 ·指定k个聚类中心 ·(计算数据点与初始聚类中心的距离) ·(对于数据点,找到最近的{i}ci(聚类中心),将分配到{i}ci中) ...

  3. r型聚类典型指标_文献解读 | 缺陷和非缺陷型精神分裂症脑网络功能紊乱的共性和异性...

     # 导读  精神分裂症是一种高度异质性疾病,缺陷型精神分裂症(DS)与非缺陷型精神分裂症患者(NDS)存在症状上的差异.缺陷型精神分裂症的阴性症状具有原发性和持久性的特点.早期影像学研究报道了DS的 ...

  4. r型聚类典型指标_六种GAN评估指标的综合评估实验,迈向定量评估GAN的重要一步...

    论文:An empirical study on evaluation metrics of generative adversarial networks 论文链接:https://arxiv.or ...

  5. 腾讯python面试题_面试题 | 腾讯数据分析面试题分享

    原标题:面试题 | 腾讯数据分析面试题分享 annatx | 作者 高级农民工 | 来源 今天给各位分享两道数据分析试题, 这是腾讯数据分析面试官在面试时考察候选人喜欢出的题,属于硬性技能考察题目,特 ...

  6. r型聚类分析怎么做_【SPSS数据分析】SPSS聚类分析(R型聚类)的软件操作与结果解读 ——【杏花开生物医药统计】...

    ​ 在上一讲中,我们讲述了针对样本进行聚类的分析方法-Q型聚类.今天我们将详细讲解针对变量数据进行的聚类分析--系统聚类之R型聚类. 我们要将数据变量进行聚类,但不知道要分成几类,或者没有明确的分类指 ...

  7. r型聚类分析怎么做_利用Excel实现R型聚类分析

    © 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.    http://www.c ...

  8. c均值聚类matlab程序_聚类算法之kmeans算法

    一.k-means算法介绍 k-means最早是由James MacQueen在1967年提出的,这一观点能够追溯到1957年Hugo Steinhaus所提出的想法.1957年,斯图亚特最先提出这一 ...

  9. 聚类dbi指数_聚类-K-Means

    1.什么是K-Means? K均值算法聚类 关键词:K个种子,均值 聚类的概念:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中 K-Means算法是一种聚类分析(cluster an ...

最新文章

  1. 照片墙瀑布流加载与阻止加载
  2. 【题型探究】公约数之和
  3. SynchronizedMap和ConcurrentHashMap有什么区别
  4. 2014年12月日本語能力試験N3聴解部分
  5. Spring-AOP @AspectJ切点函数之@annotation()
  6. Python学习笔记:函数
  7. python三大神器===》装饰器
  8. [HAOI2007]理想的正方形
  9. [html] 你有使用过IE的条件注释吗?
  10. java获取method,2.5 反射——Class对象功能_获取Method
  11. zabbix监控MHA及自动启动
  12. 戴尔软件部门第一弹 收购备份公司AppAssure
  13. 盘点国内外私募基金业绩报酬计提方式
  14. easymule学习----校验dll信息
  15. 计算机控制系统的框图,计算机控制系统原理框图.doc
  16. Android 手势事件工具类GestureDetector和VelocityTracker
  17. 步进电机调速,S曲线调速算法你会吗?
  18. 降低屏幕亮度,减缓眼疲劳 (linux/windows/firefox/android)
  19. rar格式压缩包无法下载,zip可以下载
  20. 如何将一个现有的Vue网页项目封装成electron桌面应用(转载)

热门文章

  1. geoip2 php,Geoip geoip-api-php 库包使用 – 通过ip 找到国家
  2. mysql 数据库 限制大小_MySQL数据库表各种大小限制小结
  3. html的ol和ul和li,HTML 列表元素OL、UL、LI
  4. php适配器模式应用,什么是适配器模式,它有哪些应用场景
  5. python微信好友分析源代码_Python实现微信好友的数据分析
  6. 通过apt自动生成建造者模式单线程版代码(二)
  7. 开发日记-20190821 关键词 读书笔记《掌控习惯》DAY 1
  8. APT 信息收集——shodan.io ,fofa.so、 MX 及 邮件。mx记录查询。censys.io查询子域名。...
  9. angularjs 中的$digest和$apply区别
  10. docker 挂载空间到docker