1. 背景和目标

1.1 背景

  1. 航空公司竞争压力大,企业营销焦点由产品中心转为客户中心
  2. 针对不同类型的用户,进行精准营销,实现利润最大化
  3. 解决问题的关键是建立合理的客户价值评估模型,对客户进行分类,有针对性地进行营销。

1.2 目标

  1. 利用已有的航空数据,进行客户分类
  2. 就分类结果对不同类别的客户进行特征分析,比较不同类客户的客户价值
  3. 对不同价值的客户类别提供个性化服务,制定相应的营销策略

2. 技术和分析方法

2.1 RFM模型

RFM模型属于客户关系管理(CRM)的一种。该模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况

客户细分模型是通过三个指标:

  • 最近消费时间间隔(Recency):上一次购买的时候。理论上,上一次消费时间越近的顾客应该是比较好的顾客,对提供即时的商品或是服务也最有可能会有反应。

  • 消费频率(Frequency):顾客在限定的期间内所购买的次数。

  • 消费金额(Monetary)

    根据三个指标,在三个维度上进行分类,得到8组用户

2.2 K-means聚类法

k-means算法知识
sk-learn官网的K-means实现

3. 数据挖掘实现

3.1 引入相关库

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
import sklearn.datasets as ds
import matplotlib.colors
from sklearn.cluster import KMeans
%matplotlib inline#设置属性,防止中文乱码
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

3.2 读取数据

pd.read_csv() #导入数据
data.head() #查看前几行
data.shape #查看数据分布(行,列)

3.3 数据探索分析

data.info() #查看每个column特征的非空数据量、数据类型
data.describe().T # 查看每个数值类特征的总数量(包括空值)以及五值分布:平均值、最大值、最小值、标准差、四分位数
data.isnull().sum().sort_values(ascending = False) #查看缺失值情况

3.4 数据预处理

  • 数据清洗:处理异常值和缺失值
  • 特征提取:仅保留相关特征,删除不相关、弱相关或冗余特征
  • 标准化处理
#数据清洗部分
# 丢弃票价为空的记录
data = data[data['SUM_YR_1'].notnull()&data['SUM_YR_2'].notnull()]
#保留票价非零或平均折扣率为零的值
temp1 = data['SUM_YR_1'] !=0
temp2 = data['SUM_YR_2'] != 0
temp3 = data['avg_discount'] == 0
data = data[temp1 |temp2|temp3]  # 上述三个是布尔判别式
#导出清洗后的数据
result = 'C:\\Users\\Zoe Wang\\Desktop\\新建文件夹\\data_cleaned.csv' #创建数据保存位置
data.to_csv(result,sep = ',',encoding = 'utf-8')
# 特征提取部分
'''
R是最近消费时间间隔(Recency),可以用LAST_TO_END(最后一次乘机时间至观察窗口末端时长);
F是消费频率(Frequency),FLIGHT_COUNT(观测窗口内的飞行次数)
M是消费金额(Monetary),航空票价收到距离和舱位等级多种因素的影响, 舱位因素=舱位所对应的折扣系数AVG_DISCOUNT的平均值,距离因素=一定时间内累积的飞行里程SEG_KM_SUM航空公司的会员系统,用户的入会时间长短能在一定程度上影响客户价值,所以增加指标入会时间长度,即客户关系长度:会员入会时间距观测窗口结束的月数=观测窗口的结束时间-入会时间(单位:月),即LOAD_TIME-FFP_DATE
最终确定,需要五个指标:
L=LOAD_TIME-FFP_DATE(会员入会时间距观测窗口结束的月数=观测窗口的结束时间-入会时间(单位:月))
R=LAST_TO_END(客户最近一次乘坐公司距观测窗口结束的月数=最后一次。。。)
F=FLIGHT_COUNT(观测窗口内的飞行次数)
M=SEG_KM_SUM(观测窗口的总飞行里程)
C=AVG_DISCOUNT(平均折扣率)
'''
#数据筛选
df = data[['LOAD_TIME','FFP_DATE','LAST_TO_END','FLIGHT_COUNT','SEG_KM_SUM','avg_discount']]
#构造LRFMC特征
def STRCTURE_LRFMC(data_set):df_LOAD_TIME = pd.to_datetime(data_set['LOAD_TIME']) #pd.to_datetime()将给定的数据按指定格式转换成日期格式df_FFP_DATE = pd.to_datetime(data_set['FFP_DATE'])LOAD_TIME_FFP_DATE = df_LOAD_TIME-df_FFP_DATEdf2 = data_set.copy()df2['L'] = LOAD_TIME_FFP_DATE.map(lambda x:x/np.timedelta64(30*24*60,'m')) df2['R'] = data_set['LAST_TO_END']df2['F'] = data_set['FLIGHT_COUNT']df2['M'] = data_set['SEG_KM_SUM']df2['C'] = data_set['avg_discount']df3 = df2[['L','R','F','M','C']]return df3
df3 = STRCTURE_LRFMC(data)
# 标准化处理,使用的是标准差标准化
def std_normal(data):data2 = (data - data.mean())/data.std()data2.columns = ['Z'+ i for i in data.columns]return data2
df4 = std_normal(df3)

