对应实现代码:传送门(实现代码专注于方案的实现,k-means算法的改进并没有在代码云中体现,为方便实现直接采用sklearn标准库算法)

摘要:信息时代的来临使得企业营销焦点从产品中心转变为客户中心,客户关系管理成为企业的核心问题。准确的客户分类结果是企业优化营销资源分配的重要依据,客户分类越来越成为客户关系管理中亟待解决的关键问题之一。面对共享单车行业激烈的市场竞争,各个共享交通公司都推出了更优惠的营销方式来吸引更多的客户,本文借助国内某高校的校园萝卜车共享交通平台,建立了合理的客户价值评估模型—LRFMD模型,基于改进的K-means算法对客户进行聚类分析,比较不同客户群的客户价值,并制定相应的营销策略,对不同的客户群提供个性化的客户服务。实证研究表明,本文所提出的模型和改进算法可以有效的对共享交通客户进行分类,能够区分无价值、高价值客户。

关键词:客户关系管理;客户分类;共享交通;LRFMD模型;K-means算法

引言

近几年,中国共享交通行业风起云涌,大量资本蜂拥而至,摩拜、ofo、滴滴各种形式的共享单车和租车公司将中国的共享交通市场炒得万分火热,其迅速走红、全民关注的态势,也说明了大众出行是一个拥有巨大的民生需求的市场。如何利用这些海量的客户出行数据来进行细分,针对不同价值的客户制定优化的个性化服务方案,采取不同的营销策略,将有限的资源集中于高价值客户,实现企业利润最大化目标是目前非常热门的研究课题。

    国内某高校的校园萝卜车共享交通平台积累了大量包含老师、学生统计特征和行为特征的数据,但是这些数据不仅数据庞大而且特征繁多,很难从中提取出有价值的信息。为了保证客户细分的准确性,必须选择正确合理的分类指标及分类方法。目前识别客户价值最广泛的模型是通过三个指标(最近消费时间间隔(Recency)、消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别出高价值客户,简称RFM模型[1]。文献[2]在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。由于在具体萝卜车运营业务中,萝卜车的消费金额受驾驶距离、促销活动等多种因素影响,同样消费金额的不同客户对萝卜车公司的价值是不同的,因此这个指标并不适用于萝卜车公司的客户价值分析。文献[3]在分析RFM模型和客户价值矩阵模型的基础上提出了AFH客户分类模型。该模型加入了平均消费金额的指标,但是本质上依然没有将折扣系数与行驶里程等因素考虑进去。在分类方面,现在普遍采用的是聚类分析方法。目前使用最广泛的聚类算法是K-means算法[4][5]。文献[6][7]提出的K-means算法效果受聚类数、初始聚类中心等因子的影响较大,研究表明上述影响因子与具体案例与主观经验有关。因此,本文在原有的RFM模型上,选择客户在一定时间内累计的行驶距离M和客户在一定时间内享受的折扣系数的平均值D两个指标代替原有的消费金额M。此外,考虑到萝卜车客户的会员机制,入会时间的长短在一定时间程度上能够影响客户价值,所以在模型中增加客户关系长度L,作为区分客户的另一指标。为解决K-means算法中与初始值有关的两大缺陷,本文基于具体案例与主管经验将聚类数目K人为定成5,并提出了一种基于欧式距离的最大概率初始聚类中心选取策略。

1 构建LRFMD客户细分模型

    本文将客户关系长度L、消费时间间隔R、消费频率F、驾驶距离M和平均折扣系数D五个指标作为萝卜车公司识别客户价值指标(见表1),记为LRFMD模型。     

表 1 指标含义

模型

L

R

F

M

D

萝卜车LRFMD模型

会员注册时间距观测窗口结束的月数

客户最近一次乘坐驾驶萝卜车距观测窗口结束的月数

客户在观测窗口内驾驶萝卜车的次数

客户在观测窗口内累计的行驶里程

客户在观测窗口内驾驶萝卜车所享受的折扣系数的平均值

注:观测窗口:以过去某个时间点为结束时间,某一时间长度作为宽度,得到历史时间范围内的一个时间段。

    针对萝卜车的LRFMD模型,如果采用传统的RFM模型分析的的属性分箱方法,如图1所示,它是依据属性平均值进行划分,其中大于平均值的表示为↑,小于平均值的表示为↓,该模型虽然也能识别出最有价值的客户,但是细分的客户群太多,提高了针对性营销的成本。因此本文采用聚类的方法识别客户价值。基于改进的K-means算法,通过对萝卜车客户价值的LRFMD模型的五个指标进行聚类,识别出最有价值客户。

基于改进的K-means算法在共享交通行业客户细分中的应用_机器学习

图 1 RFM模型分析

    本文基于改进的K-means算法在共享交通行业客户细分的总体流程如图2所示。

基于改进的K-means算法在共享交通行业客户细分中的应用_机器学习_02

图 2 基于改进的K-means算法在共享交通行业客户细分的总体流程

基于改进的K-means算法在共享交通行业客户细分的总体流程主要包括以下步骤。

  1. 从萝卜车在某高校运营的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据。
  2. 对步骤1)中形成的两个数据集进行数据探索分析与预处理,包括数据缺失值与异常值的探索分析,数据的属性规约、清洗和变换。
  3. 利用步骤2)中形成的已完成数据预处理的建模数据,基于改进的K-means算法,通过客户价值的LRFMD模型进行客户分群,对各个客户群进行特征分析,识别出有价值的客户。
  4. 针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化服务。

1.1 数据抽取

    以2017/1/12为结束时间,选取宽度为一年多的时间段作为分析观测窗口,抽取观测窗口内有驾驶记录的所有用户的详细数据形成历史数据。对于后续新增的客户详细信息,以后续新增数据中最新的时间点作为结束时间,采用上述同样的方法进行抽取,形成增量数据。

    从萝卜车某高校后台数据库内的车辆信息以及支付记录等详细数据中,根据末次驾驶日期Last_Drive_Time,抽取2015/10/18-2017/1/12内所有客户的详细数据,总共有50715条记录。其中包含了用户ID、用户编号、开车里程、积分、罚款、折扣等28个属性。

1.2 数据探索分析

    本文的探索分析是对数据进行缺失值分析与异常值分析,分析出数据的规律与异常值。通过对数据观察发现原始数据中存在支付金额(cost)为0,折扣(discount)为0,总行驶里程大于0的记录。这种现象可能是用户免费试用或者积分兑换产生的。本文查找每列属性观测值中空置个数、最大值、最小值的探索结果如下所示:

表 2 数据探索结果分析表

属性名称

空值记录数

最大值

最小值

User_id

0

47042

1939

Current_miles

0

13710

0

Cost

11

78.1

-29.4

Car_id

0

246

68

1.3 数据预处理

    本文主要采用数据清洗、属性规约与数据变换的预处理方法。

1.数据清洗

通过数据探索分析,发现数据中存在缺失值,异常值,Cost、Money属性中存在值小于0的情况。由于原始数据量巨大,这类数据占比较小,对于问题影响不大,因此对其进行丢弃处理。具体处理方法如下。

  • 丢弃缺失值
  • 丢弃Cost、Money属性中值小于0的记录

2.属性规约

原始数据中属性太多(共31个属性),根据本文提出的LRFMD模型,选择与LRFMD指标相关的6个属性,即User_id,Start_time,Load_time,Cost,Money,bonus。

3.数据变换

数据变换是将数据转换成"适当的"格式,以适应挖掘任务及算法的需要。本文主要采用的数据变换方式为属性构造和数据标准化。

由于原始数据中并没有直接给出LRFMD模型的5个指标,需要通过原始数据提取这五个指标,具体的计算方式如下。

  1. L = Load_time – Start_time

注:用户注册时间距观测窗口结束的天数 = 观测窗口的结束时间 – 注册时间 [单位 :天]

  1. R = Last_To_End

注:用户最近一次驾驶萝卜车距离观测窗口结束的天数 [单位 :天]

  1. F = Drive_Count

注:用户在观测窗口内驾驶萝卜车的次数 [单位:次]

  1. M = Sum_Current_Miles

注:用户在观测窗口内驾驶萝卜车的总行驶里程 [单位:米]

  1. D = Sum_Bonus/Count

注:用户在观测窗口内驾驶萝卜车所享受的折扣系数的平均值 [单位:无]

