1. 一起CRM | CRM系统咨询、SaaS与CRM爱好者学习交流平台!首页
  2. 实战分享

RFM客户价值分析模型在航空领域中的实际应用

本文用具体实例的方式,在RFM的基础上构建客户价值分析模型,探讨如何对客户群体进行细分,以及细分后如何进行客户价值分析。最终得到LRFMC模型,并将客户群体细分为重要保持客户、重要发展客户、重要挽留客户、一般客户、低价值客户五类。

本文原始数据与分析思路来自《Python数据分析与挖掘实战》第七章,感谢这本书提供的数据集与分析框架。(这本书很不错,推荐)


1 背景与目标

1.1 背景

在面向客户制定运营策略、营销策略时,我们希望能够针对不同的客户推行不同的策略,实现精准化运营,以期获取最大的转化率。精准化运营的前提是客户关系管理,而客户关系管理的核心是客户分类。通过客户分类,对客户群体进行细分,区别出低价值客户、高价值客户,对不同的客户群体开展不同的个性化服务,将有限的资源合理地分配给不同价值的客户,实现效益最大化。

在客户分类中,RFM模型是一个经典的分类模型,模型利用通用交易环节中最核心的三个维度——最近消费(Recency)、消费频率(Frequency)、消费金额(Monetary)细分客户群体,从而分析不同群体的客户价值。

在某些商业形态中,客户与企业产生连接的核心指标会因产品特性而改变。如互联网产品中,以上三项指标可以相应地变为下图中的三项:最近一次登录、登录频率、在线时长。

RFM客户价值分析模型在航空领域中的实际应用

1.2 目标

本实例借助某航空公司客户数据,探讨如何利用KMeans算法对客户群体进行细分,以及细分后如何利用RFM模型对客户价值进行分析,并识别出高价值客户。

在本实例中,主要希望实现以下三个目标:

  1. 借助航空公司客户数据,对客户进行群体分类
  2. 对不同的客户群体进行特征分析,比较各细分群体的客户价值
  3. 对不同价值的客户制定相应的运营策略

2 分析过程

2.1 分析思路

本实例的数据包含了2012年4月1日至2014年3月31日期间的客户数据,共有6万余条记录。分析中需要用到KMeans算法,且需要将数据分析的结果可视化,便于后期的结论分析,于是采用以下两种工具进行分析:

  • jupyter notebook(Python 3.6 )
  • Excel 2016

同时数据的属性定义见下表所示,可见维度非常丰富。

2019082905450841

考虑到商用航空行业与一般商业形态的不同,决定在RFM模型的基础上,增加2个指标用于客户分群与价值分析,得到航空行业的LRFMC模型:

  • L:客户关系长度。客户加入会员的日期至观测窗口结束日期的间隔。(单位:天)
  • R:最近一次乘机时间。最近一次乘机日期至观测窗口结束日期的间隔。(单位:天)
  • F:乘机频率。客户在观测窗口期内乘坐飞机的次数。(单位:次)
  • M:飞行总里程。客户在观测窗口期内的飞行总里程。(单位:公里)
  • C:平均折扣率。客户在观测窗口期内的平均折扣率。(单位:无)

首先对原始数据进行探索,清洗异常记录,再根据上述公式将原始数据表变换得到LRFMC模型建模需要的新数据表,接着对新数据表的数据进行属性规约、数据变换、Python建模、结果分析,便能得到最终的结果。

总体思路与流程见下图:

2019082905452355

由于本实例中的数据已经得到,顾不需要在业务系统中抽取数据,直接开始对数据进行预处理即可。

2.2 数据预处理

2.2.1 数据探索

import pandas as pd

data = pd.read_csv(datafile, encoding = 'utf-8')
explore = data.describe(percentiles = [], include = 'all').T
explore['null'] = len(data) - explore['count']
RFM客户价值分析模型在航空领域中的实际应用

经过初步的数据探索,发现数据有几点特征:

  1. 共62988条记录
  2. 部分维度存在缺失值,WORK_CITY缺失2269条,SUM_YR_1缺失551条,SUM_YR_2缺失138条

2.2.2 数据清洗

此处主要清洗两类异常数据:

  1. 缺失值:票价为null的数据(注意不是票价为零)
  2. 异常值:票价为0、平均折扣率不为0、总飞行公里数大于0的数据(折扣不为0,仍有飞行里程,说明客户必然是花钱买票飞行的,如果此时票价也为0,说明是错误数据)
# 剔除票价为空值的记录
dataCleaned_1 = data[data['SUM_YR_1'].notnull()&data['SUM_YR_2'].notnull()]

# 剔除票价为0、平均折扣率不为0、总飞行公里数大于0的记录

