Prognozowanie oceniania filmów z użyciem BQML przy użyciu SQL

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ę:

  1. Jak utworzyć zbiór danych BigQuery za pomocą Cloud Shell i wczytać dane z pliku
  2. 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

  • przeglądarki, na przykład Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami

2. Tworzenie projektu

  1. W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt Google Cloud.
  2. Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
  3. 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

  1. 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: 6757b2fb50ddcc2d.png
  2. 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
  1. Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt
gcloud config list project
  1. 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.

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

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

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

109a0b2c7155e9b3.png

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:

  1. Instrukcja CREATE MODEL trenuje model za pomocą danych treningowych w instrukcji SELECT
  2. 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.
  3. data_split_method=‘NO_SPLIT&#39; 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
  4. 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
  5. „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
  6. 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

93efd0c1a7883690.png

Funkcje

8c539338df1a9652.png

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.

b54b0ebd6514a498.png

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:

1efb91967acc1f0c.png

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:

  1. Aby dowiedzieć się, dlaczego model generuje te wyniki prognoz, możesz użyć funkcji ML.EXPLAIN_PREDICT
  2. 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:

  1. Skonfigurować BigQuery jako bazę danych na potrzeby projektu analitycznego
  2. Utworzono niestandardowy model prognostyczny korzystający wyłącznie z kodów SQL danych BigQuery, bez żadnego innego kodowania
  3. Utworzenie automatycznego modelu ML BQ wykorzystującego tylko zapytania SQL
  4. 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:

  1. W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
  2. Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń
  3. 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.