Ads Data Hub'da regresyon modellemesi

Doğrusal ve mantıksal regresyon, reklamcılık verilerinden anlamlı tahminler oluşturmanıza olanak tanıyan makine öğrenimi modelleridir.

  • Doğrusal regresyon, bir çizgiyi verilere sığdırmaya yönelik bir işlev oluşturur. Bu işlevde, veri noktaları ile çizgi arasındaki mesafe en aza indirilir. Bu model daha sonra girişlere bağlı olarak sayısal bir değeri tahmin etmek amacıyla kullanılabilir. Örneğin, satın alma işlemleri, önceki etkileşimler vb. gibi ölçütlere göre kullanıcının yaşam boyu değerini tahmin edebilirsiniz.
  • Mantıksal regresyon, tahmine dayalı sınıflandırma sorunları için kullanılır. Model, sağladığınız değişken sayısına bağlı olarak 2 türden biri olabilir:
    • İkili mantıksal regresyon, bir dönüşüm etkinliğinin gerçekleşme olasılığı gibi "evet/hayır" sorularını yanıtlar.
    • Çok sınıflı mantıksal regresyon, müşterinin "düşük değerli" mi, "orta değerli" mi yoksa "yüksek değerli" mi olduğunu belirlemek gibi birden fazla olası değeri tahmin etmek amacıyla kullanılır.

Hem doğrusal hem de mantıksal regresyon, eğitim verilerinden (bu örnekte reklam verileriniz) yararlanarak reklamcılık kararları almanız için tahmine dayalı bir model sunar. Genellikle, daha fazla veri sunmak ve sunduğunuz verilerin yüksek kaliteli olmasını sağlamak modelinizin doğruluğunu artırır. Sıkı şekilde kümelenmiş eğitim verileri sağlandığında her iki model de daha iyi performans gösterir.

Diferansiyel gizlilik

Hem doğrusal hem de mantıksal regresyon, diferansiyel gizliliği kullanır. Bu gizlilik türü, Ads Data Hub'daki diğer işlemler tarafından kullanılandan farklı bir gizlilik kontrolü sistemidir. Diferansiyel gizlilik, eğitim sürecinde sonuçlarınıza gürültü ekleyerek son kullanıcı gizliliğini korur. Bu gürültü düzeyi, nihai sonuçların işe yarayacağı kadar düşük fakat son kullanıcıların kimliğinin tespit edilemeyeceği kadar yüksektir. Ayrıca, gürültü düzeyi belirleyici değildir. Dolayısıyla sonuçlara uygulanan gürültü düzeyi tutarsız olduğu için son kullanıcı gizliliği daha da artırılır.

Sorgu sınırlama

Varsayılan EPSILON_PER_MODEL kullanıldığında "veri günü" başına 100 doğrusal ve mantıksal regresyon modelleme sorgusuyla sınırlandırılırsınız. Veri günü, belirli bir günde oluşturulan etkinlikleri ifade eder. Bu etkinlikler, sorgunuzu çalıştırırken sağladığınız başlangıç ve bitiş tarihlerine ve sorgunuzda kullanılan tabloları (ör. eğitim amacıyla kullanılan geçici tablolar) oluştururken belirtilen başlangıç ve bitiş tarihlerine karşılık gelir. Diğer bir deyişle 1 güne ait veriler en fazla 100 modelde kullanılabilir. Varsayılandan daha yüksek bir EPSILON_PER_MODEL değeri belirtirseniz daha az sayıda model oluşturabilirsiniz ancak bu modeller daha yüksek kaliteli olur. Daha düşük EPSILON_PER_MODEL değerleri seçerseniz daha fazla sayıda model oluşturabilirsiniz ancak bu modeller daha düşük kaliteli olur.

İşleyiş şekli

İş akışı şu temel adımları izler:

  1. Eğitim verilerini hazırlama
  2. Model oluşturma
  3. Modelden analiz toplama

Eğitim verilerini hazırlama

Yukarıda belirtildiği gibi, büyük ve yüksek kaliteli veri kümelerinin kullanılması genelde daha iyi sonuçlar verir. Ayrıca, giriş verileri minimum ve maksimum ölçeklendirmesi kullanılarak ölçeklendirildiğinden, seyrek şekilde kümelenmiş veriler veya belirgin aykırı değerlere sahip veriler ortalama değeri değiştirerek modeli olumsuz yönde etkileyebilir.

Ads Data Hub, varsayılan olarak doğrulama için kullanılacak eğitim verilerinin %18'ini rastgele seçer. Doğrulama için kullanılan verilerin yüzdesi, data_split_eval_fraction seçeneği ile kontrol edilebilir.

Model oluşturma

Modelinizi eğitmek için parametreleri ve giriş verilerini belirtin.

En İyi Uygulamalar

Bir modelin kalitesi üzerindeki en önemli faktörlerden biri, eğitim veri kümesinin boyutudur. Ancak boyut/kalite dengesi, soruna ve aşağıda listelenen faktörlere göre değişiklik gösterir. Lütfen deneyiminiz hakkında bilgi verin. * En az 100.000 kullanıcısı olan eğitim veri kümelerinden oluşturulan mantıksal regresyon modellerinde doğruluk oranının 0,70'ten yüksek olduğunu tespit ettik. * En az 800.000 kullanıcısı olan eğitim veri kümelerinden oluşturulan doğrusal regresyon modellerinde r-kare değerinin 0,70'ten yüksek olduğunu tespit ettik.

Modellerin kalitesini düşürebilecek başka faktörler de vardır. * Bir sınıfın diğerlerine kıyasla çok daha fazla temsil edildiği mantıksal modeller. Özellikle, bir etikette az sayıda eğitim veri kümesi kullanıcısı varsa diğer etiketlerde çok sayıda eğitim veri kümesi kullanıcısının olması, modelin küçük etiketteki doğruluğunu artırmak için pek etkili olmaz. Örneğin, iki etiket için 20.000 ve 1.000 eğitim veri kümesi kullanıcısının olması, 10.000 ve 2.000 kullanıcıdan daha kötüdür. * Etiketler için güçlü bir sinyal sağlamayan özellik verileri. * Daha kapsamlı özellik mühendisliği gerektiren ham veriler. Örneğin, bazı alanlarda çok sayıda olası değer olabilir. Bu tür verileri iyileştirme yollarından biri, değerleri daha az sayıda kategori veya pakete sahip bir özelliğe dönüştürmektir.

Analiz toplama

Modelinizin doğrulama verileri üzerindeki performansını değerlendirmek, özellikleri ve eğitim iterasyonlarıyla ilgili bilgileri (ör. tahmin sırasında model tarafından kullanılan temel ağırlıklar) incelemek ve görülmeyen verileri tahmin etmek için işlevleri çağırabilirsiniz.

CREATE MODEL ifadesi

CREATE MODEL ifadesi, belirttiğiniz ad ve veri kümesiyle bir model oluşturur. Model adı zaten mevcutsa CREATE MODEL, mevcut modelin yerini alır.

CREATE MODEL söz dizimi

CREATE MODEL
model_name
OPTIONS
(
  // model_option_list:
  // Required parameter.
  MODEL_TYPE = { 'ADH_LINEAR_REGRESSION' | 'ADH_LOGISTIC_REGRESSION'}

  // Optional tuning parameters.
  [, L1_REG = float64_value ]
  [, L2_REG = float64_value ]
  [, DATA_SPLIT_EVAL_FRACTION = float64_value ]
  [, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' |
                           'NORMAL_EQUATION' } ]
  [, MAX_ITERATIONS = int64_value ]
  [, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
  [, LEARN_RATE = float64_value ]
  [, EARLY_STOP = { TRUE | FALSE } ]
  [, MIN_REL_PROGRESS = float64_value ]
  [, LS_INIT_LEARN_RATE = float64_value ]
  [, EPSILON_PER_MODEL = float64_value ]
  [, AUTOMATIC_IMPUT_SCALING = bool_value ]
  [, MIN_MAX_SCALED_COLS = [string_value, string_value... ] ]
  [, STANDARD_SCALED_COLS = [string_value, string_value... ] ]
  [, QUANTILE_BUCKETIZED_COLS = [
        STRUCT(string_value AS col_name, int64_value AS num_buckets), 
       STRUCT(string_value AS col_name, int64_value AS num_buckets)... ] ]
)
AS query_statement

model_name

Alt çizgi ve kısa çizgi içeren alfanümerik bir ad. Nokta içeremez. Sağladığınız model adı zaten varsa eski modelin üzerine yazılır.

query_statement

Eğitim verilerini oluşturmak için kullanılan standart SQL sorgusunu belirtir. Aynı eğitim verilerini kullanarak birden çok model oluşturuyorsanız eğitim verilerini kullanarak geçici bir tablo oluşturun ve burada bu tabloya referans verin. Bu yöntem, silinme veya geç spam nedeniyle ortaya çıkabilecek olası farklılık kontrolü hatalarını önler.

model_option_list

model_type

(Zorunlu) Tek zorunlu seçenek. "adh_linear_regression" veya "adh_logistic_regression" olabilir.

l1_reg

(İsteğe bağlı) Uygulanan L1 normalleştirmesi miktarı. L1 normalleştirmesi, ağırlıklara ağırlıkların mutlak değerlerinin toplamıyla orantılı olarak oran uygular. Negatif olmayan bir sayı olabilir. Varsayılan olarak sıfırdır.

l2_reg

(İsteğe bağlı) Uygulanan L2 normalleştirmesi miktarı. L2 normalleştirmesi, ağırlıklara ağırlıkların karelerinin toplamının kareköküyle orantılı olarak oran uygular. Negatif olmayan bir sayı olabilir. Varsayılan olarak sıfırdır.

data_split_eval_fraction

(İsteğe bağlı) 0,01 ile 0,99 arasında olmalıdır. Varsayılan değer 0,18'dir. Değerlendirme veri kümesine dahil edilen verinin oranını belirler. Bu durum, modelde oluşacak satır sayısını azaltarak modelin doğruluğunu etkiler ancak kullanıcının çalıştırabileceği model sayısını artırır. Belirli bir veri kümesindeki her modelin aynı orana sahip olduğu varsayıldığında, bu ilişkinin grafiği şu şekilde olur:

Doğrulama oranı İzin verilen sorgu sayısı
0,01 7
0,1 8
0,15 8
0,18 9
0,2 9
0,3 10
0,5 14
0,9 50

optimize_strategy

(İsteğe bağlı) Doğrusal regresyon modellerini eğitme stratejisi.

Bağımsız değişkenler

