Fonction ML.EVALUATE

Fonction ML.EVALUATE

La fonction ML.EVALUATE permet d'évaluer les métriques du modèle. La fonction ML.EVALUATE peut être utilisée avec des modèles de régression linéaire, de régression logistique, de k-moyennes et de factorisation matricielle. La fonction ML.ROC_CURVE peut également servir à évaluer des modèles de régression logistique. En revanche, la fonction ML.ROC_CURVE n'est pas compatible avec les modèles multiclasses.

Le résultat de la fonction ML.EVALUATE consiste en une seule ligne affichant des métriques courantes, applicables au type de modèle fourni.

ML.EVALUATE renvoie les colonnes suivantes pour un modèle de régression logistique ou multiclasses :

  • precision
  • recall
  • accuracy
  • f1_score
  • log_loss
  • roc_auc

ML.EVALUATE affiche les colonnes suivantes pour un modèle de régression linéaire ou pour un modèle de factorisation matricielle explicite :

  • mean_absolute_error
  • mean_squared_error
  • mean_squared_log_error
  • median_absolute_error
  • r2_score
  • explained_variance

ML.EVALUATE affiche les colonnes suivantes pour un modèle de k-moyennes :

ML.EVALUATE affiche les colonnes suivantes pour un modèle de factorisation matricielle implicite :

Limites de ML.EVALUATE

La fonction ML.EVALUATE est soumise aux limites suivantes :

  • La fonction ML.EVALUATE n'est pas compatible avec les modèles TensorFlow importés.
  • L'élément threshold ne peut pas être utilisé avec les modèles de régression logistique multiclasses ou les modèles de factorisation matricielle.

Syntaxe de ML.EVALUATE

ML.EVALUATE(MODEL model_name
           [, {TABLE table_name | (query_statement)}]
           [, STRUCT(<T> AS threshold)])

model_name

model_name est le nom du modèle que vous évaluez. Si aucun projet par défaut n'est configuré, ajoutez l'ID de projet au nom du modèle au format suivant : `[PROJECT_ID].[DATASET].[MODEL]` (en intégrant les accents graves), par exemple, `myproject.mydataset.mymodel`.

table_name

(Facultatif) table_name est le nom de la table d'entrée qui contient les données d'évaluation. Si aucun projet par défaut n'est configuré, ajoutez l'ID de projet au nom de la table au format suivant : `[PROJECT_ID].[DATASET].[TABLE]` (en intégrant les accents graves), par exemple, `myproject.mydataset.mytable`.

Si table_name est spécifié, les noms des colonnes d'entrée de la table doivent correspondre aux noms des colonnes du modèle, et leurs types doivent être compatibles suivant les règles de coercition implicites de BigQuery. L'entrée doit inclure une colonne correspondant au nom de la colonne d'étiquette fournie lors de l'entraînement. Cette valeur est fournie à l'aide de l'option input_label_cols. Si input_label_cols n'est pas spécifié, la colonne "label" (étiquette) dans les données d'entraînement est utilisée.

Si aucune des valeurs table_name et query_statement n'est spécifiée, ML.EVALUATE calcule les résultats de l'évaluation comme suit :

  • Si les données sont réparties lors de l'entraînement, les résultats d'évaluation sont calculés à l'aide des données d'évaluation fractionnées.
  • Si les données ne sont pas réparties lors de l'entraînement, les résultats d'évaluation sont calculés à l'aide de l'intégralité des données d'entrée d'entraînement.

query_statement

(Facultatif) La clause query_statement spécifie en langage SQL standard la requête permettant de générer les données d'évaluation. Reportez-vous à la page Syntaxe des requêtes en SQL standard pour connaître la syntaxe SQL compatible avec la clause query_statement.

Si query_statement est spécifié, les noms des colonnes d'entrée de la requête doivent correspondre aux noms des colonnes du modèle, et leurs types doivent être compatibles suivant les règles de coercition implicites de BigQuery. L'entrée doit inclure une colonne correspondant au nom de la colonne d'étiquette fournie lors de l'entraînement. Cette valeur est fournie à l'aide de l'option input_label_cols. Si input_label_cols n'est pas spécifié, la colonne "label" (étiquette) dans les données d'entraînement est utilisée. Les colonnes supplémentaires sont ignorées.

Si la clause TRANSFORM était présente dans l'instruction CREATE MODEL qui a créé model_name, seules les colonnes d'entrée présentes dans la clause TRANSFORM doivent apparaître dans query_statement.

Si aucune des valeurs table_name et query_statement n'est spécifiée, ML.EVALUATE calcule les résultats de l'évaluation comme suit :

  • Si les données sont réparties lors de l'entraînement, les résultats d'évaluation sont calculés à l'aide des données d'évaluation fractionnées.
  • Si les données ne sont pas réparties lors de l'entraînement, les résultats d'évaluation sont calculés à l'aide de l'intégralité des données d'entrée d'entraînement. Comme les modèles de k-moyennes n'autorisent pas la répartition des données, l'appel de la fonction ML.EVALUATE sur un modèle de k-moyennes sans spécifier d'élément query_statement ou table_name entraînera le calcul des résultats pour l'ensemble des données d'entrée d'entraînement.

threshold

(Facultatif) L'élément threshold est un seuil personnalisé pour votre modèle de régression logistique servant à l'évaluation. La valeur par défaut est 0,5. La valeur de seuil fournie doit être de type STRUCT.

Si la précision ou le rappel affiche une valeur nulle, cela signifie que le seuil sélectionné n'a généré aucun vrai positif. Si la précision affiche une valeur NaN, cela signifie que le seuil sélectionné n'a renvoyé aucun positif, ni vrai positif, ni faux positif.

Si les éléments table_name et query_statement ne sont pas spécifiés, vous ne pouvez pas utiliser de seuil. En outre, l'élément threshold ne peut pas être utilisé avec les modèles de régression logistique multiclasses.

Exemples d'instructions ML.EVALUATE

ML.EVALUATE sans données d'entrée spécifiées

La requête ci-dessous permet d'évaluer un modèle sans données d'entrée spécifiées.

SELECT
  *
FROM
  ML.EVALUATE(MODEL `mydataset.mymodel`)

ML.EVALUATE avec un seuil personnalisé et des données d'entrée

La requête ci-dessous évalue le modèle en spécifiant des données d'entrée et un seuil personnalisé de 0,55.

SELECT
  *
FROM
  ML.EVALUATE(MODEL `mydataset.mymodel`,
    (
    SELECT
      custom_label,
      column1,
      column2
    FROM
      `mydataset.mytable`),
    STRUCT(0.55 AS threshold))