一、基于聚类算法完成航空公司客户价值分析任务
1、✌ 任务描述
1、借助航空公司数据,对客户进行分类
2、对不同类别的客户进行特征分析,比较不同类别客户的价值
3、对不同价值的客户进行个性化服务,指定相应的营销策略
2、✌ 数据集
其中数据中包括62988个客户样本,44种属性,数据下载地址
2.1 ✌ 数据集中字段含义
3、✌ 方法
基于聚类算法完成航空客户分析任务主要流程有:数据预处理、模型训练与对数据的预测、分析与决策。详细步骤见下图。
3.1 ✌ 数据预处理
首先导入一些所需模块
import pandas as pd import numpy as np import matplotlib.pyplot as plt import datetime import sklearn.preprocessing import sklearn.cluster
读取数据,数据是以CSV文件的形式存储的,每行代表一个客户,每列代表一个属性字段。
air_data=pd.read_csv('air_data.csv') air_data.shape
观察前5条数据
air_data.head(5)
展示每列数据的类型,object代表文本,int64代表整数,float64代表浮点数,bool类型代表布尔值
air_data.dtypes
观察每列数据的具体描述,只适用于数值型变量
air_data.describe().T
去除重复数据
air_data=air_data.drop_duplicates()
观察数据是否有缺失值
air_data.isnull().sum()
3.2 ✌ 特征工程
3.2.1 ✌ RFM模型
我们需要根据给定的44个属性来对客户价值进行价值分析,也就是对不同的客户进行分类,特别地,对于客户价值分析的一个经典模型是 RFM 模型。
- Recency: 最近消费时间间隔。
- Frequency: 客户消费频率。
- Monetary Value: 客户总消费金额。
使用 RFM 模型主要根据其中的RFM三个特征来对用户进行分析,将客户群体细分为重要保持客户、重要发展客户、重要挽留客户、一般客户、低价值客户五类。
3.2.2 ✌ 变体-LRFMC模型
考虑到商用航空行业与一般商业形态的不同,国内外航空公司在RFM模型的基础上,还加上了 L 客户关系时长以及 C 客户所享受的平均折扣率这两个特征用于客户分群与价值分析,得到航空行业的LRFMC模型:
- Length of Relationship: 客户关系时长,反映可能的活跃时长。
- Recency: 最近消费时间间隔,反映当前的活跃状态。
- Frequency: 客户消费频率,反映客户的忠诚度。
- Mileage: 客户总飞行里程,反映客户对乘机的依赖性。
- Coefficient of Discount: 客户所享受的平均折扣率,侧面反映客户价值高低。
load_time = datetime.datetime.strptime('2014/03/31', '%Y/%m/%d') ffp_dates = [datetime.datetime.strptime(ffp_date, '%Y/%m/%d') for ffp_date in air_data['FFP_DATE']] length_of_relationship = [(load_time - ffp_date).days for ffp_date in ffp_dates] air_data['LEN_REL'] = length_of_relationship
模型只需要这几列
features = ['LEN_REL','FLIGHT_COUNT','avg_discount','SEG_KM_SUM','LAST_TO_END'] data = air_data[features] features = ['L','F','C','M','R'] data.columns = features
观察前5行数据
display(data.head()) display(data.describe().T)
3.2.3 ✌ 标准化
对特征进行标准化,是各列的均值为0、方差为1
data=(data.mean(axis=0))/(data.std(axis=0))
ss = sklearn.preprocessing.StandardScaler(with_mean=True, with_std=True)#标准化 data = ss.fit_transform(data) #数据转换 data = pd.DataFrame(data, columns=features) data_db = data.copy()
3.3 ✌ 模型训练与对数据的预测
我们想要将将客户群体细分为重要保持客户、重要发展客户、重要挽留客户、一般客户、低价值客户五类,
于是我们可以用 k-means 聚类算法进行聚类,类别的数量可以人为控制。
前面我们已经通过数据处理得到了我们 LRFMC 模型需要的特征,接下来就使用 k-means 聚类算法来分析数据。
这里我们使用机器学习库 scikit-learn 中现有的 kmeans 函数的实现。
3.3.1 ✌ KMeans聚类算法
将目标样本分为5个群体
from sklearn.cluster import KMeans data=KMeans(n_clusters=5).fit(data)
查看模型学习出来的5个群体中心,以及5个群体所包含的样本总数。
r1 = pd.Series(km.labels_).value_counts() r2 = pd.DataFrame(km.cluster_centers_) r = pd.concat([r2, r1], axis=1) r.columns = list(data.columns) + ['counts'] r
查看每个样本预测的群体的标签
kms.labels_
3.4 ✌ 尝试使用RFM模型
data_rfm=data[['R','F','M']] data_rfm.head()
kms.fit(data_rfm) kms.labels_
r1 = pd.Series(km.labels_).value_counts() r2 = pd.DataFrame(km.cluster_centers_) rr = pd.concat([r2, r1], axis=1) rr = pd.DataFrame(ss.fit_transform(rr) ) rr.columns = list(data_rfm.columns) + ['counts'] rr
3.5 ✌ DBSCAN模型对LCRFM特征进行计算
除了Kmeans聚类算法外,我们还可以使用DBSCAN等聚类算法进行建模。
from sklearn.cluster import DBSCAN # db = DBSCAN(eps=10,min_samples=2).fit(data_db) # Kagging debug db = DBSCAN(eps=10,min_samples=2).fit(data_db.sample(10000)) DBSCAN_labels = db.labels_
3.9 ✌ 根据LCRFM结果进行分析
我们这里是对Kmeans算法使用LCRFM模型进行分析:
对应实际业务对聚类结果进行分值离散转化,对应1-5分,其中属性值越大,分数越高:
(1)✌ 重要保持客户
平均折扣率高(C↑),最近有乘机记录(R↓),乘机次数高(F↑)或里程高(M↑):
这类客户机票票价高,不在意机票折扣,经常乘机,是最理想的客户类型。
公司应优先将资源投放到他们身上,维持这类客户的忠诚度。
(2)✌ 重要发展客户
平均折扣率高(C↑),最近有乘机记录(R↓),乘机次数低(F↓)或里程低(M↓):
这类客户机票票价高,不在意机票折扣,最近有乘机记录,但总里程低,具有很大的发展潜力。
公司应加强这类客户的满意度,使他们逐渐成为忠诚客户。
(3)✌ 重要挽留客户
平均折扣率高(C↑),乘机次数高(F↑)或里程高(M↑),最近无乘机记录(R↑):
这类客户总里程高,但较长时间没有乘机,可能处于流失状态。
公司应加强与这类客户的互动,召回用户,延长客户的生命周期。
(4)✌ 一般客户
平均折扣率低(C↓),最近无乘机记录(R↑),乘机次数高(F↓)或里程高(M↓),入会时间短(L↓):
这类客户机票票价低,经常买折扣机票,最近无乘机记录,可能是趁着折扣而选择购买,对品牌无忠诚度。
公司需要在资源支持的情况下强化对这类客户的联系。
(5)✌ 低价值客户
平均折扣率低(C↓),最近无乘机记录(R↑),乘机次数高(F↓)或里程高(M↓),入会时间短(L↓):
这类客户与一般客户类似,机票票价低,经常买折扣机票,最近无乘机记录,可能是趁着折扣而选择购买,对品牌无忠诚度。
✌ 结果分析
- 群体1的L属性最大
- 群体2的L、C属性最小
- 群体3的C属性上最大
- 群体4的M、F属性属性最大,R属性最小
- 群体5的R属性最大,F、M属性最小
- 其中每项指标的实际业务意义为:
- L:加入会员的时长。越大代表会员资历越久
- R:最近一次乘机时间。越大代表越久没乘机
- F:乘机次数。越大代表乘机次数越多
- M:飞行总里程。越大代表总里程越多
- C:平均折扣率。越大代表折扣越弱,0表示0折免费机票,10代表无折机票
- 重要保持客户:客户群4
- 重要发展客户:客户群3
- 重要挽留客户:客户群1
- 一般客户:客户群2
- 低价值客户:客户群5
✌ 决策
重要发展客户、重要保持客户、重要挽留客户这三类客户其实也对应着客户生命周期中的发展期、稳定器、衰退期三个时期。从客户生命周期的角度讲,也应重点投入资源召回衰退期的客户。
一般而言,数据分析最终的目的是针对分析结果提出并开展一系列的运营/营销策略,以期帮助企业发展。在本实例中,运营策略有三个方向:
提高活跃度:提高一般客户、低价值客户的活跃度。将其转化为优质客户
提高留存率:与重要挽留客户互动,提高这部分用户的留存率
提高付费率:维系重要保持客户、重要发展客户的忠诚度,保持企业良好收入
每个方向对应不同的策略,如会员升级、积分兑换、交叉销售、发放折扣券等手段,此处不再展开。