7.1 背景与挖掘目标
客户分类,经过客户分类,区分无价值客户、高价值客户,将优先营销资源集中于高价值客户,实现企业利润最大化目标。
如今经过创建合理的客户价值评估模型,对客户进行分群,分析比较不一样客户群的客户价值,并制定相应的营销策略,对不一样的客户群提供个性化的客户服务是必须和有效的。(市场细分)
根据数据实现如下目标:
1)借助航空公司客户数据,对客户进行分类
2)对不一样的客户类别进行特征分析,比较不一样类客户的客户价值
3)对不一样价值的客户类别提供个性化服务,制定相应的策略营销
7.2 分析方法与过程
本案例的目标是客户价值识别,即经过航空公司客户数据识别不一样价值的客户。
识别客户价值应用最普遍的模型是经过3个指标:
1)最近消费时间间隔Recency
2)消费频率Frequency
3)消费金额Monetary
来进行客户细分,识别高价值的客户,简称RFM模型。
在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。因为航空价受到运输距离、航位等级等多种因素影响,一样消费金额的不一样旅客对航空公司的价值是不一样的。因此消费金额这个指标并不适用于航空公司的客户价值分析。咱们选择客户在必定时间内累积的飞行里程M和客户在必定时间内乘坐舱位所对应的折扣系数的平均值C两个指标代替消费金额。
本案例将客户关系长度L、消费时间间隔R、消费频率F、飞行里程M、折扣系数的平均值C五个指标做为航空公司识别客户价值,记为LRFMC模型。
L:会员入会时间距观测窗口结束的月数;
R:客户最近一次乘坐公司飞机距观测窗口结束的月数
F:客户在观测窗口内乘坐公司飞机的次数
M:客户在观测窗口内累计的飞行里程
C:客户在观测窗口内乘坐舱位所对应的折扣系数的平均值
针对航空公司LRFMC模型,若是采用传统的RFM模型分析的属性分箱法,也可以识别出最有价值的客户,但细分的客户群太多,提升了针对性营销的成本。所以本案例采用聚类的方法识别客户价值。
航空客运信息挖掘的步骤:
1)从航空公司的数据源中选择性抽取数据与新增数据抽取分别造成历史数据和增量数据
2)对步骤1中的两个数据集进行数据探索分析与预处理
3)利用步骤2 中的已经完成数据预处理的建模数据,基于旅客价值LRFMC模型进行客户分群,对各个客户群进行特征分析,识别出有价值的客户。
4)针对模型结果获得不一样价值的客户,采用不一样的营销手段,提供定制化的服务。
7.2.1 数据抽取
以2014-03-31为结束时间,选取宽度为2年的时间段做为分析观测窗口,抽取观测窗口内有伺机记录的全部客户的详细数据造成历史数据。
对于后续新增的客户详细信息,之后续新增数据中最新的时间点做为结束时间,采用上述一样的方法进行抽取,造成增量数据。
7.2.2 数据探索分析
本案例的探索分析是对数据进行缺失值分析与异常值分析,分析出数据的规律以及异常值。
经过对原始数据观察,发现票价存在空值,票价最小值为0,折扣率最小值为0,总飞行千米数大于0的记录。票价为空值的数据多是客户不存在伺机记录形成的,其余数据多是客户乘坐0折机票或者积分兑换产生的。
1 import pandas as pd 2 data=pd.read_csv(r'E:\siren\Python dataAnalyst\chapter7\demo\data\air_data.csv',encoding='utf-8') 3 #对数据进行基本的描述 4 #percentiles参数是指定计算多少的分位数表,T是转置 5 explore=data.describe(percentiles=[],include='all').T 6 7 #describe函数自动计算非空数值数,手动计算空值数 8 explore['null']=len(data)-explore['count'] 9 #这里只选取部分探索结果 10 explore=explore[['null','max','min']] 11 #重命名表头 12 explore.columns=[u'空值',u'最大值',u'最小值'] 13 #将explore文件导出 14 explore.to_excel(r'E:\siren\Python dataAnalyst\chapter7\demo\data\explore.xls')
7.2.3 数据预处理
本案例主要采用数据清洗、属性规约与数据变换的预处理方法。
一、数据清洗
经过数据分析探索发现,存在缺失值,票价最小值为0,折扣率最小值为0,总飞行千米数大于0的记录。
由于原始数据量较大,这类数据所占比例较小,对问题影响不大,所以进行丢弃处理。
具体作法:
1)丢弃票价为空的记录
2)丢弃票价为0,平均折扣率不为0、总飞行千米数大于0的记录。
1 #票价非空值保留 2 data=data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()] 3 4 #只保留非空票价,或者平均值扣率与总飞行千米数同时为0的记录 5 index1=data['SUM_YR_1']!=0 6 index2=data['SUM_YR_2']!=0 7 index3=(data['SEG_KM_SUM']==0) & (data['avg_discount']==0) 8 9 data=data[index1|index2|index3]
2.属性规约
原始数据中属性太多,根据航空公司客户价值LRFMC模型,选择与LRFMC指标相关的6个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、avg_discount、SEG_KM_SUM、LAST_TO_END。
删除与其不相关、弱相关或冗余的属性,例如,会员卡号、性别、工做城市、工做地所在省份、工做所在国家和年龄等属性。
3.数据变换
数据变换是将数据转换成“适当”的格式,以适应挖掘任务及算法的须要。本案例中主要采用的数据变换方式为属性构造和数据标准化。
由于原始数据中并无直接给出LRFMC五个指标,须要经过原始数据提取这五个指标,具体计算以下:
1)L=LOAD_TIME-FFP_DATE
会员入会时间距观测窗口结束的月数=观测窗口的结束时间-入会时间【单位:月】
2)R=LAST_TO_END
客户最近一次乘坐公司飞机距观测窗口结束的月数=最后一次伺机时间至观察窗口末端时长【单位:月】
3)F=FLIGHT_COUNT
客户在观测窗口内乘坐公司飞机的次数=观测窗口的总飞行次数【单位:月】
4)M=SEG_KM_SUM
客户在观测时间内在公司累计的飞行里程=观测窗口的总飞行千米数【单位:千米】
5)C=AVG_DISCOUNT
客户在观测时间内乘坐舱位多对应的折扣系数的平均值=平均折扣率【单位:无】
方法1、具体提取办法:
1 import datetime 2 #将数据转换为时间格式 3 data['LOAD_TIME']=pd.to_datetime(data['LOAD_TIME']) 4 data['FFP_DATE']=pd.to_datetime(data['FFP_DATE']) 5 #求时间差 6 data['L']=data['LOAD_TIME']-data['FFP_DATE'] 7 8 # 将间隔时间转成月份为单位 9 data['L']=data['L']/np.timedelta64(1, 'M') 10 11 data['R']=data['LAST_TO_END'] 12 data['F']=data['FLIGHT_COUNT'] 13 data['M']=data['SEG_KM_SUM'] 14 data['C']=data['avg_discount'] 15 16 data=data[['L','R','F','M','C']] 17 data_T=data.describe() 18 data_T.loc[['min','max']]
方法2、也能够直接导入书中自带的数据集:html
data=pd.read_excel(r'E:\siren\Python dataAnalyst\chapter7\demo\data\zscoredata.xls')
对数据进行标准差标准化处理:算法
1 data=(data-data.mean(axis=0))/(data.std(axis=0)) 2 data.columns=['Z'+i for i in data.columns]
标准差标准化:也叫零-均值规范化
通过处理的数据的均值为0,标准差为1.


(注:在本书的第4章中的4.3.2 规范化中有介绍)
7.2.4 模型构建
客户价值分析模型构建主要由两部分构成,第一部分根据航空公司客户5个指标的数据,对客户进行聚类分群。第二部分结合业务对每一个客户群进行特征分析,分析客户价值,并对每一个客户群进行排名。
一、客户聚类
采用K-Means聚类算法对客户数据进行客户分群,聚成5类(须要结合业务的理解与分析来肯定客户的类别数量)
1 from sklearn.cluster import KMeans 2 k=5 3 kmodel=KMeans(n_clusters=k,n_jobs=4) 4 kmodel.fit(data) 5 6 labels = kmodel.labels_#查看各样本类别 7 demo = pd.DataFrame(labels,columns=['numbers']) 8 demo1= pd.DataFrame(kmodel.cluster_centers_, columns=data.columns) # 保存聚类中心 9 demo2= demo['numbers'].value_counts() # 肯定各个类的数目 10 11 demo4 = pd.concat([demo2,demo1],axis=1) 12 demo4.index.name='labels' 13 14 kmodel.cluster_centers_ 15 kmodel.labels_
2.客户价值分析函数
针对聚类结果进行特征分析,其中
优点 | 劣势 | 数目 | |
客户群1 | C | R、F、M | 最少 5 |
客户群2 | C、L | 最多1 | |
客户群3 | R、M、F | 3 | |
客户群4 | L、F、M | 2 | |
客户群5 | M、F、R | 4 |
分析:
客户群1的数量最少,所乘航班折扣率较高(通常所乘航班的等级较高),属于重要发展客户。
客户群2的数量较多,所乘航班折扣率较低,加入会员时间短,这类客户通常在打折时才会乘坐航班,属于通常客户。
客户群3,乘坐次数不多,累计总飞行千米数较少,好久没有乘坐飞机,属于低价值客户。
客户群4的数量较多,加入会员时间长,可是最近乘坐频率变小,属于重要挽留客户。
客户群5,累计总飞行千米数较大,飞行次数较多,最近乘坐过飞机,属于重要保持客户。
客户价值排名:
客户群 | 排名 | 排名含义 |
客户群5 | 1 | 重要保持客户 |
客户群1 | 2 | 重要发展客户 |
客户群4 | 3 | 重要挽留客户 |
客户群2 | 4 | 通常客户 |
客户群3 | 5 | 低价值客户 |
其中重要发展客户、重要保持客户、重要挽留客户分别对应客户生命周期管理的发展期、稳按期、衰退期。
3. 模型应用
根据对每一个客户群进行特征分析,采起针对性营销:
1)会员升级与保级--客户群4(数量较大)
2)首次兑换--客户群2
3)交叉销售--客户群5