import pandas as pd import joblib # Charger le modèle scikit-learn model = joblib.load("model.joblib") def preprocess_and_predict(input_json): """ Fonction pour traiter les données JSON entrantes, calculer les champs dérivés, et prédire à l'aide d'un modèle scikit-learn. Args: input_json (dict): Données simplifiées fournies par l'utilisateur. Exemple : { "puiss_admin_98": 7, "conso_urb": 5.6, "conso_exurb": 4.3, "masse_ordma_max": 1500, "marque": "BMW", "typ_boite": "A 5", "champ_v9": 715/2007*195/2013EURO5, "carrosserie": "COUPE", "gamme": "LUXE" } Returns: dict: Prédiction du modèle. """ # Mapper les catégories aux colonnes du modèle marque_mapping = ["BMW", "MERCEDES", "VOLKSWAGEN"] typ_boite_mapping = ["A 5", "A 6", "A 7", "A 8", "M 5", "M 6"] carrosserie_mapping = ["BREAK", "COUPE", "MINIBUS", "TS TERRAINS/CHEMINS"] gamme_mapping = ["INFERIEURE", "LUXE", "MOY-INFERIEURE", "MOY-SUPER", "SUPERIEURE"] champ_v9_mapping = ["\"715/2007*195/2013EURO5", "\"715/2007*195/2013EURO6", "\"715/2007*566/2011EURO5", "\"715/2007*630/2012EURO5", "715/2007*195/2013EURO5", "715/2007*630/2012EURO5", "715/2007*692/2008EURO5"] # Initialiser un dictionnaire pour construire les colonnes nécessaires processed_data = { "puiss_admin_98": input_json.get("puiss_admin_98", 0), "conso_urb": input_json.get("conso_urb", 0.0), "conso_exurb": input_json.get("conso_exurb", 0.0), "masse_ordma_max": input_json.get("masse_ordma_max", 0.0) } # Variables indicatrices pour la marque for marque in marque_mapping: processed_data[f"lib_mrq_{marque}"] = 1 if input_json.get("marque") == marque else 0 # Variables indicatrices pour le type de boîte for typ_boite in typ_boite_mapping: processed_data[f"typ_boite_nb_rapp_{typ_boite}"] = 1 if input_json.get("typ_boite") == typ_boite else 0 # Variables indicatrices pour la norme champ for champ_v9 in champ_v9_mapping: processed_data[f"champ_v9_{champ_v9}"] = 1 if input_json.get("champ_v9") == champ_v9 else 0 # Variables indicatrices pour la carrosserie for carrosserie in carrosserie_mapping: processed_data[f"Carrosserie_{carrosserie}"] = 1 if input_json.get("carrosserie") == carrosserie else 0 # Variables indicatrices pour la gamme for gamme in gamme_mapping: processed_data[f"gamme_{gamme}"] = 1 if input_json.get("gamme") == gamme else 0 # Convertir en DataFrame pour correspondre au format attendu par le modèle input_dataframe = pd.DataFrame([processed_data]) # Faire une prédiction prediction = model.predict(input_dataframe) return {"prediction": prediction.tolist()}