Spaces:
Sleeping
Sleeping
Update src/module/Features.py
Browse files- src/module/Features.py +22 -3
src/module/Features.py
CHANGED
|
@@ -348,8 +348,7 @@ class FeatureEngineer:
|
|
| 348 |
master = self.create_interaction_features(master)
|
| 349 |
|
| 350 |
# ===== 8. NETTOYAGE FINAL LÉGER =====
|
| 351 |
-
# On supprime SEULEMENT les lignes où les lags sont NaN
|
| 352 |
-
# (premières lignes de chaque groupe)
|
| 353 |
rows_before = len(master)
|
| 354 |
master = master.dropna()
|
| 355 |
rows_after = len(master)
|
|
@@ -358,12 +357,32 @@ class FeatureEngineer:
|
|
| 358 |
if rows_removed > 0:
|
| 359 |
st.info(f"ℹ️ {rows_removed} lignes supprimées (NaN des lags sur premières dates)")
|
| 360 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 361 |
# Stockage du dataset final
|
| 362 |
self.ml_dataset = master
|
| 363 |
|
| 364 |
return master, f"✅ Dataset ML créé : {len(master):,} échantillons, {len(master.columns)} features"
|
| 365 |
|
| 366 |
-
|
| 367 |
# =====================================================
|
| 368 |
# ============= INTERFACE STREAMLIT ===================
|
| 369 |
# =====================================================
|
|
|
|
| 348 |
master = self.create_interaction_features(master)
|
| 349 |
|
| 350 |
# ===== 8. NETTOYAGE FINAL LÉGER =====
|
| 351 |
+
# On supprime SEULEMENT les lignes où les lags sont NaN (premières lignes de chaque groupe)
|
|
|
|
| 352 |
rows_before = len(master)
|
| 353 |
master = master.dropna()
|
| 354 |
rows_after = len(master)
|
|
|
|
| 357 |
if rows_removed > 0:
|
| 358 |
st.info(f"ℹ️ {rows_removed} lignes supprimées (NaN des lags sur premières dates)")
|
| 359 |
|
| 360 |
+
# =========================================================
|
| 361 |
+
# 🔥 AJOUT CRITIQUE : ENCODAGE POUR COMPATIBILITÉ ML 🔥
|
| 362 |
+
# =========================================================
|
| 363 |
+
# Les modèles (XGBoost, Random Forest) ne savent pas lire le texte (ex: "CHIRURGIE").
|
| 364 |
+
# On convertit toutes les colonnes TEXTE (sauf la date) en CHIFFRES.
|
| 365 |
+
|
| 366 |
+
# On détecte les colonnes de type 'object' (texte) ou 'category'
|
| 367 |
+
categorical_cols = master.select_dtypes(include=['object', 'category']).columns
|
| 368 |
+
|
| 369 |
+
count_encoded = 0
|
| 370 |
+
for col in categorical_cols:
|
| 371 |
+
if col != 'date': # On ne touche SURTOUT PAS à la date (utile pour le split temporel)
|
| 372 |
+
# Transformation : "CHIRURGIE" -> 0, "REANIMATION" -> 1
|
| 373 |
+
master[col] = master[col].astype('category').cat.codes
|
| 374 |
+
count_encoded += 1
|
| 375 |
+
|
| 376 |
+
if count_encoded > 0:
|
| 377 |
+
st.caption(f"🔧 {count_encoded} colonnes texte converties en codes numériques pour l'IA.")
|
| 378 |
+
|
| 379 |
+
# =========================================================
|
| 380 |
+
|
| 381 |
# Stockage du dataset final
|
| 382 |
self.ml_dataset = master
|
| 383 |
|
| 384 |
return master, f"✅ Dataset ML créé : {len(master):,} échantillons, {len(master.columns)} features"
|
| 385 |
|
|
|
|
| 386 |
# =====================================================
|
| 387 |
# ============= INTERFACE STREAMLIT ===================
|
| 388 |
# =====================================================
|