1. Ringkasan
Di lab ini, Anda akan mempelajari alur kerja ML lengkap di GCP. Dari lingkungan Cloud AI Platform Notebooks, Anda akan menyerap data dari set data publik BigQuery, membangun dan melatih model XGBoost, serta men-deploy model ke AI Platform untuk prediksi.
Yang Anda pelajari
Anda akan mempelajari cara:
- Menyerap dan menganalisis set data BigQuery di AI Platform Notebooks
- Membangun model XGBoost
- Men-deploy model XGBoost ke AI Platform dan mendapatkan prediksi
Total biaya untuk menjalankan lab ini di Google Cloud adalah sekitar $1.
2. Menyiapkan lingkungan Anda
Anda memerlukan project Google Cloud Platform dengan penagihan yang diaktifkan untuk menjalankan codelab ini. Untuk membuat project, ikuti petunjuk di sini.
Langkah 1: Aktifkan Cloud AI Platform Models API
Buka bagian Model AI Platform di Konsol Cloud Anda, lalu klik Aktifkan jika belum diaktifkan.

Langkah 2: Aktifkan Compute Engine API
Buka Compute Engine dan pilih Aktifkan jika belum diaktifkan. Anda akan memerlukan ini untuk membuat instance notebook.
Langkah 3: Buat instance AI Platform Notebooks
Buka bagian AI Platform Notebooks di Cloud Console Anda, lalu klik Instance Baru. Kemudian, pilih jenis instance Python terbaru:

Gunakan opsi default, lalu klik Buat. Setelah instance dibuat, pilih Open JupyterLab:
Langkah 4: Instal XGBoost
Setelah instance JupyterLab Anda terbuka, Anda harus menambahkan paket XGBoost.
Untuk melakukannya, pilih Terminal dari peluncur:

