| """ |
| Schémas de données Pydantic pour l'API de prédiction du churn employé. |
| |
| Contient les modèles de validation des données entrantes et sortantes. |
| """ |
|
|
| from typing import Literal |
|
|
| from pydantic import BaseModel, ConfigDict, Field |
|
|
| |
|
|
|
|
| class DonneesEmploye(BaseModel): |
| """ |
| Modèle des données d'un employé en entrée de l'API. |
| |
| Chaque champ représente une caractéristique de l'employé. |
| La validation Pydantic rejette automatiquement les valeurs invalides. |
| """ |
|
|
| model_config = ConfigDict(extra="forbid") |
|
|
| |
|
|
| id_employee: int = Field(..., ge=1, description="ID unique de l'employé") |
|
|
| age: int = Field( |
| ..., ge=18, le=65, description="Âge de l'employé (entre 18 et 65 ans)" |
| ) |
|
|
| genre: Literal["M", "F"] = Field(..., description="Genre: M=Homme, F=Femme") |
|
|
| revenu_mensuel: int = Field( |
| ..., gt=0, lt=20000, description="Salaire mensuel en euros" |
| ) |
|
|
| statut_marital: Literal["Célibataire", "Marié(e)", "Divorcé(e)"] = Field( |
| ..., description="Statut matrimonial" |
| ) |
|
|
| departement: Literal["Consulting", "Commercial", "Ressources Humaines"] = Field( |
| ..., description="Département de l'entreprise" |
| ) |
|
|
| poste: Literal[ |
| "Représentant Commercial", |
| "Ressources Humaines", |
| "Assistant de Direction", |
| "Consultant", |
| "Manager", |
| "Cadre Commercial", |
| "Tech Lead", |
| "Senior Manager", |
| "Directeur Technique", |
| ] = Field(..., description="Intitulé du poste") |
|
|
| |
|
|
| annee_experience_totale: int = Field( |
| ..., ge=0, le=47, description="Années d'expérience totale" |
| ) |
|
|
| annees_dans_l_entreprise: int = Field( |
| ..., ge=0, le=47, description="Années dans l'entreprise" |
| ) |
|
|
| |
|
|
| satisfaction_employee_environnement: int = Field( |
| ..., |
| ge=1, |
| le=4, |
| description="Satisfaction concernant l'environnement de travail (1-4)", |
| ) |
|
|
| note_evaluation_precedente: int = Field( |
| ..., ge=1, le=4, description="Note d'évaluation précédente (1-4)" |
| ) |
|
|
| satisfaction_employee_nature_travail: int = Field( |
| ..., |
| ge=1, |
| le=4, |
| description="Satisfaction concernant la nature du travail (1-4)", |
| ) |
|
|
| satisfaction_employee_equipe: int = Field( |
| ..., ge=1, le=4, description="Satisfaction concernant l'équipe (1-4)" |
| ) |
|
|
| satisfaction_employee_equilibre_pro_perso: int = Field( |
| ..., ge=1, le=4, description="Satisfaction équilibre pro/perso (1-4)" |
| ) |
|
|
| note_evaluation_actuelle: int = Field( |
| ..., ge=1, le=4, description="Note d'évaluation actuelle (1-4)" |
| ) |
|
|
| |
|
|
| heure_supplementaires: Literal["Oui", "Non"] = Field( |
| ..., description="Effectue des heures supplémentaires" |
| ) |
|
|
| augementation_salaire_precedente: int = Field( |
| ..., |
| ge=0, |
| le=100, |
| description="Pourcentage d'augmentation salaire précédente (ex: 11 pour 11%)", |
| ) |
|
|
| nombre_participation_pee: int = Field( |
| ..., ge=0, le=3, description="Nombre de participations au PEE" |
| ) |
|
|
| nb_formations_suivies: int = Field( |
| ..., ge=0, description="Nombre de formations suivies" |
| ) |
|
|
| distance_domicile_travail: int = Field( |
| ..., ge=0, description="Distance domicile-travail en km" |
| ) |
|
|
| niveau_education: int = Field( |
| ..., ge=1, le=5, description="Niveau d'éducation (1-5)" |
| ) |
|
|
| frequence_deplacement: Literal["Aucun", "Occasionnel", "Frequent"] = Field( |
| ..., description="Fréquence des déplacements professionnels" |
| ) |
|
|
| annees_depuis_la_derniere_promotion: int = Field( |
| ..., ge=0, le=15, description="Années depuis la dernière promotion" |
| ) |
|
|
|
|
| class ResultatPrediction(BaseModel): |
| """Modèle de réponse de l'API après une prédiction.""" |
|
|
| prediction: str = Field( |
| ..., description="Prédiction: 'Oui' (part) ou 'Non' (reste)" |
| ) |
| probabilite: float = Field(..., description="Probabilité de départ (entre 0 et 1)") |
| classe: int = Field(..., description="Classe: 0=reste, 1=part") |
|
|