1. Omówienie
BigQuery ML (BQML) umożliwia użytkownikom tworzenie i uruchamianie modeli systemów uczących się w BigQuery przy użyciu zapytań SQL. Celem jest upowszechnianie systemów uczących się przez umożliwienie użytkownikom praktycznego języka SQL tworzenia modeli przy użyciu istniejących narzędzi oraz przyspieszenie programowania przez wyeliminowanie konieczności przenoszenia danych.
Co utworzysz
Korzystając z przykładowego zbioru danych Analytics 360, utworzysz model prognozujący, czy użytkownik dokona transakcji.
Czego się nauczysz
Jak tworzyć, oceniać i wykorzystywać modele systemów uczących się w BigQuery
Czego potrzebujesz
- przeglądarkę, np. Chrome lub Firefox;
- Podstawowa znajomość języka SQL lub BigQuery
- Dokumentacja BQML
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia w Codelabs będzie ona określana jako PROJECT_ID
.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.
Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Otwieranie konsoli BigQuery
W Google Developer Console kliknij ikonę Menu w lewym górnym rogu ekranu.
Przewiń menu w dół i kliknij BigQuery:
Spowoduje to otwarcie konsoli BigQuery w nowej karcie przeglądarki, która będzie wyglądać tak:
Ale tu nic nie ma! Na szczęście w BigQuery dostępnych jest wiele publicznych zbiorów danych, które możesz przeglądać.
3. Tworzenie zbioru danych
Aby utworzyć zbiór danych, kliknij strzałkę przy nazwie projektu i wybierz utwórz nowy zbiór danych.
Następnie nazwij zbiór danych bqml_codelab i kliknij OK.
4. Utwórz model
Regresja logistyczna w Analytics 360
Teraz przejdźmy do zadania. Oto w jaki sposób można utworzyć model do prognozowania, czy użytkownik dokona transakcji.
#standardSQL CREATE OR REPLACE MODEL `bqml_codelab.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170631' LIMIT 100000;
W tym przypadku kryteria dokonanej transakcji są oparte na systemie operacyjnym urządzenia, niezależnie od tego, czy jest to urządzenie mobilne, kraju użytkownika oraz liczby wyświetleń strony.
W tym przypadku chodzi o „codelab” to nazwa zbioru danych i „sample_model” to nazwa naszego modelu. Podany typ modelu to binarna regresja logistyczna. W tym przypadku staramy się dopasować label
. Jeśli interesują Cię tylko 1 kolumna, możesz użyć tego innego sposobu ustawienia input_label_cols
. Ograniczamy też dane szkoleniowe do danych zebranych między 1 sierpnia 2016 r. a 31 czerwca 2017 r. Robimy to, aby zapisać na potrzeby prognozowania dane z ostatniego miesiąca. Ograniczyliśmy też do 100 000 punktów danych, aby zaoszczędzić czas. Jeśli się nie spieszysz, możesz usunąć ostatni wiersz.
Uruchomienie polecenia CREATE MODEL powoduje utworzenie zadania zapytania, które będzie uruchamiane asynchronicznie, dzięki czemu będzie można na przykład zamknąć lub odświeżyć okno interfejsu BigQuery.
[Opcjonalnie] Informacje o modelu statystyki trenowania
Jeśli chcesz uzyskać informacje o modelu, możesz kliknąć sample_model w zbiorze danych bqml_codelab w interfejsie użytkownika. W sekcji Szczegóły znajdziesz podstawowe informacje o modelu i opcje trenowania służące do jego utworzenia. W sekcji Statystyki trenowania powinna pojawić się tabela podobna do tej:
5. Oceń model
Ocena naszego modelu
#standardSQL SELECT * FROM ml.EVALUATE(MODEL `bqml_codelab.sample_model`, ( SELECT IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "") AS country, IFNULL(totals.pageviews, 0) AS pageviews FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));
Jeśli powyższe zapytanie zostanie użyte z modelem regresji liniowej, zwróci ono te kolumny: mean_absolute_error
, mean_squared_error
, mean_squared_log_error
, median_absolute_error
, r2_score
oraz explained_variance
. Jeśli zapytanie zostanie użyte w połączeniu z modelem regresji logistycznej, zapytanie zwróci te kolumny: precision
, recall
, accuracy
, f1_score
, log_loss
oraz roc_auc
. Zapoznaj się z słownikiem dotyczącym systemów uczących się lub skorzystaj z wyszukiwarki Google, aby dowiedzieć się, jak obliczamy poszczególne wartości i co oznaczają.
Zobaczysz, że fragmenty SELECT
i FROM
zapytania są identyczne z podanymi podczas trenowania. Część WHERE
odzwierciedla zmianę w przedziale czasu, a część FROM
pokazuje, że dzwonimy pod numer ml.EVALUATE
. Powinna się pojawić tabela podobna do tej:
6. Używanie modelu
Prognozowanie liczby zakupów w poszczególnych krajach
W tym miejscu staramy się przewidzieć liczbę transakcji dokonanych przez użytkowników z poszczególnych krajów, sortować wyniki i wybrać 10 krajów o największej liczbie zakupów.
#standardSQL SELECT country, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10;
Zwróć uwagę, że to zapytanie jest bardzo podobne do zapytania służącego do oceny, które zaprezentowaliśmy w poprzedniej sekcji. Zamiast ml.EVALUATE
używamy tutaj wyrażenia ml.PREDICT
, a część BQML zawdzięczamy zapakowaniu standardowych poleceń SQL. Interesuje nas kraj i suma zakupów dla każdego z nich, więc to nam SELECT
, GROUP BY
i ORDER BY
. Wykorzystamy tu pole LIMIT
, by wyświetlić tylko 10 najlepszych wyników. Powinna się pojawić tabela podobna do tej:
Prognozowanie zakupów na użytkownika
Oto kolejny przykład. Tym razem staramy się przewidzieć liczbę transakcji dokonanych przez każdego użytkownika, sortować wyniki i wybrać 10 najpopularniejszych użytkowników według transakcji.
#standardSQL SELECT fullVisitorId, SUM(predicted_label) as total_predicted_purchases FROM ml.PREDICT(MODEL `bqml_codelab.sample_model`, ( SELECT IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0) AS pageviews, IFNULL(geoNetwork.country, "") AS country, fullVisitorId FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170801')) GROUP BY fullVisitorId ORDER BY total_predicted_purchases DESC LIMIT 10;
Powinna się pojawić tabela podobna do tej:
7. Gratulacje!
To już koniec ćwiczenia z programowania. Szukasz wyzwania? Spróbuj utworzyć model regresji liniowej za pomocą BQML.
Omówione zagadnienia
- Utwórz model binarnej regresji logistycznej
- Oceń model
- Użyj modelu do tworzenia prognoz
Następne kroki
- Więcej informacji na temat BQML znajdziesz w dokumentacji.