1. Wprowadzenie
W tym ćwiczeniu utworzymy model prognozowania ocen filmów za pomocą niestandardowego modelu BigQuery ML, używając tylko SQL, a następnie wdrożymy go w Vertex AI. 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ć model prognozowania regresji wieloklasowej do prognozowania ocen filmów bez konieczności pisania dużej ilości kodu, a jedynie za pomocą zapytań SQL
Co utworzysz
Utworzysz
- zbiór danych BigQuery, który będzie zawierać tabelę i komponenty modelu;
- Model BigQuery ML do prognozowania ocen filmów za pomocą zapytań SQL
- Wdrażanie modelu w Vertex AI Model Registry
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.
- Aby włączyć interfejs API, przejdź do BigQuery. 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, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane narzędziem bq. W konsoli Cloud kliknij Aktywuj Cloud Shell w prawym górnym rogu:

- Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu. Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list
- Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
- Jeśli projekt nie jest ustawiony, użyj tego polecenia, aby go ustawić:
gcloud config set project <PROJECT_ID>
Informacje o poleceniach gcloud i ich użyciu znajdziesz w dokumentacji.
4. Przygotowywanie danych treningowych
Jest to ważny etap we wszystkich projektach, produktach i aplikacjach związanych z danymi, który wymaga dużej wiedzy specjalistycznej oraz technologii umożliwiającej przygotowanie optymalnego zbioru danych i dostosowanie go do projektu uczenia maszynowego. Na potrzeby tego ćwiczenia użyjemy gotowego pliku data.
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 ustawienia kontroli 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).
- Sprawdź, czy masz gotowy plik danych (.csv). Aby sklonować repozytorium i przejść do projektu, wykonaj w Cloud Shell te polecenia:
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ż 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
Opis opcji: –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ą zostać zał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://mój_zasobnik/ś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 CSV są teraz załadowane w tabeli movies.movies.
- Zapytanie możesz zadać na 1 z 3 sposobów:
Z BigQuery możemy wchodzić w interakcje na 3 sposoby. Wypróbujemy 2 z nich: Interfejs sieciowy BigQuery b. Polecenie bq c. Interfejs API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
Do uruchamiania zapytań użyłem obszaru roboczego SQL BigQuery w internecie. Obszar roboczy SQL wygląda tak:

Użyj polecenia bq:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. Prognozowanie oceny filmu w skali od 1 do 10
BigQuery ML obsługuje uczenie nadzorowane z użyciem modelu regresji logistycznej. Możesz użyć modelu regresji logistycznej binarnej, aby przewidzieć, czy wartość należy do jednej z 2 kategorii, lub modelu regresji wieloklasowej, aby przewidzieć, czy wartość należy do jednej z wielu kategorii. Są to problemy klasyfikacyjne, ponieważ polegają na klasyfikowaniu danych w co najmniej 2 kategoriach.
Krótka uwaga na temat wyboru modelu: jest to eksperymentalny wybór modelu. Początkowo przeprowadziłem ocenę wyników w przypadku kilku modeli, a ostatecznie zdecydowałem się na REGRESJĘ LOGISTYCZNĄ, aby uprościć proces i uzyskać wyniki bliższe rzeczywistej ocenie filmu z kilku baz danych. Pamiętaj, że należy to traktować jedynie jako przykład implementacji modelu i NIEkoniecznie jest to zalecany model w tym przypadku użycia. Innym sposobem wdrożenia tego rozwiązania jest prognozowanie wyniku filmu jako DOBRY lub ZŁY za pomocą tego modelu regresji logistycznej zamiast prognozowania oceny.
Wybieranie danych treningowych
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 wytrenować model regresji logistycznej, możemy użyć instrukcji CREATE MODEL z opcją „LOGISTIC_REG”.
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 przy użyciu 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 ani modelu wieloklasowej regresji logistycznej: BigQuery ML może określić, który model wytrenować, 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 w tym przypadku lepiej jest użyć opcji ‘AUTO_SPLIT', aby umożliwić platformie (lub usłudze w tym przypadku) losowe dzielenie zbiorów treningowych i testowych.
- Opcja input_label_cols określa, która kolumna w instrukcji SELECT ma być używana jako kolumna etykiet. W tym przypadku kolumna etykiety to „score”, więc model nauczy się, która z 10 wartości kolumny „score” 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 mają wagi. Jeśli etykiety w danych treningowych są niezrównoważone, model może nauczyć się prognozować najpopularniejszą klasę etykiet z większą wagą.
- Instrukcja SELECT wysyła zapytanie do tabeli, do której załadowaliśmy dane z pliku CSV. Klauzula WHERE filtruje wiersze w tabeli wejściowej, tak aby na tym etapie wybierany był tylko zbiór danych TRAIN.
Po utworzeniu w sekcji SCHEMA w obszarze roboczym SQL BigQuery pojawi się:
Etykiety

Funkcje

Ocena modelu regresji logistycznej
Po utworzeniu modelu oceń jego skuteczność za pomocą funkcji ML.EVALUATE. Funkcja ML.EVALUATE porównuje prognozowane wartości z rzeczywistymi danymi. Zapytanie do oceny modelu wygląda tak:
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
Funkcja ML.EVALUATE przyjmuje model wytrenowany w poprzednim kroku i dane oceny zwrócone przez podzapytanie SELECT. Funkcja zwraca jeden wiersz statystyk dotyczących modelu.

Ponieważ przeprowadzono regresję logistyczną, wyniki obejmują dane widoczne na zrzucie ekranu powyżej: precyzję, pełność, 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ć funkcję ML.EVALUATE bez podawania danych wejściowych. Funkcja ML.EVALUATE pobiera wskaźniki oceny uzyskane podczas trenowania, które wykorzystuje automatycznie zarezerwowany zbiór danych do oceny.
Kluczowe dane w skrócie:
Precyzja – jaki odsetek pozytywnych identyfikacji był w rzeczywistości prawidłowy? Precyzja = Wyniki prawdziwie pozytywne / (Wyniki prawdziwie pozytywne + Wyniki fałszywie pozytywne) Czułość – jaki odsetek rzeczywistych wyników pozytywnych został prawidłowo zidentyfikowany? Recall = True Positive / (True Positive + False Negative) Accuracy - A metric for evaluating classification models, it is the fraction of predictions our model actually got right Accuracy = Number of correct predictions / Total number of predictions
Prognozowanie ocen filmów za pomocą ML.PREDICT
To zapytanie prognozuje ocenę 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'
)
)
Poniżej znajdziesz fragment wyników:

Wynik modelu to przewidywany WYNIK filmu w skali od 1 do 10 (klasyfikacja). Pewnie zastanawiasz się, dlaczego przy każdym filmie jest kilka wierszy prognoz. Dzieje się tak, ponieważ model zwrócił możliwe przewidywane etykiety i prawdopodobieństwo wystąpienia każdej z nich w kolejności malejącej.
Analizowanie przewidywanych wyników i modelu
W ramach wyników prognozy możesz też wykonać 2 przydatne czynności analityczne:
- Aby dowiedzieć się, dlaczego model generuje takie wyniki prognozowania, możesz użyć funkcji ML.EXPLAIN_PREDICT.
- Aby dowiedzieć się, które cechy są najważniejsze przy określaniu przedziału dochodów, możesz użyć funkcji ML.GLOBAL_EXPLAIN.
Szczegółowe informacje o tych krokach znajdziesz w dokumentacji.
7. Prognozowanie ocen filmów za pomocą BigQuery AutoML
AutoML to świetne rozwiązanie, jeśli chcesz, aby usługa BigQuery utworzyła model za Ciebie, i odpoczywać, dopóki nie zostaną wygenerowane wyniki modelu. Funkcja AutoML jest dostępna bezpośrednio w BQML (model_type=AUTOML_CLASSIFIER lub AutoML_REGRESSOR) i 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ć czynności OCENA, PROGNOZA i WYJAŚNIENIE_PROGNOZY, tak jak w przypadku niestandardowego modelu BQML. Więcej informacji o BigQuery AutoML znajdziesz w dokumentacji.
8. Wdrażanie modeli BQML w rejestrze modeli Vertex AI jednym kliknięciem
Wszystkie modele ML możesz teraz wyświetlać w rejestrze modeli Vertex AI, co ułatwia organizacji zarządzanie modelami i ich wdrażanie. Obejmuje to modele utworzone za pomocą BigQuery ML, AutoML i modele wytrenowane niestandardowo. Aby to zrobić:
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 wybierać modele, które ma jawnie zarejestrować w Vertex AI Model Registry. Więcej informacji na ten temat znajdziesz na tym blogu.
9. Podsumowanie
W niecałe 30 minut:
- Konfigurowanie BigQuery jako bazy danych projektu analitycznego
- Utworzono niestandardowy model prognozowania, używając tylko zapytań SQL dotyczących danych BigQuery i nie stosując żadnego innego kodowania.
- Utworzono model BQ Auto ML przy użyciu tylko zapytań SQL.
- Wdrożony model BQML w Vertex AI Model Registry
10. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby użyte w tym poście, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
- Z listy 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 ocen filmów za pomocą BQML z użyciem SQL i AutoML oraz wdrożyć go w Vertex AI Model Registry.