2017-JDD京东金融算法大赛12th解决方案

赛题

训练数据包含2017-04-30日之前270天之内若干店铺的每日订单量、销售额、顾客数、评价数、广告费用等数据,下架时间在2017-04-30之后或者未下架的商品数据,以及这些店铺2016年6月-2017年1月每月末后90天内的销售额。

通过竞赛数据中店铺过往的销售记录,商品信息,商品评价,以及广告费用等信息来建立预测模型,预测店铺未来90天内的销售额。

赛题分析

  • 这是个时间序列问题,时间滑窗的选择是关键点。
  • 数据是真实数据,难免会存在刷单、特殊节日、店铺停业等等特殊情况
  • 不同店铺销量波动水平可能不同
  • 特征的选择按照商品特征、订单特征、评价特征、交叉特征、销售额和下架分别构造特征

数据处理

刷单行为

通过DEA发现存在刷单行为,通过’>本月销售中位数*10(根据线上选出的阈值)’判断删除该日订单

活动促销

双十一和618(因为双11不存在最终训练集里面,所以不用考虑训练集的影响。但是6.18在预测集里面,这里考虑用双11修正618的销量。具体挑出11月份销量波动大的店铺,计算修正系数,预测完相应店铺称该修正系数)

特殊月份

过年、情人节等,EDA发现影响不大,故不作考虑

下架商品

某些店铺会在短时间内下架大量的商品

特征部分

商品、订单、评价(取平均的时候是按照有效评论日期取平均)、交叉特征、销售以及下架特征。(主要以本月为主部分特征加入前几个月的相关统计特征)

后来发现销售额有关特征重要性很强,于是又添加了额外的钱有关的本月统计有关特征(本月后三、二、一周)

特征部分实在是无法回忆清楚了,这个比赛来来回回构建了许多类似特征,特征的增减也是根据线上表现大刀阔斧地一群一群增删。下面写一下大致思路,不是所有特征都构建三个月的统计特征,印象中总销售、总订单量之类的总量特征会添加上月、上上月、上上上月的总量统计特征以及三月平均特征。平均数特征方面几乎没有构造统计特征。

商品特征

  • 在售总商品数
  • 平均每个商品的订单量
  • 平均每个商品的实际销量
  • 平均每个商品的退货订单数
  • 未售商品占总商品的比例

订单特征

  • 总销售金额
  • 平均每个订单销售金额
  • 总优惠金额
  • 平均每笔订单优惠金额
  • 总优惠金额占总销售金额比
  • 总订单量
  • 总退货订单量
  • 总实际订单量
  • 总退货订单金额
  • 退货金额占总销售额金额的比
  • 总实际销售金额
  • 平均每笔订单实际销售金额
  • 总顾客数
  • 平均每个顾客的订单量
  • 平均每个顾客的购买金额
  • 平均每个顾客的退货订单数
  • 平均每个顾客的退货金额
  • 总优惠笔数
  • 总优惠金额占总退货金额比例
  • 平均每笔订单总优惠金额占总退货金额比例
  • 平均每笔优惠金额
  • 平均销售金额增长率(每个月和前一个月算增长率,所有增长率取平均)
  • 平均订单量增长率
  • 平均退货订单增长率
  • 平均退货金额增长率

评价特征(取平均的时候是按照有效评论日期取平均)

  • 总好评数
  • 总中评数
  • 总差评数
  • 总评论数
  • 平均好评数
  • 平均中评数
  • 平均差评数
  • 好评率
  • 差评率
  • 中评率
  • 平均好评率增长率

交叉特征

  • 平均每个月的充值广告费用占总销售金额比
  • 平均每个月的充值广告费用占实际销售金额比
  • 平均每个订单的好评率
  • 平均每个订单的差评率
  • 平均每个订单的好评数
  • 平均每个订单的差评数

销售额和下架特征

  • 总销售额
  • 当月销售额
  • 前一个月总销售金额
  • 前两个月总销售金额
  • 前三个月总销售金额
  • 前一个周总销售金额
  • 前两个周总销售金额
  • 前三个周总销售金额
  • 前一个月下架商品数
  • 前两个月下架商品数
  • 前三个月下架商品数
  • 最近一周下架商品数

一开始加的特征比较多,因为效果还不错吧,所以也没有根据线上去判断一下哪些特征是否有用,而且这个比赛想构建一个比较稳定的线下验证是非常困难的,因为销量波动还是比较大的,所以到最后我还没构建出合理的线下验证集,更多的时候是以线上来验证我的一些想法。根据特征的重要性来看,跟销售金额有关的特征比较强一些,某些特征重要性非常低但是我也没删除。

模型训练

这部分没什么可说的,就是这次比赛数据量较少,只有3000条,相对而言特征维度较高,模型着重调整了正则化部分,防止过拟合

后处理

某些店铺销量变化巨大,所以想到通过方差筛选出波动比较大的店铺,该店铺在预测完成之后单独处理,规则是,把最后一个90天,除以每家店铺上个月的销量,再将这个值取平均,结果是2.7左右,所以这个规则就是每个店最后一个月销量×2.7,这是规则基础版,同时可以根据每个月不同销量修改参数,例如(3月×0.2+4月×0.8)*2.7。

另外这次比赛不同模型预测结果差异很大,模型融合效果显著稳定上分。

$0.2lgb+0.8xgb$

0%