知识点回顾

  1. 序列数据的处理:
    1. 处理非平稳性:n阶差分
    2. 处理季节性:季节性差分
    3. 自回归性无需处理
  2. 模型的选择
    1. AR(p) 自回归模型:当前值受到过去p个值的影响
    2. MA(q) 移动平均模型:当前值收到短期冲击的影响,且冲击影响随时间衰减
    3. ARMA(p,q) 自回归滑动平均模型:同时存在自回归和冲击影响

昨天说了数据的检验,需要做自相关性检验、平稳性检验、季节性检验。
我们用了三种核心的诊断工具:

  1. 自相关性检验 (ACF/PACF图):检查数据点之间是否存在内在的、延迟的关联。
  2. 平稳性检验 (ADF检验):判断数据的统计特性(如均值、方差)是否随时间改变。
  3. 季节性检验 (肉眼观察或季节性分解):识别数据中是否存在固定的周期性波动。

那么如果数据存在某些特性需要如何处理呢?

我们的核心目标是让数据变得平稳。为什么平稳性如此重要?因为绝大多数经典的时间序列模型(比如ARIMA模型)都建立在一个基本假设之上:数据的统计特性是恒定的。如果数据不平稳,就像一个人的脾气阴晴不定,模型就很难抓住其规律,预测自然也就不准了。

我们今天会针对两大“病症”进行处理:非平稳性和季节性。而自相关性,我们则需要换个思路,它不是一个要消除的“病症”,反而是我们要利用的“特征”,我们最后会讲到。

一、序列数据的处理

处理非平稳性

通过昨天的ADF检验,我们发现p值显著大于0.05,这表明数据是非平稳的。通常,这意味着数据存在趋势(Trend),比如股价长期来看在上涨,或者销量逐年递增。

核心疗法:差分 (Differencing)

差分是解决趋势性问题的最强有力的工具。它的思想非常简单:用后一个时间点的值减去前一个时间点的值。这样做的效果是,它消除了数据在“水平”上的变化,转而关注数据“变化的速度”。

一阶差分

diff1​=yt​−yt−1​

这通常能有效地消除线性的趋势。

如果一阶差分后数据仍然不平稳怎么办?那就再做一次!

二阶差分

diff2​=diff1t​​−diff1t−1​​=(yt​−yt−1​)−(yt−1​−yt−2​)

这可以处理更复杂的(例如,曲线形的)趋势。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf# 设置中文字体,防止matplotlib显示乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 1. 生成一段非平稳数据(随机游走+趋势)
np.random.seed(42)
# 随机游走部分
random_walk = np.random.randn(500).cumsum() # 累积和生成随机游走
# 添加一个线性趋势
trend = np.linspace(0, 100, 500)
# 合成我们的时序数据
data = pd.Series(random_walk + trend)
data.index = pd.date_range(start='2022-01-01', periods=500)

随机游走(Random Walk)是一种数学模型,常用于描述随机过程中的路径变化。在随机游走模型中,每一步的方向和大小都是随机确定的,且与之前的步骤相互独立。这种模型可以用来模拟股票价格、分子运动、赌博结果等具有不确定性的现象。

上述代码为了合成一个具有趋势性和随机性的时间序列,它结合了随机游走和线性趋势的特征

# 2. 诊断原始数据
plt.figure(figsize=(12, 6))plt.plot(data)
plt.title('原始数据(有明显趋势)')

# ADF检验
adf_result_original = adfuller(data)
print(f'原始数据的ADF检验结果:')
print(f'  ADF Statistic: {adf_result_original[0]}')
print(f'  p-value: {adf_result_original[1]}') # p-value会非常大,说明是非平稳的#Text(0.5, 1.0, '原始数据(有明显趋势)')#  原始数据的ADF检验结果:
#  ADF Statistic: 0.13578365336168233
#  p-value: 0.9684209812957272# 3. 进行一阶差分治疗
data_diff = data.diff().dropna() # .diff()进行差分, .dropna()移除第一个NaN值plt.plot(data_diff)
plt.title('一阶差分后的数据')
plt.tight_layout()
plt.show()# 4. 诊断“治疗后”的数据
adf_result_diff = adfuller(data_diff)
print(f'一阶差分后数据的ADF检验结果:')
print(f'  ADF Statistic: {adf_result_diff[0]}')
print(f'  p-value: {adf_result_diff[1]}') # p-value会变得非常小,说明数据变平稳了# 一阶差分后数据的ADF检验结果:
#   ADF Statistic: -22.313025583815016
#   p-value: 0.0

