数据分析案例-航空公司客户价值分析(聚类)

目录

 

项目背景

原始数据情况

 挖掘目标

分析方法与过程

加载数据

数据预处理

构建模型 


 

项目背景

在企业的客户关系管理中,对客户分类,区分不同价值的客户。针对不同价值的客户提供个性化服务方案,采取不同营销策略,将有限营销资源集中于高价值客户,实现企业利润最大化目标。在竞争激烈的航空市场里,很多航空公司都推出了优惠的营销方式来吸引更多的客户。在此种环境下,如何将公司有限的资源充分利用,提示企业竞争力,为企业带来更多的利益。

广泛用于分析客户价值的是RFM模型,它是通过三个指标(最近消费时间间隔(Recency)、消费频率(Frequency)、消费金额(Monetary))来进行客户细分,识别出高价值的客户。如果分析航空公司客户价值,此模型不再适用,存在一些缺陷和不足:

一:在模型中,消费金额表示在一段时间内,客业产品金额的总和。因航空票价受到运输距离、舱位等级等多种因素影响,同样消费金额的不同旅客对航空公司的价值是不同的。因此这个指标并不适合用于航空公司的客户价值分析。

二:传统模型分析是利用属性分箱方法进行分析如图,但是此方法细分的客户群太多,需要一一识别客户特征和行为,提高了针对性营销的成本。

c2d407d595634cdfb31054c6cf5f3040.png

 

原始数据情况

057ac2e097854520a4d3e85713491759.png

 挖掘目标

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

分析方法与过程

初步分析:提出适用航空公司的LRFMC模型

        因消费金额指标在航空公司中不适用,故选择客户在一定时间内累积的飞行里程M 和客户乘坐舱位折扣系数的平均值 C 两个指标代替消费金额。此外,考虑航空公司会员加入时间在一定程度上能够影响客户价值,所以在模型中增加客户关系长度 L ,作为区分客户的另一指标,因此构建出 LRFMC 模型。
 
        采用聚类的方法对客户进行细分,并分析每个客户群的特征,识别其客户价值
 
总体流程:
5be65a7e66f0479e8ed37e1238c99cd0.png

 

加载数据

# 导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import preprocessing
import warnings
warnings.filterwarnings('ignore') # 忽略警告
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示

data = pd.read_csv('air_data.csv', sep=',')
data.shape
(62988, 44)

 

数据预处理

1. 数据清洗:从业务以及建模的相关需要方面考虑,筛选出需要的数据
a) 丢弃票价为空的数据。
b) 丢弃票价为 0 、平均折扣率不为 0 、总飞行公里数大于 0 的数据。

 

# 删除缺失值
data = data.dropna().reset_index(drop=True)
data.shape
(58255, 44)
# 删除票价为0、平均折扣率不为0、总飞行公里数大于0的数据
t1 = data['SUM_YR_1']==0
t2 = data['SUM_YR_2']==0
t3 = data['avg_discount']>0
t4 = data['SEG_KM_SUM']>0
tt = []
for f in range(len(t1)):
    if t1[f] & t2[f] & t3[f] & t4[f]==True :
       tt.append(f) 
data = data.drop(tt,axis=0) 
data = data.reset_index(drop = True)
data.shape
(58022, 44)
2. 属性规约:原始数据中属性太多,根据 LRFMC 模型,选择与其相关的六个属性,删除不相关、弱相关或冗余的属性。
b342818a10e54113bfd76c1202a6c508.png
# 取出我们要分析的列数据
data1 = data[['LOAD_TIME','FFP_DATE','LAST_TO_END','FLIGHT_COUNT','SEG_KM_SUM','avg_discount']]
data1

 

3. 数据变换
a) 属性构造
b) 数据标准化
 

L = LOAD_TIME - FFP_DATE

会员入会时间距观测窗口结束的月数 = 观测窗口的结束时间 - 入会时间[单位:月

R = LAST_TO_END

客户最近一次乘坐公司飞机距观测窗口结束的月数 = 最后一次乘机时间至观察窗口末端时长[单位:月]

F = FLIGHT_COUNT

客户在观测窗口内乘坐公司飞机的次数 = 观测窗口的飞行次数[单位:次]

M = SEG_KM_SUM

客户在观测时间内在公司累计的飞行里程 = 观测窗口总飞行公里数[单位:公里]

C = AVG_DISCOUNT

客户在观测时间内乘坐舱位所对应的折扣系数的平均值 = 平均折扣率[单位:无]

 

# 会员入会时间距观测窗口结束的月数 = 观测窗口的结束时间 - 入会时间
m = (pd.to_datetime(data1['LOAD_TIME'])-pd.to_datetime(data1['FFP_DATE']))//30
data1['L']=m.dt.days
# 再取出我们最终模型需要的列数据
data2 = data1[['L','LAST_TO_END','FLIGHT_COUNT','SEG_KM_SUM','avg_discount']]
# 更换列名
data2 = data2.rename(columns={'L': 'ZL', 'LAST_TO_END': 'ZR','FLIGHT_COUNT':'ZF','SEG_KM_SUM':'ZM','avg_discount':'ZC'})

c027084afd874c7c949b75040de21a42.png

标准化处理

# 标准化处理
std_scale = preprocessing.StandardScaler().fit(data2[["ZL","ZR","ZF","ZM","ZC"]])
df_std = std_scale.transform(data2[["ZL","ZR","ZF","ZM","ZC"]])
df_data=pd.DataFrame(df_std)
df_data.columns=list(data2.columns)
df_data

aacd74fabbca4acc9b0a2beeacdabf7b.png

构建模型 

1. 构建航空客户价值分析模型
a) 客户 K-Means 聚类
b) 客户价值分析
c) 模型应用

