Wprowadzenie do BigQuery ML

1. Przegląd

Systemy uczące się dostępne w BigQuery (BQML) umożliwiają tworzenie i uruchamianie modeli uczenia maszynowego w BigQuery za pomocą zapytań SQL. Celem jest demokratyzacja uczenia maszynowego poprzez umożliwienie specjalistom SQL tworzenia modeli przy użyciu istniejących narzędzi oraz zwiększenie szybkości programowania przez wyeliminowanie konieczności przenoszenia danych.

Co utworzysz

Do utworzenia modelu, który będzie prognozować, czy użytkownik dokona transakcji, użyjesz przykładowego zbioru danych Analytics 360.

Czego się nauczysz

Tworzenie, ocenianie i używanie modeli uczenia maszynowego w BigQuery

Czego potrzebujesz

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail lub Google Workspace, musisz je utworzyć.

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego laboratorium będzie on nazywany PROJECT_ID.

  1. Następnie musisz włączyć rozliczenia w Cloud Console, aby korzystać z zasobów Google Cloud.

Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Wykonaj instrukcje z sekcji „Czyszczenie”, w której znajdziesz informacje o tym, jak wyłączyć zasoby, aby uniknąć naliczenia opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokoś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

Konsola BigQuery otworzy się w nowej karcie przeglądarki. Będzie wyglądać tak:

8b0218390329e8cf.png

Ale nic tu nie ma! Na szczęście w BigQuery jest mnóstwo publicznych zbiorów danych, które możesz przeglądać.

3. Tworzenie zbioru danych

Aby utworzyć zbiór danych, kliknij strzałkę obok nazwy projektu i wybierz Utwórz nowy zbiór danych.

4f51bf57291a59db.png

Następnie nadaj zbiorowi danych nazwę bqml_codelab i kliknij OK.

63e32478a5652fbc.png

4. Utwórz model

Regresja logistyczna w Analytics 360

Przejdźmy teraz do naszego zadania. Oto jak utworzyć model, który będzie przewidywać, czy odwiedzający 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;

Jako kryteria tego, czy transakcja została dokonana, wykorzystujemy system operacyjny urządzenia użytkownika, to, czy jest to urządzenie mobilne, kraj użytkownika i liczbę wyświetleń strony.

W tym przypadku „codelab” to nazwa zbioru danych, a „sample_model” to nazwa naszego modelu. Określony typ modelu to binarna regresja logistyczna. W tym przypadku label to wartość, do której chcemy dopasować funkcję. Pamiętaj, że jeśli interesuje Cię tylko 1 kolumna, jest to alternatywny sposób ustawienia wartości input_label_cols. Ograniczamy też dane treningowe do tych, które zostały zebrane w okresie od 1 sierpnia 2016 r. do 31 czerwca 2017 r. Robimy to, aby zapisać dane z ostatniego miesiąca na potrzeby „prognozy”. Ponadto ograniczamy liczbę punktów danych do 100 tys., aby zaoszczędzić trochę czasu. Jeśli nie spieszysz się, możesz usunąć ostatni wiersz.

Uruchomienie polecenia CREATE MODEL powoduje utworzenie zadania zapytania, które będzie działać asynchronicznie, dzięki czemu możesz na przykład zamknąć lub odświeżyć okno interfejsu BigQuery.

[Opcjonalnie] Informacje o modelu i statystyki trenowania

Jeśli chcesz dowiedzieć się więcej o modelu, kliknij sample_model w zbiorze danych bqml_codelab w interfejsie. W sekcji Szczegóły znajdziesz podstawowe informacje o modelu i opcje trenowania użyte do jego utworzenia. W sekcji Statystyki treningu powinna być widoczna tabela podobna do tej:

b8bd9548a0d89165.png

5. Ocena modelu

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 te kolumny: mean_absolute_error, mean_squared_error, mean_squared_log_error, median_absolute_error, r2_score, explained_variance. Jeśli powyższe zapytanie zostanie użyte z modelem regresji logistycznej, zwróci te kolumny: precision, recall, accuracy, f1_score, log_loss, roc_auc. Aby dowiedzieć się, jak obliczane są poszczególne rodzaje danych i co oznaczają, zapoznaj się z glosariuszem terminów dotyczących uczenia maszynowego lub wyszukaj te informacje w Google.

Zauważysz, że części zapytania SELECTFROM są identyczne z tymi, które były używane podczas trenowania. Część WHERE odzwierciedla zmianę przedziału czasu, a część FROM pokazuje, że wywołujemy ml.EVALUATE. Powinna tam być widoczna tabela podobna do tej:

1c7779f6028730cc.png

6. Korzystanie z modelu

Prognozowanie zakupów w poszczególnych krajach

Tutaj próbujemy przewidzieć liczbę transakcji dokonanych przez użytkowników z poszczególnych krajów, posortować wyniki i wybrać 10 krajów z największą liczbą 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 oceniającego, które pokazaliśmy w poprzedniej sekcji. Zamiast ml.EVALUATE używamy tutaj ml.PREDICT, a część zapytania BQML otaczamy poleceniami standardowej wersji SQL. Interesuje nas konkretnie kraj i suma zakupów w każdym kraju, dlatego używamy funkcji SELECT, GROUP BYORDER BY. Parametr LIMIT jest używany w tym przypadku, aby zapewnić, że otrzymamy tylko 10 najlepszych wyników. Powinna tam być widoczna tabela podobna do tej:

e639f7a409741dcb.png

Prognozowanie zakupów na użytkownika

Oto kolejny przykład. Tym razem spróbujemy przewidzieć liczbę transakcji każdego użytkownika, posortować wyniki i wybrać 10 użytkowników z największą liczbą 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 tam być widoczna tabela podobna do tej:

2be1d8fa96e10178.png

7. Gratulacje!

To już koniec tego ćwiczenia. Szukasz wyzwania? Spróbuj utworzyć model regresji liniowej za pomocą BQML.

Omówione zagadnienia

  • Tworzenie binarnego modelu regresji logistycznej
  • Ocena modelu
  • Używanie modelu do prognozowania

Następne kroki