我们使用了data.diff()进行了一阶差分。从图中可以清晰地看到,原本一路向上的趋势消失了,数据开始围绕一个固定的均值(0附近)波动。

处理季节性

通过观察图像或季节性分解,我们发现数据存在以年、季度或月为单位的固定周期性波动。

核心疗法:季节性差分 (Seasonal Differencing)

思想和普通差分非常类似,但不是减去上一个值,而是减去上一个周期的对应值。

seasonal_diff=yt​−yt−s​

其中 ( s ) 是季节性周期。例如:

  • 对于月度数据,年度季节性周期 ( s = 12 );
  • 对于季度数据,年度季节性周期 ( s = 4 )。

下面生成一段带有明显季节性特征的数据。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller# 1. 生成一段有季节性的数据
# 假设是4年的月度数据,周期为12
time_index = pd.date_range(start='2020-01-01', periods=48, freq='M')
# 季节性成分(用sin函数模拟)
seasonal_component = np.sin(np.arange(48) * (2 * np.pi / 12)) * 10 # 振幅为10,周期为12个月,sin函数模拟季节性波动
# 趋势成分
trend_component = np.linspace(0, 20, 48) # linspace函数为生成0到20的线性趋势,包含48个点
# 随机噪声
noise = np.random.randn(48) * 2# 合成数据
seasonal_data = pd.Series(seasonal_component + trend_component + noise, index=time_index)# 2. 观察原始数据
plt.figure(figsize=(12, 6))
plt.subplot(211)
plt.plot(seasonal_data)
plt.title('原始季节性数据')# 3. 进行季节性差分(周期s=12)
seasonal_data_diff = seasonal_data.diff(periods=12).dropna()plt.subplot(212)
plt.plot(seasonal_data_diff)
plt.title('季节性差分后 (s=12) 的数据')
plt.tight_layout()
plt.show()# 4. 检查差分后的平稳性
# 注意:原始数据因为有趋势,肯定不平稳。季节性差分通常也能消除一部分趋势。
adf_result_original = adfuller(seasonal_data)
print(f'原始季节性数据的p-value: {adf_result_original[1]}')adf_result_seasonal_diff = adfuller(seasonal_data_diff)
print(f'季节性差分后数据的p-value: {adf_result_seasonal_diff[1]}')# 原始季节性数据的p-value: 0.9918566279818364
# 季节性差分后数据的p-value: 4.596236388830458e-12

我们使用 seasonal_data.diff(periods=12),这表示每个数据点都减去它12个月前的值。从图中可以看到,规律的波峰和波谷被“拉平”了,季节性特征被有效地移除了。

ADF检验的p值同样会从一个较大的值(因为原始数据含趋势)显著降低,证明数据在季节性差分后变得更加平稳。

如果数据既有趋势又有季节性,通常可以先做季节性差分,再对结果做一阶差分。

目前已经学会了如何通过差分来“驯服”那些不平稳和有季节性的数据,让它们变得温顺(平稳)。

现在,我们手上拿到了一份“健康”的平稳数据。接下来要做的,就是为它选择一个合适的模型。我们来深入了解时间序列预测的三大基石模型:AR、MA 和 ARMA。

模型的选择,依赖这些因素:

  1. ACF 图 (自相关图):衡量一个值和它所有过去值之间的关系,不管这些关系是直接的还是间接的。比如,Yt 和 Yt-2 的关系,也包含了 Yt-1 作为中间人的“传话效应”。
  2. PACF 图 (偏自相关图):只衡量一个值和它某个过去值之间的直接、纯粹的关系,排除了所有“中间人”的干扰。它回答的是:“在剔除了 Yt-1 的影响后, Yt-2 对 Yt 还有多少直接影响力?”

二、模型的选择

2.1 AR模型

AR模型 (Autoregressive Model) - “惯性模型”,全称自回归模型,是这三个模型中最直观的一个。

核心思想:未来是过去的延伸。一个时间点的值,很大程度上是由它紧邻的前几个时间点的值决定的。它认为时间序列数据具有一种“惯性”或“记忆性”。比如一只股票如果连续几天上涨,形成上涨趋势,那么它今天的价格也很有可能受到前几天价格的积极影响。

AR§ 模型:表示当前值 Yt 只与它过去的 p 个值 (Yt-1, Yt-2, …, Yt-p) 有关。p 被称为模型的“阶数”

当一个序列的“惯性”是其主要特征时,AR模型是最佳选择。我们用侦探工具来判断:

技术指标:

  1. PACF 图呈现“截尾” (Cuts off):偏自相关图在延迟 p 阶之后,突然断崖式地落入置信区间。这说明,只有前 p 个时期的值对当前值有直接影响,更久远的影响几乎为零。
  2. ACF 图呈现“拖尾” (Tails off):自相关图的相关系数是缓慢、指数级下降的。这是因为 Yt-1 影响 Yt,Yt-2 影响 Yt-1,这种影响会像涟漪一样传递下去,导致ACF图缓慢衰减。

AR 模型更适合进行短期预测。因为随着预测期的延长,模型对过去值的依赖会导致误差不断累积,预测的准确性会逐渐降低。比如预测未来几天的气温,AR 模型可以利用过去几天的气温数据进行相对准确的短期预测。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_process import ArmaProcess
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA# 设置中文字体,防止matplotlib显示乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# --- AR(2) 案例:湖水温度 ---
print("--- 案例一:AR(2)模型 - 湖水温度 ---")# 1.1 生成AR(2)时间序列数据
# AR(2)模型结构:X_t = 0.7*X_{t-1} + 0.2*X_{t-2} + ε_t
# 其中ε_t是白噪声,系数0.7和0.2控制了前两期对当前值的影响程度
ar_params = np.array([0.7, 0.2])  # AR系数:φ₁=0.7, φ₂=0.2
ma_params = np.array([])          # MA部分为空(纯AR模型)# 转换为statsmodels要求的格式:
# AR系数需添加首项1并取负,即 [1, -φ₁, -φ₂]
ar_coeffs = np.r_[1, -ar_params]  # 生成 [1, -0.7, -0.2]
# MA系数需添加首项1,即 [1, θ₁, θ₂, ...]
ma_coeffs = np.r_[1, ma_params]   # 生成 [1.]# 创建AR(2)过程实例
ar_process = ArmaProcess(ar=ar_coeffs, ma=ma_coeffs)# 生成500个样本点,模拟500天的湖水温度数据
# 设置随机种子确保结果可复现
np.random.seed(100)
ar_data = ar_process.generate_sample(nsample=500)# 1.2 时间序列分析的"侦探工作":通过可视化初步诊断模型阶数
fig, axes = plt.subplots(3, 1, figsize=(10, 9))# 1.2.1 绘制原始时间序列图
axes[0].plot(ar_data)
axes[0].set_title('模拟的湖水温度数据 (AR(2)过程)')
axes[0].set_ylabel('温度值')
# 关键点:观察数据是否具有平稳性特征(均值和方差是否随时间变化)# 1.2.2 绘制自相关函数(ACF)图 - 衡量序列与其滞后值的相关性
plot_acf(ar_data, ax=axes[1], lags=20, title='自相关函数 (ACF)')
# 关键点:AR(p)模型的ACF会呈现指数衰减或周期性衰减
# 这里我们应该看到ACF在滞后2阶后显著下降# 1.2.3 绘制偏自相关函数(PACF)图 - 控制了中间滞后项后的相关性
plot_pacf(ar_data, ax=axes[2], lags=20, title='偏自相关函数 (PACF)')
# 关键点:AR(p)模型的PACF会在p阶后截断(变为不显著)
# 这里我们应该看到PACF在滞后2阶后截断,辅助确认p=2plt.tight_layout()
plt.show()

--- 案例一:AR(2)模型 - 湖水温度 ---

  1. 截尾(Cut-off)
    定义:函数值在某一阶数后突然变为 0(或在置信区间内),且之后几乎不再显著不为 0。

特点:存在一个明确的 “截断点”,超过该点后相关性骤降为零。

示例:若 ACF 在 k=2 阶后的值接近 0,则称 ACF 在 2 阶截尾。

  1. 拖尾(Tail-off)
    定义:函数值随阶数增加逐渐衰减(如指数衰减、振荡衰减),但始终不降至 0,呈现 “拖曳” 趋势。

特点:无明确截断点,相关性缓慢减弱,但长期保持非零。

示例:若 PACF 的值从 k=1 阶开始逐渐趋近于 0,但始终大于 0,则称 PACF 拖尾。

  • PACF图 (偏自相关图):这是我们的关键证据!可以看到,在滞后1和2阶,柱子非常显著。但在2阶之后,几乎所有柱子都突然“截断”,掉入了蓝色置信区间。 这说明,只有前两天的温度对今天有直接影响。 PACF在2阶截尾 -> 强烈暗示 p=2。
  • ACF图 (自相关图):柱子是缓慢衰减的,呈现一种“拖尾”形态。这符合我们对“惯性”的理解,影响会层层传递下去。ACF拖尾,验证了AR模型的猜想。

所以ar模型适合自回归的场景

我们的诊断是AR(2),即 ARIMA(2,0,0)。我们来验证一下。

ARIMA(p,d,q)其中包含3个参数,ARIMA(ar_data, order=(2, 0, 0))等价于AR(2)

# 1.3 根据ACF/PACF图的诊断,建立ARIMA(2,0,0)模型
model_ar = ARIMA(ar_data, order=(2, 0, 0)).fit()
print("\nAR(2)模型诊断报告:")
print(model_ar.summary())

AR(2)模型诊断报告:SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  500
Model:                 ARIMA(2, 0, 0)   Log Likelihood                -724.007
Date:                Thu, 26 Jun 2025   AIC                           1456.014
Time:                        23:22:20   BIC                           1472.873
Sample:                             0   HQIC                          1462.629- 500                                         
Covariance Type:                  opg                                         
==============================================================================coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const         -0.0971      0.578     -0.168      0.867      -1.231       1.036
ar.L1          0.6557      0.042     15.552      0.000       0.573       0.738
ar.L2          0.2646      0.043      6.096      0.000       0.180       0.350
sigma2         1.0562      0.066     16.075      0.000       0.927       1.185
===================================================================================
Ljung-Box (L1) (Q):                   0.04   Jarque-Bera (JB):                 3.45
Prob(Q):                              0.84   Prob(JB):                         0.18
Heteroskedasticity (H):               0.96   Skew:                             0.19
Prob(H) (two-sided):                  0.79   Kurtosis:                         3.15
===================================================================================

这个表的结果让ai帮助你们解读,信息比较多

系数显著:模型准确地识别出前两阶的自回归关系是统计上显著的,并且学习到的系数值(0.66, 0.26)与真实值(0.7, 0.2)非常接近。

2.2 MA模型

数据的波动是由短期冲击引起的(而非历史观测值),且冲击影响会随时间衰减。例如:突发事件(罢工、自然灾害)对生产的影响、测量误差。

假设一条生产线非常稳定,但偶尔会因为工人操作失误或机器小故障(这些都是随机冲击/误差)导致当天的产量出现波动。这个冲击的影响可能只会持续一两天。我们来创建一个MA(2)过程。

# --- MA(2) 案例:生产线意外 ---
print("\n" + "---"*15)
print("--- 案例二:MA(2)模型 - 生产线意外 ---")"""
=====================
2.1 生成MA(2)时间序列
=====================
MA(2)模型数学表达式:y_t = ε_t + θ₁ε_{t-1} + θ₂ε_{t-2}
- 当前值由当前及前两期的随机冲击(ε)线性组合而成
- 适用于捕捉短期冲击对序列的影响(如生产线故障、原料短缺)
"""
# AR部分参数:因无自回归项
ar_params = np.array([])  
# MA部分参数:0.8和0.4分别是前两期冲击的权重
ma_params = np.array([0.8, 0.4])  # 生成MA(2)过程:直接传入AR和MA系数数组(注意无参数名)
ma_process = ArmaProcess.from_coeffs(ar_params, ma_params)# 设置随机种子保证结果可复现,生成500个样本点
np.random.seed(200)
ma_data = ma_process.generate_sample(nsample=500)"""
============================
2.2 可视化分析时间序列特征
============================
通过观察ACF和PACF图判断模型阶数:
- MA(q)模型的ACF应在q阶后截尾(本例q=2)
- PACF应呈现拖尾特征(与AR模型区分)
"""
# 创建3个子图:时间序列图、ACF图、PACF图
fig, axes = plt.subplots(3, 1, figsize=(10, 9))# 绘制时间序列图:展示生产线产量波动
axes[0].plot(ma_data)
axes[0].set_title('模拟的生产线产量波动 (MA(2)过程)')
axes[0].set_xlabel('时间点')
axes[0].set_ylabel('产量波动值')# 绘制自相关函数(ACF)图:观察序列相关性衰减模式
plot_acf(ma_data, ax=axes[1], lags=20, title='自相关函数 (ACF)')
# 理论预期:MA(2)的ACF应在2阶后截尾(相关性骤降为0)# 绘制偏自相关函数(PACF)图:剔除中间变量影响的直接相关性
plot_pacf(ma_data, ax=axes[2], lags=20, title='偏自相关函数 (PACF)')
# 理论预期:MA(2)的PACF应呈现拖尾(指数或振荡衰减)# 优化子图布局,避免重叠
plt.tight_layout()
plt.show()

