【Kaggle-House Price Prediction】-项目总结

项目对比(与之前工业蒸汽量预测项目相比):

相同点:

  1. 二者都属于回归问题,预测一个数值型的目标变量;
  2. 在数据预处理方面,两个项目均涉及到对于数据偏态的处理(为了更符合回归问题的正态性要求);
  3. 在模型选择上,两个项目几乎一样,都是先训练多个回归相关模型(核函数岭回归、Lasso、ElasticNet、Gradient Boosting Regression、XGBoost Regressor、LightGBM),然后采用简单模型平均或模型集成方法对多个基模型进行集成。

不同点(注意对不同点的理解一定要基于两个项目数据类型的差异上!工业蒸汽项目数据脱敏且全部为数值型;房价预测项目未脱敏,有数值有类别)(不同点主要体现在数据处理和特征工程上):

  1. 在异常值处理上,工业蒸汽项目对比了训练集与测试集在不同特征上的分布(该数据全部为数值型,因此可以这样做),删除了不同分布特征,对整体数据进行了标准化。房价预测项目仅仅做了简单的异常值删除(该数据特征有定型、有定量,不能进行前者的分布比较),但是在模型训练时运用了RobustScaler增强对异常值的免疫性。
  2. 在缺失值处理上,工业蒸汽项目数据脱敏且完整,因此不需要进行太多的缺失值处理。房价预测项目数据未脱敏且数据含许多缺失,因此需要根据变量描述理解每个特征的含义(业务理解)并根据每个特征的含义对缺失值进行填补。
  3. 在数据标准化上,工业蒸汽项目有对数据进行标准化。房价预测项目没有对数据进行标准化。
  4. 在数据偏态处理上,工业蒸汽项目没有对训练集的目标值进行偏态处理(这一点属于不完善点),对于其他特征采用对数与指数纠正偏态。房价预测项目对训练集对目标值进行了对数处理,对于其他数值型特征采用box-cox变换。
  5. 在特征选择上,工业蒸汽项目使用方差分析和单变量选择进行特征筛选。房价预测项目则是尽可能保留所有特征的信息(只删除了一个值全部相同的无区别特征)
  6. 在新特征生成上,房价预测项目基于对业务的理解,利用现有特征生成了新的特征;工业蒸汽项目为脱敏数据,无法理解数据含义,无法这样做。
  7. 在特征信息提取上,房价预测项目将部分数值型数据转化为类别型数据(如房屋出售年份、月份、建筑等级),对包含排序信息的类别型数据进行了LabelEncoder(保留排序信息价值),对不含顺序信息对的类别型数据进行dummy variable转换;工业蒸汽项目无类别型数据,无需这样做。

项目流程

  1. 导入相关库、导入训练集、测试集
  2. 由于该数据包含ID列,且预测结果需要标明ID。将train/test的ID列分别保存为新的DF:train_ID, test_ID,然后再删除train/test数据中的ID列
  3. 根据一个特征(房屋面积特征)与目标特征的散点图删除两个异常数据。
  4. 回归问题目标值可视化(分布图、QQ图)及偏态处理。该步骤可作为模版参考。
  5. 合并训练集与测试集,方便对特征统一处理。
  6. 特征与目标相关性可视化
  7. 计算各个特征缺失值率并可视化
  8. 基于特征理解对每个特征对缺失值进行填补。
  9. 某些数据看起来是数值型,其实表达的是类别含义(房屋等级、出售年份、出售月份),将这些数据转化成str类型。
  10. 对于包含排序信息的类别型变量,采用LabelEncoder进行处理。
  11. 基于现有的三个特征(地下室面积、一楼面积、二楼面积)生成新的特征(总面积)
  12. 找到所有数值型变量,计算他们的偏态。对偏态系数的绝对值大于0.75的特征进行box-cox变换。
  13. 对类别特征进行dummy variable转换。
  14. 定义k折交叉验证函数(指标为mse)
  15. 训练基模型,对于部分模型采用RobustScaler增强对异常值的免疫性。
  16. 用k折交叉验证函数对每个基模型进行评估。
  17. 定义模型普通平均类和模型集成类(二者都可以对多模型进行融合集成,前者是取简单的平均,后者是集成。该项目选择后者)
  18. 选择ElasticNet、GBoost、KRR为集成模型的base_models,选择lasso作为集成模型的meta_model,训练集成回归模型,并用k折交叉验证函数进行评估。
  19. 使用之前训练好的回归集成模型、XGBoost、LightGBM三个模型对测试集预测,将预测结果进行加权融合,得出最终结果。

你可能感兴趣的:(数据分析竞赛总结)