Djohell commited on
Commit
897caa9
·
verified ·
1 Parent(s): bc4d3f1

Upload processing.py

Browse files
Files changed (1) hide show
  1. processing.py +66 -18
processing.py CHANGED
@@ -63,27 +63,78 @@ def map_statut_expert(p2):
63
  # --- 3. PRÉPARATION DES DONNÉES (La version robuste) ---
64
 
65
  def prepare_input(data):
66
- # 1. On définit l'ordre EXACT attendu par le modèle (ordre de ton erreur 500)
67
- # On retire SIREN et Dénomination qui polluent le début de ta liste
68
- clean_features = [c for c in FEATURES if c not in ["SIREN", "Dénomination de l'unité légale"]]
69
-
70
- # On s'assure que l'âge est bien à la fin si c'est là qu'il était lors de l'erreur
71
- if "age_au_diagnostic" not in clean_features:
72
- clean_features.append("age_au_diagnostic")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
 
74
- # 2. On crée le DataFrame avec cet ordre
75
- df = pd.DataFrame(0.0, index=[0], columns=clean_features)
76
 
77
- # 3. On remplit les valeurs par NOM
78
  df['age_au_diagnostic'] = float(data.get('age_estime', 0))
79
  df['Tranche_effectif_num'] = float(data.get('Tranche_effectif_num', 0))
80
  df['is_ess'] = int(data.get('is_ess', 0))
81
 
82
- # Département
83
  code_dep = str(data.get('code_departement', '')).strip().upper()
84
  df['risque_departemental'] = float(DEP_RISK_MAP.get(code_dep, 0.05))
85
 
86
- # Mapping APE (Secteur)
87
  code_ape = str(data.get('code_ape', '')).zfill(2)
88
  section_name = APE_SECTION_MAP.get(code_ape)
89
  if section_name:
@@ -93,14 +144,11 @@ def prepare_input(data):
93
  else:
94
  df['APE_Autres_Secteurs'] = 1.0
95
 
96
- # Mapping CJ (Juridique)
97
  cj_prefix = str(data.get('categorie_juridique', ''))[:4]
98
  col_cj = f"CJ_{cj_prefix}"
99
  if col_cj in df.columns:
100
  df[col_cj] = 1.0
101
 
102
- # 4. LE POINT CRITIQUE : on réordonne les colonnes avant de créer la DMatrix
103
- # Cela garantit que la colonne 0 est bien Tranche_effectif_num
104
- df_final = df[clean_features]
105
-
106
- return xgb.DMatrix(df_final)
 
63
  # --- 3. PRÉPARATION DES DONNÉES (La version robuste) ---
64
 
65
  def prepare_input(data):
