RFM模型的变形LRFMC模型与K-means算法的有机结合

应用场景: 可以应用在不同行业的客户分类管理上,比如航空公司,传统的RFM模型不再适用,通过RFM模型的变形LRFMC模型实现客户价值分析;基于消费者数据的精细化营销

应用价值: LRFMC模型构建之后使用了经典的聚类算法-K-Means算法来对客户进行细分,而不是传统的来与参考值对比进行手工分类,使得准确率和效率得到了大大提升,从而实现客户价值分析,进行精准的价格和服务设置;

经常买机票的朋友不知道有没有发现,机票的价格通常“阴晴不定”。3个月前是一个价格,2个月1个月1周前又是另一个价格;有时候白天和凌晨价格还大有来去,价格也时涨时跌。就我同事,过年前定好了高铁票,临走时看了一眼机票发现跌完比高铁票还便宜,果断退了买机票。更有甚者,不同账号登陆的价格还不一样…不懂的人认为水深,其实这些都是基于消费者数据的精细化营销。

RFM就是一种典型的对客户分类然后针对性营销的模型。**RFM模型在上一篇也已讲到,相信大家也已经很熟悉,它是由R(最近消费时间间隔)、F(消费频次)和M(消费总额)三个指标构成,通过该模型识别出高价值客户,在最后我也提及**RFM模型也不是万能的,但是适当的对RFM进行升级或者变形也可能会有很好的用处。比如在航空行业,直接使用M指标并不能反映客户的真实价值,因为“长途低等舱”可能没有“短途高等舱”价值高,所以得根据实际行业灵活调整RFM模型的指标。

国内外航空公司最常用的是根据客户价值分析特色LRFMC模型,将客户聚类为重要保持客户,重要发展客户,重要挽留客户,一般客户,低价值客户,从而针对每种类别的客户制定对应的价格和服务。本文的特别之处是在于LRFMC模型构建之后使用了经典的聚类算法-K-Means算法来对客户进行细分,而不是传统的来与参考值对比进行手工分类。使得准确率和效率得到了大大提升。

以某航空公司为例,利用LRFMC模型,教大家介绍如何在实际工作中结合K-means聚类算法将客户价值进行分类,从而实现客户价值分析,进行精准的价格和服务设置。

LRFMC模型

传统的RFM模型它是依据各个属性的平均值进行划分,但是,细分的客户群太多,精准营销的成本太高。,因此LRFMC模型将客户聚类为重要保持客户,重要发展客户,重要挽留客户,一般客户,低价值客户,从而针对每种类别的客户制定对应的价格和服务。

分析过程

首先,明确目标是客户价值识别,应用最广泛的模型是三个指标(消费时间间隔(Recency),消费频率(Frequency),消费金额(Monetary)) 
以上指标简称RFM模型,作用是识别高价值的客户。消费金额,一般表示一段时间内,消费的总额。但是,因为航空票价收到距离和舱位等级的影响,同样金额对航空公司价值不同因此,需要修改指标。选定变量,舱位因素=舱位所对应的折扣系数的平均值=C,距离因素=一定时间内积累的飞行里程=M,再考虑到,航空公司的会员系统,用户的入会时间长短能在一定程度上影响客户价值,所以增加指标L=入会时间长度=客户关系长度。因此,总共确定了五个指标,消费时间间隔R,客户关系长度L,消费频率F,飞行里程M和折扣系数的平均值C。以上指标,作为航空公司识别客户价值指标,记为LRFMC模型

LRFMC模型指标含义

  • L:会员入会时间距观测窗口结束的月数。
  • R:客户最近一次乘坐公司飞机距离观测窗口结束的月数。
  • F:客户在观测窗口内乘坐公司飞机的次数。
  • M:客户在观测窗口内累计的飞行里程碑。
  • C:客户在观测窗口内乘坐仓位所对应的折扣系数的平均值。

K-mean算法

