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
- przeglądarka, np. Chrome lub Firefox;
- Podstawowa znajomość SQL lub BigQuery
- Dokumentacja BQML
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- 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ć.



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

Przewiń menu w dół i kliknij BigQuery:

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

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.

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

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:

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 SELECT i FROM 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:

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 BY i ORDER 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:

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:

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
- Więcej informacji o BQML znajdziesz w dokumentacji.