QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 10:19 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
1 N" C( l' X4 G( c, Z+ M- W; lARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
+ m4 A2 A$ R; M! T( L- D" m7 T/ K  Z$ ?, m, t$ E) f
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。0 e0 z( g3 P8 J0 v( f' L8 V7 b' c
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。! M% V/ E8 X6 L0 L+ |
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
, K! E+ m% b+ X- R3 i- _/ Q% Q
  ]2 G: {) ?8 zARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。2 X( J3 n5 _2 ~4 k
ARIMA模型的建立包括以下步骤:
: L( y3 `4 ?' r2 P# }4 q; O/ X/ g
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
" G8 s4 ]3 F: c) _' V8 X5.如果时间序列不平稳,进行差分操作以实现平稳性。, I9 C/ K; {4 q1 e
6.通过观察ACF和PACF图来确定p和q的合适取值范围。$ C9 T% L' y( s* A# e$ H3 C6 `
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。. U# _- A! X* t1 j7 H; n
8.对每个模型进行参数估计和模型拟合。
3 v  H0 h$ X% u8 m5 P9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。% u& ~' {% n) ]# c5 y# k) m1 b9 ~
6 K' o" a6 K2 `% G1 P
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。% W! r& S. q( X* t( O1 G9 E% I
. W3 G+ K' o. q) p: c* @* ^) b
# 导入所需的库
3 N$ E( l  L8 H9 h5 H" I0 n* Uimport numpy as np' S3 n  b4 G5 P) Z7 O) Z
import pandas as pd/ `, {# B2 U5 X% ?1 U2 K. m' U3 H
import statsmodels.api as sm) G( x  d# g. Q
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf; s# z, x, p$ ]) f- O, h8 i4 I
import matplotlib.pyplot as plt
. Y# V7 l. }9 B% h8 r9 ]4 B. N7 Y# k0 f' o; ]6 z7 Z3 H
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
8 U: {# l1 s7 s+ a) r# 源数据/ m! W! Q, Q9 k( B1 e6 a
df = pd.DataFrame({
6 `4 a+ W) U1 G+ G  y$ B    'year': [i for i in range(1971, 1991)],
  d" S! V# k3 ~" {' |, ^    'num': [66.6, 68.9, 38, 34.5, 15.5,. R  l4 Y8 l8 B. K$ i8 R! w
            12.6, 27.5, 92.5, 155.4, 154.6,
5 N9 Z+ g% E8 P0 J+ w            140.4, 115.9, 66.6, 45.9, 17.9,5 {- v; p! s  f, p7 _
            3.4, 29.4, 100.2, 157.6, 142.6],1 S" m& W# J/ E4 ]
})
1 K5 T2 o8 e( V  M& L/ n" I2 R; I: I3 L9 }
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。; l( c/ i$ G! k. [0 f2 w3 s
# 画 acf 图
1 e4 o% l' \& |plot_acf(df['num'])2 W% e% N- d, T
/ @, ~/ o% z* M" t
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。/ g0 s7 e5 L( @1 W' E
# 画 pacf 图* g# a: |, p0 P! [7 g
plot_pacf(df['num'], lags=9)( O" Q& Z, Y. e5 V7 ~" F

; C0 w% S% h2 f5 ~/ Y3 K这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。+ ^3 A$ n( l4 L+ R
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic" Y( v$ \& F* x+ _% ]" {8 U3 ^
str_list = []
4 o. k& }+ l' z& B" Cfor p in range(1, 6):
9 q0 E) D" B2 H/ A: U    for q in range(1, 3):
- A, `3 e" y# {        model = sm.tsa.ARMA(df['num'], (p, q)).fit(), W$ v2 G1 j0 ?+ q5 n4 t' F1 m
        str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic)). d/ G5 w; z% A. [) i  ~
for each in str_list:# _  Y1 t# d- V( Z1 B
    print(each)
# o: O- i7 g0 s: q: t# R6 V3 L' x! y8 w8 J! ?4 A! x
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。/ E7 p  m& l) p, A# o
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=29 e. v; u6 A4 I% ^# m' s+ y
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()
: D! l0 N6 G8 p  Bmodel.summary()# ^1 L; a7 j' R  {2 X

; z/ f( ?" ?7 e& X8 I根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。# _' X9 Q3 ?( _8 ]5 N5 r: i
# 预测和画图6 O" q! ?5 \& Y, z) F. p. g
plt.plot(df['year'], df['num'])
8 a$ V3 O/ ~) V3 U) ^( nplt.scatter(df['year'], df['num'], label='actual')
; y8 _, i& K: m- y) fyear_list = [i for i in range(1971, 2001)]3 p  [/ ?  R* {
plt.plot(year_list, model.predict(0, len(year_list)-1))
0 I) c4 |6 a8 m( splt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')# p, I% q, I* x: U4 I* d  Z2 I/ _" O
plt.legend()& u; W5 S8 m; v* ^' X: D
% K3 s# K& |, x* l1 q5 z3 v2 i. u
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。6 W9 S; }) M# B
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。/ ]5 C3 ^* I8 Y% m1 M

- N1 p3 C* u) U: r9 W& t/ Z3 R/ l& J' ?" h$ p0 y1 x& e8 C) e

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-10 17:24 , Processed in 0.289364 second(s), 55 queries .

回顶部