f1-pit-predictor / src /config.py
T0MYYY's picture
Deploy full-stack FastAPI + dashboard with CSV batch inference
bb21b5d verified
"""Shared configuration for the F1 pit-stop training pipeline."""
from __future__ import annotations
from pathlib import Path
RANDOM_SEED = 42
PROJECT_ROOT = Path(__file__).resolve().parent.parent
DATA_DIR = PROJECT_ROOT / "data"
RAW_TRAIN_CSV = DATA_DIR / "train.csv"
INTERIM_DIR = DATA_DIR / "interim"
RAW_PARQUET = INTERIM_DIR / "raw.parquet"
PROCESSED_DIR = DATA_DIR / "processed"
PROCESSED_TRAIN = PROCESSED_DIR / "train.parquet"
PROCESSED_TEST = PROCESSED_DIR / "test.parquet"
MLFLOW_DIR = PROJECT_ROOT / "mlflow"
MLFLOW_TRACKING_URI = f"sqlite:///{MLFLOW_DIR / 'mlflow.db'}"
MLFLOW_ARTIFACT_ROOT = MLFLOW_DIR / "artifacts"
EXPERIMENT_NAME = "pit-stop-classifier"
REGISTERED_MODEL_NAME = "f1-pit-stop-classifier"
MODELS_DIR = PROJECT_ROOT / "models"
CHAMPION_EXPORT_DIR = MODELS_DIR / "champion"
TARGET_COL = "PitNextLap"
TRAIN_YEARS = (2022, 2023, 2024)
TEST_YEARS = (2025,)
RAW_COLUMNS = [
"id", "Driver", "Compound", "Race", "Year", "PitStop", "LapNumber",
"Stint", "TyreLife", "Position", "LapTime (s)", "LapTime_Delta",
"Cumulative_Degradation", "RaceProgress", "Position_Change", "PitNextLap",
]
ID_COLUMNS = ["id", "Driver", "Race", "Year"]
CATEGORICAL_COLUMNS = ["Compound", "TyreLife_bucket"]
AUTOML_TIME_BUDGET = 600
AUTOML_METRIC = "macro_f1"
AUTOML_ESTIMATORS = ["lgbm", "xgboost", "xgb_limitdepth", "catboost"]
def ensure_dirs() -> None:
for d in (INTERIM_DIR, PROCESSED_DIR, MLFLOW_DIR, MLFLOW_ARTIFACT_ROOT, MODELS_DIR):
d.mkdir(parents=True, exist_ok=True)