Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import os | |
| import sys | |
| # Ajouter la racine du projet (contenant main_api.py) au PYTHONPATH | |
| sys.path.append(os.path.dirname(os.path.dirname(__file__))) | |
| from main_api import modele, scaler, pretraiter_donnees, EmployeeInput, \ | |
| GenreEnum, EtatCivilEnum, DepartementEnum, DomaineEtudeEnum, FrequenceDeplacementEnum | |
| def build_employee(**overrides): | |
| base = dict( | |
| age=35, | |
| genre=GenreEnum.masculin, | |
| etat_civil=EtatCivilEnum.celibataire, | |
| salaire=5000, | |
| distance=5, | |
| departement=DepartementEnum.consulting, | |
| domaine_etude=DomaineEtudeEnum.transformation_digitale, | |
| niveau_hierarchique=2, | |
| poste_freq_deplacement=FrequenceDeplacementEnum.modere, | |
| emplois_precedents=3, | |
| experience_totale=8, | |
| annees_entreprise=5, | |
| annees_poste=2, | |
| annees_derniere_promotion=1, | |
| annees_responsable_actuel=3, | |
| heures_semaine=40, | |
| heures_supplementaires=False, | |
| employes_supervision=0, | |
| evaluation_precedente=3, | |
| evaluation_actuelle=3, | |
| satisfaction_environnement=3, | |
| satisfaction_travail=3, | |
| satisfaction_equipe=3, | |
| satisfaction_balance=3, | |
| augmentation_salaire=15, | |
| participation_pee=1, | |
| formations_completees=2, | |
| ) | |
| base.update(overrides) | |
| return EmployeeInput(**base) | |
| def test_modele_charge(): | |
| """Le modèle et le scaler doivent être chargés.""" | |
| assert modele is not None | |
| assert scaler is not None | |
| def test_probabilites_dimension_et_somme(): | |
| """Le modèle doit renvoyer un vecteur de probas de taille 2 qui somme à ~1.""" | |
| emp = build_employee() | |
| X = pretraiter_donnees(emp) | |
| X_scaled = scaler.transform(X) | |
| probs = modele.predict_proba(X_scaled)[0] | |
| assert len(probs) == 2 | |
| assert all(0.0 <= p <= 1.0 for p in probs) | |
| assert np.isclose(probs.sum(), 1.0, atol=1e-6) | |
| def test_cas_haut_risque_plus_que_moyen(): | |
| """Profil très défavorable → probabilité de churn élevée.""" | |
| emp = build_employee( | |
| satisfaction_environnement=1, | |
| satisfaction_travail=1, | |
| satisfaction_equipe=1, | |
| satisfaction_balance=1, | |
| annees_entreprise=1.0, | |
| annees_poste=1.0, # <= annees_entreprise pour respecter le validateur | |
| experience_totale=1.0, | |
| salaire=1800, | |
| ) | |
| X = pretraiter_donnees(emp) | |
| X_scaled = scaler.transform(X) | |
| probs = modele.predict_proba(X_scaled)[0] | |
| prob_churn = probs[1] | |
| # seuil plus souple: le cas doit être au-dessus de ton meilleur seuil | |
| from main_api import meilleur_seuil | |
| assert prob_churn >= meilleur_seuil | |