[关闭]
@notmylove 2019-07-18T12:55:34.000000Z 字数 4807 阅读 5588

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

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模型指标含义

K-mean算法

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

K-means算法的步骤如下:

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

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

import numpy as np
# import matplotlib.pyplot as plt
# 加载数据
def loadDataSet(fileName):
    data = np.loadtxt(fileName,delimiter='\t')
    return data


# 距离度量使用欧氏距离
def distEclud(x,y):
    return np.sqrt(np.sum((x-y)**2)) 


# 随机k个初始聚类中心
def randCent(dataSet,k):
    m,n = dataSet.shape
    centroids = np.zeros((k,n))
    for i in range(k):
        index = int(np.random.uniform(0,m)) #
        centroids[i,:] = dataSet[index,:]
    return centroids


# K-means算法过程
def KMeans(dataSet,k):
    m = np.shape(dataSet)[0]  #行的数目
    # 第一列存样本属于哪一簇
    # 第二列存样本的到簇的中心点的误差
    clusterAssment = np.mat(np.zeros((m,2)))
    clusterChange = True

    # 第1步 初始化centroids
    centroids = randCent(dataSet,k)
    while clusterChange:
        clusterChange = False

        # 遍历所有的样本(行数)
        for i in range(m):
            minDist = 100000.0
            minIndex = -1

            # 遍历所有的质心
            #第2步 找出最近的质心
            for j in range(k):
                # 计算该样本到质心的欧式距离
                distance = distEclud(centroids[j,:],dataSet[i,:])
                if distance < minDist:
                    minDist = distance
                    minIndex = j
            # 第 3 步:更新每一行样本所属的簇
            if clusterAssment[i,0] != minIndex:
                clusterChange = True
                clusterAssment[i,:] = minIndex,minDist**2
        #第 4 步:更新质心
        for j in range(k):
            pointsInCluster = dataSet[np.nonzero(clusterAssment[:,0].A == j)[0]]  # 获取簇类所有的点
            centroids[j,:] = np.mean(pointsInCluster,axis=0)   # 对矩阵的行求均值
    print("Congratulations,cluster complete!")
    return centroids,clusterAssment

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

from sklearn.cluster import KMeans

# 这里参数的选择要注意下:n_clusters为类簇个数,init表示初始聚类中心选择方法,n_init表示算法运行的次数选择最优输出,max_iter表示最大迭代次数,tol表示误差平方和的阈值,小于时即停止迭代。
kmeans = KMeans(n_clusters=K, init='random', n_init=1, max_iter=300, tol=0.0001).fit(X)
# 聚类中心
centers = kmeans.cluster_centers_
# print("聚类中心:\n", centers)
# 聚类结果
result = kmeans.labels_
# 误差平方和
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算法对初始聚类中心敏感,不同的初始聚类中心选取会得到不同的聚类结果。

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算法的有机结合应用,最后通过聚类结果的分析,选出客户价值排行,并且制定相应策略,为企业节约成本,提升效率保驾护航。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注