Pemodelan regresi di Ads Data Hub

Regresi linear dan logistik adalah model machine learning yang memungkinkan Anda menghasilkan prediksi yang bermakna dari data iklan.

  • Regresi linear membuat fungsi yang menyesuaikan garis dengan data sehingga jarak antara titik data dan garis diminimalkan. Model ini kemudian dapat digunakan untuk memprediksi nilai numerik berdasarkan input, seperti memprediksi nilai umur pengguna berdasarkan pembelian, interaksi sebelumnya, dll.
  • Regresi logistik digunakan untuk masalah klasifikasi prediktif. Model ini dapat berupa salah satu dari 2 jenis, bergantung pada jumlah variabel yang Anda berikan:
    • Regresi logistik biner menjawab "ya/tidak" pertanyaan, seperti seberapa besar kemungkinan peristiwa konversi akan terjadi.
    • Regresi logistik multikelas digunakan untuk memprediksi beberapa kemungkinan nilai, seperti menentukan apakah pelanggan "bernilai rendah", "bernilai sedang", atau "bernilai tinggi".

Regresi linear dan logistik belajar dari data pelatihan (dalam hal ini, data iklan), sehingga memberi Anda model prediktif untuk membuat keputusan iklan. Umumnya, memberikan lebih banyak data dan memastikan data yang Anda berikan berkualitas tinggi akan meningkatkan akurasi model Anda. Kedua model berperforma lebih baik saat diberi data pelatihan yang dikelompokkan secara ketat.

Privasi diferensial

Regresi linear dan logistik menggunakan privasi diferensial, yang merupakan sistem pemeriksaan privasi yang berbeda dengan yang digunakan oleh operasi lain di Ads Data Hub. Privasi diferensial memastikan privasi pengguna akhir dengan memasukkan derau ke dalam hasil Anda selama proses pelatihan. Tingkat derau ini tetap cukup rendah sehingga hasil akhir masih berguna, tetapi cukup tinggi sehingga pengguna akhir tidak dapat diidentifikasi. Selain itu, tingkat derau tidak menentukan, sehingga hasil memiliki tingkat derau yang tidak konsisten, yang makin memastikan privasi pengguna akhir.

Batasan kueri

Anda dibatasi hingga 100 kueri pemodelan regresi linear dan logistik per “hari data”, jika menggunakan EPSILON_PER_MODEL default. Hari data mengacu pada peristiwa yang dihasilkan pada hari tertentu. Peristiwa ini berkaitan dengan tanggal mulai dan akhir yang Anda berikan saat menjalankan kueri, serta tanggal mulai dan akhir yang digunakan saat membuat tabel apa pun yang digunakan kueri Anda—seperti tabel sementara yang digunakan untuk pelatihan. Artinya, data dari periode 1 hari dapat digunakan di maksimal 100 model. Jika Anda memilih untuk menentukan nilai EPSILON_PER_MODEL lebih besar daripada nilai default, Anda dapat membuat lebih sedikit model, tetapi model tersebut akan memiliki kualitas yang lebih tinggi. Jika Anda memilih nilai EPSILON_PER_MODEL yang lebih kecil, Anda dapat melatih lebih banyak model, tetapi kualitasnya akan lebih rendah.

Cara kerjanya

Alur kerja mengikuti langkah-langkah penting berikut:

  1. Menyiapkan data pelatihan.
  2. Buat model.
  3. Kumpulkan insight dari model.

Menyiapkan data pelatihan

Seperti disebutkan di atas, menggunakan {i>dataset<i} yang lebih besar dan berkualitas tinggi umumnya akan memberikan hasil yang lebih baik. Selain itu, karena data input diskalakan menggunakan penskalaan min-maks, data yang dikelompokkan secara jarang atau data dengan pencilan yang signifikan dapat berdampak buruk pada model dengan memindahkan nilai rata-rata.

Secara default, Ads Data Hub memilih secara acak 18% data pelatihan Anda untuk digunakan untuk validasi. Persentase data yang digunakan untuk validasi dapat dikontrol oleh opsi data_split_eval_fraction.

Membuat model

Tentukan parameter dan data input untuk melatih model Anda.

Praktik Terbaik

Salah satu faktor terpenting dalam kualitas model adalah ukuran set pelatihan. Namun, kompromi ukuran/kualitas akan berbeda, bergantung pada masalah dan faktor yang tercantum di bawah. Harap beri tahu kami pengalaman Anda.

  • Kami telah melihat akurasi > 0,70 untuk model regresi logistik yang dibangun dari set pelatihan dengan setidaknya 100.000 pengguna.
  • Kita telah melihat r-square > 0,70 untuk model regresi linear yang dibangun dari set pelatihan dengan setidaknya 800.000 pengguna.

