QQ登录

只需要一步,快速开始

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

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

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

1176

主题

4

听众

2884

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 10:19 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。2 \( x4 D  r3 J; ?
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
, E; a; ]# m3 ?" Z( `$ @0 c3 p( O3 \7 Q
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。
/ V4 S4 [. A0 J6 R2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。+ f8 T- p! Q$ o- ?
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
4 s- V" [8 G& N2 v! s
% u% X9 Y  S/ Z+ iARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。/ M! j6 t; ~2 [/ D( b
ARIMA模型的建立包括以下步骤:
- ~% I9 M! d4 f! \: m9 T; A
+ n  U+ V( w! _1 U4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。0 [3 O' o' c& ~8 C
5.如果时间序列不平稳,进行差分操作以实现平稳性。# |: e" _3 n# f! s6 y3 W$ V8 O1 n
6.通过观察ACF和PACF图来确定p和q的合适取值范围。
) P3 x0 L! t$ g! a! F) z7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
9 }, W$ F7 _* [- v  c2 v8.对每个模型进行参数估计和模型拟合。
* ~, ^: Z7 g7 t# t: E' O9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
6 y$ Z$ D* w8 _4 k2 H( y  P1 |$ j# t$ ~( J4 l
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
. X+ ?4 p: y0 b6 O2 p/ E# e0 z0 d7 T! d( f3 U" n
# 导入所需的库- [. O: F1 @2 H3 U  ?/ m0 C0 v
import numpy as np; W- P& c  m) j: h* `+ R; x% n9 \% ]
import pandas as pd
4 a( F$ V9 m. t! }0 ~+ Bimport statsmodels.api as sm0 k4 L  w+ V1 y! T! `- n3 U% j
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
! m1 i3 @2 x0 O! K& Y! Himport matplotlib.pyplot as plt. a) f2 F/ C( ], M! u
, \* {( T* g2 F7 {5 E
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
1 N3 M' O( o( o; N. c# 源数据% d' D. I8 m  l" P* i' j
df = pd.DataFrame({: ]* R, s8 t* M" d) Z; S
    'year': [i for i in range(1971, 1991)],
7 z) N) J  [4 m' {3 w    'num': [66.6, 68.9, 38, 34.5, 15.5,! `0 ~( y0 E/ r* y  S
            12.6, 27.5, 92.5, 155.4, 154.6,
& f/ E& a& w  ~            140.4, 115.9, 66.6, 45.9, 17.9,
' [* g6 ]" m8 F2 S+ t3 s% G; c            3.4, 29.4, 100.2, 157.6, 142.6],1 O/ e) a1 n7 q7 L
})- L# G  K% B' d& y5 R' y: B3 }; \
3 Z  q1 U4 P# j- ^. Z% j0 Z  e
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。4 r# W' t/ c( s- G5 T5 e
# 画 acf 图' k) @  ^1 w" b
plot_acf(df['num'])
: E; D* c1 V- Q! e
+ k& B2 ~5 B+ m7 `7 l: s! }) N这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。, X% e# q, |3 A( S0 g/ C  o
# 画 pacf 图
# k; y$ G" Q  D0 {2 Nplot_pacf(df['num'], lags=9)& K0 f, D* \7 C
  L3 O9 l2 I# M8 Z( i5 L
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。
6 G: ^- `! a2 G3 v* M# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
  H- g. S0 Y9 }, dstr_list = []
: j7 Q- j, P! l" V% rfor p in range(1, 6):
7 b8 ~' P0 E  i8 m    for q in range(1, 3):
. O6 |9 L5 e  U        model = sm.tsa.ARMA(df['num'], (p, q)).fit()
+ f" Q- e2 J8 W/ p3 B& y        str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
* s+ {( i& V8 y9 N2 Bfor each in str_list:4 Q  n- \- a$ X: x/ @
    print(each)
6 q& I5 W1 I% m' X7 Z5 B3 _3 x
; O9 O3 k& A7 w) ]这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
) O- E6 ~% W# ^$ u1 y9 G% p# 发现 p=2,q=2 时 aic 最小,取 p=2,q=29 u7 N4 H( x+ B: n: T; y; T
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()
: s. v1 Z# t  ^2 f, Rmodel.summary(): U% k/ N: c- Y+ z

2 i9 ^2 T+ _& x; x根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
+ N  B7 N* V( P4 G; p# 预测和画图
2 y, D$ C: I2 y% E( B/ j0 Gplt.plot(df['year'], df['num'])
. I. p  |4 N" V) Y" Iplt.scatter(df['year'], df['num'], label='actual')# ~# d# |0 Q) w# x+ N4 i
year_list = [i for i in range(1971, 2001)]" T7 a* U+ X2 m1 [& i
plt.plot(year_list, model.predict(0, len(year_list)-1))
7 h4 y7 D0 B* @5 d" _plt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
+ O. s8 v0 i$ h1 k3 f- h6 oplt.legend()# s: O$ T+ L' J( m/ y: ?

. I+ a6 B1 X! O# q, l- q% o0 ?. A, W  j这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
; b* }+ S5 m# n0 p希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
. o% ?/ j2 n4 m" W" l4 \9 H4 S% t. o& \3 t9 E9 B
8 f7 H1 }& M6 n4 ^1 {4 ^

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, 2025-9-17 07:37 , Processed in 0.481518 second(s), 54 queries .

回顶部