趋势的预测:霍尔特指数平滑法
上面讲的指数平滑法,又叫“简单指数平滑法”,适用于需求相对平缓的情况,即没有明显的趋势或季节性。对于趋势,我们有霍尔特双参数指数平滑法来应对;对于季节性,我们有霍尔特–温特模型来应对。这里简单地介绍一下霍尔特双参数指数平滑法(以下简称“霍尔特法”)。
霍尔特法得名于查尔斯·霍尔特,相关文章[1]最早发表于1957年。霍尔特模型成为预测上用得最广的模型之一。对需求预测和库存计划来说,20世纪五六十年代可以说是人才辈出。这里我想特别介绍一下美国的HMMS研究团队。这个团队的名称来自四位研究者姓氏的第一个字母(Holt,Modigliani,Muth和Simon),当时他们都在卡内基工学院[2],旨在寻找更好的决策机制,以帮助工业界更好地应对库存、生产和计划的种种问题。这些问题在宏观层面导致经济危机,在微观层面让企业经常处于危机状态,要么是赶工加急,要么是产能利用不足,抑或是库存积压。
Holt就是这里要讲的霍尔特,他开发了应对平缓需求的简单指数平滑法、应对趋势的霍尔特法,以及应对季节性的霍尔特–温特模型,这些都成为工业界最为广泛应用的预测模型。[3]另外三位研究者中,Modigliani和Simon后来获得了诺贝尔经济学奖,而Muth的理性预期模型又成为卢卡斯获取诺贝尔奖的基石。不得不感叹,这真是个才华横溢的研究团队啊,那时的卡内基–梅隆就已经是个才俊辈出的地方。
简单地说,霍尔特法就是在简单指数平滑系数α的基础上,增加了一个趋势的平滑系数β,所以也叫“双参数平滑法”。当β等于0的时候,霍尔特模型就成了简单指数平滑模型。
当需求呈现明显的趋势,比如图1-10中的情况,简单指数平滑法没法有效应对,表现为对平滑系数择优时,你会发现最优的α变成了1,或者非常接近1——简单指数平滑法没法有效预测时,就只能“步步紧逼”,“球”跑到哪里,就跟到哪里,这注定被动反应,永远滞后一步。霍尔特法增加了趋势参数,更好地预判“球”的走向,系统地增加了拦截到“球”的胜算。
在霍尔特双参数平滑模型中,预测由两部分构成:一部分是水平部分,是在上期水平部分的基础上,用简单指数平滑法来更新;另一部分是趋势部分,是在上期趋势部分的基础上平滑调整,也用简单指数平滑法来更新。两者相加,就得到下期的预测。[4]
霍尔特法不但持续调整水平部分,而且持续调整趋势部分,在横向和纵向两维调整预测,所以能更好地应对趋势的变化。基本的公式分三部分:
本期水平部分=α×本期需求实际值+(1-α)×(上期水平部分+上期趋势部分)
本期趋势部分=β×(本期水平部分-上期水平部分)+(1-β)×上期趋势
下期预测=本期水平部分+本期趋势部分
因为有趋势,霍尔特法可以预测多期的值:未来第n期的预测等于本期水平部分加上n倍的趋势部分。比如在图1-10的例子中,第22周的预测=40+1×(-18)=22,第23周的预测=40+2×(-18)=4。你马上会发现,第24周的预测就成了负数,这显然不合理——这是趋势参数带来的问题,导致霍尔特法有过度预测的倾向,在使用的时候要加以留意。
图1-10 用霍尔特法来预测
在霍尔特法中,平滑系数α和β介于0和1之间。与简单指数平滑法一样,这两个平滑系数越大,预测模型就越响应,也就是说最新发生的对下一步的预测影响更大,风险是有可能过度反应;平滑系数越小,预测模型就越平稳,也就把最新发生的更多地当成“杂音”过滤掉,风险是可能没法及时响应需求变动。
在霍尔特参数的择优中,我们也可以用Excel中的Solver插件,基于预测准确度最高的目标,围绕两个参数α和β优化,选择最优的参数。
与简单指数平滑类似,霍尔特法也需要初始化。
在初始化时,可以假定初始“水平部分”为第一个实际需求值,初始“趋势部分”为第二个实际需求值减去第一个实际需求值;也可以基于前几个实际需求值,利用线性回归模型来计算截距(水平部分)和斜率(趋势部分)。当然还可以用别的方法来初始化,比如把趋势部分的初始值设为0[5](这是假定刚开始的时候没有趋势),以及用前几期的平均值作为水平部分的初始值。
跟前面简单指数平滑法的情况类似,经过一段时间的初始化后,模型会自动纠偏,初始值的影响变得有限,直至微乎其微。
在图1-10的例子中,我们用前9期的数据来初始化,用后12期的数据来测试模型、选择最优的模型。鉴于前几个数据相当离散,我们用前5期的平均值作为水平部分的初始值,趋势部分的初始值设为0,α取值0.80,β取值0.10。对于测试组而言,预测的平均绝对百分比误差为33%,均方误差为1790。我也尝试用简单指数平滑法来预测,最优化的平滑系数接近1,这两个准确度指标分别为37%和1869。显然,对于这个快消品来说,需求变化剧烈,一经导入就达到顶峰,然后需求就一路下滑。与简单指数平滑法相比,霍尔特法是更有效的预测方法。
当然,对于指数平滑法,到现在为止,你读了可能没有什么感觉。这没关系,先了解一下,然后动手实践,在实践中加深理解。毕竟,不管理论多完美,就像除非下到水里,否则没法学会游泳一样,只要不能用于实践,就没法完全理解。
实践者问
我的专业是工业工程,目前感兴趣的工作有两方面:一个是计划,另一个跟供应链稍微有些偏差,是数据分析。虽然我本身所学的专业跟供应链很相关,而且对于生产计划这样与数据打交道的工作也很感兴趣,但是专业课上学到的无外乎移动平均法、指数平滑法、霍尔特法,让人感觉一个外行人如果用点儿心,一天就能熟练掌握这几种预测方法,我想知道在计划这个行业进一步发展,会是什么样的职业发展前景。
刘宝红答
这些基本的预测方法能够解决需求计划的大部分问题,所以不要小看它们。它们看上去简单,其实不简单,不然的话为什么还要把人名冠上去?像霍尔特这样的专家,都是可以跟诺贝尔奖获得者相提并论的人。这些预测方法凝聚着众多研究者多年的心血,远远没有我们想象的那么简单,如果我们认为简单,那八成是因为我们不理解。
比如移动平均法看上去简单,但是究竟用多少期的需求历史就很不简单,因为这要求我们懂得如何去评估预测模型的好坏。这又涉及平均绝对百分比误差、均方误差等预测准确度的统计方法。均方误差又让我们意识到,预测的一大关键是避免大错特错:小的预测失误容易对付,可以通过安全库存、供应链执行来解决;害死我们的是大错特错。
那大错特错是怎么发生的?选择了不合适的预测模型,用了不合适的参数,是一个原因;但基础数据也是一大问题源,比如数据没有清洗,我们把以前促销的数据包括在内,后续需求预测自然显著偏高。这是应对发生了的促销,那没有发生的呢?这又涉及跟销售端的对接——需求预测是“从数据开始,由判断结束”。数据代表已经发生的、可重复的;判断代表还没有发生的、不可重复的,这又牵涉企业的几大主干流程之一,即销售跟运营协调流程。
所以,不要低估这些基本的模型。如果运用得当,这些模型能解决大部分的问题。不要求新求异。如果有人跟你大谈卡尔曼滤波或者灰色预测法之类的专业名词,你应该敬而远之。我不是说这些不重要,而是说这些更多的是龙肝凤胆,我们得回归计划的基本面,先把我们的大米饭做得更好、更合口再说。
这就如练武,不管你学什么武术,基本的招数就那么多。习武之人要经过一遍又一遍的练习,熟能生巧,只有练到出神入化的时候,才能真正掌握。要知道,高手的高,并不在于他们知道的招数比别人多,而是在相同的招数下,他们运用得更加自如。
实践者问
我们身处小批量生产行业,产品的品种多,批量小。我们现在尝试优化产品的预测方法。一个产品需求历史如图1-11所示,呈现一定的趋势。我们尝试了3周移动平均、指数平滑法、霍尔特法,发现霍尔特法下的均方误差最小,是不是该用霍尔特法?
刘宝红答
先看折线图,大致判断需求历史的模式,是一种很好的做法。但是,对于其中的趋势线(用Excel软件可以加上),要特别留神,不要因为看上去有条“趋势”线,就意味着有趋势——用Excel总能画出趋势线,但真正的趋势要看相应的线性回归分析参数。
图1-11 案例产品的需求历史折线图
如果你在Excel中的趋势线上,让展示线性回归方程,你会发现R2非常小,这表明需求和时间之间的回归关系非常弱(R2介于0和1之间,越大表明变量之间的线性关系越明显)。如果你用Excel做线性回归,以需求历史为因变量,时间为自变量,会发现这样的线性回归根本不成立,表现为调整过的R2是负值(线性回归的细节见后文的图1-22)。
如果用Excel中的Solver功能优化霍尔特法的两个参数,你发现平滑系数为0.05,趋势系数为0.07,都非常小,接近于0,同样表明这个模型非常薄弱。虽然均方误差相对其他两种方法最小,但并不意味着霍尔特法就是合适的预测方法。
那怎么办?根据折线图,需求历史有很大的随机性,建议尝试更长期数的移动平均法,比如6周、8周、13周等,跟简单指数平滑法比较,择优选取最佳模型。这位实践者用3周移动平均,还是有点儿太灵敏,没法过滤足够的随机性。此外,还得仔细查究第5、第19周的两个峰值,看是否跟促销、活动等有关,需要“削峰填谷”来清洗;或者是偶然性的极端值,需要从数据里剔除。这都会显著改变预测模型,需要在尝试任何数据模型前研究。
[1] 阐述霍尔特法的经典文章是“Forecasting Seasonals and Trends by Exponentially Weighted Moving Averages”,Charles Holt,ONR Research Memorandum No 52,Carneige Institute of Technology,1957。这项研究是由美国海军资助的。在美国,运筹学、运营管理的很多早期研究都是由军方资助的,这为以后的供应链管理学科打下坚实的理论基础。
[2] 该学院由钢铁巨头卡内基创建,后来与梅隆学院合并,成为今天蜚声海外的卡内基–梅隆大学。
[3] Learning How to Plan Production,Inventories,and Work Force,Operations Research,Vol.50,No.1,January–February 2002,Charles c.Holt,pp.96–99.
[4] 我在查阅中文文献时,对类似的专业术语,很难找到合适的翻译:这些文献要么用公式中的字母代替,这多出现在学者的文章中;要么就采用英文原名,这多出现在有外资背景的职业人写的文章中。这些本来很简单的方法论,却被很多著述弄得异常晦涩难懂——一旦开始卖弄“数学之美”,推导出一串又一串的公式时,这些很实用的方法论就成了学者们的自娱自乐,对我们这些实践者来说无异于灾难。当本土企业开始大规模用这些方法论的时候,很通俗、很贴切的中文名称就会出现——现在还没到那一步。
[5] 比如在Real-Statisitics.com网站,Charles Zaiontz博士采用霍尔特法时在Excel中就把趋势部分的初始值设为0。这位博士开发了各种各样的Excel表格,用来解决数理统计的问题,包括简单指数平滑法和霍尔特法,是学习这些预测模型很好的资料(http://www.real-statistics.com/time-series-analysis)。Charles Zaiontz以前在美国的大学任教,现居住在意大利。像Charles Zaiontz那样把复杂的数理统计解释得那么清楚,这世界上可没有多少人。我以前读MBA时,教统计学的那位教授就是这样的人。他让我真正体会到统计学反映出的简单美(惭愧,快20年过去了,我连他的名字都忘了)。这也正是人工智能等技术没法被广泛应用的原因之一。我跟好几家人工智能公司的专家谈,他们都在尝试用人工智能来解决需求预测问题,但没有一个人能够解释清楚人工智能究竟是怎么运作的,以及人工智能如何更好地预测需求。我在计划领域可以说是高于平均水平,他们在人工智能领域是远超平均水平,我们在一起都没法搞清楚人工智能是怎么回事,一般的计划经理、计划员怎么能搞清楚呢?不理解就不信任,不信任就不会去用。