Ada faktor lain yang dapat mengurangi kualitas model.

  • Model logistik dengan satu kelas yang jauh lebih terwakili daripada kelas lainnya. Khususnya, jika satu label memiliki sedikit pengguna set pelatihan, memiliki banyak pengguna set pelatihan dengan label lain mungkin tidak akan banyak membantu akurasi model pada label kecil. Misalnya, 20.000 & 1.000 pengguna set pelatihan untuk dua label lebih buruk dari 10.000 & 2.000.
  • Menampilkan data yang tidak memberikan sinyal kuat untuk label.
  • Data mentah yang membutuhkan rekayasa fitur lebih luas. Misalnya, beberapa kolom mungkin memiliki jumlah kemungkinan nilai yang sangat besar. Salah satu cara untuk meningkatkan kualitas data jenis ini adalah dengan mengubah nilai menjadi fitur dengan jumlah kategori, atau bucket yang lebih sedikit.

Mengumpulkan wawasan

Anda dapat memanggil fungsi untuk mengevaluasi performa model pada data validasi, memeriksa fitur dan informasi tentang iterasi pelatihan (seperti bobot dasar yang digunakan oleh model selama prediksi), dan memprediksi data yang tidak terlihat.

Pernyataan CREATE MODEL

Pernyataan CREATE MODEL membuat model dengan nama dan set data yang Anda tentukan. Jika nama model sudah ada, CREATE MODEL akan menggantikan model yang sudah ada.

Sintaksis CREATE MODEL

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

Nama alfanumerik, termasuk garis bawah dan tanda pisah. Tidak dapat menyertakan titik. Jika nama model yang Anda berikan sudah ada, model lama akan ditimpa.

query_statement

Menentukan kueri SQL standar yang digunakan untuk menghasilkan data pelatihan. Jika Anda membuat beberapa model menggunakan data pelatihan yang sama, buat tabel sementara dengan data pelatihan dan referensikan di sini. Taktik ini menghindari potensi error pemeriksaan perbedaan karena penghapusan total atau spam yang terlambat.

model_option_list

model_type

(Wajib) Satu-satunya opsi yang diperlukan. Dapat berupa 'adh_linear_regression', atau 'adh_logistic_regression'

l1_reg

(Opsional) Jumlah regularisasi L1 yang diterapkan. Regularisasi L1 menghukum bobot secara proporsional dengan jumlah nilai absolut dari bobot. Dapat berupa angka yang tidak negatif, defaultnya adalah nol.

l2_reg

(Opsional) Jumlah regularisasi L2 yang diterapkan. Regularisasi L2 menghukum bobot secara proporsional dengan akar kuadrat dari jumlah kuadrat bobot. Dapat berupa angka yang tidak negatif, defaultnya adalah nol.

data_split_eval_fraction

(Opsional) Harus antara .01 dan .99, dengan default .18. Menentukan fraksi data yang berakhir di set evaluasi. Hal ini memengaruhi akurasi model dengan mengurangi jumlah baris yang berakhir dalam model, tetapi juga meningkatkan jumlah model yang dapat dijalankan pengguna. Berikut adalah diagram hubungan tersebut dengan asumsi SETIAP model pada set data tertentu memiliki fraksi yang sama:

Bagian validasi Kueri yang diizinkan
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

(Opsional) Strategi untuk melatih model regresi linear.

Argumen

AUTO_STRATEGY menentukan strategi pelatihan sebagai berikut:

  • Jika l1_reg atau warm_start ditentukan, strategi batch_gradient_descent akan digunakan.
  • Jika total kardinalitas fitur pelatihan lebih dari 10.000, strategi batch_gradient_descent akan digunakan.
  • Jika ada masalah over-fitting (jumlah contoh pelatihan kurang dari 10 • total kardinalitas), strategi batch_gradient_descent akan digunakan.
  • Strategi NORMAL_EQUATION digunakan untuk semua kasus lain.

BATCH_GRADIENT_DESCENT (khusus logistik) melatih model menggunakan metode penurunan gradien batch, yang mengoptimalkan fungsi kerugian menggunakan fungsi gradien.

NORMAL_EQUATION (hanya linier) secara langsung menghitung solusi kuadrat terkecil dari masalah regresi linier dengan rumus analisis. Persamaan normal tidak dapat digunakan dalam kasus berikut:

  • l1_reg ditentukan.
  • warm_start ditentukan.
  • Total kardinalitas fitur pelatihan lebih dari 10.000.
  • Nilai defaultnya adalah 'AUTO_STRATEGY'.

