Skforecast migration guide¶
This document contains a set of instructions on how to update your code to work with the latest version of Skforecast.
| skforecast < 0.19 | skforecast ≥ 0.19 |
forecaster = ForecasterRecursive(
regressor = LGBMRegressor(),
lags = 15
)
print(forecaster.regressor)
|
forecaster = ForecasterRecursive(
estimator = LGBMRegressor(),
lags = 15
)
print(forecaster.estimator)
|
Changes in the import of the library¶
Skforecast Sarimax-related modules have been moved to a new submodule named stats. Also the ForecasterSarimax class has been renamed to ForecasterStats.
The new import of the Sarimax-related modules is as follows:
| skforecast < 0.19 | skforecast ≥ 0.19 |
from skforecast.sarimax import Sarimax
from skforecast.recursive import ForecasterSarimax
from model_selection import backtesting_sarimax
from model_selection import grid_search_sarimax
from model_selection import random_search_sarimax
|
from skforecast.stats import Sarimax
from skforecast.recursive import ForecasterStats
from model_selection import backtesting_stats
from model_selection import grid_search_stats
from model_selection import random_search_stats
|
| skforecast < 0.14 | skforecast ≥ 0.14 |
from skforecast.ForecasterAutoreg import ForecasterAutoreg
from skforecast.ForecasterAutoregMultiSeries import ForecasterAutoregMultiSeries
|
from skforecast.recursive import ForecasterRecursive
from skforecast.recursive import ForecasterRecursiveMultiSeries
|
from skforecast.ForecasterAutoregCustom import ForecasterAutoregCustom
from skforecast.ForecasterAutoregMultiSeriesCustom import ForecasterAutoregMultiSeriesCustom
|
Not exist any more, use |
from skforecast.ForecasterAutoregDirect import ForecasterAutoregDirect
from skforecast.ForecasterAutoregMultiVariate import ForecasterAutoregMultiVariate
|
from skforecast.direct import ForecasterDirect
from skforecast.direct import ForecasterDirectMultiVariate
|
from model_selection import backtesting_forecaster
|
from model_selection import TimeSeriesFold
from model_selection import backtesting_forecaster
|
from model_selection_multiseries import backtesting_forecaster_multiseries
from model_selection_multiseries import grid_search_forecaster_multiseries
from model_selection_multiseries import random_search_forecaster_multiseries
from model_selection_multiseries import bayesian_search_forecaster_multiseries
|
from model_selection import backtesting_forecaster_multiseries
from model_selection import grid_search_forecaster_multiseries
from model_selection import random_search_forecaster_multiseries
from model_selection import bayesian_search_forecaster_multiseries
|
from model_selection import select_features
from model_selection_multiseries import select_features_multiseries
|
from feature_selection import select_features
from feature_selection import select_features_multiseries
|
from skforecast.Sarimax import Sarimax
from model_selection_sarimax import backtesting_sarimax
from model_selection_sarimax import grid_search_sarimax
from model_selection_sarimax import random_search_sarimax
|
from skforecast.sarimax import Sarimax
from model_selection import backtesting_sarimax
from model_selection import grid_search_sarimax
from model_selection import random_search_sarimax
|
Custom features (window features)¶
Forecasters ForecasterAutoregCustom and ForecasterAutoregMultiSeriesCustom have been removed. Now, you can use ForecasterRecursive and ForecasterDirect and include custom features using the window_features parameter. To learn more about how to include custom features, check the documentation.
| skforecast < 0.14 | skforecast ≥ 0.14 |
from skforecast.ForecasterAutoregCustom import ForecasterAutoregCustom
import numpy as np
def create_predictors(y):
"""
Create first 10 lags of a time series.
Calculate moving average with window 20.
Calculate the moving standard deviation with window 20.
Calculate moving minimum and maximum with window 20.
"""
lags = y[-1:-11:-1]
mean = np.mean(y[-20:])
std = np.std(y[-20:])
min_val = np.min(y[-20:])
max_val = np.max(y[-20:])
predictors = np.hstack([lags, mean, std, min_val, max_val])
return predictors
feature_names = [f"lag {i}" for i in range(1, 11)] + [
"moving_avg_20",
"moving_std_20",
"moving_min_20",
"moving_max_20",
]
forecaster = ForecasterAutoregCustom(
estimator = LGBMRegressor(random_state=123, verbose=-1),
fun_predictors = create_predictors,
name_predictors = feature_names,
window_size = 20
)
|
from skforecast.recursive import ForecasterRecursive
from skforecast.preprocessing import RollingFeatures
rolling = RollingFeatures(
ststs = ['mean', 'std', 'min', 'max'],
window_sizes = [20, 20, 20, 20]
)
forecaster = ForecasterRecursive(
estimator = LGBMRegressor(random_state=123, verbose=-1),
lags = 10,
window_features = rolling
)
|
Changes the backtesting¶
The arguments initial_train_size, window_size, differentiation, refit, fixed_train_size, gap, skip_folds, allow_incomplete_fold, return_all_indexes, and verbose are no longer defined in the backtesting_forecaster function. Instead, an instance of TimeSeriesFolds should be created, and these arguments should be specified in the class constructor. This change not only allows the same folds to be reused across different methods, but also provides the ability to extract fold indexes.
| skforecast < 0.14 | skforecast ≥ 0.14 |
from skforecast.model_selection import (
backtesting_forecaster
)
backtesting_forecaster(
forecaster = forecaster,
y = y,
steps = 10,
initial_train_size = 100,
metric = 'mean_absolute_error',
fixed_train_size = True,
gap = 0,
skip_folds = None,
allow_incomplete_fold = True,
refit = False,
n_jobs = 'auto',
verbose = False,
show_progress = True
)
|
from skforecast.model_selection import (
TimeSeriesFold,
backtesting_forecaster
)
cv = TimeSeriesFold(
steps = 10,
initial_train_size = 100,
fixed_train_size = True,
gap = 0,
skip_folds = None,
allow_incomplete_fold = True,
refit = False
)
backtesting_forecaster(
forecaster = forecaster,
y = y,
cv = cv,
metric = 'mean_absolute_error',
n_jobs = 'auto',
verbose = False,
show_progress = True
)
|
Changes in hyperparameters search¶
The arguments initial_train_size, window_size, differentiation, refit, fixed_train_size, gap, skip_folds, allow_incomplete_fold, return_all_indexes, and verbose are no longer defined in the grid_search_forecaster, random_search_forecaster and bayesian_search_forecaster functions. Instead, an instance of TimeSeriesFolds or OneStepAheadFold should be created, and these arguments should be specified in the class constructor.
| skforecast < 0.14 | skforecast ≥ 0.14 |
from skforecast.model_selection import (
grid_search_forecaster
)
grid_search_forecaster(
forecaster = forecaster,
y = data,
param_grid = param_grid,
lags_grid = lags_grid,
steps = 10,
refit = False,
metric = 'mean_squared_error',
initial_train_size = 100,
fixed_train_size = False,
allow_incomplete_fold = True,
return_best = True,
n_jobs = 'auto',
verbose = False,
show_progress = True
)
|
from skforecast.model_selection import (
grid_search_forecaster,
TimeSeriesFold
)
cv = TimeSeriesFold(
steps = 10,
initial_train_size = 100,
fixed_train_size = False,
gap = 0,
skip_folds = None,
allow_incomplete_fold = True,
refit = False
)
grid_search_forecaster(
forecaster = forecaster,
y = data,
param_grid = param_grid,
lags_grid = lags_grid,
cv = cv,
metric = 'mean_squared_error',
return_best = True,
n_jobs = 'auto',
verbose = False,
show_progress = True
)
|
Overall structure of the repository¶
| skforecast < 0.14 | skforecast ≥ 0.14 |
|-- skforecast
|-- ForecasterAutoreg
|-- ForecasterAutoreg.py -> ForecasterAutoreg
|-- ForecasterAutoregCustom.py
|-- ForecasterAutoregCustom.py -> ForecasterAutoregCustom
|-- ForecasterAutoregDirect
|-- ForecasterAutoregDirect.py -> ForecasterAutoregDirect
|-- ForecasterAutoregMultiSeries
|-- ForecasterAutoregMultiSeries.py -> ForecasterAutoregMultiSeries
|-- ForecasterAutoregMultiVariate
|-- ForecasterAutoregMultiVariate.py -> ForecasterAutoregMultiVariate
|-- ForecasterRnn
|-- ForecasterRnn.py -> ForecasterRnn
|-- ForecsaterBase
|-- ForecasterBase.py -> ForecasterBase
|-- ForecasterSarimax
|-- ForecasterSarimax.py -> ForecasterSarimax
|-- Sarimax
|-- Sarimax.py -> Sarimax
|
|-- skforecast
|-- recursive
|-- _forecaster_recursive.py -> ForecasterRecursive
|-- _forecaster_recursive_multiseries.py -> ForecasterRecursiveMultiSeries
|-- _forecaster_sarimax.py -> ForecasterSarimax
|-- _forecaster_equivalent_date.py -> ForecasterEquivalentDate
|-- direct
|-- _forecaster_direct.py -> ForecasterDirect
|-- _forecaster_direct_multivariate.py -> ForecasterDirectMultiVariate
|-- deep_learning
|-- _forecaster_rnn.py -> ForecasterRnn
|-- base
|-- _forecaster_base.py -> ForecasterBase
|-- sarimax
|-- _sarimax.py -> Sarimax
|