航空客户分类(附带操作实例)

发布时间:2023年12月19日

一、主要目的:

以案例分析的形式,实践大数据分析与处理的生命周期过程。完成从数据的获取、数据预处理、数据分析到数据可视化几个阶段的工作,运用聚类分析的方法对航空客户进行分类,注意其分析模型的建立和分析的步骤,并对数据分析结果给出解释。

二、主要内容:

1.问题描述

航空公司经常会对客户进行分类,那么怎样对客户分群,才能区分价值客户、无价值客户等,并对不同的客户群体实施个性化的营销策略,以实现利润最大化。

餐饮企业也会经常碰到此类问题。如何通过对客户的消费行为来评价客户对企业的贡献度,从而提高对某些客户群体的关注度,以实现企业利润的最大化。如何通过客户对菜品的消费明细,来判断哪些菜是招牌菜(客户必点),哪些又是配菜(点了招牌菜或许会点的菜品),以此来提高餐饮的精准采购。

2.聚类分析相关概念

聚类分析是指在没有给定划分类别的情况下,根据数据的相似度进行分组的一种方法,分组的原则是组内距离最小化而组间距离最大化。

K-means算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的K类别,采用距离作为相似性的评级指标,即认为两个对象的距离越近,其相似度越大。

算法过程如下:
  1. 从N个样本数据中随机选取k个对象作为初始的聚类质心。
  2. 分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中。
  3. 所有对象分配完成之后,重新计算K个聚类的质心。
  4. 与前一次的K个聚类中心比较,如果发生变化,重复过程(2),否则转到(5)。
  5. 当质心不再发生变化时,停止聚类过程,并输出聚类结果。
其伪代码如下:

创建K个点作为初始的质心点(随机选择)

当任意一个点的簇分配结果发生改变时

?? 对数据集中的每一个数据点

???? 对每一个质心

?????? 计算质心与数据点的距离

?????? 将数据点分配到距离最近的簇

???? 对每一个簇,计算簇中所有点的均值,并将均值作为质心。

3.模型的建立

根据航空公司目前积累的大量客户会员信息及其乘坐的航班记录,可以得到包括姓名、乘机的间隔、乘机次数、消费金额等十几条属性信息。

本情景案例是想要获取客户价值,识别客户价值应用的最广泛模型是RFM模型,三个字母分别代表Recency(最近消费时间间隔)、Frequency(消费频率)、Monetary(消费金额)这三个指标。结合具体情景,最终选取客户消费时间间隔R、消费频率F、消费金额M这三个指标作为航空公司识别客户价值的指标。

为了方便说明操作步骤,本案例简单选择三个指标进行K-means聚类分析来识别出最优价值客户。航空公司在真实的判断客户类别时,选取的观测维度要大得多。

本情景案例的主要步骤包括:
  1. 对数据集进行清洗处理,包括数据缺失值与异常处理、数据属性的规约、数据清洗和变换,把数据处理成可使用的数据(Data);
  2. 利用已预处理的数据(Data),基于REM模型进行客户分群,对各个客户群进行特征分析,对客户进行分类;
  3. 针对不同类型的客户制定不同的营销政策,实行个性化服务。

三、操作实现

第一步:数据清洗

第二步:标准化处理

第三步:算法模型分析

第四步:分类结果展示与分析

根据该图可知客户群4是重要保持客户,客户群3是重要发展客户,客户群2是重要挽留客户,客户群1是一般客户,客户群5是低价值客户。

四、关键源码附件:

warnings.filterwarnings('ignore')? # 忽略警告

plt.rcParams['font.sans-serif'] = ['SimHei']? # 解决中文显示

plt.rcParams['axes.unicode_minus'] = False? # 解决符号无法显示

# 删除票价为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)

print(data.shape)

# 取出我们要分析的列数据

data1 = data[['LOAD_TIME','FFP_DATE','LAST_TO_END','FLIGHT_COUNT','SEG_KM_SUM','avg_discount']]

print(data1)

# 会员入会时间距观测窗口结束的月数 = 观测窗口的结束时间 - 入会时间

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'})

print(data2)

# 标准化处理

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)

print(df_data)

# 聚类

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) + ['类别数目']? # 加上列名

print(r)

# 根据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()

五、心得

1. 数据预处理是非常重要的一步,包括删除无效数据、处理缺失值,以及对特征进行筛选和转换等。这一步对于后续的数据分析和建模有着至关重要的影响。

2. 在数据分析过程中,我们可以通过一些统计方法(如均值、方差等)来观察数据的分布和变化,这对于我们理解数据特性和发现数据规律非常有帮助。

3. 聚类分析是一种常用的数据分析方法,它可以帮助我们根据数据的相似性将数据划分为不同的类别。在这个案例中,我们通过K-means聚类方法将客户划分为了5个不同的群体,并通过雷达图直观地展示了这些群体的特性。

4. 数据可视化是数据分析不可或缺的一部分,它可以帮助我们更好地理解数据和结果。在这个案例中,我们通过雷达图直观地展示了各个客户群体的特性,这对于我们理解客户群体的特点和差异非常有帮助。

5. 最后,需要注意的是,数据分析不是一成不变的,我们需要根据实际问题和数据的特性灵活选择和调整分析方法,以获取更准确和有用的结果。

文章来源:https://blog.csdn.net/xixixi7777/article/details/135057346
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。