在这篇文章中,我们将讨论针对Utkonos在线大卖场的ML试点研究,我们在其中预测了易腐商品的回购。 同时,我们不仅考虑了存货余额数据,还考虑了包括周末和节假日甚至天气的生产日历(炎热,降雪,下雨和冰雹只不过是塔夫脱三天气,对客户而言并不重要)。 例如,现在我们知道,“神秘的俄罗斯灵魂”在星期六特别渴望吃肉,并且喜欢白色鸡蛋而不是棕色鸡蛋。 但是首先是第一件事。

零售试点多于试点
在零售业中,机器学习处于双重地位。 一方面,零售商在非常令人印象深刻的时间段内积累了可观的数据量:个人购买收据,会员卡中的数据...;另一方面,零售商已经存在了很长时间,以至于需求预测问题早在数据科学时尚出现之前就已经得到解决,而今天已经可以使用。必要的BI工具。
事实证明,零售业是数据科学家实验和引入机器学习的最有前途的领域之一,但企业对此持怀疑态度:这真的对我有好处吗? 毕竟,已经有经过多年经验证明的有效解决方案。
然后是时候就试点研究达成一致了!
与成熟的ML项目相比,飞行员本身具有可以理解的局限性和细节。
- 在试点研究上花了足够的时间来向客户展示其数据上的机器学习功能,但又不至于造成损失。
- 此外,通常,数据圣徒将不再有第二枪:如果业务的最初结果看起来不那么有趣,那么它将对旧的预测方法保持怀疑和忠实。 因此,您需要准确瞄准。
- 在试点项目期间,客户与数据中心之间可能不会建立信任关系。 在试验期间,拥有对解释至关重要的数据的部门和专家以及商业上重要的见解极有可能无法访问。
当然,这些功能并未在每个试点项目中都得到体现,但构成了其风险的重要组成部分。
关于任务的一点
在熟悉机器学习之前很久,Utkonos已经使用了自己的分析系统,该系统可以非常准确地预测一周内的货款偿还。 但是,零售商对提高计划有效性的可能性感兴趣。 这主要涉及易腐产品,其中许多产品也非常昂贵。 传统叉子:如果您购买很多-就会亏损,如果您购买不足-买家会去竞争者那里,买到他心爱的小牛里脊,满月,下着细雨。 对于后天的足够准确的预测,基于机器学习的解决方案更适合,与传统的BI工具相比,可以考虑更多因素。 Utkonos同意充当我们的合作伙伴,进行一项旨在检验机器学习在电子商务中的适用性假设的实验。
为了展示机器学习解决此问题的可能性,与企业达成协议,选择了几个商标名称:
- 属于“冰鲜肉”类别的两种产品-易腐产品,其数据最重要的是及时更新;
- 还有“鸡鸡蛋”类别中的两种产品-具有特定季节性需求的产品,不能简单地将其预测为“周四每个人都购买X,而周五-X乘以一个因子”。 尽管鸡蛋很难预测止赎,并且对于他们来说,每周计划的期限是可以接受的,但是在这些产品上,有必要证明机器学习确实看到了复杂的关系并建立了重要的预测。
我们根据历史数据的完整性选择了适合自己口味的特定产品。 有些商品是在最近才引入该系列的,相反,有些商品只卖过一次,但是目前它们已经从商品中取出,因此这些商品上的数据价值仅是历史性的。
乌特科诺斯(Utkonos)提供的数据包含有关过去两年中四种商品名称的销售以及有关时期内这些商品的库存情况的信息。 根据一般数据集,我们立即从11月初到4月底“切断”了最后六个月的时间-这将是我们的测试集。 它包括相对平静的秋季月份以及一系列的冬季假期和春季假期。
短暂而激动人心的冒险等待着我们。
仓库数据:神秘而必要
在处理历史数据时,摆在我们面前的第一个问题是如何将实际销售量与“最大可用销售量”区分开来(即,将仓库中结存的货物100%赎回的情况,但如果可用,则销量可以更高)? 毕竟,这些未满足的购买者愿望不会以任何方式显示在数据中。
库存商品的可用性。 顺便说一句,根据先前零售项目的经验,我们希望这些将是以计量单位表示的余额。 但是,在这种情况下,我们正在处理相对指标“可访问性”,该指标以一天中的百分比来衡量。 至于仓库中的货物可用性,该指标是非常相关的:任何时候都没有任何货物这一事实并不意味着他们想要购买。
在尝试了不同的选项(基于不同计算的系数重建“实际需求”并使用不同的可访问性阈值过滤销售数据集)之后,我们最终选择了不会使数据集过于狭窄的最佳阈值。 理想的商品-全天可用的商品-甚至可以减少最畅销商品的数据量。
项目1:冰鲜肉(家禽)
我们开始使用冰鲜的肉,因为我们不怀疑模型的预测能力,只要模型准备好即可。 (扰流器:但徒劳无功-在销售鸡蛋的数据集中,一个有趣的惊喜正在等待我们,但稍后会更多)。
为了节省“开箱即用”的时间,我们提供了一个现成的库,该库可以很好地与时间序列配合使用- 来自Facebook的Prophet 。

该模型在训练数据上的结果立即显示了优点和缺点。 该模型很好地反映了需求的季节性,但不好把握。 默认情况下,先知还安排假期。 相对偏差为31.36%,我们将继续使用它作为基本结果。
先知可以看到的内置季节性可视化工具,使您可以立即了解一下其中一种产品的购买在两年内如何变化,它们在一年中和一周中具有什么功能:

我们的冰鲜肉采购量呈明显上升趋势,采购量从星期一到星期六增加,而在星期日下降,在夏天,购买量明显下降。 夏天不能落入我们的考验期是很糟糕的。 另一方面,请记住,假期和假期对于销售水平很重要,因为暑假远非俄罗斯唯一的假期。
逻辑上的问题是:是否可以立即使用此模型进行未来六个月的预测?
凭直觉,似乎不是。 实验表明是这样。 一周中季节性的一般模式是正确的。 但是,立即变得很明显,从总体季节性模式来看,上下都有一百万个偏差,平均偏差为45.71%,远远高于训练数据的结果。 很明显,这不好。
首先,让我们尝试每天训练模型,假设在商店完成后的每一天,数据集都会补充“今天”的销售额。 我们已经知道,销售总体上呈上升趋势-测试活动的活跃度可能比培训组高,因此测试数据的营业额有可能以更高的强度增长。
相对成功:每天对模型进行重新训练,相对偏差为33.79%。 我们用有关俄罗斯传统上推迟的周末,宗教禁食和假期的信息(例如新年,复活节和许多其他信息)补充了模型参数。 还增加了突然的天气变化:气温骤升10摄氏度以上,或者明显高于或低于本月其他日子的日子。 现在,平均六个月以来,我们的预测偏离了实际销售额28.48%,总体而言,该模型开始更好地考虑了消费者活动的激增。 我们将平均偏差提高了5%! 尽管先知原则上工作不佳,建议从他们那里清除数据,但这是一个明显的前进。


在显示初步结果之前,出现了一个问题:我们能否进一步提高预测? 如果查看产品销售量与每天平均价格之间的相关性,则很明显,这些是相关功能,并且在构建模型时不考虑价格。 但是从数据集来看,我们只能采用某个“平均单价”:在同一天的订单经常变化,即 记录的是买方的个人折扣,并且“店面”价格未包含在数据集中。

每天这种类型的冰鲜肉的平均价格与销售数量之间的相关系数在p <0.01时为¬– 0.61。 显然,“平均单价”不是一个理想的指标:如果在一天中有很多人(例如,从折扣不断的合作伙伴那里购买商品),危险的噪音就会渗入数据中。 但是,我们想强调出现营销影响的日子:一组商品的一般折扣,引入免费分销促销代码的每个人的折扣等。
但是,即使在将平均价格为5%的天分配为促销天之后,该模型的准确性也没有增加。 在极端销售的日子里,准确性提高了,六个月的平均相对偏差保持不变。
但是,与价格之间显着的统计关系的想法在将来仍然保留。

我们对初步结果感到非常满意,现在是时候转移到其他商品了,直到为试验项目分配的时间结束。
项目2:鸡蛋
我们立即被警告说,就外部事件的影响而言,鸡蛋是最具指示性的产品类别之一。 首先,复活节采购量增加:鸡蛋涂上鸡蛋并用鸡蛋煮熟。 但是,当然要涂更多。 通过比较白鸡蛋和棕色鸡蛋的销量,这很容易理解。

通常,我们的模型预计复活节的需求将略有增加,但其预测几乎比实际指标低2倍(并且复活节周期间的〜100%偏差使六个月的平均偏差变得非常大)。 怎么了 毕竟,复活节周每年都会发生-前两年的数据中一定有一个规律!
研究分析表明,没有任何模式。 在2018年(这些是我们的测试数据),购买高峰在复活节前的整个星期下降到4月7日。 在复活节本身(2018年4月8日),鸡蛋购买量总是下降,模型可以正确看到这一点。 但是在2017年,复活节是4月16日,历史数据中的购买高峰是4月8日,而今年的高峰是一天。 2016年的复活节是5月1日。 购买高峰期是4月29日,前一天和后一天都有上升。 2015年的复活节是4月12日,购买高峰期又是4月9日的一天。

我们的第一个版本是一周中每一天的影响力(而想象力则描绘了父母,由于主题课程,到明天需要画十二个鸡蛋,而孩子今天说了这一点)。 las,事实并非如此。 可能在复活节期间,我们尚未发现(也未考虑在内)某些因素-外部因素和与公司本身的营销有关。
我们可以做得更好!
这个故事是关于在有限时间内使用零售商数据的,而不是关于秘密机器学习技术的。 但是在处理数据时,有机会改善结果。
使用“鸡蛋”类别的产品后,很明显可以通过添加我们在试点项目中未使用的因素来改进该模型。 因此,决定对随机森林和我们可以从开放源收集的数据进行小型实验。 另外,我们将能够看到模型的行为方式,销售日将具有不同的标志集,而不仅仅是一组在一个或另一个基础上分配的“特殊日”。
在有关“外部世界”的数据集中收集了以下信息:
- 每年的完整生产日历;
- 宗教节假日,世俗假期;
- 天气状况及其与该地区一个月平均值的偏差,以及最近一个月,一天和一周的波动;
- 中央银行的美元和欧元汇率及其波动,作为总体经济状况的指标。
另外,添加了标牌以进行单独的营销活动和每单位商品的价格。
在扩展数据集上,我们再次使用RandomForestRegressor建立了一个每天对新数据进行训练的模型。 相对偏差略有改善:达到27.29%。 该图显示,新模型可以更好地预测营销活动的影响,但效果更差-每周季节性。

从使用过的RandomForestRegressor的角度来看前5个最重要的标志,您可以确保已经有两个与商品价值相关的标志-当前价格及其与上个月相比的变化。 显然,FB先知无法很好地确定价格范围这一事实影响了其准确性。

在检查我们是否可以多想一点并改善结果时,完成了初步研究。 达到了主要目标:我们证明机器学习原则上适用于零售商数据,即使在“快速启动”模式下也显示出良好的结果。
Jet信息系统智能分析专家Alexandra Tsareva