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

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

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

  • przeglądarka, np. Chrome lub Firefox;
  • projekt Google Cloud z włączonymi płatnościami;

2. Tworzenie projektu

  1. W konsoli Google Cloud na stronie selektora projektu 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. 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

  1. 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: 6757b2fb50ddcc2d.png
  2. 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
  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom to polecenie w Cloud Shell:
gcloud config list project
  1. 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.

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

  1. Przygotuj plik danych (CSV). Aby sklonować repozytorium i przejść do projektu, uruchom w Cloud Shell te polecenia:
git clone <<repository link>>

cd movie-score
  1. 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.

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

109a0b2c7155e9b3.png

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:

  1. Instrukcja CREATE MODEL trenuje model za pomocą danych treningowych podanych w instrukcji SELECT.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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

93efd0c1a7883690.png

Funkcje

8c539338df1a9652.png

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.

b54b0ebd6514a498.png

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:

1efb91967acc1f0c.png

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:

  1. Aby zrozumieć, dlaczego model generuje takie wyniki prognozowania, możesz użyć funkcji ML.EXPLAIN_PREDICT.
  2. 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:

  1. Skonfiguruj BigQuery jako bazę danych dla projektu analitycznego
  2. Utworzono niestandardowy model prognozowania, korzystając tylko z zapytań SQL do danych w BigQuery, bez żadnego innego kodowania.
  3. Utworzono model BQ Auto ML, korzystając tylko z zapytań 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 wykorzystane 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 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.