jaimalklyde commited on
Commit
b496e94
·
verified ·
1 Parent(s): 3924cba

Update src/module/Features.py

Browse files
Files changed (1) hide show
  1. 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
  # =====================================================