【问题标题】:Meaning of start/end params of statsmodels AutoReg.predictstatsmodels AutoReg.predict 的开始/结束参数的含义
【发布时间】:2021-01-05 09:31:15
【问题描述】:

我意识到这个问题之前已被问过,但解决方案与新的 statsmodel 版本 (0.12) 无关。

我在pandas中有这个数据集,数据框的名称是train

date         value  
2017-01-09  0.331836
2017-01-10  0.330815
2017-01-11  0.329794
2017-01-12  0.328773
2017-01-13  0.327752
...     ...
2020-05-29  0.254081
2020-05-30  0.267420
2020-05-31  0.280758
2020-06-01  0.294097
2020-06-02  0.309384

日期列是索引,我的迟到日期是 2020-06-02。我想获得从我上次日期起 14 天的预测,即 2020 年 6 月 3 日(含)至 2020 年 6 月 16 日(含)期间的预测。我不确定我是否正确理解了 start 和 end 参数。

from statsmodels.tsa.ar_model import AutoReg,ar_select_order
f = 14
mod = ar_select_order(train[y_col].ravel(), maxlag=15)
AutoRegfit = AutoReg(train[y_col].ravel(), trend='c', lags=mod.ar_lags).fit()
AutoRegfit.predict(start=len(train),end=len(train)+f-1,dynamic=False)

>>> array([0.32489822, 0.34010067, 0.35508626, 0.36968769, 0.38416325,
       0.39825263, 0.41186002, 0.42501389, 0.43766567, 0.44985079,
       0.46153405, 0.47270074, 0.48336156, 0.49351065])

看起来不错,但是,这是否意味着第一个预测 (0.32489822) 属于日期 2020-06-03 或 2020-06-02?因为通常在python中,当你指定一个范围时,第一个值被包括在内,最后一个值不包括在内。

在文档中它说:

第一个预测是开始

这是否意味着start 参数应该是len(train)+1 而不是len(train)

【问题讨论】:

    标签: python-3.x time-series statsmodels


    【解决方案1】:

    这里没有设置start=len(train) 是正确的。请注意,在这种情况下,Python 中的索引从 0 开始。因此,您的 pandas 系列中可用的最后一个索引将是 len(train)-1

    验证这一点的简单方法是将.predict() 的预测与手动计算的预测进行比较。因为我无权访问您的数据,所以我将使用documentation 中的太阳黑子示例进行说明。在那里,我们估计以下自回归模型

    import statsmodels.api as sm
    from statsmodels.tsa.ar_model import AutoReg
    data = sm.datasets.sunspots.load_pandas().data['SUNACTIVITY']
    res = AutoReg(data, lags=[1, 11, 12]).fit()
    

    使用.predict() 来预测明年的价值现在收益率

    print(res.predict(start=len(data), end=len(data)))
    >>> 35.964103
    

    与手动计算的预测相同

    print(sum(res.params * [1, *data.iloc[[-1, -11, -12]]]))
    >>> 35.964103
    

    【讨论】:

    • 谢谢,所以这意味着如果我想要 f 预测天数,那么我应该声明:start=len(data), end=len(data)+f-1? -1 是因为 end 是包容性的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多