Geriye dönük test (Backtesting)

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Rami Krispin

Senior Manager, Data Science and Engineering

Geriye dönük test (Backtesting)

Backtesting - veriyi modelleri eğitmek ve test etmek için birkaç bölüme (pencereye) ayırma

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Geriye dönük test (Backtesting)

Eğitim bölümleri

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Geriye dönük test (Backtesting)

Test bölümleri

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Geriye dönük test (Backtesting)

Genişleyen pencere yaklaşımında her bölüm için örneklem büyüklüğü artar

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Geriye dönük test (Backtesting)

Kayan pencere yaklaşımı her bölümün örneklem büyüklüğünü sabit tutar

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Geriye dönük test (Backtesting)

Her iki yaklaşımda da test setlerinin boyutu değişmez

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Geriye dönük test (Backtesting)

Beş model için RMSE kutu grafiği - Lasso, LightGBM, Doğrusal Regresyon, Ridge ve XGBoost

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting ayarları

Modeller

  • XGBoost
  • Light Gradient-Boosting Machine
  • Ridge
  • Lasso
  • Doğrusal Regresyon
Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting ayarları

Bölümleme ayarları

Backtesting parametreleri

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting ayarları

Bölümleme ayarları

Backtesting parametreleri

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting ayarları

Bölümleme ayarları

Backtesting parametreleri

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting ayarları

Bölümleme ayarları

Backtesting parametreleri

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting ayarları

Model belirsizliği

  • Konformal tahmin aralıkları
    • Parametrik ve parametrik olmayan modelleri kaldırabilir
  • %95 önem düzeyi
Üretim için Tahmin (Forecasting) Hatları Tasarlama

Gerekli kütüphaneler

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


Üretim için Tahmin (Forecasting) Hatları Tasarlama

Gerekli kütüphaneler

import pandas as pd
import numpy as np
import requests
import json
import os
import datetime
from statistics import mean
Üretim için Tahmin (Forecasting) Hatları Tasarlama

Veri hazırlama

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'
Üretim için Tahmin (Forecasting) Hatları Tasarlama

Tahmin modellerini tanımlama

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"])
Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting parametrelerini ayarlama

Pencere Ayarları

partitions = 10  
step_size = 24  
h = 72

Tahmin Aralıkları Ayarları

n_windows = 5
method = "conformal_distribution"
pi = PredictionIntervals(h=h, n_windows = n_windows , method = method)
levels = [95]
Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting ile modelleri eğitme

bkt_df = mlf.cross_validation(
        df = ts,
        h = h,
        step_size = step_size,
        n_windows = partitions,
        prediction_intervals = pi, 
        level = levels)
Üretim için Tahmin (Forecasting) Hatları Tasarlama

Backtesting ile modelleri eğitme

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    
Üretim için Tahmin (Forecasting) Hatları Tasarlama

Geniş formatta backtesting sonuçları

bkt_df DataFrame’i hakkında bilgiler: unique ID, ds, y ve model değerleri dâhil 19 sütun

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Haydi pratik yapalım!

Üretim için Tahmin (Forecasting) Hatları Tasarlama

Preparing Video For Download...