本项目使用多种机器学习算法对航空公司乘客满意度进行二分类预测。通过分析乘客的基本信息、飞行体验、服务质量等多个维度的特征,构建了多个预测模型,并进行了详细的性能比较和特征工程分析。
- 训练集: 103,904 条记录
- 测试集: 25,976 条记录
- 特征数量: 23个特征
- 目标变量: 满意度 (Satisfied/Dissatisfied)
- 数据平衡性: 满意乘客占56.67%,不满意乘客占43.33%
- 乘客基本信息: 性别、年龄、客户类型、出行类型
- 飞行信息: 舱位等级、飞行距离、延误时间
- 服务质量评价: 在线服务、机上服务、座位舒适度等多项评分
airline-passenger-satisfaction-prediction/
├── src/ # 源代码目录
│ ├── main.py # 主程序文件(数据加载和预处理)
│ ├── models.py # 机器学习模型实现
│ └── feature_engineering.py # 特征工程模块
├── data/ # 数据目录
│ ├── train.csv # 训练数据
│ └── test.csv # 测试数据
├── results/ # 结果目录
│ ├── figures/ # 图片结果
│ ├── models/ # 模型文件
│ └── model_performance_summary.csv # 性能汇总
├── docs/ # 文档目录
├── run_analysis.py # 主运行脚本
├── requirements.txt # 依赖包列表
└── README.md # 项目说明
本项目实现了以下机器学习算法:
- 核函数: RBF核
- 超参数优化: 网格搜索和随机搜索
- 最佳参数: C=10, gamma=0.1
- 性能: 精确率95.23%, F1分数94.19%, 召回率93.17%
- 网络结构: 15-20个神经元的隐藏层
- 激活函数: tanh
- 优化算法: SGD
- 性能: 精确率96.54%, F1分数94.15%, 召回率91.89%
- K值: √n = 322 (基于训练集大小)
- 距离度量: 欧几里得距离
- 性能: 精确率95.31%, F1分数87.61%, 召回率81.07%
- 算法: CART算法
- 剪枝: 成本复杂度剪枝 (ccp_alpha)
- 性能: 精确率92.10%, F1分数92.49%, 召回率92.88%
- 树的数量: 100棵
- 特征选择: log2
- 性能: 精确率97.13%, F1分数95.31%, 召回率93.56%
- 目标函数: 二分类逻辑回归
- 性能: 在特征重要性分析中表现优异
- 保留方差比例: 95%
- 主成分数量: 根据数据自动确定
- 结果: PCA降维后模型性能略有下降,说明原始特征均包含重要信息
- 方法: 基于随机森林和XGBoost的特征重要性
- 阈值: 2%
- 重要特征:
- Online boarding (在线登机服务)
- Type of Travel (出行类型)
- Inflight wifi service (机上WiFi服务)
- Business class (商务舱)
根据分析结果,最重要的特征包括:
- Online boarding - 在线登机服务
- Type of Travel - 出行类型
- Inflight wifi service - 机上WiFi服务
- Business class - 商务舱等级
- 缺失特征: Arrival Delay in Minutes (到达延误时间)
- 处理方法: 用0填充(基于该特征的数据分布特征)
- 分类变量: 使用虚拟变量编码
- 性别: Male=1, Female=0
- 客户类型: Loyal Customer=1, disloyal Customer=0
- 出行类型: Business travel=1, Personal Travel=0
- 舱位等级: 独热编码 (Business, Eco Plus, Eco)
- 方法: Min-Max标准化
- 目的: 确保所有特征在同一量纲上
| 模型 | 准确率 | 精确率 | 召回率 | F1分数 |
|---|---|---|---|---|
| Random Forest | 0.9571 | 0.9713 | 0.9356 | 0.9531 |
| MLP | 0.9445 | 0.9654 | 0.9189 | 0.9415 |
| SVM | 0.9402 | 0.9523 | 0.9317 | 0.9419 |
| KNN | 0.8798 | 0.9531 | 0.8107 | 0.8761 |
| Decision Tree | 0.9288 | 0.9210 | 0.9288 | 0.9249 |
- 最佳模型: 随机森林在整体性能上表现最佳,准确率达到95.71%
- 特征重要性: 在线登机服务是最重要的预测特征
- 数据质量: 原始数据特征均包含有用信息,PCA降维会导致性能下降
- 业务洞察:
- 商务出行乘客满意度更高
- 在线服务体验对满意度影响最大
- 舱位等级与服务质量的关联性强
- Python 3.7+
- 所需包见 requirements.txt
pip install -r requirements.txt完整分析 (推荐):
python run_analysis.py⏱️ 预计运行时间: 30-60分钟 (取决于硬件配置) 📊 包含6个模型的完整训练和特征工程分析
快速演示:
python simple_demo.py⏱️ 预计运行时间: 1-2分钟 🎬 演示训练进度提示,只训练1个快速模型
测试项目:
python test_project.py⏱️ 预计运行时间: 1-2分钟 ✅ 验证项目是否正常工作
使用保存的模型:
python use_saved_models.py📂 检查和使用已保存的模型进行预测 🔮 演示如何加载模型并进行预测
项目现在包含详细的训练进度提示:
- 🎯 阶段进度: 显示当前执行的分析阶段
- ⏰ 时间信息: 显示开始时间、耗时和完成时间
- 📊 模型进度: 显示当前训练的模型和参数
- 🔍 超参数搜索: 显示网格搜索和随机搜索的进度
- ✅ 完成状态: 每个步骤完成时显示耗时和结果
项目现在支持自动保存训练好的模型:
- 💾 自动保存: 训练完成后自动保存所有模型到
results/models/目录 - 📂 分类保存: 按数据类型分类保存(原始数据、PCA、特征选择等)
- 🔄 模型加载: 支持加载保存的模型进行预测
- 🎯 便捷使用: 提供
use_saved_models.py脚本演示模型使用
original_*_model.pkl- 原始数据训练的模型pca_*_model.pkl- PCA降维后训练的模型rf_selected_*_model.pkl- RandomForest特征选择后的模型xgb_selected_*_model.pkl- XGBoost特征选择后的模型
- SVM (支持向量机)
- MLP (多层感知机)
- KNN (K近邻)
- DecisionTree (决策树)
- RandomForest (随机森林)
- XGBoost (梯度提升)
# 数据预处理
python src/main.py
# 模型训练
python -c "from src.models import MLModels; print('模型模块加载成功')"
# 特征工程
python -c "from src.feature_engineering import FeatureEngineering; print('特征工程模块加载成功')"correlation_heat_map.png- 特征相关性热力图*_confusion_matrix.png- 各模型混淆矩阵pca_components_loadings.png- PCA主成分载荷图*_feature_importance.png- 特征重要性排序图*_hyperparameter_search.png- 超参数搜索热力图
model_performance_summary.csv- 模型性能汇总表feature_importance_ranking.xlsx- 特征重要性排序表
original_*_model.pkl- 原始数据训练的模型文件pca_*_model.pkl- PCA降维后的模型文件rf_selected_*_model.pkl- RandomForest特征选择后的模型文件xgb_selected_*_model.pkl- XGBoost特征选择后的模型文件
- 模块化设计: 代码结构清晰,易于维护和扩展
- 完整流程: 从数据预处理到模型评估的完整机器学习流程
- 多算法对比: 实现了6种主流机器学习算法
- 特征工程: 包含PCA降维、特征选择等高级技术
- 可视化分析: 丰富的图表展示分析结果
- 性能优化: 使用网格搜索和随机搜索进行超参数优化
- 模型持久化: 自动保存和加载训练好的模型
- 进度监控: 详细的训练进度提示和时间统计
- 便捷使用: 提供多种运行方式和演示脚本
本项目展示了完整的机器学习项目开发流程,包括:
- 探索性数据分析 (EDA)
- 数据预处理和特征工程
- 多种机器学习算法实现
- 模型性能评估和对比
- 业务洞察和结果解释
- 深度学习: 尝试使用神经网络进行更复杂的特征学习
- 集成学习: 探索更多集成学习方法
- 特征工程: 创建更多衍生特征
- 超参数优化: 使用更先进的优化算法
- 模型解释: 增加模型可解释性分析
本项目仅供学习和研究使用。
如有问题或建议,欢迎提出Issue或Pull Request。