数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-20 10:19
标题: ARMA 模型使用拟合的模型进行预测
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。: b5 ?, r- Q- c: v
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
2 J: s; O. z; i, X7 L! P) `2 ]
5 ]4 l' y4 K$ {2 H$ }1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。* ?# l& }6 B( A
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
% o) X& s: d9 z" b2 r8 ?3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。. u/ ]! _3 y2 h; N: ^0 o3 u( v# ~
9 O) u. x! s0 i  p# }5 W
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。
1 k+ S7 U5 b3 y2 AARIMA模型的建立包括以下步骤:
- O3 c+ C3 a# b' S. I+ h! }0 R* T: {: l, r" \  j
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
, ?: \: S% ]* N/ C, T, C. V5.如果时间序列不平稳,进行差分操作以实现平稳性。
9 m4 J0 f$ L5 E$ g) E, c6.通过观察ACF和PACF图来确定p和q的合适取值范围。
) d3 e7 m9 q5 E/ j3 d2 P: H7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
5 K! ^4 b6 Y) P" C# N8.对每个模型进行参数估计和模型拟合。/ \0 F* W7 t$ t
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
/ U' k  G/ Y; h" q2 q* o
, X% m: B6 c5 x# I/ F1 hARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
% D/ a( j7 c; J* y6 X8 U9 ~2 r  W2 t
# 导入所需的库. Q- V' `9 U5 k* j9 }( J& ~$ u
import numpy as np
9 R3 }& ]! I/ Y/ m7 a5 m" Rimport pandas as pd
' y2 N3 O( D7 U  s5 kimport statsmodels.api as sm
; j" n! k5 Y9 h* lfrom statsmodels.graphics.tsaplots import plot_acf, plot_pacf1 M& Q! g  D# n1 P; l, {! ~' P
import matplotlib.pyplot as plt
0 Y% ?+ Z5 |8 l4 V  }& Y! k
9 Z! q* w, F) U0 H8 n2 Q# _这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
( V  M9 s+ j" y6 |3 Q$ Z# 源数据
% v' O8 `  d8 C) C' [8 Adf = pd.DataFrame({. Q+ B2 c& W3 v8 u) W* X: K% E7 _
    'year': [i for i in range(1971, 1991)],
8 b$ w" I7 D( ?  i9 m. t    'num': [66.6, 68.9, 38, 34.5, 15.5,
$ _4 K, U6 w. S            12.6, 27.5, 92.5, 155.4, 154.6,
6 `% @( h. S/ i  P) `/ t# B            140.4, 115.9, 66.6, 45.9, 17.9,
& K6 z. T7 ~7 `8 S8 i. X' r( {            3.4, 29.4, 100.2, 157.6, 142.6],
/ s2 d9 R( i; |; K- u' W4 H})" G6 q2 B: S6 z8 B3 |8 n
! l- }4 v9 f8 ~' R
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。3 ]5 _* l) X6 C6 ]" \) x  I. C& g
# 画 acf 图
3 r. E3 W) }( A2 c0 Lplot_acf(df['num'])
+ a- q8 l- f) p  b  }( b0 \9 p
- \" }0 K7 m7 s" k这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。
$ [7 s2 \& C) p" ]/ ~/ \# 画 pacf 图
4 }& d; L' S4 b6 L! g# Nplot_pacf(df['num'], lags=9)
# h* h* l( o+ J# {' @2 E
; K) x- D$ e& _5 g- B* H/ _( e9 M这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。
: k/ }5 L" L( K3 g7 r' c# 建立模型,参考 acf、pacf 代入 p、q,观察 aic) F" I" `. N! Z1 ^6 P
str_list = []( c: \% t3 [. e3 R
for p in range(1, 6):  z) s. U% g) _8 B" Q! q# v
    for q in range(1, 3):
6 m. r7 k: y" ^$ f# ]& t        model = sm.tsa.ARMA(df['num'], (p, q)).fit()
# \* _. t; b4 J' @8 ^7 w" u        str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
+ @9 s$ o7 \1 T3 a9 y4 `7 ?) Rfor each in str_list:+ ?" s% G; h7 C3 I7 L( ?3 d* K
    print(each)
+ Q$ K, A* H1 U4 ]* L
4 {$ u# ^& P7 E5 C* }) M这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
! w0 h2 L' D/ Q# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
3 F, t" l5 k/ K5 Q8 ?model = sm.tsa.ARMA(df['num'], (2, 2)).fit()) w2 u  U9 V9 g: K
model.summary()) m. q# Q! R/ I0 E/ Y; p5 G. b* A
6 W0 C0 l- K8 n3 F
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
; R$ m7 q5 e6 h* }7 s7 J; }( T# 预测和画图
  G( V) N+ N4 ]plt.plot(df['year'], df['num'])
( S6 Y0 ?2 w- X" L% n1 [% @' F/ zplt.scatter(df['year'], df['num'], label='actual')
6 I5 P: b; q' g5 c9 ?% b: z; hyear_list = [i for i in range(1971, 2001)]
0 T/ ~$ u; q8 X! ]% `! qplt.plot(year_list, model.predict(0, len(year_list)-1))
$ x7 s# M+ r' E- J, o( ]. ^/ Lplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')) C* }, K/ I7 ]' H
plt.legend()% l+ R7 C1 b. b. r- G

* o4 Q' E: x7 l8 l7 X8 D  p这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。; y  R$ M  W; N' i( _6 c/ a1 r
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
% F8 |: c  Q" ^: f
0 T& X7 ?/ b/ s! g/ o# l4 B0 X  ^& ~7 Q( }. q

24.arma.py

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

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






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