- 在线时间
- 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)来建立模型。* N) p0 x4 o r2 V- V6 I( r: Z
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。! d4 R% C3 r, |, z7 S+ P' `
# @1 s: ?, Y3 X1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。; q: z6 S. [3 @: j( N" r
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
; W4 {: R1 W2 d2 {5 _3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。: P& T. E2 e" y, m
7 g! Q4 z! M( L( qARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。
" d% O5 N2 F* {4 BARIMA模型的建立包括以下步骤:5 n+ V/ E- V: s2 U) S
0 Z- X' J; U* P/ N1 c
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。7 Q2 c6 F _. E1 U" V0 q" s Y6 f
5.如果时间序列不平稳,进行差分操作以实现平稳性。# j$ Z3 O( c5 a6 r, L, v
6.通过观察ACF和PACF图来确定p和q的合适取值范围。
: m, ^7 o9 `) B; I- ?$ ?$ \8 R1 ^1 N7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
" k, u" b, X' _: X" V( x8.对每个模型进行参数估计和模型拟合。
' Z, j" R5 b/ g l8 _- w9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
) K' h* R9 s% U5 X
( Q) g# V* [# H- C" tARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
; p/ |, w6 F; `! k4 D8 _$ w. s7 V, T- \; r& K3 i6 U
# 导入所需的库: Z }1 |& F8 {" n" [9 Z
import numpy as np: [) L) ]1 J: K. B( D- r
import pandas as pd: K- M V0 R# g5 ~. S6 t1 Q! B
import statsmodels.api as sm: Y3 S% e( u- T* a) v
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
2 [) o+ k! |$ _4 I7 F( V/ I% iimport matplotlib.pyplot as plt
+ m! |# i/ A5 R$ e9 d" Y$ d
5 @; k- W: H' X( j; I( J这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
* W0 n1 a5 K q0 h4 Q# 源数据+ t$ r8 u* g. L# f# p9 Z
df = pd.DataFrame({# {( E4 V. [2 D8 g; k+ s1 K
'year': [i for i in range(1971, 1991)],
1 {/ l5 p. d; M+ C2 o 'num': [66.6, 68.9, 38, 34.5, 15.5,1 z6 ~7 D1 T8 g& A0 V+ p+ \8 r
12.6, 27.5, 92.5, 155.4, 154.6,/ V3 N* W+ C( e# q! f
140.4, 115.9, 66.6, 45.9, 17.9,
- _' i7 t9 d; \- e 3.4, 29.4, 100.2, 157.6, 142.6],
- ~' h8 N+ ?- @6 q' k# j- s2 |}); W9 g) P, \& t0 T+ l$ `
1 y1 E4 d/ I- F$ |8 v- I8 S0 _
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
0 Y, q+ b5 I8 G" W9 I3 j6 v+ K/ o# 画 acf 图
2 R" [6 F9 P/ U) Vplot_acf(df['num'])
3 P. J6 U% b. h5 D2 M" g0 k* d! A0 Z& t5 V4 M' O
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。' h- A; H( I3 Q( H: c
# 画 pacf 图( A1 i+ G* L r( |% O, a
plot_pacf(df['num'], lags=9)2 T& q; |1 S. C ]3 o
/ o) \4 ?& _. }7 y2 P% q
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。- j2 P9 }# ]/ t9 v
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
8 o1 F& R2 G1 }0 q& } ^* N! fstr_list = []5 R5 F; t$ w8 i) I! z5 x4 {
for p in range(1, 6):; X1 v4 `9 U( S% s, Z
for q in range(1, 3):# o) m8 F, } `4 D2 O! J
model = sm.tsa.ARMA(df['num'], (p, q)).fit()2 H' V' d+ q1 k
str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
0 ^) x5 X9 n1 s( D7 Pfor each in str_list:
; ~: I9 x4 M s1 c$ Y print(each)
; e9 w( j3 r/ f1 Y. L$ B: S
% k! _5 G& @9 c/ N这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。6 L2 f9 y' y2 h. t
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2$ n$ x6 S5 D, m
model = sm.tsa.ARMA(df['num'], (2, 2)).fit(); A8 b' S+ b# q) ]) l
model.summary()* O4 G0 y3 L/ O$ i
. p9 P& r7 V9 i+ {4 i' s4 l
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
& P+ g* _( Z" u- ?' H. ?. u9 j# 预测和画图+ ? ?6 l* `5 _/ b0 Q7 n
plt.plot(df['year'], df['num'])
, j9 s; B8 m) I/ Lplt.scatter(df['year'], df['num'], label='actual')
4 I# X' w: T4 l* ?. u8 v8 pyear_list = [i for i in range(1971, 2001)]# v$ C0 ^1 f& V/ ?6 }2 c
plt.plot(year_list, model.predict(0, len(year_list)-1))% m+ x! A' }( v- _' v+ {& Q- e
plt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')7 p6 J( e% s: _) ?% x
plt.legend()
, k" g9 M4 {6 l9 i
& P, c Z/ r) s$ I. A+ N( C6 {这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
: [: }+ \% v/ D希望以上解释对你有帮助。如果你还有任何问题,请随时提问。" C3 j3 W" W: u) |& u
7 {# f: W" z0 G" A4 d
5 `6 j$ A8 a& J' w- X& W3 K
|
zan
|