max_iterations

(Opsional) Jumlah iterasi atau langkah pelatihan. Karena kueri ini membangun satu pohon untuk setiap iterasi, jumlah ini juga merupakan jumlah pohon. Harus berupa bilangan bulat yang lebih besar dari 1. Defaultnya adalah 20.

learn_rate_strategy

(Opsional, khusus logistik) Strategi untuk menentukan kecepatan pembelajaran selama pelatihan.

Argumen

LINE_SEARCH menggunakan metode line search untuk menghitung kecepatan pemelajaran. Kecepatan pembelajaran awal penelusuran baris adalah nilai yang ditentukan untuk LS_INIT_LEARN_RATE .

  • Line search memperlambat pelatihan dan meningkatkan jumlah byte yang diproses, tetapi umumnya menyatu bahkan dengan kecepatan pembelajaran awal yang ditetapkan lebih besar.

CONSTANT menetapkan kecepatan pembelajaran ke nilai yang ditentukan untuk LEARN_RATE.

Nilai defaultnya adalah 'LINE_SEARCH'.

learn_rate

(Opsional, khusus logistik) Kecepatan pembelajaran untuk penurunan gradien saat LEARN_RATE_STRATEGY ditetapkan ke CONSTANT. Jika LEARN_RATE_STRATEGY ditetapkan ke 'LINE_SEARCH', error akan ditampilkan.

Argumen

float64_value dapat berupa angka floating point 64-bit. Default-nya adalah 0,1 (10%).

early_stop

(Opsional) Apakah pelatihan harus berhenti setelah iterasi pertama ketika peningkatan kerugian relatif kurang dari nilai yang ditentukan untuk MIN_REL_PROGRESS.

Argumen

TRUE untuk “ya”, FALSE untuk “tidak”. Default-nya adalah TRUE.

min_rel_progress

(Opsional) Peningkatan kerugian relatif minimum yang diperlukan untuk melanjutkan pelatihan saat EARLY_STOP ditetapkan ke true (benar). Misalnya, nilai 0,01 menentukan bahwa setiap iterasi harus mengurangi kerugian sebesar 1% agar pelatihan dapat dilanjutkan.

Argumen

float64_value dapat berupa angka floating point 64-bit. Default-nya adalah 0,1 (10%).

ls_init_learn_rate

(Opsional) Menetapkan kecepatan pembelajaran awal yang digunakan LEARN_RATE_STRATEGY='LINE_SEARCH'. Opsi ini hanya dapat digunakan jika LINE_SEARCH ditentukan.

Jika LEARN_RATE model tampak menggandakan setiap iterasi seperti yang ditunjukkan oleh ML.TRAINING_INFO, coba setel LS_INIT_LEARN_RATE ke kecepatan pembelajaran dua kali lipat terakhir. Kecepatan pembelajaran awal yang optimal berbeda untuk setiap model. Kecepatan pembelajaran awal yang baik untuk satu model mungkin bukan kecepatan pembelajaran awal yang baik untuk model lainnya.

Argumen

float64_value dapat berupa angka floating point 64-bit.

epsilon_per_model

(Opsional) Menentukan jumlah anggaran privasi yang akan digunakan untuk melatih model ini. Setiap pelanggan data iklan diberi anggaran privasi sebesar 10,0 per hari data. Model yang berhasil dilatih akan membelanjakan EPSILON_PER_MODEL dari anggaran untuk setiap hari data dalam rentang tanggal yang ditentukan saat menjalankan kueri. Menggunakan nilai default ln(3)/10 akan memungkinkan pembuatan sekitar 100 model. Jika menggunakan nilai yang lebih tinggi, Anda dapat membuat lebih sedikit model, tetapi kualitas modelnya lebih tinggi. Jika menggunakan nilai yang lebih kecil, Anda akan dapat membuat lebih banyak model dengan kualitas yang lebih rendah.

Argumen

float64_value dapat berupa bilangan floating point 64-bit positif yang kurang dari ln(3), yaitu sekitar 1,0986. Nilai defaultnya adalah ln(3)/10.

automatic_input_scaling

(Opsional) Saat TRUE, semua kolom fitur numerik akan otomatis menerapkan min_max_scaling, seolah-olah nama kolom secara eksplisit dipanggil di opsi min_max_scaled_cols, kecuali kolom yang telah dipanggil secara eksplisit di opsi standard_scaled_cols atau quantile_bucketized_cols.

Argumen

bool_value adalah BOOL, nilai defaultnya adalah TRUE.

min_max_scaled_cols

