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:
- Menyiapkan data pelatihan.
- Buat model.
- 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
atauwarm_start
ditentukan, strategibatch_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