Wprowadzenie do BigQuery ML

1. Przegląd

Systemy uczące się w BigQuery (BQML) umożliwiają użytkownikom 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 ani Google Workspace, musisz je utworzyć.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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 konsoli Cloud, 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 bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Otwieranie konsoli BigQuery

W Google Play 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 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;

Jako kryteria tego, czy transakcja została przeprowadzona, używamy systemu operacyjnego urządzenia odwiedzającego, tego, czy jest to urządzenie mobilne, kraju odwiedzającego i liczby 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 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”. Ograniczamy też liczbę punktów danych do 100 tys., aby zaoszczędzić trochę czasu. Jeśli się nie spieszysz, 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 szkolenia

Jeśli chcesz uzyskać informacje 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 oblicza się poszczególne rodzaje danych i co one oznaczają, zapoznaj się z glosariuszem terminów dotyczących uczenia maszynowego lub wyszukaj odpowiednie 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 czasowego, 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 SELECT, GROUP BYORDER BY. Parametr LIMIT jest używany w tym poleceniu, abyśmy otrzymywali 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 tworzenia prognoz

Następne kroki