基于python分析航空公司客户价值《数据挖掘》 课程实验报告

一、实验目的

1)了解K-Means 聚类算法在客户价值分析实例中的应用。
2)利用pandas快速实现数据z-score(标准差)标准化以及用scikit-learn 的聚类库实现K-Means聚类。

二、实验环境

python

三、实验内容

本上机实验的内容包括以下两个方面:
依据航空公司客户价值分析的 LRFMC模型提取客户信息的 LRF"MC指标。对其进行标准差标准化并保存后,采用K-Means算法完成客户的聚类,分析每类客户的特征,从而获得每类客户的价值。
1)利用pandas库读入 LRFMC 指物文件,分别计算各个指标的均值与其标准差,使用标准差标准化公式完成LRFMC 指标的标准化,并将标准化后的数据进行保存。
2)编写 Python程序,完成客户的K-Means聚类,获得聚类中心与类标号。输出聚类中心的特征图,并统计每个类别的客户数。

四、方案设计

4.1总体设计和实现的思路:
将客户关系长度L、消费时间间隔R、消费频率F、飞行里程M和折扣系数的平均值C五个指标作为航空公司识别客户价值指标,记为LRFMC模型。通过LRFMC模型的五个指标进行KMeans聚类,识别出最有价值客户。
航空公司客户数据挖掘主要包括以下步骤:
(1)从航空公司的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据。
(2)对步骤(1)中形成的两个数据集进行数据探索性分析与预处理,包括数据缺失值与异常值的探索分析,数据的属性规约、清洗和变换。
(3)利用步骤(2)中形成的已完成数据预处理的建模数据,基于旅客价值LRFMC模型进行客户分群,对各个客户群进行特征分析,识别出有价值的客户。
(4)针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化的服务。
(5)对客户进行流失分析,对流失客户和准流失客户进行用户画像。

4.2实验步骤:

数据探索分析

对数据进行缺失值与异常值分析,分析出数据的规律以及异常值。查找出每列属性观测值中的空值个数、最大值、平均值、最小值。

import pandas as pd

datafile = 'C:/Users/86199/Desktop/air_data.csv'   #  把air_data.csv 文件拖到桌面就行
resultfile = 'C:/Users/86199/Desktop/explore.csv'   #   什么都不用做,会在桌面生成报告,下面会用到
data = pd.read_csv(datafile, encoding='utf-8')
explore = data.describe().T
explore = explore[[ 'mean', 'std']]
explore.columns = [ '平均值', '方差']

explore.to_csv(resultfile)
explore.sort_values('方差', ascending=False)

在这里插入图片描述

数据清洗

通过数据探索分析,发现数据中存在缺失值,票价最小值为0的记录。由于原始数据量大,这类数据所占的比例较小,对于问题影响不大,因此对其进行丢弃处理。具体处理方法如下:
(1)丢弃票价为空的记录;
(2)丢弃票价为0的记录。

datafile = 'C:/Users/86199/Desktop/air_data.csv'
cleanedfile = 'C:/Users/86199/Desktop/data_cleaned.csv' # 生成清理后的数据

# 去掉票价为空的数据
data = data[(data['SUM_YR_1'].notnull()) & (data['SUM_YR_2'].notnull())]

# 保留票价非0、平均折扣率与总飞行公里数同时为0的记录
criteria1 = data['SUM_YR_1'] != 0
criteria2 = data['SUM_YR_2'] != 0

data = data[criteria1 | criteria2]

data.to_csv(cleanedfile, index=False)

属性规约

原始数据中属性太多,根据航空公司价值LRFMC模型,选择与LRFMC指标相关的6个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END,删除与其不相关的属性。

datafile = 'C:/Users/86199/Desktop/data_cleaned.csv'
data = pd.read_csv(datafile, encoding='utf-8')

data = data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]
data.head(10)

在这里插入图片描述

数据变换

原始数据中并没有直接给出LRFMC五个指标,需要通过原始数据提取这五个指标

data.insert(
    loc = data.columns.get_loc('FFP_DATE') + 1,
    column = 'L',
    value = (pd.to_datetime(data['LOAD_TIME']) - pd.to_datetime(data['FFP_DATE'])).dt.days
)

