1. Wprowadzenie
W tym laboratorium programistycznym utworzymy model prognozowania oceny filmu za pomocą niestandardowego modelu BigQuery ML, korzystając tylko z SQL, a następnie wdrożymy go w Vertex AI. Dowiesz się:
- Jak utworzyć zbiór danych BigQuery za pomocą Cloud Shell i załadować dane z pliku
- Jak za pomocą BigQuery ML do uczenia nadzorowanego utworzyć model prognozowania regresji wieloklasowej do prognozowania oceny filmu bez konieczności pisania kodu, tylko za pomocą zapytań SQL
Co utworzysz
Utwórz
- Zbiór danych BigQuery zawierający komponenty tabeli i modelu
- Model BigQuery ML do przewidywania 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 projektu 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.
- Aby włączyć interfejs API, otwórz BigQuery. Interfejs internetowy BigQuery możesz też otworzyć bezpośrednio, wpisując w przeglądarce ten adres URL: https://console.cloud.google.com/bigquery.
3. Aktywowanie Cloud Shell
- Użyjesz Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie wczytane z bq: w prawym górnym rogu konsoli Cloud Shell kliknij Aktywuj Cloud Shell:
- Po połączeniu z Cloud Shell powinieneś zobaczyć, że jesteś już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu. Aby potwierdzić uwierzytelnianie, uruchom w Cloud Shell to polecenie:
gcloud auth list
- Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom to polecenie w Cloud Shell:
gcloud config list project
- Jeśli projekt nie jest ustawiony, użyj tego polecenia:
gcloud config set project <PROJECT_ID>
Informacje o poleceniach i użytkowaniu gcloud znajdziesz w dokumentacji.
4. Przygotowywanie danych do trenowania
Jest to ważny krok we wszystkich projektach, produktach i aplikacjach związanych z danymi, który wymaga dużej wiedzy specjalistycznej w danym obszarze, a także technologii do przygotowania optymalnego zbioru danych i przygotowania go do projektu uczenia maszynowego. W tym ćwiczeniu będziemy używać już przygotowanego pliku danych.
5. Tworzenie i wczytywanie zbioru 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 kontrolki 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
Ustaw lokalizację na region (asia-south1).
- Przygotuj plik danych (CSV). Aby sklonować repozytorium i przejść do projektu, uruchom w Cloud Shell te polecenia:
git clone <<repository link>>
cd movie-score
- Użyj polecenia bq load, aby załadować plik CSV do tabeli BigQuery (pamiętaj, że możesz też przesłać go 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
Opcje: –source_format=CSV – podczas analizowania pliku danych używa formatu danych CSV. –skip_leading_rows=1 – pomija pierwszy wiersz w pliku CSV, ponieważ jest to wiersz nagłówka. Movies.movies – pierwszy argument pozycyjny – określa, do której tabeli mają być ładowane dane. ./movies.csv – drugi argument pozycyjny – określa, który plik ma zostać wczytany. Oprócz plików lokalnych polecenie bq load może wczytywać pliki z Cloud Storage za pomocą identyfikatorów URI gs://moj_zasób/ścieżka/do/pliku. schemat, który można zdefiniować w pliku schematu JSON lub jako listę rozdzieloną przecinkami (użyłem listy rozdzielonej przecinkami); Świetnie! Dane w formacie CSV są teraz załadowane do tabeli movies.movies.
- Przesyłanie zapytania na 1 z 3 sposobów:
Z BigQuery możemy korzystać na 3 sposoby. Wypróbujemy 2 z nich: a. Interfejs internetowy BigQuery b. Polecenie bq c. Interfejs API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
Do wykonywania zapytań użyłem(-am) obszaru roboczego SQL BigQuery w przeglądarce. Obszar roboczy SQL wygląda tak:
Za pomocą 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 regresja logistyczna. Możesz użyć binarnego modelu regresji logistycznej, aby przewidzieć, czy dana wartość należy do jednej z 2 kategorii, albo użyć wieloklasowego modelu regresji, aby przewidzieć, czy dana wartość należy do jednej z wielu kategorii. Są to problemy klasyfikacyjne, ponieważ polegają na próbie podziału danych na co najmniej 2 kategorie.
Uwaga na temat wyboru modelu: jest to model wybrany eksperymentalnie na podstawie oceny wyników uzyskanych przez kilka początkowo wybranych modeli. Ostatecznie zdecydowałem się na model LOGISTIC REG, aby uprościć rozwiązanie i uzyskać wyniki zbliżone do rzeczywistej oceny filmu z kilku baz danych. Pamiętaj, że ten model należy traktować tylko jako przykładową implementację i nie jest on koniecznie zalecany w tym przypadku użycia. Innym sposobem jest przewidywanie wyniku filmu jako „DOBRY” lub „ŹLE” za pomocą tego modelu regresji logistycznej zamiast przewidywania wyniku.
Wybieranie danych do trenowania
Dane o filmach (w formacie CSV) zostały już podzielone w tabeli na 3 kategorie za pomocą pola „data_cat”, które ma jedną z 3 wartości: TRAIN, TEST i PREDICT. Podział zbioru danych na potrzeby testowania i trenowania jest ważnym aspektem modelu. Więcej informacji o podziale zbioru danych znajdziesz w dokumentacji.
Tworzenie modelu regresji logistycznej
Aby utworzyć i trenować model regresji logistycznej, możemy użyć instrukcji CREATE MODEL z opcją „LOGISTIC_REG”.
Uruchom to 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 podanych w instrukcji SELECT.
- Przypuszczanka OPTIONS określa typ modelu i opcje trenowania. W tym przypadku opcja LOGISTIC_REG określa typ modelu regresji logistycznej. Nie musisz określać, czy chcesz trenować model binarnej regresji logistycznej, czy model wieloklasowej regresji logistycznej: BigQuery ML może określić, który z nich trenować na podstawie liczby unikalnych wartości w kolumnie etykiet.
- Wartość data_split_method=‘NO_SPLIT' powoduje, że BQML trenuje na danych zgodnie z warunkami zapytania (data_cat = „TRAIN”). Pamiętaj, że w tym przypadku lepiej użyć opcji „AUTO_SPLIT”, aby umożliwić frameworkowi (lub usłudze) losowe dzielenie na partie treningowe i testowe.
- Opcja input_label_cols określa, której kolumny w instrukcji SELECT ma być używana jako kolumna etykiet. W tym przypadku kolumna etykiety to wynik, więc model będzie się uczyć, która z 10 wartości wyniku jest najbardziej prawdopodobna na podstawie innych wartości w każdym wierszu.
- Opcja „auto_class_weights=TRUE” równoważy etykiety klas w danych treningowych. Domyślnie dane treningowe nie są ważone. Jeśli etykiety w danych treningowych są niezrównoważone, model może się nauczyć przewidywać najczęściej występującą klasę etykiet.
- Instrukcja SELECT wysyła zapytanie do tabeli załadowanej z danymi CSV. Klauzula WHERE filtruje wiersze w tabeli wejściowej, aby w tym kroku wybrany był tylko zbiór danych TRAIN.
Po utworzeniu w sekcji SCHEMAT obszaru roboczego SQL BigQuery pojawi się ten tekst:
Etykiety
Funkcje
Ocenianie modelu regresji logistycznej
Po utworzeniu modelu oceń jego skuteczność za pomocą funkcji ML.EVALUATE. Funkcja ML.EVALUATE porównuje przewidywane wartości z rzeczywistymi danymi. Zapytanie służące do oceny modelu:
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
Funkcja ML.EVALUATE przyjmuje model trenowany w poprzednim kroku i dane oceny zwracane przez podzapytanie SELECT. Funkcja zwraca jeden wiersz statystyk dotyczących modelu.
Ponieważ wykonałeś regresję logistyczna, wyniki obejmują dane widoczne na powyższym zrzucie ekranu: precyzję, czułość, dokładność, wynik F1, log_loss i roc_auc, które są bardzo ważne przy ocenie skuteczności modelu. Możesz też wywołać ML.EVALUATE bez podawania danych wejściowych. ML.EVALUATE pobiera dane oceny uzyskane podczas trenowania, które korzystają z automatycznie zarezerwowanego zbioru danych do oceny.
Najważniejsze dane w skrócie:
Dokładność – jaki odsetek pozytywnych identyfikacji był rzeczywiście poprawny? Dokładność = wyników prawdziwie pozytywnych / (wyników prawdziwie pozytywnych + wyników fałszywie pozytywnych) Współczynnik czułości – jaki odsetek rzeczywistych wyników pozytywnych został poprawnie zidentyfikowany? Odsetek trafnych prognoz = Prawdziwie pozytywne / (Prawdziwie pozytywne + Fałszywie negatywne) Dokładność – miara służąca do oceny modeli klasyfikacji, która określa odsetek prognoz, które model faktycznie trafnie przewidział. Dokładność = liczba poprawnych prognoz / łączna liczba prognoz
Prognozowanie oceny filmu za pomocą ML.PREDICT
To zapytanie przewiduje wynik każdego filmu w części zbioru danych PREDICT.
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
Oto fragment wyników:
Wynik modelu to przewidywana OCENKA filmu w skali od 1 do 10 (klasyfikacja). Zastanawiasz się pewnie, dlaczego w przypadku każdego filmu jest kilka wierszy z prognozami. Dzieje się tak, ponieważ model zwrócił możliwe prognozowane etykiety i ich prawdopodobieństwo wystąpienia w kolejności malejącej.
Analiza prognozowanych wyników i modelu
Dodatkowo w ramach wyników prognozy możesz wykonać 2 przydatne czynności analityczne:
- Aby zrozumieć, dlaczego model generuje takie wyniki prognozowania, możesz użyć funkcji ML.EXPLAIN_PREDICT.
- Aby dowiedzieć się, które cechy są najważniejsze do określenia przedziału dochodów, możesz użyć funkcji ML.GLOBAL_EXPLAIN.
Szczegółowe informacje o tych krokach znajdziesz w dokumentacji.
7. Prognozowanie oceny filmu za pomocą BigQuery AutoML
AutoML to świetne rozwiązanie, jeśli chcesz, aby usługa BigQuery utworzyła model za Ciebie, a Ty nie musieć nic robić do czasu wygenerowania wyników. Funkcja AUTOML jest dostępna bezpośrednio w BQML (model_type=AUTOML_CLASSIFIER lub AUTOML_REGRESSOR) i jest znacznie łatwiejsza do wywołania, 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ć kroki EVALUATE, PREDICT i EXPLAIN_PREDICT tak samo jak w przypadku niestandardowego modelu BQML. Więcej informacji o BigQuery AutoML znajdziesz w dokumentacji.
8. Wdrażanie modeli BQML w Vertex AI Model Registry jednym kliknięciem
Wszystkie modele ML możesz teraz wyświetlać w rejestrze modeli Vertex AI, co ułatwia Twojej organizacji zarządzanie modelami i ich wdrażanie. Dotyczy to modeli utworzonych za pomocą BigQuery ML, AutoML i modeli wytrenowanych 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';
W zapytaniu CREATE MODEL uwzględnij opcję model_registry="vertex_ai", aby BigQuery ML mogło wybrać, które modele ma zarejestrować w rejestrze modeli Vertex AI. Więcej informacji na ten temat znajdziesz w tym poście na blogu.
9. Podsumowanie
W ciągu niecałych 30 minut:
- Skonfiguruj BigQuery jako bazę danych dla projektu analitycznego
- Utworzono niestandardowy model prognozowania, korzystając tylko z zapytań SQL do danych w BigQuery, bez żadnego innego kodowania.
- Utworzono model BQ Auto ML, korzystając tylko z zapytań SQL
- Wdrożono model BQML w Vertex AI Model Registry
10. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby wykorzystane 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 oceny filmu za pomocą niestandardowego modelu BQML i AutoML oraz wdrożyć go w rejestrze modeli Vertex AI. Wszystko to za pomocą tylko kodu SQL.