自古以来,人们就对预测未来充满兴趣,无论是个人的命运还是国家的未来。从戏剧《尤利乌斯·凯撒》到历史小说《庞尼因·塞尔万》,预测者都扮演着非常重要的角色。仍然对玛雅人几千年前创造的玛雅日历的预测充满好奇。
所有的预测都是对未来的预测,但并非所有的预测都是预测。许多预测问题都涉及到时间因素,这使得时间序列预测成为机器学习中的一个重要领域。在使用时间序列方法来解决预测问题之前,有一些关于时间序列预测的事情必须了解。本文将探讨一些时间序列预测的必备术语。
预测在许多地方都有应用,例如天气预测、股市预测、生产调度、交通等。预测、目标和计划这些术语经常被混淆,并且被交替使用。但它们并不相同。
知道目标是什么,它是期望发生或希望发生的事情。比如说,设定了一个目标,在4小时内完成一篇论文的写作。
计划依赖于目标。它是确定实现目标所需的行动。它是将更大的目标分解成更小的事情。比如说,花2小时完成论文的研究,1小时写草稿并进行一些编辑,再用1小时完成最终的论文。
当拥有所有可能影响预测的必要信息,如历史数据和对未来事件的了解时,预测就是尽可能准确地预测未来。比如说,当已经写了一篇论文,预测在两小时后会完成一半。
那么,可以预测什么,以及可以预测多长时间?根据应用,组织可以使用短期、中期和长期预测。有几种方法可以开发一个预测系统,该系统由组织用来预测不确定的事件。
它们用于调度,如人员、生产和交通的调度。短期预测通常需要预测需求。例如:为一个月购买食品杂货。
当确定未来的资源需求,如购买原材料、雇佣员工或购买机械或设备时,必须使用中期预测。例如:当购买手机时,会看这些功能是否会在一段时间内保持相对新颖,而不仅仅是一个月或10年。
在战略规划中,必须考虑市场机会、环境因素和内部资源。在这种情况下使用长期预测。例如:当购买房子时,会考虑未来的需求,而不仅仅是当前的需求。
一个好的预测系统是正确识别预测问题,并为每个问题使用适当的方法,从一系列预测方法中选择一种方法。预测方法应该随着时间的推移进行评估和完善。
如果没有与问题相关的数据,那么就应该使用定性预测。使用判断性预测需要领域知识,这些知识需要不时更新。例如:假设为下个月购买食品杂货。在定性预测中,与预测变量相关的特征将被考虑在内。比如说,家庭成员、将在家吃饭的天数、为食品杂货分配的预算等。
如果历史数据可用,并且可以安全地假设过去的某些模式的某些方面会重复,那么可以使用定量预测。有许多预测方法,它们是为特定目的设计的。它们具有必须在选择方法来解决手头问题时考虑的属性、准确性和成本。
在这种类型的预测中,将考虑历史数据作为预测变量。大多数定量预测问题都使用时间序列数据或横截面数据。在固定时间间隔内收集的数据是时间序列数据。例如:一个月内某个城市的Covid-19病例。在单一点收集的数据是横截面数据。例如:一天内多个城市的Covid-19病例。
在时间序列数据中,趋势、季节性和周期性是三个需要考虑的重要因素。
当时间序列数据受到季节因素的影响时,比如说一个月、一年中的时间或一周中的哪一天,称之为季节性模式。简单地说,当数据受到某种日历因素的影响时,比如说每月或每季度,可以称之为季节性。频率总是已知且固定的。例如:服装店的销售通常在节日季节达到高峰,一旦节日结束,就会恢复正常。而且它每年都会重复。
当数据的上升和下降不是固定频率时,说它是周期性的。这些波动主要是由于经济状况,它们通常与“商业周期”有关。商业周期通常是3年。它们通常比季节性成分要长,而且它们的幅度远大于季节性成分。
数据中的随机性。
一系列是两个或更多时间序列成分的聚合或组合。当所有系列都有水平和噪声时,趋势和季节性是可选的。这些成分可以通过加法或乘法组合。
from random import randrange
from pandas import Series
from matplotlib import pyplot
from statsmodels.tsa.seasonal import seasonal_decompose
series = [i+randrange(10) for i in range(1,100)]
result = seasonal_decompose(series, model='additive', period=1)
result.plot()
pyplot.show()
from pandas import Series
from matplotlib import pyplot
from statsmodels.tsa.seasonal import seasonal_decompose
series = [i**2.0 for i in range(1,100)]
result = seasonal_decompose(series, model='multiplicative', period=1)
result.plot()
pyplot.show()
from matplotlib import pyplot
from statsmodel.tsa.seasonal import seasonal_decompose
series = pd.read_csv("AirPassengers.csv", header = 0, index_col = 0)
result = seasonal_decompose(series, model = "multiplicative" , frequency = 10)
result.plot()
pyplot.show()