基于数据挖掘的航空客户满意度分析预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        航空公司致力于提供多样化的服务以满足乘客需求,包括但不限于提供免费无线网络、免费食物饮品、提供网上预约服务、飞机出口位置、座椅舒适度、卫生状况等,并希望以此提升乘客满意程度;此外,乘客满意度还受到乘客自身因素的影响。本系统利用数据挖掘、机器学习算法挖掘影响客户满意度的重要因素,最优模型的测试集预测准确率达到99.5%,同时构建可视化交互平台,方便对航空公司乘客满意度的在线评估预测,可给航空公司提供定制化策略,为每名乘客提供专属化服务,从而极大程度上提高乘客满意度。

        B站系统演示视频:基于数据挖掘的航空客户满意度分析预测系统_哔哩哔哩_bilibili

2. 读取数据与数据预处理

train_df = pd.read_csv("./train.csv")
test_df = pd.read_csv("./test.csv")train_df = train_df.drop(['Unnamed: 0', 'id'], axis=1)
test_df = test_df.drop(['Unnamed: 0', 'id'], axis=1)train_df.info()

可以看出:

  • 对应于“到达延误分钟数”特征的列有310个缺失值。
  • 前两个特征没有用处,不会影响分类,因此你应该去掉它们。
  • 许多列包含类别值,但其类型是'object'或'int64'。让我们将这些类型替换为专为存储类别值设计的特殊类型。

3. 数据探索式可视化分析

3.1 客户满意度样本占比

fig = plt.figure(figsize=(6,6))wedges,texts=plt.pie(values,wedgeprops={"width": 0.4, 'edgecolor': '#000', 'linewidth': 3})kw = dict(arrowprops=dict(arrowstyle="-"), zorder=0, va="center")for i, p in enumerate(wedges):ang = (p.theta2 - p.theta1) / 1.8 + p.theta1y = np.sin(np.deg2rad(ang))x = np.cos(np.deg2rad(ang))horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]connectionstyle = "angle,angleA=0,angleB={}".format(ang)kw["arrowprops"].update({"connectionstyle": connectionstyle})plt.annotate(labels[i]+"\n"+str(percent[i])+"%",xy=(x, y),xytext=(1.35 * np.sign(x), 1.4 * y),horizontalalignment=horizontalalignment,fontsize=12,**kw)
plt.title("航空客户满意度情况占比", fontsize=16)
plt.show()

3.2 不同性别客户的满意度占比分布 

 

3.3 不同类型客户的满意度分析

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 6))sns.countplot(train_df, x="Customer Type", ax=axes[0])
axes[0].tick_params(axis='x', rotation=0)
axes[0].set_ylabel('客户类型')
axes[0].set_title('不同类型客户的样本数量分布', fontsize=16)customer_type.plot(kind='bar' , stacked=True, ax=axes[1], fontsize=12)
axes[1].tick_params(axis='x', rotation=0)
axes[1].set_ylabel('客户类型')
axes[1].set_title('不同类型客户的满意度分析', fontsize=16)plt.show()

3.4 不同年龄客户的满意度分布 

        可以看出,年级越大,满意的比率越大,越年轻,可能由于心气高,容易对航空公司的种种服务不满意,符合预期。

3.5 不同乘机目的满意度分析

3.6 不同航程距离对满意度影响

plt.figure(figsize=(10, 6))
sns.distplot(train_df[train_df['satisfaction'] == 'neutral or dissatisfied']['Flight Distance'], label='neutral or dissatisfied', bins=50)
sns.distplot(train_df[train_df['satisfaction'] == 'satisfied']['Flight Distance'], label='satisfied', bins=50)
plt.title('不同航程距离对满意度影响分布', fontsize=16)
plt.legend()
plt.show()

3.7 不同航班舱位、旅行类型和航程距离对满意度影响

sns.catplot(x="Flight Distance", y="Type of Travel", hue="satisfaction", col="Class", data=train_df, kind="bar", height=4.5, aspect=.8
)
plt.title('不同航班舱位、旅行类型和航程距离对满意度影响', fontsize=16)
plt.show()

        可以看出,对于商务舱类别的商务旅行,飞行距离越长,满意的乘客数量就越高。对于其他组合,满意和不满意乘客的分布几乎相等。

3.8 不同类型乘客的年龄的联合分布

f, ax = plt.subplots(1, 2, figsize = (15,5))
sns.boxplot(x = "Customer Type", y = "Age", palette = "YlOrBr", data = train_df, ax = ax[0])
ax[0].set_title('不同类型乘客的年龄分布箱线图', fontsize=16)sns.histplot(train_df, x = "Age", hue = "Customer Type", multiple = "stack", palette = "YlOrBr", edgecolor = ".3", linewidth = .5, ax = ax[1])
ax[1].set_title('不同类型乘客的年龄分布密度直方图', fontsize=16)
plt.show()

        可以看出:该航空公司的大多数老客户年龄在30到50岁之间(他们的平均年龄略高于40岁)。非固定客户的年龄范围稍小(平均为25至40岁,略低于30岁)。 

3.9 Wi-Fi服务、便利性、餐饮、座椅舒适度等维度与整体客户满意度的相关性

        

        可以看出,Online boarding、Inflight entertainment、Seat comfort、On-board service 等几个特征,与整体满意度相关性很高,表明客户比较在意在线登机、机上娱乐、座椅舒适度、机上服务。

3.10 飞行娱乐活动、飞行距离的相关性分析 

f, ax = plt.subplots(2, 2, figsize = (15,8))
sns.boxplot(x = "Inflight entertainment", y = "Flight Distance", palette = "YlOrBr", data = train_df, ax = ax[0, 0])
sns.histplot(train_df, x = "Flight Distance", hue = "Inflight entertainment", multiple = "stack", palette = "YlOrBr", edgecolor = ".3", linewidth = .5, ax = ax[0, 1])
sns.boxplot(x = "Leg room service", y = "Flight Distance", palette = "YlOrBr", data = train_df, ax = ax[1, 0])
sns.histplot(train_df, x = "Flight Distance", hue = "Leg room service", multiple = "stack", palette = "YlOrBr", edgecolor = ".3", linewidth = .5, ax = ax[1, 1])
plt.show()

        可以看出:飞机乘客旅行的距离越远(分别是飞行时间越长),他们对飞行中的娱乐和额外的腿部空间(平均而言)就越满意。

4. 特征工程与数据集切分

        数据集存在一定的缺失值,需要进行缺失值的填充,同时对于类别类型的特征需要进行类别编码,最后进行训练集、验证集和测试集的切分:

# 缺失值填充
train_df['Arrival Delay in Minutes'].fillna(train_df['Arrival Delay in Minutes'].median(axis = 0), inplace = True)# 类别编码
from sklearn.preprocessing import LabelEncoderencoder = LabelEncoder()category_features = ['Gender', 'Customer Type', 'Type of Travel', 'Class']for col in category_features:train_df[col] = encoder.fit_transform(train_df[col])# 数据集切分
y_train_all = train_df['satisfaction']
X_train_all = train_df.drop(columns=['satisfaction'])X_train, X_valid, y_train, y_valid = train_test_split(X_train_all, y_train_all, test_size=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X_train, y_train, test_size=0.1, random_state=42)print('train: {}, valid: {}, test: {}'.format(X_train.shape[0], X_valid.shape[0], X_test.shape[0]))

5. 基于机器学习算法的航空客户满意度建模 

5.1 多模型预测性能对比初探

        利用构建的数据集,对Ada Boost、Gradient Boosting、Logistic Regression、Support Vector Machine和XGBoost这5个模型进行初步试验:

dd = pd.DataFrame({"scores": scores}, index=names)
dd = dd.sort_values("scores", ascending=False)
dd["scores"] = round(dd["scores"], 2)fig, axes = plt.subplots(1,1,figsize=(12, 6))sns.barplot(x=dd.index, y=dd.iloc[:, 0], ax=axes)
for container in axes.containers:axes.bar_label(container)
axes.set_yticklabels(())
axes.set_xticklabels(axes.get_xticklabels(), rotation=0, fontsize=12)
axes.set_ylabel("AUC得分", fontsize=12)
axes.set_xlabel("模型", fontsize=12)
plt.title("多模型预测性能对比初探", fontsize=20)
plt.show()

        可以看出,XGBoost 模型的性能最好,预测AUC达到了 96.69%,下面针对  XGBoost 模型进行进一步的优化。

5.2 Xgboost 模型继续优化

        通过对 XGBoost 训练的各项参数进行优化:

df_columns = X_train.columns.values
print('===> feature count: {}'.format(len(df_columns)))xgb_params = {'eta': 0.1,'colsample_bytree': 0.4,'max_depth': 8,'lambda': 2.0,'eval_metric': 'auc','objective': 'binary:logistic','nthread': -1,'silent': 1,'booster': 'gbtree'
}dtrain = xgb.DMatrix(X_train, y_train, feature_names=df_columns)
dvalid = xgb.DMatrix(X_valid, y_valid, feature_names=df_columns)watchlist = [(dtrain, 'train'), (dvalid, 'valid')]model = xgb.train(dict(xgb_params),dtrain,evals=watchlist,verbose_eval=50,early_stopping_rounds=100,num_boost_round=4000)
[0]	train-auc:0.95911	valid-auc:0.95926
[50]	train-auc:0.99313	valid-auc:0.99157
[100]	train-auc:0.99624	valid-auc:0.99377
[150]	train-auc:0.99766	valid-auc:0.99459
[200]	train-auc:0.99836	valid-auc:0.99488
[250]	train-auc:0.99881	valid-auc:0.99507
[300]	train-auc:0.99915	valid-auc:0.99507
[350]	train-auc:0.99934	valid-auc:0.99512
[400]	train-auc:0.99950	valid-auc:0.99506
[450]	train-auc:0.99964	valid-auc:0.99511

