【时间序列】时间序列的平稳性

2024-02-10 21:40
文章标签 时间 序列 平稳性

本文主要是介绍【时间序列】时间序列的平稳性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本专栏将会介绍时间序列、预测和不同的基本原理我们将在讨论的不同章节中使用。具体来说,本笔记本将讨论:

  1. 时间序列
  2. 时间序列预测
  3. 随机过程
    我们使用Python及相关Python第三方库来分析时间序列
# Required Libraries
import numpy as np
import numpy.random as rng
import pandas as pd
import scipy.stats as st
import matplotlib.pyplot as plt
import statsmodels.graphics.tsaplots as tg
%matplotlib inlineplt.rcParams['figure.figsize'] = [15, 2]

General Introduction

我们大多数人都会听说过市场上的新嗡嗡声,即加密货币。我们中的许多人也会投资他们的硬币。但是,将资金投资于如此波动的货币安全吗?我们如何确保现在投资这些硬币肯定会在未来产生健康的利润?我们不能确定,但我们肯定可以根据之前的价格生成一个近似值。时序模型是预测它们的一种方法。

What is a Time Series?

引用两篇博客中对时间序列的定义:

  1. 时间序列数据(time-series data) ,亦即单一变量按时间的先后次序产生的数据。
  2. 时间序列是一系列索引值,其中每个值都是随机变量的结果。换句话说,时间序列是相应过程的一种实现。

时间序列的一个例子是在德国耶拿马克斯普朗克生物地球化学研究所的气象站记录的天气时间序列数据集。在这个数据集中,几年内每 14 分钟记录 10 个不同的量(如气温、大气压力、湿度、风向等)。原始数据可以追溯到 2003 年,但此示例仅限于 2009-2016 年的数据。此数据集非常适合学习使用数值时间序列。我们将使用此数据集来构建我们的模型。以下是数据中的实际变量:

  • Date Time
  • p (mbar) atmospheric pressure
  • T (degC) temperature
  • Tpot (K) potential temperature
  • Tdew (degC) dew point temperature
  • rh (%) relative humidity
  • VPmax (mbar) saturation water vapor pressure
  • VPact (mbar) actual water vapor pressure
  • VPdef (mbar) water vapor pressure deficit
  • sh (g/kg) specific humidity
  • H2OC (mmol/mol) water vapor concentration
  • rho ( g / m 3 ) (g/m^3) (g/m3) air density
  • wv (m/s) wind velocity
  • max. wv (m/s) maximum wind velocity
  • wd (deg) wind direction

在这里插入图片描述

Time Series Forecasting

预测是在给定所有可用信息(例如历史数据和可能影响数据的任何可能变量)的情况下预测时间序列的未来值。除了加密货币之外,还有多个重要领域使用时间序列预测,例如:预测销售,呼叫中心的呼叫量,太阳能活动,海洋潮汐,股票市场行为等等。假设一家酒店的经理想要预测他预计明年有多少访客来相应地调整酒店的库存,并对酒店的收入做出合理的猜测。根据前几年/月/日的数据,他可以使用时间序列预测并得到访问者的近似值。游客的预测价值将有助于酒店管理资源并相应地计划事情。
在我们预测时间序列之前需要考虑时间序列的几个点:

  1. 数据类型(趋势、季节性等)。
  2. 影响他的因素分析(多元分析、因果关系分析等)。
  3. 数据量的大小。
    在接下来的章节中,我们将讨论如何使用它们的不同预测方法。每种方法都有自己的一组假设和局限性,但一般的想法是我们假设有一个基本的数学过程来定义我们的时间序列。了解这些数学过程有助于我们找到最佳方法或算法(以及相应的超参数),以更好地预测我们的时间序列。
    在下一节中我们讨论时间序列的第一种表述方式,随机过程。

stochastic process