flag1 = dataCleaned_1['SUM_YR_1'] != 0
flag2 = dataCleaned_1['SUM_YR_2'] != 0
flag3 = (dataCleaned_1['SEG_KM_SUM'] == 0) & (dataCleaned_1['avg_discount'] == 0)

dataCleaned = dataCleaned_1[flag1 | flag2 | flag3]
dataCleaned = dataCleaned.reset_index(drop=True) # 删除异常值后重新建立索引

共清洗944条异常数据,得到62044条有效记录。

2.2.3 属性规约

根据LRFMC模型,选取与模型强相关的6个属性:LOAD_TIME、FFP_DATE、LAST_TO_END、LIGHT_COUNT、SEG_KM_SUM、avg_discount。删除其他冗余的、弱相关的属性,得到属性选择后的数据集。

dataSpec = dataCleaned[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 
                        'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]
2019082905454567

2.2.4 数据变换

构建包含L、R、F、M、C五项指标的新数据表,并对应属性定义表,得到LRFMC模型中五项指标的计算公式:

  • L = LOAD_TIME – FFP_DATE. (观测窗口结束日期 – 入会日期)
  • R = LAST_TO_END. (最后一次乘机时间至观测窗口结束时长)
  • F = FLIGHT_COUNT. (观测窗口内的飞行次数)
  • M = SEG_KM_SUM. (观测窗口的总飞行公里数)
  • C = AVG_DISCOUNT. (平均折扣率)

利用2.2.3中的数据表计算得到变换后的数据表。

dataTransformed = pd.DataFrame(columns=['L', 'R', 'F', 'M', 'C'])  
tmp = {
    'L':pd.to_datetime(dataSpec['LOAD_TIME']) - pd.to_datetime(dataSpec['FFP_DATE']),
    # 需要将LOAA_TIME & FFP_DATE 两列先转化为datetime格式,再进行相减
    'R':dataSpec['LAST_TO_END'],
    'F':dataSpec['FLIGHT_COUNT'],
    'M':dataSpec['SEG_KM_SUM'],
    'C':dataSpec['avg_discount'],
    }
dataTransformed = pd.DataFrame(data = tmp, columns = ['L', 'R', 'F', 'M', 'C'])  

import numpy as np
# 将timedelta64格式转化为int32格式
dataTransformed['L'] = (dataTransformed['L'] / np.timedelta64(1, 'D')).astype(int)

结果如下图所示:

2019082905460451

从表中可以发现,每个指标的数据取值范围分布较广,为提高后续聚类分析的准确性,还需要将L、R、F、M、C五类数据进行标准化处理。标准化方法有极大极小标准化、标准差标准化等方法,此处采用标准差标准化的方法对数据进行处理。

dataZscore = (dataTransformed - dataTransformed.mean(axis=0)) / dataTransformed.std(axis=0)
dataZscore.columns = ['Z' + i for i in dataTransformed.columns]

标准差标准化后,得到包含ZL、ZR、ZF、ZM、ZC五项指标的数据集。

2.3 数据建模

客户价值分析模型构建主要分为两个部分:

  1. 利用K-Means算法对客户进行聚类分析,得到细分的客户群
  2. 对细分的客户群进行特征分析,得到客户价值分析模型

2.3.1 聚类分析

采用K-Means聚类算法对客户数据进行分群,共分为5类。

from sklearn.cluster import KMeans

k = 5 # 共分为5类

kmodel = KMeans(n_clusters = k, n_jobs = 4)
kmodel.fit(dataZscore)

kmodel.cluster_centers_
kmodel.labels_

得到结果后,将结果转化为DataFrame对象。

kmeansCenters = pd.DataFrame(kmodel.cluster_centers_, columns = dataZscore.columns)
labelsCounts = pd.DataFrame(kmodel.labels_)[0].value_counts()
kmeansLabels = pd.DataFrame(labelsCounts, index = None)
kmeansLabels.columns = ['Num']
kmeansResult = pd.concat([kmeansCenters, kmeansLabels], axis=1)
kmeansResult['Class'] = [1,2,3,4,5]
kmeansResult = kmeansResult[['Class','Num', 'ZL', 'ZR', 'ZF', 'ZM', 'ZC']]

结果如下图所示:

2019082905460451

以及对62044位客户贴上群体标签,记为1、2、3、4、5五类,并输出带有标签的Excel文件。

dataLabels = pd.DataFrame(kmodel.labels_, columns= ['CLASS']) + 1
dataResult = pd.concat([dataCleaned, dataLabels],axis=1)
dataResult.to_excel('tmp/dataResult.xlsx')

结果如下图所示:

2019082905462458

2.3.2 特征分析

对2.3.2中的聚类结果进行特征分析,如下图所示。

2019082905463943

2019082905465698

分析:

  • 群体1的C属性上最大
  • 群体2的M、F属性属性最大,R属性最小
  • 群体3的L、C属性最小
  • 群体4的R属性最大,F、M属性最小
  • 群体5的L属性最大

其中每项指标的实际业务意义为:

  • L:加入会员的时长。越大代表会员资历越久
  • R:最近一次乘机时间。越大代表越久没乘机
  • F:乘机次数。越大代表乘机次数越多
  • M:飞行总里程。越大代表总里程越多
  • C:平均折扣率。越大代表折扣越弱,0表示0折免费机票,10代表无折机票

对应实际业务对聚类结果进行分值离散转化,对应1-5分,其中属性值越大,分数越高。

2019082905471037

同时针对业务需要,及参考RFM模型对客户类别的分类,定义五个等级的客户类别:

  • 重要保持客户
    • 平均折扣率高(C↑),最近有乘机记录(R↓),乘机次数高(F↑)或里程高(M↑)
    • 这类客户机票票价高,不在意机票折扣,经常乘机,是最理想的客户类型
    • 公司应优先将资源投放到他们身上,维持这类客户的忠诚度
  • 重要发展客户
    • 平均折扣率高(C↑),最近有乘机记录(R↓),乘机次数低(F↓)或里程高(M↓)
    • 这类客户机票票价高,不在意机票折扣,最近有乘机记录,但总里程低,具有很大的发展潜力
    • 公司应加强这类客户的满意度,使他们逐渐成为忠诚客户
  • 重要挽留客户
    • 平均折扣率高(C↑),乘机次数高(F↑)或里程高(M↑),最近无乘机记录(R↑)
    • 这类客户总里程高,但较长时间没有乘机,可能处于流失状态
    • 公司应加强与这类客户的互动,召回用户,延长客户的生命周期
  • 一般客户
    • 平均折扣率低(C↓),最近无乘机记录(R↑),乘机次数低(F↓)或里程低(M↓),入会时间短(L↓)
    • 这类客户机票票价低,经常买折扣机票,最近无乘机记录,可能是趁着折扣而选择购买,对品牌无忠诚度
    • 公司需要在资源支持的情况下强化对这类客户的联系
  • 低价值客户
    • 平均折扣率低(C↓),最近无乘机记录(R↑),乘机次数低(F↓)或里程低(M↓),入会时间短(L↓)
    • 这类客户与一般客户类似,机票票价低,经常买折扣机票,最近无乘机记录,可能是趁着折扣而选择购买,对品牌无忠诚度

根据聚类结果,对应上述五类客户类型,进行匹配,得到客户群体的价值排名。

2019082905502527

在数据与处理时,我们已经将62044位用户与客户群体一一对应,现在每类客户群体也对应了客户价值,至此得到了62044位客户的价值分类结果,建模完成。


3 分析结果

根据建模结果,发现该公司的五类不同价值的客户数量分布如图所示。

2019082905503934

对数据进行可视化,如下图所示。

2019082905505084

分析:

  • 重要保持客户、重要发展客户占比15.3%,不足两成,整体较少
  • 一般客户、低价值客户占比59.3%,接近六成,整体偏多
  • 重要挽留客户占比25.4%,接近四分之一,整体发挥空间大

按照20/80法则,一般而言企业的80%收入由头部20%的用户贡献,从上图中也能发现,忠诚的重要保留客户、中发展客户必然贡献了企业收入的绝大部分,企业也需要投入资源服务好这部分客户。

同时,重要保持客户、重要发展客户、重要挽留客户这三类客户其实也对应着客户生命周期中的发展期、稳定器、衰退期三个时期。从客户生命周期的角度讲,也应重点投入资源召回衰退期的客户。

一般而言,数据分析最终的目的是针对分析结果提出并开展一系列的运营/营销策略,以期帮助企业发展。在本实例中,运营策略有三个方向:

  1. 提高活跃度:提高一般客户、低价值客户的活跃度。将其转化为优质客户
  2. 提高留存率:与重要挽留客户互动,提高这部分用户的留存率
  3. 提高付费率:维系重要保持客户、重要发展客户的忠诚度,保持企业良好收入

每个方向对应不同的策略,如会员升级、积分兑换、交叉销售、发放折扣券等手段,此处不再展开。

 

作者:沈涛
链接:https://zhuanlan.zhihu.com/p/36450919
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

免责声明:此文内容来自:精华 投稿,仅代表作者个人观点,与本网无关。仅供读者参考,并请自行核实相关内容,如有侵权请联系小编删除,原文链接: 。

发表评论

登录后才能评论

联系我们

在线咨询:点击这里给我发消息

邮件:eqruan@163.com

QR code