Wprowadzenie do BigQuery ML

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

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. 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ć.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

  1. 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.

select-bq_0.png

Przewiń menu w dół i kliknij BigQuery:

select-bq.png

Spowoduje to otwarcie konsoli BigQuery w nowej karcie przeglądarki, która będzie wyglądać tak:

8b0218390329e8cf.png

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.

4f51bf57291a59db.png

Następnie nazwij zbiór danych bqml_codelab i kliknij OK.

63e32478a5652fbc.png

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:

b8bd9548a0d89165.png

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:

1c7779f6028730cc.png

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:

e639f7a409741dcb.png

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:

2be1d8fa96e10178.png

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.