SQL kullanarak BQML ile Film Derecelendirmesi Tahmini

1. Giriş

Bu codelab'de yalnızca SQL kullanarak BigQuery ML özel modeliyle bir film puanı tahmin modeli oluşturup Vertex AI'a dağıtacağız. Öğrenecekleriniz:

  1. Cloud Shell kullanarak BigQuery veri kümesi oluşturma ve dosyadan veri yükleme
  2. Gözetimli öğrenmede BigQuery ML'yi kullanarak çok fazla kodlama yapmadan ancak yalnızca SQL sorguları kullanarak Film Puanı tahminine yönelik Çok Sınıflı Regresyon Tahmini modeli oluşturma

Oluşturacaklarınız

Verinin tamamını

  • Tablo ve model bileşenlerini içerecek bir BigQuery veri kümesi
  • SQL sorguları kullanarak film derecelendirmesini tahmin etmek için BigQuery ML modeli
  • Modeli Vertex AI Model Registry'de 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 projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir 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ü, tarayıcınıza aşağıdaki URL'yi girerek de doğrudan açabilirsiniz: https://console.cloud.google.com/bigquery

3. Cloud Shell'i etkinleştirme

  1. Google Cloud'da çalışan ve bq ile önceden yüklenmiş olarak gelen 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 ayarlandığını görürsünüz. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
  1. gcloud komutunun projenizi bildiğini 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, optimum bir veri kümesi hazırlayıp makine öğrenimi projenize hazır hale getirmek için gereken teknolojinin yanı sıra bolca alan uzmanlığı gerektiren veriyle ilgili tüm projeler, ürünler ve uygulamalarda önemli bir adımdır. Bu codelab'in amacı doğrultusunda, daha önce hazırlanmış olan data dosyasını kullanacağız.

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

BigQuery veri kümesi, tablo koleksiyonudur. Bir veri kümesindeki tüm tablolar aynı veri konumunda depolanır. Bir veri kümesi ve tablolarına erişimi sınırlamak için özel erişim denetimleri 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

Konumu bir bölge (asia-south1) olarak 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 (Doğrudan BigQuery kullanıcı arayüzünden de yükleme yapabileceğinizi lütfen 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_Lead_rows=1 - başlık satırı olduğu için CSV dosyasındaki ilk satırı atlar. Movies.movies - İlk konum bağımsız değişkeni — verilerin hangi tabloya yüklenmesi gerektiğini tanımlar. ./movies.csv - ikinci konum bağımsız değişkeni - hangi dosyanın yükleneceğini tanımlar. Yerel dosyalara ek olarak, bq load komutu gs://my_bucket/path/to/file URI'leri ile Cloud Storage'dan dosya yükleyebilir. JSON şema dosyasında veya virgülle ayrılmış liste olarak tanımlanabilen (virgülle ayrılmış liste kullandım) şema. Yaşasın! CSV verilerimiz artık movies.movies tablosuna yüklenmiştir.

  1. Aşağıdaki 3 yöntemden birini kullanarak sorgu oluşturun:

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;

Sorgu çalıştırmak için BigQuery Web SQL Çalışma Alanı'nı kullandım. SQL Workspace aşağıdaki gibi 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ındaki bir ölçekte film derecelendirmesini tahmin etme

BigQuery ML, mantıksal regresyon model türüyle gözetimli öğrenmeyi destekler. Bir değerin aşağıdaki iki kategoriden birine dahil olup olmadığını tahmin etmek için ikili mantıksal regresyon modeli türünü kullanabilirsiniz: Bir değerin birden fazla kategoriden birine denk gelip gelmediğini tahmin etmek için çok sınıflı regresyon modeli türünü de kullanabilirsiniz. Bu problemler, verileri iki ya da daha fazla kategoriye ayırmaya çalıştığı için sınıflandırma problemleri olarak bilinir.

Model seçimiyle ilgili kısa bir not: Bu, burada seçilen deneysel bir model seçimidir. Bu model, başlangıçta birkaç modelde çalıştırdığım sonuçların değerlendirilmesine dayanır ve son olarak, basitliği korumak ve çeşitli veritabanlarından gerçek film derecelendirmesine daha yakın sonuçlar elde etmek için LOGISTIC REG ile devam etti. Bunun, modelin uygulanması için bir örnek olarak düşünülmesi gerektiğini ve bu kullanım alanı için önerilen model OLMADIĞINI lütfen unutmayın. Bunu uygulamanın bir diğer yolu da skoru 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 dosyası olarak) tabloda "data_cat" alanını kullanarak 3 kategoriye ayırdık. şu 3 değerden birine sahip olmalıdır: TRAIN, TEST ve PREDICT. Veri kümesini test ve eğitim amacıyla ayırmak modelin önemli bir yönüdür. Veri kümesini bölme işlemini anlama hakkında daha fazla bilgiye ihtiyacınız varsa belgeleri inceleyin.

Mantıksal regresyon modelini oluşturma

