分析时间序列的初始条件:非平稳序列是统计特性随时间变化

译者:李杰

整齐的:

来源:数据之道(ID:)

图片[1]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

▲摄影:on

我们处处被模式所包围,人们可以注意到与天气相关的季节模式,交通量方面的高峰流量模式,你的心跳或股票市场和某些产品的销售周期。

分析时间序列数据对于发现这些模式和预测未来非常有用。有几种方法可以创建此类预测,在本文中,我将介绍最基本和传统的方法概念。

所有的代码都是用的,所有的信息都可以在上面看到。

时间.ipynb

那么让我们开始讨论分析时间序列的初始条件:

01 文具系列

平稳时间序列是指其统计属性(例如均值、方差和自相关系数)随时间相对恒定的序列。因此,非平稳序列是其统计特性随时间变化的序列。在开始任何预测建模之前,有必要验证这些统计属性是恒定的,我将解释以下每一点:

1. 常数均值

平稳序列具有相对稳定的时间均值,并且该值不会减少或增加。围绕常数均值的微小变化使推测未来变得更容易。在某些情况下,变量相对于平均值来说很小,它的使用可以很好地预测未来。下图显示了变量与该常数的平均值相对于时间的关系:

图片[2]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

在这种情况下,如果序列不是平稳的,那么对未来的预测将是无效的,因为均值附近的变量会显着偏离,如下图所示:

图片[3]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

在上图中,我们可以清楚地看到上升趋势,均值在逐渐增加。在这种情况下,如果使用均值来预测未来值,误差会很大,因为预测价格总是低于实际价格。

2. 恒定方差

当序列的方差不变时,我们知道均值和标准差之间存在关系。当方差不恒定时(如下图所示),预测在某些不可预测的时期内可能会出现较大的误差。可以预测方差会随着时间和未来保持不稳定。

图片[4]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

为了减少方差效应,可以使用对数变换。在这种情况下,也可以使用指数变换,例如 Box-Cox 方法,或者可以使用通货膨胀率调整。

3. 自相关序列

当两个变量的标准差随时间的变化相似时,可以说这些变量是相关的。例如,体重会随着心脏病的增加而增加,体重越大,患心脏病的风险就越大。在这种情况下,相关性为正,图表应如下所示:

图片[5]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

负相关是类似的:对工作安全措施的投资越多,与工作相关的事故数量就越少。以下是具有多个相关级别的散点图示例:

图片[6]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

说到自相关,就是说以前的某个时期和现在的时期有相关性,而这个相关性是滞后的。例如,在以小时为单位的一系列测量中,今天 12:00 的温度与 24 小时前 12:00 的温度非常相似。如果您比较 24 小时内的温度变化,则存在自相关,在这种情况下,我们将与 24 小时之前的时间存在自相关。

自相关是使用单个变量来创建预测的情况,因为没有相关性,过去的值就不能用来预测未来;当有多个变量时,可以验证因变量和自变量之间是否存在滞后相关性。

如果一个序列没有自相关,那么它是随机且不可预测的,进行预测的最佳方法通常是使用前一天的值。我将在下面使用更详细的图表进行解释。

从这里我将分析 Esalq 上的每周含水乙醇价格(这是巴西协商含水乙醇的价格参考),数据可以在这里下载:

价格以每立方米巴西雷亚尔为单位 (BRL/m3)。在开始任何分析之前,请将数据分为训练集和测试集。

4. 划分训练和测试数据

当我们要创建时间序列预测模型时,将数据分为两部分至关重要:

测试集的大小通常约为总样本的 20%,尽管这个百分比取决于您拥有的样本量以及您想要做出预测的提前量。理想情况下,测试集应至少与所需预测的最大范围一样大。

与其他不受时间影响的分类、回归等预测方法不同,在时间序列中,不能从数据中随机抽取训练和测试数据,我们必须遵循序列的时间准则,训练数据应该始终在数据之前的测试。

在这个例子中,我们有 856 周的 Esalq 含水乙醇价格数据,使用前 700 周的数据作为训练集,最后 156 周(3 年,18%)作为测试集:

图片[7]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

从现在开始,我们将只使用训练集进行研究,而测试集仅用于验证我们的预测。

