航司的客户等级分类及价值分析

文章目录

  • 项目背景
  • 一、数据分类目的
  • 二、数据选定及预处理
    • 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)

航司的客户等级分类及价值分析_第1张图片

结论:数据明显存在缺失值以及异常值。
缺失值: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)

航司的客户等级分类及价值分析_第2张图片

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()

航司的客户等级分类及价值分析_第3张图片
客户群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()

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

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

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

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

你可能感兴趣的:(python)