补一点去年的暑期项目,熟悉基于hadoop的数据挖掘项目
1.平台
hadoop2.7、eclipse、mongodb、tomcat
2.数据集
航空客运信息数据集链接:
http://www.tipdm.org/bdrace/jingsa/20130301/611.html
简单介绍一下数据集:包括了6万多名客户,每个客户大约有60多类的信息,包括姓名,性别,飞行里程等
3.模型
3.1 RFM
参考张良均、陈俊德、刘名军.数据挖掘实用案例分析[M].北京:机械工业出,2013.这本书。介绍一下书中说的模型:
RFM模型:
R(Recency)表示客户最近一次购买的时间有多远,
F(Frequency)表示客户在最近一段时间内购买的次数,
M(Monetary)表示客户在最近一段时间内购买的金额。
一般原始数据为3个字段:客户ID、购买时间(日期格式)、购买金额,用数据挖掘软件处理,加权(考虑权重)得到RFM得分,进而可以进行客户细分,实现客户等级分类。REM模型在衡量客户价值上有很多优势,在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。RFM模型是衡量客户价值和客户创利能力的重要工具和手段。该模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱三项指标来描述该客户的价值状况,模型简单可行。但是要更全面的评估客户的价值,应该需要结合他的个人信息如年龄、收入、职业等,所以在一定程度上RFM模型也存在局限性。
3.2 LRFMC模型
在RFM模型的基础上新增加了两个维度,分别L(Length)表示成为会员的时长,C(coefficient)表示所乘航班的折扣系数。系统用的是该模型。
4.算法
用的K-means算法。作用就是聚类。详细的介绍网上自己看,这里简单说一下。
输入:数据集、K值(要分K类)、K个数据作为原始的中心点
输出:K个类、每个类的中心点
5.实验
5.1 数据清洗
初步清洗:去掉一些缺省的值和错误的值,可以在excel中直接处理,数据量大要java处理。
再次清洗:根据LRFMC模型,我们只是需要入会时长(Length)、最近消费(Recency)、消费频率(Frequency)、消费金额(Monetary)和折扣系数(Coefficient)这5个维度的数据。按照公式算好,其他数据全部就删掉不要了。处理之后的数据只有6个维度:ID、L、R、F、M、C
下面给出了计算的公式:
1.Length=LOAD_TIME-FFP_DATE,该公式为:会员入会时间距离观测窗口结束的时间=观测窗口结束时间-入会时间。
2.Recency =DAYS_FROM-TO_END,该公式为:客户最近一次乘坐距离观测窗口结束的时间=最后一次乘机时间至观测窗口末端时间。
3.Frequency =FLIGHT_COUNT,该公式为:客户在观测时间内乘坐该公司的次数=飞行次数。
4.Monetary =SEG_KM_SUM,该公式为:客户在观测时间内在公司累计的飞行里程=广场窗口总飞行里程数。
5.Coefficient =AVG_DISCOUNT,该公式为:客户在观测时间内乘坐舱位所对应的折扣系数的平均值=平均折扣率。
5.2 数据的聚类
关于K值的选取,十分简单粗暴的方式:
本文衡量客户价值的维度是五个,分别是入会时长(Length)、最近消费(Recency)、消费频率(Frequency)、消费金额(Monetary)和折扣系数(Coefficient)。将这五个维度与五个平均维度相比,那么对于每一个维度就存在两种情况。即大于等于平均维度值或者小于等于平均维度值这两种情况,对于整个数据来说就存在2*2*2*2*2=32中可能性。故指定K=32。对于初始中心点的选择本文采用的是随机选择。处理结束后将产生32个集群。
hadoop:github上有别人直接写好的K-Means的项目,直接拿来用。
需要改变的是,数据额输入维度、K值。这里的数据量是算小的了,但是为了数据hadoop的开发,还是选择了基于Hadoop的处理。
上传数据到hdfs、eclipse-hadoop联调、将处理好的数据下载下来。参考wordcount的流程。
5.3 客户分群
6万多条数据就变成了32类。如何判断哪些客户是重要的呢?
定义:
根据之前定义的LRFMC模型,定义五项指标均大于平均的LRFMC值为一等客户即重要客户,其中四项指标大于平均的LRFMC值为二等客户即发展客户,其中三项指标大于平均的LRFMC值为三等客户即潜在客户,其余为四等客户即低价值客户。
故现在对于每一个客户将包含7类数据,即客户编码(Num)、入会时长(Length)、最近消费(Recency)、消费频率(Frequency)、消费金额(Monetary)、折扣系数(Coefficient)和客户等级。
6. 系统设计
非常非常的简易版本:
将处理好的数据存入Mongodb数据库,再利用Jquery EasyUI插件编写界面,发布在tomcat上,最终实现在系统界面上可以查看航空客户的价值与客户等级。
一等客户即重要客户,二等客户即发展客户,三等客户即潜在客户,其余为四等客户即易流失客户。
7. 总结
只是实现简单的客户分群,在K值的选择上过于简单,在定义的四类等级客户过于直接。
K-means算法是对初始值敏感的,随机选择初始值(原始中心点)会导致每次的聚类结果都不一样。有改进的K-Means算法来避免这一点的。K-means算法在聚类的过程中是不踢出噪声点的。数据的噪声数据太多会导致聚类的结果出现大的偏差。