Backtesting

Progettare pipeline di forecasting per la produzione

Rami Krispin

Senior Manager, Data Science and Engineering

Backtesting

Backtesting: suddividere i dati in più partizioni (finestre) per addestrare e testare i modelli

Progettare pipeline di forecasting per la produzione

Backtesting

Split di training

Progettare pipeline di forecasting per la produzione

Backtesting

Split di test

Progettare pipeline di forecasting per la produzione

Backtesting

Nell'approccio a finestra espandente la dimensione del campione aumenta a ogni partizione

Progettare pipeline di forecasting per la produzione

Backtesting

Nell'approccio a finestra scorrevole la dimensione del campione per partizione resta costante

Progettare pipeline di forecasting per la produzione

Backtesting

In entrambi gli approcci la dimensione dei set di test resta invariata

Progettare pipeline di forecasting per la produzione

Backtesting

Box plot degli RMSE per cinque modelli: Lasso, LightGBM, Regressione lineare, Ridge e XGBoost

Progettare pipeline di forecasting per la produzione

Impostazioni del backtesting

Modelli

  • XGBoost
  • Light Gradient-Boosting Machine
  • Ridge
  • Lasso
  • Regressione lineare
Progettare pipeline di forecasting per la produzione

Impostazioni del backtesting

Impostazioni delle partizioni

Parametri del backtesting

Progettare pipeline di forecasting per la produzione

Impostazioni del backtesting

Impostazioni delle partizioni

Parametri del backtesting

Progettare pipeline di forecasting per la produzione

Impostazioni del backtesting

Impostazioni delle partizioni

Parametri del backtesting

Progettare pipeline di forecasting per la produzione

Impostazioni del backtesting

Impostazioni delle partizioni

Parametri del backtesting

Progettare pipeline di forecasting per la produzione

Impostazioni del backtesting

Incertezza del modello

  • Intervalli di previsione conformali
    • Gestiscono modelli non parametrici e parametrici
  • Livello al 95%
Progettare pipeline di forecasting per la produzione

Librerie richieste

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


Progettare pipeline di forecasting per la produzione

Librerie richieste

import pandas as pd
import numpy as np
import requests
import json
import os
import datetime
from statistics import mean
Progettare pipeline di forecasting per la produzione

Preparazione dei dati

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'
Progettare pipeline di forecasting per la produzione

Definisci i modelli di previsione

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"])
Progettare pipeline di forecasting per la produzione

Imposta i parametri di backtesting

Impostazioni della finestra

partitions = 10  
step_size = 24  
h = 72

Impostazioni degli intervalli di previsione

n_windows = 5
method = "conformal_distribution"
pi = PredictionIntervals(h=h, n_windows = n_windows , method = method)
levels = [95]
Progettare pipeline di forecasting per la produzione

Addestra i modelli con backtesting

bkt_df = mlf.cross_validation(
        df = ts,
        h = h,
        step_size = step_size,
        n_windows = partitions,
        prediction_intervals = pi, 
        level = levels)
Progettare pipeline di forecasting per la produzione

Addestra i modelli con 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    
Progettare pipeline di forecasting per la produzione

Risultati del backtesting in formato wide

Info sul DataFrame bkt_df, con 19 colonne tra cui ID univoco, ds, y e valori dei modelli

Progettare pipeline di forecasting per la produzione

Aggiungiamo pratica!

Progettare pipeline di forecasting per la produzione

Preparing Video For Download...