作为数据挖掘的一个重要研究课题,聚类分析技术越来越受到人们的关注。聚类就是将物理或抽象对象的集合分成多个相似的数据子集,同一个子集内的对象之间具有较高的相似度,而不同子集内的对象差别较大。经过专家学者们的研究,目前聚类算法可以归纳为如下几类:基于划分的方法、基于密度的方法、基于层次的方法、基于模型的方法和高维数据的方法。K-means算法作为一种基于划分的动态聚类算法,它以误差平方和SSE作为聚类准则函数,具有简单有效、收敛速度较快、便于处理大型数据集等优点,从而获得了广泛的应用。

K-means算法的步骤如下: 

简单总结起来就是:初始化聚类中心、样本点划分、更新聚类中心、样本点划分、更新聚类中心....直至收敛即可

使用Python进行K-means算法的实现代码:

 1 import numpy as np
 2 # import matplotlib.pyplot as plt
 3 # 加载数据
 4 def loadDataSet(fileName):
 5     data = np.loadtxt(fileName,delimiter=‘\t‘)
 6     return data
 7
 8
 9 # 距离度量使用欧氏距离
10 def distEclud(x,y):
11     return np.sqrt(np.sum((x-y)**2))
12
13
14 # 随机k个初始聚类中心
15 def randCent(dataSet,k):
16     m,n = dataSet.shape
17     centroids = np.zeros((k,n))
18     for i in range(k):
19         index = int(np.random.uniform(0,m)) #
20         centroids[i,:] = dataSet[index,:]
21     return centroids
22
23
24 # K-means算法过程
25 def KMeans(dataSet,k):
26     m = np.shape(dataSet)[0]  #行的数目
27     # 第一列存样本属于哪一簇
28     # 第二列存样本的到簇的中心点的误差
29     clusterAssment = np.mat(np.zeros((m,2)))
30     clusterChange = True
31
32     # 第1步 初始化centroids
33     centroids = randCent(dataSet,k)
34     while clusterChange:
35         clusterChange = False
36
37         # 遍历所有的样本(行数)
38         for i in range(m):
39             minDist = 100000.0
40             minIndex = -1
41
42             # 遍历所有的质心
43             #第2步 找出最近的质心
44             for j in range(k):
45                 # 计算该样本到质心的欧式距离
46                 distance = distEclud(centroids[j,:],dataSet[i,:])
47                 if distance < minDist:
48                     minDist = distance
49                     minIndex = j
50             # 第 3 步:更新每一行样本所属的簇
51             if clusterAssment[i,0] != minIndex:
52                 clusterChange = True
53                 clusterAssment[i,:] = minIndex,minDist**2
54         #第 4 步:更新质心
55         for j in range(k):
56             pointsInCluster = dataSet[np.nonzero(clusterAssment[:,0].A == j)[0]]  # 获取簇类所有的点
57             centroids[j,:] = np.mean(pointsInCluster,axis=0)   # 对矩阵的行求均值
58     print("Congratulations,cluster complete!")
59     return centroids,clusterAssment

看起来可能会比较复杂,但其实可能没有必要这样做,因为这些经典的机器学习算法只需要在python中调用一个包就好了

 1 from sklearn.cluster import KMeans
 2
 3 # 这里参数的选择要注意下:n_clusters为类簇个数,init表示初始聚类中心选择方法,n_init表示算法运行的次数选择最优输出,max_iter表示最大迭代次数,tol表示误差平方和的阈值,小于时即停止迭代。
 4 kmeans = KMeans(n_clusters=K, init=‘random‘, n_init=1, max_iter=300, tol=0.0001).fit(X)
 5 # 聚类中心
 6 centers = kmeans.cluster_centers_
 7 # print("聚类中心:\n", centers)
 8 # 聚类结果
 9 result = kmeans.labels_
10 # 误差平方和
11 sse = kmeans.inertia_

构建模型及模型应用

数据预处理

数据预处理这一步的重要性就不用我多说了,其中需要进行缺失值处理,异常值处理等等,这时候我们已经完成了数据的过滤,计算,筛选操作,并得到了LRFMC模型的五个指标,但通过观察可以发现,这些数据之间的量级是不同的,差距甚至达到了千万倍的级别,量纲不同进行训练不能真实的反映数据的变动规律,想要建立建立正确的模型,还需要对数据进行标准化处理。常用的数据标准化处理有z-sores标准化、最大最小化等:

from sklearn import preprocessing
import pandas as pd

process = input("请输入预处理数据方法:")
if process == "标准化":
    X = preprocessing.scale(np.array(pd1, dtype=np.float64))
elif process == "最大最小":
    X = preprocessing.MinMaxScaler().fit_transform(np.array(pd1, dtype=np.float64))
elif process == "归一化":
    X = preprocessing.normalize(np.array(pd1, dtype=np.float64), norm=‘l2‘)

客户聚类

接下来就可以使用预处理完的数据来进行聚类,属性值就选LRFMC模型的五个指标,类簇数目为5类,最大迭代次数一般几百次或者默认值就可以,距离度量使用默认的欧式距离即可。这里有一点需要注意,就是在初始聚类中心的选择方法上,可以选择“K-means++”,当然也可以自己输入,因为K-means算法对初始聚类中心敏感,不同的初始聚类中心选取会得到不同的聚类结果。

1 kmeans = KMeans(n_clusters=5, init=‘k-means++‘, n_init=1, max_iter=300, tol=0.0001).fit(X)

进一步可以数据可视化,也可以对得到的聚类结果进行客户价值分析了

客户价值分析

  1. 类簇0 重要保持客户:R(最近乘坐航班)低,F(乘坐次数)、C(平均折扣率高,舱位较高)、M(里程数)高。最优先的目标,进行差异化管理,提高满意度。
  2. 类簇1 重要发展客户:R(最近乘坐航班)低,F(乘坐次数)高,M(里程数)也不低,潜在价值客户。虽然说,当前价值不高,但是却有很大的发展潜力,促使这类客户在本公司消费和合作伙伴处消费。
  3. 类簇2 重要挽留客户:C(平均折扣率高,舱位较高)、F(乘坐次数)、M(里程数)较高,但是较长时间没有乘坐(R)小。增加与这类客户的互动,了解情况,采取一定手段,延长客户生命周期。
  4. 类簇3 一般与低价值客户:C、F、M、L都较低,但L高。他们可能是在公司打折促销时才会乘坐本公司航班。
  5. 类簇4 低价值客户:各方面的数据都是比较低的,属于一般或低价值用户。

这里客户价值分析可以根据企业具体应用场景灵活分析,针对这5类客户,航空公司就可能采取不同的措施,如会员的升级与保级、交叉销售、管理模式的改变等。企业要获得长期的丰厚利润,必须需要大量稳定的、高质量的客户。维持老客户的成本远远低于新客户,保持优质客户是十分重要的。精准营销中,也有成本因素,所以按照客户价值排名,进行优先的,特别的营销策略,是维持客户的关键。

总结

结合航空公司客户价值案例的分析,针对传统RFM模型的不足,结合案例进行改造,介绍了一种RFM模型的变形LRFMC模型与聚类算法-K-means算法的有机结合应用,最后通过聚类结果的分析,选出客户价值排行,并且制定相应策略,为企业节约成本,提升效率保驾护航。

原文地址:https://www.cnblogs.com/mschen/p/11625428.html

时间: 2024-10-09 14:46:03

RFM模型的变形LRFMC模型与K-means算法的有机结合的相关文章

混合高斯模型(Mixtures of Gaussians)和EM算法

混合高斯模型(Mixtures of Gaussians)和EM算法 主要内容: 1. 概率论预备知识 2. 单高斯模型 3. 混合高斯模型 4. EM算法 5. K-means聚类算法 一.概率论预备知识 1. 数学期望/均值.方差/标准差 设离散型随机变量X的分布律为 则称为X的数学期望或均值 设连续型随机变量X的概率密度函数(pdf)为 则其数学期望定义为: 随机变量X的方差: 随机变量X的标准差: 2. 正态分布.协方差 正态分布: 概率密度函数: 设(X,Y)为二维随机变量,若存在,则

