解决的问题是给每个灾后建筑提出不同的修复指导建议(无需处理、小规模修复、大规模修缮、重建)
比赛提供了lightGBM和朴素贝叶斯两种公开的标杆算法。本文是基于公开的lightGBM标杆算法的基础上进行优化二次优化,目前排名40。
从标杆算法准度0.78856到0.79571
本文的优化步骤分为三步:
1、数据处理
2、特征选择
3、调参
(一)、数据处理
1.1数据结构
首先,让我先来了解一下数据结构。

优化第一步是要对数据进行一定处理,方便我们可以选择对应的数据或者特征值进行预测
【代码】

info()函数说明:
功能:用于给出样本数据的相关信息概览 :行数,列数,列索引,列非空值个数,列类型,内存占用
使用格式:data.info()
【分析】运行效果如下:有652936个观测值,没有缺失值

接下来检查是否存在重复值
【代码】

输出结构是0,不存在重复值。
基于标杆算法的思想,我们这里引入两个特征,floor_decline和height_decline,用地震前的高度(楼层)减去地震后的高度(楼层)所生成的新的变量。

1.2异常值处理
地震前后的楼层高度应该是有变化的,或者是不变的,不可能存在地震后的楼层高度比地震前的楼层高度还要高,在此处表达为height_before>=height_after和floor_before>=floor_after,因此我对不满足条件的数据进行筛选并删除掉。
【代码】

运行结果如下

我们可以看到删掉了3360条数据。
我们也可以用均值或者众数中位数等数据来替代异常值,我此处选的的删掉异常值。大家也可以采取不同的方法进行尝试。data.loc()可以来进行处理
1.3离群值处理
【介绍】
在建模预测之前,我们先对离群值进行处理。根据正态分布的3sigma原则,我们将在3sigma之外的数据进行删除。3sigma原理可以简单描述为:若数据服从正态分布,则异常值被定义为一组结果值中与平均值的偏差超过三倍标准差的值。即在正态分布的假设下,距离平均值三倍(为标准差)之外的值出现的概率很小,因此可认为是异常值。样本数目足够大认为近似服从正态分布。
【代码】

通过代码我们删掉了异常值,我们查看一下删除前后的数值对比。

1.4分类特征处理
由最开始的数据结构我们可以看出存在很多分类特征,比如ground_floor_type、land_condition等,我们可以采用独热编码的方式来对分类特征进行处理。(此处基于标杆算法的处理思路)
【代码】

以position_attached为例,独热编码结果如下

(二)、特征选择
2.1整体相关性分析
根据以上的数据处理之后,我们发现仍然存在很多的特征,那么这些特征是否都对我们的预测起到一定的作用呢?答案肯定不是。那么我们可以通过绘制热力图的方式来查看各个特征之间的相关性,删除相关性差的特征来进行更好地预测。
【代码】

运行结果如下

【分析】
1、我们可以看出district_id、floor_before等变量与y的相关性较弱,那我们将这些特征删除进行最后的特征选择。(此处选择删掉相关性小于0.2的特征)。
2、此处我们可以看出标杆算法所引入的height_decline和floor_decline的相关与预测结果相关性较高。
3、我们可以看出floor_after与height_after具有强烈的相关性。这和我们的常识相符,这两个预测变量存在强共线性,应该考虑删去一个。
【代码】

基于以上的选择,我们最终选择了age、floor_decline、height_decline、height_after四个特征进行预测
(三)调参
首先我们来了解lightGBM的参数调整有哪些

3.1用gridSearchCV调参
关于调参的细节可以查看链接:关于lightGBM和gridsearchcv的参数调整
首先我们要初始化我们的模型,即给lightGBM的参数传值,基于gridsearchcv来调参
【代码】

我们处理的多分类问题,故此处选择的评价标准采用"accuracy",其他的相关参数在链接可以查看,此处不赘述。

初始化完我们的模型之后,我们每次选择两个或者一个参数来进行调参。虽然不能保证达到全局最优,但是至少满足局部最优。这对我们的选取的调参组合就有了一定要求,尽量选择相互独立的参数为一个组来进行调参。
3.2调参结果
【介绍】lightGBM根本上来讲是决策树。可以固定树的不同深度,对其他参数调整,返回准确度最好的组合,作为最优参数组合。调参的大体思路大体分为7步针对12个参数进行调参。具体参考链接。以下是我的调参表:
