比赛链接 https://www.datafountain.cn/competitions/500
成绩A榜0.9933,B榜成绩0.9867
代码分为4个模块:
-
训练集清洗:
- 车号19,94碰撞标签为1,但训练集无此时间数据,标签修正为0;
- 车号5,36车速数据异常,判断标签数据对训练无用,标签修正为0;
- 车号77碰撞时间标签判断滞后,修正为13:37:12
-
规则预测模型:
- 对训练集和测试集数据进行清洗(见函数read_csv, col_feature1);
- 根据构造的特征电池包主负继电器状态cate,if_on,if_off,车速进行过采样;
- 对标签数据进行重采样(上下5s时刻同样视为碰撞数据)
- 根据瞬时加速度v_diff1,局部加速度v_diff2,瞬时速度差v_diff3进行规则预测,获得碰撞标签和碰撞时间,其中训练集获得碰撞标签1的车辆30台,测试集碰撞标签1的车辆45台;
-
LGBM预测模型:
- 剔除规则预测模型预测过的车号,对训练集和测试集数据进行特征工程(见函数col_feature2);
- 根据构造的特征电池包主负继电器状态cate,if_on,if_off,车速进行过采样;
- 对标签数据进行重采样(上下5s时刻同样视为碰撞数据)
- 训练数据分层抽样划分训练集和测试集,利用LGBM模型进行预测,获得碰撞标签和碰撞时间;
-
KNN时间预测模型:
- 由于2,3预测规则中,对标签时间进行了重采样,这一步进行精准时间预测,将训练集和测试集预测的时刻均修正到最近一个if_off=-5的时刻;
- 由于训练集时间分布均分布在if_off数据为-5,-4的时刻,这里将训练集中车辆碰撞时间在if_off=-5的时刻标注为1,其余车辆标注为0;
- 对训练集和测试集数据进行特征工程(见函数col_feature3);
- 对训练数据构建五折交叉验证的KNN模型,构建完成后预测测试集标注;
- 根据测试集预测的标注对测试集碰撞时间进行修正,得到最终结果。