随机过程是一系列索引随机变量,在时间序列分析的背景下,我们将使用、离散的时间作为索引: t = 0 , 1 , 2 , ⋯ t=0,1,2,\cdots t=0,1,2,
{ X 0 , X 1 , X 2 , ⋯ } \{X_0,X_1,X_2,\cdots\} {X0,X1,X2,}表示一个随机过程,其中 X 0 , X 1 , X 2 ⋯ X_0,X_1,X_2\cdots X0,X1,X2表示随机变量。
在此上下文中,时间序列是一系列索引值,其中每个值都是随机变量的结果。换句话说,时间序列是相应过程的一种实现。
示例 1:伯努利试验。回想一下,伯努利试验有两种可能的结果或实现。让我们把它们当作.让我们生成几个值:{−1,+1}

bern_outcomes = [-1., 1.]
size = 100
# Generate 100 Bernoulli trials
flips = rng.choice(bern_outcomes, size=size)
series = pd.Series(flips)
fig, ax = plt.subplots(figsize=(15, 2))
series.plot(ax=ax) # here we implicitly index them; let the index stand for time
plt.show()

在这里插入图片描述
示例2:高斯白噪声。高斯白噪声过程生成一个时间序列,其中每个值都来自均值和单位方差为零的高斯分布: x t ∼ G a u s s i a n ( 0 , 1 ) x_t\sim Gaussian(0,1) xtGaussian(0,1)

size = 1000
wn = st.norm.rvs(size=size)
wn_series = pd.Series(wn)
fig, ax = plt.subplots(figsize=(15, 2))
wn_series.plot(ax=ax)
plt.show()

在这里插入图片描述
高斯白噪声具有独立且分布相同的特性,这导致了线性时间序列的一些关键特性,下面将介绍。
示例 3:一维布朗运动。一维布朗运动或维纳过程可以被认为是白噪声时间序列的累积和。序列在 t t t时刻的值是所有先前值的总和,可以认为是随机步行者在时间 t t t的位移: X t = X t 1 + X t − 2 + ⋯ = ∑ i = 0 t X i X_t = X_{t1}+X_{t-2}+\dots =\sum_{i=0}^{t}X_i Xt=Xt1+Xt2+=i=0tXi

size = 100000
bms = []
bms_msq = []
for i in range(100):wn = st.norm.rvs(size=size)bm = np.cumsum(wn)bms.append(bm)bms_msq.append([x**2 for x in bm])
bm_ave = np.mean(bms, axis=1)
bm_msq = np.mean(bms_msq, axis=1)fig, ax = plt.subplots(figsize=(15, 2))
bms_series = pd.Series(bm_ave)
bms_msq_series = pd.Series(bm_msq)
bms_series.plot(label="Displacement", ax=ax)
bms_msq_series.plot(label="MSD", ax=ax)
plt.legend()
plt.show()

