Pemodelan regresi di Ads Data Hub

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

  • Regresi linear membuat fungsi untuk 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 dapat berupa salah satu dari 2 jenis model, bergantung pada jumlah variabel yang Anda berikan:
    • Regresi logistik biner menjawab pertanyaan "ya/tidak", seperti seberapa besar kemungkinan peristiwa konversi akan terjadi.
    • Regresi logistik multiclass digunakan untuk memprediksi beberapa kemungkinan nilai, seperti menentukan apakah pelanggan adalah "nilai rendah", "nilai sedang", atau "nilai tinggi".

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

Privasi diferensial

Regresi linear dan logistik menggunakan privasi diferensial, yang merupakan sistem pemeriksaan privasi yang berbeda dari yang digunakan oleh operasi lain di Ads Data Hub. Privasi diferensial memastikan privasi pengguna akhir dengan memasukkan noise ke dalam hasil Anda selama proses pelatihan. Tingkat derau tidak berdampak signifikan pada hasil penelusuran sehingga tetap berguna, tetapi cukup tinggi sehingga pengguna akhir tidak dapat diidentifikasi. Selain itu, tingkat derau tidak dapat ditentukan sehingga hasilnya memiliki tingkat derau yang tidak konsisten, yang selanjutnya memastikan privasi pengguna akhir.

Pembatasan 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 sesuai dengan tanggal mulai dan akhir yang Anda berikan saat menjalankan kueri, dan tanggal mulai dan akhir yang digunakan saat membuat tabel yang digunakan kueri Anda—seperti tabel sementara yang digunakan untuk pelatihan. Artinya, data dari 1 hari dapat digunakan tidak lebih dari 100 model. Jika Anda memilih untuk menentukan nilai EPSILON_PER_MODEL yang lebih besar daripada default, Anda dapat membuat lebih sedikit model, tetapi kualitasnya akan 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 sedikit atau data dengan outlier yang signifikan dapat berpengaruh buruk pada model dengan memindahkan nilai rata-rata.

Secara default, Ads Data Hub secara acak memilih 18% data pelatihan Anda untuk digunakan dalam 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. 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.
  • Kami telah melihat r-kuadrat > 0,70 untuk model regresi linier yang dibangun dari set pelatihan dengan setidaknya 800.000 pengguna.

Ada faktor lain yang dapat menurunkan kualitas model.

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

Mengumpulkan insight

Anda dapat memanggil fungsi untuk mengevaluasi performa model Anda pada data validasi, memeriksa fitur dan informasi tentang iterasi pelatihan (seperti bobot dasar yang digunakan oleh model selama prediksi), serta 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 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 boleh 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 untuk menghindari error pemeriksaan perbedaan potensial 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 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-nya adalah .18. Menentukan fraksi data yang berakhir di set evaluasi. Hal ini memengaruhi akurasi model dengan mengurangi jumlah baris yang berakhir di model, tetapi juga meningkatkan jumlah model yang dapat dijalankan pengguna. Berikut adalah bagan hubungan tersebut dengan asumsi SETIAP model pada {i>dataset<i} tertentu memiliki fraksi yang sama:

Fraksi 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 digunakan.
  • Jika ada masalah overfitting (jumlah contoh pelatihan kurang dari 10 • total kardinalitas), strategi batch_gradient_descent digunakan.
  • Strategi NORMAL_EQUATION digunakan untuk semua kasus lainnya.

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

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

  • l1_reg telah ditentukan.
  • warm_start telah 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. Default-nya adalah 20.

learn_rate_strategy

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

Argumen

'LINE_SEARCH' menggunakan metode penelusuran baris untuk menghitung kecepatan pembelajaran. 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 penelusuran baris umumnya menyatu bahkan dengan kecepatan pemelajaran awal yang lebih besar.

'CONSTANT' menetapkan kecepatan pemelajaran ke nilai yang ditentukan untuk LEARN_RATE.

Nilai defaultnya adalah 'LINE_SEARCH'.

learn_rate

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

Argumen

float64_value dapat berupa bilangan 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 “yes”, FALSE untuk “no”. Nilai defaultnya adalah TRUE.

min_rel_progress

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

Argumen

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

ls_init_learn_rate

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

Jika LEARN_RATE model tampaknya menggandakan setiap iterasi seperti yang ditunjukkan oleh ML.TRAINING_INFO, coba tetapkan LS_INIT_LEARN_RATE ke kecepatan pembelajaran terakhir yang berlipat ganda. 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 bilangan 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 kualitasnya akan lebih tinggi. Jika menggunakan nilai yang lebih kecil, Anda akan dapat membuat lebih banyak model dengan kualitas lebih rendah.

Argumen

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

automatic_input_scaling

(Opsional) Saat TRUE, semua kolom fitur numerik akan otomatis menerapkan min_max_scaling, seolah-olah nama kolom dipanggil secara eksplisit dalam opsi min_max_scaled_cols, kecuali kolom apa pun yang telah secara eksplisit dipanggil dalam 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 numerik_expression 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 tersebut akan dibatasi ke 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 adalah 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 digunakan secara otomatis 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 tempat nilai numerik dibagi.

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 ada kolom fitur yang dapat diambil dari user_id.
  • Setiap baris harus mewakili satu pengguna unik. Satu baris tidak dapat merepresentasikan data dari lebih dari satu pengguna. Hal ini dapat terjadi dengan gabungan tertentu, misalnya CROSS JOIN.
  • Tidak ada pengguna yang bisa berada di dua baris terpisah.
  • Untuk alasan privasi, hanya opsi yang dijelaskan di bagian sintaksis yang dapat digunakan. Opsi lain yang mungkin ditemukan dalam 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 khusus 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 ini. Hasil yang diperoleh menggunakan ML.PREDICT akan menjalani pemeriksaan privasi yang sama seperti hasil lain 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 fitur dan model

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 di pemilihan internal (linear)

Contoh berikut menggunakan berat lahir, jenis kelamin, minggu kehamilan, usia ibu, dan ras ibu untuk memprediksi berat lahir 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 di 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