statsmodels的ARIMA对我的输出给出了不准确的答案。我在想是否有人能帮我理解我的代码出了什么问题。
这是一个样本:
import pandas as pd
import numpy as np
import datetime as dt
from statsmodels.tsa.arima_model import ARIMA
# Setting up a data frame that looks twenty days into the past,
# and has linear data, from approximately 1 through 20
counts = np.arange(1, 21) + 0.2 * (np.random.random(size=(20,)) - 0.5)
start = dt.datetime.strptime("1 Nov 01", "%d %b %y")
daterange = pd.date_range(start, periods=20)
table = {"count": counts, "date": daterange}
data = pd.DataFrame(table)
data.set_index("date", inplace=True)
print data
count
date
2001-11-01 0.998543
2001-11-02 1.914526
2001-11-03 3.057407
2001-11-04 4.044301
2001-11-05 4.952441
2001-11-06 6.002932
2001-11-07 6.930134
2001-11-08 8.011137
2001-11-09 9.040393
2001-11-10 10.097007
2001-11-11 11.063742
2001-11-12 12.051951
2001-11-13 13.062637
2001-11-14 14.086016
2001-11-15 15.096826
2001-11-16 15.944886
2001-11-17 17.027107
2001-11-18 17.930240
2001-11-19 18.984202
2001-11-20 19.971603
其余代码将建立ARIMA模型。
# Setting up ARIMA model
order = (2, 1, 2)
model = ARIMA(data, order, freq='D')
model = model.fit()
print model.predict(1, 20)
2001-11-02 1.006694
2001-11-03 1.056678
2001-11-04 1.116292
2001-11-05 1.049992
2001-11-06 0.869610
2001-11-07 1.016006
2001-11-08 1.110689
2001-11-09 0.945190
2001-11-10 0.882679
2001-11-11 1.139272
2001-11-12 1.094019
2001-11-13 0.918182
2001-11-14 1.027932
2001-11-15 1.041074
2001-11-16 0.898727
2001-11-17 1.078199
2001-11-18 1.027331
2001-11-19 0.978840
2001-11-20 0.943520
2001-11-21 1.040227
Freq: D, dtype: float64
如您所见,数据只是在1
附近保持不变,而不是增加。我在这里做错什么了?
(另一方面,出于某种原因,我不能将"2001-11-21"
之类的字符串日期传入predict函数。知道为什么会有帮助。)
TL;博士
使用
predict
的方式返回一个线性预测 差异内生变量不是对原始内生变量水平的预测。必须将
predict
方法与typ='levels'
一起提供才能更改此行为:有关详细信息,请参阅^{} 的文档。
一步一步
数据集
我们加载您在MCVE中提供的数据:
正如我们所料,数据是自相关的:
模型与培训
我们为给定的设置创建一个^{} Model对象,并使用^{} 方法对其进行数据训练:
它返回一个^{} 对象,这是感兴趣的问题。我们可以检查我们的模型的质量:
我们可以粗略估计残差的分布情况:
预测
如果我们对我们的模型满意,那么我们可以预测一些样本内或样本外的数据。
这可以通过^{} 方法来实现,默认情况下,该方法返回差异内生变量而不是内生变量本身。要更改此行为,必须指定
typ='levels'
:我们的预测与我们的训练数据有着相同的水平:
另外,如果我们还希望有置信区间,那么我们可以使用^{} 方法。
字符串参数
也可以给
predict
提供字符串(如果要避免麻烦,请始终使用ISO-8601格式)或datetime
对象:在StatsModels 0.9.0上按预期工作:
相关问题 更多 >
编程相关推荐