应用场景: 可以应用在不同行业的客户分类管理上,比如航空公司,传统的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)
进一步可以数据可视化,也可以对得到的聚类结果进行客户价值分析了
客户价值分析
- 类簇0 重要保持客户:R(最近乘坐航班)低,F(乘坐次数)、C(平均折扣率高,舱位较高)、M(里程数)高。最优先的目标,进行差异化管理,提高满意度。
- 类簇1 重要发展客户:R(最近乘坐航班)低,F(乘坐次数)高,M(里程数)也不低,潜在价值客户。虽然说,当前价值不高,但是却有很大的发展潜力,促使这类客户在本公司消费和合作伙伴处消费。
- 类簇2 重要挽留客户:C(平均折扣率高,舱位较高)、F(乘坐次数)、M(里程数)较高,但是较长时间没有乘坐(R)小。增加与这类客户的互动,了解情况,采取一定手段,延长客户生命周期。
- 类簇3 一般与低价值客户:C、F、M、L都较低,但L高。他们可能是在公司打折促销时才会乘坐本公司航班。
- 类簇4 低价值客户:各方面的数据都是比较低的,属于一般或低价值用户。
这里客户价值分析可以根据企业具体应用场景灵活分析,针对这5类客户,航空公司就可能采取不同的措施,如会员的升级与保级、交叉销售、管理模式的改变等。企业要获得长期的丰厚利润,必须需要大量稳定的、高质量的客户。维持老客户的成本远远低于新客户,保持优质客户是十分重要的。精准营销中,也有成本因素,所以按照客户价值排名,进行优先的,特别的营销策略,是维持客户的关键。
总结
结合航空公司客户价值案例的分析,针对传统RFM模型的不足,结合案例进行改造,介绍了一种RFM模型的变形LRFMC模型与聚类算法-K-means算法的有机结合应用,最后通过聚类结果的分析,选出客户价值排行,并且制定相应策略,为企业节约成本,提升效率保驾护航。
原文地址:https://www.cnblogs.com/mschen/p/11625428.html