- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
1 N" C( l' X4 G( c, Z+ M- W; lARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
+ m4 A2 A$ R; M! T( L- D" m7 T/ K Z$ ?, m, t$ E) f
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。0 e0 z( g3 P8 J0 v( f' L8 V7 b' c
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。! M% V/ E8 X6 L0 L+ |
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
, K! E+ m% b+ X- R3 i- _/ Q% Q
]2 G: {) ?8 zARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。2 X( J3 n5 _2 ~4 k
ARIMA模型的建立包括以下步骤:
: L( y3 `4 ?' r2 P# }4 q; O/ X/ g
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
" G8 s4 ]3 F: c) _' V8 X5.如果时间序列不平稳,进行差分操作以实现平稳性。, I9 C/ K; {4 q1 e
6.通过观察ACF和PACF图来确定p和q的合适取值范围。$ C9 T% L' y( s* A# e$ H3 C6 `
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。. U# _- A! X* t1 j7 H; n
8.对每个模型进行参数估计和模型拟合。
3 v H0 h$ X% u8 m5 P9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。% u& ~' {% n) ]# c5 y# k) m1 b9 ~
6 K' o" a6 K2 `% G1 P
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。% W! r& S. q( X* t( O1 G9 E% I
. W3 G+ K' o. q) p: c* @* ^) b
# 导入所需的库
3 N$ E( l L8 H9 h5 H" I0 n* Uimport numpy as np' S3 n b4 G5 P) Z7 O) Z
import pandas as pd/ `, {# B2 U5 X% ?1 U2 K. m' U3 H
import statsmodels.api as sm) G( x d# g. Q
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf; s# z, x, p$ ]) f- O, h8 i4 I
import matplotlib.pyplot as plt
. Y# V7 l. }9 B% h8 r9 ]4 B. N7 Y# k0 f' o; ]6 z7 Z3 H
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
8 U: {# l1 s7 s+ a) r# 源数据/ m! W! Q, Q9 k( B1 e6 a
df = pd.DataFrame({
6 `4 a+ W) U1 G+ G y$ B 'year': [i for i in range(1971, 1991)],
d" S! V# k3 ~" {' |, ^ 'num': [66.6, 68.9, 38, 34.5, 15.5,. R l4 Y8 l8 B. K$ i8 R! w
12.6, 27.5, 92.5, 155.4, 154.6,
5 N9 Z+ g% E8 P0 J+ w 140.4, 115.9, 66.6, 45.9, 17.9,5 {- v; p! s f, p7 _
3.4, 29.4, 100.2, 157.6, 142.6],1 S" m& W# J/ E4 ]
})
1 K5 T2 o8 e( V M& L/ n" I2 R; I: I3 L9 }
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。; l( c/ i$ G! k. [0 f2 w3 s
# 画 acf 图
1 e4 o% l' \& |plot_acf(df['num'])2 W% e% N- d, T
/ @, ~/ o% z* M" t
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。/ g0 s7 e5 L( @1 W' E
# 画 pacf 图* g# a: |, p0 P! [7 g
plot_pacf(df['num'], lags=9)( O" Q& Z, Y. e5 V7 ~" F
; C0 w% S% h2 f5 ~/ Y3 K这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。+ ^3 A$ n( l4 L+ R
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic" Y( v$ \& F* x+ _% ]" {8 U3 ^
str_list = []
4 o. k& }+ l' z& B" Cfor p in range(1, 6):
9 q0 E) D" B2 H/ A: U for q in range(1, 3):
- A, `3 e" y# { model = sm.tsa.ARMA(df['num'], (p, q)).fit(), W$ v2 G1 j0 ?+ q5 n4 t' F1 m
str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic)). d/ G5 w; z% A. [) i ~
for each in str_list:# _ Y1 t# d- V( Z1 B
print(each)
# o: O- i7 g0 s: q: t# R6 V3 L' x! y8 w8 J! ?4 A! x
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。/ E7 p m& l) p, A# o
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=29 e. v; u6 A4 I% ^# m' s+ y
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()
: D! l0 N6 G8 p Bmodel.summary()# ^1 L; a7 j' R {2 X
; z/ f( ?" ?7 e& X8 I根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。# _' X9 Q3 ?( _8 ]5 N5 r: i
# 预测和画图6 O" q! ?5 \& Y, z) F. p. g
plt.plot(df['year'], df['num'])
8 a$ V3 O/ ~) V3 U) ^( nplt.scatter(df['year'], df['num'], label='actual')
; y8 _, i& K: m- y) fyear_list = [i for i in range(1971, 2001)]3 p [/ ? R* {
plt.plot(year_list, model.predict(0, len(year_list)-1))
0 I) c4 |6 a8 m( splt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')# p, I% q, I* x: U4 I* d Z2 I/ _" O
plt.legend()& u; W5 S8 m; v* ^' X: D
% K3 s# K& |, x* l1 q5 z3 v2 i. u
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。6 W9 S; }) M# B
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。/ ]5 C3 ^* I8 Y% m1 M
- N1 p3 C* u) U: r9 W& t/ Z3 R/ l& J' ?" h$ p0 y1 x& e8 C) e
|
zan
|