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