每个时间序列可以分为三个部分:趋势、季节性和残差。残差是从系列中删除前两个部分后剩下的部分。使用这种分割方法后:

图片[8]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

显然,该序列呈上升趋势,在年底和年初之间达到顶峰,并在 4 月至 9 月之间达到最低值(巴西中南部开始甘蔗压榨)。

我们仍然建议使用统计检验来确认序列是平稳的,这里将使用两个检验:-检验和 KPSS 检验。

首先,我们将使用 – 检验,我将使用 5% 的基础 P 值,也就是说,如果 P 值低于 5%,则意味着该序列在统计上是平稳的。

此外,模型还有一个统计检验,将检验值与临界值 1%、5%、10% 进行比较,如果统计检验低于某个选定的临界值,则认为该序列是平稳的:

图片[9]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

在这种情况下, – 检验结果表明序列不是平稳的(p 值 36%,临界值比统计检验小 5%)。

现在我们使用 KPSS 测试来分析该系列。与 – 检验不同,KPSS 检验已经假定序列是平稳的。只有当 P 值小于 5% 或统计检验小于某个临界值时,该序列才不是平稳的:

图片[10]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

KPSS 检验证实了 – 检验的正确性,也表明序列不是平稳的,因为 P 值为 1%,统计检验高于任何临界值。接下来,我将演示如何将序列转换为静止状态。

02 将序列转换为稳态

1. 差分

差分法用来去除趋势信号,也可以用来减少方差,简单来说就是T期的值与上一个T-1期的值的差值。为了更容易理解,下面我们只使用了乙醇价格的一小部分为了更好的可视化,我们可以看到从2005年5月到2006年5月中旬价格上涨,并且每周都在上涨,这是一个上涨趋势已经累积,在这种情况下,它是一个非平稳序列。

图片[11]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

在做一阶微分时(如下图),我们去掉序列的累积效应,只显示整个序列中T周期相对于T-1周期的变化,所以如果3天前的价格是800雷亚尔,上涨了 850.00 BRL,差价是 50.00 BRL,如果今天的价格是 860.00 BRL,差价是 -10.@ >00 雷亚尔。

图片[12]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

通常只需一阶微分就足以将级数转换为平稳状态,但如果需要,可以应用二阶微分,在这种情况下导出一阶微分的值(很少有超过二阶微分))。同样的例子,要进行二次微分,我们必须在时间 T 减去时间 T-1 处求导: 2.9 BRL -5.5 BRL = – 2.6 BRL 等等.

图片[13]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

让我们做一个 – 测试,看看这个系列在一阶导数之后是否是平稳的:

图片[14]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

在这种情况下,我们确定序列是平稳的,p 值为零,当我们比较这些值进行统计检验时,它远低于临界值。在下一个示例中,我们将尝试调整通货膨胀率以将序列转换为静止状态。

2. 扩容率调整

价格与交易时间有关。2002年乙醇价格为680.00 BRL。如果产品现在的价格是这个价格,很多工厂肯定会因为价格很低而倒闭。为了使序列平稳,我将使用巴西 IPCA 指数(巴西的 CPI 指数)根据当前值调整整个序列,从训练间隔结束(2016 年 4 月)到研究开始,数据是 IBGE 网站。

图片[15]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

现在让我们看看该系列如何变得平稳以及它是否变得平稳。

图片[16]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

如图所示,上升趋势已经消失,只留下季节性波动,- 测试也证实该系列现在是稳定的。好奇的可以参考下图,调整后的价格对应原系列的通胀率。

图片[17]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

3. 减少方差

对数变换通常用于将指数增长的序列转换为线性增长的序列,在这种情况下,我们将使用以 2.718 为底的自然对数 ( , NL),这种对数类型广泛用于经济楷模。

转换为 NL 值的差值大约等于原始序列值的百分比变化,这可用作降低不同价格序列方差的基础python 时间序列模型,如下例所示:

如果我们有一个产品在 2000 年涨价,从 50.00 BRL 到 52.50 BRL,几年后(2019 年),价格已经是 100. 00 BRL,涨到105.00 BRL,价格绝对差2.50 BRL和5.00 BRL,但两者的百分比差为5%。

