SQL kullanarak BQML ile Film Derecelendirmesi Tahmini

SQL kullanarak BQML ile Film Derecelendirmesi Tahmini

Bu codelab hakkında

subjectSon güncelleme Mar 16, 2023
account_circleYazan: Abirami Sukumaran

1. Giriş

Bu kod laboratuvarında, yalnızca SQL kullanarak BigQuery ML özel modeliyle bir film puanı tahmin modeli oluşturacak ve modeli VertexAI'da dağıtacağız. Öğrenecekleriniz:

  1. Cloud Shell'i kullanarak BigQuery veri kümesi oluşturma ve dosyaya veri yükleme
  2. Çok fazla kodlama yapmadan yalnızca SQL sorguları kullanarak film puanı tahmini için çok sınıflı regresyon tahmini modeli oluşturmak üzere denetimli öğrenme için BigQuery ML'yi kullanma

Oluşturacağınız uygulama

Bir

  • Tablo ve model bileşenlerini içerecek bir BigQuery veri kümesi
  • SQL sorgularını kullanarak film puanını tahmin etmek için BigQuery ML modeli
  • Modeli Vertex AI Model Registry'ye dağıtma

Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi

2. Projenizi oluşturun

  1. Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
  2. Cloud projenizde faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğrenin.
  3. API'yi etkinleştirmek için BigQuery'ye gidin. BigQuery web kullanıcı arayüzünü doğrudan açmak için tarayıcınızda şu URL'yi de girebilirsiniz: https://console.cloud.google.com/bigquery

3. Cloud Shell'i etkinleştirme

  1. Google Cloud'da çalışan ve bq ile önceden yüklenmiş bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız: Cloud Console'da, sağ üst köşedeki Cloud Shell'i etkinleştir'i tıklayın: 6757b2fb50ddcc2d.png
  2. Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize göre ayarlandığını görürsünüz. Kimliğinizi doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
  1. Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <PROJECT_ID>

gcloud komutları ve kullanımı için belgelere bakın.

4. Eğitim verilerini hazırlama

Bu, verilerle ilgili tüm projeler, ürünler ve uygulamalarda önemli bir adımdır. Optimum bir veri kümesi hazırlamak ve bunu makine öğrenimi projenize hazır hale getirmek için teknolojinin yanı sıra çok fazla alan uzmanlığı gerektirir. Bu kod laboratuvarının amacı için önceden hazırlanmış veri dosyasını kullanacağız.

5. Veri kümesini oluşturma ve yükleme

BigQuery veri kümesi, tablolardan oluşan bir koleksiyondur. Bir veri kümesindeki tüm tablolar aynı veri konumunda depolanır. Bir veri kümesine ve tablolarına erişimi sınırlamak için özel erişim kontrolleri de ekleyebilirsiniz.

  1. Cloud Shell'de, "movies" adlı bir veri kümesi oluşturmak için bq mk komutunu kullanın.
bq mk --location=<<LOCATION>> movies

Konum'u bir bölgeye (asia-south1) ayarlayın.

  1. Veri dosyasının (.csv) hazır olduğundan emin olun. Depoyu klonlamak ve projeye gitmek için Cloud Shell'de aşağıdaki komutları yürütün:
git clone <<repository link>>

cd movie
-score
  1. CSV dosyanızı bir BigQuery tablosuna yüklemek için bq load komutunu kullanın (lütfen doğrudan BigQuery kullanıcı arayüzünden de yükleyebileceğinizi unutmayın):
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

