File size: 2,875 Bytes
0f6bede
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()}