66
+ # 1. LISTE EXACTE issue de ton erreur 500 (Ordre d'entraînement)
67
+ # C'est cette liste qui fait foi pour l'indexation XGBoost
68
+ model_ordered_cols = [
69
+ 'Tranche_effectif_num', 'risque_departemental', 'is_ess',
70
+ 'APE_Activités administratives et autres activités de soutien aux entreprises',
71
+ "APE_Activités auxiliaires de services financiers et d'assurance ",
72
+ 'APE_Activités créatives, artistiques et de spectacle ',
73
+ "APE_Activités d'architecture et d'ingénierie ; activités de contrôle et analyses techniques",
74
+ 'APE_Activités de location et location-bail',
75
+ 'APE_Activités des agences de voyage, voyagistes, services de réservation et activités connexes',
76
+ 'APE_Activités des services financiers, hors assurance et caisses de retraite',
77
+ 'APE_Activités des sièges sociaux ; conseil de gestion',
78
+ 'APE_Activités immobilières',
79
+ 'APE_Activités juridiques et comptables',
80
+ "APE_Activités liées à l'emploi",
81
+ 'APE_Activités pour la santé humaine',
82
+ 'APE_Activités sportives, récréatives et de loisirs',
83
+ 'APE_Autres activités spécialisées, scientifiques et techniques',
84
+ 'APE_Autres industries manufacturières',
85
+ 'APE_Autres services personnels',
86
+ 'APE_Collecte, traitement et élimination des déchets ; récupération',
87
+ 'APE_Commerce de détail, à l’exception des automobiles et des motocycles',
88
+ 'APE_Commerce de gros, à l’exception des automobiles et des motocycles',
89
+ "APE_Commerce et réparation d'automobiles et de motocycles",
90
+ 'APE_Construction de bâtiments ',
91
+ 'APE_Enquêtes et sécurité',
92
+ 'APE_Enseignement',
93
+ 'APE_Entreposage et services auxiliaires des transports',
94
+ "APE_Fabrication d'autres produits minéraux non métalliques",
95
+ 'APE_Fabrication de boissons',
96
+ 'APE_Fabrication de machines et équipements n.c.a.',
97
+ 'APE_Fabrication de meubles',
98
+ 'APE_Fabrication de produits métalliques, à l’exception des machines et des équipements',
99
+ 'APE_Génie civil',
100
+ 'APE_Hébergement',
101
+ "APE_Imprimerie et reproduction d'enregistrements",
102
+ 'APE_Industrie chimique',
103
+ "APE_Industrie de l'habillement",
104
+ 'APE_Industries alimentaires',
105
+ 'APE_Production de films cinématographiques, de vidéo et de programmes de télévision ; enregistrement sonore et édition musicale',
106
+ "APE_Production et distribution d'électricité, de gaz, de vapeur et d'air conditionné",
107
+ 'APE_Programmation, conseil et autres activités informatiques ',
108
+ 'APE_Publicité et études de marché',
109
+ 'APE_Recherche-développement scientifique',
110
+ 'APE_Restauration',
111
+ "APE_Réparation d'ordinateurs et de biens personnels et domestiques",
112
+ "APE_Réparation et installation de machines et d'équipements ",
113
+ "APE_Services d'information",
114
+ 'APE_Services relatifs aux bâtiments et aménagement paysager',
115
+ 'APE_Transports terrestres et transport par conduites',
116
+ "APE_Travail du bois et fabrication d'articles en bois et en liège, à l’exception des meubles ; fabrication d’articles en vannerie et sparterie",
117
+ 'APE_Travaux de construction spécialisés ',
118
+ 'APE_Télécommunications',
119
+ 'APE_Édition',
120
+ 'CJ_5710',
121
+ 'APE_Autres_Secteurs',
122
+ 'age_au_diagnostic'
123
+ ]
124
 
125
+ # 2. On crée le DataFrame avec cet ordre IMPOUISSANT
126
+ df = pd.DataFrame(0.0, index=[0], columns=model_ordered_cols)
127
 
128
+ # 3. On remplit les données
129
  df['age_au_diagnostic'] = float(data.get('age_estime', 0))
130
  df['Tranche_effectif_num'] = float(data.get('Tranche_effectif_num', 0))
131
  df['is_ess'] = int(data.get('is_ess', 0))
132
 
133
+ # Risque département
134
  code_dep = str(data.get('code_departement', '')).strip().upper()
135
  df['risque_departemental'] = float(DEP_RISK_MAP.get(code_dep, 0.05))
136
 
137
+ # Mapping APE
138
  code_ape = str(data.get('code_ape', '')).zfill(2)
139
  section_name = APE_SECTION_MAP.get(code_ape)
140
  if section_name:
 
144
  else:
145
  df['APE_Autres_Secteurs'] = 1.0
146
 
147
+ # Mapping CJ
148
  cj_prefix = str(data.get('categorie_juridique', ''))[:4]
149
  col_cj = f"CJ_{cj_prefix}"
150
  if col_cj in df.columns:
151
  df[col_cj] = 1.0
152
 
153
+ # 4. On s'assure de l'ordre final avant DMatrix
154
+ return xgb.DMatrix(df[model_ordered_cols])