文章目录

  • 项目背景
  • 一、数据分类目的
  • 二、数据选定及预处理
    • 1.选定模型及数据
    • 2.读入数据
    • 3. 浏览数据
    • 在这里插入图片描述
    • 4. 数据预处理
    • 5.K-Means算法聚类消费行为特征数据
    • 6.作图并展开数据分析

项目背景

对客户分类,区分不同价值的客户,便于更好地管理不同层次的客户关系。

针对不同价值的客户提供个性化服务方案,采取不同营销策略,将有限的资源尽量集中于高价值客户,以实现企业利润最大化目标。


一、数据分类目的

1.借助航空公司的客户数据,把客户分成5类,按重要程度,依次为:
低价值、一般价值、重要挽留、重要发展、重要保持
2.分类完毕后对不同类别进行特征分析,分析原因。
3.根据结论制定对不同类级客户的营销方案,以达到利润最大化。

二、数据选定及预处理

1.选定模型及数据

选定合适的商业分析模型及对应特征是非常关键的一步。基于RFM模型(R代表客户最近消费时间间隔,F代表消费频率,M代表消费金额)及航空业务的实际情况,把用L、M、C 这三个因素反映M消费金额 ,延伸出LRFMC 模型:
客户入会时间长度 L : LOAD_TIME - FFPDATE
消费时间间隔 R: LAST_TO_END
消费频率 F: FLIGHT_COUNT
飞行里程M和折扣系数的平均值C五个指标作为航空公司识别客户价值指标 : SEG_KM_SUM AVG-DISCOUNT

2.读入数据

import numpy as np
import pandas as pd
datafile = r'C:\xlwings\air\air_data.csv'  # 航空原始数据,第一行为属性标签   ##写入的数据的文件路径
cleanedfile =r'C:\xlwings\air\data_cleaned.csv'  # 数据清洗后保存的文件       ##输出的数据的文件路径
data = pd.read_csv(datafile, encoding='utf-8')  # 读取原始数据,指定UTF-8编码

3. 浏览数据

print('查看各字段属性')  # 查看各字段属性
# print(data.info())
print('查看缺失项')  # 查看缺失项
# print(data.isnull().sum()[data.isnull().sum().values != 0])  # 得出children,country,agent,company四个字段含有缺失项print('查看数据大小')  # 查看数据大小
# print(data.size)
# print(data.shape)
print('看数据数据及分布')  # 查看数据数据及分布
# print(data.describe().T)

结论:数据明显存在缺失值以及异常值。
缺失值:SUM_YR_1,SUM_YR_2(分别代表某个客户观测期内票价花费金额)
处理措施:数据占比太少,删除缺失值

异常值: 票价均为0,平均折扣率不为0,总飞行里数大于0的记录(不符合逻辑)
处理措施: 予以删除

4. 数据预处理

4.1 数据清洗

data = data[data['SUM_YR_1'].notnull() * data['SUM_YR_2'].notnull()]  # 票价非空值才保留 ('SUM_YR_1'字段的布尔值和'SUM_YR_2'的相乘,得到合并的布尔值)##[清除空值]此举同时清洗了两个字段为空值的多行数据# 只保留票价非零的,或者平均折扣率与总飞行公里数同时为0的记录。index1 = data['SUM_YR_1'] != 0                      #票价不为0的布尔值列表index2 = data['SUM_YR_2'] != 0                      #票价不为0的布尔值列表index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0)  # 该规则是“与”data = data[index1 | index2 | index3]  # 该规则是“或”


删除了944条无效记录。

4.2 数据的标准化处理
对数据进行标准化处理可以加快迭代速度,聚类分析的内部算法原理在于距离大小来衡量数据间的聚集关系,通过标准化处理,可以排除单位差异带来的干扰因素。

# 取出我们要分析的列数据, 根据 LRFMC 模型,选择与其相关的六个属性
lista= ['LOAD_TIME','FFP_DATE','LAST_TO_END','FLIGHT_COUNT','SEG_KM_SUM','avg_discount']
data = data[lista]res=pd.to_datetime(data['LOAD_TIME']) -pd.to_datetime(data['FFP_DATE'])               ##入会日期距今的差值
data['L'] = res.map(lambda x: x / np.timedelta64(30 * 24 * 60, 'm'))   #时间间隔有多少月
print(data)
data=data.rename(columns={'L':'ZL','LAST_TO_END': 'ZR','FLIGHT_COUNT':'ZF','SEG_KM_SUM':'ZM','avg_discount':'ZC'})'正态分布标准化的公式:Y=(X-μ)/σ~N(0,1)'
data = (data - data.mean(axis=0,numeric_only=True)) / (data.std(axis=0,numeric_only=True))  # 简洁的语句实现了标准化变换,类似地可以实现任何想要的变换。
data=data[['ZL','ZR','ZF','ZM','ZC']]
print(data.head(3).T)

ZC 1.295540 2.868176 2.880950
ZF 14.034016 9.073213 8.718869
ZL 1.435707 1.307152 1.328381
ZM 26.761154 13.126864 12.653481
ZR -0.944948 -0.911894 -0.889859

