QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 10:19 |只看该作者 |正序浏览
|招呼Ta 关注Ta
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。% E/ K7 e8 S- E7 D
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。3 I* s1 @3 }( M

. {, C* {# d7 [0 \1 x$ b1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。
8 q! ]  i& B6 N; [" p2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。6 ~3 d/ U% t* l, o" b7 y
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。5 l7 V! k; Q, C/ v2 V$ {

6 B" ?4 \( e; _" FARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。0 P' a. S8 ~$ h! b( ^
ARIMA模型的建立包括以下步骤:( q( ^  n- l# ~0 l2 C3 y* B

, a. {/ p' `2 C3 n. u4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
) c+ i- {# w- ?: J/ c  ?' ?0 b5.如果时间序列不平稳,进行差分操作以实现平稳性。
! h" J5 |9 c6 ~& w4 P( ~6.通过观察ACF和PACF图来确定p和q的合适取值范围。  c# P" o0 U$ n  E) \- u
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。0 |. E- c, o4 j' C2 g" S7 n: R( y
8.对每个模型进行参数估计和模型拟合。8 {) }; y6 J- f8 T* D5 b& q
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。) q) Q5 ]" G: b

4 N: ]9 I: c" i% b6 kARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。9 Y: B1 ^/ ^* N) U, m" E/ s

& A: T: W& t7 b4 D# 导入所需的库
7 s9 \$ |" W7 n  I+ g( iimport numpy as np
3 E: g1 w% S! Z$ Fimport pandas as pd
$ L4 `& }( j+ Iimport statsmodels.api as sm4 U* ?4 @: d, z+ G6 G+ U7 W
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf! B4 V  k: B4 K$ |
import matplotlib.pyplot as plt
* [* n  [. {3 Y, L
8 B. Z# R, V  M, }' p" w这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
; f5 L6 g: T8 E1 Y  x4 {7 G# 源数据
* m! U3 H; G0 v  qdf = pd.DataFrame({0 J, D: k( j. V: [
    'year': [i for i in range(1971, 1991)],
5 s% h9 N4 ?- q+ V% s" z0 E    'num': [66.6, 68.9, 38, 34.5, 15.5,
' R5 j9 A! W- o/ D! v            12.6, 27.5, 92.5, 155.4, 154.6,
3 l7 C' j0 ~5 d+ S+ K            140.4, 115.9, 66.6, 45.9, 17.9,! M2 n% j( H. K2 f: e3 z3 l. b
            3.4, 29.4, 100.2, 157.6, 142.6],/ f% `4 g9 D  J2 |. m
}); j1 u. l( g" z/ e+ H7 s4 N
1 b% r/ M* L' `' T4 \* K
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。0 j; G0 ?( R' x0 a( `' O
# 画 acf 图
0 F, q3 Z8 a' s$ p& W) `plot_acf(df['num'])1 d, h* _. D; W6 F$ H

; Q: \! q+ W! x7 R2 ?, X9 E! e这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。
' j/ {" S  t8 Z& C' o# 画 pacf 图
) I! e+ h0 x! f2 {  L& V% Wplot_pacf(df['num'], lags=9)' D' v4 V% J6 o* Q8 W; y+ u$ S

+ f2 h4 ~+ h# M! g8 E# r这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。9 C& K: o; h% d" C  y; _' O
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic9 y$ I6 `( r, ?9 l- C& t8 F. I
str_list = []
- Z; @* z! Y* J7 j' jfor p in range(1, 6):( e. F* T( i! u: j6 {4 l  K2 c4 |
    for q in range(1, 3):( f* e: F. a! J3 i
        model = sm.tsa.ARMA(df['num'], (p, q)).fit(), v: t* W3 f- d# f. L7 i
        str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic)), L( s! R- B/ s
for each in str_list:8 `% M+ J9 m  ?* r1 H" ~7 a
    print(each)
9 s; t  P/ V* w7 `+ {$ B
2 w7 ?2 E& {$ g1 R: B这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。, W: _7 `/ F0 |" a- \, O( ^. x
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=21 W& z! Q; d1 I5 h# y
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()
/ y5 ~; `$ m: A7 umodel.summary()2 |6 Y8 O4 a9 }5 Q+ h

) f( y$ n* v; t& b. C" `# @根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。3 x9 E. Z- z. }* D& K6 @) @! ~
# 预测和画图5 m9 ^# y* u* _4 j* Y6 {
plt.plot(df['year'], df['num'])
- C) ^+ |* b$ h- ?: O$ @plt.scatter(df['year'], df['num'], label='actual')8 l0 n0 ]: f1 C/ }0 l# u/ Z
year_list = [i for i in range(1971, 2001)]
% Z. _, D! E& S' jplt.plot(year_list, model.predict(0, len(year_list)-1))
% m, g# [' B' y: |plt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')$ \$ T5 B- B2 ~& l0 F' m* d+ Q8 ^
plt.legend()
7 K7 B( M5 T; F. p& W( Q6 d9 A& {  E8 k- F! H5 c4 ]1 K
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
& W; }' s. ^# N  O% Q' P4 x希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
' U* D4 a9 d& g, J
) ~# x& p) ]( a: O$ v* k8 k$ {9 }

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-15 13:46 , Processed in 0.452347 second(s), 56 queries .

回顶部