将5个指标的数据提取后,需要对每个指标的数据分布情况进行分析,其数据的取值范围见下表所示。

表 3 LRFMD指标取值范围

属性名称

L

R

F

M

D

MAX

450

448

369

239968

111

MIN

1

1

1

0

0

AVG

257.39

168.54

14.57

9308.94

3.87

从表中的数据可以发现,5个指标的取值范围数据差异较大,为了消除数量级数据带来的影响,需要对数据进行标准化处理。本文采用Zscore标准差标准化处理方式,处理结果部分数据一览,如下表所示。

表 4 标准化处理后的数据集

ZL

ZR

ZF

ZM

ZD

1.20882776

1.312803469

-0.185458018

-0.554793993

-0.526600821

0.956659445

1.497281062

-0.347784511

-0.554793993

-0.526600821

1.249094637

1.83109238

-0.510111005

-0.552708063

-0.322491976

0.872614763

1.463577819

-0.550692628

-0.554793993

-0.526600821

-1.581091175

-1.016106791

-0.550692628

-0.554793993

-0.526600821

1.033287101

1.625940291

-0.510111005

-0.554793993

-0.526600821

0.847914913

1.43860888

-0.510111005

-0.554793993

-0.526600821

1.230696342

-0.901523796

1.356643666

-0.091002535

2.085992401

2 K-means改进算法

2.1 K-means算法

K-means算法源于信号处理中的一种向量量化方法,现在则更多地作为一种向量量化方法,现在则更多地作为一种聚类分析方法流星雨数据挖掘领域。K-means聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。这个问题将归结为一个把数据空间划分为Voronoi cells的问题[8][9]。这个问题在计算式是NP难,不过存在高效的启发式算法。一般情况下,都使用效率比较高的启发式算法[10],它们能够快速收敛于一个局部最优解。已知观测集(,,…,),其中每个观测都是一个d维实向量,K-means聚类要把这n个观测划分到k个集合中(k≦n),使得组内平方和(WCSS with-cluster sum of squares)最小。换句话说,它的目标是找到使得下式满足的聚类:

                                            (1)

其中是中所有点的均值。K-means算法具体步骤如下。

    输入:样本数据集X和聚类数k

    输出:k个类

  1. 随机选择k个初始聚类中心;
  2. 逐个将数据集X中各点按最小距离原则分配给k个聚类中心的某一个;
  3. 重新计算每个类的聚类中心;
  4. 若新的聚类中心和原来的聚类中心相等或小于预设阈值,则计算结束,否则转步骤(2)。

2.2 改进K-means算法

使得K-means算法效率很高的两个关键特征同时也被视为它最大的缺陷:

  1. 聚类数目k是一个输入参数。选择不恰当的k值可能会导致糟糕的聚类结果。这也是为什么要进行特征检查来决定数据集的聚类数目了。
  2. 收敛到局部最优解,可能导致"反直观"的错误结果。

基于改进的K-means算法在共享交通行业客户细分中的应用_数据_03

图 3 改进K-means算法流程图

k-均值算法的一个重要的局限性即在于它的聚类模型。这一模型的基本思想在于:得到相互分离的球状聚类,在这些聚类中,均值点趋向收敛于聚类中心。 一般会希望得到的聚类大小大致相当,这样把每个观测都分配到离它最近的聚类中心(即均值点)就是比较正确的分配方案。

2.2.1 改进初始聚类中心的选取方法

    传统K-means聚类算法通过初始中心迭代得到最后的 k 个中心。这个初始中心可以随便选也可以随机选,也可以只取前 k 个样本作为初始中心。聚类最后的结果与初始聚类中心的关系还是比较密切的,不同的初始中心可能会得到完全不同的结果。文献[11]提出了基于数据分段的思想来确定出事聚类中心。文献[12]提出了基于距离估计的方式确定初始聚类中心。文献[13]提出了K-means++基于最大概率的方式确定初始聚类中心。虽然文献[13]提出的K-means++算法可以确定地初始化聚类中心,但是从可扩展性来看,它存在一个缺点,那就是它内在的有序性特性:下一个中心点的选择依赖于已经选择的中心点。针对该缺点,本文在K-means++的基础上改变了每次遍历的取样策略,每次遍历取样O(k)个样本,重复该取样过程大约O(logn)次,重复取样过后共得到O(klogn)个样本点组成的集合,该集合以常数因子近似于最优解,然后再聚类这O(klogn)个点成k个点,最后将这k个点作为初始聚类中心送入Lloyd迭代中,实际实验证明O(logn)次重复取样是不需要的,一般5次重复取样就可以得到一个较好的聚类初始中心。如图3所示,方法具体如下:

  1. 从输入的数据点集合中随机选择O(k)个点作为聚类中心,重复5次取样,得到 O(5*k) 个样本点组成的集合 ,再聚类为k个初始中心点;
  2. 对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x),并基于欧氏距离的最大概率准则选择新的聚类中心;
  3. 重复过程(2)直到找到k个聚类中心。