类别 

ZL

ZR

ZF

ZM

ZC

类别数目

0

-0.082462

0.009038

-0.268082

-0.289714

1.903063

5032

1

0.514653

-0.796162

2.48131

2.42854

0.3318

5023

2

-0.690163

-0.418629

-0.158749

-0.155184

-0.298378

22570

3

1.186869

-0.374691

-0.080945

-0.086677

-0.14956

14373

4

-0.330789

1.704202

-0.577257

-0.543217

-0.210726

11024

 

1. 客户 K-Means 聚类

采用K-Means聚类算法对客户数据进行分群,将其聚成五类(需要结合业务的理解与分析来确定客户的类别数量)

# 聚类
model = KMeans(n_clusters=5) # 构造聚类器
model.fit(df_std) # 聚类
label_pred = model.labels_ # 获取聚类标签
r1 = pd.Series(model.labels_).value_counts() # 统计各类的个数
r2 = pd.DataFrame(model.cluster_centers_)  # 获取聚类中心
r = pd.concat([r2,r1],axis=1) # 合并
r.columns = list(data2.columns) + ['类别数目']  # 加上列名
r

eaf9209533ef438b82114bf907274694.png

 

r3 = pd.concat([df_data,pd.Series(model.labels_,index=df_data.index)],axis=1) # 给df_data加上一列按照df_data索引,标签为值值的列
r3.columns = list(data2.columns) + ['聚类类别'] # 加列名
r3

60ce73686ccf4328b49e34b90041c08f.png

 

2. 客户价值分析
 
# 根据r2绘制雷达图
labels = np.array(['ZL','ZR','ZF','ZM','ZC'])
labels = np.concatenate((labels,[labels[0]]))

N = len(r2)
angles = np.linspace(0, 2 * np.pi, N, endpoint=False)
data = pd.concat([r2,r2.loc[:,0]],axis=1)
angles = np.concatenate((angles, [angles[0]]))
fig = plt.figure(figsize=(8,8)) 
ax = fig.add_subplot(111, polar=True)    # 参数polar, 以极坐标的形式绘制图形
# 画线
j=0
for i in range(0,5):
    j=i+1
    ax.plot(angles,data.loc[i,:],'o-',label="客户群"+str(j))
# 添加属性标签
ax.set_thetagrids(angles*180/np.pi,labels) 
plt.title(u'客户特征雷达图')
plt.legend(loc='lower right')
plt.show()

c689b381a9cf45d18b32c27fb2269e7c.png

 对聚类结果进行特征分析,其中客户群3FM属性最大,在R属性最小;客户群5L属性上最大;客户群4R属性上最大,在FM属性最小;客户群1LC属性上最小;客户群2C属性上最大。

根据业务定义五个等级的客户类别:重要保持客户、重要发展客户、重要挽留客户、一般客户、低价值客户。

9449ea5c9b764f6491203de26a3c28e0.png

 客户群价值排名:根据每种客户类型的特征,对各类客户群行客户价值排名,获取高价值客户信息。

客户群

排名

排名意义

客户群3

1

重要保持客户

客户群5

2

重要发展客户

客户群2

3

重要挽留客户

客户群1

4

一般客户

客户群4

5

低价值客户

3. 模型应用:根据各个客户群的特征,可采取一些营销手段和策略。
a) 会员的升级与保级。
b) 首次兑换。
c) 交叉销售。

 

 

 

  • 65
    点赞
  • 443
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
层次聚类算法(Hierarchical Clustering)是一种将数据集中的对象进行分组的无监督学习算法,其基本思想是将数据集中的对象逐步合并成越来越大的类群,直到满足某个停止准则为止。层次聚类算法可以分为两类:自下而上的凝聚层次聚类和自上而下的分裂层次聚类航空公司客户价值分析的层次聚类算法可以通过以下步骤实现: 1. 数据预处理:首先需要对客户数据进行清洗和处理,包括数据去重、缺失值处理、异常值处理等。 2. 特征选择:选择能够反映客户价值的关键特征,比如客户的航班消费金额、航班消费频率、航班消费时间等。 3. 距离度量:选择一种距离度量方法,比如欧氏距离、曼哈顿距离、闵可夫斯基距离等。 4. 层次聚类:使用层次聚类算法对客户进行分组。可以选择自下而上的凝聚层次聚类,通过计算每个客户之间的距离,逐步将距离最近的客户合并成一类;也可以选择自上而下的分裂层次聚类,通过将所有客户看成一个类,逐步将类分裂成越来越小的子类。 5. 分组结果分析:根据聚类结果,可以对客户进行分组,分析每个组的客户价值、消费特点等,为航空公司提供客户分层管理、精准营销等决策支持。 需要注意的是,层次聚类算法是一种启发式算法,结果可能会受到数据特征、距离度量等因素的影响,因此在实际应用中需要综合考虑多种算法和参数组合,选择最优的聚类结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值