Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Schluss mit dem Schreck bei der Google Cloud-Rechnung

By Gad BenramAug 13, 20184 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

1 n7pqsiokjmjskzeevalnqg

Mit Google BigQuery ML prognostizieren Sie Ihre Google Cloud-Kosten in wenigen Minuten – ohne die BigQuery-Konsole zu verlassen.

Einleitung

Lineare Regression ist zwar denkbar einfach, eignet sich aber hervorragend, um für ganz unterschiedliche Praxisprobleme präzise Vorhersagen zu liefern. Dank ihrer schlanken Struktur lässt sich das Training problemlos konfigurieren und konvergiert schnell.

In diesem Beitrag zeige ich, wie Sie Google Cloud-Abrechnungsdaten analysieren und ein einfaches Vorhersagemodell aufbauen, mit dem sich die voraussichtlichen Monatsausgaben abschätzen lassen. Um die Sache spannender zu machen, setze ich ausschließlich auf Google BigQuery – so bleiben sämtliche Abrechnungsdaten im Data-Warehouse-Ökosystem.

Für diese Übung greife ich auf Google Billing Exports zurück. Über den Billing Export nach BigQuery lassen sich tägliche Nutzungs- und Kostendaten automatisch und fortlaufend in ein BigQuery-Dataset Ihrer Wahl exportieren. Mehr zu Google Billing Exports lesen Sie hier.

Die Daten und Code-Beispiele finden Sie hier: https://github.com/doitintl/BigQueryML-Examples

Rohdaten

Die folgende Tabelle zeigt die Abrechnungen verschiedener Services aus zwei unserer Google Cloud-Abrechnungskonten.

1 vb3ozvak6g fgxwzr4fqjwBeispieldaten aus Google Billing Exports nach BigQuery

Das angestrebte Modell

Ziel ist es, die Gesamtrechnung des laufenden Monats auf Basis aller bis zu einem bestimmten Tag eingegangenen Abrechnungen zu schätzen.

Damit kann der Kunde nicht nur seine Gesamtausgaben einschätzen, sondern auch Anomalien erkennen und Alerts bei Überschreitungen auslösen.

Annahmen

Das Modell geht davon aus, dass die Monatsrechnung linear von 3 Variablen abhängt:

1 wrfnb4izknofssyeq8uoqg

Die erste Variable bildet den aktuellen Trend des täglichen Verbrauchs ab. Die beiden anderen sind die verbleibenden Tage bis zum Monatsende und der aktuelle Saldo. Auf dieser Basis schätzt das Modell die noch ausstehenden Monatsausgaben.

Daten auf Tagesebene aggregieren

Da das Modell Daten auf Tagesebene benötigt, aggregieren wir sie mit BigQuery pro Tag.

https://gist.github.com/gidutz/2ce58c9391c979b63ac1bbe3bfece7c5

Das resultierende Schema sieht so aus:

account_name — die Konto-ID

day — verbleibende Tage bis zum Monatsende

month — Abrechnungsmonat

year — Abrechnungsjahr

daily_cost — die Gesamtkosten aller Services für den jeweiligen Abrechnungstag

monthly_cost — das Label, also die Summe aller Abrechnungen des laufenden Monats inklusive zukünftiger Buchungen

Sobald die Daten auf Tagesebene aggregiert sind, speichere ich sie als neue Tabelle und nutze sie zum Erstellen eines ML-Datasets.

1 a2qffeux7bxvnf4qcwzhga

Window-Aggregationen berechnen

Im nächsten Schritt berechnen wir, wie viel jedem Konto vom Monatsanfang bis zum aktuellen Tag berechnet wurde. Dafür nutzen wir eine aggregierende Window-Funktion. Damit lassen sich auch die durchschnittlichen Tagesausgaben des Monats bis zum aktuellen Tag ermitteln.

Die Syntax der aggregierenden Window-Funktion finden Sie hier: [1]

analytic_function_name ( [ argument_list ] )
OVER (
[ PARTITION BY partition_expression_list ]
[ ORDER BY expression [{ ASC | DESC }] [, ...] ]
[ window_frame_clause ]
)

Auf unsere Tabelle billing_daily_monthly wende ich die Funktion so an:

https://gist.github.com/gidutz/da662ead3e013c45436b10b574585c06

Beim Visualisieren der Daten zeigt sich, dass die Monatsrechnung weitgehend linear anwächst:

0 rzdik1lnm28mhc1l

Die Ergebnisse bestätigen, dass ein lineares Modell für das Kostenproblem die richtige Wahl ist. Zudem variiert der Gradient zwischen den Monaten kaum – ein Hinweis darauf, dass die gewählten Features hinreichende Statistiken in Bezug auf die unabhängige Variable sind.

Natürlich liefern mehr Features und komplexere Modelle in der Regel genauere Vorhersagen – die lassen sich mit Tools wie Google Cloud ML umsetzen. Fürs Erste ist die Datenaufbereitung damit aber abgeschlossen.

(JUHU!)

Lineares Regressionsmodell mit BigQuery ML trainieren

Sobald die Daten bereitstehen, kann ich das neue (seit August 2018 verfügbare) BigQuery ML-Tool nutzen, um ein lineares Regressionsmodell auf die Daten zu trainieren.

Das Modell an unser Dataset anzupassen, ist wahnsinnig einfach!

https://gist.github.com/gidutz/7a0bd510494285fd679cde71944e9d77

Vorhersagen erzeugen und das Modell evaluieren

Einmal gespeichert, lässt sich das Modell für Vorhersagen nutzen. Dafür verwende ich die folgende Query – sie schätzt die finalen Monatsausgaben und berechnet zugleich den Relative Absolute Error der Vorhersagen pro Tag:

https://gist.github.com/gidutz/f7de19eee11478d75757e4bdc3b25001

Die Ergebnisse in der folgenden Tabelle lassen sich speichern und in weiteren Systemkomponenten weiterverwenden, etwa für Monitoring- und Alerting-Anwendungen. Der Mean Relative Absolute Error des Modells liegt bei rund 3,0 % – ein durchaus solider Wert. (Hinweis: Die Daten wurden eigens für diese Demo generiert. Mit echten Daten habe ich rund 2,0 % Fehler erreicht.)

1 ef6msvlrw1gdlnxuhvxk0qBeispielvorhersage

Lust auf mehr? Schauen Sie in unserem Blog vorbei oder folgen Sie Gad auf Twitter.

Danksagungen: Vadim Solovey — Lektorat

amiel m — Technisches Review

Keywords: BigQueryML, BigQuery ML Tutorial, BigQuery ML Beispiel