Membuat, Melatih, dan Menerapkan Model Machine Learning

dengan Amazon SageMaker

Dalam tutorial ini, Anda akan mempelajari cara menggunakan Amazon SageMaker untuk membuat, melatih, dan menerapkan model machine learning (ML). Kita akan menggunakan algoritme XGBoost ML yang populer untuk latihan ini. Amazon SageMaker merupakan layanan machine learning modular dan terkelola penuh yang memungkinkan pengembang dan ilmuwan data membuat, melatih, dan menerapkan model pembelajaran mesin sesuai kebutuhan.

Mengambil model pembelajaran mesin mulai pengonsepan hingga pembuatan biasanya rumit dan memakan waktu. Anda harus mengelola sejumlah besar data untuk melatih model tersebut, memilih algoritme terbaik untuk melatihnya, mengelola kapasitas komputasi saat melatihnya, lalu menerapkan model dalam lingkungan produksi. Amazon SageMaker mengurangi kerumitan ini dengan membuatnya lebih mudah untuk membuat dan menerapkan model pembelajaran mesin. Setelah memilih algoritme yang tepat dan kerangka kerja dari banyaknya pilihan yang tersedia, semua infrastruktur dasar akan dikelola untuk melatih model Anda pada skala petabyte, dan menerapkannya pada produksi.

Dalam tutorial ini, Anda akan mengisi peran sebagai pengembang machine learning yang bekerja di sebuah bank. Anda diminta untuk mengembangkan model machine learning untuk memprediksi apakah nasabah akan mengajukan sertifikat deposito (CD). Model ini akan dilatih pada dataset pemasaran yang berisi informasi tentang demografi nasabah, tanggapan terhadap acara pemasaran, dan faktor eksternal.

Data tersebut diberi label demi kemudahan Anda dan sebuah kolom di dalam dataset menunjukkan apakah nasabah mengajukan produk yang ditawarkan bank. Sebuah versi dari dataset ini tersedia untuk umum dari repositori ML yang diseleksi oleh University of California, Irvine. Tutorial ini mengimplementasikan model machine learning yang diawasi sejak data diberi label. (Pembelajaran tidak diawasi terjadi ketika dataset tidak diberi label.)

Dalam tutorial ini Anda akan:

  1. Membuat instans notebook
  2. Mempersiapkan data
  3. Melatih model yang akan belajar dari data
  4. Menerapkan model
  5. Mengevaluasi kinerja model ML Anda
 
Sumber daya yang Anda buat dan gunakan dalam tutorial ini memenuhi syarat untuk tingkat gratis AWS. Ingatlah untuk menyelesaikan Langkah 7 dan mengakhiri sumber daya Anda. Jika akun Anda telah diaktifkan dengan sumber daya ini selama lebih dari dua bulan, akun tersebut akan dikenakan biaya kurang dari $0,50.
 

Tutorial ini memerlukan akun AWS

Sumber daya yang Anda buat dalam tutorial ini memenuhi syarat untuk Tingkat Gratis. 

Selengkapnya tentang Tingkat Gratis >>


Langkah 1. Masuk ke konsol Amazon SageMaker

Navigasikan ke konsol Amazon SageMaker.


Saat Anda mengklik di sini, AWS Management Console akan membuka di jendela baru, sehingga Anda dapat membiarkan panduan langkah demi langkah ini tetap terbuka. Mulai ketikkan SageMaker dalam bilah pencarian dan pilih Amazon SageMaker untuk membuka konsol layanan.

( klik untuk memperbesar )


Langkah 2. Buat instans notebook Amazon SageMaker

Dalam langkah ini Anda akan membuat instans notebook Amazon SageMaker. 


2a. Dari dasbor Amazon SageMaker, pilih instans Notebook

( klik untuk memperbesar )


2b. Di halaman Buat instans notebook, masukkan nama di bidang nama instans Notebook. Tutorial ini menggunakan MySageMakerInstance sebagai nama instans, namun Anda dapat memilih nama lain jika menginginkannya.

Untuk tutorial ini, Anda dapat mempertahankan jenis instans Notebook default yaitu ml.t2.medium.

Untuk mengaktifkan instans notebook untuk mengakses dan mengunggah data dengan aman ke Amazon S3, peran IAM harus ditetapkan. Di bidang peran IAM, pilih Buat peran baru untuk membiarkan Amazon SageMaker membuat peran dengan izin yang diperlukan dan memberikannya pada instans Anda. Atau, Anda dapat memilih peran IAM yang sudah ada di akun Anda untuk maksud ini.

