数学建模社区-数学中国

标题: ARMA 模型使用拟合的模型进行预测 [打印本页]

作者: 2744557306    时间: 2024-3-20 10:19
标题: ARMA 模型使用拟合的模型进行预测
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
1 Z* v% p4 n% P; ^3 NARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
9 k4 ^# a% w/ ^$ \# U" |
8 y4 B) |/ C' Q$ f2 J1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。$ j, h8 a' J5 B9 S4 A
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
# j7 o) t# ^6 Q& Q$ @4 i3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
  ]* Q2 P  r5 T9 K' v
6 n/ J. z  g! A0 ]$ LARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。6 I1 V/ m5 m4 X  x$ X1 A
ARIMA模型的建立包括以下步骤:
# X- a! F( S3 c( s9 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* T7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
. A, _0 k$ l2 s2 P+ {5 y8 g8.对每个模型进行参数估计和模型拟合。' 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 pd0 a6 y  {0 h* ~& ~( y
import statsmodels.api as sm
! M; G! k1 M) y4 w( W& }7 Y2 z! Kfrom 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: V3 Y8 G" l) k! W, Y
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。% d& ~$ b, N/ p; S6 L
# 源数据
; l  k- k3 v# H4 ^9 Ldf = 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 Splot_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: \% ustr_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 [- Jmodel = 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 splt.plot(df['year'], df['num'])
$ U9 t# i1 K# ?1 E2 w1 G% gplt.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

1.31 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5