# Experiment Configuration for LiveNation Forecasting Proposal

# Dataset Configuration
dataset:
  name: "hotel_bookings"  # primary dataset
  path: "data/raw/hotel_bookings.csv"
  hotel_type: "City Hotel"  # or "Resort Hotel"
  target: "daily_bookings"  # or "daily_revenue", "occupancy"
  date_col: "arrival_date"

# Data Split Configuration
split:
  test_size_days: 56  # 8 weeks for testing
  validation_size_days: 28  # 4 weeks for validation (optional)

# Forecast Horizons to Test
forecast_horizons: [3, 7, 14, 21, 28, 42]  # days ahead

# Model Configurations

models:
  xgboost_baseline:
    enabled: true
    lags: [1, 7, 14]
    rolling_windows: [7, 14]
    minimal_covariates:
      - day_of_week
      - is_weekend
      - is_holiday
    xgb_params:
      n_estimators: 500
      learning_rate: 0.05
      max_depth: 4
      subsample: 0.8
      colsample_bytree: 0.8

  xgboost_full:
    enabled: false  # Set to true to run full feature model
    lags: [1, 3, 7, 14, 21, 28]
    rolling_windows: [7, 14, 28]
    xgb_params:
      n_estimators: 1000
      learning_rate: 0.01
      max_depth: 6
      subsample: 0.8
      colsample_bytree: 0.8

  chronos_zero_shot:
    enabled: true  # FFM without covariates (pure zero-shot)
    model_name: "amazon/chronos-2"  # Full model (was chronos-2-mini)
    device: "cuda"  # or "cpu"
    quantile_levels: [0.1, 0.25, 0.5, 0.75, 0.9]
    num_samples: 20

  chronos_covariates:
    enabled: true
    model_name: "amazon/chronos-2"  # Full model
    device: "cuda"
    expanded_covariates:
      # High-signal calendar features with cyclical encoding (future-known)
      - day_of_week_sin  # Cyclical day of week
      - day_of_week_cos
      - week_of_year_sin  # Cyclical week of year (seasonality)
      - week_of_year_cos
      - day_of_year_sin   # Cyclical day of year (annual patterns)
      - day_of_year_cos
      - month_sin        # Cyclical month
      - month_cos
      - quarter_sin      # Cyclical quarter
      - quarter_cos
      - is_weekend       # Binary indicators
      - is_holiday
    quantile_levels: [0.1, 0.25, 0.5, 0.75, 0.9]
    num_samples: 20

  chronos_icl:
    enabled: false  # Disabled - using standard covariate approach instead
    model_name: "amazon/chronos-2"  # Full model
    device: "cuda"
    icl_window_sizes: [14]  # Number of recent test days to use as ICL context
    covariates:
      - day_of_week
      - is_weekend
      - month
      - is_holiday
    quantile_levels: [0.1, 0.25, 0.5, 0.75, 0.9]
    num_samples: 20

  chronos_bolt_base:
    enabled: true
    model_name: "amazon/chronos-bolt-base"  # 205M params for accuracy (vs. bolt-small 46M)
    device: "cuda"
    quantile_levels: [0.1, 0.25, 0.5, 0.75, 0.9]
    num_samples: 20
    # NOTE: Chronos-Bolt has limited covariate support vs. Chronos-2
    # Primarily optimized for speed (250x faster than original Chronos)

  tabpfn:
    enabled: true
    max_lags: 14  # Number of lag features to create
    rolling_windows: [7, 14, 28]  # Rolling window sizes for statistics
    use_cloud_api: false  # Use local PyTorch (set to true for cloud API fallback)
    covariates:
      # Calendar features (future-known)
      - day_of_week_sin
      - day_of_week_cos
      - week_of_year_sin
      - week_of_year_cos
      - day_of_year_sin
      - day_of_year_cos
      - month_sin
      - month_cos
      - quarter_sin
      - quarter_cos
      - is_weekend
      - is_holiday
    quantile_levels: [0.1, 0.25, 0.5, 0.75, 0.9]
    # NOTE: TabPFN performs zero-shot predictions using pretrained tabular model
    # Converts time series to tabular format using lag features

# Evaluation Configuration
evaluation:
  metrics:
    - RMSE
    - MAE
    - MAPE
    - SMAPE
  probabilistic_metrics: true  # For Chronos models
  statistical_tests: true  # Diebold-Mariano tests
  save_predictions: true  # Save all predictions to CSV
  rolling_origin:
    enabled: true  # Use rolling origin evaluation (more robust)
    step_size: 7  # Days between forecast origins (7 = weekly)

# Output Configuration
output:
  results_dir: "results"
  plots_dir: "results/plots"
  save_models: false  # Whether to save trained models
  verbose: true

# Reproducibility
random_seed: 42

# Optional: Additional Datasets (for validation)
additional_datasets:
  m5:
    enabled: false
    path: "data/raw/m5"
    aggregate_level: "store"

  rossmann:
    enabled: false
    path: "data/raw/rossmann"
    store_ids: null  # null = all stores
