🎯要点
- 小波分析,量化噪声
- 概率分布和统计推理
- 物理量和化学量数值计算
- 确定性非线性系统
- 金融资本市场和市场流动性
- 波形传播
- 气象建模评估
Python时间序列数学
时间序列分析是一种强大的统计技术,广泛应用于经济学、金融学、环境科学和工程学等领域。它涉及研究以特定时间间隔收集或记录的数据点,使分析师能够识别趋势、周期和季节性变化。了解时间序列分析背后的数学原理对于准确解释数据和做出明智的预测至关重要。
自相关和偏自相关
自相关测量不同滞后观测值之间的相关性。从数学上讲,滞后
k
k
k 的自相关函数定义为:
ρ
k
=
∑
t
=
k
+
1
T
(
y
t
−
y
ˉ
)
(
y
t
−
k
−
y
ˉ
)
∑
t
=
1
T
(
y
t
−
y
ˉ
)
2
\rho_k=\frac{\sum_{t=k+1}^T\left(y_t-\bar{y}\right)\left(y_{t-k}-\bar{y}\right)}{\sum_{t=1}^T\left(y_t-\bar{y}\right)^2}
ρk=∑t=1T(yt−yˉ)2∑t=k+1T(yt−yˉ)(yt−k−yˉ)
偏自相关测量不同滞后观测值之间的相关性,控制较短滞后时间序列的值。滞后 k k k 的偏自相关函数是去除所有中间滞后的线性依赖性后 y t y_t yt 和 y t − k y_{t-k} yt−k 之间的相关性。
Python自相关计算
方式1,使用lag_plot
import pandas as pd
data = pd.read_csv("minimum-temperatures.csv",
header=0, index_col=0, parse_dates=True,
squeeze=True)
data.head(15)
pd.plotting.lag_plot(data, lag=1)
方式2,使用 pandas.corr()
data = pd.read_csv("minimum-temperatures.csv",
header=0, index_col=0, parse_dates=True,
squeeze=True)
values = pd.DataFrame(data.values)
dataframe = pd.concat([values.shift(3), values.shift(2),
values.shift(1), values], axis=1)
dataframe.columns = ['t', 't+1', 't+2', 't+3']
result = dataframe.corr()
print(result)
方式3,使用plot_acf()
import pandas as pd
from statsmodels.graphics.tsaplots import plot_acf
data = pd.read_csv("minimum-temperatures.csv",
header=0, index_col=0, parse_dates=True,
squeeze=True)
plot_acf(data)
移动平均模型
移动平均模型通过对滑动窗口内的数据点进行平均来平滑时间序列。对于时间序列
y
t
y_t
yt,
q
q
q 阶模型为:
y
t
=
μ
+
ϵ
t
+
θ
1
ϵ
t
−
1
+
θ
2
ϵ
t
−
2
+
…
+
θ
q
ϵ
t
−
q
y_t=\mu+\epsilon_t+\theta_1 \epsilon_{t-1}+\theta_2 \epsilon_{t-2}+\ldots+\theta_q \epsilon_{t-q}
yt=μ+ϵt+θ1ϵt−1+θ2ϵt−2+…+θqϵt−q
其中
μ
\mu
μ 是均值,
ϵ
t
\epsilon_t
ϵt 是误差项,
θ
i
\theta_i
θi 是参数。
Python计算移动平均模型
简单计算
方式1
import numpy as np
arr = [1, 2, 3, 7, 9]
window_size = 3
i = 0
moving_averages = []
while i < len(arr) - window_size + 1:
window_average = round(np.sum(arr[
i:i+window_size]) / window_size, 2)
moving_averages.append(window_average)
i += 1
print(moving_averages)
方式2:
import pandas as pd
arr = [1, 2, 3, 7, 9]
window_size = 3
numbers_series = pd.Series(arr)
windows = numbers_series.rolling(window_size)
moving_averages = windows.mean()
moving_averages_list = moving_averages.tolist()
final_list = moving_averages_list[window_size - 1:]
print(final_list)
累积计算
方式1:
import numpy as np
arr = [1, 2, 3, 7, 9]
i = 1
moving_averages = []
cum_sum = np.cumsum(arr);
while i <= len(arr):
window_average = round(cum_sum[i-1] / i, 2)
moving_averages.append(window_average)
i += 1
print(moving_averages)
方式2:
import pandas as pd
arr = [1, 2, 3, 7, 9]
numbers_series = pd.Series(arr)
moving_averages = round(numbers_series.ewm(
alpha=0.5, adjust=False).mean(), 2)
moving_averages_list = moving_averages.tolist()
print(moving_averages_list)
自回归
自回归模型根据过去的值预测未来的值。
p
p
p 阶模型定义为:
y
t
=
ϕ
1
y
t
−
1
+
ϕ
2
y
t
−
2
+
…
+
ϕ
p
y
t
−
p
+
ϵ
t
y_t=\phi_1 y_{t-1}+\phi_2 y_{t-2}+\ldots+\phi_p y_{t-p}+\epsilon_t
yt=ϕ1yt−1+ϕ2yt−2+…+ϕpyt−p+ϵt
其中
ϕ
i
\phi_i
ϕi 是参数,
ϵ
t
\epsilon_t
ϵt 是误差项。
自回归移动平均线
该模型结合了上述两种模型。ARMA(p, q) 模型为:
y
t
=
ϕ
1
y
t
−
1
+
…
+
ϕ
p
y
t
−
p
+
ϵ
t
+
θ
1
ϵ
t
−
1
+
…
+
θ
q
ϵ
t
−
q
y_t=\phi_1 y_{t-1}+\ldots+\phi_p y_{t-p}+\epsilon_t+\theta_1 \epsilon_{t-1}+\ldots+\theta_q \epsilon_{t-q}
yt=ϕ1yt−1+…+ϕpyt−p+ϵt+θ1ϵt−1+…+θqϵt−q
自回归综合移动平均线
此模型是自回归移动平均线模型的扩展,其中包括差分以实现平稳性。ARIMA(p, d, q) 模型为:
(
1
−
B
)
d
y
t
=
ϕ
1
y
t
−
1
+
…
+
ϕ
p
y
t
−
p
+
ϵ
t
+
θ
1
ϵ
t
−
1
+
…
+
θ
q
ϵ
t
−
q
(1-B)^d y_t=\phi_1 y_{t-1}+\ldots+\phi_p y_{t-p}+\epsilon_t+\theta_1 \epsilon_{t-1}+\ldots+\theta_q \epsilon_{t-q}
(1−B)dyt=ϕ1yt−1+…+ϕpyt−p+ϵt+θ1ϵt−1+…+θqϵt−q
其中
B
B
B 是后移算子,
d
d
d 是差分阶。
广义自回归条件异方差
此模型用于对方差变化的时间序列进行建模。GARCH(p, q) 模型为:
y
t
=
μ
+
ϵ
t
ϵ
t
=
σ
t
z
t
σ
t
2
=
α
0
+
α
1
ϵ
t
−
1
2
+
…
+
α
p
ϵ
t
−
p
2
+
β
1
σ
t
−
1
2
+
…
+
β
q
σ
t
−
q
2
\begin{gathered} y_t=\mu+\epsilon_t \\ \epsilon_t=\sigma_t z_t \\ \sigma_t^2=\alpha_0+\alpha_1 \epsilon_{t-1}^2+\ldots+\alpha_p \epsilon_{t-p}^2+\beta_1 \sigma_{t-1}^2+\ldots+\beta_q \sigma_{t-q}^2 \end{gathered}
yt=μ+ϵtϵt=σtztσt2=α0+α1ϵt−12+…+αpϵt−p2+β1σt−12+…+βqσt−q2
其中
z
t
z_t
zt 是标准正态变量。
向量自回归
此模型捕捉多个时间序列之间的线性相互依赖关系。
k
k
k 个时间序列
y
t
1
,
y
t
2
,
…
,
y
t
k
y_{t 1}, y_{t 2}, \ldots, y_{t k}
yt1,yt2,…,ytk 的 VAR§ 模型为:
y
t
=
c
+
A
1
y
t
−
1
+
A
2
y
t
−
2
+
…
+
A
p
y
t
−
p
+
ϵ
t
y_t=c+A_1 y_{t-1}+A_2 y_{t-2}+\ldots+A_p y_{t-p}+\epsilon_t
yt=c+A1yt−1+A2yt−2+…+Apyt−p+ϵt
其中
c
c
c 是常数向量,
A
i
A_i
Ai 是系数矩阵,
ϵ
t
\epsilon_t
ϵt 是误差项向量。
状态空间模型
状态空间模型为建模可以用未观察状态表示的时间序列数据提供了一个框架。一般形式为:
x
t
+
1
=
F
x
t
+
G
u
t
y
t
=
H
x
t
+
v
t
\begin{aligned} x_{t+1} & =F x_t+G u_t \\ y_t & =H x_t+v_t \end{aligned}
xt+1yt=Fxt+Gut=Hxt+vt
其中
x
t
x_t
xt 是状态向量,
u
t
u_t
ut 和
v
t
v_t
vt 是误差项,
F
、
G
F、G
F、G 和
H
H
H 是矩阵。
指数平滑
指数平滑技术将递减权重应用于过去的观测值。简单指数平滑预测
y
t
y_t
yt 的值如下:
y
^
t
+
1
=
α
y
t
+
(
1
−
α
)
y
^
t
\hat{y}_{t+1}=\alpha y_t+(1-\alpha) \hat{y}_t
y^t+1=αyt+(1−α)y^t
其中
α
\alpha
α 是平滑参数。