"AUTO_STRATEGY", eğitim stratejisini aşağıdaki şekilde belirler:

  • l1_reg veya warm_start belirtilmişse batch_gradient_descent stratejisi kullanılır.
  • Eğitim özelliklerinin toplam kardinalitesi 10.000'den fazlaysa batch_gradient_descent stratejisi kullanılır.
  • Fazla uyum sorunu varsa (eğitim örnekleri sayısı 10'dan azsa • toplam kardinalite) batch_gradient_descent stratejisi kullanılır.
  • Diğer tüm durumlarda NORMAL_EQUATION stratejisi kullanılır.

"BATCH_GRADIENT_DESCENT" (yalnızca mantıksal), modeli toplu gradyan azalma yöntemini kullanarak eğitir. Bu yöntem, toplu gradyan yöntemini kullanarak kayıp işlevini optimize eder.

"NORMAL_EQUATION" (yalnızca doğrusal), analitik formülle doğrusal regresyon probleminin en küçük kare değerini doğrudan hesaplar. Normal denklem aşağıdaki durumlarda kullanılamaz:

  • l1_reg belirtilmişse.
  • warm_start belirtilmişse.
  • Eğitim özelliklerinin toplam kardinalitesi 10.000'den fazlaysa.
  • Varsayılan değer "AUTO_STRATEGY" ise.

max_iterations

(İsteğe bağlı) Eğitim iterasyonlarının veya adımlarının sayısı. Bu sorgu her iterasyon için bir ağaç oluşturduğundan aynı zamanda ağaç sayısını da ifade eder. 1'den büyük bir tam sayı olmalıdır. Varsayılan değer 20'dir.

learn_rate_strategy

(İsteğe bağlı, yalnızca mantıksal) Eğitim sırasında öğrenme hızını belirtmeye yönelik strateji.

Bağımsız değişkenler

"LINE_SEARCH", öğrenme hızını hesaplamak için satır arama yöntemini kullanır. Satır arama ilk öğrenme hızı, LS_INIT_LEARN_RATE için belirtilen değerdir.

  • Satır arama, eğitimi yavaşlatır ve işlenen bayt sayısını artırır. Ancak genelde belirtilen daha yüksek bir ilk öğrenim hızında bile tümleşir.

"CONSTANT", öğrenme hızını LEARN_RATE için belirtilen değere ayarlar.

Varsayılan değer: "LINE_SEARCH".

learn_rate

(İsteğe bağlı, yalnızca mantıksal) LEARN_RATE_STRATEGY, CONSTANT olarak ayarlandığında gradyan azalma için öğrenme hızı. LEARN_RATE_STRATEGY, "LINE_SEARCH" olarak ayarlanırsa bir hata döndürülür.

Bağımsız değişkenler

float64_value, 64 bitlik herhangi bir kayan nokta olabilir. Varsayılan olarak 0,1 (%10) değerine ayarlanır.

early_stop

(İsteğe bağlı) Göreli kayıp iyileştirmesinin MIN_REL_PROGRESS için belirtilen değerden düşük olduğu ilk iterasyondan sonra eğitimin durup durmayacağı.

Bağımsız değişkenler

"Evet" için TRUE, "hayır" için FALSE. Varsayılan olarak TRUE değerine ayarlanır.

min_rel_progress

(İsteğe bağlı) EARLY_STOP doğru değerine ayarlandığında, eğitime devam etmek için gereken minimum göreli kayıp iyileştirmesi. Örneğin, 0,01 değeri, eğitimin devam edebilmesi için her iterasyonun kaybı %1 oranında azaltması gerektiğini belirtir.

Bağımsız değişkenler

float64_value, 64 bitlik herhangi bir kayan nokta olabilir. Varsayılan olarak 0,1 (%10) değerine ayarlanır.

ls_init_learn_rate

(İsteğe bağlı) LEARN_RATE_STRATEGY='LINE_SEARCH' tarafından kullanılan ilk öğrenme hızını belirler. Bu seçenek yalnızca LINE_SEARCH belirtilmişse kullanılabilir.

Modelin LEARN_RATE değeri, ML.TRAINING_INFO ile belirtildiği üzere her iterasyonun iki katına çıkıyorsa LS_INIT_LEARN_RATE değerini ikiye katlanan son öğrenme hızına ayarlamayı deneyin. Optimum ilk öğrenme hızı her model için farklıdır. Bir model için iyi olan ilk öğrenme hızı, başka bir model için iyi olmayabilir.

Bağımsız değişkenler

float64_value, 64 bitlik herhangi bir kayan nokta olabilir.

epsilon_per_model

(İsteğe bağlı) Bu modeli eğitmek için kullanılacak gizlilik bütçesinin tutarını belirtir. Her reklam verisi müşterisine veri günü başına 10,0 tutarında bir gizlilik bütçesi verilir. Başarıyla eğitilen bir model, sorgu çalıştırıldığında belirtilen tarih aralığındaki her veri günü için bütçenin EPSILON_PER_MODEL kadarını harcar. ln(3)/10 varsayılan değerini kullandığınızda yaklaşık 100 model oluşturabilirsiniz. Daha yüksek bir değer kullanırsanız daha az sayıda model oluşturabilirsiniz ancak bu modeller daha yüksek kaliteli olur. Daha düşük bir değer kullanırsanız daha çok sayıda model oluşturabilirsiniz ancak bu modeller daha düşük kaliteli olur.

Bağımsız değişkenler

float64_value, In(3) değerinden düşük herhangi bir 64 bitlik pozitif kayan nokta sayısı olabilir. Bu yaklaşık 1,0986 değerine eşittir. Varsayılan değer ln(3)/10'dur.

automatic_input_scaling

(İsteğe bağlı) TRUE değerine ayarlandığında, sütun adları min_max_scaled_cols seçeneğinde açıkça çağrılmış gibi tüm sayısal özellik sütunlarına otomatik olarak min_max_scaling uygulanır. Burada, standard_scaled_cols veya quantile_bucketized_cols seçeneğinde açıkça çağrılmış olan tüm sütunlar istisnadır.

Bağımsız değişkenler

bool_value bir BOOL değeridir. Varsayılan değer TRUE.

min_max_scaled_cols

(İsteğe bağlı) Belirtilen numerical_expression özelliği sütunlarının her birini, tüm satırlar genelinde MIN ve MAX ile sınırlandırılacak şekilde 0-1 aralığında ölçeklendirir. Tahminde otomatik olarak aynı MIN ve MAX kullanılır. Tahmin verileri MIN, MAX aralığının dışındaysa 0 veya 1 ile sınırlandırılır.

Bağımsız değişkenler

Her string_value değerinin, dönüştürülecek sütun adını temsil eden bir STRING olduğu string_value dizisi.

standard_scaled_cols

(İsteğe bağlı) Belirtilen numerical_expression özellik sütunlarını tüm satırlarda standart hâle getirir. İfadeyi standart hâle getirmek için hesaplanan STDDEV ve MEAN otomatik olarak tahminde kullanılır.

Bağımsız değişkenler

Her string_value değerinin, dönüştürülecek sütun adını temsil eden bir STRING olduğu string_value dizisi.

quantile_bucketized_cols

Paket adı yüzdelik dilimlere göre değer olacak şekilde, belirtilen kesintisiz sayısal özellik sütunlarını bir STRING hâlinde paketlere ayırır. Tahminde otomatik olarak aynı yüzdelik dilimler kullanılır.

Bağımsız değişkenler

Her string_value değerinin dönüştürülecek kesintisiz sayısal sütun adını temsil eden bir STRING ve her int64_value değerinin, sayısal değerlerin bölüneceği paket sayısı olduğu bir STRUCT(string_value AS col_name, int64_value AS num_buckets) dizisi.

Doğrulama

  • Bu sorgu için belirtilen tarih aralığındaki her veri günü, en az EPSILON_PER_MODEL tutarında olacak şekilde yeterli gizlilik bütçesine sahip olmalıdır. Aksi halde sorgu başarısız olur.
  • Belirtilmiş olması durumunda isteğe bağlı ayarlama parametreleri, yukarıda gösterilen aralıklar için doğrulanır.
  • Yalnızca zorunlu olan model_type parametresi açıkça belirtilmelidir.
  • Eğitim veri kümesindeki bir sütun "label" olarak adlandırılmalıdır. Şu anda birden fazla etiket desteklenmemektedir.
  • Etiket sütunu NULL değerler içeremez. Etiket sütunu NULL değerler içeriyorsa sorgu başarısız olur.
  • Özellik sütunlarının hiçbiri user_id değerinden türetilemez.
  • Her satır tam olarak bir tekil kullanıcıyı temsil etmelidir. Bir satır, birden fazla kullanıcıya ait verileri temsil edemez. Bu durum belirli birleştirmelerde (ör. CROSS JOIN) gerçekleşebilir.
  • Hiçbir kullanıcı iki ayrı satırda bulunamaz.
  • Gizlilik nedeniyle, yalnızca söz dizimi bölümünde açıklanan seçenekler kullanılabilir. BQML CREATE MODEL sorgu belgelerinde bulunan diğer seçenekler şu anda desteklenmemektedir.

Değerlendirme işlevleri

ML.EVALUATE

Model metriklerini değerlendirmek için ML.EVALUATE işlevini kullanın. ML.EVALUATE işlevi, doğrusal regresyon veya mantıksal regresyon modelleriyle kullanılabilir.

SELECT
  *
FROM ML.EVALUATE(MODEL `linear_model_test`);

ML.ROC_CURVE

Mantıksal regresyona özgü metrikleri değerlendirmek için ML.ROC_CURVE işlevini kullanın. ML.ROC_CURVE, yalnızca mantıksal regresyon modellerini değerlendirir.

SELECT
  *
FROM ML.ROC_CURVE(MODEL `logistic_model_test`);

Tahmin işlevleri

ML.PREDICT

ML.PREDICT işlevi, model kullanılarak sonuçları tahmin etmek için kullanılabilir. ML.PREDICT kullanılarak elde edilen sonuçlar, Ads Data Hub'daki diğer sonuçlarla aynı gizlilik kontrollerine tabidir. Gizlilik kontrolleri hakkında daha fazla bilgi edinin.

Doğrusal regresyon

/* This example outputs the average value for labels that the model predicted */
SELECT
  AVG(predicted_label) AS average_predicted_label
FROM
  ML.PREDICT(MODEL `linear_model_test`, TABLE tmp.linear_training_set);

Mantıksal regresyon

/* This example outputs the model's prediction and probabilities for said prediction over individual users. It groups by label and prediction, counting the number of users in each prediction */
SELECT
  label,
  predicted_label, /* one of the two input labels, depending on which label has the higher predicted probability */
  COUNT(*) AS num /* a tally of users */
FROM
  ML.PREDICT(MODEL `logistic_model_test`, TABLE tmp.logistic_training_set)
GROUP BY 1, 2;

Model ve özellik denetimi işlevleri

ML.TRAINING_INFO

ML.TRAINING_INFO işlevi, bir modelin eğitim iterasyonlarıyla ilgili bilgileri görüntülemenize olanak tanır.

SELECT
  *
FROM ML.TRAINING_INFO(MODEL `logistic_model_test`);

ML.FEATURE_INFO

ML.FEATURE_INFO işlevi, bir modeli eğitmek için kullanılan giriş özellikleri hakkındaki bilgileri görüntülemenize olanak tanır.

SELECT
  *
FROM ML.FEATURE_INFO(MODEL `logistic_model_test`);

ML.WEIGHTS

ML.WEIGHTS işlevi, tahmin sırasında bir model tarafından kullanılan temel ağırlıkları görüntülemenize olanak tanır.

SELECT
  *
FROM ML.WEIGHTS(MODEL `linear_model_test`);

Örnekler

Model oluşturma

Aşağıdaki örneklerin tümünde model oluşturmayı göstermek için natality örnek tablosu kullanılmaktadır.

Inner-select olarak eğitim verileri (doğrusal)

Aşağıdaki örnekte bir çocuğun doğum ağırlığını tahmin etmek için doğum ağırlığı, cinsiyet, gebelik hafta sayısı, anne yaşı ve anne ırkı verileri kullanılmaktadır.

CREATE MODEL `natality_model`
OPTIONS
  (model_type='adh_linear_regression') AS
SELECT
  weight_pounds as label,
  is_male,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL

Inner-select olarak eğitim verileri (mantıksal)

Aşağıdaki örnekte çocuğun cinsiyetini tahmin etmek için doğum ağırlığı, cinsiyet, gebelik hafta sayısı, anne yaşı ve anne ırkı verileri kullanılmaktadır.

CREATE MODEL `natality_model`
OPTIONS
  (model_type='adh_logistic_regression') AS
SELECT
  weight_pounds,
  is_male as label,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL