- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7953 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2978
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
3 i4 i7 E7 o# x: w( ^6 ]4 E( TARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
* b3 _+ s/ f6 c0 c0 A4 l! X
+ x, ^2 O0 M9 a' ~- W1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。, b9 c% w/ h" [) G
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。9 L' O- g0 N p% ]6 M: ?4 X5 U9 k5 ? x
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
3 n& d( O4 m1 i3 w( w5 p1 `/ {! g
* r# ?# u; }* c/ TARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。& b) G1 y5 \: P& o
ARIMA模型的建立包括以下步骤:4 H8 V! `. B2 g
: r* D+ C# a( m: X5 e
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
) a) s# [3 Q8 P2 O1 t0 C7 x: n5.如果时间序列不平稳,进行差分操作以实现平稳性。
# F- Z- T6 J; `6.通过观察ACF和PACF图来确定p和q的合适取值范围。" E! |+ H9 T2 v' `/ `7 v
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
( Q& w8 a) t7 M* d2 N2 N2 F8.对每个模型进行参数估计和模型拟合。2 e% G- {3 E$ I, `/ J
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
6 U; O* S' J& C0 z/ u/ Z+ [) n) Y9 r E4 ]; O* D; z
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。! @/ Z" m. l; J3 w
: v' J, X! S5 z0 ^$ |! m# 导入所需的库/ s7 Y& D7 o: s5 h% G" _1 r
import numpy as np
6 t5 e$ Y( |( F0 `; A( W! Gimport pandas as pd
* y5 ^1 {1 ]* r- s' ]% N2 f/ fimport statsmodels.api as sm% p8 ` `0 V& _+ U. T3 x
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
% n* C4 h' B1 ~1 aimport matplotlib.pyplot as plt
/ y( k8 Y# b* z- ?7 `3 r6 N, G. ?- D6 u1 s5 L
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
( r5 @: R6 A% o" t& x: o# 源数据) r n2 D& _9 m8 t) n4 g
df = pd.DataFrame({% B( T# U3 m4 J4 y2 V
'year': [i for i in range(1971, 1991)],
7 j. m& _1 e7 F6 l2 | 'num': [66.6, 68.9, 38, 34.5, 15.5,7 R0 t. W. t8 J% N4 m) k* [. g1 u
12.6, 27.5, 92.5, 155.4, 154.6,! N' E+ l& F8 [5 i( L8 K, m# }
140.4, 115.9, 66.6, 45.9, 17.9,! ]# i" G, m: ?3 F$ {
3.4, 29.4, 100.2, 157.6, 142.6],6 {, h- j) I! o
})
# Q8 Z0 q3 t7 r3 x. t1 C9 d
8 I; k# P8 A5 J这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
6 R& d5 N" j0 L# 画 acf 图" g, o9 n' [$ S; O' A. K
plot_acf(df['num'])+ ` E9 O4 D& _! T9 }
- N. [( l- y" y, z( f3 y
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。' B- p5 a5 t1 U+ y6 D. l/ s
# 画 pacf 图2 r% N& d9 d- |9 L% x
plot_pacf(df['num'], lags=9)1 n5 R$ |# ?% w2 a# V8 ~- L- n/ c
/ z, n) R1 o) h
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。! I7 J' [8 m" m6 r. j0 r
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic! _3 y& S5 X* G% ~( `$ Z& X& l
str_list = []. J2 y" `; D) | k4 e
for p in range(1, 6):
! f, L+ j" H, v0 e5 P) b for q in range(1, 3):0 ^' K. {* Q3 t/ o# ?" ^
model = sm.tsa.ARMA(df['num'], (p, q)).fit()
& `% u! j! ]4 t3 x+ d4 J0 Z$ u8 q str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
' a; F+ M3 c- G$ @+ e5 {6 |# Qfor each in str_list:
3 O( w4 r% e! n( T) v" } print(each)
, c" Z4 [4 y. H* z2 r. u
) \! i% o0 y) m. B4 w# ~这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。1 U+ o! ^; L2 a p7 U6 s
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
' @0 g7 V1 |8 I( S0 rmodel = sm.tsa.ARMA(df['num'], (2, 2)).fit()
* w6 S- M9 X/ t) n! p7 \model.summary()
3 z9 w1 P1 Z s! l+ B" a6 z U6 j- [3 j$ c8 X# b' b
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。2 H/ k0 Q$ F( @, v* E" c9 J
# 预测和画图& i8 R9 {" w5 x
plt.plot(df['year'], df['num'])
+ P1 o$ d0 {+ @5 N8 kplt.scatter(df['year'], df['num'], label='actual')
% ?! N+ S+ f) A: E- tyear_list = [i for i in range(1971, 2001)]) Q, U) `( a1 `' [# |, t( |
plt.plot(year_list, model.predict(0, len(year_list)-1))- D: _8 C& N. @( d0 @4 F
plt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')7 m& S$ O4 y" R: G- u( q1 c( ?
plt.legend()
% k p7 j9 @9 W
# Y6 e% {* p# W这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。, O# P& v; J- n- |7 L
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
2 N$ E3 m0 ^0 v# w' `4 s8 R
" B( v" T3 r. E8 u) Y+ {. K1 h. M5 u5 T
|
zan
|