Zurück zu den Modellen
Forecaster

DoubleMLForecaster

Double Machine Learning forecaster for causal time-series forecasting.

Implements an adaptation of Double Machine Learning (DML) framework [1] for time-series, enabling deconfounded estimation of causal effects.

The forecaster uses a three-step residualization process to separate causal effects from confounding influences:

Fit procedure

  1. Split X into exposure variables X_exposure and confounder variables X_confounder. X_exposure = X[exposure_vars], X_confounder = X.drop(columns=exposure_vars).

  2. Fit the outcome forecaster to obtain residuals outcome_fcst.fit(y=y, X=X_confounder, fh=y.index), y_pred = outcome_fcst.predict(X=X_confounder), y_res = y - y_pred.

  3. Fit the treatment forecaster to obtain exposure residuals treatment_fcst.fit(y=X_exposure, X=X_confounder, fh=y.index), X_exposure_pred = treatment_fcst.predict(X=X_confounder), X_exposure_res = X_exposure - X_exposure_pred.

  4. Fit the residual forecaster to learn deconfounded causal relationship. residual_fcst.fit(y=y_res, X=X_exposure_res, fh=fh).

  5. Refit the outcome and treatment forecasters for use during prediction. outcome_fcst.fit(y=y, X=X_confounder, fh=fh), treatment_fcst.fit(y=X_exposure, X=X_confounder, fh=fh).

Predict procedure

  1. Split new X into exposure variables X_exposure and confounder variables X_confounder. X_exposure = X[exposure_vars], X_confounder = X.drop(columns=exposure_vars).

  2. Compute the base (confounder-driven) forecast: y_pred_base = outcome_fcst.predict(X_confounder).

  3. Compute the residualized exposures: X_exposure_pred = treatment_fcst.predict(X_confounder). X_exposure_res = X_exposure - X_exposure_pred.

  4. Compute the causal (residual) forecast: y_pred_res = residual_fcst.predict(X=X_exposure_res).

  5. Combine both components to obtain the final prediction: y_pred = y_pred_base + y_pred_res.

Schnellstart

python
from sktime.forecasting.causal import DoubleMLForecaster

estimator = DoubleMLForecaster(outcome_fcst, treatment_fcst, residual_fcst=None, exposure_vars=None, starting_window=0.1)

Parameter(5)

outcome_fcstsktime forecaster
Base forecaster modeling the outcome variable conditional on confounders.
treatment_fcstsktime forecaster
Forecaster modeling the exposure variables conditional on confounders.
residual_fcstsktime forecaster, optional (default=None)

Forecaster modeling the residual (deconfounded) relationship between outcome and treatment. If not provided, a default forecaster is created using make_reduction(LinearRegression(), strategy="recursive"), a recursive reduction forecaster built from a linear regression model, providing a simple and interpretable baseline.

exposure_varslist of str, optional (default=None)

Names of columns in X representing exposure (treatment) variables. The remaining columns are treated as confounders. If None, all features in X are treated as confounders and used only with the outcome forecaster. In this case, the treatment forecaster is not used, and None exposure residuals are passed to the residual forecaster, which therefore operates only on y.

starting_windowfloat, int or None, optional (default=0.1)
If float, must be between 0.0 and 1.0, and is interpreted as the proportion of the starting dataset to ignore when doing in-sample predictions. Proportions are rounded to the next higher integer count of samples (ceil). If int, is interpreted as total number of samples to ignore.

Beispiele

>>> from sktime.datasets import load_longley
>>> from sktime.forecasting.causal import DoubleMLForecaster
>>> from sktime.forecasting.naive import NaiveForecaster
>>> from sktime.split import temporal_train_test_split
>>> 
>>> y, X = load_longley ()
>>> y_train, y_test, X_train, X_test = temporal_train_test_split (y, X, test_size = 4)
>>> 
>>> # Assume 'GNP' is our exposure variable of interest
>>> exposure_vars = ['GNP' ]
>>> 
>>> # Set up forecasters for nuisance functions
>>> outcome_fcst = NaiveForecaster ()
>>> treatment_fcst = NaiveForecaster ()
>>> 
>>> # Create DoubleMLForecaster
>>> dml_forecaster = DoubleMLForecaster (
... outcome_fcst = outcome_fcst,
... treatment_fcst = treatment_fcst,
... exposure_vars = exposure_vars
... )
>>> 
>>> # Fit and predict
>>> fh = [1, 2, 3 ]
>>> dml_forecaster. fit (y_train, X = X_train, fh = fh) DoubleMLForecaster(exposure_vars=['GNP'], outcome_fcst=NaiveForecaster(), residual_fcst=RecursiveTabularRegressionForecaster(estimator=LinearRegression(), window_length=3), treatment_fcst=NaiveForecaster())
>>> y_pred = dml_forecaster. predict (X = X_test)

Referenzen

[1]

Chernozhukov, V., Chetverikov, D., Demirer, M., Duflo, E., Hansen, C., Newey, W., & Robins, J. (2018). Double/debiased machine learning for treatment and structural parameters.