二手车价格预测全流程实战:从数据探索到模型融合的完整指南
一个适合新手的、可复现的机器学习项目实战,带你一步步构建高精度二手车价格预测模型
📚 文章目录(点击可跳转)
- 一、项目概览:我们要解决什么问题?
- 二、第一站:数据探索(EDA)- 揭开数据的面纱
- 三、第二站:数据预处理 - 构筑坚实的数据基础
- 四、第三站:特征工程 - 从数据中挖掘"黄金"
- 五、第四站:多模型训练 - 构建三位一体的预测核心
- 5.1 CatBoost:类别特征处理大师
- 5.2 LightGBM:速度与精度的平衡者
- 5.3 XGBoost:稳定可靠的性能基石
- 六、第五站:模型融合 - 实现 1+1+1 > 3
- 七、最终成果:融合带来显著提升
- 八、项目工具箱:关键文件与脚本概览
- 九、未来征途:探索性能优化的新前沿
- 十、结语
一、项目概览:我们要解决什么问题?
二手车价格预测是一个经典的回归预测问题,目标是根据车辆的品牌、型号、使用年限、配置等多个特征,预测其市场价格。本项目采用MAE(平均绝对误差)作为评价指标,最终通过三模型加权融合,将 MAE 降至约470.39,相比单模型有明显提升。
无论你是机器学习初学者,还是希望系统实践一个完整项目的开发者,这个项目都能为你提供一个清晰的路线图和可复现的代码框架。
二、第一站:数据探索(EDA)- 揭开数据的面纱
数据探索是所有机器学习项目的第一步,目标是理解数据、发现问题、把握方向。
🔍 核心发现:
- 目标变量呈长尾分布:价格
price严重右偏,直接建模效果不佳,后续需进行对数变换(log1p)。 - 高相关性特征:匿名特征
v_0、v_3、v_8、v_12与价格相关性超过 0.65,是关键预测因子。 - 隐藏的缺失值:
notRepairedDamage列中的"-"实际上是缺失值,需转换为NaN再处理。 - 明显的异常值:
power列存在 600+ 的极端值,需进行截断或修正。
🛠 可执行提示:
你可以使用以下提示词快速开始EDA:
“请对数据集进行探索性数据分析(EDA),分析每个字段的分布、缺失值情况,并计算特征与目标变量 price 的相关性。将关键发现总结出来。”
三、第二站:数据预处理 - 构筑坚实的数据基础
目标是生成一份清洁、完整、可供特征工程使用的数据集。
📦 核心处理流程:
- 合并数据:将训练集(15万条)与测试集(5万条)合并,确保所有转换一致。
- 处理缺失与异常:填充缺失值,对
power列进行异常值截断。 - 内存优化:转换数据类型(如
int32、float32),减少内存占用。
📁 产出文件:
train_data_clean.csv— 经过基础清洗后的完整数据集。
🛠 AI 提示词示例:
“基于 EDA 发现,请编写一个数据预处理脚本。合并训练集和测试集,处理 notRepairedDamage 的值,并对 power 列进行异常值截断。最后优化数据类型以减少内存占用。”
四、第三站:特征工程 - 从数据中挖掘"黄金"
特征工程是提升模型性能的关键步骤,目标是从原始数据中构造出信息量更丰富的特征。
🧠 核心策略:
- 时间特征:从
regDate和creatDate提取车龄、注册月份等。 - 交叉组合特征:如
brand+model组合成新特征。 - 统计特征:对匿名 V 系列特征计算均值、最值等;按品牌统计价格均值、中位数等。
⚠️ 防泄露原则:
所有统计特征必须在训练集上计算,再应用到测试集,避免信息泄露。
🛠 AI 提示词示例:
“请创建一个特征工程脚本。输入 train_data_clean.csv,生成时间特征、V系列统计特征、类别交叉特征和基于brand的统计编码特征。确保所有统计编码都基于训练集计算以防止泄露。最后保存为 data_with_advanced_features.csv。”
📁 产出文件:
data_with_advanced_features.csv— 包含所有原始特征与新构建特征的数据集。
五、第四站:多模型训练 - 构建三位一体的预测核心
我们选择了三个主流梯度提升模型进行训练,利用它们的多样性提升最终融合效果。
📐 统一的训练协议:
- 5折交叉验证:使用相同的
random_state=42,确保预测结果可对齐。 - 目标变量变换:对
price进行log1p变换,预测后再通过expm1还原。 - 负值处理:使用
np.clip(pred, 10, None)防止出现负价格。
5.1 CatBoost:类别特征处理大师
- 核心优势:原生支持类别特征,无需手动编码。
- 输入:
data_with_advanced_features.csv - 预期性能:单模 OOF MAE ≈ 480
5.2 LightGBM:速度与精度的平衡者
- 关键差异:需对类别特征进行标签编码(Label Encoding)。
- 预期性能:单模 OOF MAE ≈ 500
5.3 XGBoost:稳定可靠的性能基石
- 关键差异:同样需要标签编码。
- 预期性能:单模 OOF MAE ≈ 495
六、第五站:模型融合 - 实现 1+1+1 > 3
我们采用加权平均融合,通过两步优化法寻找最优权重组合:
🔧 两步权重优化法:
- 随机搜索:在权重空间中随机采样,快速找到表现较好的初始权重。
- SLSQP 精确优化:以随机搜索结果为起点,使用
scipy.optimize.minimize进行数学优化,找到局部最优解。
📥 输入文件:
oof_predictions_catboost.csvoof_predictions_lightgbm.csvoof_predictions_xgboost.csv- 及各模型的测试集预测文件
🛠 AI 提示词示例:
“请编写一个模型融合脚本。加载三个模型的 OOF 和测试集预测。先用随机搜索寻找初始权重,再用 SLSQP 优化。最后用最优权重融合测试集预测,生成最终提交文件 submission_stacking_optimized.csv。”
七、最终成果:融合带来显著提升
| 模型 | OOF MAE |
|---|---|
| CatBoost 单模 | ~480 |
| LightGBM 单模 | ~500 |
| XGBoost 单模 | ~495 |
| 三模型加权融合 | ~470.39 |
融合后 MAE 相比最佳单模(CatBoost)降低了约 10 个点,验证了融合策略的有效性。
八、项目工具箱:关键文件与脚本概览
📜 核心脚本:
create_advanced_features.py— 特征工程train_catboost.py— 训练 CatBoosttrain_lightgbm_model.py— 训练 LightGBMtrain_xgboost_model.py— 训练 XGBooststacking_optimized.py— 模型融合
📁 关键数据文件:
train_data_clean.csv— 清洁数据data_with_advanced_features.csv— 特征工程后数据oof_predictions_*.csv— 各模型 OOF 预测submission_stacking_optimized.csv— 最终提交文件
九、未来征途:探索性能优化的新前沿
如果你希望进一步优化模型,可以尝试以下方向:
- 超参数优化:使用 Optuna、Hyperopt 进行贝叶斯搜索。
- 特征选择:基于特征重要性剔除冗余特征。
- 模型扩充:引入 NGBoost、TabNet 等新模型。
- 高级融合:从加权平均升级到 Stacking(元模型学习)。
- 伪标签技术:谨慎使用高置信度的测试集预测反哺训练。
十、结语
这个项目不仅是一个完整的机器学习实战案例,更是一个可扩展、可优化的基线系统。无论你是想学习完整的建模流程,还是希望在此基础上进行二次开发,它都能为你提供一个坚实的起点。