- 在线时间
- 472 小时
- 最后登录
- 2025-9-5
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7679 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2884
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1161
- 主题
- 1176
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
4 d, d( l! N) k- t9 ~8 f" d' ~3 SARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
7 W/ e& D: s8 R% @8 G( f3 l! k. o1 @$ h5 o/ {1 r
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。
. c [. `" G! a5 u3 T5 n2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
( d: `" O2 n1 `# h# _3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。8 O& j: I1 j+ l9 T
2 J# `4 [0 V" C; ^. k7 P0 X3 ~ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。5 i9 b6 _0 r1 x% p A
ARIMA模型的建立包括以下步骤:& u2 a m$ k9 Z' V
, M7 N6 Y- D) A7 D! Y& e8 ^
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
! i% _/ B% J5 Z/ h3 ^7 B" k5.如果时间序列不平稳,进行差分操作以实现平稳性。; a% c. J' d+ a/ {
6.通过观察ACF和PACF图来确定p和q的合适取值范围。3 V0 v/ f) R2 S5 ]( u; T; U
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
3 F% S4 z( g P3 `3 b- e) h; C2 p8.对每个模型进行参数估计和模型拟合。/ E, l! V+ j( F1 |
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
1 v: t% O& F( B3 C7 S$ K- O8 q, W4 w! o8 n+ s4 N( R
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。5 L: k& F; m7 A" d' k4 i! V
& O, l4 o6 |! ~" e1 N/ O# 导入所需的库
# O- `+ {) T4 V; c5 rimport numpy as np
3 O2 e6 q! {* [. P/ Iimport pandas as pd
( ]. w2 }# T2 j1 c% A6 x) g0 Gimport statsmodels.api as sm8 ]. ~: a) G- F" r2 f' B
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf, y, ^6 i- k( s0 L
import matplotlib.pyplot as plt
7 i( Y3 G- [% x! l$ b- V, b: W' h& {7 p4 o' Z( W+ ^4 r% O5 {5 g: |
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。; M2 S6 [6 H9 ^5 y/ g' Q7 t: m( ~& Y& o
# 源数据
# b4 z m7 ?! m2 V" k, Pdf = pd.DataFrame({; r6 F$ K4 J ?; W) o
'year': [i for i in range(1971, 1991)],
) e( U8 c! V# m 'num': [66.6, 68.9, 38, 34.5, 15.5,( b2 y# n4 p: k/ _
12.6, 27.5, 92.5, 155.4, 154.6,
, A" ]# d6 R# c$ A 140.4, 115.9, 66.6, 45.9, 17.9,: i8 y6 w( R2 g& P2 i }
3.4, 29.4, 100.2, 157.6, 142.6],3 R- H- h! @6 e. q' O
})1 E5 I6 u5 N, t3 P0 M1 c: B" E# M1 g
% P# \$ f/ o* c z9 v, p7 U4 c1 A这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
, g0 e0 ]- t0 ^1 ~' Y+ z& l# 画 acf 图( X5 Q, h% I) H/ A: _& I1 K9 e
plot_acf(df['num'])- Y4 k( Q, Z" o
: M/ {- m' {( Z这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。7 ?4 j6 D& d& H1 i* o6 `% j/ ^" V2 G
# 画 pacf 图2 E0 ?, Z9 M& c; b
plot_pacf(df['num'], lags=9)) w4 T( x- o) W: y
. y( ~$ |- r ]3 |+ L3 `
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。! x4 w S; M$ ]9 n
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic( Y' M g* w: h
str_list = []' z4 v- k1 U% v, Q% y
for p in range(1, 6):+ Z" } D0 u- P2 W5 C/ F
for q in range(1, 3):7 X% x' ~+ E( E# V" c
model = sm.tsa.ARMA(df['num'], (p, q)).fit()
6 T3 Y1 N7 p0 J, O str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))! \6 U2 g# l" q8 y- T: b: K
for each in str_list:
& Q/ R }* `4 w5 J ]- W2 _% ` print(each)
# c, }, Z: M2 F/ s) ~$ T1 D' a& H' q5 ~! [3 ]- {, f
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
6 [0 E. v( k }# 发现 p=2,q=2 时 aic 最小,取 p=2,q=28 h% b. ?- E8 b4 e- N6 X) L
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()
8 h b& U1 H# L$ Z" Hmodel.summary()
$ t" u- ]: }4 N' Y$ r$ S6 q
/ Z# ^- Z' p! T1 y! T4 v1 q/ }根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
6 W( u) `8 J" J: F7 {$ z# 预测和画图
# ?7 i7 x# Z9 F+ fplt.plot(df['year'], df['num'])/ I: a5 G8 r3 @
plt.scatter(df['year'], df['num'], label='actual')
6 ? I5 h* h9 V, _2 I- n2 Hyear_list = [i for i in range(1971, 2001)]/ u& Y6 e5 V& [4 o
plt.plot(year_list, model.predict(0, len(year_list)-1))
6 ^* F- p& T! y1 k$ uplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
/ |+ o8 P3 O" _+ t1 t5 H/ `, oplt.legend()
0 l* `9 r3 Y7 O3 Y' Z, _3 @$ V& o: l* v* i
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
" G4 }, o# L& {+ L9 n" N1 b7 q# p希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
1 d: D5 E0 E- ^, p/ o( {" N
4 n5 W+ {+ F6 l4 L! i6 x- a6 x) y' w- y* ]; M
|
zan
|