TypeError: Nicht unterstützte Operandentypen für +: 'Timestempe' und 'Nichtetype', wenn exogene Merkmale in SKForecasterPython

Python-Programme
Guest
 TypeError: Nicht unterstützte Operandentypen für +: 'Timestempe' und 'Nichtetype', wenn exogene Merkmale in SKForecaster

Post by Guest »

Ich versuche, ein Prognosemodell zu implementieren, und bin diesem mittleren Leitfaden gefolgt. Ich habe den Code minimal geändert, damit er mit der neuesten Version von skForecast zum Laufen gebracht wird (z. B. Änderung der Prognosenautoreg in PrognoseRecursive). Wenn ich den von ihnen verwendeten Datensatz verwende, funktioniert alles, einschließlich des Endes mit den exogenen Merkmalen. Wenn Sie den Code aus dem Handbuch verwenden, jedoch den Datenrahmen ändern, um meine eigenen Daten zu haben (mit genau demselben Datumsbereich), funktioniert alles noch , außer , wenn ich exogene Merkmale verwende. Dann erhalte ich den folgenden Fehler:

Code: Select all

TypeError: unsupported operand type(s) for +: 'Timestamp' and 'NoneType'
.

Code: Select all

forecaster_exog = ForecasterAutoreg(
regressor = DecisionTreeRegressor(random_state = 123),
lags = 30
)
# Model Fit
forecaster_exog.fit(y = df_exog.loc[train_start:train_end, 'y'],
exog = df_exog.loc[train_start:train_end, ['exog_1', 'exog_2']]
)
# Model Predict
predicted_test_exog = forecaster_exog.predict(steps = len(df.loc[test_start:test_end]),
exog = df_exog.loc[test_start:test_end, ['exog_1', 'exog_2']])

# Visualize
fig, ax = plt.subplots(figsize=(7, 3))
df.loc[test_start:test_end].plot(ax=ax, label = "Test")
predicted_test_exog.plot(ax=ax, label = 'Predicted DT Exog')
ax.legend()
< /code>
Ich habe doppelt überprüft, ob in meinen Daten keine Daten fehlen, sowohl im Training als auch im Testsatz. Dies ist der Fall für die tatsächlichen Daten, den Y -Wert und exog_1 und exog_2. Der Index ist vom Typ pandas.core.indexes.datetimes.datetimeIndex 
.
Kennt jemand eine Funktion der Daten, die möglicherweise das Problem sein könnte? Oder eine Bearbeitung in den Code als Problemumgehung?

Code: Select all

File , line 12
9 # Model Predict
10 # Set the dataset frequency to be (D)aily data
11 df = df.asfreq('D', method = 'bfill')
---> 12 predicted_test_exog = forecaster_exog.predict(steps = len(df.loc[test_start:test_end]) if not df.loc[test_start:test_end].empty else 0,
13                                               exog = df_exog.loc[test_start:test_end, ['exog_1', 'exog_2']])
15 # Visualize
16 fig, ax = plt.subplots(figsize=(7, 3))
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.12/site-packages/skforecast/recursive/_forecaster_recursive.py:1437, in ForecasterRecursive.predict(self, steps, last_window, exog, check_inputs)
1398 def predict(
1399     self,
1400     steps: Union[int, str, pd.Timestamp],
(...)
1403     check_inputs: bool = True
1404 ) -> pd.Series:
1405     """
1406     Predict n steps ahead.  It is an recursive process in which, each prediction,
1407     is used as a predictor for the next step.
(...)
1433
1434     """
1436     last_window_values, exog_values, prediction_index, steps = (
-> 1437         self._create_predict_inputs(
1438             steps=steps,
1439             last_window=last_window,
1440             exog=exog,
1441             check_inputs=check_inputs,
1442         )
1443     )
1445     with warnings.catch_warnings():
1446         warnings.filterwarnings(
1447             "ignore",
1448             message="X does not have valid feature names",
1449             category=UserWarning
1450         )
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.12/site-packages/skforecast/recursive/_forecaster_recursive.py:1149, in ForecasterRecursive._create_predict_inputs(self, steps, last_window, exog, predict_boot, use_in_sample_residuals, use_binned_residuals, check_inputs)
1142     steps = date_to_index_position(
1143                 index        = last_window.index,
1144                 date_input   = steps,
1145                 date_literal = 'steps'
1146             )
1148 if check_inputs:
-> 1149     check_predict_input(
1150         forecaster_name  = type(self).__name__,
1151         steps            = steps,
1152         is_fitted        = self.is_fitted,
1153         exog_in_         = self.exog_in_,
1154         index_type_      = self.index_type_,
1155         index_freq_      = self.index_freq_,
1156         window_size      = self.window_size,
1157         last_window      = last_window,
1158         exog             = exog,
1159         exog_type_in_    = self.exog_type_in_,
1160         exog_names_in_   = self.exog_names_in_,
1161         interval         = None
1162     )
1164     if predict_boot and not use_in_sample_residuals:
1165         if not use_binned_residuals and self.out_sample_residuals_ is None:
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.12/site-packages/skforecast/utils/utils.py:1033, in check_predict_input(forecaster_name, steps, is_fitted, exog_in_, index_type_, index_freq_, window_size, last_window, last_window_exog, exog, exog_type_in_, exog_names_in_, interval, alpha, max_steps, levels, levels_forecaster, series_names_in_, encoding)
1027             raise TypeError(
1028                 (f"Expected frequency of type {index_freq_} for {exog_name}. "
1029                  f"Got {exog_index.freqstr}.")
1030             )
1032 # Check exog starts one step ahead of last_window end.
-> 1033 expected_index = expand_index(last_window.index, 1)[0]
1034 if expected_index != exog_to_check.index[0]:
1035     if forecaster_name in ['ForecasterRecursiveMultiSeries']:
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.12/site-packages/skforecast/utils/utils.py:1585, in expand_index(index, steps)
1581 if isinstance(index, pd.Index):
1583     if isinstance(index, pd.DatetimeIndex):
1584         new_index = pd.date_range(
-> 1585                         start   = index[-1] + index.freq,
1586                         periods = steps,
1587                         freq    = index.freq
1588                     )
1589     elif isinstance(index, pd.RangeIndex):
1590         new_index = pd.RangeIndex(
1591                         start = index[-1] + 1,
1592                         stop  = index[-1] + 1 + steps
1593                     )

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post