demand-forecasting / src /config.py
fikri0o0's picture
Upload src/config.py
810e63d verified
"""
Central config β€” paths, constants, feature definitions.
"""
from pathlib import Path
# ── Paths ──────────────────────────────────────────────────────────────────
ROOT = Path(__file__).resolve().parents[1]
DATA_RAW = ROOT / "data" / "raw"
DATA_PROC = ROOT / "data" / "processed"
MODELS_DIR = ROOT / "models"
REPORTS_DIR = ROOT / "reports"
FIGURES_DIR = REPORTS_DIR / "figures"
TRAIN_PARQUET = DATA_PROC / "train.parquet"
TEST_PARQUET = DATA_PROC / "test.parquet"
# ── Dataset ────────────────────────────────────────────────────────────────
# M5 competition (Walmart sales) loaded via datasetsforecast
# 42,840 series Γ— 1941 daily obs. We use a representative subset.
DATASET_NAME = "m5"
# We cap the portfolio subset at N_SERIES series (100 per store Γ— 3 stores).
# Full M5 has 30,490 series β€” too large for a portfolio demo.
N_SERIES = 300 # total series cap (evenly distributed across stores)
TARGET_COL = "y"
DATE_COL = "ds"
ID_COL = "unique_id"
# ── Forecast horizon ───────────────────────────────────────────────────────
HORIZON = 28 # 28-day ahead forecast (same as M5 competition)
FREQ = "D" # Daily
# ── Train / validation split ───────────────────────────────────────────────
# Keep last HORIZON days as validation set (walk-forward style)
VAL_SIZE = HORIZON
# ── MLflow ─────────────────────────────────────────────────────────────────
MLFLOW_EXPERIMENT = "demand-forecasting"
# ── Random seed ────────────────────────────────────────────────────────────
RANDOM_SEED = 42
# ── Model save paths ───────────────────────────────────────────────────────
LGBM_MODEL_PATH = MODELS_DIR / "lgbm_model.pkl"
CHRONOS_MODEL_NAME = "amazon/chronos-t5-small" # ~250MB, good balance speed/accuracy
FORECAST_CACHE = MODELS_DIR / "forecast_cache.parquet"
MODEL_META_PATH = MODELS_DIR / "model_meta.json"