--------------------------------------------- --- 案例二:MA(2)模型 - 生产线意外 ---

  • ACF图 (自相关图):这次轮到ACF图提供关键线索了!可以看到,在滞后1和2阶,柱子非常显著。但在2阶之后,柱子突然“截断”,掉入了置信区间。 这说明,一个随机冲击的影响最多只持续2天。ACF在2阶截尾 -> 强烈暗示 q=2。
  • PACF图 (偏自相关图):柱子呈现出缓慢衰减的“拖尾”形态。PACF拖尾,验证了MA模型的猜想。
# 2.3 根据ACF/PACF图的诊断,建立ARIMA(0,0,2)模型
model_ma = ARIMA(ma_data, order=(0, 0, 2)).fit()
print("\nMA(2)模型诊断报告:")
print(model_ma.summary())
Text(0.5, 1.0, '原始数据(有明显趋势)')
原始数据的ADF检验结果:ADF Statistic: 0.13578365336168233p-value: 0.9684209812957272
一阶差分后数据的ADF检验结果:ADF Statistic: -22.313025583815016p-value: 0.0
原始季节性数据的p-value: 0.9918566279818364
季节性差分后数据的p-value: 4.596236388830458e-12
--- 案例一:AR(2)模型 - 湖水温度 ---AR(2)模型诊断报告:SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  500
Model:                 ARIMA(2, 0, 0)   Log Likelihood                -724.007
Date:                Thu, 26 Jun 2025   AIC                           1456.014
Time:                        23:22:20   BIC                           1472.873
Sample:                             0   HQIC                          1462.629- 500                                         
Covariance Type:                  opg                                         
==============================================================================coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const         -0.0971      0.578     -0.168      0.867      -1.231       1.036
ar.L1          0.6557      0.042     15.552      0.000       0.573       0.738
ar.L2          0.2646      0.043      6.096      0.000       0.180       0.350
sigma2         1.0562      0.066     16.075      0.000       0.927       1.185
===================================================================================
Ljung-Box (L1) (Q):                   0.04   Jarque-Bera (JB):                 3.45
Prob(Q):                              0.84   Prob(JB):                         0.18
Heteroskedasticity (H):               0.96   Skew:                             0.19
Prob(H) (two-sided):                  0.79   Kurtosis:                         3.15
===================================================================================Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).---------------------------------------------
--- 案例二:MA(2)模型 - 生产线意外 ---MA(2)模型诊断报告:SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  500
Model:                 ARIMA(0, 0, 2)   Log Likelihood                -704.426
Date:                Thu, 26 Jun 2025   AIC                           1416.852
Time:                        23:26:03   BIC                           1433.710
Sample:                             0   HQIC                          1423.467- 500                                         
Covariance Type:                  opg                                         
==============================================================================coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.0582      0.100      0.584      0.559      -0.137       0.253
ma.L1          0.8252      0.041     19.978      0.000       0.744       0.906
ma.L2          0.4180      0.041     10.099      0.000       0.337       0.499
sigma2         0.9785      0.063     15.604      0.000       0.856       1.101
===================================================================================
Ljung-Box (L1) (Q):                   0.42   Jarque-Bera (JB):                 0.01
Prob(Q):                              0.51   Prob(JB):                         0.99
Heteroskedasticity (H):               1.08   Skew:                            -0.01
Prob(H) (two-sided):                  0.62   Kurtosis:                         2.99
===================================================================================

