QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 10:19 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。# ^1 z7 l0 u9 m0 V7 M7 O! i3 f* t
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。; K! |7 F5 X2 @: f0 ?( p

: e4 ^% w1 P& V' g# h) o+ T1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。# s* ?. d* w, Z/ Z1 Z- m+ y" z1 Y
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。( r3 J4 y& I( f, b5 m3 G
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。5 b0 E# I# q2 u- q
) g# k( Y+ t% q, ?% I  L
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。
$ n! i; d- t4 f( s! X5 e2 v; RARIMA模型的建立包括以下步骤:
  v3 t# E, t3 t& \, a9 e5 W( S: x0 A& z3 l' {, T7 S% K
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
- c  ]8 h' N0 }5.如果时间序列不平稳,进行差分操作以实现平稳性。5 e* V  _; L7 e( F
6.通过观察ACF和PACF图来确定p和q的合适取值范围。0 A5 e: ^+ I4 q- d7 c; Z- C
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
; b& `% j! [9 J7 o% V8.对每个模型进行参数估计和模型拟合。( }5 x( Q4 B3 A% |' }" K! M
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
& j2 n) u( O9 |: Y6 t
- T8 G% j* @) RARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
, E1 T( `% m4 k' i, T" L2 t" r2 E9 J+ }$ V0 h- B
# 导入所需的库
" X6 P+ Z/ d- ^& f, dimport numpy as np- H5 V' H" e) V' V; ?' g
import pandas as pd. \) u% x" S+ z) Q
import statsmodels.api as sm
6 D& c' z! L+ \0 }0 r+ ?: tfrom statsmodels.graphics.tsaplots import plot_acf, plot_pacf
. b1 Z; e1 C) Z3 u% Wimport matplotlib.pyplot as plt
0 s, Z/ `" @! |! j1 [# l1 D' R5 O+ S& p* {" v& E/ c3 b, b3 b, b, \5 w
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。) ?) j: d" f  Q, w
# 源数据* u6 c. y" l0 E8 q& n9 q+ j
df = pd.DataFrame({3 s: O3 b# M, q% P
    'year': [i for i in range(1971, 1991)],1 K5 n6 ~, a! D0 M6 U; F  Y4 |
    'num': [66.6, 68.9, 38, 34.5, 15.5,; u9 A0 i  X0 W  f6 Y4 e
            12.6, 27.5, 92.5, 155.4, 154.6,
0 N. M( j- {# x) X" q& J            140.4, 115.9, 66.6, 45.9, 17.9,1 A; o  ]: K+ U. ~* N3 h6 D7 c
            3.4, 29.4, 100.2, 157.6, 142.6],( z' H; Z) w! }) w0 j
})
8 W9 c4 \/ ^) Z) i' b! M5 o9 s; y+ B  b9 c8 A* d
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。! x% |$ v) N7 i
# 画 acf 图
  E7 z# j2 s  t! \8 bplot_acf(df['num'])  V: |8 X0 X7 v' o6 U( D
5 l6 |4 v' \3 }! k4 R) k: A
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。" i3 Y4 Z. H- @0 t$ M1 w; ?) b
# 画 pacf 图
9 K: J! o8 F" h% ~( R& zplot_pacf(df['num'], lags=9), H& ?/ G% r" a$ f

/ {. a% Z: R" T' L6 a这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。; [* u3 `) [2 U8 K& }) }- T4 c  |
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
" `7 K% A( v/ W/ E, Z* ?7 t" Rstr_list = []
8 P1 r8 U% H! Y& Ufor p in range(1, 6):5 `! q: `1 [+ ]3 x. J1 ?6 X
    for q in range(1, 3):
) q; Y9 d6 `' d* D        model = sm.tsa.ARMA(df['num'], (p, q)).fit()
! b1 Q7 k; H- R        str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
# L) o. Z9 a$ ifor each in str_list:
3 h4 o) j% I9 a& v$ C+ z    print(each)
9 T6 Y; a+ b+ x3 U- k  G! P$ L+ Q+ n- _3 Y
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。' u  N5 |$ ]. R' S  g
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
: `3 [5 u5 a. Y/ w2 V: Gmodel = sm.tsa.ARMA(df['num'], (2, 2)).fit()
5 i8 u3 m' k) p+ d: z8 `( rmodel.summary()4 S3 r" c/ G: S2 e) @& p

; N) A# H9 F7 @8 i根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。  ], o( U2 S" j/ G5 F# P8 J' {  `" g
# 预测和画图. f* |+ P2 b) s6 P9 M% _, t
plt.plot(df['year'], df['num'])) Q9 ]" o4 L/ L7 \# s% t
plt.scatter(df['year'], df['num'], label='actual')" P( w7 V6 R5 a7 H* v
year_list = [i for i in range(1971, 2001)]% N% i) ~0 ^4 q( Z
plt.plot(year_list, model.predict(0, len(year_list)-1))4 h( d7 N, J- z
plt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
! E1 v. C* @3 \plt.legend()
# b+ d# p" G% x/ _! @+ e0 J& d
) g) ^+ ]. L2 ]' X7 V这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。) S' }+ B+ f5 m4 B
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。! j7 U5 Y5 i5 q: z3 i2 Z
6 h) M; ~. y( g9 B& F
7 |. m2 j6 x7 j* u5 y9 u

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-4-21 08:15 , Processed in 0.453633 second(s), 55 queries .

回顶部