Awesome
CCF-农产品价格预测
赛题参见 - 赛题详情
赛题说明
- 使用2016年6月以前的农产品价格数据预测7月的农产品价格
成绩
- 复赛第2,我们就是
xjboost
队。。。
代码说明
- gen.py
- 生成特征
- model.py
- 各个单模型
- model_stacking.py
- stacking
代码就将就看吧。。 具体的数据集太大就没传上来
模型算法
-
训练集
- 选择了2016年6月1日往后30天+2016年5月25日往后一个月的全部数据作为训练集
-
测试集
- 线上测试集为2016年7月
-
特征
- 窗口统计特征(前1,2,3,4,7,14,21,30,60天)
- 6月1日(5月25日)的前x天农产品价格的平均值
- 6月1日(5月25日)的前x天农产品价格的最小值
- 6月1日(5月25日)的前x天农产品价格的标准差
- 考虑有部分数据缺失,对每个农产品,我们将数据先按照时间排序,然后加上了
- 6月1日(5月25日)的前x个非缺失的价格的平均值
- 6月1日(5月25日)的前x个非缺失的价格的最小值
- 6月1日(5月25日)的前x个非缺失的价格的标准差
- 6月1日(5月25日)的前x天有几天价格有缺失(缺失率)
- 日期特征 (没怎么用)
- 一个月的第x天
- 一周的第x天
- 一年的第x天
- 农产品的特征
- 6月1日(5月25日)距离该农产品第一次有价格记录过去了x天
- 6月1日(5月25日)距离该农产品最后一次有价格记录过去了x天
- 所有数据中该农产品最后一次出现的价格
- 窗口统计特征(前1,2,3,4,7,14,21,30,60天)
-
算法说明
-
一些简单的规则
- 如提交最后一次的价格线上评分就能达到 0.06088
-
直接使用模型的训练效果仅为0.12左右还不如简单的规则
-
考虑到评价标准是MPSE,我们首先对label进行 log transformation 即$y\prime = log(x+1)$,预测后再使用$y^{predict} = exp(y\prime) - 1$变换回来
- 但是效果提升不大
-
考虑大部分回归模型的目标函数都是MSE的,label较大的对于误差的影响显然更大一些;而本题的评价函数是MPSE,label较小的更容易带来误差
- 于是我们对训练样本设置了权重,$weight_i = \frac{1.0}{y^_iy^*_i}$,线上效果明显提升(0.05)
-
模型融合
- 我们将LinearRegression、Xgboost、RandomForest的结果进行加权融合
- 有一定的提升(0.047)
- 我们将LinearRegression、Xgboost、RandomForest的结果进行加权融合
-
简单的规则
- 有部分农产品的价格非常稳定(波动非常小),我们就直接选取其最后一次非缺失的平均价格作为7月每一天的价格作为预测结果
- 同样也有一些提升(0.045)
- 有部分农产品的价格非常稳定(波动非常小),我们就直接选取其最后一次非缺失的平均价格作为7月每一天的价格作为预测结果
-