Regresi linear dan logistik adalah model machine learning yang memungkinkan Anda membuat prediksi yang bermakna 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, bergantung pada jumlah variabel yang Anda berikan:
- Regresi logistik biner menjawab pertanyaan "ya/tidak", seperti kemungkinan terjadinya peristiwa konversi.
- Regresi logistik multi-class 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 Anda), sehingga memberi Anda model prediktif untuk membuat keputusan iklan. Secara umum, memberikan lebih banyak data dan memastikan bahwa data yang Anda berikan berkualitas tinggi akan meningkatkan akurasi model Anda. Kedua model tersebut berperforma lebih baik jika diberi data pelatihan yang dikelompokkan dengan rapat.
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 akhirnya masih berguna, tetapi cukup tinggi sehingga pengguna akhir tidak dapat diidentifikasi. Selain itu, tingkat derau bersifat non-deterministik, sehingga hasil memiliki tingkat derau yang tidak konsisten, yang lebih lanjut memastikan privasi pengguna akhir.
Pembatasan kueri
Anda dibatasi hingga 100 kueri pemodelan regresi linier dan logistik per “hari data”, saat menggunakan EPSILON_PER_MODEL
default. Hari data mengacu pada peristiwa yang dihasilkan pada hari tertentu. Peristiwa ini sesuai dengan tanggal mulai dan tanggal akhir yang Anda berikan saat menjalankan kueri, serta tanggal mulai dan tanggal akhir yang digunakan saat membuat tabel yang digunakan kueri Anda—seperti tabel sementara yang digunakan untuk pelatihan. Artinya, data dari 1 hari dapat digunakan dalam maksimal 100 model. Jika memilih untuk menentukan nilai EPSILON_PER_MODEL yang lebih besar dari default, Anda akan dapat membuat lebih sedikit model, tetapi model tersebut akan memiliki kualitas yang lebih tinggi. Selain itu, jika 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 yang disebutkan di atas, penggunaan set data yang lebih besar dan berkualitas tinggi umumnya akan menghasilkan hasil yang lebih baik. Selain itu, karena data input diskalakan menggunakan penskalaan min-maks, data yang dikelompokkan secara jarang atau data dengan outlier yang signifikan dapat memengaruhi model secara negatif 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. Harap beri tahu kami pengalaman Anda.
- Kami telah melihat akurasi > 0,70 untuk model regresi logistik yang dibuat dari set pelatihan dengan minimal 100.000 pengguna.
- Kami telah melihat r-squared > 0,70 untuk model regresi linear yang dibuat dari set pelatihan dengan minimal 800.000 pengguna.
Ada faktor lain yang dapat mengurangi kualitas model.
- Model logistik dengan satu class yang jauh lebih banyak direpresentasikan daripada yang lain. Secara khusus, 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 daripada 10.000 & 2.000.
- Data fitur yang tidak memberikan sinyal kuat untuk label.
- Data mentah yang memerlukan rekayasa fitur yang lebih luas. Misalnya, beberapa kolom mungkin memiliki kemungkinan nilai yang sangat banyak. Salah satu cara untuk meningkatkan kualitas data jenis ini adalah dengan mengubah nilai menjadi fitur dengan jumlah kategori atau bucket yang lebih sedikit.
Mengumpulkan insight
Anda dapat memanggil fungsi untuk mengevaluasi performa model pada data validasi, memeriksa fitur dan informasi pada iterasi pelatihan (seperti bobot dasar yang digunakan oleh model selama prediksi), dan memprediksi pada data yang belum pernah dilihat.
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 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 sesuai dengan jumlah nilai absolut dari bobot. Dapat berupa angka non-negatif, nilai defaultnya adalah nol.
l2_reg
(Opsional) Jumlah regularisasi L2 yang diterapkan. Regularisasi L2 menghukum bobot sesuai dengan akar kuadrat dari jumlah kuadrat bobot. Dapat berupa angka non-negatif, defaultnya nol.
data_split_eval_fraction
(Opsional) Harus antara 0,01 dan 0,99, dengan default 0,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 diagram hubungan tersebut dengan asumsi SETIAP model pada set data 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
akan digunakan. - Jika ada masalah overfitting (jumlah contoh pelatihan kurang dari 10 • kardinalitas total), strategi
batch_gradient_descent
akan digunakan. - Strategi
NORMAL_EQUATION
digunakan untuk semua kasus lainnya.
'BATCH_GRADIENT_DESCENT
' (khusus logistik) melatih model menggunakan metode gradien menurun batch, yang mengoptimalkan fungsi kerugian menggunakan fungsi gradien.
'NORMAL_EQUATION
' (khusus linear) langsung menghitung solusi kuadrat terkecil dari masalah regresi linear dengan formula analitik. 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 membuat satu hierarki untuk setiap iterasi, ini juga merupakan jumlah hierarki. Harus berupa bilangan bulat yang lebih besar dari 1. Setelan defaultnya adalah 20.
learn_rate_strategy
(Opsional, khusus logistik) Strategi untuk menentukan kecepatan belajar selama pelatihan.
Argumen
'LINE_SEARCH
' menggunakan metode penelusuran garis untuk menghitung kecepatan belajar. Kecepatan pembelajaran awal penelusuran baris adalah nilai yang ditentukan untuk LS_INIT_LEARN_RATE
.
- Penelusuran baris memperlambat pelatihan dan meningkatkan jumlah byte yang diproses, tetapi umumnya konvergen bahkan dengan kecepatan pembelajaran awal yang ditentukan lebih besar.
'CONSTANT
' menetapkan kecepatan belajar ke nilai yang ditentukan untuk LEARN_RATE
.
Nilai defaultnya adalah 'LINE_SEARCH
'.
learn_rate
(Opsional, khusus logistik) Kecepatan belajar untuk gradien menurun saat LEARN_RATE_STRATEGY
ditetapkan ke CONSTANT
. Jika LEARN_RATE_STRATEGY
ditetapkan ke 'LINE_SEARCH
', error akan ditampilkan.
Argumen
float64_value
dapat berupa bilangan floating point 64-bit apa pun. Setelan defaultnya adalah 0,1 (10%).
early_stop
(Opsional) Apakah pelatihan harus dihentikan setelah iterasi pertama dengan peningkatan kerugian relatif kurang dari nilai yang ditentukan untuk MIN_REL_PROGRESS
.
Argumen
TRUE
untuk “ya”, FALSE
untuk “tidak”. Defaultnya adalah TRUE
.
min_rel_progress
(Opsional) Peningkatan kerugian relatif minimum yang diperlukan untuk melanjutkan pelatihan saat EARLY_STOP
ditetapkan ke benar. 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 apa pun. Setelan defaultnya 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 tampaknya melipatgandakan setiap iterasi seperti yang ditunjukkan oleh ML.TRAINING_INFO
, coba tetapkan LS_INIT_LEARN_RATE
ke kecepatan belajar yang terakhir dilipatgandakan. Kecepatan belajar awal yang optimal berbeda untuk setiap model. Kecepatan belajar awal yang baik untuk satu model mungkin bukan kecepatan belajar awal yang baik untuk model lainnya.
Argumen
float64_value
dapat berupa bilangan floating point 64-bit apa pun.
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 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 akan dapat membuat lebih sedikit model, tetapi model tersebut akan memiliki kualitas yang 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 apa pun yang kurang dari ln(3), yaitu sekitar 1,0986. Setelan defaultnya adalah ln(3)/10.
automatic_input_scaling
(Opsional) Jika TRUE
, semua kolom fitur numerik akan otomatis menerapkan min_max_scaling
, seolah-olah nama kolom dipanggil secara eksplisit dalam opsi min_max_scaled_cols
, dengan pengecualian kolom yang telah dipanggil secara eksplisit 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 numerical_expression yang ditentukan dalam rentang 0 hingga 1, yang dibatasi dengan MIN
dan MAX
di semua baris.
MIN
dan MAX
yang sama akan otomatis digunakan dalam prediksi. Jika data prediksi berada di luar rentang MIN
, MAX
, data tersebut akan dibatasi hingga 0 atau 1.
Argumen
Array string_value
, dengan setiap string_value
adalah STRING yang mewakili nama kolom yang akan ditransformasi.
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 ditransformasi.
quantile_bucketized_cols
Membuat bucket kolom fitur numerik berkelanjutan yang ditentukan menjadi STRING
dengan nama bucket sebagai nilai berdasarkan kuantil.
Kuantil yang sama akan 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 ditransformasi dan setiap int64_value
adalah jumlah bucket untuk membagi nilai numerik.
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 yang diperlukan 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 berasal dari user_id.
- Setiap baris harus mewakili tepat satu pengguna unik. Satu baris tidak dapat mewakili data dari lebih dari satu pengguna. Hal ini dapat terjadi dengan join tertentu, misalnya CROSS JOIN.
- Tidak ada pengguna yang dapat berada di dua baris terpisah.
- Karena 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. 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 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 dalam (linear)
Contoh berikut menggunakan berat lahir, jenis kelamin, minggu masa gestasi, 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 dalam pemilihan dalam (logistik)
Contoh berikut menggunakan berat lahir, gender, minggu masa gestasi, usia ibu, dan ras ibu untuk memprediksi gender 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