3.5 K-Means聚类模型构建

  • 采用K-Means算法对客户数据进行客户分群,聚成五类
  • 在讨论聚几类比较合适时,除了业务需要,也可根据聚类的性能,聚类类别数和组内误方差的变化,出现“肘点”对应的类别数可以认为最优。
# 按照5类进行聚类分析
k = 5
# 调用k-means算法 model = KMeans(n_clusters=k, init= 'random',random_state=28,n_jobs=4)# n_clusters是聚类数,即k;init是初始化方法,可以是'k-means ++','random'或者自定义,default=’k-means++’
model.fit(df4) # 用于执行训练过程
# r为每个类别的数目,r3为每个样本聚类的类别,
r1 = pd.Series(model.labels_).value_counts() # model.labels_ 每个样本对应的簇类别标签,统计各类别的数目
r2 = pd.DataFrame(model.cluster_centers_) #  model.cluster_centers_ 聚类中心,找出聚类中心
r = pd.concat([r2,r1],axis = 1) # 得到聚类中心对应的类别下的数目
r.columns = list(df4.columns)+[u'聚类类别'] #重命名表头
r.to_excel('C:\\Users\\Zoe Wang\\Desktop\\新建文件夹\\KMeansNum.xls')
r3 = pd.concat([df4,pd.Series(model.labels_,index = df4.index)],axis =1)
r3.columns =list(df4.columns) +[u'聚类类别']
r3.to_excel('C:\\Users\\Zoe Wang\\Desktop\\新建文件夹\\KMean.xls')
# 进行聚类评估
distortions = []
for i in range(1,10):km = KMeans(n_clusters= i, init = 'random',random_state= 28 )km.fit(df4)distortions.append(km.inertia_)
plt.plot(range(1,10),distortions,marker = 'o')
plt.xlabel("簇数量")
plt.ylabel("簇内误方差(SSE)")
plt.show()

3.6 聚类结果展示

max = r2.values.max()
min = r2.values.min()
# 绘图
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, polar=True)
# 显示在雷达图中标签
labels = ["客户关系长度","消费的时间间隔","总消费次数","总消费金额","平均折扣率"]
# 绘制的变量数
num_vars = len(labels)
# 设置雷达图的角度,用于平分切开一个圆面
angles=np.linspace(0, 2*np.pi, num_vars, endpoint=False).tolist()
# 将雷达图一圈 封闭起来,将起始值附加到结尾。
# !!!注意,标签也要进行封闭,我在练习的时候在这里卡住了。
angles += angles[:1]
labels += labels[:1]
#构造函数,绘制每个圈
def add_to_radar(feature):values = r2.loc[feature].tolist()values += values[:1]# 绘制折线图ax.plot(angles, values, 'o-', linewidth = 2, label = "第%d类客群:%d人"%(feature+1,r.loc[feature,"聚类类别"]))# 填充颜色ax.fill(angles, values, alpha=0.25)
for i in range(5):add_to_radar(i)
# 固定开始轴.
ax.set_theta_offset(np.pi / 2)
ax.set_theta_direction(-1)
# 添加每个特征的标签,np.degrees()将弧度转化为角度
ax.set_thetagrids(np.degrees(angles), labels, fontsize=15)
#调整标签位置
for label, angle in zip(ax.get_xticklabels(), angles):if angle in (0, np.pi):label.set_horizontalalignment('center')elif 0 < angle < np.pi:label.set_horizontalalignment('left')else:label.set_horizontalalignment('right')
# 设置雷达图的范围
ax.set_ylim(min-0.1, max+0.1)
# 添加标题
plt.title('客户群特征分析图', fontsize=20)
# 添加网格线
ax.grid(True)
# 设置图例
plt.legend(loc='upper right', bbox_to_anchor=(1.3,1.0),ncol=1,fancybox=True,shadow=True)
# 显示图形
plt.show()
plt.savefig("客户群特征分析图.jpg",dpi=200)

