Fonction ML.ROC_CURVE

Fonction ML.ROC_CURVE

La fonction ML.ROC_CURVE permet d'évaluer les métriques spécifiques à la régression logistique. ML.ROC_CURVE ne permet d'évaluer que les modèles de régression logistique.

La fonction ML.ROC_CURVE renvoie plusieurs lignes avec des métriques correspondant à différentes valeurs de seuil pour le modèle. Ces métriques incluent les éléments suivants :

  • threshold (seuil)
  • recall (rappel)
  • false_positive_rate (taux de faux positifs)
  • true_positives (vrais positifs)
  • false_positives (faux positifs)
  • true_negatives (vrais négatifs)
  • false_negatives (faux négatifs)

Limites de ML.ROC_CURVE

La fonction ML.ROC_CURVE est soumise aux limites suivantes :

  • Les modèles de régression logistique à classes multiples ne sont pas compatibles.
  • Les modèles TensorFlow importés ne sont pas compatibles.

Syntaxe de ML.ROC_CURVE

ML.ROC_CURVE(MODEL model_name
            [, {TABLE table_name | (query_statement)}]
            [, GENERATE_ARRAY(thresholds)])

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 dans le modèle doivent correspondre aux noms des colonnes de la table, 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_nameet query_statement n'est spécifiée, ML.ROC_CURVE calcule les résultats de la courbe ROC comme suit :

  • Si les données sont réparties lors de l'entraînement, les résultats de la courbe ROC 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 de la courbe ROC 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_nameet query_statement n'est spécifiée, ML.ROC_CURVE calcule les résultats de la courbe ROC comme suit :

  • Si les données sont réparties lors de l'entraînement, les résultats de la courbe ROC 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 de la courbe ROC sont calculés à l'aide de l'intégralité des données d'entrée d'entraînement.

thresholds

(Facultatif) Les éléments thresholds représentent les centiles des données de sortie de prédiction fournie par la fonction GENERATE_ARRAY. Les valeurs fournies doivent être de type DOUBLE.

Si vous ne spécifiez pas les seuils à utiliser, ils sont choisis automatiquement en fonction des valeurs des données de sortie de la prédiction sur la base de 100 quantiles approximatifs : APPROX_QUANTILES(predicted_label, 100).

Exemples d'instructions ML.ROC_CURVE

Dans les exemples suivants, nous supposons que le modèle et la table d'entrée se trouvent dans le projet par défaut.

Évaluer la courbe ROC d'un modèle de régression logistique

La requête ci-dessous renvoie les colonnes suivantes : threshold, recall, false_positive_rate, true_positives, false_positives, true_negatives et false_negatives. La valeur du rappel et le taux de faux positifs peuvent être représentés graphiquement sur une courbe ROC. Les valeurs de seuil renvoyées sont choisies en fonction des valeurs de centile des données de sortie de prédiction.

SELECT
  *
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`)

Évaluer une courbe ROC à l'aide de seuils personnalisés

La requête ci-dessous renvoie les mêmes colonnes que l'exemple précédent. Les valeurs de seuil renvoyées sont choisies selon le résultat de la fonction GENERATE_ARRAY.

SELECT
  *
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`,
    GENERATE_ARRAY(0.4,0.6,0.01))

Évaluer la courbe de précision/rappel

Au lieu de générer une courbe ROC (valeur de rappel et taux de faux positifs), la requête ci-dessous affiche une courbe de précision/rappel, obtenue grâce à la précision des vrais et faux positifs.

SELECT
  recall,
  true_positives / (true_positives + false_positives) AS precision
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`)