def data_with_covariates(): data = get_stallion_data() data["month"] = data.date.dt.month.astype(str) data["log_volume"] = np.log1p(data.volume) data["weight"] = 1 + np.sqrt(data.volume) data["time_idx"] = data["date"].dt.year * 12 + data["date"].dt.month data["time_idx"] -= data["time_idx"].min() # convert special days into strings special_days = [ "easter_day", "good_friday", "new_year", "christmas", "labor_day", "independence_day", "revolution_day_memorial", "regional_games", "fifa_u_17_world_cup", "football_gold_cup", "beer_capital", "music_fest", ] data[special_days] = data[special_days].apply(lambda x: x.map({ 0: "", 1: x.name })).astype("category") return data
def data_with_covariates(): data = get_stallion_data() data["month"] = data.date.dt.month.astype(str) data["log_volume"] = np.log1p(data.volume) data["weight"] = 1 + np.sqrt(data.volume) data["time_idx"] = data["date"].dt.year * 12 + data["date"].dt.month data["time_idx"] -= data["time_idx"].min() # convert special days into strings special_days = [ "easter_day", "good_friday", "new_year", "christmas", "labor_day", "independence_day", "revolution_day_memorial", "regional_games", "fifa_u_17_world_cup", "football_gold_cup", "beer_capital", "music_fest", ] data[special_days] = data[special_days].apply(lambda x: x.map({ 0: "", 1: x.name })).astype("category") data = data.astype(dict(industry_volume=float)) # select data subset data = data[lambda x: x.sku.isin(data.sku.unique()[:2])][ lambda x: x.agency.isin(data.agency.unique()[:2])] # default target data["target"] = data["volume"].clip(1e-3, 1.0) return data
from pandas.core.common import SettingWithCopyWarning import pytorch_lightning as pl from pytorch_lightning.callbacks import EarlyStopping, LearningRateMonitor from pytorch_lightning.loggers import TensorBoardLogger import torch from pytorch_forecasting import GroupNormalizer, TemporalFusionTransformer, TimeSeriesDataSet from pytorch_forecasting.data.examples import get_stallion_data from pytorch_forecasting.metrics import MAE, RMSE, SMAPE, PoissonLoss, QuantileLoss from pytorch_forecasting.models.temporal_fusion_transformer.tuning import optimize_hyperparameters from pytorch_forecasting.utils import profile warnings.simplefilter("error", category=SettingWithCopyWarning) data = get_stallion_data() data["month"] = data.date.dt.month.astype("str").astype("category") data["log_volume"] = np.log(data.volume + 1e-8) data["time_idx"] = data["date"].dt.year * 12 + data["date"].dt.month data["time_idx"] -= data["time_idx"].min() data["avg_volume_by_sku"] = data.groupby(["time_idx", "sku"], observed=True).volume.transform("mean") data["avg_volume_by_agency"] = data.groupby(["time_idx", "agency"], observed=True).volume.transform("mean") # data = data[lambda x: (x.sku == data.iloc[0]["sku"]) & (x.agency == data.iloc[0]["agency"])] special_days = [ "easter_day", "good_friday", "new_year", "christmas", "labor_day",