平滑系数的择优
平滑系数α的值取决于需求历史的稳定性:需求历史越稳定,以往需求历史(体现在上次的预测中)的权重越大,最近一次需求的权重就越小(越是把它当作偶然因素),平滑系数α就越小,预测也就越平稳;反之,需求历史变动越大,最近一次需求的权重就越大,平滑系数α就越大,预测也就越灵敏。
举例来说,对于图1-7中的样本产品,我们用指数平滑法来复盘过去14周的预测。从图1-7a中的曲线可以看出,平滑系数越小的时候,预测越平稳;平滑系数越大的时候,预测越灵敏。那究竟什么样的平滑系数最适合该产品?我们不能看图形,而应该看预测的误差。
图1-7 平滑系数的择优示例
在图1-7b所示的曲线中,随着平滑系数的增大,指数平滑法与实际需求变动的匹配度增加,预测准确度逐步提升,表现为均方误差逐步减小;到0.3的时候,预测准确度最高,这时的指数平滑模型与实际需求变动最匹配,表明这是最合适的平滑系数,表现为均方误差也最小;超过0.3以后,随着平滑系数的进一步加大,预测模型的灵敏度越来越超出实际需求的变动性,相应的预测准确度也越来越低,表现为均方误差也更大了。
对于平滑系数的选取,阅读相关文献后,你会发现一些经验值[1]:
·当需求历史比较稳定时,选择较小的α值,0.05~0.2;
·当需求历史有波动,但长期趋势没有大的变化时,可选择稍大的α值,0.1~0.4;
·当需求历史波动很大,呈现明显且迅速的上升或下降趋势时,宜选取较大的α值,0.6~0.8;
·当需求历史是上升或者下降序列时,α宜取较大值,0.6~1。
但是,需求多稳定才算稳定,波动多大才算大,这很难量化,各人理解也不相同。比如有家企业的营收每年翻倍,计划经理认为业务波动很大,在她的逻辑里,增长本身就意味着波动,α应该取0.6~0.8。但我研究了一些产品后,发现α实际上取0.3最合适,也就是说业务的变动没有想象的大。
在具体实践中,平滑系数可按以下方式择优:
(1)先把需求历史做成折线图,时间为横轴,需求历史为纵轴,大致判断需求历史的稳定性,以及是否有趋势、季节性;
(2)然后参照上述经验值,确定平滑系数的大致范围;
(3)最后套用几个不同的α值,一般每个相差0.05,看哪个的预测准确度最高,哪个就是最优的平滑系数。这一般会通过复盘的方式进行,比如复盘过去13周的预测,计算每周的均方误差,然后求得13周的平均均方误差,据此判断预测的准确度。
上面的择优是手工操作的,在Excel中就可以完成。熟悉Excel中Solver插件功能的读者,也可以设定优化目标,比如均方误差最小,用Solver找到最优化的平滑系数,如图1-8所示。Solver是Excel自带的优化工具(但需要先安装),在平滑系数的择优上,其实就是自动化我们上面的手工操作,更快、更准确地找到最合适的平滑系数。Solver的具体操作说明可参见右侧的二维码,或者百度搜索“如何用Excel求解器Solver求出最优化解”,这里不予详述。
理论上,每个产品的需求模式都可能不同,同一产品在不同库存点的需求模式也可能不同,这意味着它们的指数平滑系数都可能不同。比如同一个产品,在前置仓的变动性一般会更大,相应的平滑系数也更大;在中心仓,由于需求的聚合效应,需求变动性一般会更小,相应的平滑系数也更小[2]。
图1-8 Excel中Solver插件的界面
用Solver,每次只能求得一个产品的平滑系数。在企业动辄成百上千个产品、几十个库存点的情况下,这意味着得做几千甚至几万次,显然不可行。如果没有专门的计划软件帮助,用Excel很难做到产品、库位层面的优化,那就可以退而求其次,找一个合适的平滑系数,尽量照顾到所有的产品,让总的预测准确度最高。
下面就是一个这样的例子。针对案例企业的中心仓,除掉新品和即将下市的产品,我们选定336个产品,条件是有足够长的需求历史。这些产品占该企业营收的80%。我们避开节假日较多的后半年[3],模拟复盘第23周到第35周共13周的预测,计算出每个产品的13周均方误差,然后把336个产品的均方误差加起来,当作所有产品的预测准确度。
如图1-9所示,我们从0.1开始,平滑系数每次增加0.05,统计出336个样品的均方误差总和。刚开始,平滑系数太小,需求变动太大,不匹配,所以整体的预测准确度不高。随着平滑系数的增大,与需求的匹配度提高,整体的预测准确度也提升,到0.3的时候达到最高。然后,平滑系数继续增大,指数平滑模型的灵敏性超出了需求的变动性,预测准确度也逐步降低,到0.6的时候最低(0.6以上没有继续尝试,因为与业务的整体变动性明显不符)。
图1-9 平滑系数的整体优化
在这个案例中,鉴于企业的信息化水平有限,我们没法找到每个产品在每个库存点的最优平滑系数,而是找到一个平滑系数,兼顾所有的产品。也就是说,这是在找次优化解决方案。这样做的好处是简单易行,在Excel中即可完成,也容易沟通。毕竟,在实践中,很多企业也是只用一个平滑系数,就如只用同一期数的移动平均法来对付所有的产品一样。
另外,我们用均方误差来量化预测的准确度,也存在潜在的问题,那就是在数量级上,需求量大的产品误差也大,会掩盖需求量小的产品。比如产品A的需求是每周100个,其误差动辄就是两位数的,平方以后更大;产品B的需求是每周0.2个,其误差一般也是小数,平方后更小。就这样,产品A就掩盖了产品B,产品B的“诉求”在择优过程中得不到满足。也就是说,所有产品的均方误差总和中,体现的主要是那些需求量大的产品。
在这个案例中,我们尝试把那些均方误差最大的成十个产品拿掉,发现总体优化的结论没变。但这潜在的问题还是可能存在。我们可以考虑分组,比如按照平均需求的高低,把高于100的分到第一组,10到99的分到第二组,1到9.9的分到第三组,低于1的分到第四组等,然后针对每个组进行上述的择优。
[1] 《时间序列之指数平滑法》(Exponential Smoothing),作者EchoCaiCai,https://blog.csdn.net/cl1143015961/article/details/41081183。
[2] 当然也有例外。比如我在研究一个跨境电商时,发现在亚马逊的各个网店(前置仓),产品的需求变动性反倒小,因为亚马逊的促销活动并不多;在国内的中心仓,产品的需求变动反倒更大,因为中心仓支持官网、国内电商和B2B业务(官网和国内电商经常有促销活动,B2B业务本身就比B2C业务变动大)。
[3] 因为各种促销会严重扭曲需求,而我们当时一没时间二没可靠的办法来清洗数据。