顾名思义,极端值明显与众不同,也叫异常值、离群值。它们要么太大,要么太小,落到正常的区间之外。如图1,该产品的需求没有季节性,也没有趋势,如果我们用平均需求加减两倍的标准差作为上下限,那么第6周的需求超出上限,就是极端值。
图1:极端值示例
极端值也可能来自输入错误,比如录入时多打个零,漏掉小数点什么的。极端值也可能是偶发需求,比如新冠刚开始时,美国人一窝蜂地囤积卷筒纸;日本排放核废水后,某国人一窝蜂地抢购食盐。极端值更可能是人为显著改变需求的结果,比如618、双十一的大促销。
有些极端值能清楚定义根源,比如灾害性天气;有些则是随机的,未知的。不管怎么样,极端值不但会显著降低预测模型的准确度,而且可能带来系统性偏差,我们不能等闲视之,下面分享三种常见的处理方式。
第一种做法是极端值的根源未知而且是一次性的,那就纠正极端值,也就是说用正常的值来取代极端值。
就拿图1中的第6周来说,假定我们不知道这需求是怎么发生的,且认定是一次性的,以后不会发生,我们可参考一系列的方法来推算其"正常值":
• 用时间序列的平均值来替代,那就是155。
• 用一段时间,比如前后各4周的平均值来替代,那就是152。
• 取前后两个值的中间值,那就是135。
• 切去超出上下限的部分,那就是214。
相信会有人问,这么多的方法,每个的结果都不一样,究竟哪种最好?这需要具体业务环境下,由计划人员来判断。
比如由于货期快到而打折清仓,那么可以用打折开始前几期的平均值(打折结束后,大家都不买东西了,需求有可能偏低,不具代表性)。由于短缺造成恐慌,导致客户下了太多订单的处理方式类似。
但对于已知的促销,比如双十一,促销前一段时间,大家都在期待着促销,需求会偏低;促销后一段时间,大家都买到东西了,需求也会偏低。所以,这里要避开促销前后的两段谷值,用期外的正常需求来修正。
有些计划软件有识别极端值的能力,并剔除、修正极端值。风险是,这种识别完全是基于数据分析,比如把变动超过一定幅度的就当做"异常",自动剔除或修正,可能导致得出错误的结论。要知道,有些情况是以极端值的方式出现,但并不是一次性的,不能简单地剔除或者修正,否则可能导致错误的结论。
典型的例子就是南极上空的臭氧洞。多年来,由于氯氟烃的危害,南极上空的臭氧在减少,相关数据是监测到了,结果被软件当做不可靠的异常数据给自动剔除了,并被代以看起来更靠谱的数据。更具讽刺意味的是,美国宇航局也记录下了臭氧含量的变化,却又被当成操作人员笔误,又一个"数据清洗"造成的悲剧。
我们可以用软件来帮助识别,但最好是逐个人工来评估、纠正极端值。如果工作量太大的话,不得不用软件自动纠正的话,那么我们要把自动纠正的门槛设得更高一些。门槛究竟设多高,可提取一部分数据,跟人工调整的对比,来确认自动纠正的结果差不多才行。
网上常说的数据分析,主要对象是这些年流行的"大数据",而清洗工作也主要是通过计算机完成。比如检验数据的一致性,发现超出正常范围、逻辑上不合理或者相互矛盾的数据,供进一步核对和纠正;用样本均值、中位数或众数代替无效值和缺失值,删除特定样本,甚至删除整个变量等。
第二种做法是知道极端值的根源,用不同的模型把极端值与正常值分开预测。
比如一个电商进入线下渠道,铺货造成一次性需求,形成极端值。我们可以把线上、线下两股需求分割开来,分别预测。比如跟渠道管理人员确认后,线下渠道铺货大概是3个月的量,那么我们可以估算每个月的用量,指导后续线下渠道的预测。而线上部分呢,还是按照原来的电商业务来预测。
每年的双11、618、黑色星期五等的促销,以及固定节假日的需求,也可以单列出来,一部分按照正常模型来预测,而电商节、节假日的特殊部分可借鉴前些年的销量,或者销售的判断来预测。这意味着有两个模型,而这两个模型一般是不同的。
当然,分开预测假定我们能够清晰地识别不同需求,并在需求历史中分割开来。否则,还是按照同一个时间序列来预测为好。
第三种做法是用同一个模型,跟正常需求一道预测极端值,前提是我们能知道极端值的根源,比如极端天气、特定活动。
比如有个新零售企业,一旦天下雨,就有更多的人通过App下单,带来极端需求,造成库存短缺、运力不足。那我们在预测正常需求的模型中,可加上天气这一虚拟变量,下雨天为1,不下雨为0,然后根据天气预报来计划未来一天、两天、三天的需求,提前准备库存,筹备运力等。
到现在为止,我们介绍了三种常见的处理极端值的方法。想再次强调的是,有些极端值不是一次性的,而是反映了剧烈变动的需求,我们不能简单地忽略,或者推导一个"正常值"来替代。人天生不喜欢极端值,看到不顺眼的"枝丫"就顺手砍掉,这样让预测模型看上去很完美,却是掩耳盗铃,非常危险的。
比如说,销售在每个季末都大规模促销、压货,出现极端值,然后需求就大幅下降,我们还不能简单地清洗,削峰填谷,而要么管理需求来平滑需求,要么建立合适的模型来预测。否则,我们可能低估需求的波动性,没法满足严苛的服务水平要求。
这都要求我们贴近业务,更好地理解业务。毕竟,理解极端值的过程,也是理解需求,管理需求的过程。
评论