Einführung in maschinelles Lernen in BigQuery: lineare Regression

Die lineare Regression ist eine Methode bei der versucht wird eine lineare Funktionskurve zu finden, die möglichst gut zu vorgegebenen den Datenpunkten passt.

Die ermittelte Funktion ist die Grundlage für das darauf aufbauende Vorhersagemodell.

Mit überschaubaren Datasets ist es oft am einfachsten die lineare Regression einfach in Excel durchzuführen. Zur Anschauen wollen wir das heute in BigQuery tun.

Der Beispieldatensatz: HIER (Dieser kann zum Beispiel über den Umweg in Google Sheets zu BQ importiert werden).

Erklärung des Beispieldatensatzes

Wir haben neben der Spalte Monat noch die Spalten Werbeausgaben, die die Werbeausgaben in dem Monat in Geldeinheiten darstellt und die Spalte Umsätze (die perspektivisch vorhergesagt werden soll) sowie die Spalte Sale. In der Spalte Sale, steht Sale, wenn es Rabatte gab und kein Sale, wenn es keine gab.

Für BigQuery haben wir dafür folgendes Schema gebaut:

Erstellung des Models

Wir können die Create Model Funktion nutzen, um unser Model zu erstellen. Wir müssen nur das Modell anpassen (linear_regression) und die Zielvariable (Umsatz).

Bei der Spalte Sale handelt es sich um eine Kategorie, nicht um eine Zahl; sie muss ein String sein, damit BigQuery es als Kategorie kodiert.

Hier ist der Code für das Model:


CREATE OR REPLACE MODEL `beispieldatensatz-341222.lineare_regression_mit_BQ_ML.linear_model`

OPTIONS
  (model_type='linear_reg',
    input_label_cols=['Ums__tze']) AS

SELECT
  Werbeausgaben
  ,Sale
  ,Ums__tze
  
FROM `beispieldatensatz-341222.lineare_regression_mit_BQ_ML.lineare_regression_mit_BQ_ML_drive`
WHERE Ums__tze IS NOT NULL 

Das Model wird dann direkt in unserem Dataset gespeichert:

Mit der Funktion ML.EVALUATE können wir sehen, wie gut unser Modell funktioniert. Die Funktion benötigt einen Modellnamen und eine Tabelle. Die Tabelle sollte das gleiche Schema haben wie die Tabelle, mit der das Modell erstellt wurde.

Hier ist der Code:

SELECT * FROM
ML.EVALUATE(
  MODEL `beispieldatensatz-341222.lineare_regression_mit_BQ_ML.linear_model`, 
  (
  SELECT
    Werbeausgaben
    ,Sale
    ,Ums__tze
  FROM
    `beispieldatensatz-341222.lineare_regression_mit_BQ_ML.lineare_regression_mit_BQ_ML_drive`
  WHERE
     Ums__tze IS NOT NULL 
  )
)

mean_absolute_error: Der durchschnittliche Abstand zwischen dem vorhergesagten Wert und dem tatsächlichen Wert. Kleiner ist besser.
mean_squared_error: Wird zur Bewertung der statistischen Signifikanz verwendet. Kleiner ist besser.
mean_squared_log_error: Wird als numerisch stabile Kostenfunktion beim Gradientenabstieg für das Training des Modells verwendet. Kleiner ist besser.
median_absolute_error: Ein Maß, das robuster gegenüber Ausreißern ist. Kleiner ist besser.
r2_score: Bestimmtheitskoeffizient. Höher ist besser.
explained_variance: Der Anteil der erklärten Varianz. Höher ist besser.

BigQuery standardisiert die numerischen Eingaben in ein Regressionsmodell, bevor es das Modell anpasst. Das bedeutet, dass wir bei der Interpretation der Gewichte des Modells sehr vorsichtig sein müssen. Wir können die Funktion ML.WEIGHTS zusammen mit der Funktion ML.FEATURE_INFO verwenden, um eine Interpretation zusammenzustellen.

Ohne Berücksichtigung der Vorverarbeitung ist die Interpretation der Gewichte sinnlos.

Der folgende Code gibt uns die benötigten Informationen:

SELECT * FROM 
# Info for destandardizing
ML.FEATURE_INFO(MODEL `beispieldatensatz-341222.lineare_regression_mit_BQ_ML.linear_model`)
LEFT JOIN
# Model coefficients
ML.WEIGHTS(MODEL `beispieldatensatz-341222.lineare_regression_mit_BQ_ML.linear_model`)
ON 
input = processed_input

Vorhersage mit dem Model

Jetzt nutzen wir unser Vorhersagemodel um für eine Tabelle von Sale/Werbeausgabe-Paaren uns jeweils die Umsätze prognostizieren zu lassen. Die Tabelle erstellen wir einfach schnell in Excel und importieren sie über Google Sheets zu BigQuery:

Darauf aufbauend können wir die Prognose abrufen mit folgender Abfrage:

SELECT * FROM
ML.PREDICT(MODEL `beispieldatensatz-341222.lineare_regression_mit_BQ_ML.linear_model`,
  (
  SELECT
    Werbeausgaben
    ,Sale

  FROM
    `beispieldatensatz-341222.lineare_regression_mit_BQ_ML.Input_Vorhersage`
 
 )
  )

Ergebnis sieht folgendermaßen aus:

Wenn wir das noch anfüttern mit weiteren Informationen (Bsp. Kosten-Struktur ), haben wir mit wenigen Zeilen Code in kurzer Zeit ein Prognosemodell für die Marketingabteilung gebaut.