data = data.loc[:,'L':]
data.columns = ['L', 'R', 'F', 'M', 'C']
data.head(10)

在这里插入图片描述

由于5个指标的取值范围数据差异较大,为了消除数量级带来的影响,需要对数据进行标准化处理。

zscoredfile = 'C:/Users/86199/Desktop/zscoreddata.csv'

data = (data - data.mean()) / (data.std())
data.columns = ['Z'+i for i in data.columns]
data.to_csv(zscoredfile, index=False)
data.head(10)

在这里插入图片描述

手肘法确认k值

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

distortions = []
#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数

plt.figure(figsize=(8,6))
for i in range(1,16,1): #这里列出群个数为1到16时的K值与质心距离
    clf = KMeans(n_clusters=i)
    s = clf.fit(data)
    distortions.append(clf.inertia_)
k = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
plt.scatter(k, distortions)
plt.plot(k, distortions)
plt.xlabel("k")
plt.xticks([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])  # 指定x轴刻度的数目与取值
plt.ylabel("distance")
plt.show()

在这里插入图片描述

由上图可看出,K取4或5或6时比较合适
但是聚类的个数需要结合具体业务来确定,在本实验中由于指标个数,将客户聚成5类,所以k=5。

客户聚类(k=5)

采用KMeans聚类算法对客户数据进行客户分群,聚成5类。

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
datafile = 'C:/Users/86199/Desktop/zscoreddata.csv'
k = 5

data = pd.read_csv(datafile)

kmodel = KMeans(n_clusters=k, n_jobs=4)
kmodel.fit(data)
def get_cluster(data):
    labels = pd.Series(kmodel.labels_)
    nums = labels.value_counts().sort_index()
    types = pd.Series(['客户群'+str(i) for i in range(1, 6)])
    centers = pd.DataFrame(kmodel.cluster_centers_, columns=data.columns)
    new_data = pd.concat([types, nums, centers], axis='columns')
    new_data.columns = ['cluster_names', 'cluster_num', 'ZL', 'ZR', 'ZF', 'ZM', 'ZC']
    
    return new_data

data = get_cluster(data)

在这里插入图片描述

Weka检验

在这里插入图片描述

客户价值分析

from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False   

def plot_radar(data):
    colors = ['tomato', 'darkorange', 'limegreen', 'darkcyan', 'royalblue']
    names = data['cluster_names'].tolist()
    labels = data.columns.tolist()[2:]
    centers = pd.concat([data.iloc[:, 2:], data.iloc[:, 2]], axis=1)
    centers = np.array(centers)
    n = len(labels)
    angles = np.linspace(0, 2*np.pi, n, endpoint=False)
    angles = np.concatenate((angles, [angles[0]]))
    
    fig = plt.figure(figsize=(6, 6), dpi=100)
    ax = fig.add_subplot(111, polar=True)
    
    floor = np.floor(centers.min())
    ceil = np.ceil(centers.max())
    
    for i in range(n):
        ax.plot([angles[i], angles[i]], [floor, ceil], lw=0.5, color='grey')
    
    for i in range(len(names)):
        ax.plot(angles, centers[i], colors[i], label=names[i])
        plt.fill(angles, centers[i], facecolor=colors[i], alpha=0.2)
    
    ax.set_thetagrids(angles * 180 / np.pi, labels)
    plt.legend(loc='lower right', bbox_to_anchor=(1.5, 0.0))
    
    ax.set_theta_zero_location('N')
    ax.spines['polar'].set_visible(False)
    
    plt.show()

plot_radar(data)

在这里插入图片描述

五、总结

在这里插入图片描述
对于LRMFC模型,其L\M\F\C指标越大越好,R指标越小越好,我们根据聚类中心结果来对各个客户群进行特征划分。依此找出每个特征对应的最大值、最小值、次大值、次小值。

在这里插入图片描述
由上述的特征分析图表说明每个客户群都有显著不同的表现特征,基于该特征描述,我们将案例中客户定义五个等级的客户类别:重要保持客户、重要发展客户、重要挽留客户、一般客户、低价值客户。其中每种客户类别的具体特征如下:

重要保持客户:这类客户的平均折扣率C较高,一般所乘坐的舱位等级较高,最近乘坐过本公司航班R低、乘坐的次数F或里程M较高。这些客户对于航空公司来说是高价值客户,相对来说所占的比例也偏小。航空公司应该优先将资源投放到他们呢身上,对他们进行差异化管理和一对一影响,提供这类用户的忠诚度与满意度,延长这类客户的高水平消费。

重要发展客户:这类客户的平均折扣率C较高,最近乘坐过本公司航班R低,但乘坐次数F或乘坐里程M较低。这类客户入会时间L短,他们是航空公司的潜在 价值客户。虽然这类客户目前的价值不是很高,但有很大的发展潜力。航空公司应努力促使这类客户增加在本公司的乘机消费和合作伙伴处的消费,增加客户的钱包份额。通过客户价值的提升,加强这类客户的满意度,提高他们转向竞争对手的转移成本,使他们逐渐称为公司的忠诚客户。

重要挽留客户:这类客户过去所乘航班的平均折扣率C、乘坐次数F或者里程数M较高,但已经较长时间没有乘坐本公司的航班R高或者使乘坐频率变小。他们的客户价值变化的不确定性很高。由于这些客户衰退的原因各不相同,所以掌握客户的最新信息、维持与客户的互动就显得尤为重要。航空公司应该根据这些客户的最近消费时间、消费次数的变化情况、推测客户消费的异动状况,并列出客户名单。对其采取一定的营销手段,延长客户的生命周期。

一般与低价值客户:这类客户所乘航班的平均折扣率C很低,较长时间没有乘坐过本公司航班R高,乘坐次数F或者里程M较低,入会时间L短。这些客户的价值较低,可能是在航空公司机票打折促销时,才会乘坐本公司航班。

根据特征定义我们可以将客户群分类:
客户群1,R为最大值,FM为最小值。可见这类客户最近乘机次数少,里程也较小。故为一般客户。
客户群2,C值最大,R次大,FM为次小值。可见这类客户最近乘机次数少,但其折扣率较大,成绩次数和里程也偏小。故为重要发展客户。
客户群3,F,M为最大值,R为最小值。完全符合重要保持客户。
客户群4,L,C为最小值,即入会时间短,且折扣率小。应归属到低价值客户。
客户群5,L为最大值,F,M为次大值。这类客户入会时间长,乘机次数和总里程偏大,最近乘机时间并未表现明显增加。故为重要挽留客户。

对客户进行特征划分后,针对不同类型的客户群提供不同的产品和服务,提升重要发展客户的价值、稳定和延长重要保持客户的高水平消费、防范重要挽留客户的流失并积极进行关系恢复。

  • 17
    点赞
  • 166
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Python航空公司客户价值分析数据的探索与分析非常重要。通过对客户价值数据的深入分析Python航空公司可以更好地了解其客户群体,并采取相应措施提高客户忠诚度和增加收入。 首先,需要探索并分析客户购买行为和消费习惯。利用Python编程语言,可以对航空公司的销售和消费数据进行统计和分析,包括乘客购买机票的价格、航班频率、舱位等级以及购票的时间和地点等信息。通过这些数据的分析,可以得出乘客的购票偏好和消费规律,进而制定有针对性的营销策略。 其次,应该进行客户细分分析。通过将乘客信息与其他数据源进行整合,通过Python数据挖掘和机器学习技术,可以将乘客进行分层和细分。例如,可以根据乘客的年龄、性别、职业、旅行目的等因素,将乘客分为不同的客户群体,然后对每个群体的特点和需求进行进一步分析。这有助于Python航空公司更好地了解目标客户,从而精确地推行市场营销和精准定向广告。 另外,Python航空公司还可以利用客户价值数据进行预测分析。通过构建基于历史数据的预测模型,例如采用回归模型、时间序列分析以及机器学习中的模型等,可以预测客户的未来行为和价值趋势。这些预测分析的结果可以帮助航空公司预测需求、制定定价策略、调整航线规划以及开展定向促销等活动,从而提高盈利能力和客户满意度。 总之,Python航空公司客户价值分析数据的探索与分析对于提高客户忠诚度和增加收入具有重要意义。通过深入分析客户购买行为、客户细分和预测分析等步骤,Python航空公司可以更加深入地了解客户需求,并制定相应的营销策略,从而增加竞争力和市场份额。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值