在这里插入图片描述
示例4:移动平均`给定一个白噪声过程见上,在 t t t时刻的一个q阶的移动平均过程是当前值和过去几个值的加权和:
X t = ϵ t + a 1 ϵ t − 1 + ⋯ + a q ϵ t − q X_t=\epsilon_t+a_1\epsilon_{t-1}+\cdots+a_q\epsilon_{t-q} Xt=ϵt+a1ϵt1++aqϵtq,其中 { ϵ t } ∼ W N ( 0 , σ 2 ) \{\epsilon_t\}\sim WN(0,\sigma^2) {ϵt}WN(0,σ2)。我们写作 { X t } ∼ M A ( q ) \{X_t\}\sim MA(q) {Xt}MA(q),该移动平均过程是一个线性过程,假如我们有一个参数 a 1 = 0.5 a_1=0.5 a1=0.5 a 2 = 0.25 a_2=0.25 a2=0.25的二阶移动平均过程:
X t = ϵ t + a 1 ϵ t − 1 + a 2 ϵ t − 2 X_t=\epsilon_t+a_1\epsilon_{t-1}+a_2\epsilon_{t-2} Xt=ϵt+a1ϵt1+a2ϵt2

def ma2(wn):x = []# First element is just epsilon_tx.append(wn[0])# For the second element, let's take just the first coefficient (admittedly a judgment call)x.append(0.5*wn[0] + wn[1])# For the rest, use the full equationfor t in range(2, len(wn)):x.append(wn[t] + 0.5*wn[t - 1] + 0.25*wn[t - 2])return np.array(x)size = 1000
wn = st.norm.rvs(size=size)
ma2_series = pd.Series(ma2(wn)
)
wn_series = pd.Series(wn)
fig, ax = plt.subplots(figsize=(15, 2))
wn_series.plot(label="WN(0,1)", ax=ax)
ma2_series.plot(label=r"MA(2)", ax=ax)
plt.legend(loc="best")
plt.show()

在这里插入图片描述

Stationarity

时序数据具有平稳性,意味着其统计特性(如均值、方差)在时间上是常数或不会随时间变化。
给定一个时间序列 { X t } \{X_t\} {Xt},在时间 t 1 + τ , t 2 + τ , ⋯ , t n + τ t_1+\tau,t_2+\tau,\cdots ,t_n+\tau t1+τ,t2+τ,,tn+τ具有相应的时间分布 P ( X t 1 + τ , X t 2 + τ , ⋯ , X t n + τ ) P(X_{t_{1+\tau}},X_{t_{2+\tau}},\cdots ,X_{t_{n+\tau}}) P(Xt1+τ,Xt2+τ,,Xtn+τ)
对任何 τ , t 1 ⋯ , t n 和 n \tau,t_1\cdots,t_n\text{和}n τ,t1,tnn来说,如果 P ( X t 1 + τ , X t 2 + τ , ⋯ , X t n + τ ) = P ( X t 1 + , X t 2 , ⋯ , X t n ) P(X_{t_{1+\tau}},X_{t_{2+\tau}},\cdots ,X_{t_{n+\tau}})=P(X_{t1}+,X_{t2},\cdots ,X_{tn}) P(Xt1+τ,Xt2+τ,,Xtn+τ)=P(Xt1+,Xt2,,Xtn),那么时间序列 X t X_t Xt是平稳的。
本质上讲,平稳过程的统计量对时间平移是不变的。
如果时间序列 { X t } \{X_t\} {Xt}满足:

  1. 对任意 τ \tau τ来说 μ ( X t ) = μ ( X t + τ ) = μ \mu(X_t)=\mu(X_{t+\tau})=\mu μ(Xt)=μ(Xt+τ)=μ
  2. 对任意 t t t来说 E [ ∣ X t ∣ 2 ] < ∞ E[|X_t|^2]<\infin E[Xt2]<
  3. Γ ( t 1 , t 2 ) = Γ ( t 1 − t 2 ) \Gamma(t_1,t_2)=\Gamma(t_1-t_2) Γ(t1,t2)=Γ(t1t2)

上式中 Γ ( t 1 , t 2 ) \Gamma(t_1,t_2) Γ(t1,t2)表示 t 1 t_1 t1 t 2 t_2 t2的协方差定义为: Γ ( t 1 , t 2 ) = c o v ( t 1 , t 2 ) = E [ ( X t 1 − μ X t 1 ) ( X t 2 − μ X t 2 ) ] \Gamma(t_1,t_2)=cov(t_1,t_2)=E[(X_{t1}-\mu X_{t1})(X_{t2}-\mu X_{t2})] Γ(t1,t2)=cov(t1,t2)=E[(Xt1μXt1)(Xt2μXt2)]
平稳相关性意味着延迟参数 τ \tau τ,可用于参数化自协方差,从而:
Γ ( τ ) = E [ ( X t − μ ) ( X t + τ − μ ) ] = γ t − s \Gamma(\tau)=E[(X_t-\mu)(X_{t+\tau}-\mu)]=\gamma_{t-s} Γ(τ)=E[(Xtμ)(Xt+τμ)]=γts
{ γ t } \{\gamma_t\} {γt}为序列 { X t } \{X_t\} {Xt}的自协方差函数
通过标准差归一化 t 1 t_1 t1 t 2 t_2 t2时刻的自协方差,并产生自相关:
P ( t 1 , t 2 ) = c o v ( t 1 , t 2 ) σ t 1 σ t 2 = E [ ( X t 1 − μ ( X t 1 ) ) ( X t 2 − μ ( X t 2 ) ) ] σ t 1 σ t 2 P(t_1,t_2)=\frac{cov(t_1,t_2)}{\sigma_{t_1}\sigma_{t_2}}=\frac{E[(X_{t_1}-\mu(X_{t_1}))(X_{t_2}-\mu(X_{t_2}))]}{\sigma_{t_1}\sigma_{t_2}} P(t1,t2)=σt1σt2cov(t1,t2)=σt1σt2E[(Xt1μ(Xt1))(Xt2μ(Xt2))]
对于弱平稳性时间序列来说:
P ( τ ) = E [ ( X t − μ ) ( X t + τ − μ ) ] σ 2 P(\tau)=\frac{E[(X_t-\mu)(X_{t+\tau}-\mu)]}{\sigma^2} P(τ)=σ2E[(Xtμ)(Xt+τμ)]

Autocovariance of a stationary process

平稳时间序列的自协方差函数具有特定的形式,让 τ = ∣ t 1 − t 2 ∣ \tau=|t_1-t_2| τ=t1t2表示时间滞后lag,对于具有 n n n个时间点的平稳时间序列 { X t } \{X_t\} {Xt}来说,它的自协方差函数矩阵是对称和正定的:

  1. 对称性 γ k = γ − k , ∀ k ∈ Z \gamma_k=\gamma_{-k},\forall k\in \mathbb{Z} γk=γk,kZ
  2. 正定性:
    Γ n = ( γ k − j ) k , j = 1 n = ( γ 0 γ 1 γ 2 ⋯ γ n − 1 γ 1 γ 0 γ 1 ⋯ γ n − 2 γ 2 γ 1 γ 0 ⋯ γ n − 3 ⋮ ⋮ ⋮ ⋱ ⋮ γ n − 1 γ n − 2 ⋯ γ n − 3 γ 0 ) \Gamma_n=(\gamma_{k-j})^n_{k,j=1}= \left( \begin{matrix} \gamma_0 &\gamma_1 &\gamma_2 &\cdots &\gamma_{n-1} \\ \gamma_1 &\gamma_0 &\gamma_1 &\cdots &\gamma_{n-2} \\ \gamma_2 &\gamma_1 &\gamma_0 &\cdots &\gamma_{n-3} \\ \vdots &\vdots &\vdots &\ddots &\vdots \\ \gamma_{n-1} &\gamma_{n-2} &\cdots &\gamma_{n-3} &\gamma_0 \end{matrix} \right) Γn=(γkj)k,j=1n= γ0γ1γ2γn1γ1γ0γ1γn2γ2γ1γ0γn3γn1γn2γn3γ0

Moving Average Process

移动平均模型(MA模型)描述的是当前时间点的数据与过去噪声的关系。严格定义上来讲:其模型的定义是基于白噪声序列的假设。白噪声是一种特殊的时间序列模型,每个时间点的数据都是独立且服从相同分布的,且具有常数的均值和方差。 q q q阶的移动平均模型的函数表达式为:
Y t = ϵ t + a 1 ϵ t − 1 + ⋯ + a q ϵ t − q Y_t=\epsilon_t+a_1\epsilon_{t-1}+\dots+a_q\epsilon_{t-q} Yt=ϵt+a1ϵt1++aqϵtq
这一公式被称为q阶的移动平均模型,写作 M A ( q ) MA(q) MA(q),其中:

  1. Y t Y_t Yt是我们感兴趣的时间序列,在时间点 t t t的观察值。
  2. μ \mu μ是时间序列的均值或者期望值,这个值对所有的时间点都是相同的。
  3. ϵ t , ϵ t − 1 , ϵ t − 2 , … , ϵ t − q \epsilon_t,\epsilon_{t-1},\epsilon_{t-2},\dots,\epsilon_{t-q} ϵt,ϵt1,ϵt2,,ϵtq这些是所谓的白噪声项,每个时间点的值都是独立同分布的,通常假设为正态分布。这些项的均值为0,方差为 σ 2 \sigma^2 σ2
  4. θ 1 , θ 2 , … , θ q \theta_1,\theta_2,\dots,\theta_q θ1,θ2,,θq这些事模型的参数,每个参数的 θ \theta θ对应一个白噪声项,它们衡量的是对应的白噪声对当前时间点的影响程度。
  5. q q q是阶数,表示有多少个过去的白噪声项被纳入模型。

这个公式的含义是:在时间点 t t t,观察到的值 Y t Y_t Yt是由过去q个时间点的白噪声的线性组合加上一个常数 μ \mu μ和当前时间点的白噪声决定的。各个白噪声项的权重由参数 θ \theta θ决定。

Autoregressive Process

AR自回归模型,是一种被广泛用于分析时间序列数据的统计模型。从严格的定义上来说:在统计学中,一个自回归模型的形式是描述某个变量与其过去值的关系的。对于一个时间序列数据,自回归模型的 q q q阶形式为:
Y t = ϵ t + a 1 X t − 1 + ⋯ + a p X t − p Y_t=\epsilon_t+a_1X_{t-1}+\dots+a_pX_{t-p} Yt=ϵt+a1Xt1++apXtp
其中 p p p表示使用的时间滞后(lags)的数量。公式中:

  1. ϵ t \epsilon_t ϵt表示在时间点 t t t的误差项,也被称为白噪声项。
  2. a 1 X t − 1 + ⋯ + a p X t − p a_1X_{t-1}+\dots+a_pX_{t-p} a1Xt1++apXtp:这些项表示过去的 p p p个时间点的时间序列值对当前时间点的影响, a i a_i ai是弟 i i i哥滞后项的系数,代表了弟 i i i个滞后项对当前时间点的相对影响力。

Evaluation Metrics for Forecast Accuracy

预测是时间序列分析中最常见的推理任务之一。为了正确衡量时序模型的性能,通常的做法是将数据集分为两部分:训练数据和测试数据。使用训练数据估计模型参数,然后使用模型生成根据测试数据进行评估的预测。
错误统计有不同的风格,每种风格都有自己的优点和缺点。

Mean Absolute Error

最常用的指标是mean absolute error或者MAE。它的主要优点是易于理解和计算。我们注意到该指标与规模相关,这意味着它无法与具有不同单位的其他时间序列进行比较。此外,最小化 MAE 的方法会生成导致中位数的预测。
M A E = 1 n ∑ t = 1 n ∣ y t − y ^ t ∣ MAE=\frac{1}{n}\sum_{t=1}^n|y_t-\hat y_t| MAE=n1t=1nyty^t

Root Mean Squared Error

另一个经常用的是指标是root mean squared error或者RMSE,虽然更难解释。最小化 RMSE 的方法生成导致平均值的预测,并且与 MAE 类似,RMSE 与规模相关。
R M S E = 1 n ∑ t = 1 n ( y t − y ^ t ) 2 RMSE=\sqrt{\frac{1}{n}\sum_{t=1}^n{(y_t-\hat y_t)^2}} RMSE=n1t=1n(yty^t)2

Mean Absolute Percentage Error

为了在具有不同单位的时间序列之间进行比较,可以使用百分比误差。一个常用的基于百分比的指标是Mean Absolute Percentage ErrorMAPE。不幸的是,百分比误差的主要缺点是,当 y t y_t yt为零或接近零时,它们可能是无限的或未定义的。
M A P E = 1 n ∑ t = 1 n ∣ y t − y ^ t y t ∣ MAPE=\frac{1}{n}\sum_{t=1}^n|\frac {y_t-\hat y_t}{y_t}| MAPE=n1t=1nytyty^t

Symmetric Mean Absolute Percentage Error

MAPE 的一个特别缺点是,与正错误相比,它对负误差的惩罚更大。这导致了另一种基于百分比的指标,称为对称平均绝对百分比误差或 SMAPE。然而,计算该指标可能依然是不稳定的如果 y t y_t yt y ^ t \hat y_t y^t两者都接近于零的话。
S M A P E = 1 n ∑ t = 1 n ∣ y ^ t − y t ∣ ∣ y t ∣ + ∣ y ^ t ∣ SMAPE=\frac{1}{n}\sum_{t=1}^n\frac{|\hat y_t-y_t|}{|y_t|+|\hat y_t|} SMAPE=n1t=1nyt+y^ty^tyt

这篇关于【时间序列】时间序列的平稳性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/698113

相关文章

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

POJ1631最长单调递增子序列

最长单调递增子序列 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;publ

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr