Bangun, latih, dan deploy model XGBoost di Cloud AI Platform

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.

d0d38662851c6af3.png

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:

a81c82876c6c16f9.png

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:

28dcf2790ce77c96.png

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):

fb061cd8c8f69999.png

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:

31e2567fa0117214.png

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:

a431661f9c3e6cb2.png

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:

879147427150b6c7.png

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.