Seçenekler açıklaması: –source_format=CSV: Veri dosyasını ayrıştırırken CSV veri biçimini kullanır. –skip_leading_rows=1: Başlık satırı olduğu için CSV dosyasındaki ilk satırı atlar. Movies.movies: İlk konumsal bağımsız değişken, verilerin hangi tabloya yüklenmesi gerektiğini tanımlar. ./movies.csv (ikinci konumsal bağımsız değişken) hangi dosyanın yükleneceğini tanımlar. bq load komutu, yerel dosyalara ek olarak gs://my_bucket/path/to/file URI'leriyle Cloud Storage'daki dosyaları da yükleyebilir. JSON şeması dosyasında veya virgülle ayrılmış liste olarak tanımlanabilen bir şema (Ben virgülle ayrılmış liste kullandım). Yaşasın! CSV verileri artık movies.movies tablosuna yüklendi.

  1. Sorgu için aşağıdaki 3 yöntemden birini kullanın:

BigQuery ile üç şekilde etkileşim kurabiliriz. Bunlardan ikisini deneyeceğiz: a. BigQuery web kullanıcı arayüzü b. bq komutu c. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

Sorguları çalıştırmak için BigQuery Web SQL Workspace'i kullandım. SQL çalışma alanı şu şekilde görünür:

109a0b2c7155e9b3.png

bq komutunu kullanarak:

bq query --use_legacy_sql=false \
SELECT name
, rating, genre, runtime FROM movies.movies_score limit 3;

6. 1 ile 10 arasında bir ölçekte film derecelendirmesini tahmin etme

BigQuery ML, mantıksal regresyon model türüyle gözetimli öğrenmeyi destekler. Bir değerin iki kategoriden birine mi yoksa birden fazla kategoriden birine mi ait olduğunu tahmin etmek için ikili mantıksal regresyon model türünü kullanabilir veya bir değerin birden fazla kategoriden birine mi ait olduğunu tahmin etmek için çok sınıflı regresyon model türünü kullanabilirsiniz. Bu sorunlar, verileri iki veya daha fazla kategoriye sınıflandırmaya çalıştıkları için sınıflandırma sorunları olarak bilinir.

Model seçimiyle ilgili kısa bir not: Burada, sonuçların değerlendirilmesine dayalı olarak deneysel bir model seçimi yapılmıştır. Başlangıçta birkaç modelle çalıştım ve sonunda basit tutmak ve çeşitli veritabanlarındaki gerçek film derecelendirmesine daha yakın sonuçlar elde etmek için LOGISTIC REG'yi kullanmaya karar verdim. Bunun, modeli uygulamak için yalnızca bir örnek olarak değerlendirilmesi gerektiğini ve bu kullanım alanı için mutlaka önerilen model OLMADIĞINI lütfen unutmayın. Bunu uygulamanın bir başka yolu da puanı tahmin etmek yerine bu mantıksal regresyon modelini kullanarak filmin sonucunu İYİ / KÖTÜ olarak tahmin etmektir.

Eğitim verilerinizi seçme

Film verilerini (csv biçiminde), TRAIN, TEST ve PREDICT değerlerinden birini içeren "data_cat" alanını kullanarak tabloda 3 kategoriye ayırdık. Veri kümesini test ve eğitim amacıyla bölme, modelin önemli bir yönüdür. Veri kümesi bölme hakkında daha fazla bilgi edinmek istiyorsanız dokümanlara göz atın.

Mantıksal regresyon modelini oluşturma

Mantıksal regresyon modeli oluşturmak ve eğitmek için "LOGISTIC_REG" seçeneğiyle CREATE MODEL ifadesini kullanabiliriz.

BigQuery Web Kullanıcı Arayüzü SQL Çalışma Alanı'nda aşağıdaki sorguyu çalıştırın:

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';