( klik untuk memperbesar )


2c. Di kotak Buat peran IAM, pilih Bucket S3 mana pun. Hal ini memungkinkan instans Amazon SageMaker Anda untuk mengakses semua bucket S3 di akun Anda. Pada kesempatan lain dalam tutorial ini, Anda akan membuat bucket S3 baru. Namun demikian, jika Anda sebaliknya memiliki bucket yang ingin digunakan, pilih Tentukan bucket S3 dan tetapkan nama bucket.

Pilih Buat peran.

( klik untuk memperbesar )


2d. Perhatikan bahwa Amazon SageMaker telah membuat sebuah peran bernama AmazonSageMaker-ExecutionRole-*** untuk Anda.

Untuk tutorial ini kita akan menggunakan nilai default untuk bidang lain. Pilih Buat instans notebook.

( klik untuk memperbesar )


2e. Di halaman instans Notebook, Anda seharusnya melihat instans Notebook MySageMakerInstance baru Anda di status Tertunda.

Instans notebook Anda seharusnya berubah dari status Tertunda menjadi InService dalam waktu kurang dari dua menit.

( klik untuk memperbesar )


Langkah 3. Mempersiapkan data

Dalam langkah ini Anda akan menggunakan notebook Amazon SageMaker untuk melakukan proses awal pada data yang dibutuhkan untuk melatih model machine learning Anda.


3a. Di halaman instans Notebook, tunggu hingga MySageMakerInstance berubah dari status Tertunda menjadi InService.

Setelah status menjadi InService, pilih MySageMakerInstance dan buka menggunakan menu drop down Tindakan atau memilih Buka Jupyter di sebelah status InService.

( klik untuk memperbesar )

( klik untuk memperbesar )


3b. Setelah Jupyter terbuka, dari tab File pilih Baru lalu pilih conda_python3

( klik untuk memperbesar )


3c. Untuk mempersiapkan data, latih model ML dan terapkan, Anda harus mengimpor sejumlah perpustakaan dan menentukan beberapa variabel lingkungan di lingkungan notebook Jupyter Anda. Salin kode berikut pada sel kode di instans Anda dan pilih Jalankan.

Saat kode beroperasi, sebuah tanda * akan muncul di antara tanda kurung siku sebagaimana digambarkan dalam tangkapan layar pertama di sebelah kanan. Setelah beberapa detik, eksekusi kode akan lengkap, tanda * akan digantikan dengan angka 1, dan Anda akan melihat pesan sukses sebagaimana digambarkan dalam tangkapan layar kedua di sebelah kanan. 

# import libraries
import boto3, re, sys, math, json, os, sagemaker, urllib.request
from sagemaker import get_execution_role
import numpy as np                                
import pandas as pd                               
import matplotlib.pyplot as plt                   
from IPython.display import Image                 
from IPython.display import display               
from time import gmtime, strftime                 
from sagemaker.predictor import csv_serializer   

# Define IAM role
role = get_execution_role()
prefix = 'sagemaker/DEMO-xgboost-dm'
containers = {'us-west-2': '433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest',
              'us-east-1': '811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest',
              'us-east-2': '825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest',
              'eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest'} # each region has its XGBoost container
my_region = boto3.session.Session().region_name # set the region of the instance
print("Success - the MySageMakerInstance is in the " + my_region + " region. You will use the " + containers[my_region] + " container for your SageMaker endpoint.")

( klik untuk memperbesar )

( klik untuk memperbesar )


3d. Dalam langkah ini, Anda membuat bucket S3 yang akan menyimpan data Anda untuk tutorial ini.

Salin kode berikut ke dalam sel kode berikutnya di notebook Anda dan ubah nama bucket S3 untuk membedakannya. Nama bucket S3 harus unik secara menyeluruh dan memiliki sejumlah larangan dan batasan lain.

Pilih Jalankan. Jika Anda tidak menerima pesan sukses, ubah nama bucket dan coba lagi.

 

bucket_name = 'your-s3-bucket-name' # <--- CHANGE THIS VARIABLE TO A UNIQUE NAME FOR YOUR BUCKET
s3 = boto3.resource('s3')
try:
    if  my_region == 'us-east-1':
      s3.create_bucket(Bucket=bucket_name)
    else: 
      s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': my_region })
    print('S3 bucket created successfully')