特征重要程度分布

模型性能评估

# predict train
predict_train = model.predict(dtrain)
train_auc = evaluate_score(predict_train, y_train)# predict validate
predict_valid = model.predict(dvalid)
valid_auc = evaluate_score(predict_valid, y_valid)# predict test
dtest = xgb.DMatrix(X_test, feature_names=df_columns)
predict_test = model.predict(dtest)
test_auc = evaluate_score(predict_test, y_test)print('训练集 auc = {:.7f} , 验证集 auc = {:.7f} , 测试集 auc = {:.7f}\n'.format(train_auc, valid_auc, test_auc))
训练集 auc = 0.9996361 , 验证集 auc = 0.9951094 , 测试集 auc = 0.9954333

测试集预测 ROC 曲线

        可以看出,测试集的预测 AUC 提高到了 99.54%!

6. 航空客户满意度分析预测系统

        利用 Flask + Bootstrap 框架搭建响应式布局的交互分析 web 系统,提供标准化 rest api,提供航空客户满意度的在线分析预测功能。

6.1 系统首页

6.2 航空客户满意度在线检测

7. 总结

        本系统利用数据挖掘、机器学习算法挖掘影响客户满意度的重要因素,最优模型的测试集预测准确率达到 99.5%,同时构建可视化交互平台,方便对航空公司乘客满意度的在线评估预测,可给航空公司提供定制化策略,为每名乘客提供专属化服务,从而极大程度上提高乘客满意度。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python-数据挖掘实战案例

2. Python-深度学习实战案例

3. Python-管理系统实战案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL面试常见题目

SQL面试常见题目涉及多个方面,包括数据查询、数据操作、表的设计与优化等。以下列举一些经典的SQL面试题目,并附上解析答案: 1. 查询一张表中重复的数据 题目: 给定一个表 employees,包含 id, name, salary 列。如何…

SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(中)

修改Spring Security 登录验证模式 传统的验证登录模式 公开页面:输入url就可以直接访问授权页面:登录之后才可以访问 Jwt验证模式 容易实现跨域不需要在服务器端存储 对比于传统模式将所有的sessionId换成jwt token access token refresh token 过…

分发饼干00

题目链接 分发饼干 题目描述 注意点 1 < g[i], s[j] < 2^31 - 1目标是满足尽可能多的孩子&#xff0c;并输出这个最大数值 解答思路 可以先将饼干和孩子的胃口都按升序进行排序&#xff0c;随后根据双指针 贪心&#xff0c;将当前满足孩子胃口的最小饼干分配给该孩…

Android开发高频面试题之——Android篇

Android开发高频面试题之——Android篇 Android开发高频面试题之——Java基础篇 Android开发高频面试题之——Kotlin基础篇 Android开发高频面试题之——Android基础篇 1. Activity启动模式 standard 标准模式,每次都是新建Activity实例。singleTop 栈顶复用。如果要启动的A…

关于预处理的一系列问题

1. 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 2. #define定义常量 #define name stuff 如果定义的 stuff过⻓&#xff0c;可以分成⼏⾏写&#xff0c;除了最后⼀⾏外&#xff0c;每⾏的后⾯都加⼀个反…

win10下使用docker、k8s部署java应用

在上一篇文章 Windows10上Docker和Kubernetes的安装 中&#xff0c;已经介绍了在 Windows10上安装Docker和Kubernetes &#xff0c;有了这个环境基础之后&#xff0c;就可以用来部署服务了 在项目目录下新建Dockfile文件&#xff0c;内容如下&#xff08;请根据实际情况调整&am…

前端——阿里图标的使用

阿里图标 将小图标定义成字体&#xff0c;通过引入字体的方式来展示这些图标 1.打开阿里图标库 https://www.iconfont.cn/ 2.登录 / 注册一个账号 3.选中你需要使用的图标 并且把它加入购物车 4.全部选择完之后 点击右上角 购物车 然后下载代码 5.解压后你下载的文…

Web+Mysql——MyBatis

MyBatis 目标 能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1&#xff0c;Mybatis 1.1 Mybatis概述 1.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由…

面试面经|大模型算法岗常见面试题100道

