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:
- 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 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
atauwarm_start
ditentukan, strategibatch_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