except Exception as e:
    print('S3 error: ',e)

( klik untuk memperbesar )


3e. Selanjutnya, Anda harus mengunduh data pada instans Amazon SageMaker Anda dan memuatnya ke dalam dataframe. Salin dan Jalankan kode berikut:

try:
  urllib.request.urlretrieve ("https://d1.awsstatic.com/tmt/build-train-deploy-machine-learning-model-sagemaker/bank_clean.27f01fbbdf43271788427f3682996ae29ceca05d.csv", "bank_clean.csv")
  print('Success: downloaded bank_clean.csv.')
except Exception as e:
  print('Data load error: ',e)

try:
  model_data = pd.read_csv('./bank_clean.csv',index_col=0)
  print('Success: Data loaded into dataframe.')
except Exception as e:
    print('Data load error: ',e)

( klik untuk memperbesar )


3f. Sekarang kita akan mengatur ulang data dan membaginya menjadi data pelatihan dan data tes.

Data pelatihan (70% pelanggan) akan digunakan selama putaran pelatihan model. Kita akan menggunakan pengoptimalan berbasis gradien untuk menyempurnakan parameter model secara konstan. Pengoptimalan berbasis gradien adalah cara untuk menemukan nilai parameter model yang memperkecil kesalahan model dengan menggunakan gradien fungsi kehilangan model.

Data tes (sisa 30% pelanggan) akan digunakan untuk mengevaluasi kinerja model dan mengukur seberapa baik model yang dilatih menyamaratakan data tidak terlihat.

Salin kode berikut ke dalam sel kode baru dan pilih Jalankan untuk mengatur kembali dan membagi data:

train_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [int(0.7 * len(model_data))])
print(train_data.shape, test_data.shape)

( klik untuk memperbesar )


Langkah 4. Latih model dari data

Dalam langkah ini, Anda akan melatih machine learning mesin dengan dataset pelatihan. 


4a. Untuk menggunakan model XGBoost pre-built pada Amazon SageMaker, Anda harus memformat kembali judul dan kolom pertama data pelatihan dan memuat data dari bucket S3.

Salin kode berikut ke dalam sel kode baru dan pilih Jalankan untuk memformat kembali dan memuat data:

pd.concat([train_data['y_yes'], train_data.drop(['y_no', 'y_yes'], axis=1)], axis=1).to_csv('train.csv', index=False, header=False)
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'train/train.csv')).upload_file('train.csv')
s3_input_train = sagemaker.s3_input(s3_data='s3://{}/{}/train'.format(bucket_name, prefix), content_type='csv')

4b. Selanjutnya Anda harus mengatur sesi Amazon SageMaker, membuat instans model XGBoost (pembuat estimasi) dan menentukan hiperparameter model. Salin kode berikut ke dalam sel kode baru dan pilih Jalankan:

sess = sagemaker.Session()
xgb = sagemaker.estimator.Estimator(containers[my_region],role, train_instance_count=1, train_instance_type='ml.m4.xlarge',output_path='s3://{}/{}/output'.format(bucket_name, prefix),sagemaker_session=sess)
xgb.set_hyperparameters(max_depth=5,eta=0.2,gamma=4,min_child_weight=6,subsample=0.8,silent=0,objective='binary:logistic',num_round=100)

4c. Dengan data yang dimuat dan pengaturan pembuat estimasi XGBoost, latih model menggunakan optimasi gradien pada instans ml.m4.xlarge dengan menyalin kode berikut ke dalam sel kode berikutnya dan memilih Jalankan.

Setelah beberapa menit, Anda harus memulai untuk melihat dihasilkannya log pelatihan.

xgb.fit({'train': s3_input_train})

( klik untuk memperbesar )


Langkah 5. Menerapkan model

Dalam langkah ini, Anda akan menerapkan model yang dilatih pada titik akhir, memformat ulang, lalu memuat data, kemudian menjalankan model ini untuk membuat prediksi.


5a. Untuk menerapkan model pada server dan membuat titik akhir yang dapat Anda akses, salin kode berikut ke dalam sel kode berikutnya dan pilih Jalankan:

xgb_predictor = xgb.deploy(initial_instance_count=1,instance_type='ml.m4.xlarge')

( klik untuk memperbesar )


5b. Untuk memprediksi apakah nasabah dalam data tes mengajukan produk bank atau tidak, salin kode berikut ke dalam sel kode berikutnya dan pilih Jalankan:

