在菜鸟—需求预测与分仓规划比赛上,“商品小A”团队获得了冠军。队长袁光浩分享了“商品小A”团队的数据探索以及算法实现过程。
零售数据分析的职责是根据客户的数据做客户的数据分析报告,客户可以基于报告得到的结论对商业决定做修正。
赛题背后的商业需求
按照官方的说法,对未来商品需求进行准确的预测,可以帮助商家自动化很多供应链过程中的决策。这些以数据驱动的供应链能够帮助商家大幅降低运营成本,提升用户的体验,对整个行业的效益提升起到一定作用。此时,大家可能有一个疑问,销售的带链呢?货品如果是很少的,意味着商家失去了销售的机会,这其实是一种隐性的损失。
数据探索
比赛提供的数据中,最引人注目的是,在20万商品里面最后出现的日期中最早的那一个,即2015年12月21日,这意味着这个商品在整个数据集里面是有效的,我们需要预测其在2016年年初的销量。根据销售时间和总量的分析,删除促销热的数据之后,发现其是递增的。这些数据为方案的决策起到了一定的作用。
其中,有一个商品A,经过2015年春节之后它就不再销售了,经过在同一个供应商找与A商品类似的商品,但是并没有找到,这在实际的应用中比较罕见。但是为什么出现这样的情况呢?这说明了数据脱敏做的非常好,商家将数据隐藏起来保障其权益,其他人难以通过数据追踪商家运营模式。最初的思路是按照我们的工作习惯,去寻找其主流商品,找到其搭配的商品,但是这种方法是基本做不到的。
另外一种情况,有一些商品的生命周期比较长,在2014年的年末和2015年的年末走势是比较相近的,我们可以利用这个特征来预测其下一年的销售情况。
数据分析预测
通过上述的数据探索,我们大致可以了解数据的构成。大部分商品是从2015年开始销售的,在2014年并没有留下太多对我们有用的信息。对于大量的数据,我们怎么挖掘信息?首先,可以通过时间序列来探测,但是可能损失一些重要的特征,比如相同种类的商品(同一商品,或者不同商家的)竞争关系就会丢失掉。
更优的做法是采用机器学习的方法。具体的做法是通过近期的销量情况,去研究此后两周销量总量的影响情况。我们需要建立预测模型,利用回归分析方法进行预测。我们需要专门针对数据集做一个分类,因为对于主力商品,商品的规划会特别关注商品的销售曲线,这些都人为可以控制的(通过价格等因素)。所以对于找出规律的这些商品,需要单独拿出来,因为剩下的大部分数据中还会有很多的噪声,如果一起训练的话会影响这部分商品的预测。对两部分商品分别做回归预测过程中,对双十一这种特殊的销售情形需要做一定的过滤。
特征曲线确定好之后,开始做数据深层的准备。在这个阶段同时进行的还有数据的处理,比如把缺失的数据用非聚划算销量算法补齐,过滤算法也是在这个阶段完成的。为什么要过滤掉具有波峰的数据?因为经过双十一之后,商家在一月初二月初做促销的可能性就会降低,虽然这不一定正确,但是在缺乏商家有效信息的情况下,选择一个保险的策略是正确的。
可以利用滑动窗口的方法创建训练集和验证集。创建验证集可以让我们有快速的方法验证我们的思路。我们把最后14天的非计划的数量值作为目标值,把之前14天的各种数据计算出来作为特征值,向前滑动14天。以此类推,做10个窗口。并且,还需要对任务空间产生的数据集做一次处理。首先对训练集进行训练,得到模型之后对验证集做一次预测。然后把预测不准的窗口从训练集删除,重新将其和验证集合并,对线上的测试指标做真正的预测。
最终采用的模型是线性回归和xgboost模型。分别建模、运算,然后对运行的结果做一个合并,根据验证集改变模型的权重。把分仓和母仓分别建模,因为有些商户做活动的时候是全国所有的仓库一起升一起降,有些商户是依次出现的,有些则是没有规律的,因此分别建模会比较好。