模型报告中,ma.L1的系数约为0.8,ma.L2的系数约为0.4,和我们设定的参数高度吻合!p值也都极其显著。再次成功破案!

2.3 ARMA模型

现实世界中,很多情况是混合的。比如公司月度销售额,既有上个月业绩带来的惯性(AR成分),又会受到某次市场推广活动或负面新闻的短期冲击(MA成分)。我们来创建一个ARMA(1,1)过程。

# --- ARMA(1,1) 案例:公司月度销售 ---
print("\n" + "---"*15)
print("--- 案例三:ARMA(1,1)模型 - 公司月度销售 ---")# 3.1 我们来“创造”一个ARMA(1,1)过程
# 修复:直接传入系数数组,并确保包含常数项
ar_params = np.array([1, -0.8])  # AR部分: [1, -φ1]
ma_params = np.array([1, 0.5])   # MA部分: [1, θ1]# 正确调用方式:直接传入系数数组,不使用参数名
arma_process = ArmaProcess.from_coeffs(ar_params, ma_params)np.random.seed(300)
arma_data = arma_process.generate_sample(nsample=500)# 3.2 作为“侦探”,我们观察数据和ACF/PACF图
fig, axes = plt.subplots(3, 1, figsize=(10, 9))
axes[0].plot(arma_data)
axes[0].set_title('模拟的公司月度销售 (ARMA(1,1)过程)')
plot_acf(arma_data, ax=axes[1], lags=20, title='自相关函数 (ACF)')
plot_pacf(arma_data, ax=axes[2], lags=20, title='偏自相关函数 (PACF)')
plt.tight_layout()
plt.show()

--------------------------------------------- --- 案例三:ARMA(1,1)模型 - 公司月度销售 ---

  • ACF图 和 PACF图:这次我们发现,情况变得复杂了。ACF图和PACF图都没有出现明显的“截尾”现象,两者的柱子都是缓慢衰减,呈现“拖尾”形态。
    解读:当两个图都拖尾时,这就是一个强烈的信号,说明数据背后的驱动力是混合的,既有AR成分,也有MA成分。

  • 定阶:对于ARMA模型,从图上直接确定p和q的精确值会比较困难。通常我们会从低阶开始尝试,比如(1,1), (2,1), (1,2),然后结合后续的模型评估指标(如AIC, BIC)来选择最优的。但既然两个图都是拖尾,我们就先从最简单的ARMA(1,1)开始猜起。

# 3.3 根据ACF/PACF图的诊断,建立ARIMA(1,0,1)模型
model_arma = ARIMA(arma_data, order=(1, 0, 1)).fit()
print("\nARMA(1,1)模型诊断报告:")
print(model_arma.summary())

ARMA(1,1)模型诊断报告:SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  500
Model:                 ARIMA(1, 0, 1)   Log Likelihood               -1058.680
Date:                Thu, 26 Jun 2025   AIC                           2125.360
Time:                        23:26:39   BIC                           2142.218
Sample:                             0   HQIC                          2131.975- 500                                         
Covariance Type:                  opg                                         
==============================================================================coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.1610      0.393      0.410      0.682      -0.608       0.930
ar.L1          0.5656      0.035     16.047      0.000       0.496       0.635
ma.L1          0.8998      0.021     43.067      0.000       0.859       0.941
sigma2         4.0193      0.241     16.654      0.000       3.546       4.492
===================================================================================
Ljung-Box (L1) (Q):                  84.33   Jarque-Bera (JB):                 1.10
Prob(Q):                              0.00   Prob(JB):                         0.58
Heteroskedasticity (H):               1.15   Skew:                            -0.03
Prob(H) (two-sided):                  0.36   Kurtosis:                         3.22
===================================================================================

模型报告中,ar.L1系数约为0.8,ma.L1系数约为0.5,都非常接近我们的设定值,且p值都为0.000。

前提:以上所有判断都必须在数据平稳后进行!如果你的原始数据不平稳,请先做差分,然后对差分后的序列进行ACF/PACF分析。

这正是我们最终要学习的 ARIMA(p, d, q) 模型的由来,将在明天学习。

  • AR§: 自回归项,看PACF。
  • I(d): 差分阶数 (Integrated),看我们为了让数据平稳做了几次差分。
  • MA(q): 移动平均项,看ACF。

总结

  • 非平稳性(趋势) -> 使用差分 (.diff())

  • 季节性 -> 使用季节性差分 (.diff(periods=s))

  • 自相关性 -> 不消除,而是利用 ACF/PACF图 来为后续的模型选择提供线索。

  • 截尾 (Cut off):ACF或PACF图在某个延迟之后,相关系数突然变得非常小,几乎都在置信区间内。

  • 拖尾 (Tail off):相关系数随着延迟增加而缓慢、指数级地衰减,而不是突然截断。

  • 如果ACF截尾,PACF拖尾 -> 考虑 MA(q) 模型。

  • 如果PACF截尾,ACF拖尾 -> 考虑 AR§ 模型。

  • 如果ACF和PACF都拖尾,可能需要 ARMA(p, q) 模型。

@浙大疏锦行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94663.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94663.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94663.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪吃蛇游戏(纯HTML)

一、游戏截图二、源码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>离谱贪吃蛇</title>…

InnoDB详解2

InnoDB详解2一.行结构1.结构图2.InnoDB支持的数据行格式1&#xff09;查看当前数据库或表的行格式2&#xff09;指定行格式3&#xff09;DYNAMIC 格式的组成3.数据区存储真实数据方式4.行的额外(管理)信息区5.头信息区域1&#xff09;删除一行记录时在InnoDB内部执行的操作6.Nu…

Rust系统编程实战:驾驭内存安全、无畏并发与WASM跨平台开发

简介本文深入探讨Rust在系统编程领域的核心实战应用&#xff0c;通过代码示例解析其所有权机制如何保障内存安全&#xff0c;如何利用 fearless concurrency 构建高性能并发应用&#xff0c;并实践如何将Rust代码编译为WebAssembly&#xff08;WASM&#xff09;以突破性能瓶颈。…

JavaScript 基础入门:从概念解析到流程控制

文章目录1. JavaScript 核心认知1.1 浏览器与 JavaScript 的关系1.2 JavaScript 的三大核心组成1.3 JavaScript 引入1.3.1 内联脚本&#xff08;事件属性绑定&#xff09;1.3.2 内部脚本&#xff08;<script> 标签嵌入&#xff09;1.3.3 外部脚本&#xff08;独立 .js 文…

WebSocket简单了解

WebSocket 是一种计算机网络通信协议&#xff0c;它在客户端和服务器之间建立一个持久的、双向的通信通道。与传统的 HTTP 请求-响应模型不同&#xff0c;WebSocket 允许数据在客户端和服务器之间实时双向传输&#xff0c;因此非常适合需要即时交互的应用&#xff0c;如实时聊天…

【实时Linux实战系列】基于实时Linux的生物识别系统

在当今数字化时代&#xff0c;生物识别技术因其高安全性和便捷性而被广泛应用。生物识别系统通过识别个人的生物特征&#xff08;如面部、指纹等&#xff09;来验证身份&#xff0c;广泛应用于安全门禁、移动支付、智能设备解锁等领域。这些系统不仅提高了安全性&#xff0c;还…

汇智焕彩,聚势创新 - openKylin 2.0 SP2正式发布!

OpenAtom openKylin&#xff08;简称 “openKylin”&#xff09; 2.0 SP2版本正式发布&#xff01;本次版本更新在底层核心能力上&#xff0c;持续维护 6.6 稳定版内核&#xff0c;深度适配海光、飞腾、兆芯、龙芯等国产主流芯片&#xff0c;并积极推动 RISC-V 开放指令集架构生…

怎么评估高精度组合惯导的惯性导航价格?

内容概要高精度组合惯导系统的价格评估是一个需要综合考量多个关键因素的复杂过程。理解其成本构成&#xff0c;对于制定合理的采购预算和优化决策至关重要。评估的核心首先聚焦于IMU传感器价格&#xff0c;这是整个系统成本中最主要的组成部分之一。同时&#xff0c;选择可靠且…

深度学习开篇

首先我们要知道深度学习和机器学习的关系——深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向。 深度学习简介 我理解的深度学习就通过多层感知器&#xff0c;对数据进行训练&#xff0c;可以达到非线性变换&#xff0c;如何可以提取非线性…

Typescript入门-interface讲解

对象成员语法形式1&#xff09;对象属性2&#xff09;对象的属性索引3&#xff09;对象的方法4&#xff09;函数5&#xff09;构造函数interface 的继承interface 继承 interfaceinterface 继承 typeinterface 继承 class接口合并interface 与 type 的异同interface 是对象的模…

数据结构青铜到王者第五话---LinkedList与链表(2)

目录 一、常见的链表题目练习&#xff08;续&#xff09; 1、链表的回文结构。 2、输入两个链表&#xff0c;找出它们的第一个公共结点。 3、给定一个链表&#xff0c;判断链表中是否有环。 4、给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#…

Kafa面试经典题--Kafka为什么吞吐量大,速度快

这是一个非常核心的面试题和技术问题。Kafka 的高吞吐量和速度并非来自某一项“银弹”技术,而是其架构设计中一系列精巧决策共同作用的结果。 一、核心思想:最大化利用底层硬件资源 Kafka 速度快的根本原因是,它的设计哲学是 “尽可能地避免不必要的开销,并将硬件(尤其是…

Stream API 新玩法:从 teeing()到 mapMulti()

1. 背景&#xff1a;Stream API 的演进 自 Java 8 引入 Stream API 以来&#xff0c;Java 的集合处理方式发生了质变。开发者可以用声明式风格实现复杂的数据转换与聚合。然而&#xff0c;随着应用场景多样化&#xff0c;社区逐渐发现一些“尴尬空缺”&#xff1a; 聚合时&…

STM32G4 SVPWM VF开环强拖电机

目录一、STM32G4 SVPWM VF开环强拖电机1 SVPWM1.1 SVPWM技术简介1.2 基于零序分量注入的SVPWM算法的实现2. VF开环强拖电机3. VF启动电机实验现象附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)一、STM32G4 SVPWM VF开环强拖电机 1 SVPWM 1.1 SVPWM技术简介 SVPWM控制策略…

产品运营必备职场通用能力及提升攻略,一文说明白

在互联网行业蓬勃发展的当下&#xff0c;产品运营岗位成为了连接产品、用户与商业目标的关键纽带。从用户增长到活动策划&#xff0c;从数据分析到跨部门协作&#xff0c;产品运营人员需具备多元化技能&#xff0c;才能在激烈竞争中崭露头角。随着企业对精细化运营与数据驱动决…

面试 总结(1)

面试总结 一、spring相关 1. Spring Security角色管理实现 在智慧种植虫害识别系统中&#xff0c;我实现了农户端和企业端的双角色权限控制&#xff0c;这一部分是这样实现的&#xff1a; MySQL 表时设计区分农户和企业的角色表与权限表。登录时&#xff0c;JWT 令牌包含用户 I…

串与数组:从字符处理到多维存储的数据结构详解

串&#xff08;字符串&#xff09;和数组是数据结构中的两个重要分支&#xff0c;它们在程序设计中承担着不同但互补的角色。串专门处理字符数据&#xff0c;而数组则提供了多维数据的存储和访问机制。本文将深入探讨这两种数据结构的理论基础、实现方法和核心算法。 文章目录1…

面试之JVM

类的生命周期 加载、链接、初始化&#xff08;是类的初始化&#xff09;、使用&#xff08;对象的初始化&#xff09;、卸载&#xff08;GC&#xff09; 链接&#xff1a;验证、准备、解析 类加载 JDK9的升级点&#xff1a;扩展类加载器改成了平台类加载器。 java中很多的包分…

webpack开发模式与生产模式(webpack --mode=development/production“, )

webpack开发模式与生产模式的区别webpack的development&#xff08;开发模式&#xff09;和production&#xff08;生产模式&#xff09;是两种常见的构建环境配置&#xff0c;主要区别体现在构建速度、代码优化和调试支持等方面。开发模式 (development)目标&#xff1a;注重开…

当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式

想象一下&#xff0c;在IDE中对AI助手说"帮我找出本月销售额最高的前10个产品"&#xff0c;然后它不仅能理解你的意图&#xff0c;还能直接生成并执行SQL查询&#xff0c;返回准确结果——这不是科幻&#xff0c;而是Text2Sql.Net的MCP集成带来的现实。 &#x1f3af…