【转载】混合高斯模型(Mixtures of Gaussians)和EM算法

混合高斯模型(Mixtures of Gaussians)和EM算法 这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示.与k-means的硬指定不同,我们首先认为是满足一定的概率分布的,这里我们认为满足多项式分布,,其中,有k个值{1,…,k}可以选取.而且我们认为在给定后,满足多值高斯分布,即.由此可以得到联合分布. 整个模型简单描述为对于每个

[Pytorch]Pytorch 保存模型与加载模型(转)

转自:知乎 目录: 保存模型与加载模型 冻结一部分参数,训练另一部分参数 采用不同的学习率进行训练 1.保存模型与加载 简单的保存与加载方法: # 保存整个网络 torch.save(net, PATH) # 保存网络中的参数, 速度快,占空间少 torch.save(net.state_dict(),PATH) #-------------------------------------------------- #针对上面一般的保存方法,加载的方法分别是: model_dict=torch.

生成模型 VS 判别模型 (含义、区别、对应经典算法)

从概率分布的角度考虑,对于一堆样本数据,每个均有特征Xi对应分类标记yi. 生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布.能够学习到数据生成的机制. 判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率. 数据要求:生成模型需要的数据量比较大,能够较好地估计概率密度:而判别模型对数据样本量的要求没有那么多. 两者的优缺点如下图,摘自知乎 生成模型:以统计学和Bayes作为理论基础 1.朴素贝叶斯: 通过学习先验概率分

padding标准盒模型和怪异盒子模型

我们都知道padding是为块级元素设置内边距 但是在使用过程中,我们却会遇到一些问题.padding的标准盒模型和怪异盒模型 padding盒子模型 我们通过demo来讲这个问题,用文字干讲第一没意思,第二讲不明白 标准盒模型: 我们先摆出HTML和CSS代码: 1 <div class="shoebox"> <!--此div模仿鞋子的鞋盒--> 2 <div class="shoes"> <!--此div模仿鞋子--&g

ThinkPHP 学习笔记 ( 四 ) 数据库操作之关联模型 ( RelationMondel ) 和高级模型 ( AdvModel )

一.关联模型 ( RelationMondel ) 1.数据查询 ① HAS_ONE 查询 创建两张数据表评论表和文章表: tpk_comment , tpk_article .评论和文章的对应关系为,一条评论 id 对应一篇文章,为 ONE_TO_ONE 关系 ( 一对一 ).评论表的结构为: 其中 aid 字段与文章表的 id 字段对应.打开自定义模型 ArticleModel,让模型继承于 RelationModel,然后定义成员属性 $_link,代码: ArticleModel.cla

判别式模型和产生式模型 (discriminative model and generative m

最经典的莫过于 Andrew Ng在NIPS2001年有一篇专门比较判别模型和产生式模型的文章: On Discrimitive vs. Generative classifiers: A comparision of logistic regression and naive Bayes (http://robotics.stanford.edu/~ang/papers/nips01-discriminativegenerative.pdf) 转: 判别式模型和产生式模型 (discrimin

matlab(5) : 求得θ值后用模型来预测 / 计算模型的精度

求得θ值后用模型来预测 / 计算模型的精度 %% ============== Part 4: Predict and Accuracies ==============% After learning the parameters, you'll like to use it to predict the outcomes% on unseen data. In this part, you will use the logistic regression model% to predict

ThinkPHP 的模型使用详细介绍--模型的核心(七)

原文:ThinkPHP 的模型使用详细介绍--模型的核心(七) 注意:本节是ThinkPhp框架对数据操作的核心处理部分 大家还是在这里看清楚可以将其剪切放到代码编辑器中查看 本章节给大家着重介绍模型的: 一.普通查询方式    . 二.表达式查询方式 . 三.区间查询      .  四.统计查询  .    五.SQL直接查询 回顾初步模型的-"增删改查": // 直接连接数据库,但是得先去配置文件中配置下才行 class IndexAction extends Action {