Nixtla / hierarchicalforecast

Probabilistic Hierarchical forecasting 👑 with statistical and econometric methods.
https://nixtlaverse.nixtla.io/hierarchicalforecast
Apache License 2.0
592 stars 76 forks source link

TypeError: can only concatenate str (not "pandas._libs.tslibs.offsets.MonthEnd") to str #191

Closed pankaj-kvhld closed 1 year ago

pankaj-kvhld commented 1 year ago

Getting the above error in running the example from the Readme.MD it self:

# compute base forecast no coherent
from statsforecast.core import StatsForecast
from statsforecast.models import AutoARIMA, Naive

#obtain hierarchical reconciliation methods and evaluation
from hierarchicalforecast.core import HierarchicalReconciliation
from hierarchicalforecast.methods import BottomUp, TopDown, MiddleOut

#obtain hierarchical datasets
from datasetsforecast.hierarchical import HierarchicalData

# Load TourismSmall dataset
Y_df, S, tags = HierarchicalData.load('./data', 'TourismSmall')
Y_df['ds'] = pd.to_datetime(Y_df['ds'])

# Compute base level predictions 
sf = StatsForecast(df=Y_df, 
                   models=[AutoARIMA(season_length=12), Naive()], 
                   freq='M', n_jobs=-1)

When calling forecast, I get the error.

forecasts_df = sf.forecast(h=12)

TypeError                                 Traceback (most recent call last)
Cell In [8], line 1
----> 1 forecasts_df = sf.forecast(h=12)

File ~/opt/anaconda3/envs/fcst/lib/python3.9/site-packages/statsforecast/core.py:514, in StatsForecast.forecast(self, h, df, X_df, level, fitted, sort_df)
    512 fcsts = res_fcsts['forecasts']
    513 cols = res_fcsts['cols']
--> 514 fcsts_df = self._make_future_df(h=h)
    515 fcsts_df[cols] = fcsts
    516 return fcsts_df

File ~/opt/anaconda3/envs/fcst/lib/python3.9/site-packages/statsforecast/core.py:388, in StatsForecast._make_future_df(self, h)
    386     last_date_f = lambda x: pd.date_range(x + self.freq, periods=h, freq=self.freq)
    387 if len(np.unique(self.last_dates)) == 1:
--> 388     dates = np.tile(last_date_f(self.last_dates[0]), len(self.ga))
    389 else:
    390     dates = np.hstack([
    391         last_date_f(last_date)
    392         for last_date in self.last_dates            
    393     ])

File ~/opt/anaconda3/envs/fcst/lib/python3.9/site-packages/statsforecast/core.py:386, in StatsForecast._make_future_df.<locals>.<lambda>(x)
    384     last_date_f = lambda x: np.arange(x + 1, x + 1 + h, dtype=self.last_dates.dtype)
    385 else:
--> 386     last_date_f = lambda x: pd.date_range(x + self.freq, periods=h, freq=self.freq)
    387 if len(np.unique(self.last_dates)) == 1:
    388     dates = np.tile(last_date_f(self.last_dates[0]), len(self.ga))

TypeError: can only concatenate str (not "pandas._libs.tslibs.offsets.MonthEnd") to str
rafaepires commented 1 year ago

I have same problem Managed to solve?

AzulGarza commented 1 year ago

hey @pankaj-kvhld and @rafaepires! I think the problem is related to the version of statsforecast you're using. Could you try updating the version using pip install -U statsforecast? I tested the code using colab and it works as expected. Here you can reproduce it.

philip-ndikum commented 1 year ago

Same issue any updates here?

kdgutier commented 1 year ago

Hey @anonymouspapi and @rafaepires,

This error is related to the dtype of the 'ds' column. Can you try converting it with pd.to_datetime?

Alternatively, updating the StatsForecast pip install -U statsforecast may help

jmoralez commented 1 year ago

Closing due to lack of response and because it's a datasetsforecast/statsforecast issue.