-
ARIMA
时间序列建模过程——原理及
pyt
hon
实现
ARIMA
模型的全称叫做自回归查分移动平均模型,全称是
(ARIMA,
Autoregressive Integrated Moving
Average
Model)
,是统计模型
(statistic model
)
中最常见的一种用来进行时间序列预测的模型,
AR
、
MA
、
ARMA
p>
模型都可以看作它的特殊形式。
1.
ARIMA
的优缺点
优点:模型十分
简单,只需要内生变量而不需要借助其他外生变量。
缺点:要
求时序数据是稳定的(
stationary
),或者是通过差
分化
(differencing)
后是稳定的
;
本质上只能捕捉线性关系,
而不能捕捉非线
性关系。
2.
ARIMA
的参数与数学形式
p>
ARIMA
模型有三个参数
:p,d,q<
/p>
。
p--
代表
预测模型中采用的时序数据本身的滞后数
(lags)
,
也叫做
AR/Auto-
Regressive
项
;
d--
代表时序数据需要进行几阶差分化,
才是
稳定的,
也叫
Integrated
项
;
q--
代
表预测模型中采用的预测误差的滞后数
(lags)
,
也叫做
MA/Moving
Average
项。
差分:假设
y
表示
t
时刻的
Y
的差分。
if d=0, yt=Yt, if d=1, yt=Yt
?
Yt
?
1, if d=2, yt
=(Yt
?
Yt
?
1)
?
(Yt
?
< br>1
?
Yt
?
2)=Yt
?
2Yt
?
1+Yt
?
2
ARIMA
的预测模型可以表示为:
Y
的预测值
=
白噪音
+1
个或多个时刻的加权
+
一个或多个时刻的预测
误差。
假设
p
,
q
,
d
< br>已知,
ARIMA
用数学形式表示为:
p>
yt?=μ+
?
1
?
yt
?
1+...+
?
p
?
yt
< br>?
p+θ1
?
et
?
1+...+θq
?
et
?
q
其中<
/p>
,
?
表示
AR<
/p>
的系数,
θ
表示
MA
的系数
建模
##
构建初始序列
import numpy as np
import
as plt
import as sm
from ts
import
acf,pacf,plot_acf,plot_pacf
from _model import ARMA
from
_model import ARIMA
#
序列化
time_series_
=
([151.0,
188.46,
199.38,
219.75,
241.55,
262.58,
328.22,
396.26,
442.04,
517.77,
626.52,
717.08,
824.38,
913.38, 1088.39,
1325.83, 1700.92, 2109.38, 2499.77, 2856.47,
3114.02,
3229.29,
3545.39,
3880.53,
4212.82,
4757.45,
5633.24,
6590.19, 7617.47,
9333.4, 11328.92, 12961.1, 15967.61])
time_series_.index =
(_from_range('1978','2010'))
time_series_.plot(figsize=(12,8))
()
3.1
异常值及缺失值处理
异常值一般采用移动中位数方法:
frompandasimportrolling_median
threshold
=3#
指的是判定一个点为异常的阈值
df['pandas'] = rolling_median(df['u'],
window=3,
center=True).fillna(method='b
fill').fillna(method='ffill')
#df['u']<
/p>
是原始数据,
df['pandas']
是求移动中位数后的结果,
window
指的
是移动平均的窗口宽度
difference =
(df['u'] - df['pandas'])
outlier_idx =
difference > threshold
缺失值一般是用均值代替(若连续缺
失,且序列不平稳,求查分时可能出现
nan
)
或直接删除。
3.2
判断是时序数据是稳定的方法
p>
一般是观察时序图(
稳定的数据是没有趋势
(trend)
,没有周期性
(seasonality)
p>
的
;
即它的均值,在时间轴上拥有常量的
振幅,并且它
的方差,在时间轴上是趋于同一个稳定的值的。该方式并
< br>不严谨)或单
位跟检测(
ADF
是一种常用的单位根检验方法,他的原假设为序列具有
单位根,即非平稳,对于一个平稳
的时序数据,就需要在给定的置信水
平上显著,拒绝原假设。如果
ADF
统计量比临界值的值小,则可在该显
著性水平下,拒绝
原序列存在单位根的原假设,即原序列是平稳的。反
之,则接受原假设,是非平稳序列)
确定。
ADF
检验:
t=er(time_series_log, )#ADF
检
测
output=ame(index=['Test
Statistic
Value',
Value(1%)
Value(1
0%)
output['value']['Test Statistic
Value'] =
t[0]
output['value']['p-value'] =
t[1]
output['value']['Lags Used'] =
t[2]
output['value']['Number of
Observations Used'] =
t[3]
output['value']['Critical
Value(1%)'] =
t[4]['1%']
output['value']['Critical
Value(5%)'] =
t[4]['5%']
output['value']['Critical
Value(10%)'] = t[4]['10%']
print(output)
###
————————————————
-
——
result
——————
———————————
--
———
#
####
value
Test Statistic Value
0.807369
p-value
0.991754
Lags Used
1
Number of Observations Used 31
Critical Value(1%) -3.66143
Critical Value(5%) -2.96053
Critical Value(10%) -2.61932
3.3
不平稳处理
-
-
-
-
-
-
-
-
-
上一篇:环境科学专业词汇英语
下一篇:实用英文缩写