test_data_array = test_data.drop(['y_no', 'y_yes'], axis=1).values #load the data into an array
xgb_predictor.content_type = 'text/csv' # set the data type for an inference
xgb_predictor.serializer = csv_serializer # set the serializer type
predictions = xgb_predictor.predict(test_data_array).decode('utf-8') # predict!
predictions_array = np.fromstring(predictions[1:], sep=',') # and turn the prediction into an array
print(predictions_array.shape)

( klik untuk memperbesar )


Langkah 6. Evaluasi kinerja model

Dalam langkah ini, Anda akan mengevaluasi kinerja dan keakuratan model machine learning.


6a. Salin dan tempel kode di bawah ini dan pilih Jalankan untuk membandingkan nilai aktual versus prediksi dalam tabel bernama matriks kesalahan.

Berdasarkan prediksi tersebut, kita dapat menyimpulkan bahwa Anda memprediksikan bahwa seorang nasabah akan mengajukan sertifikat deposito secara akurat untuk 90% nasabah dalam data tes, dengan ketepatan sebesar 65% (278/429) untuk mereka yang mengajukan dan 90% (10.785/11.928) untuk yang tidak mengajukan.

cm = pd.crosstab(index=test_data['y_yes'], columns=np.round(predictions_array), rownames=['Observed'], colnames=['Predicted'])
tn = cm.iloc[0,0]; fn = cm.iloc[1,0]; tp = cm.iloc[1,1]; fp = cm.iloc[0,1]; p = (tp+tn)/(tp+tn+fp+fn)*100
print("\n{0:<20}{1:<4.1f}%\n".format("Overall Classification Rate: ", p))
print("{0:<15}{1:<15}{2:>8}".format("Predicted", "No Purchase", "Purchase"))
print("Observed")
print("{0:<15}{1:<2.0f}% ({2:<}){3:>6.0f}% ({4:<})".format("No Purchase", tn/(tn+fn)*100,tn, fp/(tp+fp)*100, fp))
print("{0:<16}{1:<1.0f}% ({2:<}){3:>7.0f}% ({4:<}) \n".format("Purchase", fn/(tn+fn)*100,fn, tp/(tp+fp)*100, tp))

( klik untuk memperbesar )


Langkah 7. Menghentikan sumber daya Anda

Dalam langkah ini, Anda akan menghentikan sumber daya terkait Amazon SageMaker.

Penting: Menghentikan sumber daya yang tidak digunakan secara aktif mengurangi biaya dan merupakan praktik terbaik. Tidak menghentikan sumber daya Anda akan menimbulkan biaya.


7a. Untuk menghapus titik akhir Amazon SageMaker dan objek dalam bucket S3 Anda, salin, tempel, dan Jalankan kode berikut:  

sagemaker.Session().delete_endpoint(xgb_predictor.endpoint)
bucket_to_delete = boto3.resource('s3').Bucket(bucket_name)
bucket_to_delete.objects.all().delete()

( klik untuk memperbesar )


Selamat!

Anda telah mempelajari cara menggunakan Amazon SageMaker untuk menyiapkan, melatih, menerapkan, dan mengevaluasi model machine learning. Amazon SageMaker memudahkan pembuatan model ML dengan menyediakan semua yang Anda butuhkan untuk terhubung dengan cepat ke data pelatihan Anda serta memilih algoritme dan kerangka kerja terbaik untuk aplikasi Anda, sekaligus mengelola semua infrastruktur dasar, sehingga Anda dapat melatih model pada skala petabyte.


 

Pelajari Selengkapnya

Amazon SageMaker dilengkapi dengan algoritme machine learning pre-built yang dapat digunakan untuk berbagai kasus penggunaan. Pelajari selengkapnya tentang penggunaan algoritme built-in yang dilengkapi pada Amazon SageMaker. 

Gali Lebih Dalam

Anda dapat menggunakan Machine Learning dengan Penyesuaian Model Otomatis dalam Amazon SageMaker. Hal ini memungkinkan Anda untuk menyesuaikan hiperparamater secara otomatis dalam model Anda untuk mencapai hasil terbaik. Lihat dokumentasi untuk Penyesuaian Model Otomatis dan postingan blog ini untuk menggali lebih dalam tentang kemampuan ini. 

Lihat fungsinya

Amazon SageMaker memiliki banyak sampel notebook tersedia yang menangani banyak kasus penggunaan umum untuk machine learning. Lihat semuanya di GitHub!