簡體   English   中英

如何正確設置statsmodels.tsa.ar_model.AR.predict函數的開始/結束參數

[英]How to properly set start/end params of statsmodels.tsa.ar_model.AR.predict function

我有一個項目成本的數據框,來自不規則間隔的時間序列,我想嘗試應用statsmodel AR模型

這是數據框中數據的示例:

               cost
date               
2015-07-16    35.98
2015-08-11    25.00
2015-08-11    43.94
2015-08-13    26.25
2015-08-18    15.38
2015-08-24    77.72
2015-09-09    40.00
2015-09-09    20.00
2015-09-09    65.00
2015-09-23    70.50
2015-09-29    59.00
2015-11-03    19.25
2015-11-04    19.97
2015-11-10    26.25
2015-11-12    19.97
2015-11-12    23.97
2015-11-12    21.88
2015-11-23    23.50
2015-11-23    33.75
2015-11-23    22.70
2015-11-23    33.75
2015-11-24    27.95
2015-11-24    27.95
2015-11-24    27.95
...
2017-03-31    21.93
2017-04-06    22.45
2017-04-06    26.85
2017-04-12    60.40
2017-04-12    37.00
2017-04-12    20.00
2017-04-12    66.00
2017-04-12    60.00
2017-04-13    41.95
2017-04-13    25.97
2017-04-13    29.48
2017-04-19    41.00
2017-04-19    58.00
2017-04-19    78.00
2017-04-19    12.00
2017-04-24    51.05
2017-04-26    21.88
2017-04-26    50.05
2017-04-28    21.00
2017-04-28    30.00

我很難理解如何在predict函數中使用startend

根據文件

start:int,str或datetime開始預測的零索引觀察數,即第一個>預測開始。 也可以是要解析的日期字符串或日期時間類型。

end:int,str或datetime用於結束預測的零索引觀察數,即第一個預測開始。 也可以是要解析的日期字符串或日期時間類型。

我創建了一個每日空時間為空的數據框,將不規則間隔的時間序列數據添加到其中,然后嘗試應用模型。

data = pd.read_csv('data.csv', index_col=1, parse_dates=True)
df = pd.DataFrame(index=pd.date_range(start=datetime(2015, 1, 1), end=datetime(2017, 12, 31), freq='d'))
df = df.join(data)
df.cost.interpolate(inplace=True)
ar_model = sm.tsa.AR(df, missing='drop', freq='D')
ar_res = ar_model.fit(maxlag=9, method='mle', disp=-1)
pred = ar_res.predict(start='2016', end='2016')

predict函數導致pandas.tslib.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 605-12-31 00:00:00錯誤pandas.tslib.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 605-12-31 00:00:00

如果我嘗試使用更具體的日期,我會得到相同類型的錯誤:

pred = ar_res.predict(start='2016-01-01', end='2016-06-01')    

如果我嘗試使用整數,我會得到一個不同的錯誤:

pred = ar_res.predict(start=0, end=len(data))
Wrong number of items passed 202, placement implies 197

如果我實際上使用了一個datetime ,我會收到一條錯誤,它no rule for interpreting end讀取no rule for interpreting end

我在這里如此努力地撞牆,我想我必須有一些我想念的東西。

最后,我想使用該模型進行樣本外預測(例如下一季度的預測)。

如果您傳遞datetime (而不是date ),則此方法有效:

from datetime import datetime

...
pred = ar_res.predict(start=datetime(2015, 1, 1), end=datetime(2017,12,31))

In [21]: pred.head(2)  # my dummy numbers from data
Out[21]:
2015-01-01   35
2015-01-02   23
Freq: D, dtype: float64

In [22]: pred.tail(2)
Out[22]:
2017-12-30   44
2017-12-31   44
Freq: D, dtype: float64

所以我創建了一個每日索引來考慮等間隔時間序列要求,但它仍然是非唯一的(由@ user333700評論)。

我添加了一個groupby函數來將重復日期加在一起,然后可以使用datetime對象運行predict函數(由@andy-hayden回答)。

df = df.groupby(pd.TimeGrouper(freq='D')).sum()
...
ar_res.predict(start=min(df.index), end=datetime(2018,12,31))

通過predict函數提供結果,我現在能夠分析結果並調整參數以獲得有用的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM