Skip to content

Prototype API

Ersikan edited this page Feb 20, 2021 · 17 revisions

API du backend

Gestion des datasets

POST /dataset

Envoie un nouveau dataset au format CSV.

GET /dataset

Récupère la liste des datasets.

Exemple

["titanic.csv", "bad_columns.csv", "iris.csv", "test.csv"]

GET /dataset/{id}

Récupère les informations sur le datasets, comme la liste des configs ou la liste des colonnes

{
  "columns": ["column1", "column2", "column3"],
  "configs": ["600465fe160c3c5beeba568c"],
  "name": "dataset.csv",
  "size": 3249
}

POST /dataset/{id}/config/lint

Lint une config envoyée dans le body, au lieu de lint une config déjà enregistrée dans la base de données.

Voir la route GET /config/{id}/lint pour plus d'informations.

GET /dataset/{id}/sweetviz

Renvoie la visualisation du dataset générée par Sweetviz, sous forme de page HTML.

DELETE /dataset/{id}

Supprime un dataset et toute ses données associées (configs, modèles).

Gestion des config

POST /dataset/{id}/config

Ajoute une nouvelle config.

Le body est un objet JSON contenant trois clés:

  • columns: Un object spécifiant pour chaque nom de colonne, si la colonne est activée ou non. Une colonne désactivée ne sera pas utilisée dans les modèles créés à partir de cette config.
  • label: La colonne que l'on souhaite prédire grâce à nos modèles.
  • model_type: Le type de modèle correspondant au problème. Le type peut être classification ou regression pour l'instant. Par exemple si l'on souhaite prédire une valeur continue on utilisera regression, et si l'on souhaite classer une donnée dans un nombre fixe de catégories précises, on utilise classification.

Exemple

{
  "columns": {
    "column1": true,
    "column2": false,
    "column3": true
  },
  "label": "column3",
  "model_type": "classification"
}

Type de modèle

Le type de modèle à entraîner peut être défini grâce à la propriété model_type. Pour l'instant le type de modèle peut être soit classification, soit regression.

GET /config/{id}

Récupère les informations sur la config

Exemple

{
  "columns": {
    "column1": true,
    "column2": false,
    "column3": true
  },
  "id": "60196f7d2dec24ae0bda7e53",
  "label": "column3",
  "model_type": "classification",
  "models": [
    "60196fc82dec24ae0bda7e54",
    "60196fc92dec24ae0bda7e55",
    "60196fca2dec24ae0bda7e56"
  ]
}

GET /config/{id}/lint

Récupère des conseils sur les colonnes à enlever et pourquoi les enlever.

Renvoie une liste de tableau par colonnes :

Index 0 : La description du conseil

Index 1 : Le lien d'information du conseil (le conseil peux ne pas avoir de lien. Exemple : le conseil indiquant que toutes les valeurs sont les mêmes)

Index 2 : True = test négatif (malus), False = test positif (bonus)

{
  "lints": {
    "COLUMN_1": [
      ["Lint 1 description", "link.com", true],
      ["Lint 2 description", "link.com", false],
      ["Lint 3 description", "", true]
    ],
    "OTHER_COLUMN": [
      ["Lint 1 description", "link.com", false],
      ["Lint 2 description", "", true],
      ["Lint 3 description", "link.com", true]
    ]
  }
}

GET /config/{id}/sweetviz

Renvoie la visualisation du dataset générée par Sweetviz, sous forme de page HTML. Cette visualisation prend en compte le label de la config.

DELETE /config/{id}

Supprime la config.

Gestion des modèles

POST /config/{id}/model

Crée un nouveau modèle.

Le body contient un objet JSON dont les clés seront fournies à TPOT à la création du modèle. Toutes les clés ont une valeur par défaut et peuvent ne pas être présentes. Les clés suivantes sont acceptées :

  • generations
  • population_size
  • offspring_size
  • mutation_rate
  • crossover_rate
  • scoring
  • subsample
  • config_dict
  • template
  • early_stop

Pour plus d'information sur leur utilité et leur signification, référez vous à la documentation de TPOT.

Exemple

{
  "generations": 1,
  "population_size": 10
}

GET /model/{id}

Récupère les informations sur le modèle

Exemple

{
  "id": "60196fca2dec24ae0bda7e56",
  "model_config": {
    "generations": 1,
    "population_size": 10
  },
  "status": "not started",
  "analysis": {
    "f1_score": 0.9407407407407407,
    "testing_accuracy": 0.9333333333333333,
    "training_accuracy": 0.9583333333333334
  }
}

POST /model/{id}/train

Lance l'entraînement d'un modèle.

GET /model/{id}/status

Récupère l'état actuel de l'entraînement du modèle

Le résultat est un objet json contenant les propriétés suivantes:

  • status: not started | starting | started | exporting | done | error
  • logs: contient les logs affichés par TPOT dans la console s'ils sont disponibles

GET /model/{id}/export

Récupère le fichier python généré par TPOT correspondant à la meilleure pipeline

GET /model/{id}/confusion_matrix

Récupère un graphique de la matrice de confusion, une fois que le modèle a été entrainé.

POST /model/{id}/predict

Prédit des valeurs en utilisant le modèle créé par TPOT.

Le body doit contenir les valeurs des différentes colonnes d'entrée du modèle, tel que spécifié dans la config.

La réponse est un objet JSON contenant une unique entrée, le nom de la colonne prédite et sa valeur.

Par exemple pour cette config, les colonnes d'entrées sont column_3 et column_4.

{
  "label": "column_1",
  "columns": {
    "column_1": true,
    "column_2": false,
    "column_3": true,
    "column_4": true
  }
}

Pour effectuer une prédiction il faut donc envoyer :

[
  {
    "column_3": -3.14,
    "column_4": "Bonjour"
  },
  {
    "column_3": 42,
    "column_4": "Bonsoir"
  }
]

Et on recevra :

[
  {
    "column_1": 42
  },
  {
    "column_1": 24
  }
]

DELETE /model/{id}

Supprime le modèle.