数学建模社区-数学中国
标题:
ARMA 模型使用拟合的模型进行预测
[打印本页]
作者:
2744557306
时间:
2024-3-20 10:19
标题:
ARMA 模型使用拟合的模型进行预测
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
1 Z* v% p4 n% P; ^3 N
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
9 k4 ^# a% w/ ^$ \# U" |
8 y4 B) |/ C' Q$ f2 J
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。
$ j, h8 a' J5 B9 S4 A
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
# j7 o) t# ^6 Q& Q$ @4 i
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
]* Q2 P r5 T9 K' v
6 n/ J. z g! A0 ]$ L
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。
6 I1 V/ m5 m4 X x$ X1 A
ARIMA模型的建立包括以下步骤:
# X- a! F( S3 c( s
9 E7 D$ d$ N0 y+ \
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
9 Z/ r6 I6 x# \; w, Z- ]
5.如果时间序列不平稳,进行差分操作以实现平稳性。
; N+ E# r) R2 [: r
6.通过观察ACF和PACF图来确定p和q的合适取值范围。
, _9 U+ K' B# S. f/ V* T
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
. A, _0 k$ l2 s2 P+ {5 y8 g
8.对每个模型进行参数估计和模型拟合。
' G" W! w' y! a& y
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
2 v( q2 j- N& g
; u. |% C8 G% ]; i: l
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
: q4 H* n9 `& k' s. _( r; h
" u% z# f3 g, |7 x1 u' L: V$ A9 }/ v$ C
# 导入所需的库
6 i6 J7 B6 h# M7 @
import numpy as np
. C) d8 K2 Z5 C, z, }/ B
import pandas as pd
0 a6 y {0 h* ~& ~( y
import statsmodels.api as sm
! M; G! k1 M) y4 w( W& }7 Y2 z! K
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
; x6 M- k( I/ _! v+ F- g. B& k
import matplotlib.pyplot as plt
9 f, V' O5 ]# p& w+ r: V
3 Y8 G" l) k! W, Y
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
% d& ~$ b, N/ p; S6 L
# 源数据
; l k- k3 v# H4 ^9 L
df = pd.DataFrame({
6 h! z$ S, H' o1 Q( D7 D, ] ^
'year': [i for i in range(1971, 1991)],
, Z- g- j3 S; L8 u
'num': [66.6, 68.9, 38, 34.5, 15.5,
" R7 e: P" x/ t+ t" Q3 }
12.6, 27.5, 92.5, 155.4, 154.6,
9 T" W& s3 `$ r0 } l4 ^+ n6 u
140.4, 115.9, 66.6, 45.9, 17.9,
% V7 A5 C) I" ]( |( o2 ]# n
3.4, 29.4, 100.2, 157.6, 142.6],
$ }8 P; s- w1 {4 |6 g" m5 X* z
})
/ q) Y: ~% Q3 k* i. C' X
2 m6 B) }" A, Z2 a+ n
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
% K" m5 T+ Z6 |# e
# 画 acf 图
* G" v P) f1 ~. _( ]! b
plot_acf(df['num'])
* U" m R; {8 i, l* F0 _
8 A$ B; Z9 w4 Z: T9 u
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。
3 A) z" h! C4 L" C
# 画 pacf 图
: M' X; w e0 t5 S
plot_pacf(df['num'], lags=9)
2 p+ i0 d! G4 S) S2 x" m2 f
# ^" ~8 c% c3 y \
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。
# b+ \( y6 @, u
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
* w$ D. g: \% u
str_list = []
0 ]1 H/ ]7 \4 O
for p in range(1, 6):
% V2 g* z2 {/ U7 N/ }
for q in range(1, 3):
# F( K7 `7 c* S# b- J8 Z+ Y
model = sm.tsa.ARMA(df['num'], (p, q)).fit()
8 L/ m$ Z' C, O# d
str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
" ?0 d& k. s& t" Q( h/ {6 x
for each in str_list:
- T5 K+ C% G3 b$ ]- |; S
print(each)
/ M8 G) j6 ~; D# h5 l% L" g/ ]
; c+ B9 c9 w* ~) @. H/ q8 k
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
' C, Z3 |/ d- |* w# ^( X; C8 s3 W# x
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
; }" r; s9 @4 q2 I5 U% q5 [- J
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()
7 r1 o G2 j5 I4 |6 z
model.summary()
7 x- M1 R( z0 a9 w* M# T2 @$ y
! M7 B( d' a$ |) N; \. ~
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
1 z0 [5 |% m' r, _) |
# 预测和画图
{+ F2 o3 t6 j v1 k. ^! r. s3 s
plt.plot(df['year'], df['num'])
$ U9 t# i1 K# ?1 E2 w1 G% g
plt.scatter(df['year'], df['num'], label='actual')
3 Z$ w3 r# H! R' J* K& u6 R$ R% z; [
year_list = [i for i in range(1971, 2001)]
3 q4 P+ M1 d0 f' |3 q" J
plt.plot(year_list, model.predict(0, len(year_list)-1))
( }, T3 F; S* s* @
plt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
5 ]3 E: k8 F8 d2 |2 M
plt.legend()
& }% F: M: P' Z- Y$ s$ a
8 @. T. i, W& x5 K! n( e- k/ ]6 \
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
$ \; `; P0 g3 g
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
3 E m! x, k: L# }0 ?
4 P4 ^7 ^5 K3 P) C! j
4 i/ _. \; k7 }
24.arma.py
2024-3-20 10:19 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.31 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5