Download src/db/models.py from Alexis-Ravet/Employee-Churn-Prediction: direct link, hf CLI and curl.
- Browser
- Download file 4.84 kB
-
https://huggingface.co/spaces/Alexis-Ravet/Employee-Churn-Prediction/resolve/main/src/db/models.py
- Command line
-
hf download hf://spaces/Alexis-Ravet/Employee-Churn-Prediction/src/db/models.py
-
curl -L -o models.py https://huggingface.co/spaces/Alexis-Ravet/Employee-Churn-Prediction/resolve/main/src/db/models.py
4.84 kB
| """ | |
| Modèles ORM SQLAlchemy pour la base de données PostgreSQL. | |
| Contient les 4 tables du schéma : | |
| - employees : dataset brut d'entraînement (1470 lignes) | |
| - prediction_inputs : données brutes envoyées à l'API | |
| - prediction_outputs : résultat de la prédiction | |
| - api_logs : traçabilité des échanges API ↔ DB | |
| """ | |
| from datetime import datetime | |
| from sqlalchemy import Column, DateTime, Float, ForeignKey, Integer, String | |
| from sqlalchemy.orm import relationship | |
| from src.db.database import Base | |
| class Employee(Base): | |
| """Table du dataset brut (1470 employés).""" | |
| __tablename__ = "employees" | |
| id_employee = Column(Integer, primary_key=True) | |
| age = Column(Integer, nullable=False) | |
| genre = Column(String(1), nullable=False) | |
| revenu_mensuel = Column(Integer, nullable=False) | |
| statut_marital = Column(String(20), nullable=False) | |
| departement = Column(String(20), nullable=False) | |
| poste = Column(String(30), nullable=False) | |
| annee_experience_totale = Column(Integer, nullable=False) | |
| annees_dans_l_entreprise = Column(Integer, nullable=False) | |
| satisfaction_employee_environnement = Column(Integer, nullable=False) | |
| note_evaluation_precedente = Column(Integer, nullable=False) | |
| satisfaction_employee_nature_travail = Column(Integer, nullable=False) | |
| satisfaction_employee_equipe = Column(Integer, nullable=False) | |
| satisfaction_employee_equilibre_pro_perso = Column(Integer, nullable=False) | |
| note_evaluation_actuelle = Column(Integer, nullable=False) | |
| heure_supplementaires = Column(String(5), nullable=False) | |
| augementation_salaire_precedente = Column(Integer, nullable=False) | |
| nombre_participation_pee = Column(Integer, nullable=False) | |
| nb_formations_suivies = Column(Integer, nullable=False) | |
| distance_domicile_travail = Column(Integer, nullable=False) | |
| niveau_education = Column(Integer, nullable=False) | |
| frequence_deplacement = Column(String(20), nullable=False) | |
| annees_depuis_la_derniere_promotion = Column(Integer, nullable=False) | |
| a_quitte_l_entreprise = Column(String(5), nullable=False) | |
| class PredictionInput(Base): | |
| """Données brutes envoyées à l'API (avant transformation).""" | |
| __tablename__ = "prediction_inputs" | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| id_employee = Column(Integer, nullable=False) | |
| created_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| age = Column(Integer, nullable=False) | |
| genre = Column(String(1), nullable=False) | |
| revenu_mensuel = Column(Integer, nullable=False) | |
| statut_marital = Column(String(20), nullable=False) | |
| departement = Column(String(20), nullable=False) | |
| poste = Column(String(30), nullable=False) | |
| annee_experience_totale = Column(Integer, nullable=False) | |
| annees_dans_l_entreprise = Column(Integer, nullable=False) | |
| satisfaction_employee_environnement = Column(Integer, nullable=False) | |
| note_evaluation_precedente = Column(Integer, nullable=False) | |
| satisfaction_employee_nature_travail = Column(Integer, nullable=False) | |
| satisfaction_employee_equipe = Column(Integer, nullable=False) | |
| satisfaction_employee_equilibre_pro_perso = Column(Integer, nullable=False) | |
| note_evaluation_actuelle = Column(Integer, nullable=False) | |
| heure_supplementaires = Column(String(5), nullable=False) | |
| augementation_salaire_precedente = Column(Integer, nullable=False) | |
| nombre_participation_pee = Column(Integer, nullable=False) | |
| nb_formations_suivies = Column(Integer, nullable=False) | |
| distance_domicile_travail = Column(Integer, nullable=False) | |
| niveau_education = Column(Integer, nullable=False) | |
| frequence_deplacement = Column(String(20), nullable=False) | |
| annees_depuis_la_derniere_promotion = Column(Integer, nullable=False) | |
| output = relationship("PredictionOutput", back_populates="input", uselist=False) | |
| class PredictionOutput(Base): | |
| """Résultat de la prédiction du modèle.""" | |
| __tablename__ = "prediction_outputs" | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| input_id = Column( | |
| Integer, ForeignKey("prediction_inputs.id"), nullable=False, unique=True | |
| ) | |
| prediction = Column(String(5), nullable=False) | |
| probabilite = Column(Float, nullable=False) | |
| classe = Column(Integer, nullable=False) | |
| input = relationship("PredictionInput", back_populates="output") | |
| class ApiLog(Base): | |
| """Traçabilité des échanges entre l'API et la base de données.""" | |
| __tablename__ = "api_logs" | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| created_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| operation = Column(String(30), nullable=False) | |
| table_cible = Column(String(20), nullable=False) | |
| details = Column(String(255), nullable=True) | |
| statut = Column(String(10), nullable=False) | |