QQ登录

只需要一步,快速开始

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

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

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

1188

主题

4

听众

2931

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 10:19 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。% t! Z+ ^! P& V- d* o
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
" R6 E2 O8 S8 e* K( ^) z9 r7 q5 ^3 m3 X- K9 F" L  L
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。, `$ G9 M9 b5 V5 ]& i0 v) y
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
* c; F/ b: H; `1 h5 c3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
& {4 W& I+ R: a$ h
, K7 O' Y1 q$ E* ~1 j. hARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。) Z/ {' l" G$ A  y( X3 v
ARIMA模型的建立包括以下步骤:) D, k2 B5 t& Z! I
; x9 q  [! ]; j3 K- l! Q1 l
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
! W% P" d- f1 ]: B% O5.如果时间序列不平稳,进行差分操作以实现平稳性。
3 \6 O7 ?3 w  Q; _7 g- Q6.通过观察ACF和PACF图来确定p和q的合适取值范围。5 y3 z5 Z% ?1 {" n
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
$ W5 o2 o  f' Z4 s! C8.对每个模型进行参数估计和模型拟合。
% Y( j% k" x3 i* u6 J+ Z, o6 N9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。7 x. E" ?* M$ j& n

! D/ ], b+ K4 ~5 E; x- ?ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。$ n. y$ e# D$ h
! L. X% C% f8 M4 J* J* H& I( p0 U3 Y
# 导入所需的库
6 `4 {: I, E; w9 l; k! }import numpy as np
. j- I0 U- y) l, |6 q( k& |& C: uimport pandas as pd. k5 q& ~0 E6 |* M0 l/ }" ?
import statsmodels.api as sm# u5 v' b3 C2 ~2 Q
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf2 M6 Q+ P, [1 y
import matplotlib.pyplot as plt+ _$ e+ F" _* x  y; ?* D: Q: v. |
# @3 D2 ?& h$ F; B
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
5 K; ]5 I/ X& M7 p+ s7 N# 源数据
2 r- |2 @1 {! o8 f: q  C, k" y. \: Adf = pd.DataFrame({
2 p3 e1 r1 n5 \    'year': [i for i in range(1971, 1991)],) X# _& p. F: O$ k" s" Z
    'num': [66.6, 68.9, 38, 34.5, 15.5,% ?0 f7 N7 P' q8 K" Q; s+ x# f- z
            12.6, 27.5, 92.5, 155.4, 154.6,) g* ?9 S6 u3 ]2 D4 l% y/ a
            140.4, 115.9, 66.6, 45.9, 17.9,3 @/ {4 v$ N( U
            3.4, 29.4, 100.2, 157.6, 142.6],
; P' w4 c3 n  J, K) ?. w5 s" v& L, N})8 I0 X  F, g; H6 d. G9 y
4 T. W$ E( Z; X' E; u
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
/ [  F3 G1 q  z' `# D# 画 acf 图6 C4 Z2 p, C- p
plot_acf(df['num']): @1 o" ?: M0 {; E

% P, J# _% Q5 ]( h这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。: r0 K- N/ ]; V9 Z  t
# 画 pacf 图
4 G# C! r) S5 |) m2 nplot_pacf(df['num'], lags=9)  ?. Z' M% _& q: T7 O- e: b  y

- Z/ F" l" ]! [8 `这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。+ b. C% D4 i; G( m% `
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
  F% W) X$ N7 B8 T1 Dstr_list = []
, D0 d* X; N0 X0 I5 w- tfor p in range(1, 6):6 X+ m9 h3 z8 w
    for q in range(1, 3):
1 I! h% V3 Z. p        model = sm.tsa.ARMA(df['num'], (p, q)).fit()
7 F) g% w' z* y0 B        str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic)). S# t5 H! V0 H$ m/ Q
for each in str_list:
" L$ F! M4 T+ y  o. \; I    print(each)2 J' O9 W% y; y+ ^  l
5 v) h0 G5 p5 k/ O" Z! E$ f
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
5 d# g- u  s8 l; U+ g# 发现 p=2,q=2 时 aic 最小,取 p=2,q=28 u* f& l' {. y  ~+ ]0 L4 ?
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()# I1 A7 @/ k9 o
model.summary()
# m7 n  z3 J) M$ V6 |% y8 N
( d8 g: }, M* l! {: j根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。+ Q% ]0 i# M: C  c9 W3 e" O
# 预测和画图. A- J7 T5 f( J
plt.plot(df['year'], df['num'])0 N% W3 t) z' w0 e. S: [) T1 |
plt.scatter(df['year'], df['num'], label='actual')/ H  b; W: s; ^* {: s" z
year_list = [i for i in range(1971, 2001)]
$ J7 |7 I4 V  O& n( hplt.plot(year_list, model.predict(0, len(year_list)-1))
7 }! L# {9 O+ X& ^5 yplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
" `5 n5 a" w  Hplt.legend()
4 m8 N- j3 g! R' h  ?
' M0 X- |6 R/ @这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
, V6 s+ y( @& _. ~1 e希望以上解释对你有帮助。如果你还有任何问题,请随时提问。3 y4 _: k0 ?$ x! c, C3 l
8 W6 M3 ^) J9 I

7 p7 b; ^# b8 ~/ h6 z& K8 u9 r

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-5-25 22:14 , Processed in 0.404032 second(s), 54 queries .

回顶部