QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 10:19 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。+ @* p' v# l" z% w5 K7 `2 H
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。4 j3 ^9 T. l* J- W% V

2 D1 k9 r7 x% z+ h  A/ Q1 F1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。. X8 _1 {  T6 B. l  k- ?; S
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
% f3 d6 @5 ?7 R5 u3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。1 g: s8 @# F$ u. I8 ]5 {
2 @4 _: f9 a( D( k+ I
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。- {4 t1 t1 E/ j9 s
ARIMA模型的建立包括以下步骤:. W( Z/ `3 |- _4 |
: G; ?! j$ i. a" `6 F
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
0 Z7 y- n9 O9 a7 t( [5.如果时间序列不平稳,进行差分操作以实现平稳性。0 z7 t0 ]: d* g9 S1 A  h
6.通过观察ACF和PACF图来确定p和q的合适取值范围。
' u* V, O: d" K+ w: @7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。9 ^/ e+ B) t. m/ L
8.对每个模型进行参数估计和模型拟合。- b% a) |0 D) I8 t+ J' V2 {
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
. g1 b# P" w( H- s
) M8 c7 D) D& _ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。# m. _( m, s) f8 \

7 Y  g3 s% B$ X0 u! S# 导入所需的库7 [* P& f: z* C# i! l) v9 k' ^; ]
import numpy as np
4 u7 O! W9 V. O% W2 z1 g# Qimport pandas as pd" b4 W; O7 q+ f% k& H
import statsmodels.api as sm
( @. H# g2 j4 c9 O; jfrom statsmodels.graphics.tsaplots import plot_acf, plot_pacf
) R. ^; I7 A7 Z( a2 g: K; w- bimport matplotlib.pyplot as plt; V! |) Z4 H( v( Y

+ D9 l0 f# t* _& I9 s! ]. I0 L这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
5 Y9 B, _; j  n7 U/ C. P# 源数据
/ a4 w& l4 s; L: Ndf = pd.DataFrame({
& A( W* S% G. w6 j$ q    'year': [i for i in range(1971, 1991)],
, N; l! c: [# v7 g0 @$ J/ f    'num': [66.6, 68.9, 38, 34.5, 15.5,! l8 S& S: a0 m5 D2 p$ z' `
            12.6, 27.5, 92.5, 155.4, 154.6,
4 r' G5 }( B$ e( D            140.4, 115.9, 66.6, 45.9, 17.9,
4 k! k2 ~$ Y3 R9 _. m            3.4, 29.4, 100.2, 157.6, 142.6],& l0 G  B7 `7 n7 r$ ?9 ?
})5 S' n, H4 L+ [7 c0 I. S! b1 G* |+ |

2 {7 W/ E8 M% J. e+ R: T4 i这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。$ W# m, I/ x5 N8 ?" l, t  q
# 画 acf 图
0 y8 R  v) |+ l0 U5 Hplot_acf(df['num'])
  b" @9 S; A% B! l6 U$ g' d/ y& W
4 N# K7 g. ~- A, f这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。
* Q  K+ h$ }0 Q# 画 pacf 图( `5 v4 ]$ V4 T* w6 M) W4 b3 P7 x) P
plot_pacf(df['num'], lags=9)
) u. u4 [, F0 d6 b* h( ^( ]8 b8 s% l& o) z. H! V* H
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。3 a, q6 M- ^  s) i3 k  G
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
! O3 v' }! b% o* ]7 F/ D' |. U- dstr_list = []; G9 C$ t, v. {* j# x
for p in range(1, 6):+ s$ |' k5 Y; w2 a9 z
    for q in range(1, 3):( @0 J8 U6 v6 o+ m( _: ]
        model = sm.tsa.ARMA(df['num'], (p, q)).fit()
$ q: ~+ C, Z/ x, R0 L1 s, g        str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))) s+ M7 l$ n; x  ]$ S5 K
for each in str_list:8 v( @0 h' ?( i0 d7 B9 m
    print(each)
/ g* D  D+ j3 X# V
6 n# G' ^& i, p& L4 T9 D这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。5 w+ `7 [6 R3 y- g1 \% g
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=25 y+ a. x4 c. m# c! m; t; z
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()4 U  e; `/ L  \6 h
model.summary()+ U, U( s2 C7 @$ a* M
4 C& |. S1 `* D% |; h4 O9 @. ?
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
. `8 F  f  P( O* ^' F8 y  G7 R# 预测和画图+ ]& w0 O) p$ e
plt.plot(df['year'], df['num'])# C4 w% L$ ^' S2 h4 g2 {9 D5 d
plt.scatter(df['year'], df['num'], label='actual')' |( Q; k/ g: h2 ]- O4 @
year_list = [i for i in range(1971, 2001)]
: r$ c# ~8 `+ i! C: r- |3 wplt.plot(year_list, model.predict(0, len(year_list)-1))
, j% f9 F1 I! @plt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
9 Y/ j% N# T6 }$ j2 }$ Z# Pplt.legend()
+ Q5 W7 h! [/ D& p* G
0 e4 ~3 f" v: b3 C这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
0 C7 y5 \* d# O& h' |% d希望以上解释对你有帮助。如果你还有任何问题,请随时提问。2 B; A: N$ K5 X* \

. t* M: B! g, r3 p4 X
8 s! d* U% e$ @7 k+ `  }  b

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-6-14 22:07 , Processed in 0.398487 second(s), 55 queries .

回顶部