- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
% ?8 I; s7 z X- N0 WARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
7 ]' G( s0 L3 S) u8 p ]2 U1 z! a }$ J
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。
3 {( Q. S0 E) j. S2 K3 b& t1 p2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
/ F. K* P6 u- ^8 h8 h( y% }' [: ~3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。- G8 c T2 ^: d$ t# ]! Q5 d
( j+ k) _9 |+ N1 R+ N9 u
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。" Y; B! R8 K8 V
ARIMA模型的建立包括以下步骤:
* n( C, `0 n6 K) A! b) O e8 e" ~1 G: I3 L, |
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。0 ^0 M$ M; p+ D3 n5 O7 V2 M
5.如果时间序列不平稳,进行差分操作以实现平稳性。
[/ V, Q- V6 T4 a6.通过观察ACF和PACF图来确定p和q的合适取值范围。3 K7 K/ f' z0 F4 S( P6 u$ y+ ^: K
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
' v$ x' H6 {1 O) k0 r% f8.对每个模型进行参数估计和模型拟合。" P1 r2 w* Z' p- W7 _; u; I. I
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。0 T* j! a& [9 S* x
: U2 \( m! Q; S* @/ \) O1 wARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
: N: x& P4 H& ]+ W4 A7 Z0 T# R9 g2 l; h
# 导入所需的库2 Q! G/ D0 \4 e$ d+ |6 L' U
import numpy as np, U: j1 n R+ _9 j5 r6 f0 Q3 \
import pandas as pd, x1 K9 D+ Y- w2 T
import statsmodels.api as sm
$ m' E# b9 k P# N( K9 K% Qfrom statsmodels.graphics.tsaplots import plot_acf, plot_pacf+ L9 |% i l3 D! m
import matplotlib.pyplot as plt5 [' e6 c; ?3 \0 y
3 v1 z N& x9 P; ^. z
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
" o1 Y2 _- _/ R3 T/ I# 源数据' H$ z' I' u: q% |, y
df = pd.DataFrame({! R9 z# h3 s0 ^% G. e6 w; {4 a; D
'year': [i for i in range(1971, 1991)],! `8 I0 I3 U" i% `* N7 `+ E
'num': [66.6, 68.9, 38, 34.5, 15.5,
) z$ ]; f" S$ x- k( T( N 12.6, 27.5, 92.5, 155.4, 154.6,
0 m8 w- W6 o' \+ I$ B 140.4, 115.9, 66.6, 45.9, 17.9,
+ f) X Q) c4 c" c/ Q2 f* ?: ? 3.4, 29.4, 100.2, 157.6, 142.6],2 V1 Y) h2 q8 U- u
})
0 c5 N8 ~" Q' S1 ~/ n' [4 y2 A
X8 o) `6 z' o- {这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
. I. {) s) b: A$ J0 O ]# 画 acf 图
, t0 Y$ ?* S" Y& \3 L8 S5 lplot_acf(df['num'])
( b4 y1 `. m) C: K) C8 r3 M/ Q; W
# u. R0 ^7 _& G这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。
" n0 Q3 r+ M/ [0 v3 M1 u# 画 pacf 图1 ^ t p) G6 S0 U
plot_pacf(df['num'], lags=9)
1 B( i5 N7 [. ? k& V! s
8 o7 t* {( r% S1 U' p这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。, j- t. E' g3 R3 x) U
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
& j# N0 H" @5 v# Ustr_list = []
2 X7 h1 ]2 y' A5 }( \5 @for p in range(1, 6):
1 y( X/ h0 T: Q' p for q in range(1, 3):
) p3 f- \- }7 s# d' x model = sm.tsa.ARMA(df['num'], (p, q)).fit()
7 A8 J: H2 @" D* o6 t' p! {2 l str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
0 ^$ x3 b0 b: ?6 c" O- Zfor each in str_list:1 ?" S1 n0 Y9 U! y$ O0 H
print(each)
5 f" o( }! G" }- B; B' F! F% d( V+ S0 D) V
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
! D4 o; k9 j3 I# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2. E3 t1 U9 e; O" Y8 s1 M! V' ?% a1 z* p
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()
, p; ?3 S: w/ @9 Z2 emodel.summary()4 P1 o- k- B0 Y+ z6 c& l
+ x8 |/ J$ A3 d/ b+ A, z; L根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
6 ^2 q3 L4 s+ \% T& ~/ O# 预测和画图+ j* x3 o7 D, i! ~3 n
plt.plot(df['year'], df['num'])0 D2 J6 M6 Z. w$ o2 h. N& K7 s
plt.scatter(df['year'], df['num'], label='actual')' ?4 R, `7 R: `* T# D2 p& q" d
year_list = [i for i in range(1971, 2001)] ~( v7 o( p9 v/ O! m' m0 p
plt.plot(year_list, model.predict(0, len(year_list)-1))
: s, ~0 G+ H/ Dplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
, C3 ^$ j3 m: t" G2 V. g/ o4 dplt.legend(), S" @8 U& X* _1 t
! ^; t1 W& z* ^" |5 s# W0 Y
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
8 y" u! W! ~1 M" b* u& r7 e# v希望以上解释对你有帮助。如果你还有任何问题,请随时提问。" C5 O( l' P& ] Q3 \, T" O5 ~
5 X' P! ?$ q5 }! R5 r f
r, N8 q5 H. p& P, O- w |
zan
|