如果你是做毕设,方向选了数据分析加机器学习,又不想一上来就碰深度学习那种动辄几万参数、调参调到头皮发麻的模型,那“基于随机森林的飞机旅客满意度数据分析与可视化”这个选题,性价比确实高。我去年带过几届学生做类似题目,最后发现这类项目真正拉开差距的地方,不在模型本身,而在三件事:数据预处理干不干净、特征解释深不深入、可视化有没有能搬上答辩现场的展示效果。这篇文章我会把一个完整可复现的项目链路拆开讲,从数据集长什么样开始,到随机森林怎么调参,再到可视化大屏怎么做,最后落到论文整合和答辩准备上,尽量把关键步骤和跳过会踩坑的地方都说到位。
1. 为什么用随机森林来啃旅客满意度这个题目
1.1 这个题目到底在解决什么问题
说白了,航空公司关心的是这么一件事:旅客为什么会觉得服务不好?是座位太挤,还是网上值机流程太繁琐,又或者是行李处理太慢?如果能把不满意的那批旅客背后共同的特征找出来,航司就能按优先级去改服务,而不是眉毛胡子一把抓。
机器学习在这里的角色,就是根据历史问卷数据,训练一个分类模型,输入是旅客的年龄、舱位、飞行距离、各项服务评分等维度,输出是“满意”还是“不满意”。模型训练完之后,我们不只是要一个预测结果,更想要的是模型给出的“特征重要性”——也就是哪些因素最影响满意度。这恰好是随机森林的强项。
整个项目的输出通常是三样东西:一个能跑通的预测模型、一份特征重要性分析报告、一套可视化展示页面。论文和答辩PPT都围绕这三样展开,逻辑非常顺。
1.2 数据集的基本盘和核心字段
做这个题目,最常见的公开数据集源于某平台上的航空公司旅客满意度问卷数据,我用下来的感受是:它就像是为毕业设计量身定做的一样,规模不大不小,字段覆盖全面,脏数据也够练手。最常用的版本大约有2.6万条记录,20多个字段,标签列是满意度,只有两类:满意、中性或不满意。
核心特征可以分成三组:
- 旅客基础属性:性别、年龄、客户类型(忠诚旅客还是非忠诚)、旅行类型(商务出行还是个人出行)、舱位等级(经济舱、舒适经济舱、商务舱)。
- 航班相关:飞行距离、出发延误分钟数、到达延误分钟数。
- 服务体验评分:机上WiFi、在线预订便利度、登机服务、座位舒适度、机上娱乐、机上餐饮、行李处理、值机服务、机上服务、清洁程度等,大部分是1到5分的打分项。
1.3 选随机森林而不是深度学习的三点理由
我见过一些学生上来就说“毕设要用深度学习”,结果拿这个数据跑了个多层神经网络,最后的精度和随机森林差不多,但解释性差了一大截。这个数据集用深度学习的收益非常有限,原因有三点:
第一,样本量只有2万多条,深度学习在这个规模下优势很小,反而容易过拟合。第二,这个数据集的字段大多是问卷打分和类别变量,显式特征已经比较充分,不需要神经网络去自动提取复杂结构。第三,也是最关键的,毕业设计答辩时,随机森林可以直接输出特征重要性,你可以指着图表告诉评委“在线预订方便度是影响满意度的第三大因素”,而神经网络的权重解释起来绕一大圈还说不清楚。
所以结论是:用随机森林做主体模型是合理的,深度学习顶多作为对比实验锦上添花。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据的“脏乱差”处理:决定模型上限的那一步
2.1 缺失值:到达延误那几百条空缺别急着删
这个数据集里最容易踩的坑,是“到达延误”字段存在缺失。具体数量每个版本略有差异,我遇到过300多条、也有接近400条的情况。很多新手一上来就 dropna(),把缺失值所在的行全删掉,这其实很亏。因为缺失到达延误的行,出发延误可能是完整的,而且这两个延误时间之间存在很强的相关性——航班出发晚了,到达大概率也晚。你把这行删了,等于白白丢了其他十几个字段的有效信息。
我的处理思路是分两步:
python复制import pandas as pd
df = pd.read_csv('airline_passenger_satisfaction.csv')
# 第一步:用出发延误填充同一条记录的到达延误
mask = df['Arrival Delay in Minutes'].isnull()
df.loc[mask, 'Arrival Delay in Minutes'] = df.loc[mask, 'Departure Delay in Minutes']
# 第二步:仍然缺失的,用到达延误的中位数兜底
remain_missing = df['Arrival Delay in Minutes'].isnull()
df.loc[remain_missing, 'Arrival Delay in Minutes'] = df['Arrival Delay in Minutes'].median()
这里有个细节值得写进论文:为什么不用均值兜底?因为延误数据的分布是严重右偏的——大部分航班延误时间很短,少数航班延误很久,均值会被极端值带高。用中位数对
