Alexis-Ravet's picture
Upload folder using huggingface_hub
1d72461 verified
Raw
History Blame Contribute Delete
4.26 kB
"""
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")