第7章 航空公司客户价值分析

  • 1 数据挖掘建模的目的
  • 借助航空公司客户数据,对客户进行分类。
  • 对不同的客户类别进行特征分析,比较不同类客户的客户价值。
  • 对不同价值的客户类别提供个性化服务,制定相应的营销策略。

  • 2 分析方法与过程

  • 2.1 分析方法
    识别客户价值应用最广泛的模型是通过3个指标(最近消费时间间隔(Recency)、消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别出高价值客户,简称RFM模型。

累计的飞行里程M
折扣系数的平均值C
以上两者替代消费金额
根据特点增加,入会时间的客户关系长度L

以上合并成为LRFMC模型。

传统的RFM模型分析使用的是属性分箱方法,而此列中采用聚类的方法进行识别。

  • 2.2 挖掘过程
  • 从航空公司的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据。
  • 对步骤1中形成的两个数据集进行数据探索分析与预处理。
  • 利用步骤2中形成的预处理数据进行建模,进行特征分析,识别有价值客户。
  • 根据不同价值客户,采用不同的营销手段,提供定制化的服务。

  • 3 数据抽取和数据探索

  • 去除空值,票价最小值为0,折扣率最小为0,总飞行公里大于0的记录。
# SUM_YR_1的非空值 + SUM_YR_2中的非空值
data = data[data['SUM_YR_1'].notnull()&data['SUM_YR_2'].notnull()] 

# SUM_YR_1 或 SUM_YR_2中不为0的 (即最近两年中有一年消费记录)且总里程不为0且折扣率不为0的记录。
data = data[((data['SUM_YR_1'] != 0) | (data['SUM_YR_2'] != 0)) & (data['SEG_KM_SUM'] != 0) & (data['avg_discount'] != 0)]

# 取出需要'LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount'
data_clean = data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]

现在数据变成这样了。
这里写图片描述

根据一下要求进行属性规约:
这里写图片描述

# 转换为月份的3种方式,第一种获得的月份为四舍五入后的整数,第二种和第三种结果相同,但结果都与书中不同
# data_clean['L'] = (pd.to_datetime(data_clean['LOAD_TIME']) - pd.to_datetime(data_clean['FFP_DATE'])).astype('timedelta64[M]')
# data_clean['L'] = round((pd.to_datetime(data_clean['LOAD_TIME']) - pd.to_datetime(data_clean['FFP_DATE']))/ np.timedelta64(30*24*60,'m'),2)
data_clean['L'] = round((pd.to_datetime(data_clean['LOAD_TIME']) - pd.to_datetime(data_clean['FFP_DATE']))/ timedelta(days=30),2)

data_clean['R'] = round(data_clean['LAST_TO_END']/30,2)
data_clean['F'] = data_clean['FLIGHT_COUNT'] 
data_clean['M'] = data_clean['SEG_KM_SUM']
data_clean['C'] = round(data_clean['avg_discount'],2)

data_LRFMC = data_clean.iloc[:,6:]
data_LRFMC.describe().ix[['min','max']]

data_LRFMC的统计描述(最大、最小值)内容如下:

这里写图片描述

  • 数据标准化
    我想也有和我一样的菜鸟也看不明白这一步究竟是做什么,所以先要学习一下什么叫做数据标准化。
    数据标准化的几种方法
    本例中使用的为z-score标准化

这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。
将A的原始值x使用z-score标准化到x’。
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
新数据=(原数据-均值)/标准差
标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

使用的代码如下:

# 计算z-score标准化
data_ZLRFMC = (data_LRFMC - data_LRFMC.mean(axis = 0))/ (data_LRFMC.std(axis = 0))
# 更换列名
data_ZLRFMC.columns = ['Z'+ i for i in data_ZLRFMC.columns]
  • 3 建模挖掘
    Kmeans建模
from sklearn.cluster import KMeans

k = 5 # 需要进行的聚类的类别数

kmodel = KMeans(n_clusters= k , n_jobs = 2)     # n_clusters 类别数, n_jobs并行数

kmodel.fit(data_ZLRFMC)

result_kmeans = pd.DataFrame(kmodel.cluster_centers_,columns=data_ZLRFMC.columns)

得到以下的结果:
这里写图片描述

显然这和书上的结果还有明显的差距,再进行改造:

# result_kmeans['聚类个数'] = pd.Series(kmodel.labels_).value_counts() # 另一种求聚类个数的方法
result_kmeans['聚类个数'] = pd.DataFrame(kmodel.labels_).groupby(0).size()
result_kmeans.index = ['客户群'+ str(i+1) for i in result_kmeans.index]

result_kmeans.index.name = '聚类类别'
result_kmeans.columns.name = '聚类中心'

这里写图片描述

这下基本就满足要求了。

那么我们就根据这表做个图吧!(唉,这张破图我其实做了好几个小时,而且如果你仔细看你就会发现,你现在看到的这张图的客群顺序和上面的数据是不一致的,因为这是我重新生成出来的。)matplotlib的东西实在太多了,有哪位大神可以给个便捷的学习路径啊。
这里写图片描述

  • 4 结果分析
    这部分书上说的已经很多了,看书应该足够了。
    但是7-4这张图是如何做出来的,还希望有大神能够赐教。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值