73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
import datetime
|
|
from enum import StrEnum
|
|
from pathlib import Path
|
|
from typing import Literal
|
|
|
|
# Racine du depot de travail (/home/user/tp sur la VM) : lab/constants.py -> parents[1]
|
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
# Donnees source, deja preparees (hors git, volumineuses) : voir /data sur la VM
|
|
SOURCE_DIR = Path("/data/modelling")
|
|
|
|
# Sorties de split versionnees par DVC dans le depot
|
|
DATASET_DIR = REPO_ROOT / "data"
|
|
|
|
FEATURE_FILENAME = "features.parquet"
|
|
TARGET_FILENAME = "target.parquet"
|
|
|
|
|
|
class SplitStrategy(StrEnum):
|
|
FULL_HISTORY = "full_history"
|
|
RECENT_HISTORY = "recent_history"
|
|
|
|
|
|
# Strategie de split active : pilote a la fois le decoupage produit par split/cli.py
|
|
# et le parametre "split_strategy" logge dans MLflow. On la modifie (et on committe)
|
|
# a chaque changement de version de dataset pour synchroniser DVC et Git.
|
|
CHOSEN_SPLIT_STRATEGY = SplitStrategy.RECENT_HISTORY
|
|
|
|
DatasetPart = Literal["train", "test", "validation"]
|
|
|
|
DATASET_SPLIT_DATES: dict[SplitStrategy, dict[DatasetPart, tuple[datetime.date, datetime.date]]] = {
|
|
# Partie 1 : tout l'historique disponible pour l'entrainement
|
|
SplitStrategy.FULL_HISTORY: {
|
|
"train": (datetime.date(2011, 1, 1), datetime.date(2012, 12, 31)),
|
|
"validation": (datetime.date(2013, 1, 1), datetime.date(2013, 12, 31)),
|
|
"test": (datetime.date(2014, 1, 1), datetime.date(2014, 12, 31)),
|
|
},
|
|
# Partie 2 : donnees plus recentes uniquement
|
|
SplitStrategy.RECENT_HISTORY: {
|
|
"train": (datetime.date(2013, 1, 1), datetime.date(2013, 12, 31)),
|
|
"validation": (datetime.date(2014, 1, 1), datetime.date(2014, 5, 31)),
|
|
"test": (datetime.date(2014, 6, 1), datetime.date(2014, 12, 31)),
|
|
},
|
|
}
|
|
|
|
|
|
class ModellingStrategy(StrEnum):
|
|
SHORT_MEMORY = "short_memory"
|
|
SEASONALITY = "seasonality"
|
|
TENDENCY = "tendency"
|
|
MIXED = "mixed"
|
|
FULL = "full"
|
|
|
|
|
|
Features = Literal["lag_1d", "lag_7d", "lag_30d", "lag_365d", "rolling_mean_7d", "rolling_mean_30d"]
|
|
TARGET = "consumption_kwh"
|
|
|
|
MODELLING_FEATURES: dict[ModellingStrategy, list] = {
|
|
# La conso depend surtout de la veille
|
|
ModellingStrategy.SHORT_MEMORY: ["lag_1d"],
|
|
# La conso est plus saisonniere que journaliere
|
|
ModellingStrategy.SEASONALITY: ["lag_7d", "lag_30d"],
|
|
# La conso suit surtout une tendance
|
|
ModellingStrategy.TENDENCY: ["rolling_mean_7d", "rolling_mean_30d"],
|
|
# Melange lags + tendance
|
|
ModellingStrategy.MIXED: ["lag_1d", "lag_7d", "lag_30d", "rolling_mean_30d"],
|
|
# Toutes les features disponibles (ajoutee en Partie 2 Etape 3)
|
|
ModellingStrategy.FULL: ["lag_1d", "lag_7d", "lag_30d", "lag_365d", "rolling_mean_7d", "rolling_mean_30d"],
|
|
}
|
|
|
|
# Valeurs d'alpha demandees par l'enonce (Partie 3)
|
|
RIDGE_ALPHAS = [1, 1e3, 1e9]
|