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")