1. Giriş
Bu codelab'de, yalnızca SQL kullanarak BigQuery ML özel modeliyle bir film puanı tahmin modeli oluşturup modeli Vertex AI'da dağıtacağız. Öğrenecekleriniz:
- Cloud Shell'i kullanarak BigQuery veri kümesi oluşturma ve dosyadan veri yükleme
- Çok sınıflı regresyon tahmini modeli oluşturmak için denetimli öğrenme amacıyla BigQuery ML'yi kullanma (çok fazla kod yazmadan, yalnızca SQL sorgularını kullanarak film puanı tahmini)
Ne oluşturacaksınız?
Aşağıdakileri oluşturacaksınız:
- Tablo ve model bileşenlerini içerecek bir BigQuery veri kümesi
- SQL sorgularını kullanarak film puanını tahmin etmeye yönelik BigQuery ML modeli
- Modeli Vertex AI Model Registry'ye dağıtma
Şartlar
2. Projenizi oluşturma
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını kontrol etmeyi öğrenin.
- API'yi etkinleştirmek için BigQuery'ye gidin. Ayrıca, tarayıcınıza şu URL'yi girerek BigQuery web kullanıcı arayüzünü doğrudan açabilirsiniz: https://console.cloud.google.com/bigquery
3. Cloud Shell'i etkinleştirme
- Cloud Shell'i kullanacaksınız. Bu, Google Cloud'da çalışan ve bq ile önceden yüklenmiş bir komut satırı ortamıdır: Cloud Console'da sağ üst köşedeki Cloud Shell'i etkinleştir simgesini tıklayın:

- Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list
- 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
- Projeniz ayarlanmamışsa 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, tüm veriyle ilgili projelerde, ürünlerde ve uygulamalarda önemli bir adımdır. Optimal bir veri kümesi hazırlamak ve makine öğrenimi projeniz için hazır hale getirmek üzere teknolojiye ek olarak alan uzmanlığı da gerektirir. Bu codelab'de, önceden hazırlanmış data dosyasını kullanacağız.
5. Veri kümesini oluşturma ve yükleme
BigQuery veri kümesi, tabloların bir koleksiyonudur. Bir veri kümesindeki tüm tablolar aynı veri konumunda depolanır. Ayrıca, bir veri kümesine ve tablolarına erişimi sınırlamak için özel erişim kontrolleri de ekleyebilirsiniz.
- 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.
- 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ı çalıştırın:
git clone <<repository link>>
cd movie-score
- CSV dosyanızı bir BigQuery tablosuna yüklemek için bq load komutunu kullanın (BigQuery kullanıcı arayüzünden de doğrudan 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çenek Açıklaması: –source_format=CSV - Veri dosyasını ayrıştırırken CSV veri biçimini kullanır. –skip_leading_rows=1: CSV dosyasındaki ilk satır başlık satırı olduğundan atlanır. Movies.movies: İlk konumsal bağımsız değişken, verilerin hangi tabloya yükleneceğ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 Cloud Storage'daki dosyaları da gs://my_bucket/path/to/file URI'leriyle yükleyebilir. JSON şema dosyasında veya virgülle ayrılmış liste olarak tanımlanabilen bir şema (Virgülle ayrılmış liste kullandım). Yaşasın! CSV verilerimiz artık movies.movies tablosuna yüklendi.
- 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ü 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 şu şekilde görünür:

bq komutunu kullanma:
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 puanını tahmin etme
BigQuery ML, mantıksal regresyon model türüyle denetimli öğrenmeyi destekler. Bir değerin iki kategoriden birine girip girmediğini tahmin etmek için ikili mantıksal regresyon modeli türünü, birden fazla kategoriden birine girip girmediğini tahmin etmek için ise çok sınıflı regresyon modeli türünü kullanabilirsiniz. Verileri iki veya daha fazla kategoriye sınıflandırmaya çalıştıkları için bu tür sorunlara sınıflandırma sorunları adı verilir.
Model seçimiyle ilgili kısa bir not: Bu, başlangıçta birkaç modelde çalıştırdığım sonuçların değerlendirilmesine dayalı olarak burada seçilen deneysel bir model seçimidir. Sonuçları basit tutmak ve birkaç veritabanındaki gerçek film derecelendirmesine daha yakın sonuçlar elde etmek için sonunda LOJİSTİK REGRESYON'u kullanmaya karar verdim. Bu modelin yalnızca modeli uygulamak için bir örnek olarak değerlendirilmesi gerektiğini ve bu kullanım alanı için önerilen modelin BU OLMADIĞINI lütfen unutmayın. Bunu uygulamanın bir başka yolu da puanı tahmin etmek yerine bu lojistik regresyon modelini kullanarak filmin sonucunu İYİ / KÖTÜ olarak tahmin etmektir.
Eğitim verilerinizi seçin
Film verilerini (CSV biçiminde) tabloda "data_cat" alanını kullanarak 3 kategoriye ayırdık. Bu alan, TRAIN, TEST ve PREDICT olmak üzere 3 değerden birini içerir. Veri kümesini test ve eğitim amacıyla bölmek, modelin önemli bir yönüdür. Veri kümesi bölme hakkında daha fazla bilgiye ihtiyacınız varsa belgelere bakın.
Mantıksal regresyon modelini oluşturma
Lojistik 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ı:
- CREATE MODEL ifadesi, SELECT ifadesindeki eğitim verilerini kullanarak bir modeli eğitir.
- OPTIONS ifadesi, model türünü ve eğitim seçeneklerini belirtir. Burada LOGISTIC_REG seçeneği, bir mantıksal regresyon modeli türünü belirtir. İkili mantıksal regresyon modeli ile çok sınıflı mantıksal regresyon modeli arasında seçim yapmanız gerekmez. BigQuery ML, etiket sütunundaki benzersiz değerlerin sayısına göre hangi modelin eğitileceğini belirleyebilir.
- data_split_method=‘NO_SPLIT', BQML'nin sorgu koşullarına (data_cat = ‘TRAIN') göre veriler üzerinde eğitim yapmasını zorlar. Ayrıca, bu seçenekte "AUTO_SPLIT" kullanmanın, çerçeveye (veya bu durumda hizmete) eğitim/test bölümlerinin rastgele dağıtılmasına izin vermek için daha iyi olduğunu unutmayın.
- input_label_cols seçeneği, SELECT ifadesinde hangi sütunun etiket sütunu olarak kullanılacağını belirtir. Burada etiket sütunu puan olduğundan model, her satırda bulunan diğer değerlere göre puanın 10 değerinden hangisinin en olası olduğunu öğrenir.
- "auto_class_weights=TRUE" seçeneği, eğitim verilerindeki sınıf etiketlerini dengeler. Varsayılan olarak, eğitim verileri ağırlıksızdır. Eğitim verilerindeki etiketler dengesizse model, en popüler etiket sınıfını daha fazla tahmin etmeyi öğrenebilir.
- SELECT ifadesi, CSV verileriyle yüklediğimiz tabloyu sorgular. WHERE ifadesi, giriş tablosundaki satırları filtreleyerek bu adımda yalnızca TRAIN veri kümesinin seçilmesini sağlar.
Oluşturulduktan sonra, BigQuery SQL Çalışma Alanı'nın ŞEMA bölümünde aşağıdakiler görünür:
Etiketler

Özellikler

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 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ımda 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.

Lojistik regresyon gerçekleştirdiğiniz için sonuçlar, modelin performansını değerlendirmede gerçekten kritik olan yukarıdaki ekran görüntüsünde gördüğünüz metrikleri (hassasiyet, geri çağırma, doğruluk, f1 puanı, log_loss, roc_auc) içerir. Giriş verileri sağlamadan da ML.EVALUATE işlevini çağırabilirsiniz. ML.EVALUATE, eğitim sırasında elde edilen değerlendirme metriklerini alır. Bu metrikler, otomatik olarak ayrılan değerlendirme veri kümesi kullanılarak elde edilir.
Bir bakışta temel metrikler:
Kesinlik: Pozitif tanımlamaların ne kadarı aslında doğruydu? Hassasiyet = Gerçek Pozitif / (Gerçek Pozitif + Yanlış Pozitif) Geri çağırma: Gerçek pozitiflerin ne kadarı doğru şekilde tanımlandı? Geri çağırma = Doğru Pozitif / (Doğru Pozitif + Yanlış Negatif) Doğruluk: Sınıflandırma modellerini değerlendirmek için kullanılan bir metriktir. Modelimizin gerçekten doğru yaptığı tahminlerin oranıdır. Doğruluk = Doğru tahmin sayısı / Toplam tahmin sayısı
ML.PREDICT kullanarak film puanını 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'
)
)
Sonuçların bir snippet'i aşağıda verilmiştir:

Model sonucu, filmin 1 ile 10 arasındaki bir ölçekte (sınıflandırma) tahmin edilen PUANINI gösterir. Her film için neden birden fazla tahmin satırı olduğunu merak ediyor olabilirsiniz. Bunun nedeni, modelin olası tahmin edilen etiketleri ve her birinin gerçekleşme olasılığını azalan sırada döndürmesidir.
Tahmin edilen sonuçları ve modeli analiz etme
Ayrıca, tahmin sonuçlarının bir parçası olarak iki harika analiz adımı gerçekleştirebilirsiniz:
- Modelinizin neden bu tahmin sonuçlarını oluşturduğunu anlamak için ML.EXPLAIN_PREDICT işlevini kullanabilirsiniz.
- Genel olarak gelir aralığını belirlemek için hangi özelliklerin en önemli olduğunu öğrenmek istiyorsanız ML.GLOBAL_EXPLAIN işlevini kullanabilirsiniz.
Bu adımlar hakkında ayrıntılı bilgiyi dokümanlarda bulabilirsiniz.
7. BigQuery AutoML kullanarak film puanını tahmin etme
BigQuery hizmetinin sizin için modeli oluşturmasını istiyorsanız ve model sonuçlarınız oluşturulana kadar rahatlamak istiyorsanız AutoML'i kullanabilirsiniz. AUTOML özelliği doğrudan BQML'de (model_type=AUTOML_CLASSIFIER veya AUTOML_REGRESSOR) kullanılabilir ve veriler zaten BigQuery'de bulunuyorsa çok daha kolay çağrılabilir.
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 DEĞERLENDİRME, TAHMİN ve TAHMİNİ_AÇIKLAMA adımlarını uygulayabilirsiniz. BigQuery AutoML hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
8. BQML modellerini Vertex AI Model Registry'ye tek tıklamayla dağıtma
Artık tüm makine öğrenimi modellerinizi Vertex AI Model Registry'de görebilirsiniz. Böylece kuruluşunuzun modelleri yönetmesi ve dağıtması kolaylaşır. BigQuery ML, AutoML ve özel olarak eğitilmiş modellerle oluşturulan 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';
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 blogumuzda bulabilirsiniz.
9. Özet
30 dakikadan kısa bir süre içinde:
- BigQuery'yi analiz projesi için veritabanımız olarak ayarlama
- Yalnızca BigQuery verileri SQL'leri kullanılarak ve başka kodlama yapılmadan özel tahmin modeli oluşturuldu.
- Yalnızca SQL sorgularını kullanarak BQ Auto ML modeli oluşturma
- Vertex AI Model Registry'ye dağıtılan BQML modeli
10. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
- Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
- İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
11. Tebrikler
Tebrikler! BQML custom ve AutoML ile bir film puanı tahmin modeli oluşturup modeli Vertex AI Model Registry'ye dağıttınız. Tüm bu işlemleri yalnızca SQL kullanarak gerçekleştirdiniz.