File size: 4,258 Bytes
b301ad2 1d72461 b301ad2 1d72461 b301ad2 b666236 b301ad2 b666236 b301ad2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | """
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
# MODÈLES DE DONNÉES D'ENTRÉE
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") # rejette les champs inconnus
# INFORMATIONS PERSONNELLES
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")
# EXPÉRIENCE
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 (note de 1 à 4)
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)"
)
# AUTRES INFORMATIONS
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")
|