QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2377|回复: 0
打印 上一主题 下一主题

ARMA 模型使用拟合的模型进行预测

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 10:19 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
; A7 i1 r0 ?8 _4 |# V, k) }+ T2 DARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。& }6 Y9 U# n1 i: h6 g9 O
; L, ?. I4 Z- M4 R( C* R1 D
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。. L) m. P/ e* P9 b- s
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。3 \4 z) C2 }! a; Q: x
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
$ w% p( a9 Y/ l0 h& R* [- [2 q* K5 S9 }- S0 L
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。: j, ]" X& l9 U  @, f! x; i
ARIMA模型的建立包括以下步骤:
: G( D7 w0 O/ k$ C* {5 ~+ @. Z& k+ }( b0 |1 N
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。" |: Y; ?& g( m6 Z2 }
5.如果时间序列不平稳,进行差分操作以实现平稳性。
8 J/ e" w1 R+ J! ~8 c8 f  E& ]6.通过观察ACF和PACF图来确定p和q的合适取值范围。
* t; E- {( I4 [' H7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
5 P- O) u, R' n* Y& n8.对每个模型进行参数估计和模型拟合。2 P3 _+ g/ D' W/ ^6 h" i
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
* s. q) {  u/ q5 s0 b+ j8 @/ P* G: p$ H* ^
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
& E4 p/ N. ~; ~) Y9 F1 _0 p) a* b7 D5 x% B+ }
# 导入所需的库6 _' A( D8 k1 z$ s4 e
import numpy as np6 S2 N1 `6 o( r/ g$ Y
import pandas as pd
4 y  {6 r8 I/ [- bimport statsmodels.api as sm2 x: q: {; S/ |+ W
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
* W' p  ~& v3 i5 ?import matplotlib.pyplot as plt
% O9 B; y0 H5 s- l4 ~0 l* z7 i1 g  w" c9 B# h
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
9 h. _* t( |3 ?5 d0 ?* i4 M# 源数据' {* i0 T- w) n2 U
df = pd.DataFrame({
2 S( T/ I* C+ v/ d( E' j3 p    'year': [i for i in range(1971, 1991)],7 Z  c3 @/ L) Q$ K. I
    'num': [66.6, 68.9, 38, 34.5, 15.5,& d, H8 _- M* G
            12.6, 27.5, 92.5, 155.4, 154.6,; j1 o% p* K% i
            140.4, 115.9, 66.6, 45.9, 17.9,' c- t. b( E! x1 [2 q$ g
            3.4, 29.4, 100.2, 157.6, 142.6],
! x% ~' O. p3 O# x; E% P})# H2 q( p$ H$ E& x- y* y
& o6 I0 T8 h% Y: q" j" K9 a
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。8 z0 i4 S+ B6 x
# 画 acf 图9 j. A. \8 ?1 F7 o1 K
plot_acf(df['num'])
: S) _+ }$ H& K8 \, P3 _* U
9 l* W. N9 I0 U+ J/ x( `这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。
% w8 z5 f' e# l: {# 画 pacf 图2 W& s/ _1 e, R  H7 n
plot_pacf(df['num'], lags=9)
" @0 V9 ?" q& y: y2 Q: A; \9 E+ b
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。; ?8 z) s" e, k
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic3 f+ {/ L5 q% }" r1 p
str_list = []
" D5 W3 _( Q) b- v( o7 M' R- Afor p in range(1, 6):
; v/ l  d* C; m0 q6 M# g# I( @    for q in range(1, 3):
2 A) b9 E' ^. g% [% `" d. s" r" m( K        model = sm.tsa.ARMA(df['num'], (p, q)).fit(); I# u' s7 m. h7 W
        str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))- t- g- E" a6 W  N- _8 Z
for each in str_list:' d' {1 G- j/ K8 R$ U+ \2 h, P# J
    print(each)1 g7 L& O, \6 o
. C3 T# z! ~. j0 Q+ C9 _3 l
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
; w' A5 z, D9 X  d9 h# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
2 S5 v+ w5 t9 z6 amodel = sm.tsa.ARMA(df['num'], (2, 2)).fit()/ V: {8 y6 t( x7 y2 [3 G9 ?& ?3 l
model.summary()
' _1 O6 C' P* T$ k4 o, s& i, z* |9 S5 _5 m
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
) ~6 X; ^, I9 x3 k# 预测和画图8 N8 K) A# q" @% @7 ~
plt.plot(df['year'], df['num']). P7 o& d- O. P! o5 H- X9 v# d
plt.scatter(df['year'], df['num'], label='actual')
  F: y! Q' [9 l, }" @7 kyear_list = [i for i in range(1971, 2001)]1 E, j3 e4 i" t
plt.plot(year_list, model.predict(0, len(year_list)-1))
# }7 s- s! Y! w; e* Jplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
: I- p4 ?4 i, ?4 m! w" Rplt.legend()# D" T0 Y, U% f7 O6 M0 g2 L$ }

! X: q8 m; B- x这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。% l* @8 i7 R  }" d9 T
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。/ E) w1 a, |7 V, N
) G$ `" N8 Y5 ^, M  S5 |: t

. v8 P; C5 N7 Z- p# S7 L2 l

24.arma.py

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

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

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-6 08:46 , Processed in 0.459788 second(s), 54 queries .

回顶部