python Statsmodels SARIMAX KeyError: 'The `start` argument could not be matched to a location related to the index of the data.'

Viewed 3955

My first stack overflow post, I am studying part time for a data science qualification and Im stuck with Statsmodels SARIMAX predicting

my time series data looks as follows

ts_log.head()
Calendar Week
2016-02-22    8.168486
2016-02-29    8.252707
2016-03-07    8.324821
2016-03-14    8.371474
2016-03-21    8.766238
Name: Sales Quantity, dtype: float64
ts_log.tail()
Calendar Week
2020-07-20    8.326759
2020-07-27    8.273847
2020-08-03    8.286521
2020-08-10    8.222822
2020-08-17    8.011687
Name: Sales Quantity, dtype: float64

I run the following

train = ts_log[:'2019-07-01'].dropna()
test = ts_log['2020-08-24':].dropna()
model = SARIMAX(train, order=(2,1,2), seasonal_order=(0,1,0,52) 
              ,enforce_stationarity=False, enforce_invertibility=False)
results = model.fit()

summary shows

results.summary()
Dep. Variable:  Sales Quantity  No. Observations:   175
Model:  SARIMAX(2, 1, 2)x(0, 1, 0, 52)  Log Likelihood  16.441
Date:   Mon, 21 Sep 2020    AIC -22.883
Time:   22:32:28    BIC -8.987
Sample: 0   HQIC    -17.240
- 175       
Covariance Type:    opg     
coef    std err z   P>|z|   [0.025  0.975]
ar.L1   1.3171  0.288   4.578   0.000   0.753   1.881
ar.L2   -0.5158 0.252   -2.045  0.041   -1.010  -0.022
ma.L1   -1.5829 0.519   -3.048  0.002   -2.601  -0.565
ma.L2   0.5093  0.502   1.016   0.310   -0.474  1.492
sigma2  0.0345  0.011   3.195   0.001   0.013   0.056
Ljung-Box (Q):  30.08   Jarque-Bera (JB):   2.55
Prob(Q):    0.87    Prob(JB):   0.28
Heteroskedasticity (H): 0.54    Skew:   -0.02
Prob(H) (two-sided):    0.05    Kurtosis:   3.72

However, when I try to predict I get a key error suggesting my start date is incorrect but I cant see what is wrong with it

pred = results.predict(start='2019-06-10',end='2020-08-17')[1:]

KeyError: 'The `start` argument could not be matched to a location related to the index of the data.'

I can see both of these dates are valid:

ts_log['2019-06-10']
8.95686647085414

ts_log['2020-08-17']
8.011686729127847

If, instead I run with numbers, it works fine

pred = results.predict(start=175,end=200)[1:]

Id like to use date so I can use it in my time series graph with other dates

1 Answers

EmmaT,

you seem to have same date for start and end.

start='2019-06-10',end='2019-06-10'

Please, double-check if this is what you want. Also check that '2019-06-10' is present in the dataset.

Related