当我们对这些价格使用 NL 时,我们得到: NL (52.50) – NL(50.00) = 3.96 – 3.912 = 0.048 或 4.8%,类似地,当在第二个价格系列中使用 LN 时,我们得到: NL (105) – NL( 100) = 4.654-4.605 = 0.049 或 4.9%。

在这个例子中,我们可以通过将几乎所有东西放在同一个基础上来减少方差。这是相同的示例:

= np.log( 52.5) – np.log( 50)

= np.log( 105) – np.log( 100)

( ‘第一个是 {round(*100,1)} 是 {round(*100,1)}’)

图片[18]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

原始序列和NL序列变换的比较:

图片[19]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

Box-Cox变换也是一种变换序列的方法,(λ)的值是用来变换序列的参数。

简而言之,这个函数是几个指数变换函数的组合,我们需要找到变换后的序列的最优值,使其分布更接近于正态高斯分布。使用这种变换的一个条件是序列只有正值,公式为:

图片[20]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

接下来我将绘制原始序列及其分布,然后绘制新的变换序列及其具有最优值的分布,为了找到值,我们将使用库 Scipy 中的函数生成变换序列和理想值:

图片[21]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

下面是一个交互式图表,其中可以更改值并可以检查更改:

图片[22]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

该工具通常用于提高模型的性能,因为它使模型更加正态分布,请记住,在完成模型的预测后,必须根据以下公式反转对原始基的转换:

图片[23]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

4. 查找相关的时间滞后

为了便于预测,具有单个变量的序列必须具有自相关性,即当前时期必须可以基于较早时期(滞后)来解释。

由于这个系列是每周一个周期,1年大约是52周,我将使用滞后60的自相关函数来验证当前周期与这些滞后的相关性。

图片[24]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

从上述自相关图的分析来看,似乎所有的滞后都可以用来创建对未来事件的预测,因为它们的正相关接近于 1,并且都在置信区间之外,但这个特征属于非平稳序列。

另一个很重要的函数是偏自相关函数,其中消除了前一个滞后对当前区间的影响,只保留当前区间滞后的影响进行分析,例如:第四个的偏自相关lag 会消除第一个 一、 第二个和第三个 lag 的影响。

一些自相关图如下:

图片[25]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

如您所见,几乎没有滞后对当前周期产生影响,但如前所述,没有微分的序列不是平稳的,我们现在用一系列一阶微分绘制这两个函数以显示原理:

图片[26]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

自相关曲线发生显着变化,表明该序列仅在第一个滞后期具有显着相关性,在第26个滞后期(半年)左右具有负季节性效应。

为了做出预测,我们必须注意找到相关滞后的一个非常重要的细节,重要的是关联背后的原因,因为如果没有逻辑原因,可能是偶然的,当包含更多数据时,这种关联消失了。

另一个重要的一点是自相关和偏自相关图对异常值非常敏感,因此分析时间序列本身并比较两个自相关图很重要。

在这个例子中,第 1 滞后与当期的相关性很高,因为前一周的价格历史没有显着变化,在同样的情况下,第 26 滞后呈现负相关,表明与当期相反的趋势,可能的原因是一年中不同时期的供需不同。

由于通货膨胀调整后的序列已经趋于稳定,我们将使用它来创建我们的预测。下面是调整后序列的自相关和偏自相关图:

图片[27]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

我们将仅使用前两个滞后作为自回归序列的预测变量。

欲了解更多信息,杜克教授 Nau 的网站是该主题的最佳网站之一。

~rnau/.htm

03 模型评价指标

为了分析预测值是否接近当前值,必须测量误差。这种情况下的误差(或残差)基本上是 Yreal–Ypred (我不知道如何翻译这个,real 真实值,pred 预测值)。

评估训练数据中的误差以验证模型具有良好的确定性,然后通过检查测试数据(模型未“看到”的数据)中的误差来验证模型。

在将训练数据与测试数据进行比较时,检查错误对于验证您的模型是否过拟合或欠拟合很重要。

以下是评估时间序列模型的一些关键指标:

1. 平均预测误差 – 偏差

它只是被评估序列的平均误差,值可以是正数或负数。该指标表示模型倾向于预测高于实际值(负误差)还是低于实际值(正误差),因此也可以说平均预测误差是模型的偏差。

2. MAE – 平均绝对误差

这个度量和上面提到的预测的平均误差很相似,唯一的区别是误差的负值被转换为正值,然后计算平均值。

该指标广泛用于时间序列,因为在某些情况下,负误差可以抵消正误差,给人以模型准确的错误印象,而 MAE 不会发生这种情况,因为该指标显示了预测与实际之间的差距值有多远,无论值有多大或多小,例如:

a = np.array([ 1, 2, 3, 4, 5])

b = np.array([ 5, 4, 3, 2, 1])

错误 = a – b

MFE = error.mean

MAE = np.abs(error).mean

print( f’每个模型值的误差是这样的:{error}’)

print( f’MFE 错误是 {MFE},MAE 错误是 {MAE}’)

与 MAE 和 MFE 不同的是,MSE 值是平方单位,而不是模型单位。

3. RMSE – 均方根误差

该指标只是 MSE 的平方根,将误差返回到模型的测量单位 (BRL/m3),这很有用,因为它对时间序列在平方期间产生的较大误差更敏感。

4. MAPE – 平均绝对百分比误差

这是另一个可用的有趣指标,它经常用于管理报告中,并且由于误差以百分比来衡量,因此可以将产品 X 的误差与产品 Y 的误差进行比较。该指标的计算取绝对值误差除以当前价格,然后计算平均值:

图片[28]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

让我们创建一个函数来使用几个评估指标来评估训练和测试数据的错误:

# 到:

。错误,,

(原点,pred,=”,=”):

偏差 = np.mean(orig – pred)

mse = (原始, pred)

rmse = sqrt((orig, pred))

mae = (orig, pred)

mape = np.mean(np.abs((orig – pred) / orig)) * 100

= [偏差,mse,rmse,mae,mape]

serie = pd.(, index=[‘BIAS’, ‘MSE’, ‘RMSE’, ‘MAE’, ‘MAPE’], =[])

serie.index.name =

分析这张图非常重要,因为在这张图中我们可以检查模式,它可以告诉我们是否需要对模型进行一些修改,理想情况下,误差沿着预测序列线性分布。

总的来说,这是一张图表,显示了残差在理论上应该如何分布,遵循高斯分布,而不是实际情况。

如果置信区间没有值,或者模型不包含信息。

我们需要创建另一个函数来绘制这些图形:

(数据,=(18,8)):

# 错误

数据[‘错误’] = data.iloc[:, 0] -data.iloc[:, 1]

plt.(=)

ax1 = plt.(( 2, 2), ( 0, 0))

ax2 = plt.(( 2, 2), ( 0, 1))

ax3 = plt.(( 2, 2), ( 1, 0))

ax4 = plt.(( 2, 2), ( 1, 1))

# 和

ax1.plot(data.iloc[:, 0: 2])

ax1.([ ‘真实’, ‘Pred’])

ax1.( ‘实际价值 vs ‘)

# 误差与值

ax2.(data.iloc[:, 1], data.iloc[:, 2])

斧头2.(”)

斧头2.(”)

斧头2.(‘对’)

## 阴谋

sm..(data.iloc[:, 2], line=’r’, ax=ax3)

# 情节

(data.iloc[:, 2], lags= 60, zero= False, ax=ax4)

plt.

plt.show

与实际值相比,误差趋于增加。

许多人也将此方法用作(),以尝试使用更复杂的模型进行改进。

下面我们将使用训练数据和测试数据进行模拟:

图片[29]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

从图中可以看出,存在一些大于理论值的残差(正负都有),这些就是所谓的异常值,但是在第一、第六和第七滞后仍然存在显着的自相关,可以用来改进模型。

同样,我们现在将对测试数据进行预测。预测序列的第一个值将是训练数据的最后一个值,然后这些值将随着测试的当前值增量更新,以此类推:

图片[30]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

RMSE 和 MAE 的误差与训练数据相似,图和残差更符合理论值,可能是由于与训练数据相比样本值较少。

在将残差与预测值进行比较的图中,我们注意到误差的绝对值有随着价格上涨而增加的趋势,也许对数调整会减少误差的扩大并完成残差相关图,表明由于第一滞后有很强的相关性,所以还有改进的余地,可能会在第一滞后的基础上增加一个回归来改进预测。下一个模型是简单的平均值:

5. 简单平均

