SberbankRussianHousingMarket数据挖掘比赛总结
一、 实验准备
实验环境如下所示:
- 系统:Mac OS X 10.9.5;处理器为 Intel Core i7 @ 2300 MHz;内存容量为 16 GB;
- 编程语言为 Python 2.7;
- 编程环境使用 Jupyter Notebook。
采用pip install这一操作来完成对必要软件组件的安装过程,并参考TA提供的requirements.txt文件作为指导文档。完整的安装命令如下所示:$ pip install -r requirements.txt
二、 比赛探索
1. 比赛目标
利用房屋的基础数据和宏观经济数据预测房价(price_doc)。
2. 数据集
train.csv
test.csv
macro.csv
数据集带有时间戳(timestamp),训练集和测试集按时间划分 201108-201506/201507-201605
3. 认识数据
① 缺失值情况(引用)
② 房价曲线(引用)
③ 数据错误
state 中 33
build_year 20052009 / 4965…
floor/max_floor 0
price_doc 的outlier
该数据集包含若干明显的问题,并非无 fix 可寻;通过纠正这些问题有助于提升模型性能;这也是特征工程中不可或缺的关键环节。
房屋内部数据 total living area residential area...
人口数据 total population minority population working population...
学校数据 enrolled in school enrolled in pre-school...
地理位置数据 以km结尾的各种位置参数...
宏观经济数据 来自macro.csv
理解数据含义,合理分组,有利于后面的特征工程。
⑤ 特征重要性(引用)
认识特征重要性,对后面选取好的特征进行特征工程非常重要。
三、 特征工程
1. 数据清洗
对错误的数据进行修正,合理填补缺失值。
2. 交叉验证(CV)
① 随机直接交叉验证的效果欠佳。原因包括数据存在时间戳特征以及训练集样本分布不均衡。
② 采用2011-2014年的数据作为历史信息来预测2015年的结果具有良好的逻辑性和说服力。
③ 通过降低采样率可以使得交叉验证结果与 leaderboard 分数接近。
3. 额外数据集
① 地理位置信息
② 主办方提供的数据修正
4. 相关性分析(引用)
5. PCA结果(引用)
6. 利用InvestmentType将数据划分成两部分,分别使用模型(参考)
这一项创新思路是由最后一名参赛者展示的。这两种类型间的房价差距显著存在,在采用两种不同的模型进行训练后能够获得更为优异的效果。
四、 模型融合
1. Stacking(引用)
原理采用基本的stacking模型, 实现在后面的代码块中。
基模型采用xgboost作为核心算法。主要采用了两种策略进行集成学习:其一是通过结合多个不同的基础模型来提升预测性能,在具体实现中涉及xgboost、randomForest、KNN、AdaBoost以及ExtraTrees等主流算法;其二则是采用多轮xgboost模型叠加的方式,并通过设定不同的随机种子和微调参数来增强泛化能力。其中第一种集成方案由于未进行深入的优化调参工作而导致提升效果有限;而第二种方法虽然同样基于xgboost框架但通过引入随机机制显著改善了整体性能表现。
Stacking使得我的模型更加stable,降低overfit的可能。
2. Voting
根据各模型提交的结果经过加权计算,并对预测结果进行了相应的调整后得到的这个模型代表了我的privateLB最高得分0.31478
这个分数在排行榜可以排到78名。
五、 实验总结
经过这次竞赛活动我对数据挖掘领域有了更深的认识并体会到了不断学习探索的重要性未来我也将继续深入研究这一领域不断挑战不同类型的比赛以积累更多的实战经验同时也会更加注重提升自己的编程能力和算法素养努力形成一套属于自己的分析框架和工作流程逐步构建属于自己的竞赛 pipeline
六、 参考文献
A Comprehensive Analytical Examination of Sberbank
简单探索笔记本 - Sberbank
The runner-up's approach has achieved a significant level of success, as evidenced by their detailed analysis and innovative strategies in the Kaggle competition platform where they actively participated
初次参赛时,在Kaggle上达到前十名的方法是什么?
我的代码存储位置
https://github.com/ClimberPG/SberbankRussianHousingMarket