CREATE MODEL ifadesini "LOGISTIC_REG" seçeneğiyle kullanabiliriz mantıksal regresyon modeli oluşturup eğitmek istiyorum.

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 modeli eğitir
  2. OPTIONS ifadesi, model türünü ve eğitim seçeneklerini belirtir. Buradaki LOGISTIC_REG seçeneği mantıksal regresyon modeli türünü belirtir. Çok sınıflı mantıksal regresyon modeli yerine ikili mantıksal regresyon modeli belirtmeniz gerekmez. BigQuery ML, etiket sütunundaki benzersiz değerlerin sayısına göre hangisinin eğitileceğini belirleyebilir.
  3. data_split_method=‘NO_SPLIT&#39; BQML'yi sorgu koşullarına (data_cat = ‘TRAIN’) göre veriler üzerinde eğitmeye zorlar, ayrıca ‘OTO_SPLIT’ çerçevenin (veya bu durumda hizmetin) eğitim/test bölümlerinin bölümünü rastgele hale getirmesine izin vermek için bu seçenekte
  4. enter_label_cols seçeneği, SELECT ifadesinde hangi sütunun etiket sütunu olarak kullanılacağını belirtir. Burada etiket sütunu puandır. Bu durumda model, her satırda bulunan diğer değerlere göre 10 puan değeri arasından hangisinin en yüksek olasılık olduğunu öğrenir
  5. "auto_class_weights=TRUE" seçeneği, eğitim verilerindeki sınıf etiketlerini dengeler. Varsayılan olarak eğitim verileri ağırlıklandırılmamıştır. Eğitim verilerindeki etiketler dengesizse model, en popüler etiket sınıfını daha yoğun bir şekilde tahmin etmeyi öğrenebilir.
  6. SELECT ifadesi, csv verileriyle indirdiğimiz tabloyu sorgular. WHERE ifadesi, giriş tablosundaki satırları filtreler ve bu adımda yalnızca TRAIN veri kümesi seçilir

Oluşturulan aşağıdaki kod, BigQuery SQL Çalışma Alanı'nın SCHEMA bölümünde gösterilir:

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, tahmin edilen değerleri gerçek verilerle karşılaştırarak değerlendirir. Modeli değerlendirmek için gereken 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 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çlar, yukarıdaki ekran görüntüsünde gördüğünüz metrikleri içerir. Bu metrikler, modelin performansının değerlendirilmesinde gerçekten kritik öneme sahiptir. Ayrıca, giriş verilerini sağlamadan ML.EVALUATE yöntemini de çağırabilirsiniz. ML.EVALUATE, eğitim sırasında türetilen ve otomatik olarak ayrılmış değerlendirme veri kümesini kullanan değerlendirme metriklerini alır.

Temel metrikler hakkında özet:

Hassasiyet - Pozitif tanımlamaların ne kadarı gerçekte doğruydu? Hassasiyet = Gerçek Pozitif / (Doğru Pozitif + Yanlış Pozitif) Geri çağırma - Gerçek pozitiflerin ne oranı doğru tanımlanmış? Geri Çağırma = Gerçek Pozitif / (Doğru Pozitif + Yanlış Negatif) Doğruluk - Sınıflandırma modellerini değerlendirmek için kullanılan bir metriktir. Bu, modelimizin gerçekte doğru bulduğu tahminlerin oranıdır Doğruluk = Doğru tahminlerin sayısı / Toplam tahmin sayısı

ML.PREDICT kullanarak film derecelendirmesini tahmin etme

Aşağıdaki sorgu, veri kümesinin TAHMİN 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 parçasını görebilirsiniz:

1efb91967acc1f0c.png

Model sonucu, filmin tahmini PUAN değerini 1 ile 10 arasında bir ölçekte gösterir (sınıflandırma). Her film için neden birden fazla tahmin satırı olduğunu merak ediyor olmalısınız. Bunun nedeni, modelin tahmini olası etiketleri ve her birinin azalan sırada ortaya çıkma olasılığını döndürmesidir.

Tahmin edilen sonuçları ve modeli analiz etme

Ayrıca, tahmin sonuçları kapsamında iki önemli analiz adımı uygulayabilirsiniz:

  1. Modelinizin bu tahmin sonuçlarını neden 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 üzere ML.GLOBAL_EXPLAIN işlevini kullanabilirsiniz.

Bu adımlar hakkında ayrıntılı bilgiyi belgelerde bulabilirsiniz.

7. BigQuery AutoML kullanarak film derecelendirmesini tahmin etme

BigQuery hizmetinin sizin için model oluşturmasına ve model sonuçları oluşturulana kadar rahatlamasını istiyorsanız AutoML'den yararlanabilirsiniz. autoML özelliği doğrudan BQML'de (model_type=OML_CLASSIFIER veya OTML_REGRESSOR) kullanılabilir ve veriler zaten 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 konuştuğumuz gibi EVALUATE, PREDICT ve EXPLAIN_PREDICT adımlarını uygulayabilirsiniz. Belgeleri inceleyerek BigQuery AutoML hakkında daha fazla bilgi edinin.

8. BQML Modellerini Vertex AI Model Registry'ye Dağıtmak için Tek Tıkla

Artık tüm makine öğrenimi modellerinizi Vertex AI Model Registry'de görebilirsiniz. Böylece kuruluşunuz, modelleri daha kolay yönetip dağıtabilir. BigQuery ML ve AutoML ile derlenen modeller ve özel olarak eğitilmiş modeller buna dahildir. 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';

model_registry="vertex_ai" kodunu ekleyin seçeneğinin yanındaki CREATE MODEL sorgusunda gösterilir. Bu konuyla ilgili daha fazla bilgiyi bu blogda bulabilirsiniz.

9. Özet

30 dakikadan kısa bir süre içinde:

  1. BigQuery'yi analiz projesi için veritabanımız olarak ayarlama
  2. Başka kodlama olmadan, yalnızca BigQuery veri SQL'leri kullanılarak özel tahmin modeli oluşturuldu
  3. Yalnızca SQL sorguları kullanılarak BQ Auto ML modeli oluşturuldu
  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 konsolunda Kaynakları yönetin sayfasına gidin
  2. Proje listesinden silmek istediğiniz projeyi seçin ve ardından Sil’i tıklayın
  3. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın

11. Tebrikler

Tebrikler! BQML özel ve AutoML ile bir Film Puanı Tahmin Modelini başarıyla oluşturdunuz ve modeli Vertex AI Model Registry'de dağıttınız ve tüm bunları yalnızca SQL kullanarak yaptınız.