1. Wprowadzenie
W ramach tego ćwiczenia w Codelabs utworzymy model prognozowania wyników filmu z użyciem niestandardowego modelu BigQuery ML, który korzysta tylko z języka SQL, i wdrożymy go w VertexAI. Dowiesz się:
- Jak utworzyć zbiór danych BigQuery za pomocą Cloud Shell i wczytać dane z pliku
- Jak używać BigQuery ML do uczenia nadzorowanego, aby utworzyć wieloklasowy model prognozowania regresji na potrzeby prognozy wyniku filmu bez konieczności kodowania, ale tylko przy użyciu zapytań SQL
Co utworzysz
Utworzysz
- Zbiór danych BigQuery zawierający komponenty tabeli i modelu
- Model BigQuery ML do prognozowania oceny filmu za pomocą zapytań SQL
- Wdrażanie modelu w rejestrze modeli Vertex AI
Wymagania
2. Tworzenie projektu
- W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt Google Cloud.
- Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
- Otwórz BigQuery, aby włączyć interfejs API. Możesz też otworzyć interfejs internetowy BigQuery bezpośrednio, wpisując w przeglądarce ten adres URL: https://console.cloud.google.com/bigquery
3. Aktywowanie Cloud Shell
- Użyjesz Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud, które ma wstępnie zainstalowane narzędzie bq. W konsoli Cloud kliknij Aktywuj Cloud Shell w prawym górnym rogu:
- Po nawiązaniu połączenia z Cloud Shell powinno pojawić się informacja, że użytkownik jest już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu. Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
- Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt
gcloud config list project
- Jeśli Twój projekt nie jest skonfigurowany, ustaw go za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Więcej informacji o poleceniach i sposobie korzystania z gcloud znajdziesz w dokumentacji.
4. Przygotowuję dane do trenowania
To ważny krok we wszystkich projektach, usługach i aplikacjach związanych z danymi, który wymaga nie tylko specjalistycznej wiedzy w danej dziedzinie, ale też odpowiedniej technologii, aby przygotować optymalny zbiór danych i przygotować go do projektu ML. Na potrzeby tego ćwiczenia z programowania użyjemy wcześniej przygotowanego pliku data.
5. Tworzę i wczytuję zbiór danych
Zbiór danych BigQuery to zbiór tabel. Wszystkie tabele w zbiorze danych są przechowywane w tej samej lokalizacji danych. Możesz też dołączyć niestandardowe kontrole dostępu, aby ograniczyć dostęp do zbioru danych i jego tabel.
- W Cloud Shell użyj polecenia bq mk, aby utworzyć zbiór danych o nazwie „movies”.
bq mk --location=<<LOCATION>> movies
Jako lokalizację ustaw region (asia-south1).
- Upewnij się, że masz gotowy plik danych (.csv). Aby skopiować repozytorium i przejść do projektu, uruchom te polecenia w Cloud Shell:
git clone <<repository link>>
cd movie-score
- Użyj polecenia bq load, aby wczytać plik CSV do tabeli BigQuery (pamiętaj, że możesz też przesyłać dane bezpośrednio z interfejsu BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
Opis opcji: –source_format=CSV – podczas analizowania pliku danych używany jest format danych CSV. –skip_leading_rows=1 – pomija pierwszy wiersz w pliku CSV, ponieważ jest to wiersz nagłówka. Movies.movies (pierwszy argument pozycji) – określa, do której tabeli mają zostać wczytane dane. ./movies.csv – drugi argument pozycjonowania – określa, który plik ma zostać wczytany. Oprócz plików lokalnych polecenie bq load może też wczytywać pliki z Cloud Storage z identyfikatorami URI gs://mój_zasobnik/ścieżka/do/pliku. Schemat, który można zdefiniować w pliku schematu JSON lub w postaci listy rozdzielanej przecinkami (użyj listy rozdzielanej przecinkami). Świetnie! Nasze dane CSV są teraz wczytywane do tabeli Movies.movies.
- Wyślij zapytanie na jeden z 3 sposobów:
Możemy wchodzić w interakcje z BigQuery na 3 sposoby. Wypróbujemy 2 z nich: Internetowy interfejs użytkownika BigQuery b. Polecenie bq c. Interfejs API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
Do uruchamiania zapytań używam obszaru roboczego BigQuery Web SQL. Obszar roboczy SQL wygląda tak:
Przy użyciu polecenia bq:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. Przewidywanie oceny filmu w skali od 1 do 10
BigQuery ML obsługuje uczenie nadzorowane z typem modelu regresji logistycznej. Typu modelu binarnej regresji logistycznej możesz użyć, aby przewidywać, czy wartość należy do jednej z dwóch kategorii: lub możesz użyć modelu regresji wieloklasowej, by przewidzieć, czy wartość należy do jednej z wielu kategorii. Są to tak zwane problemy klasyfikacji, ponieważ próbują sklasyfikować dane w co najmniej 2 kategoriach.
Krótka uwaga na temat wyboru modelu: jest to eksperymentalna opcja wyboru modelu w oparciu o ocenę wyników, którą początkowo sprawdziłem na kilku modelach, a na koniec wybrałem LOGISTIC REG, aby zachować prostotę i zbliżyć wyniki do rzeczywistej oceny filmów z kilku baz danych. Pamiętaj, że należy to traktować tylko jako przykład implementacji modelu i NIEkoniecznie jest zalecanym modelem w tym przypadku użycia. Innym sposobem na wdrożenie tej funkcji jest prognozowanie wyniku filmu jako DOBRY / ZŁY przy użyciu modelu regresji logistycznej zamiast przewidywania wyniku.
Wybieranie danych treningowych
Podzieliliśmy już dane dotyczące filmów (w pliku CSV) na 3 kategorie w tabeli przy użyciu pola „data_cat” z jedną z 3 wartości – TRAIN, TEST lub PREDICT. Ważnym aspektem modelu jest podział zbioru danych na potrzeby testowania i trenowania. Więcej informacji o dzieleniu zbiorów danych znajdziesz w dokumentacji.
Tworzenie modelu regresji logistycznej
Możemy użyć instrukcji CREATE MODEL z opcją „LOGISTIC_REG” aby utworzyć i wytrenować model regresji logistycznej.
Uruchom poniższe zapytanie w obszarze roboczym SQL w interfejsie internetowym BigQuery:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Szczegóły zapytania:
- Instrukcja CREATE MODEL trenuje model za pomocą danych treningowych w instrukcji SELECT
- Klauzula OPTIONS określa typ modelu i opcje trenowania. W tym przypadku opcja LOGISTIC_REG określa typ modelu regresji logistycznej. Nie musisz określać modelu binarnej regresji logistycznej w porównaniu z wieloklasowym modelem regresji logistycznej: BigQuery ML może określić, który model ma zostać trenowany, na podstawie liczby unikalnych wartości w kolumnie etykiet.
- data_split_method=‘NO_SPLIT' wymusza trenowanie BQML na danych zgodnie z warunkami zapytania (data_cat = „TRAIN”). Pamiętaj też, że lepiej jest użyć funkcji „AUTO_SPLIT” w tej opcji, aby umożliwić platformie (lub w tym przypadku usłudze) losowe podziały na trenowanie i testy
- Opcjainput_label_cols określa, która kolumna w instrukcji SELECT ma być używana jako kolumna etykiet. W tym przypadku kolumna etykiet zawiera wynik, więc model uczy się, która z 10 wartości wyniku jest najbardziej prawdopodobna, na podstawie innych wartości obecnych w każdym wierszu
- „auto_class_weights=TRUE” równoważy etykiety klas w danych treningowych. Domyślnie dane treningowe nie mają wagi. Jeśli etykiety w danych treningowych są nierównomierne, model może nauczyć się w większym stopniu przewidywać najpopularniejszą klasę etykiet
- Instrukcja SELECT wysyła zapytania do tabeli wczytanej z danymi CSV. Klauzula WHERE filtruje wiersze w tabeli wejściowej, tak aby w tym kroku był wybrany tylko zbiór danych TRAIN
Po utworzeniu w sekcji SCHEMA w obszarze roboczym BigQuery SQL pojawi się poniższy element:
Etykiety
Funkcje
Ocena modelu regresji logistycznej
Po utworzeniu modelu oceń jego wydajność za pomocą funkcji ML.EVALUATE. Funkcja ML.EVALUATE ocenia prognozowane wartości w porównaniu z rzeczywistymi danymi. Zapytanie oceniające model wygląda tak:
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
Funkcja ML.EVALUATE wykorzystuje model wytrenowany w poprzednim kroku i dane oceny zwrócone przez zapytanie podrzędne SELECT. Funkcja zwraca jeden wiersz statystyk dotyczących modelu.
Ponieważ została przeprowadzona regresja logistyczna, wyniki obejmują dane widoczne na zrzucie ekranu powyżej – precyzję, czułość, dokładność, wynik f1, log_loss i roc_auc, które mają naprawdę kluczowe znaczenie przy ocenie wydajności modelu. Możesz też wywołać funkcję ML.EVALUATE bez podawania danych wejściowych. Funkcja ML.EVALUATE pobiera wskaźniki oceny uzyskane podczas trenowania, które korzystają z automatycznie zarezerwowanego zbioru danych do oceny.
Kluczowe dane w skrócie:
Precyzja – jaka część identyfikacji pozytywnych była prawidłowa? Precyzja = wynik prawdziwie pozytywny / (prawdziwie pozytywny + fałszywie pozytywny) czułość – jaki odsetek rzeczywistych wyników pozytywnych został zidentyfikowany prawidłowo? Czułość = wynik prawdziwie pozytywny / (prawdziwie pozytywny + wynik fałszywie negatywny) – wskaźnik do oceny modeli klasyfikacji. Jest to odsetek prognoz, które nasz model faktycznie uzyskał prawidłowe prognozy Dokładność = liczba poprawnych prognoz / całkowita liczba prognoz
Prognozowanie oceny filmu przy użyciu ML.PREDICT
To zapytanie przewiduje wynik każdego filmu w części PREDICT zbioru danych.
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
Oto fragment wyników:
Wynik modelu pokazuje przewidywany SCORE filmu w skali od 1 do 10 (klasyfikacja). Być może zastanawiasz się, dlaczego przy każdym filmie jest kilka wierszy prognoz. Dzieje się tak, ponieważ model zwrócił możliwe prognozowane etykiety i prawdopodobieństwo wystąpienia każdej z nich w kolejności malejącej.
Analizowanie prognozowanych wyników i modelu
Dodatkowo w ramach prognozowania wyników można wykonać 2 świetne kroki analizy:
- Aby dowiedzieć się, dlaczego model generuje te wyniki prognoz, możesz użyć funkcji ML.EXPLAIN_PREDICT
- Aby dowiedzieć się, które funkcje są najważniejsze, możesz użyć funkcji ML.GLOBAL_EXPLAIN
Szczegółowe informacje na temat tych kroków znajdziesz w dokumentacji.
7. Prognozowanie oceny filmu przy użyciu BigQuery AutoML
AutoML świetnie się sprawdza, jeśli chcesz pozwolić usłudze BigQuery utworzyć model za Ciebie i poczekać na wygenerowanie jego wyników. Funkcja AUTOML jest dostępna bezpośrednio w BQML (model_type=AUTOML_CLASSIFIER lub AUTOML_REGRESSOR) i znacznie łatwiej można ją wywołać, jeśli dane są już w BigQuery.
CREATE OR REPLACE MODEL movies.auto_movies
OPTIONS(model_type='AUTOML_CLASSIFIER',
input_label_cols=['score'],
budget_hours=1.0)
AS
SELECT
* EXCEPT(id, data_cat)
FROM
movies.movies_score;
Po utworzeniu modelu możesz wykonać czynności EVALUATE, PREDICT i EXPLAIN_PREDICT, które omówiliśmy w niestandardowym modelu BQML. Więcej informacji o BigQuery AutoML znajdziesz w dokumentacji.
8. Wdrażanie modeli BQML w Vertex AI Model Registry jednym kliknięciem
Możesz teraz wyświetlać wszystkie modele ML w Vertex AI Model Registry, co ułatwi Twojej organizacji wdrażanie modeli i zarządzanie nimi. Obejmuje to modele stworzone z użyciem BigQuery ML i AutoML oraz modele wytrenowane niestandardowo. W tym celu wykonaj poniższe czynności:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
model_registry='vertex_ai',
vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Dołącz model_registrar="vertex_ai" w zapytaniu UTWÓRZ MODEL, aby BigQuery ML mógł wybierać modele, które chce zarejestrować w Vertex AI Model Registry. Więcej informacji na ten temat znajdziesz na tym blogu.
9. Podsumowanie
W ciągu niecałych 30 minut:
- Skonfigurować BigQuery jako bazę danych na potrzeby projektu analitycznego
- Utworzono niestandardowy model prognostyczny korzystający wyłącznie z kodów SQL danych BigQuery, bez żadnego innego kodowania
- Utworzenie automatycznego modelu ML BQ wykorzystującego tylko zapytania SQL
- Wdrożono model BQML w Vertex AI Model Registry
10. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym poście, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
- Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń
- W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
11. Gratulacje
Gratulacje! Udało Ci się utworzyć model prognozowania wyników filmu z użyciem niestandardowego BQML i AutoML oraz wdrożyć go w Vertex AI Model Registry, a wszystko to przy użyciu języka SQL.