Mulai Menggunakan BigQuery ML

1. Ringkasan

BigQuery ML (BQML) memungkinkan pengguna membuat dan menjalankan model machine learning di BigQuery menggunakan kueri SQL. Tujuannya adalah untuk membuat machine learning tersedia lebih luas dengan memungkinkan praktisi SQL membuat model menggunakan alat yang sudah ada, dan untuk meningkatkan kecepatan pengembangan dengan meniadakan kebutuhan akan pemindahan data.

Yang akan Anda bangun

Anda akan menggunakan set data contoh Analytics 360 untuk membuat model yang memprediksi apakah pengunjung akan melakukan transaksi atau tidak.

Yang akan Anda pelajari

Cara membuat, mengevaluasi, dan menggunakan model machine learning di BigQuery

Yang Anda butuhkan

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Cloud Console lalu buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID.

  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.

Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai$300 USD.

Membuka Konsol BigQuery

Di Konsol Google Developer, klik ikon Menu di kiri atas layar.

select-bq_0.png

Scroll ke bawah menu hingga ke bagian bawah, lalu klik BigQuery:

select-bq.png

Tindakan ini akan membuka konsol BigQuery di tab browser baru, yang terlihat seperti ini:

8b0218390329e8cf.png

Tapi, tidak ada apa-apa di sini! Untungnya, ada banyak set data publik yang tersedia di BigQuery yang dapat Anda jelajahi.

3. Membuat set data

Untuk membuat set data, klik panah di samping nama project Anda, lalu pilih create new dataset.

4f51bf57291a59db.png

Selanjutnya, beri nama set data Anda bqml_codelab, lalu klik OK.

63e32478a5652fbc.png

4. Membuat Model

Regresi logistik untuk Analytics 360

Sekarang, mari kita lanjutkan ke tugas kita. Berikut cara membuat model untuk memprediksi apakah pengunjung akan melakukan transaksi atau tidak.

#standardSQL
CREATE OR REPLACE MODEL `bqml_codelab.sample_model` 
OPTIONS(model_type='logistic_reg') AS
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20160801' AND '20170631'
LIMIT 100000;

Di sini, kami menggunakan sistem operasi perangkat pengunjung, apakah perangkat tersebut adalah perangkat seluler, negara pengunjung, dan jumlah tayangan halaman sebagai kriteria untuk menentukan apakah transaksi telah dilakukan.

Dalam hal ini, "codelab" adalah nama set data dan "sample_model" adalah nama model kita. Jenis model yang ditentukan adalah regresi logistik program biner. Dalam hal ini, label adalah sesuatu yang ingin kita sesuaikan. Perhatikan bahwa jika Anda hanya ingin melihat 1 kolom, cara ini adalah cara alternatif untuk menetapkan input_label_cols. Kami juga membatasi data pelatihan kami pada data yang dikumpulkan dari 1 Agustus 2016 hingga 31 Juni 2017. Kami melakukan ini untuk menyimpan data bulan terakhir untuk "prediksi". Selain itu, kami membatasi hingga 100.000 titik data untuk menghemat waktu. Anda dapat menghapus baris terakhir jika tidak terburu-buru.

Menjalankan perintah CREATE MODEL akan membuat Tugas Kueri berjalan secara asinkron, sehingga Anda dapat, misalnya, menutup atau memuat ulang jendela UI BigQuery.

[Opsional] Informasi model & statistik pelatihan

Jika tertarik, Anda bisa mendapatkan informasi model dengan mengklik sample_model di bagian set data bqml_codelab di UI. Di bagian Details, Anda akan menemukan beberapa info model dasar dan opsi pelatihan yang digunakan untuk menghasilkan model. Di bagian Statistik Pelatihan, Anda akan melihat tabel yang mirip dengan yang berikut:

b8bd9548a0d89165.png

5. Mengevaluasi Model

Mengevaluasi model kami

#standardSQL
SELECT
  *
FROM
  ml.EVALUATE(MODEL `bqml_codelab.sample_model`, (
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));

Jika digunakan dengan model regresi linear, kueri di atas akan menghasilkan kolom berikut: mean_absolute_error, mean_squared_error, mean_squared_log_error, median_absolute_error, r2_score, explained_variance. Jika digunakan dengan model regresi logistik, kueri di atas akan menghasilkan kolom berikut: precision, recall, accuracy, f1_score, log_loss, roc_auc. Harap baca glosarium machine learning atau jalankan penelusuran dengan Google untuk memahami cara menghitung masing-masing metrik ini beserta artinya.

Secara konkret, Anda akan menyadari bahwa bagian SELECT dan FROM pada kueri identik dengan yang digunakan selama pelatihan. Bagian WHERE mencerminkan perubahan jangka waktu dan bagian FROM menunjukkan bahwa kita memanggil ml.EVALUATE. Anda akan melihat tabel yang mirip dengan yang berikut:

1c7779f6028730cc.png

6. Menggunakan Model

Memprediksi pembelian per negara

Di sini, kita mencoba memprediksi jumlah transaksi yang dilakukan oleh pengunjung dari setiap negara, mengurutkan hasilnya, dan memilih 10 negara teratas berdasarkan pembelian.

#standardSQL
SELECT
  country,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY country
ORDER BY total_predicted_purchases DESC
LIMIT 10;

Perhatikan bahwa kueri ini sangat mirip dengan kueri evaluasi yang kami tunjukkan di bagian sebelumnya. Sebagai ganti ml.EVALUATE, kita menggunakan ml.PREDICT di sini dan kita menggabungkan bagian BQML dari kueri dengan perintah SQL standar. Secara konkret, kita tertarik pada negara dan jumlah pembelian di setiap negara, jadi itulah yang kita SELECT, GROUP BY, dan ORDER BY. LIMIT digunakan di sini untuk memastikan kita hanya mendapatkan 10 hasil teratas. Anda akan melihat tabel yang mirip dengan yang berikut:

e639f7a409741dcb.png

Memprediksi pembelian per pengguna

Berikut adalah contoh lainnya. Kali ini kita mencoba memprediksi jumlah transaksi yang dilakukan setiap pengunjung, mengurutkan hasilnya, dan memilih 10 pengunjung teratas berdasarkan transaksi.

#standardSQL
SELECT
  fullVisitorId,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country,
  fullVisitorId
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY fullVisitorId
ORDER BY total_predicted_purchases DESC
LIMIT 10;

Anda akan melihat tabel yang mirip dengan yang berikut:

2be1d8fa96e10178.png

7. Selamat!

Anda telah menyelesaikan codelab ini. Mencari tantangan? Coba buat model regresi linear dengan BQML.

Yang telah kita bahas

  • Membuat model regresi logistik biner
  • Mengevaluasi model
  • Menggunakan model untuk membuat prediksi

Langkah Berikutnya

  • Untuk mengetahui informasi selengkapnya tentang BQML, lihat dokumentasi.