(Opsional) Menskalakan setiap kolom fitur ekspresi_numerik yang ditentukan dalam rentang 0 hingga 1, yang dibatasi dengan MIN dan MAX di semua baris. MIN dan MAX yang sama otomatis digunakan dalam prediksi. Jika data prediksi berada di luar rentang MIN, MAX, data akan dibatasi menjadi 0 atau 1.

Argumen

Array string_value, dengan setiap string_value adalah STRING yang mewakili nama kolom yang akan diubah.

standard_scaled_cols

(Opsional) Menstandarkan kolom fitur numerical_expression yang ditentukan di semua baris. STDDEV dan MEAN yang dihitung untuk menstandarkan ekspresi akan otomatis digunakan dalam prediksi.

Argumen

Array string_value, dengan setiap string_value berupa STRING yang mewakili nama kolom yang akan diubah.

quantile_bucketized_cols

Mengelompokkan kolom fitur numerik berkelanjutan yang ditentukan ke dalam STRING dengan nama bucket sebagai nilai berdasarkan kuantil. Kuantil yang sama otomatis digunakan dalam prediksi.

Argumen

Array STRUCT(string_value AS col_name, int64_value AS num_buckets), dengan setiap string_value adalah STRING yang mewakili nama kolom numerik berkelanjutan yang akan diubah, dan setiap int64_value adalah jumlah bucket yang akan dibagi nilai numeriknya.

Validasi

  • Setiap hari data dalam rentang tanggal yang ditentukan untuk kueri ini harus memiliki anggaran privasi yang memadai, yaitu lebih dari EPSILON_PER_MODEL, atau kueri akan gagal.
  • Parameter penyesuaian opsional, jika ditentukan, akan divalidasi untuk rentang yang ditampilkan di atas.
  • Hanya satu parameter model_type wajib yang harus ditentukan secara eksplisit.
  • Satu kolom dalam set pelatihan harus diberi nama "label". Beberapa label saat ini tidak didukung.
  • Kolom label tidak boleh berisi nilai NULL. Jika kolom label berisi nilai NULL, kueri akan gagal.
  • Tidak satu pun kolom fitur yang dapat berasal dari user_id.
  • Setiap baris harus mewakili satu pengguna unik. Satu baris tidak boleh merepresentasikan data dari lebih dari satu pengguna. Hal ini dapat terjadi dengan gabungan tertentu, misalnya {i>CROSS JOIN<i}.
  • Tidak ada pengguna yang dapat berada dalam dua baris terpisah.
  • Demi alasan privasi, hanya opsi yang dijelaskan di bagian sintaksis yang dapat digunakan. Opsi lain yang mungkin ditemukan di dokumentasi kueri BQML CREATE MODEL saat ini tidak didukung.

Fungsi evaluasi

ML.EVALUATE

Gunakan fungsi ML.EVALUATE untuk mengevaluasi metrik model. Fungsi ML.EVALUATE dapat digunakan dengan model regresi linear atau regresi logistik.

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

ML.ROC_CURVE

Gunakan fungsi ML.ROC_CURVE untuk mengevaluasi metrik spesifik per regresi logistik. ML.ROC_CURVE hanya mengevaluasi model regresi logistik.

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

Fungsi prediksi

ML.PREDICT

Fungsi ML.PREDICT dapat digunakan untuk memprediksi hasil menggunakan model tersebut. Hasil yang diperoleh menggunakan ML.PREDICT tunduk pada pemeriksaan privasi yang sama dengan hasil lainnya di Ads Data Hub. Pelajari pemeriksaan privasi lebih lanjut

Regresi linear

/* 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);

Regresi logistik

/* 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;

Fungsi pemeriksaan model dan fitur

ML.TRAINING_INFO

Fungsi ML.TRAINING_INFO memungkinkan Anda melihat informasi tentang iterasi pelatihan suatu model.

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

ML.FEATURE_INFO

Fungsi ML.FEATURE_INFO memungkinkan Anda melihat informasi tentang fitur input yang digunakan untuk melatih model

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

ML.WEIGHTS

Fungsi ML.WEIGHTS memungkinkan Anda melihat bobot dasar yang digunakan oleh model selama prediksi.

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

Contoh

Buat model

Semua contoh berikut menggunakan tabel contoh natality untuk menunjukkan cara membuat model.

Data pelatihan dalam pilihan internal (linear)

Contoh berikut menggunakan berat lahir, jenis kelamin, minggu kehamilan, usia ibu, dan ras ibu untuk memprediksi berat lahir seorang anak.

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

Data pelatihan dalam pemilihan internal (logistik)

Contoh berikut menggunakan berat lahir, jenis kelamin, minggu kehamilan, usia ibu, dan ras ibu untuk memprediksi jenis kelamin anak.

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