ML.ROC_CURVE-Funktion

ML.ROC_CURVE-Funktion

Verwenden Sie die Funktion ML.ROC_CURVE für die Bewertung von Messwerten, die sich auf logistische Regressionen beziehen. ML.ROC_CURVE bewertet nur logistische Regressionsmodelle.

Die ML.ROC_CURVE-Ausgabefunktion enthält mehrere Zeilen mit Messwerten, die verschiedene Schwellenwerte für das Modell haben. Die Messwerte enthalten:

  • den Schwellenwert
  • die Trefferquote
  • false_positive_rate
  • true_positives
  • false_positives
  • true_negatives
  • false_negatives

Einschränkungen für ML.ROC_CURVE

Für die Funktion ML.ROC_CURVE gelten die folgenden Einschränkungen:

ML.ROC_CURVE-Syntax

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

model_name

model_name ist der Name des Modells, das Sie bewerten. Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie die Projekt-ID dem Modellnamen im folgenden Format voran: `[PROJECT_ID].[DATASET].[MODEL]` (einschließlich der Backticks); zum Beispiel `myproject.mydataset.mymodel`.

table_name

(Optional) table_name ist der Name der Eingabetabelle, die die Bewertungsdaten enthält. Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Tabellennamen die Projekt-ID im folgenden Format voran: "[PROJECT_ID].[DATASET].[TABLE]" (einschließlich der Backticks); zum Beispiel `myproject.mydataset.mytable`.

Wenn table_name angegeben ist, müssen die Namen der Eingabespalten im Modell mit den Spaltennamen in der Tabelle übereinstimmen und ihre Typen sollten gemäß den BigQuery-Regeln für die implizite Erzwingung kompatibel sein. Die Eingabe muss eine Spalte enthalten, die dem Namen der Labelspalte entspricht, die während des Trainings angegeben wurde. Dieser Wert wird mit der Option input_label_cols bereitgestellt. Wenn input_label_cols nicht angegeben ist, wird in den Trainingsdaten die Spalte "label" verwendet.

Wenn weder table_name noch query_statement angegeben ist, berechnet ML.ROC_CURVE die Ergebnisse der ROC-Kurve so:

  • Wenn die Daten während des Trainings aufgeteilt werden, werden die aufgeteilten Bewertungsdaten zum Berechnen der Ergebnisse der ROC-Kurve verwendet.
  • Wenn die Daten während des Trainings nicht aufgeteilt werden, wird die gesamte Trainingseingabe zum Berechnen der Ergebnisse der ROC-Kurve verwendet.

query_statement

(Optional) Die query_statement-Klausel gibt die Standard-SQL-Abfrage an, die zum Generieren der Auswertungsdaten verwendet wird. Die unterstützte SQL-Syntax der query_statement-Klausel finden Sie auf der Seite Standard-SQL-Abfragesyntax.

Wenn query_statement angegeben ist, müssen die Namen der Eingabespalten aus der Abfrage mit den Spaltennamen im Modell übereinstimmen und ihre Typen sollten gemäß den BigQuery-Regeln für die implizite Erzwingung kompatibel sein. Die Eingabe muss eine Spalte enthalten, die dem Namen der Labelspalte entspricht, die während des Trainings angegeben wurde. Dieser Wert wird mit der Option input_label_cols bereitgestellt. Wenn input_label_cols nicht angegeben ist, wird in den Trainingsdaten die Spalte "label" verwendet. Die zusätzlichen Spalten werden ignoriert.

Wenn die TRANSFORM-Klausel in derCREATE MODEL-Anweisung zum Erstellen von model_name enthalten war, müssen in query_statement nur die in der TRANSFORM-Klausel angegebenen Eingabespalten vorhanden sein.

Wenn weder table_name noch query_statement angegeben ist, berechnet ML.ROC_CURVE die Ergebnisse der ROC-Kurve so:

  • Wenn die Daten während des Trainings aufgeteilt werden, werden die aufgeteilten Bewertungsdaten zum Berechnen der Ergebnisse der ROC-Kurve verwendet.
  • Wenn die Daten während des Trainings nicht aufgeteilt werden, wird die gesamte Trainingseingabe zum Berechnen der Ergebnisse der ROC-Kurve verwendet.

thresholds

(Optional) thresholds sind die Perzentilwerte der Vorhersageausgabe, die über die GENERATE_ARRAY-Funktion bereitgestellt werden. Die bereitgestellten Werte sollten vom Typ DOUBLE sein.

Wenn Sie die zu verwendenden Schwellenwerte nicht angeben, werden sie basierend auf den Werten der Vorhersageausgabe unter Verwendung von ca. 100 Quantilen automatisch ausgewählt: APPROX_QUANTILES(predicted_label, 100).

Beispiele für ML.ROC_CURVE

In den folgenden Beispielen wird davon ausgegangen, dass sich Modell und Eingabetabelle in Ihrem Standardprojekt befinden.

ROC-Kurve eines logistischen Regressionsmodells bewerten

Die folgende Abfrage gibt diese Spalten zurück: threshold, recall, false_positive_rate, true_positives, false_positives, true_negatives und false_negatives. Trefferquote und FPR (False Positive Rate) lassen sich in einer ROC-Kurve grafisch darstellen. Die zurückgegebenen Schwellenwerte werden basierend auf den Perzentilwerten der Vorhersageausgabe ausgewählt.

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

ROC-Kurve mit benutzerdefinierten Schwellenwerten bewerten

Die folgende Abfrage gibt die gleichen Spalten wie im vorherigen Beispiel zurück. Die zurückgegebenen Schwellenwerte werden basierend auf der Ausgabe der GENERATE_ARRAY-Funktion ausgewählt.

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

Genauigkeits- und Trefferquotenkurve bewerten

Bei der folgenden Abfrage wird anstelle einer ROC-Kurve (Trefferquote und FPR im Vergleich) eine Genauigkeits- und Trefferquotenkurve berechnet. Hierzu wird die Trefferquote aus der Anzahl echt positiver und falsch positiver Meldungen verwendet.

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