一、实现目标
(1)借助航空公司客户数据,对客户进行分类
(2)对不同的客户进行特征分析,比较不同类客户的客户价值
(3)对不同价值的客户类别提供个性化服务,指定相应的营销策略
二、分析方法
LRFMC模型指标含义:
(1) L:会员入会时间距观测窗口结束的月数。
(2) R:客户最近一次乘坐公司飞机距离观测窗口结束的月数。
(3) F:客户在观测窗口内乘坐公司飞机的次数。
(4) M:客户在观测窗口内累计的飞行里程碑。
(5) C:客户在观测窗口内乘坐仓位所对应的折扣系数的平均值。
方法:本案例采用聚类的方法,通过对航空公司客户价值的LRFMC模型的五个指标进行K-Means聚类,识别客户价值。
总体流程:数据抽取->数据预处理(数据清洗(缺失值填补舍弃等),属性规约(提取需要特征数据),数据变换(转换适当格式))->建模->结果
分析过程
数据抽取
# -*- coding:utf-8 -*-
#对数据进行基本的探索,返回缺失值个数,最大值,最小值
import pandas as pd
#数据文件路径初始化
datafile = 'air_data.csv' #第一行为标签属性
#定义数据探索结果文件名
resultfile = 'data_explore.xls'
#使用pandas模块内置函数对文件内容进行读取
data = pd.read_csv(datafile,encoding = 'utf-8') #设置文件读取编码格式
#获取数据的相应属性内容
explore = data.describe(percentiles=[], include='all').T #对探索结果矩阵进行转置
#计算数据结果中的空值个数,describe()函数只返回有值数据个数
explore['null'] = len(data) - explore['count']
#提取数据探索结果中的null、min、max三列,并且对数据表表头进行重命名
explore = explore[['null','max','min']]
print('explore:',explore)
print('explore.columns:',explore.columns)
explore.columns = [u'空值数',u'最大值',u'最小值']
print('u-explore:',explore)
#将数据探索的最后结果写入文件中
explore.to_excel(resultfile)
数据预处理
内容:数据清洗、属性规约、数据变换
# -*- coding:utf-8 -*-
#清洗丢弃掉不符合规则的数据
import pandas as pd
datafile = 'air_data.csv'
cleanfile = 'data_clean.csv'
#读取文件内容,并设置读取的编码格式
data = pd.read_csv(datafile,encoding = 'utf-8')
#去掉票价为0的记录
data = data[data['SUM_YR_1'].notnull()]
data = data[data['SUM_YR_2'].notnull()]
#只保留票价非零的,或者平均折扣率与总飞行公里数同时为0的记录。
index1 = data['SUM_YR_1'] != 0
index2 = data['SUM_YR_2'] != 0
index3 = (data['SEG_KM_SUM']==0) & (data['avg_discount']==0)
data = data[index1 | index2 | index3]
#将数据整合至data变量中
data = data[index1|index2|index3]
data.to_csv(cleanfile)
# 属性规约:去掉不相管的属性,只留下与LRFMC模型相关的属性
# FFP_DATE 入会时间
# LOAD_TIME 观测窗口结束时间
# FLIGHT_COUNT 飞行频率
# avg_discount 平均折扣
# SEG_KM_SUM 观测窗口总飞行公里数
# LAST_TO_END 最后一次乘机时间至观察窗口末端时长
data = data[['FFP_DATE','LOAD_TIME', 'FLIGHT_COUNT', 'avg_discount', 'SEG_KM_SUM','LAST_TO_END']]
cleanfile = 'D:/my_project/Airline_customer_value/cleanfile.csv'
data.to_csv(cleanfile)
#数据变化的LRFMC数据:
#L = LOAD_TIME - FFP_DATE (观测窗口时间 - 入会时间)
#R = LOAD_TIME - LAST_TO_END (观测窗口时间 - 最后一次乘机时间)
#F = FLIGHT_COUNT
#M = SEG_KM_SUM
#C = avg_discount
from datetime import datetime
import time
def normal_time(date):
return datetime.strptime(date, '%Y/%m/%d')
def interval_time(dd):
#计算时间间隔,以月为单位
return dd.days / 30
# data_LRFMC数据
data_LRFMC = pd.DataFrame()
# data_LRFMC.columns = ['L', 'R', 'F','M', 'C']
data_LRFMC['L'] = (data['LOAD_TIME'].apply(normal_time) -data['FFP_DATE'].apply(normal_time)).apply(interval_time)
data_LRFMC['R'] = data['LAST_TO_END']
data_LRFMC['F'] = data['FLIGHT_COUNT']
data_LRFMC['M'] = data['SEG_KM_SUM']
data_LRFMC['C'] = data['avg_discount']
# 显示数据的描述,最大值和最小值
data_LRFMC_describe = data_LRFMC.describe().T
data_LRFMC_describe = data_LRFMC_describe[['max','min']].T
data_LRFMC.to_csv('D:/my_project/Airline_customer_value/LRFMC.csv') #数据写入文件
#注意到所有的数据值,最大值和最小值间隔较大,需要对数据进行标准化
# 标准化、重命名、写入文件
data_normal = (data_LRFMC-data_LRFMC.mean()) / (data_LRFMC.std())
data_normal.columns = ['Z'+i for i in data_normal.columns]
data_normal.to_csv('D:/my_project/Airline_customer_value/.csv')
模型构建
客户价值分析模型构建主要由两个部分构成:
第一部分根据航空公司客户5个指标的数据,对客户进行聚类分群。
第二部分结合业务对每个客户群进行特征分析,分析其客户价值,并对每个客户群进行排名。
from sklearn.cluster import KMeans
#设置类别个数5
k = 5
#创建聚类模型对象
kmodel = KMeans(n_clusters=k)
kmodel.fit(data_normal)
#查看聚类中心和对应的类别
print(kmodel.cluster_centers_)
print(kmodel.labels_)
#图形展示
import matplotlib.pyplot as plt
clu = kmodel.cluster_centers_
x = [1,2,3,4,5]
colors = ['red','green','yellow','blue','black']
for i in range(5):
plt.plot(x, clu[i],label='cluster'+str(i), color=colors[i], marker='o')
plt.xlabel('L R F M C')
plt.ylabel('values')
plt.show()