Sorgu Ayrıntıları:

  1. CREATE MODEL ifadesi, SELECT ifadesindeki eğitim verilerini kullanarak bir model eğitir.
  2. OPTIONS yan tümcesi, model türünü ve eğitim seçeneklerini belirtir. Burada LOGISTIC_REG seçeneği, mantıksal regresyon modeli türünü belirtir. İkili mantıksal regresyon modeli mi yoksa çok sınıflı mantıksal regresyon modeli mi belirtmeniz gerekmez: BigQuery ML, etiket sütunundaki benzersiz değerlerin sayısına göre hangi modelin eğitileceğini belirleyebilir.
  3. data_split_method=‘NO_SPLIT', BQML'yi sorgu koşullarına göre veriler üzerinde eğitmeye zorlar (data_cat = ‘TRAIN'). Ayrıca, çerçevenin (veya bu durumda hizmetin) eğitim/test bölmelerinin bölümünü rastgele hale getirmesine izin vermek için bu seçenekte "AUTO_SPLIT" kullanmanın daha iyi olduğunu unutmayın.
  4. input_label_cols seçeneği, SELECT ifadesi içinde etiket sütunu olarak kullanılacak sütunu belirtir. Burada etiket sütunu puandır. Bu nedenle model, her satırdaki diğer değerlere göre puan değerinin 10 değeri arasından en olası olanı öğrenir.
  5. "auto_class_weights=TRUE" seçeneği, eğitim verilerindeki sınıf etiketlerini dengeler. Varsayılan olarak, eğitim verilerine ağırlık verilmez. Eğitim verilerindeki etiketler dengesizse model, en popüler etiket sınıfını daha ağırlıklı olarak tahmin etmeyi öğrenebilir.
  6. SELECT ifadesi, csv verileriyle yüklediğimiz tabloyu sorguladı. WHERE yan tümcesi, giriş tablosundaki satırları filtreleyerek bu adımda yalnızca TRAIN veri kümesinin seçilmesini sağlar.

Oluşturulduktan sonra BigQuery SQL Workspace'in SCHEMA bölümünde aşağıdakiler görünür:

Etiketler

93efd0c1a7883690.png

Özellikler

8c539338df1a9652.png

Mantıksal regresyon modelinizi değerlendirme

Modelinizi oluşturduktan sonra ML.EVALUATE işlevini kullanarak modelin performansını değerlendirin. ML.EVALUATE işlevi, tahmini değerleri gerçek verilere göre değerlendirir. Modeli değerlendirmek için kullanılan sorgu şu şekildedir:

SELECT
 
*
FROM
  ML
.EVALUATE (MODEL movies.movies_score_model,
   
(
    SELECT
     
*
    FROM
      movies
.movies_score
    WHERE
      data_cat
= TEST'
    )
  )

ML.EVALUATE işlevi, önceki adımımızda eğitilen modeli ve bir SELECT alt sorgusu tarafından döndürülen değerlendirme verilerini alır. İşlev, modelle ilgili tek bir istatistik satırı döndürür.

b54b0ebd6514a498.png

Mantıksal regresyon gerçekleştirdiğiniz için sonuçlarda, modelin performansını değerlendirmede gerçekten kritik olan ve yukarıdaki ekran görüntüsünde gördüğünüz metrikler (hassasiyet, geri çağırma, doğruluk, f1 puanı, log_loss, roc_auc) yer alır. ML.EVALUATE işlevini giriş verileri sağlamadan da çağırabilirsiniz. ML.EVALUATE, otomatik olarak ayrılmış değerlendirme veri kümesini kullanan eğitim sırasında elde edilen değerlendirme metriklerini alır.

Temel metriklere bir bakışta:

Doğruluk: Pozitif tanımlamaların ne kadarı doğruydu? Hassasiyet = Gerçek Pozitif / (Gerçek Pozitif + Yanlış Pozitif) Geri çağırma: Gerçek pozitiflerin ne kadarı doğru şekilde tanımlandı? Hatırlatma = Doğru pozitif / (Doğru pozitif + Yanlış negatif) Doğruluk: Sınıflandırma modellerini değerlendirmek için kullanılan bir metriktir. Modelimizin doğru tahmin ettiği tahminlerin oranıdır. Doğruluk = Doğru tahmin sayısı / Toplam tahmin sayısı

ML.PREDICT'i kullanarak film derecelendirmesini tahmin etme

Aşağıdaki sorgu, veri kümesinin PREDICT bölümündeki her filmin puanını tahmin eder.

SELECT
 
*
FROM
  ML
.PREDICT (MODEL movies.movies_score_model,
   
(
    SELECT
     
*
    FROM
      movies
.movies_score
    WHERE
      data_cat
= PREDICT'
     )
  )

Aşağıda sonuçların bir snippet'i verilmiştir:

1efb91967acc1f0c.png

Model sonucu, filmin 1 ile 10 arasında bir ölçekte (sınıflandırma) tahmini PUANI'nı gösterir. Her film için neden birkaç tahmin satırı olduğunu merak ediyor olabilirsiniz. Bunun nedeni, modelin olası tahmin edilen etiketleri ve bunların gerçekleşme olasılığını azalan düzende döndürmesidir.

Tahmin edilen sonuçları ve modeli analiz etme

Ayrıca, tahmin sonuçlarının bir parçası olarak iki önemli analiz adımı uygulayabilirsiniz:

  1. Modelinizin neden bu tahmin sonuçlarını oluşturduğunu anlamak için ML.EXPLAIN_PREDICT işlevini kullanabilirsiniz.
  2. Genel olarak gelir aralığını belirlemek için en önemli özelliklerin hangileri olduğunu öğrenmek istiyorsanız ML.GLOBAL_EXPLAIN işlevini kullanabilirsiniz.

Bu adımlar hakkında ayrıntılı bilgi edinmek için dokümanları inceleyebilirsiniz.

7. BigQuery AutoML&#39;i kullanarak film puanını tahmin etme

BigQuery hizmetinin modeli sizin için oluşturmasına izin vermek ve model sonuçlarınız oluşturulana kadar rahatlamak istiyorsanız AutoML mükemmel bir seçenektir. AUTOML özelliği doğrudan BQML'de (model_type=AUTOML_CLASSIFIER veya AUTOML_REGRESSOR) kullanılabilir ve veriler BigQuery'deyse çağrılması çok daha kolaydır.

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;

Model oluşturulduktan sonra, özel BQML modelinde ele aldığımız gibi EVALUATE, PREDICT ve EXPLAIN_PREDICT adımlarını uygulayabilirsiniz. BigQuery AutoML hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.

8. BQML modellerini Vertex AI Model Registry&#39;ye tek tıklamayla dağıtma

Artık tüm ML modellerinizi Vertex AI Model Registry'de görebilirsiniz. Bu sayede kuruluşunuzun modelleri yönetmesi ve dağıtması kolaylaşır. BigQuery ML, AutoML ve özel olarak eğitilmiş modeller bu kapsamdadır. Bunu aşağıda belirtilen şekilde yapabilirsiniz:

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';

BigQuery ML'in Vertex AI Model Registry'ye açıkça kaydetmek istediği modelleri seçebilmesi için CREATE MODEL sorgusuna model_registry="vertex_ai" seçeneğini ekleyin. Bu konuyla ilgili daha fazla bilgiyi bu blogda bulabilirsiniz.

9. Özet

30 dakikadan kısa bir sürede:

  1. Analiz projesi için BigQuery'yi veritabanımız olarak ayarlama
  2. Yalnızca BigQuery veri SQL'leri kullanılarak ve başka kodlama yapılmadan özel tahmin modeli oluşturma
  3. Yalnızca SQL sorguları kullanılarak oluşturulan BQ Auto ML modeli
  4. BQML modeli Vertex AI Model Registry'ye dağıtıldı

10. Temizleme

Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:

  1. Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
  2. Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
  3. İletişim kutusuna proje kimliğini yazın ve ardından projeyi silmek için Kapat'ı tıklayın.

11. Tebrikler

Tebrikler! BQML özel ve AutoML ile bir Film Puanı Tahmini Modeli oluşturdunuz ve modeli Vertex AI Model Registry'ye dağıttınız. Tüm bunları yalnızca SQL kullanarak yaptınız.