第(2)步中,依次计算每个数据点与最近的种子点(聚类中心)的距离,依次得到D(1)、D(2)、…、D(n)构成的集合D,其中n表示数据集的大小。在D中,为了避免噪声,不能直接选取值最大的元素,应该选择值较大的元素,然后将其对应的数据点作为种子点。本文采用了模糊c在spark中的应用[14]的实现思路:取一个随机值,用权重的方式来取计算下一个"种子点"。 这个算法的实现是,先用乘以随机值Random得到值r,然后用,直到其,此时的点就是下一个"种子点"。

2.2.2 聚类数K值的选取

    运用K-means算法时,需要预先给定聚类数k,该算法是针对客户价值细分领域的,可以根据工程经验将k值取作5。

2.2.3 聚类结果

    运用K-means算法对包含L、R、F、M、D各指标的标准化数据进行聚类,聚类结果如表5、图4所示。

表 5 客户分类情况

ZL

ZR

ZF

ZM

ZD

num

per

-1.26534934

-0.93586135

-0.24461487

-0.22321496

-0.68739483

1030

29.59%

0.56052897

0.81107607

-0.33850695

-0.35428804

-0.01618059

1415

40.65%

0.6649835

-0.90491723

4.04972263

4.07757598

-0.3143415

108

3.10%

0.3475817

0.87571874

-0.53503839

-0.46243334

2.44529302

376

10.80%

0.55734129

-0.75230912

0.89627725

0.84189442

-0.28001647

552

15.86%

基于改进的K-means算法在共享交通行业客户细分中的应用_数据挖掘_04

图 4 聚类图

3 客户价值分析

    针对聚类结果进行特征分析,如图5所示。其中客户群1在R的属性上最小;客户群2在R属性上最大;客户群3在L、F、M属性上最大,R属性上也较小;客户群4在D、R属性上最大。结合萝卜车具体业务分析,通过比较各个

基于改进的K-means算法在共享交通行业客户细分中的应用_聚类_05

图 5 客户群特征分析图

指标在群间的大小对某个群的特征进行评价分析。例如客户群3在L、F、M属性上最大,R上属性最小,因此可以说L、R、F、M在客户群3上是劣势特征。以此类推,从而总结出每个群的优势和弱势特征,具体结果如表6所示。

表 6 客户群特征描述表

群类别

优势特征

弱势特征

客户群1

R

L

客户群2

R

客户群3

L

R

F

M

客户群4

R

F

M

客户群5

由上述的特征分析的图表说明每个客户群都有着显著不同的表现特征,基于该特征描述,本案例定义五个等级的客户类别:重要保持客户、重要发展客户、重要挽留客户、一般客户、低价值客户。每种客户类别如下:

  • 重要保持客户: 一般来说,这类客户的平均折扣率较低(因为萝卜车只

会在某些时间点如促销期进行折扣优惠活动,较低的平均折扣率对应着

较多的使用次数) 最近驾驶萝卜车(R)低,驾驶次数(F)且驾驶里程(M)高,会员时间(L)长。他们是萝卜车的最理想的客户类型及忠实用户,对萝卜车的运营贡献最大,但是所占比例却最小( 3.10%)。

  • 重要发展客户:这类客户虽然会员时间(L)短,但是最近驾驶萝卜车(R)小,行驶里程(M)与驾驶次数(F)较高,占比(29.59%)。
  • 重要挽留客户:这类客户入会时间(L)长,最近驾驶萝卜车(R)较长,但是总的行驶里程(M)与驾驶次数(F)不低,说明这类客户有挽留的必要,要分析为何最近不使用萝卜车了,需要多维持与用户的互动,占比(15.86%)。
  • 一般客户与低价值客户:这类客户较长时间没有使用过萝卜车,乘坐次