5.K-Means算法聚类消费行为特征数据

import pandas as pd
from sklearn.cluster import KMeans # 导入K均值聚类算法
import matplotlib.pyplot as plt

结合业务的需要,需要把客户按重要程度分成5类

k = 5  # 需要进行的聚类类别数
iteration = 500  # 聚类最大循环数

‘调用k-means算法,进行聚类分析’

kmodel = KMeans(n_clusters=k)  # n_jobs是并行数,一般等于CPU数较好
kmodel.fit(data)  # 训练模型

#kmodel.labels_ 聚类的类别 kmodel.cluster_centers_ 聚类的中心

r1 = pd.Series(kmodel.labels_).value_counts()  #统计各个类别的数目
r2 = pd.DataFrame(kmodel.cluster_centers_)  # 找出聚类中心
r = pd.concat([r2, r1], axis=1)  # 横向连接(0是纵向),得到聚类中心对应的类别下的数目
#print(r2)
#print(r1)
#print(r)
r.columns = list(data.columns) + [u'类别数目']  # 重命名表头
print(r)
r = pd.concat([data, pd.Series(kmodel.labels_, index=data.index)], axis=1)  # 详细输出每个样本对应的类别
r.columns = list(data.columns) + [u'聚类类别']  # 重命名表头
print(r)

6.作图并展开数据分析

"""为数据作图"""
import matplotlib
zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")  # 设置中文字体
clu = kmodel.cluster_centers_
print(clu[0])
x = [1, 2, 3, 4, 5]
colors = ['red', 'green', 'yellow', 'blue', 'black']
plt.figure(figsize=(12, 6))
for i in range(5):plt.plot(x, clu[i], label='clustre ' + str(i), linewidth=3, color=colors[i], marker='o',alpha=0.75)
plt.xlabel('客户关系长度L —— 消费时间间隔R —— 消费频率F —— 飞行里程M —— 折扣系数的平均值C',fontproperties=zhfont1,alpha=0.7)
plt.xticks(x, ['L','R', 'F','M','C'],  fontsize=20, horizontalalignment='center')
plt.ylabel('相\n对\n数\n值',fontproperties=zhfont1,alpha=0.75,rotation=0)
plt.title('聚类后各客户群体的相对特征程度',fontproperties=zhfont1,alpha=0.8,fontsize=16)
num1,num2,num3,num4=[1.01,0.7,3,0]
plt.legend(bbox_to_anchor=(num1, num2), loc=num3, borderaxespad=num4)
x1 = [0.75] + x + [5.25]
plt.plot(x1, np.ones_like(x1), c='k', linewidth=2, linestyle='--')
plt.show()


客户群0:red
客户群1:green
客户群2:yellow
客户群3:blue
客户群4:black

结论:
客户群0[red] 各项数据都很均匀,为一般价值客户
客户群1[green] F,M很高,L,C也不低,为重要保持客户
客户群2[yellow] 入会L时间长,但近期消费频率低,重要挽留客户
客户群3[blue] C很高,R或F,M很低,重要发展客户,具有开发潜力
客户群4[black] 消费时间间隔长,为低价值客户

分析各类客户的数量及比例

k_name = pd.Series(['clients%d' %i for i in range(k)])
k = pd.concat([k_name, r1, r2],axis=1)
k.columns=['群体名字'] + ['各类的数目']+list(data.columns)
kdata=k
print(kdata)
x = kdata['群体名字']
y = kdata['各类的数目']
total = y.sum()
pct = [i / total for i in y]
print(pct)
plt.bar(x, y, color=[(0.55 + i, 0.35 + i, 0.5) for i in pct])
txt = ['%.2f%%' % i for i in [j * 100 for j in pct]]
for a, b, c in zip(x, y, txt):plt.text(a, b, c, ha='center', va='bottom')plt.text(a, 2 * b / 3, b, ha='center', va='bottom', c='white')
plt.title('各类乘客的数量及比例', fontproperties=zhfont1, fontsize=16, alpha=0.8)
plt.xlabel('C0:一般价值客户 C1:重要保持客户 C2:重要挽留客户 C3:重要发展客户 C4:为低价值客户', fontproperties=zhfont1, fontsize=10, alpha=0.6)plt.show()


结论:
1.1 重要发展客户的数量最多,同时该类人群亦最应该受到营销部门的重视。此类人群的特点是,C很高,R或F,M很低,即消费频率不高,同时入会时间不长,消费过程没有享受比较大的折扣,符合新客画像。

1.2 尽管当前价值不高,但是却有很大的发展潜力,为该类群体另设营销策略,例如机票折扣计划等,有利于将其转化为高价值的用户。

2.1 一般价值客户数量不低。这类人群存在不高频的交易行为同时享受低折扣,即这是提供稳定流水但是并没有产生高利润的群体。这类群体需要尝试用折扣以外的营销策略来促进合作关系的维持。

3.1 重要挽留客户近期存在消费行为,但是窗口期内消费频率并不高。需要复盘近期是否举办了一些营销活动,吸引到客户产生消费行为。需要继续增加与这类客户的互动,采取具体的手段,延长此类群体的消费生命周期。