本文提供了一份全面的大模型算法岗位面试题清单&#xff0c;包括基础理论、模型结构、训练微调策略、应用框架、分布式训练和模型推理等方面的知识点&#xff0c;旨在帮助求职者准备相关技术面试。 一、基础篇 1、目前主流的开源模型体系有哪些&#xff1f; Transformer体系&a…

neo4j(spring) 使用示例

文章目录 前言一、neo4j是什么二、开始编码1. yml 配置2. crud 测试3. node relation 与java中对象的关系4. 编码测试 总结 前言 图数据库先驱者 neo4j&#xff1a;neo4j官网地址 可以选择桌面版安装等多种方式,我这里采用的是docker安装 直接执行docker安装命令: docker run…

zabbix“专家坐诊”第256期问答

原作者&#xff1a;乐维社区 原文链接&#xff1a;https://forum.lwops.cn/questions 问题一 Q&#xff1a;zabbix 6.4.18版本的&#xff0c;使用zabbix_agentd2监控mysql数据库&#xff0c;只能在界面配置mysql的相关信息吗&#xff1f;这个在zabbix表里面是明文存储的&#x…

力扣反转链表系列【25. K 个一组翻转链表】——由易到难,一次刷通!!!

力扣《反转链表》系列文章目录 刷题次序&#xff0c;由易到难&#xff0c;一次刷通&#xff01;&#xff01;&#xff01; 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段 题解224. 两两交换链表中的节点两个一组反转链表 题解325. K 个一组翻转…

在python爬虫中xpath方式提取lxml.etree._ElementUnicodeResult转化为字符串str类型

简单提取网页中的数据时发现的 当通过xpath方式提取出需要的数据的text文本后想要转为字符串&#xff0c;但出现lxml.etree._ElementUnicodeResult的数据类型不能序列化&#xff0c;在网上查找到很多说是编码问题Unicode编码然后解码什么的&#xff1b;有些是(导入的xml库而不…

Java : 图书管理系统

图书管理系统的作用&#xff1a; 高效的图书管理 图书管理系统通过自动化管理&#xff0c;实现了图书的采编、编目、流通管理等操作的自动化处理&#xff0c;大大提高了图书管理的效率和准确性。 工作人员可以通过系统快速查找图书信息&#xff0c;实时掌握图书的借还情况&…

【Java】Java中接口与内部类详解

目录 引言 一、接口&#xff08;Interface&#xff09; 1.1 接口的定义 1.1.1 接口的特点 1.2 接口的实现 1.3 接口的继承 1.4 接口的注意事项 1.5 代码示例 二、内部类&#xff08;Inner Class&#xff09; 2.1 内部类特点 2.2 成员内部类 2.2.1 对象的创建 2.…

红外热成像应用场景!

1. 电力行业 设备故障检测&#xff1a;红外热成像仪能够检测电气设备&#xff08;如变压器、电线接头&#xff09;的过热现象&#xff0c;及时发现并定位故障点&#xff0c;预防火灾等安全事故的发生。 水电站查漏&#xff1a;在水电站中&#xff0c;红外热成像仪可用于快速查…

【LLM学习之路】9月22日 第九天 自然语言处理

【LLM学习之路】9月22日 第九天 直接看Transformer 第一章 自然语言处理 自然语言处理发展史 只要看的足够多&#xff0c;未必需要理解语言 统计语言模型发展史 统计语言模型&#xff1a; 判断一个句子是否合理&#xff0c;就计算这个句子会出现的概率 缺点是句子越长越…

掌握Python办公自动化,轻松成为职场高效达人

大家好&#xff0c;今天我们来聊聊为什么要学习和了解Python办公自动化&#xff1f; "自动化应用于高效运营将提高效率" ——比尔盖茨 在日常的工作中&#xff0c;存在很多重复性、规律性的工作。虽然现在有很多办公软件能够在一些方面提高工作效率&#xff0c;但无法…

基于FPGA+GPU异构平台的遥感图像切片解决方案

随着遥感和成像技术的不断进步和普及&#xff0c;获取大量高分辨率的遥感图像已成为可能。这些大规模的遥感图像数据需要进行有效的处理和分析&#xff0c;以提取有用的信息&#xff0c;进行进一步的应用。遥感图像切片技术应运而生&#xff0c;该技术可以将大型遥感图像分割成…

python-在PyCharm中使用PyQt5

文章目录 1. 安装 PyQt5 和QtTools2. QtDesigner 和 PyUIC 的环境配置2.1 在 PyCharm 添加 Create Tools2.2 添加 PyUIC 工具 3. 创建ui界面4. 使用python调用ui界面参考文献 1. 安装 PyQt5 和QtTools QT 是最强大的 GUI 库之一&#xff0c;PyQt5 是 Python 绑定 QT5 应用的框…