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

作者:稀饭

本文约 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模型本身就有用户分群的经验操作,如下图所示:

e3b8f9e11529cf5f7b18aac40e067da7.png

那么如何基于聚类去使用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的结果。但标准化并不能改变数据的分布,对数据的密集性未必有改善。下图为标准化前后的对比:

ba858a98bd5287336d52843e1570cddd.png

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

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

这种方法是怎样做的呢?首先我们对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的总和。这个和就是某个样本到某个聚类中心的差异度。

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

4a18d83a8e0573a3e85de247efacfc95.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值