另一种预测方法是使用序列均值,通常当数值围绕均值振荡,方差恒定,没有上升或下降趋势时,这种预测形式很好,但也可以使用更好的方法,一个可以使用季节性模式进行预测。

该模型使用数据的开始到上一期分析的平均值,并按天延伸到数据的结束,最后,趋势是一条直线,我们现在将这个模型的误差与第一个模型的误差进行比较模型:

图片[31]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

在测试数据中,我将继续使用训练数据开始时的均值,并扩展以添加到测试数据中:

图片[32]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

简单均值模型无法捕获有关序列的相关信息,如真实图中和预测图中所示,但在相关性和残差以及预测图中也如此。

移动平均线是给定时期(例如 5 天)计算的平均值,它是滑动的并且总是使用这个特定时期计算的,在这种情况下,我们将始终使用过去 5 天的平均值来预测 的下一天值。

图片[33]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

误差低于简单平均值,但仍高于简单模型,这里是测试模型:

图片[34]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

与训练数据类似,移动平均模型优于简单平均模型,但尚未超过简单模型基础。

预测具有 2 个滞后的自相关和相对于预测值的较大方差误差。

上面描述的简单移动平均模型具有平等对待最后 X 个观测值并完全忽略所有先前观测值的特性。直觉上,过去的数据应该逐渐被打折,例如理论上最近的观察应该比第二近的观察更重要,第二近的观察应该比第三近的观察更重要,等等,指数移动平均 ( , EMM) 模型只是那。

由于 alpha (alpha) 是一个介于 0 和 1 之间的常数,我们将使用以下公式来计算预测值:

如果预测的第一个值是对应的当前值,则将其他值更新为实际值与上一期预测值之差的α倍。当 α 为零时,我们根据第一个预测值得到一个常数,当 α 为 1 时,我们有一个简单方法的模型,因为结果是前一个实际周期的值。

下面是几个 alpha 值的图表:

图片[35]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

EMM 预测中的平均数据周期为 1/α。例如,当 α= 0.5 时,滞后相当于 2 个周期;当 α= 0.2 时,滞后 5 个周期;当 α= 0.1 时,滞后为 10 个周期,以此类推。

在这个模型中,我们将任意选择一个 alpha 值 0.5,您可以使用网格搜索算法来找到可以减少训练集和验证集错误的 alpha。数据应如下所示:

图片[36]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

该模型的误差与移动平均线相似,但我们需要在测试集上验证模型:

图片[37]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

在验证数据中,迄今为止的误差在我们训练的模型中是第二高的,残差图的特征与5天移动平均模型的特征非常相似。

6. 自回归

自回归模型基本上是具有显着相关滞后的线性回归,首先绘制自相关图和偏自相关图以验证是否存在相关性。

下面是训练序列的自相关图和偏自相关图,表明自回归模型的特征是具有 2 个滞后的显着相关性:

图片[38]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

接下来,我们将从训练数据创建模型,一旦我们得到模型的系数,就将它乘以测试数据的作用:

图片[39]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

与我们训练过的其他模型相比,这个模型的误差最小python 时间序列模型,现在我们使用它的系数对训练数据进行逐步预测:

图片[40]-分析时间序列的初始条件:非平稳序列是统计特性随时间变化-4747i站长资讯

请注意,在测试数据中,误差不会保持稳定,甚至会比简单模型更差,可以看到图中的预测值几乎总是低于当前值,而偏差测量表明实际值比预测值高5个0.19 BRL,也许在训练模型中调整一些参数,这个差异会减小。

要改进这些模型,您可以应用多种转换,例如本文中描述的那些,或者您可以添加外部变量作为预测源,但这超出了本文的范围。

04 结论

每个时间序列模型都有自己的特点,应该单独分析,以便我们可以提取尽可能多的信息来做出良好的预测并减少未来的不确定性。

检查平稳性、转换数据、在训练数据上构建模型、验证测试数据和检查残差是构建良好时间序列预测的关键步骤。

另请参阅原作者关于 ARIMA 模型的文章。

原来的:

译者简介:李杰,北京师范大学香港浸会大学联合学院数据科学系助理教授,香港科技大学电信硕士。

问:你了解时间序列预测吗?

文章来源:http://www.sohu.com/a/339647291_464033

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享