3.7 模型结果分析

3.7.1 客户价值分析
针对“客户群特征分析图”所示的聚类结果,结合业务进行特征分析。我们重点关注的是L(客户关系长度)、F(消费频率)、M(飞行里程)三个指标:

  • 客户群1:在C属性上最大,可定义为重要挽留客户;
  • 客户群2:在R属性上最大,在F、M属性上最小,可定义为低价值客户;
  • 客户群3:在F、M属性上最大,在R属性上最小,可定义为重要保持客户;
  • 客户群4:在L、C属性上最小,可定义为一般客户;
  • 客户群5:在L属性上最大,可定义为重要发展客户;
    3.7.2 客户群价值排名
  • 重要保持客户:C(平均折扣率较高、仓位等级较高)、F(乘坐次数)、M(里程)较高,R(最近乘坐航班)低。应将资源优先投放到这类客户身上,进行差异化管理,提高客户的忠诚度和满意度。
  • 重要发展客户:C较高,R、F、M较低。这类客户入会时长(L)短、当前价值低、发展潜力大,应促使客户增加在本公司和合作伙伴处的消费。
  • 重要挽留客户:C、F 或 M 较高,R较高 或 L变小,客户价值变化的不确定性高。应掌握客户最新信息、维持与客户的互动。
  • 一般和低价值客户:C、F、M、L低、R较高。这类客户可能在打折促销时才会选择消费。

3.8 应用

差异化管理、精准营销,提高客户忠诚度、满意度,延长客户高水平消费。

  • 会员升级与保级(积分削减等):在会员升级或保级评价的时间点前,对接近但尚未达到要求的较高消费客户进行提醒或促销活动,提高客户满意度。
  • 首次兑换:对接近但尚未达到标准的会员进行提醒或促销活动,提高客户满意度。
  • 交叉销售:通过与非航空类企业的合作,使客户在其他消费过程中获得本公司积分,增强与公司联系,提高忠诚度

4. 小知识点补充

1.pd.to_datetime()
to_datetime()方法将给定的数据按照指定格式转换成指定的日期格式。
Timedelta在pandas中是一个*表示两个datetime值之间的差(如日,秒和微妙)*的类型,2个Datetime数据运算相减得出的结果就是一个Timedelta数据类型
例如
运行pd.to_datetime('2019-9-4') - pd.to_datetime('2018-1-1'),可得到结果Timedelta('611 days 00:00:00')
2.data.map()
语法:map(function, iterable, ...)
data.map()会以data的每个参数调用function函数,返回包含每次function函数返回值的新列表。