数(F)或者里程(M)比较少,占比(51.45%)。

    根据每种客户类型的特征,对各类客户群进行客户价值排名,其结果如表7所示。针对不同类型的客户群提供不同的产品与服务,提升重要发展客户的价值、稳定和延长重要保持客户的高水平消费、防范重要挽留客户的流失并积极进行关系恢复。

表 7 客户群价值排名

客户群

排名

排名含义

3

1

重要保持客户

1

2

重要发展客户

5

3

重要挽留客户

2

4

一般价值客户

4

5

低价值客户

4 讨论及局限性

    本文所提出的模型采用历史数据建模,随着时间的变化,分析数据的观测窗口也在变换。因此,对于新增客户详细信息,考虑业务的实际情况,建议该模型每一个月运行一次,对其新增客户的聚类中心进行判断,同时对本次新增客户的特征进行分析。如果增量数据的实际情况与判断结果差异大,需要业务部门重点关注,查看变化大的原因以及确认模型的稳定性。如果模型稳定性变化大,需要重新训练模型进行调整。

5 总结

    本文借助国内某高校的校园萝卜车共享交通平台,建立了合理的客户价值评估模型—LRFMD模型,基于改进的K-means算法对客户进行聚类分析,将萝卜车客户分成5种类型,建立客户群特征描述表进行客户价值分析,并提出了相应的营销策略。实证研究表明,本文所提出的模型和改进算法可以有效的对共享交通客户进行分类,能够区分无价值、高价值客户。本文提出的特征工程模型及相应的聚类算法,也能扩展应用到其他领域如航空客户细分、银行客户细分等。

参考文献

  1. 罗亮生,张文欣.基于常旅客数据库的航空公司客户细分方法研究[J].现代商业,2008(23)
  2. Xu Xiangbin,Wang Jiaqiang,Tu Huan,et al. Customer classification of E-commerce based on improved RFM model[J]. Journal of Computer Applications,2012,32(5):1439-1442.
  3. Wang Kefu. Applied research on AFH customer classification based on data mining technology[J]. Technoeconomics&Management Research,2012(11):24-28.
  4. 贺玲, 吴玲达, 蔡益朝. 数据挖掘中的聚类算法综述[J]. 计算机应用研究, 2007, 24(1):10-13.
  5. 李霞, 杨长海. K-means聚类算法在客户细分中的应用[J]. 五邑大学学报(自然科学版), 2008, 22(4):49-52.
  6. 张静. 基于K-means聚类算法的客户细分研究[D]. 合肥工业大学, 2013.
  7. 郑华. 聚类算法在客户细分中的应用研究[J]. 制造业自动化, 2010, 32(8):18-21.
  8. MacKay, David. Chapter 20. An Example Inference Task: Clustering. Information Theory, Inference and Learning Algorithms. Cambridge University Press.2003: 284–292. ISBN 0-521-64298-1. MR 2012999
  9. Since the square root is a monotone function, this also is the minimum Euclidean distance assignment.
  10. E.W. Forgy. Cluster analysis of multivariate data: efficiency versus interpretability of classifications. Biometrics. 1965, 21: 768–769.
  11. Liu C, Zeng L, Zhang J, et al. An optimized K-means clustering algorithm for CMP systems based on data set partition[J]. Journal of Computational Information Systems, 2015, 11(13):4727-4738.
  12. Raed T. Aldahdooh, Wesam Ashour. DIMK-means "Distance-based Initialization Method for K-means Clustering Algorithm"[J]. International Journal of Intelligent Systems & Applications, 2013, 5(2074-904X):41-51.
  13. Bahmani B, Moseley B, Vattani A, et al. Scalable K-means++[J]. Proceedings of the Vldb Endowment, 2012, 5(7):622-633.
  14. Jȩdrzejowicz J, Jȩdrzejowicz P, Wierzbowska I. Apache Spark Implementation of the Distance-Based Kernel-Based Fuzzy C-Means Clustering Classifier[J]. 2016.