航司的客户等级分类及价值分析相关推荐

  1. 数美科技 | 黄牛也武装到牙齿,航司怎么样打赢这场无形战争?

    近期,各地疫情相关新闻报道纷至沓来,警示社会各界疫情防控工作尚不能放松警惕.2021的春节节日气氛也不如往年那么浓厚,但"春运"和"抢票难"的话题依旧成为了社会 ...

  2. 首家试水企业微信客户社群运营的春秋航空,给其他航司带来了怎样的启示?

    2019年之前,春秋航空一直保持着高速的增长,年收入复合增长达到了15%以上,这使得它成长为国内最大的民营航空公司,年运输旅客达到了2000万人次.如何开发好这巨大的客流量,实现高效精准的用户触达,成 ...

  3. 环信大学:基于韧性服务的航司退改签智能化变革

    服务请求和服务资源不匹配,是永恒的话题.每一次恶劣天气都可能成为"山呼海啸"式的严峻考验,退改签服务已经成为航司服务部门的无解难题! 这些年,航司在柜台服务.电话服务的基础上,利用 ...

  4. DNSPod十问国泰航空郑悦:数字化如何让航司冲上云霄?

    问答时间:2021年6月7日 嘉宾简介:郑悦,国泰航空大湾区负责人.毕业于英国伦敦大学学院,获国际公共政策硕士学位.曾担任APEC 亚太经合组织峰会中国青年代表.TED x 讲者.CCTV希望之星英语 ...

  5. 穆穆推荐-软件销售行业软件公司销售参考操作手册--之1--公司软件产品的定位分类以及目标客户定位-待续....

    穆穆推荐-软件行业公司销售参考操作手册--之1--公司软件产品的定位分类以及目标客户定位-待续.... 一.      公司软件产品的定位分类以及目标客户定位 在销售之前,我们需要让我们的销售人员清楚 ...

  6. 城市划分出炉 客户等级划分好了吗?

    近日一二三线城市最新划分出炉,一线城市5个,二线发达城市8个,二线中等城市15个等等,对此,网民们的评论热闹非凡,键盘侠字字珠玑,表达着自己内心的感慨,或愉悦,或不快,或只是中立看待. 有人说,一二三 ...

  7. Python中应用决策树算法预测客户等级

    ​机器学习越来越多地在企业应用,本文跟大家分享一个采用python,应用决策树算法对跨国食品超市顾客等级进行预测的具体案例.如果想先行了解决策树算法原理,可以阅读文章决策树-ID3算法和C4.5算法. ...

  8. 卡塔尔航空被Skytrax评为“2021年度最佳航空公司” 成史上首家六度获得这一业界至高荣誉的航司

    凭借在特殊时期的灵活应变能力.坚定不移的创新举措和致力于打造卓越乘客体验的承诺,卡塔尔航空还同时揽获"全球最佳商务舱"."全球最佳商务舱休息室"."全 ...

  9. RBA认证咨询,认证三个等级分类只针对VAP审核

    RBA分为VAP和NOVAP,VAP必须经过RBA官网注册,由RBA派出人员进行审核,国内主要有TUV/BSI/SGS/UL等共计9家RBA授权审核机构,而且审核员也必须经过RBA培训和授权.VAP ...

最新文章

  1. Oracle清除缓存的命令,Oracle的get命令
  2. 微信小程序点击按钮实现手机振动功能
  3. 【致青春】致成长路上的那些琐事
  4. oracle基本的操作
  5. android 输入法如何启动流程_android输入法02:openwnn源码解析01—输入流程
  6. 折叠list ExpandableList+ BaseExpandableListAdapter 自定义 折叠列表
  7. Docker入门者手册
  8. 并发编程之美-终章chat
  9. 计算机固态硬盘装系统,固态硬盘装系统,小编教你固态硬盘如何装系统
  10. 术语-MOSS-微软协作工具:MOSS(微软协作工具)
  11. Android自定义view实现日历控件
  12. Java 创建带有套接字的简单代理服务器示例
  13. 软件测试方法大全,49种测试方法,你知道几个?
  14. wps如何自己制作流程图_wps怎么制作流程图【搞定教程】
  15. 报错Manifest merger failed
  16. 给电视剧标注人脸的简单步骤:
  17. golang路由mux的介绍及基本使用
  18. 多域名SSL证书是什么意思?
  19. 第六十九章 SQL函数 JSON_OBJECT
  20. 查java使用的内存_Java内存占用排查的方法

热门文章

  1. 类似QQ的好友移动功能
  2. 教育硬件,如何摆脱「智商税」标签
  3. 2017,共享单车的盛世危局
  4. MSP432E401Y学习笔记(一)
  5. 用Python构建一个电子表格应用程序的,以使数据科学变得更容易
  6. 天池二手车交易价格预测-Task1
  7. (五)flask扩展
  8. 剑指 Offer 13: 机器人的运动范围
  9. java如何将长String转化为char数组
  10. Android开发随笔