数据挖掘——航空公司客户分类与价值评估案例相关推荐

  1. 【数据挖掘实战】——航空公司客户价值分析(K-Means聚类案例)

    目录 一.背景和挖掘目标 1.RFM模型缺点分析 2.原始数据情况 3.挖掘目标 二.分析方法与过程 1.初步分析:提出适用航空公司的LRFMC模型 2.总体流程 第一步:数据抽取 第二步:探索性分析 ...

  2. 数据挖掘——航空公司客户价值分析(分析+建模)

    前言 本次建模项目是来自于<python数据分析与挖掘实战>的案例,是介绍航空公司客户价值的分析,书中给出了关于62988个客户的基本信息和在观测窗口内的消费积分等相关信息,其中包含了会员 ...

  3. 数据挖掘——航空公司客户价值分析(代码完整)

    最近在阅读张良均.王路等人出版的书<python数据分析与挖掘实战>,其中有个案例是介绍航空公司客户价值的分析,其中用到的聚类方法是K-Means方法,我一直把学习的重心放在监督学习上,今 ...

  4. 数据挖掘 | 航空公司客户流失预测

    之前的一篇博客介绍了关于航空公司客户价值分析,今天的这篇博客将对航空公司的客户的流失进行预测.采用的是相同的数据集. 1. 背景 客户流失对企业利润的增长造成的负面影响很大.客户与航空公司之间的关系越 ...

  5. 企业价值评估案例-苹果树的投资分析[转]

    ●苹果树与经验 如果说市场价格是投资人或经理人在决定企业价值或所有权权益时最后该看的东西,那么首先要看的应该是它的基本面经济特征.有许多方法可以用来评估这些基本面,但不少人相当懒惰,只以市场价格做为价 ...

  6. 航空公司客户价值分析(附完整代码)

    一.什么是客户价值分析:   客户价值分析是以客户为中心,从客户需求出发,搞清楚客户需要什么,他们有怎样的一个特征,需要什么样的产品,然后设计相应的产品,通过对客户分群从而满足客户的需求.进行客户价值 ...

  7. 星环科技数据治理与数据价值评估实践分享

    数据价值评估背景 自2015年8月国务院<促进大数据发展行动纲要>提出"数据已成为国家基础性战略资源"以来,我国出台了诸多政策和法案,推进数据的发展和数据要素的资产化. ...

  8. 基于python分析航空公司客户价值《数据挖掘》 课程实验报告

    一.实验目的 1)了解K-Means 聚类算法在客户价值分析实例中的应用. 2)利用pandas快速实现数据z-score(标准差)标准化以及用scikit-learn 的聚类库实现K-Means聚类 ...

  9. 数据挖掘——RFM客户价值模型及航空公司客户分析实例

    引言 背景 信息时代的来临使得企业营销焦点从产品转向了客户,客户的管理关系成为企业的核心问题.客户的关系管理问题是客户分群.通过客户分群,进而区分无价值客户和高价值客户.高价值客户代表他们的消费会给企 ...

最新文章

  1. linux系统安装金蝶_linux 操作系统安装配置vnc
  2. Wisconsin Squares [USACO]
  3. sharepoint 2007功能增强解决方案,资料收集
  4. iphone数据迁移到新iphone_iphone数据丢失?想要恢复iphone丢失的数据?
  5. linux重启切换内核,centos7切换启动内核与切换启动模式的讲解
  6. xposed hook 静态函数_Xposed 实现原理分析
  7. 如何使用MySQL Workbench建立数据库
  8. python之单例模式
  9. 实型变量(浮点型变量)、字符型数据、字符串常量(变量)、字符常量(变量)
  10. opencv学习(三十六)图像直方图均衡化equalizeHist
  11. GBase 8c 全文检索-表检索
  12. 浏览器无法渲染php,解决lighttpd运行后浏览器无法渲染html
  13. Shell脚本-批量生成100个账号
  14. Linux bash命令入门
  15. GDB调试命令以及GDB调试段错误
  16. 浅浅瞅瞅RSA-PSS 算法
  17. ps怎么抠图?教你怎么用钢笔工具抠图
  18. 性格色彩测试android程序开发之六--activity界面
  19. android studio开发工具介绍,Android应用开发之Android开发工具介绍、Android Studio配置...
  20. STLINK,ST-LINK Utility无法连接单片机

热门文章

  1. 数据挖掘技术的算法与应用读书报告
  2. Unix/Linux编程:多协议服务器(TCP/UDP)-----DAYTIME
  3. python pandas读取excel时动态确定标题行所在行数
  4. CALCULATE函数的运算顺序-第一弹
  5. 蚂蚁金服-支付宝内推面试总结(已拿到offer)
  6. 解析 数据库 苹果自带地图
  7. Java_笛卡尔积计算
  8. QLU ACM2018新生赛
  9. 视频号引流有哪些方法?学会这几种方法快速吸粉
  10. 重要短信通知解决方案(短信通知+语音播报自动双呼)