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

Prognozowanie oceny filmu za pomocą BQML w kodzie SQL

Informacje o tym ćwiczeniu (w Codelabs)

subjectOstatnia aktualizacja: mar 16, 2023
account_circleAutorzy: Abirami Sukumaran

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

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 rejestrze modeli Vertex AI 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.