Kemudian, jalankan perintah berikut untuk menginstal XGBoost versi terbaru yang didukung oleh AI Platform:
pip3 install xgboost==0.82
Setelah selesai, buka instance Notebook Python 3 dari peluncur. Anda siap untuk mulai menggunakan notebook.
Langkah 5: Impor paket Python
Di sel pertama notebook Anda, tambahkan impor berikut dan jalankan sel. Anda dapat menjalankannya dengan menekan tombol panah kanan di menu atas atau menekan command-enter:
import pandas as pd
import xgboost as xgb
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery
3. Menjelajahi set data BigQuery
BigQuery telah menyediakan banyak set data untuk publik agar dapat Anda pelajari. Untuk lab ini, kita akan menggunakan set data natalitas. Set data ini berisi data tentang hampir setiap kelahiran di AS selama periode 40 tahun, termasuk berat badan bayi saat lahir, dan informasi demografis tentang orang tua bayi. Kita akan menggunakan sebagian fitur untuk memprediksi berat lahir bayi.
Langkah 1: Download data BigQuery ke notebook kita
Kita akan menggunakan library klien Python untuk BigQuery guna mendownload data ke Pandas DataFrame. Dataset asli berukuran 21 GB dan berisi 123 juta baris. Untuk mempermudah,kita hanya akan menggunakan 10.000 baris dari set data.
Buat kueri dan pratinjau DataFrame yang dihasilkan dengan kode berikut. Di sini, kita mendapatkan 4 fitur dari set data asli, beserta berat bayi (hal yang akan diprediksi oleh model kita). Set data ini sudah ada sejak bertahun-tahun yang lalu, tetapi untuk model ini, kita hanya akan menggunakan data setelah tahun 2000:
query="""
SELECT
weight_pounds,
is_male,
mother_age,
plurality,
gestation_weeks
FROM
publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()
Untuk mendapatkan ringkasan fitur numerik dalam set data kita, jalankan:
df.describe()
Bagian ini menampilkan rata-rata, deviasi standar, minimum, dan metrik lainnya untuk kolom numerik kita. Terakhir, mari kita dapatkan beberapa data di kolom boolean yang menunjukkan jenis kelamin bayi. Kita dapat melakukannya dengan metode value_counts Pandas:
df['is_male'].value_counts()
Sepertinya set data hampir seimbang 50/50 menurut gender.
4. Menyiapkan data untuk pelatihan
Di bagian ini, kita akan membagi data menjadi set pelatihan dan pengujian untuk mempersiapkannya dalam melatih model.
Langkah 1: Ekstrak kolom label
Pertama, hapus baris dengan nilai null dari set data dan acak data:
df = df.dropna()
df = shuffle(df, random_state=2)
Selanjutnya, ekstrak kolom label ke dalam variabel terpisah dan buat DataFrame hanya dengan fitur kita:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
Sekarang, jika Anda melihat pratinjau set data dengan menjalankan data.head(), Anda akan melihat empat fitur yang akan kita gunakan untuk pelatihan.
Langkah 2: Konversi fitur kategoris menjadi bilangan bulat
Karena XGBoost memerlukan semua data berupa numerik, kita perlu mengubah cara merepresentasikan data di kolom is_male, yang saat ini berupa string Benar / Salah. Kita dapat melakukannya hanya dengan mengubah jenis kolom tersebut:
data['is_male'] = data['is_male'].astype(int)
Langkah 3: Pisahkan data ke dalam set pelatihan dan pengujian
Kita akan menggunakan utilitas train_test_split Scikit Learn yang kita impor di awal notebook untuk membagi data menjadi set pelatihan dan pengujian:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Sekarang kita siap membangun dan melatih model.
5. Penjelasan singkat tentang XGBoost
XGBoost adalah framework machine learning yang menggunakan pohon keputusan dan gradient boosting untuk membuat model prediktif. Model ini bekerja dengan menggabungkan beberapa pohon keputusan berdasarkan skor yang terkait dengan berbagai node daun dalam pohon.
Diagram di bawah adalah visualisasi sederhana dari jaringan pohon ensemble untuk model yang mengevaluasi apakah seseorang akan menyukai game komputer tertentu atau tidak (ini berasal dari dokumen XGBoost):

Mengapa kita menggunakan XGBoost untuk model ini? Meskipun jaringan neural tradisional telah terbukti berperforma terbaik pada data tidak terstruktur seperti gambar dan teks, pohon keputusan sering kali berperforma sangat baik pada data terstruktur seperti set data hipotek yang akan kita gunakan dalam codelab ini.
6. Membangun, melatih, dan mengevaluasi model XGBoost
Langkah 1: Tentukan dan latih model XGBoost
Membuat model di XGBoost itu mudah. Kita akan menggunakan class XGBRegressor untuk membuat model, dan hanya perlu meneruskan parameter objective yang tepat untuk tugas spesifik kita. Di sini, kita menggunakan model regresi karena kita memprediksi nilai numerik (berat bayi). Jika kita mengelompokkan data untuk menentukan apakah berat bayi lebih atau kurang dari 6 pound, kita akan menggunakan model klasifikasi.
Dalam hal ini, kita akan menggunakan reg:squarederror sebagai tujuan model.
Kode berikut akan membuat model XGBoost:
model = xgb.XGBRegressor(
objective='reg:linear'
)
Anda dapat melatih model dengan satu baris kode, memanggil metode fit() dan meneruskan data dan label pelatihan ke dalamnya.
model.fit(x_train, y_train)
Langkah 2: Evaluasi model Anda pada data pengujian
Sekarang kita dapat menggunakan model terlatih untuk membuat prediksi pada data pengujian dengan fungsi predict():
y_pred = model.predict(x_test)
Mari kita lihat performa model pada 20 nilai pertama dari set pengujian kita. Di bawah, kita akan mencetak prediksi berat bayi beserta berat bayi sebenarnya untuk setiap contoh pengujian:
for i in range(20):
print('Predicted weight: ', y_pred[i])
print('Actual weight: ', y_test.iloc[i])
print()
Langkah 3: Simpan model Anda
Untuk men-deploy model, jalankan kode berikut untuk menyimpannya ke file lokal:
model.save_model('model.bst')
7. Men-deploy model ke Cloud AI Platform
Kita telah membuat model berfungsi secara lokal, tetapi akan lebih baik jika kita dapat membuat prediksi di model tersebut dari mana saja (bukan hanya notebook ini). Pada langkah ini, kita akan men-deploy-nya ke cloud.
Langkah 1: Buat bucket Cloud Storage untuk model kita
Pertama, mari kita tentukan beberapa variabel lingkungan yang akan kita gunakan di seluruh codelab ini. Isi nilai di bawah dengan nama project Google Cloud Anda, nama bucket Cloud Storage yang ingin Anda buat (harus unik secara global), dan nama versi untuk versi pertama model Anda:
# Update these to your own GCP project, model, and version names
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
VERSION_NAME = 'v1'
MODEL_NAME = 'baby_weight'
Sekarang kita siap membuat bucket penyimpanan untuk menyimpan file model XGBoost. Kita akan mengarahkan Cloud AI Platform ke file ini saat men-deploy.
Jalankan perintah gsutil ini dari dalam notebook Anda untuk membuat bucket:
!gsutil mb $MODEL_BUCKET
Langkah 2: Salin file model ke Cloud Storage
Selanjutnya, kita akan menyalin file model tersimpan XGBoost ke Cloud Storage. Jalankan perintah gsutil berikut:
!gsutil cp ./model.bst $MODEL_BUCKET
Buka browser penyimpanan di Konsol Cloud Anda untuk mengonfirmasi bahwa file telah disalin:

Langkah 3: Buat dan deploy model
Perintah gcloud ai-platform berikut akan membuat model baru di project Anda. Kita akan menyebutnya xgb_mortgage:
!gcloud ai-platform models create $MODEL_NAME
Sekarang saatnya men-deploy model. Kita dapat melakukannya dengan perintah gcloud ini:
!gcloud ai-platform versions create $VERSION_NAME \
--model=$MODEL_NAME \
--framework='XGBOOST' \
--runtime-version=1.15 \
--origin=$MODEL_BUCKET \
--python-version=3.7 \
--project=$GCP_PROJECT
Saat ini berjalan, periksa bagian model di konsol AI Platform Anda. Anda akan melihat versi baru Anda di-deploy di sana:

Setelah deployment berhasil diselesaikan, Anda akan melihat tanda centang hijau di tempat indikator pemuatan berada. Deployment akan memakan waktu 2-3 menit.
Langkah 4: Uji model yang di-deploy
Untuk memastikan model yang di-deploy berfungsi, uji menggunakan gcloud untuk membuat prediksi. Pertama, simpan file JSON dengan dua contoh dari set pengujian kami:
%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]
Uji model Anda dengan menyimpan output perintah gcloud berikut ke variabel dan mencetaknya:
prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)
Anda akan melihat prediksi model Anda dalam output. Berat bayi sebenarnya untuk kedua contoh ini adalah 1,9 dan 8,1 pound.
8. Pembersihan
Jika Anda ingin terus menggunakan notebook ini, sebaiknya matikan notebook saat tidak digunakan. Dari UI Notebook di Konsol Cloud Anda, pilih notebook, lalu pilih Stop:

Jika Anda ingin menghapus semua resource yang telah dibuat di lab ini, cukup hapus instance notebook, bukan menghentikannya.
Menggunakan menu Navigasi di Konsol Cloud, jelajahi Penyimpanan dan hapus kedua bucket yang Anda buat untuk menyimpan aset model.