Backtesting

Forecasting-pijplijnen ontwerpen voor productie

Rami Krispin

Senior Manager, Data Science and Engineering

Backtesting

Backtesting: data splitsen in meerdere partities (windows) voor training en testen van modellen

Forecasting-pijplijnen ontwerpen voor productie

Backtesting

De trainingssplits

Forecasting-pijplijnen ontwerpen voor productie

Backtesting

De testsplits

Forecasting-pijplijnen ontwerpen voor productie

Backtesting

Bij de expanding window-aanpak groeit de steekproef per partitie

Forecasting-pijplijnen ontwerpen voor productie

Backtesting

Bij de sliding window-aanpak blijft de steekproef per partitie gelijk

Forecasting-pijplijnen ontwerpen voor productie

Backtesting

In beide aanpakken blijft de grootte van de testsets gelijk

Forecasting-pijplijnen ontwerpen voor productie

Backtesting

Boxplot van RMSE-scores voor vijf modellen: Lasso, LightGBM, Lineaire regressie, Ridge en XGBoost

Forecasting-pijplijnen ontwerpen voor productie

Backtesting-instellingen

Modellen

  • XGBoost
  • Light Gradient Boosting Machine
  • Ridge
  • Lasso
  • Lineaire regressie
Forecasting-pijplijnen ontwerpen voor productie

Backtesting-instellingen

Partitie-instellingen

Backtesting-parameters

Forecasting-pijplijnen ontwerpen voor productie

Backtesting-instellingen

Partitie-instellingen

Backtesting-parameters

Forecasting-pijplijnen ontwerpen voor productie

Backtesting-instellingen

Partitie-instellingen

Backtesting-parameters

Forecasting-pijplijnen ontwerpen voor productie

Backtesting-instellingen

Partitie-instellingen

Backtesting-parameters

Forecasting-pijplijnen ontwerpen voor productie

Backtesting-instellingen

Modelonzekerheid

  • Conformele voorspellingsintervallen
    • Werkt met niet-parametrische en parametrische modellen
  • Significantieniveau 95%
Forecasting-pijplijnen ontwerpen voor productie

Benodigde libraries

from mlforecast import MLForecast
from mlforecast.target_transforms import Differences
from mlforecast.utils import PredictionIntervals
from window_ops.expanding import expanding_mean
from lightgbm import LGBMRegressor
from xgboost import XGBRegressor
from sklearn.linear_model import Lasso, LinearRegression, Ridge
from sklearn.neural_network import MLPRegressor
from sklearn.ensemble import RandomForestRegressor
from utilsforecast.plotting import plot_series


Forecasting-pijplijnen ontwerpen voor productie

Benodigde libraries

import pandas as pd
import numpy as np
import requests
import json
import os
import datetime
from statistics import mean
Forecasting-pijplijnen ontwerpen voor productie

Datavoorbereiding

ts = pd.read_csv("data/data.csv")
ts["ds"] = pd.to_datetime(ts["ds"])
ts = ts.sort_values("ds")
ts = ts[["unique_id", "ds", "y"]]

end = ts["ds"].max() start = end - datetime.timedelta(hours = 24 * 31 * 25) ts = ts[ts["ds"] >= start]
os.environ['NIXTLA_ID_AS_COL'] = '1'
Forecasting-pijplijnen ontwerpen voor productie

Voorspelmodellen definiƫren

ml_models = {
    "lightGBM": LGBMRegressor(n_estimators=500, verbosity=-1),
    "xgboost": XGBRegressor(),
    "linear_regression": LinearRegression(),
    "lasso": Lasso(),
    "ridge": Ridge()
}

mlf = MLForecast( models= ml_models, freq='h', lags=list(range(1, 24)), date_features=["month", "day", "dayofweek", "week", "hour"])
Forecasting-pijplijnen ontwerpen voor productie

Backtesting-parameters instellen

Window-instellingen

partitions = 10  
step_size = 24  
h = 72

Instellingen voorspellingsintervallen

n_windows = 5
method = "conformal_distribution"
pi = PredictionIntervals(h=h, n_windows = n_windows , method = method)
levels = [95]
Forecasting-pijplijnen ontwerpen voor productie

Modellen trainen met backtesting

bkt_df = mlf.cross_validation(
        df = ts,
        h = h,
        step_size = step_size,
        n_windows = partitions,
        prediction_intervals = pi, 
        level = levels)
Forecasting-pijplijnen ontwerpen voor productie

Modellen trainen met backtesting

print(bkt_df.head())
     unique_id    ds                     cutoff                 y            lightGBM         
0    1            2024-04-22 00:00:00    2024-04-21 23:00:00    421082.60    421089.155837    
1    1            2024-04-22 01:00:00    2024-04-21 23:00:00    429728.30    425700.453391    
2    1            2024-04-22 02:00:00    2024-04-21 23:00:00    430690.96    424382.613668    
3    1            2024-04-22 03:00:00    2024-04-21 23:00:00    420094.58    409967.877157    
4    1            2024-04-22 04:00:00    2024-04-21 23:00:00    403292.36    393175.446116    
Forecasting-pijplijnen ontwerpen voor productie

Backtestingresultaten in wide-formaat

Informatie over de DataFrame bkt_df met 19 kolommen, incl. unique_id, ds, y en modelwaarden

Forecasting-pijplijnen ontwerpen voor productie

Laten we oefenen!

Forecasting-pijplijnen ontwerpen voor productie

Preparing Video For Download...