数学建模社区-数学中国
标题:
ARMA 模型使用拟合的模型进行预测
[打印本页]
作者:
2744557306
时间:
2024-3-20 10:19
标题:
ARMA 模型使用拟合的模型进行预测
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
5 R, k- z- r* D/ V
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
( y7 u8 v* Z6 \6 T. w
" \ c! l" t# Z5 R, P
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。
9 g$ X8 Y* f0 b* E* e/ {
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
4 `( K. r9 S+ D; |$ q
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
6 u+ x7 i) D& B# ^! x7 Y3 n- j
. |* Y' l, L/ M+ }6 H8 L
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。
7 P# T1 t9 B- y# @! m
ARIMA模型的建立包括以下步骤:
# \/ q. @2 X0 t7 B' e4 O! T9 o0 F
, Y+ @# L# \+ n0 a
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
* z+ |. G2 t+ x1 O7 f' N' y
5.如果时间序列不平稳,进行差分操作以实现平稳性。
& A8 H' A2 c+ B' I$ d
6.通过观察ACF和PACF图来确定p和q的合适取值范围。
% A0 k' I0 G: k% U
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
3 n+ m( P- J1 s5 i$ D. C( `
8.对每个模型进行参数估计和模型拟合。
5 |+ q! Z! R3 F
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
; Y# i" N/ ^, y% e q
/ f% @- N3 a' Q8 u5 B- ]( e
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
" r6 \* |5 ^9 v# w7 a1 O2 M# C
+ e6 L2 T9 }- s
# 导入所需的库
7 g4 W1 D* l0 }
import numpy as np
+ j; \8 H8 }( T' B! @ g
import pandas as pd
2 k1 M, g p, [! ^( R9 u2 x
import statsmodels.api as sm
. Z4 j/ _8 J* s5 [4 H# U
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
* x* b6 i9 o) b: M1 N) r$ V5 @
import matplotlib.pyplot as plt
, r! J2 x* V, R8 v+ ~5 G5 b
( H; {3 X1 V0 H1 T: t' g; X
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
' G! N: L8 A2 ~
# 源数据
- D9 o! A/ m. k5 O; J
df = pd.DataFrame({
6 J% x1 E+ g1 N; O/ c( |
'year': [i for i in range(1971, 1991)],
" x( U4 N& H$ h3 c6 {
'num': [66.6, 68.9, 38, 34.5, 15.5,
) b( x, |) J) Q& u: @4 u" }- s1 u
12.6, 27.5, 92.5, 155.4, 154.6,
m4 i1 K3 G' w2 Q- `/ {. f: F5 y) r
140.4, 115.9, 66.6, 45.9, 17.9,
* L& f$ n( e( Y
3.4, 29.4, 100.2, 157.6, 142.6],
5 B! @! x+ y) i2 S; H( Q
})
) V0 U( l; O$ U
# N! G! J* V' T) B+ C% A
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
3 |: ?" \: l+ `& ]
# 画 acf 图
7 U; g/ y+ H9 x
plot_acf(df['num'])
) {+ x! ^- k9 t$ v3 g
8 b2 s# b7 w) O9 u8 _. s- e# s a
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。
$ t1 L- u- H& o1 N, E
# 画 pacf 图
! w: d5 `6 w% g. h- \
plot_pacf(df['num'], lags=9)
. \1 V* c2 M8 y1 X2 E4 D
- @0 [# J& [# P0 n. Y
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。
1 x8 Z4 p. i0 E! v# q+ Y
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
- J+ [6 K) B/ Y
str_list = []
" ?& n S( ]# L4 J; y* O {0 X
for p in range(1, 6):
3 X6 J6 y: a" \) w6 I
for q in range(1, 3):
( L$ u! h, l' N
model = sm.tsa.ARMA(df['num'], (p, q)).fit()
6 `1 K) ^) V6 O9 o8 ?
str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
( e( i6 ~7 w* l& e
for each in str_list:
( \) H2 V2 Q2 x: o& r
print(each)
" e* B/ O" R! }2 @8 Q
; f6 L3 h6 ^8 N$ l
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
- q5 W# _. p9 |+ R8 P
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
: f0 ~: ~) Z, O+ j' K
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()
/ L; {2 k0 r% t+ B# t8 I
model.summary()
7 E6 v+ U5 f- x. f
* X* V6 B0 p3 Q' O2 a% u
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
1 I9 i* [. e# P5 v% I2 q9 b
# 预测和画图
) I- x, A" x5 b4 v9 [; j' `
plt.plot(df['year'], df['num'])
6 V- i" B- c$ E w9 o+ E
plt.scatter(df['year'], df['num'], label='actual')
" h, W7 w, e6 d$ [7 S o( M9 x: h- ]
year_list = [i for i in range(1971, 2001)]
1 d3 v: ?% M/ R2 c6 O; g \
plt.plot(year_list, model.predict(0, len(year_list)-1))
* N9 |3 d* x1 q L# V; q
plt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
, F; j$ h0 k" ^7 g
plt.legend()
: O5 |$ K( ^+ i% a: g
0 t8 I0 E4 o0 B$ Q
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
! X# i/ c; K) C2 H
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
) t2 j( Z, K. ?; ?7 F
/ f3 w6 U! x% m0 ?9 [
; v. h4 I! k2 M4 a8 O# e) H
24.arma.py
2024-3-20 10:19 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.31 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5