Anda di halaman 1dari 51

Pengenalan Machine Learning

Machine Learning (ML), menurut Arthur Samuel, seorang ilmuwan komputer


yang mempelopori kecerdasan buatan, adalah sebuah bidang yang memberi komputer
kemampuan untuk belajar tanpa diprogram secara eksplisit

Apa contoh sederhana dari Machine Learning? Filter spam pada layanan email,
contohnya. Saat kita menandai satu email sebagai spam, maka program akan
mempelajari anatomi email tersebut untuk mengantisipasi email-email masuk
berikutnya spam atau bukan. Jika mirip, sebuah email baru akan masuk kategori spam,
dan sebaliknya. 

Uniknya, Machine Learning bukanlah hal yang baru. Filter email spam tersebut telah
ada sejak tahun 1990-an saat internet boom. Alhasil, hidup jutaan orang pengguna
email, jadi lebih mudah. Kita jadi tak perlu sering menandai sebuah email jika itu adalah
spam. 

Setelah itu mulai muncul ratusan implementasi dari ML yang sekarang kita gunakan
sehari-hari saat ini. Merentang dari rekomendasi video di Youtube, hingga kontrol suara
seperti pada Google Assistant. Yup, itu semua adalah bentuk Machine Learning. 

Selain Machine Learning, Anda juga pasti pernah mendengar yang namanya artificial
intelligence atau kecerdasan buatan sering dikaitkan dengan machine learning. Lalu,
apa hubungan antara AI dan ML?. 

Machine learning adalah sebuah cabang dari AI. Kecerdasan buatan memiliki
pengertian yang sangat luas, umumnya memiliki arti bagaimana komputer bisa memiliki
kecerdasan seperti manusia. Sedangkan ML memiliki arti lebih spesifik yaitu
menggunakan metode statistika untuk membuat komputer dapat mempelajari pola pada
data. Jadi, ketika Anda ditanya tentang hubungan AI dan ML di kemudian hari, Anda
bisa menjawabnya seperti itu ya. 
Mengapa Machine Learning?
Bayangkan jika kita bertugas mengembangkan sebuah aplikasi filter spam dengan
pemrograman tradisional. Seperti inilah langkah-langkah konvensionalnya:

1. Pertama kita akan mendefinisikan bagaimana sebuah email termasuk kategori spam
atau tidak. Misalnya kita mengidentifikasi bahwa pada email spam umumnya terdapat
kata-kata seperti “gratis”, “kaya”, “instan”, dan “murah”.
2. Kita kemudian menulis algoritma untuk setiap pola yang kita temukan pada email spam.
Program pun akan menandai sebuah email spam jika menemui pola terkait.
3. Terakhir kita akan mengulangi langkah 1 dan 2 sampai program kita cukup baik untuk
diluncurkan.

Karena kita menulis program menggunakan cara tradisional, hasilnya tentu daftar
panjang berisi aturan-aturan rumit yang sulit maintain. 

Mari bandingkan jika kita menggunakan ML untuk mengembangkan filter


spam tersebut. ML akan secara otomatis mempelajari pola kata-kata yang menentukan
sebuah email spam atau bukan. Program dengan ML pun menjadi relatif lebih
sederhana dan mudah untuk dipelihara. Flowchart di bawah menunjukkan bagaimana
alur pengembangan sebuah proyek Machine Learning.
Jenis-jenis Machine Learning
Machine Learning terbagi menjadi 4 kategori umum:

 Supervised Learning
Pada supervised learning, dataset yang digunakan memiliki label. Label adalah
tag atau pengenal dari sebuah data. Misalnya sebuah buah memiliki atribut
berwarna hijau, berat lebih dari 500 gram, kulitnya keras, berduri, memiliki bau
yang menyengat, dan daging buahnya manis. Buah yang memiliki karakteristik
seperti yang disebutkan dikenali sebagai durian, maka label dari atribut tersebut
adalah durian. Klasifikasi email spam adalah contoh dari supervised learning.
 Unsupervised Learning
Pada unsupervised learning, dataset yang digunakan tidak memiliki label.
Model unsupervised melakukan belajar sendiri untuk melabeli atau
mengelompokkan data. Contoh kasus unsupervised adalah dari data 100
pengunjung sebuah website, model akan belajar sendiri untuk mengelompokkan
pengunjung. Mungkin berdasarkan waktu kunjungan, lama kunjungan, jumlah
klik, dan sebagainya.
 Semi Supervised Learning
Semi Supervised merupakan gabungan dari supervised learning dan
unsupervised learning. Pada model semi supervised, dataset untuk pelatihan
sebagian memiliki label dan sebagian tidak. Implementasi dari model semi
supervised yang sering kita gunakan misalnya pada Google Photos. Pada
Google Photos kita bisa memberi tag untuk setiap orang yang terdapat pada
sebuah foto. Alhasil, ketika kita mengunggah foto baru dengan wajah orang yang
sudah kita beri tag sebelumnya, Google Photos akan secara otomatis mengenali
orang tersebut. Salah satu contoh dari model semi supervised adalah Deep
Belief Network (DBN).
 Reinforcement Learning
Reinforcement Learning adalah model yang belajar menggunakan
sistem reward dan penalties. Model belajar agar terus mendapatkan reward dan
menghindari penalties. Alpha Go adalah contoh terkenal dari reinforcement
learning. Alpha Go adalah sebuah program yang dikembangkan Google
DeepMind untuk memainkan permainan Go, sebuah permainan papan yang
berasal dari Cina. Alpha Go mempelajari setiap langkah dalam jutaan permainan
go untuk terus mendapatkan reward yaitu memenangkan sebuah permainan.
Alpha Go menjadi terkenal setelah menjadi program komputer pertama yang
berhasil mengalahkan pemain profesional.
Data Processing
Pada materi sebelumnya kita telah belajar tentang pengenalan Machine Learning (ML).
Namun, harus dimulai dari manakah jika kita ingin memulai proyek ML? Data
processing adalah tahap paling awal dalam setiap proyek ML. Pada tahap ini data akan
diambil dari sumber tertentu, dimasukkan pada suatu environment, dan diproses agar
bisa diolah oleh model machine learning.

Machine learning sama seperti mengajari seorang anak kecil. Ketika mengajari anak
kecil membedakan antara buah apel dan buah jeruk, kita tinggal memperlihatkan
buahnya dan memberi tahu mana apel dan mana jeruk. Namun demikian, komputer
saat ini belum secanggih itu sehingga kita perlu mempersiapkan data dengan data
processing agar bisa dimengerti komputer. 

Salah satu library yang paling populer untuk pengolahan data dalam machine learning
adalah Pandas Library. Pandas Library adalah salah satu library yang wajib Anda
kuasai dalam bidang machine learning.

Pandas Library
Pandas adalah sebuah library open source yang dipakai untuk menganalisis dan
memanipulasi data. Pandas dibangun menggunakan bahasa pemrograman Python
yang menawarkan struktur data dan operasi untuk manipulasi tabel numerik dan time
series. Tabel numerik adalah tabel yang berisi bilangan numerik, dan Tabel time series
adalah tabel yang berubah seiring waktu, misalnya tabel yang memuat perubahan nilai
pasar saham untuk setiap menitnya.

Berbagai jenis data yang umum dipakai dalam ML seperti CSV dan SQL dapat diubah
menjadi dataframe pandas. Dataframe adalah sebuah tabel yang terdiri dari kolom dan
baris dengan banyak tipe data di dalamnya. Pandas terintegrasi dengan library machine
learning yang populer seperti Scikit Learn (SKLearn) dan Numpy.

Pandas mendukung banyak jenis data yang dapat dipakai dalam sebuah project
machine learning. Berikut adalah beberapa contoh data yang dapat diolah dengan
pandas.

 CSV
CSV adalah sebuah format data di mana elemen dari setiap baris dipisahkan dengan
koma. CSV sendiri adalah singkatan dari Comma Separated Value.
 SQL
Standard Query Language adalah sebuah data yang berasal dari sebuah relational
database. Format data ini berisi sebuah tabel yang memiliki format data seperti integer,
string, float, dan biner.
 EXCEL
Excel adalah berkas yang didapat dari spreadsheet seperti Microsoft Excel atau Google
Spreadsheet. File Excel biasanya memuat data numerik.
 SPSS
SPPS atau Statistical Package for the Social Science adalah sebuah berkas dari
perangkat lunak yang biasa dipakai untuk statistik dan pengolahan data. File spss
disimpan dalam dan memiliki ekstensi file .sav.
 JSON
JSON atau Javascript Object Notation adalah salah satu format data yang
menggunakan sistem Key - Value di mana sebuah nilai disimpan dengan key tertentu
untuk memudahkan mencari data.  

Pada kelas ini kita hanya akan menggunakan data berjenis csv, karena data tipe ini
mudah didapat di situs penyedia data Machine Learning, contohnya seperti Kaggle.

Google Colab
Sebelum kita masuk ke latihan menggunakan library Pandas, kita perlu
mengenal tools yang akan kita gunakan dalam menjalankan program ML kita. Dalam
kelas ini kita akan menggunakan Google Colaboratory untuk menjalankan seluruh
project machine learning kita.

Google Colaboratory atau sering juga disebut “Colab” adalah sebuah tools dari Google
yang dibuat untuk keperluan mengolah data, belajar, dan bereksperimen khususnya
dalam bidang Machine Learning. Colab berjalan sepenuhnya pada Cloud dengan
memanfaatkan media penyimpanan Google Drive. 

Untuk membuka Google Colab, Anda dapat membuka tautan


ini colab.research.google.com. Berikut adalah tampilan antarmuka dari Google
Colaboratory. Untuk membuat dan menyimpan proyek pada Google Colab Anda harus
login terlebih dahulu menggunakan akun Google Anda.
Latihan Konversi Pandas Dataframe
Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini, untuk
membukanya upload berkasnya dari Google Colab.

Setelah sebelumnya kita mengenal library Pandas, sekarang kita akan belajar
menggunakan library tersebut.

Pandas memiliki fungsi untuk mengubah data dari berbagai jenis


menjadi dataframe seperti yang telah dibahas di submodul sebelumnya. Contohnya,
untuk mengubah data CSV menjadi dataframe, kita hanya cukup memanggil
fungsi pandas.read_csv() dan memasukkan nama berkas pada parameternya. Berikut
adalah contoh mengubah data csv menjadi dataframe Pandas. 

Pertama kita bisa buka Google Collab, dengan mengunjungi


tautan colab.research.google.com. Anda bisa menekan tombol Notebook Baru pada
halaman pertama.

Pada notebook baru, kita akan melakukan Import library pandas dan memberikan


alias ‘pd’ untuk library tersebut. Memberikan alias ‘pd’ terhadap library pandas adalah
praktek yang umum dilakukan para pengembang ML.

1. import pandas as pd

Colab memiliki direktori yang menyimpan berkas-berkas umum yang dapat dipakai
untuk berbagai keperluan. Berkas-berkas bawaan tersebut disimpan dalam sebuah
direktori bernama ‘sample_data’.
Untungnya, notebook pada Colab kita memiliki berkas csv yang dapat kita pakai untuk
mencoba library pandas. Anda juga bisa melihat beberapa berkas bawaan yang
disediakan Colab dengan menggunakan library os.

1. import os

2. os.listdir('sample_data')

Pada latihan ini kita akan mencoba melakukan konversi dari


berkas ‘california_housing_train.csv’ yang merupakan bawaan dari Colab. Untuk
mengubah berkas csv menjadi dataframe, kita menggunakan fungsi ‘read_csv’ pada
library pandas kemudian menyimpannya pada sebuah variabel yaitu df.

1. df = pd.read_csv('sample_data/california_housing_train.csv')

2. df.head()

Untuk melihat apakah konversi berhasil, Anda bisa memanggil fungsi head() pada


dataframe. Lalu jalankan cell tersebut. Fungsi head() akan menampilkan 5 baris teratas
dari sebuah dataframe. 

Jika keluaran dari cell seperti di bawah, maka selamat, Anda berhasil melakukan
konversi.
Data Cleaning
Sebuah model Machine Learning tidak mampu untuk langsung / seketika mengolah
data yang kita temukan dari berbagai sumber. Ada istilah Garbage In - Garbage
Out yang berarti hasil dari machine learning akan buruk jika input yang Anda masukkan
juga buruk. Tidak seluruh data yang kita dapat dari berbagai sumber siap untuk
langsung diberikan ke sebuah model machine learning. Perolehan data memiliki
banyak kekurangan, sehingga perlu Anda olah terlebih dahulu.

Berikut adalah beberapa hal yang umum yang harus diperhatikan dalam proses data
cleaning:

1. Konsistensi Format
Sebuah variabel mungkin tidak memiliki format yang konsisten seperti penulisan
tanggal 10-Okt-2020 versus 10/10/20. Format jam yang berbeda seperti 17.10
versus 5.10 pm. Penulisan uang seperti 17000 versus Rp 17.000. Data dengan
format berbeda tidak akan bisa diolah oleh model machine learning. Solusinya,
format data harus konsisten.
2. Skala Data
Jika sebuah variabel memiliki jangka dari 1 sampai 100, pastikan tidak ada data
yang lebih dari 100. Untuk data numerik, jika sebuah variabel merupakan bilangan
positif, maka pastikan tidak ada bilangan negatif.
3. Duplikasi data
Data yang memiliki duplikat akan mempengaruhi model machine learning, apalagi
data yang duplikat memiliki jumlah yang besar. Untuk itu kita harus memastikan
tidak ada data yang terduplikasi.
4. Missing Value
Missing value terjadi ketika data dari sebuah record tidak lengkap. Missing value
sangat mempengaruhi performa model machine learning. Ada dua opsi untuk
mengatasi missing value, yaitu menghilangkan data missing value atau mengganti
nilai yang hilang dengan nilai lain, seperti rata-rata dari kolom tersebut atau nilai
yang paling sering muncul.

 
5. Skewness
Skewness adalah kondisi di mana dataset cenderung memiliki distribusi data yang
tidak seimbang. Skewness akan mempengaruhi data dengan menciptakan bias
terhadap model. Apa itu bias? Sebuah model cenderung memprediksi sesuatu
karena ia lebih sering mempelajari hal tersebut. Misalkan ada sebuah model untuk
pengenalan buah di mana jumlah jeruk 92 buah dan apel 8 buah. Distribusi yang
tidak imbang ini akan mengakibatkan model lebih cenderung memprediksi jeruk
daripada apel.

Cara paling simpel untuk mengatasi skewness adalah dengan menyamakan


proporsi kelas mayoritas dengan kelas minoritas. Untuk teknik lebih lanjut dalam
mengatasi skewness atau imbalance data, Anda bisa membacanya di tautan ini.
Data Preparation
Setelah dataset dibersihkan masih ada beberapa tahap yang perlu dilakukan agar
dataset benar-benar siap untuk diproses oleh model machine learning. 

Umumnya beberapa model machine learning tidak dapat mengolah data kategorik,
sehingga kita perlu melakukan konversi data kategorik menjadi data numerik. Data
kategorik adalah data yang berupa kategori dan berjenis string. Contoh data kategorik
adalah sebuah kolom pada dataset yang berisi jenis binatang seperti anjing, kucing,
dan harimau. Contoh lain dari data kategorik adalah merek mobil seperti Ford, Honda,
Toyota, dan BMW.

Banyak model machine learning seperti Regresi Linear dan Support Vector


Machine (kedua model ini akan dibahas pada modul-modul selanjutnya) yang hanya
menerima input numerik sehingga tidak bisa memproses data kategorik. Salah satu
teknik untuk mengubah data kategorik menjadi data numerik adalah dengan
menggunakan One Hot Encoding. One Hot Encoding mengubah data kategorik dengan
membuat kolom baru untuk setiap kategori seperti gambar di bawah.
Data Preparation Opsional
Selain konversi data kategorik menjadi numerik, ada beberapa teknik lain dalam data
preparation. Teknik yang akan dibahas antara lain membuang outlier, normalization,
dan standardization.

Outlier Removal
Dalam statistik, outlier adalah sebuah nilai yang jauh berbeda dari kumpulan nilai
lainnya dan dapat mengacaukan hasil dari sebuah analisis statistik. Outlier dapat
disebabkan kesalahan dalam pengumpulan data atau nilai tersebut benar ada dan
memang unik dari kumpulan nilai lainnya.

Apapun alasannya kemunculannya, Anda perlu  mengetahui cara untuk


mengidentifikasi dan memproses outlier. Ini adalah bagian penting dalam persiapan
data di dalam machine learning. Salah satu cara termudah untuk mengecek apakah
terdapat outlier dalam data kita adalah dengan melakukan visualisasi.

Berikut adalah contoh visualisasi terhadap data yang memiliki outlier.

Dapat dilihat dengan jelas bahwa terdapat satu sampel yang jauh berbeda dengan
sampel-sampel lainnya. Setelah mengetahui bahwa di data kita terdapat outlier, kita
dapat mencari lalu menghapus sampel tersebut dari dataset.
Normalization
Normalization adalah salah satu teknik yang dipakai dalam data preparation. Tujuan
dari normalisasi adalah mengubah nilai-nilai dari sebuah fitur ke dalam skala yang
sama. Normalization memungkinkan kenaikan performa dan stabilitas dari sebuah
model machine learning.

Contoh dari normalization adalah ketika kita memiliki dataset seperti di atas yang
memiliki fitur umur dengan skala 23 sampai 45 tahun, dan fitur penghasilan dengan
skala 4.000.000 sampai 35.000.000. Di sini kita melihat bahwa fitur penghasilan sekitar
satu juta kali lebih besar dari fitur umur dan menunjukkan kedua fitur ini berada pada
skala yang sangat jauh berbeda.

Ketika membangun model seperti regresi linear, fitur penghasilan akan sangat
mempengaruhi prediksi dari model karena nilainya yang jauh lebih besar daripada
umur. Walaupun, tidak berarti fitur tersebut jauh lebih penting dari fitur umur. 

Salah satu contoh dari normalization adalah min-max scaling di mana nilai-nilai


dipetakan ke dalam skala 0 sampai 1. SKLearn menyediakan library untuk
normalization

Pada Colab kita Import library MinMaxScaler dan masukkan data dari tabel


sebelumnya.

1. from sklearn.preprocessing import MinMaxScaler

2. data = [[12000000, 33], [35000000, 45], [4000000, 23], [6500000, 26], [9000000,
29]]

Pada cell selanjutnya kita buat object scaler dan panggil fungsi fit() pada data. Fungsi fit
adalah fungsi untuk menghitung nilai minimum dan maksimum pada tiap kolom.
1. scaler = MinMaxScaler()

2. scaler.fit(data)

Apabila dijalankan maka hasilnya sebagai berikut.

Terakhir kita panggil fungsi transform yang akan mengaplikasikan scaler pada data.

1. print(scaler.transform(data))

Hasil dari kode di atas seperti berikut.

Setiap nilai dari kolom gaji dan umur telah dipetakan pada skala yang sama seperti di
bawah ini.

Untuk informasi lebih detail tentang Min Max Scaler, silakan Anda
kunjungi tautan berikut.

Standardization
Standardization adalah proses untuk konversi nilai-nilai dari suatu fitur sehingga nilai-
nilai tersebut memiliki skala yang sama. Z score adalah metode paling populer untuk
standardisasi di mana setiap nilai pada sebuah atribut numerik akan dikurangi dengan
rata-rata dan dibagi dengan standar deviasi dari seluruh nilai pada sebuah kolom
atribut.

Fungsi standarisasi sama dengan normalization. Keduanya berfungsi menyamakan


skala nilai dari tiap atribut pada data. SKLearn menyediakan library untuk
mengaplikasikan standard scaler pada data.

Pada colab di cell pertama, kita akan mengimport library preprocessing dari scikit


learn lalu membuat data dummy sesuai dengan tabel di atas.

1. from sklearn import preprocessing

2. data = [[12000000, 33], [35000000, 45], [4000000, 23], [6500000, 26], [9000000,
29]]

Selanjutnya kita buat object scaler dan panggil fungsi fit dari scaler pada data. Fungsi fit
memiliki fungsi untuk menghitung rata-rata dan deviasi standar dari setiap kolom atribut
untuk kemudian dipakai pada fungsi transform.

1. scaler = preprocessing.StandardScaler().fit(data)

Terakhir, kita panggil fungsi transform untuk mengaplikasikan standard scaler pada
data. Untuk melihat hasil dari standard scaler kita tinggal memanggil objek scaler yang
telah kita buat sebelumnya. Kodenya sebagai berikut.

1. data = scaler.transform(data)

2. data
Hasil akhirnya apabila dijalankan seperti di bawah ini.

Data storage/warehouse 
Ada kalanya kita ingin menyimpan data yang telah kita proses ke dalam penyimpanan
data tertentu agar kita bisa mengolahnya kembali di lain waktu. Untuk mendukung hal
tersebut, ada beberapa tools yang bisa gunakan.

1. RDBMS
Dalam model relasional, sebuah database terdiri dari banyak tabel. Sebuah tabel
dibentuk dari kolom dan baris yang memuat nilai tertentu. Konsep Relational
Database Management System (RDBMS) sendiri merupakan sistem yang
mendukung adanya hubungan atau relasi antar tabel pada suatu database.
Setiap tabel dihubungkan dengan tabel lainnya dengan menggunakan primary
key dan foreign key. Saat ini sudah banyak jenis database yang menerapkan
model RDBMS. Sebut saja MySQL, PostgreSQL, dan Microsoft SQL Server.
2. NoSQL
Sesuai dengan namanya NoSQL adalah jenis basis data yang tidak
menggunakan bahasa SQL dalam manipulasi datanya. Dalam penyimpanan
datanya, NoSQL memiliki beberapa teknik penyimpanan yaitu:

 Dokumen : menghubungkan setiap kunci dengan struktur data kompleks yang


disebut dokumen.
 Graf : menyimpan informasi tentang jaringan data, seperti koneksi sosial.
 Nilai-kunci : adalah database NoSQL paling sederhana di mana setiap elemen
dalam database disimpan sebagai nilai yang diasosiasikan dengan sebuah
kunci.
 Kolom : menyimpan data yang memiliki volume besar, dimana setiap elemen
data disimpan pada kolom bukan pada baris.

Beberapa database NoSQL terpopuler adalah MongoDB, CouchDB, Cassandra,


Redis, Neo4J, dan Riak. Jika ingin mengetahui lebih lanjut tentang NoSQL,
silahkan Anda kunjungi tautan berikut. 

3. Firebase Realtime Database


Sesuai namanya, “Database Realtime” adalah database yang menyimpan data
yang berubah seiring waktu. Data jumlah penjualan harian, pengunjung mall
setiap jam, arus lalu lintas setiap menit, atau fluktuasi saham setiap detik
merupakan beberapa contoh data realtime. Data pada database realtime
disimpan dalam format waktu dan nilai pada waktu yang terkait seperti gambar di
bawah.

Firebase Realtime Database (FRD) adalah database berbasis cloud yang


didesain khusus untuk mengelola data realtime. FRD dapat menyimpan dan
melakukan sinkronisasi data secara realtime di mana setiap kali ada perubahan
data terbaru, FRD langsung menyimpannya pada Cloud. FRD juga dilengkapi
fitur offline di mana ketika tidak ada koneksi internet, FRD akan menyimpan data
secara lokal, kemudian saat online, akan melakukan sinkronisasi ke Cloud.
Keren, kan?
4. Spark
Apache Spark adalah perangkat lunak untuk pemrosesan dan analisis data
berskala besar. Spark dapat digunakan dalam proses ETL (Extract Load
Transform), data streaming, perhitungan grafik, SQL, dan machine learning.
Untuk machine learning, Spark menyediakan MLlib yang berisi implementasi
model machine learning seperti klasifikasi, regresi, pengklasteran, penurunan
dimensi, dan pemfilteran kolaboratif.
5. Big Query
BigQuery adalah data warehouse berbasis cloud untuk perusahaan yang
menawarkan penyimpanan data berbasis SQL dan analisis data berukuran
besar. Karena berbasis cloud dan tidak ada infrastruktur yang perlu dikelola,
pengguna dapat berfokus pada pengolahan data tanpa memerlukan
seorang administrator database. Di bawah ini adalah tampilan antarmuka
dari Google BigQuery.

Sebagai ML Engineer masa depan, kita harus mampu mengoperasikan berbagai jenis
data storage dan data warehouse karena perusahaan tempat kita ingin bekerja sebagai
ML Engineer nanti, tidak selalu menggunakan data warehouse atau data storage yang
sama.
Datasets
Dataset yang telah diproses kemudian siap kita proses dengan machine learning. Satu-
satunya cara untuk mengetahui apakah model machine learning kita bagus atau tidak
adalah dengan mengujinya pada kasus yang belum pernah ia hadapi. Kita bisa
membuat sebuah model dan langsung mengujinya pada tahap produksi dan memonitor
kualitasnya. Hal ini masuk akal, tapi jika ternyata model yang kita kembangkan bekerja
dengan buruk, pelanggan dan klien kita akan komplain.

Training set dan Test set


Pilihan yang lebih baik adalah dengan membagi dataset menjadi 2 bagian yaitu data
training dan data testing. Dengan demikian, kita bisa melakukan pelatihan model
pada train set, dan mengujinya pada test set.

Dengan menguji model terhadap data testing, kita dapat melihat kesalahan yang dibuat
dan memperbaikinya sebelum mulai membawa model kita ke tahap produksi. Data
testing diambil dengan proporsi tertentu -umumnya 20% dari keseluruhan data- jika
jumlah datanya kecil. Jika ukuran datanya sangat besar seperti 1 juta record, kita dapat
mengambil sekitar 10 ribu data saja untuk testing alias sebesar 1% saja.
Latihan SKLearn Train Test Split
Library Scikit Learn menyediakan fungsi untuk membagi dataset menjadi train set (data
training) dan test set (data testing).

Pada Colab kita import library yang dibutuhkan.

1. import sklearn

2. from sklearn import datasets

3. from sklearn.model_selection import train_test_split

Library sklearn menyediakan dataset iris yakni sebuah dataset yang umum digunakan


untuk masalah klasifikasi. Dataset ini memiliki jumlah 150 sampel. Untuk mendapatkan
dataset, kita bisa menulis kode berikut pada cell baru.

1. iris = datasets.load_iris()

Dataset iris dari library sklearn belum dapat langsung dipakai oleh sebuah model ML.
Sesuai dengan yang telah dibahas pada modul terdahulu, kita harus memisahkan
antara atribut dan label pada dataset.

1. x=iris.data

2. y=iris.target

Untuk membuat train set dan test set kita tinggal memanggil fungsi train_test_split.
Train_test_split memiliki parameter x yaitu atribut dari dataset, y yaitu target dari
dataset, dan test_size yaitu persentase dari test 

set dari dataset utuh. Train_test_split mengembalikan 4 nilai yaitu, atribut dari train set,
atribut  dari test set, target dari train set, dan target dari test set.

1. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

Ketika kita print panjang dari x_test, kita bisa melihat bahwa panjang dari atribut test set
adalah 30 sampel, sesuai dengan parameter yang kita masukkan pada fungsi
train_test_split yaitu 0.2 atau 20% dari 150 sampel. Kode untuk print panjang dari x_test
seperti di bawah ini

1. len(X_test)
Data Evaluation
Pada submodul sebelumnya kita telah belajar bagaimana menggunakan test set untuk
mengevaluasi model sebelum masuk ke tahap produksi. 

Sekarang bayangkan ketika kita bertugas untuk mengembangkan sebuah proyek ML.
Kita bimbang dalam memilih model yang akan dipakai, katakanlah dari 10 jenis model
yang tersedia. Salah satu opsinya adalah dengan melatih kedua model tersebut lalu
membandingkan tingkat erornya pada test set. Setelah membandingkan kedua model,
Anda mendapati model regresi linier memiliki tingkat eror yang paling kecil katakanlah
sebesar 5%. Anda lalu membawa model tersebut ke tahap produksi.

Kemudian ketika model diuji pada tahap produksi, tingkat eror ternyata sebesar 15%.
Kenapa ini terjadi?. Masalah ini disebabkan karena kita mengukur tingkat eror berulang
kali pada test set. Kita secara tidak sadar telah memilih model yang hanya bekerja
dengan baik pada test set tersebut. Hal ini menyebabkan model tidak bekerja dengan
baik ketika menemui data baru. Solusi paling umum dari masalah ini adalah dengan
menggunakan validation set.

Train test validation set


Validation set atau holdout validation adalah bagian dari train set yang dipakai
untuk pengujian model pada tahap awal. Secara sederhana, kita menguji beberapa
model dengan hyperparameter yang berbeda pada data training yang telah dikurangi
data untuk validation. Lalu kita pilih model serta hyperparameter yang bekerja paling
baik pada validation set. Setelah proses pengujian pada holdout validation, kita bisa
melatih model menggunakan data training yang utuh (data training termasuk data
validation) untuk mendapatkan model final. Terakhir kita mengevaluasi model final pada
test set untuk melihat tingkat erornya.
Dalam menggunakan holdout validation, ada beberapa hal yang harus
dipertimbangkan. Jika ukuran validation set-nya terlalu kecil, maka ada kemungkinan
kita memilih model yang tidak optimal. Ketika ukuran validation set terlalu besar, maka
sisa data pada train set lebih kecil dari data train set utuh di mana kondisi ini tidak ideal
untuk membandingkan model yang berbeda pada data training yang lebih kecil. Solusi
untuk masalah ini adalah dengan menggunakan Cross Validation.

Cross validation
K-Fold Cross Validation atau lebih sering disebut cross validation adalah salah satu
teknik yang populer dipakai dalam evaluasi model ML. Pada cross validation, dataset
dibagi sebanyak K lipatan. Pada setiap iterasi, setiap lipatan akan dipakai satu kali
sebagai data uji dan lipatan sisanya dipakai sebagai data latih. Dengan menggunakan
cross validation kita akan dapat hasil evaluasi yang lebih akurat karena model
dievaluasi dengan seluruh data. Berikut adalah ilustrasi dari cross validation.
Latihan SKLearn Cross Validation Split
Library SKLearn menyediakan fungsi cross_val_score untuk menghitung hasil dari
cross validation sebuah classifier bawaan sklearn. Pada coding practice kali ini kita
akan menggunakan cross_validation_score pada classifier decision_tree. Dataset yang
digunakan adalah dataset iris.

Pada Colab kita import semua library yang dibutuhkan di cell pertama. Dataset yang
akan kita gunakan adalah dataset iris yang dipakai pada submodul sebelumnya.

1. import sklearn
2. from sklearn import datasets
3. from sklearn.model_selection import cross_val_score
4. from sklearn import  tree
5. iris = datasets.load_iris()

Kemudian kita bagi antara atribut dan label pada dataset.

1. x=iris.data
2. y=iris.target

Kita akan membuat model machine learning pertama kita yaitu decision tree,
menggunakan library scikit learn. Model machine learning juga sering disebut sebagai
classifier. Lebih lanjut, variabel clf adalah singkatan dari classifier.

1. clf = tree.DecisionTreeClassifier()

Setelah dataset dan model siap, kita bisa menggunakan cross validation untuk
mengevaluasi performa dari model machine learning. Fungsi cross_val_score seperti di
bawah menerima 4 parameter yaitu, ‘clf’ yang merupakan model machine learning, ‘X’
yang merupakan atribut dari dataset, ‘y’ yang merupakan label dari dataset, dan ‘cv’
yang merupakan jumlah fold yang akan dipakai pada cross validation.

1. scores = cross_val_score(clf, x, y, cv=5)

Cross_val_score mengembalikan nilai berupa larik atau array yang terdiri dari akurasi
pengujian setiap fold dari dataset. Untuk mencetak dan mengetahui hasilnya,
tambahkan kode scores di bawah kode sebelumnya. Tampilannya seperti gambar di
bawah ini.

Elemen pertama dari larik menunjukkan nilai 0.96666 yang berarti ketika fold pertama
dijadikan validation set dan fold lainnya dijadikan train set, hasil dari pengujian tersebut
adalah akurasi sebesar 0.96666. 

Melihat akurasi dari seluruh pengujian fold yang memiliki nilai tinggi dan konsisten pada
tiap fold, kita mendapatkan gambaran bahwa model kita memiliki performa yang sangat
baik.

Secara umum jika hasil dari pengujian tiap fold pada cross validation memiliki nilai yang
bervariasi dari 0.85 sampai 0.99, maka model tersebut dapat dikatakan baik.
Data Unsupervised & Supervised
Pada modul sebelumnya telah sedikit dibahas tentang beberapa macam kategori
machine learning yaitu, supervised, unsupervised, semi-supervised, dan reinforcement
learning. 

Semi supervised merupakan gabungan dari supervised dan unsupervised. Dan


reinforcement learning dapat dianggap sebagai robot yang belajar untuk mendapatkan
reward terbanyak.

Tiap kategori memiliki beberapa jenis seperti, supervised learning yang terbagi menjadi
classification dan regression, unsupervised yang terbagi menjadi clustering,
pendeteksian anomali, dan pengurangan dimensi. Pada modul ini akan dibahas lebih
lanjut mengenai jenis-jenis dari setiap kategori.

Supervised
Supervised learning dapat dilihat sebagai sebuah robot yang belajar menjawab
pertanyaan sesuai dengan jawaban yang telah disediakan manusia. Unsupervised,
dapat dilihat sebagai robot yang berusaha belajar menjawab pertanyaan secara mandiri
tanpa ada jawaban yang disediakan manusia.

Supervised : Classification
Klasifikasi, adalah teknik untuk menentukan kelas atau kategori berdasarkan atribut
yang diberikan. Klasifikasi masuk dalam kategori supervised learning. Untuk lebih
mudah dalam memahami klasifikasi kita akan menggunakan contoh dataset Iris.
Dataset iris merupakan salah satu dataset populer untuk belajar bagaimana ML dipakai
dalam klasifikasi. Dataset ini berisi 150 sampel dari 3 spesies bunga iris. 

Pada dataset Iris terdapat 4 kolom atribut yaitu panjang sepal, lebar sepal, panjang
petal, dan lebar petal. Untuk label terdapat 3 kelas yaitu Setosa, Versicolor dan
Virginica. Kelas adalah kategori atau jenis yang terdapat pada dataset. Dalam hal ini
pada dataset terdapat 3 kelas yaitu Setosa, Versicolor, dan Virginica.
Sebuah model classification bertujuan untuk menentukan kelas berdasarkan atribut
tertentu. Pada kasus klasifikasi Iris, sebuah model bertugas untuk memprediksi spesies
dari sebuah bunga iris berdasarkan atributnya yaitu panjang sepal, lebar sepal, panjang
petal, dan lebar petalnya.

Contohnya panjang petal dari Iris Setosa lebih pendek dari spesies versicolor dan
virginica. Maka jika panjang petal pendek maka kemungkinan spesies Iris tersebut
adalah Setosa.
Klasifikasi terbagi lagi menjadi dua yaitu klasifikasi biner dan klasifikasi multi-kelas.
Pada klasifikasi biner, terdapat hanya 2 kelas pada dataset misalnya dataset diabetes
suku Indian Pima di mana kelas yang akan diprediksi hanya ada 2 yaitu positif diabetes
dan negatif diabetes. Pada klasifikasi multi-kelas terdapat lebih dari 2 kelas pada label.
Contoh dari klasifikasi multi kelas adalah klasifikasi bagian-bagian dari wajah. Sebuah
wajah memiliki beberapa bagian yaitu hidung, telinga, mulut, dan sebagainya. Pada
contoh dataset Iris seperti di atas karena terdapat 3 kelas maka dataset tersebut adalah
kasus klasifikasi multi kelas.

Decision Tree
Decision tree atau pohon keputusan adalah salah satu algoritma machine learning
supervised, yang dapat dipakai untuk masalah klasifikasi dan regresi. Decision tree
merupakan algoritma yang powerful alias mampu dipakai dalam masalah yang
kompleks. Decision tree juga merupakan komponen pembangun utama algoritma
Random Forest, yang merupakan salah satu algoritma paling powerful saat ini.

Decision tree memprediksi sebuah kelas(klasifikasi) atau nilai(regresi) berdasarkan


aturan-aturan yang dibentuk setelah mempelajari data.

Misalnya kita memiliki data seperti di bawah. Data berisi informasi mengenai kondisi
cuaca pada hari tertentu dan apakah cocok untuk bermain golf di kondisi cuaca
tersebut.

Sebuah pohon keputusan dapat dibuat dari data sebelumnya. Pada pohon keputusan di
bawah menggunakan hanya 2 atribut yaitu kondisi langit dan kecepatan angin untuk
menentukan bermain golf atau tidak.

Latihan SKLearn Decision Tree


Kode program yang akan diajarkan di sini bisa diunduh di tautan berikut ini, untuk
membukanya upload berkasnya dari Google Colab.

Setelah sebelumnya kita menggunakan data yang masih sederhana pada submodul
linear regression, kita akan menggunakan data yang lebih kompleks dari sebuah numpy
array. Untuk coding practice kali ini kita akan memakai dataset Iris, salah satu dataset
paling populer yang dipakai dalam belajar ML.

Dataset iris terdiri dari 4 atribut yaitu panjang sepal, lebar sepal, panjang petal, dan
lebar petal. Terdapat 3 kelas target pada dataset ini. Data ini dipakai untuk masalah
klasifikasi, di mana kita bisa memprediksi spesies dari sebuah bunga berdasarkan
atribut-atribut yang diberikan.

Pertama kita akan mengimpor library yang dibutuhkan dan mempersiapkan dataset.
Dataset dapat anda unduh di tautan berikut. Setelah data diunduh, masukkan berkas
Iris.csv ke dalam Colab. Lalu jangan lupa konversi dataset menjadi dataframe Pandas.

1. from sklearn.tree import DecisionTreeClassifier

2. import pandas as pd

3. from sklearn.datasets import load_iris

4. iris = pd.read_csv('Iris.csv')

Untuk melihat informasi mengenai data, Anda bisa memanggil fungsi .head() pada
dataframe.
1. iris.head()

Tampilan iris.head() saat dijalankan sebagai berikut.

Dapat dilihat bahwa terdapat kolom yang tidak penting pada dataset yaitu kolom ‘Id’.
Untuk menghilangkan kolom tersebut kita bisa menggunakan fungsi drop().

1. iris.drop('Id',axis=1,inplace=True)

Selanjutnya kita pisahkan antara atribut dan label untuk pelatihan model kita.

1. X = iris[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm' ]]

2. y = iris['Species']

Kemudian buat model decision tree kita. Terakhir kita melatih model kita dengan
menggunakan fungsi fit(). Keluaran dari cell di bawah menunjukkan bahwa model
decision tree telah dilatih dan parameter-parameternya juga ditampilkan. Penjelasan
mengenai parameter akan dibahas di modul-modul selanjutnya.

1. # membuat model Decision Tree

2. tree_model = DecisionTreeClassifier() 

3. # melakukan pelatihan model terhadap data

4. tree_model.fit(X, y)

Kita bisa mencoba model yang telah kita buat untuk memprediksi spesies dari sebuah
bunga Iris. Masih ingat bukan, bahwa atribut yang menjadi masukan dari model adalah
panjang sepal, lebar sepal, panjang petal, dan lebar petal. Kita masukkan nilai yang
sesuai dengan format tersebut secara berurutan dalam satuan centimeter. Pada kode di
bawah kita ingin memprediksi spesies dari sebuah bunga iris yang memiliki panjang
sepal 6,2 centimeter, lebar sepal 3,4 centimeter, panjang petal 5,4 centimeter, dan lebar
petal 2,3 centimeter. Hasil prediksi dari model kita adalah virginica.

1. # tree_model.predict([[SepalLength, SepalWidth, PetalLength, PetalWidth]])

2. tree_model.predict([[6.2, 3.4, 5.4, 2.3]])

Jika kode tersebut dijalankan, maka tampilannya seperti di bawah ini.

Kita juga bisa melihat visualisasi dari decision tree yang kita buat terhadap data dengan
menggunakan library Graphviz. Hasil dari graphviz adalah dot file yang akan muncul
pada folder file pada panel di kiri Colab.

1. from sklearn.tree import export_graphviz

2. export_graphviz(

3.     tree_model,

4.     out_file = "iris_tree.dot",

5.     feature_names =
['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm'],

6.     class_names = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica' ],

7.     rounded= True,

8.     filled =True

9. )

Setelah berhasil dijalankan, hasil dari iris_tree.dot terlihat seperti di bawah ini.
Untuk melihat visualisasi decision tree kita bisa mengkonversi dot file ke dalam file png.
Untuk mengunduh berkas iris_tree.dot pada gambar di atas, kita dapat melakukan klik
kanan pada berkas tersebut dan mengunduhnya. Untuk konversi berkas dengan
ekstensi dot menjadi berkas png dapat dilakukan di situs https://convertio.co/id/dot-png/.

Supervised : Regression
Jenis kategori selanjutnya adalah regression. Tahukah Anda apa itu regression atau
regresi? Regresi adalah salah satu teknik ML yang mirip dengan klasifikasi. Bedanya,
pada klasifikasi sebuah model ML memprediksi sebuah kelas, sedangkan model regresi
memprediksi bilangan kontinu. Bilangan kontinu adalah bilangan numerik. 

Jadi model klasifikasi memprediksi kelas atau kategori, dan model regresi memprediksi
sebuah nilai berdasarkan atribut yang tersedia. Agar lebih paham, perhatikan contoh di
bawah.

Pada contoh data di atas, model regresi akan memprediksi gaji berdasarkan atribut
lama bekerja, industri, dan tingkat pendidikan. Gaji adalah contoh dari bilangan kontinu,
di mana gaji tak memiliki kategori-kategori yang terbatas.

Pada submodul ini, jenis regresi yang akan dibahas adalah regresi linier. Selain regresi
linier terdapat juga jenis regresi lain seperti regresi polinomial, lasso regression,
stepwise regression dan sebagainya. Untuk penjelasan dari jenis-jenis regression yang
ada, kunjungi tautan berikut.

Linear Regression
Regresi linier adalah salah satu metode supervised yang masuk dalam golongan
regression, sesuai namanya. Contoh paling terkenal dari regresi linier adalah
memperkirakan harga rumah berdasarkan fitur yang terdapat pada rumah seperti luas
rumah, jumlah kamar tidur, lokasi dan sebagainya. Ini adalah model paling sederhana
yang perlu diketahui guna memahami metode machine learning lain yang lebih
kompleks. Regresi linier cocok dipakai ketika terdapat hubungan linear pada data.
Namun untuk implementasi pada kebanyakan kasus, ia kurang direkomendasikan.
Sebabnya, regresi linier selalu mengasumsikan ada hubungan linier pada data, padahal
tidak.  

1. Secara sederhana regresi linear adalah teknik untuk memprediksi sebuah nilai dari
variable Y (variabel dependen) berdasarkan beberapa variabel tertentu X (variabel
independen) jika terdapat hubungan linier antara X dan Y.
2. Hubungan antara hubungan linier dapat direpresentasikan dengan sebuah garis lurus
(disebut garis regresi). Ilustrasi hubungan linier dapat dilihat pada gambar di mana data-
data cenderung memiliki pola garis lurus.

3. Ketika sebuah garis regresi digambar, beberapa data akan berada pada garis regresi
dan beberapa akan berada di dekat garis tersebut. Sebabnya, garis regresi adalah
sebuah model probabilistik dan prediksi kita adalah perkiraan. Jadi tentu akan ada
eror/penyimpangan terhadap nilai asli dari variabel Y. Pada gambar di bawah, garis
merah yang menghubungkan data-data ke gari regresi merupakan eror. Semakin
banyak eror, menunjukkan bahwa model regresi itu belum optimal.

Logistic Regression
Setelah sebelumnya Anda mengenal regresi linier untuk masalah regresi, ada juga
model seperti logistic regression, terlepas dari namanya merupakan sebuah model
yang dapat digunakan untuk klasifikasi. 

Logistic regression regression dikenal juga sebagai logit regression, maximum-entropy


classification, dan log-linear classification merupakan salah satu metode yang umum
digunakan untuk klasifikasi. Pada kasus klasifikasi, logistic regression bekerja dengan
menghitung probabilitas kelas dari sebuah sampel. 

Sesuai namanya, logistic regression menggunakan fungsi logistik seperti di bawah


untuk menghitung probabilitas kelas dari sebuah sampel. Contohnya sebuah email
memiliki probabilitas 78% merupakan spam maka email tersebut termasuk dalam kelas
spam. Dan jika sebuah email memiliki <50% probabilitas merupakan spam, maka email
tersebut diklasifikasikan bukan spam.

Latihan SKLearn Linear Regression


Library SKLearn menyediakan implementasi dari regresi linier. Pada latihan kali ini kita
akan memprediksi harga rumah berdasarkan jumlah kamar.

Pertama kita mengimpor library yang diperlukan. Lalu buat data dummy menggunakan
numpy array.

1. import numpy as np
2. import matplotlib.pyplot as plt
3. #buat data jumlah kamar
4. bedrooms = np.array([1,1,2,2,3,4,4,5,5,5])
5. #data harga rummah. asumsi dalam dollar
6. house_price = np.array([15000, 18000, 27000, 34000, 50000, 68000, 65000,
81000,85000, 90000])

Selanjutnya kita bisa mencoba menampilkan data tersebut dalam bentuk scatter plot.
Jumlah kamar pada sumbu X adalah variabel independen dan harga rumah pada
sumbu Y  adalah variabel dependen.

1. # menampilkan scatter plot dari dataset


2. %matplotlib inline
3. plt.scatter(bedrooms, house_price)
Tampilan dari kode tersebut sebagai berikut.

Lalu pada cell berikutnya, kita bisa mulai melatih model kita dengan memanggil fungsi
LinearRegression.fit() pada data kita.

1. from sklearn.linear_model import LinearRegression


2. bedrooms = bedrooms.reshape(-1, 1)
3. linreg = LinearRegression()
4. linreg.fit(bedrooms, house_price)

Terakhir kita bisa melihat bagaimana model kita menyesuaikan dengan data yang kita
miliki dengan membuat plot dari model kita.

1. plt.scatter(bedrooms, house_price)
2. plt.plot(bedrooms, linreg.predict(bedrooms))

Hasilnya sebagai seperti di bawah ini


Latihan SKLearn - Logistic Regression
Pada latihan ini kita akan menggunakan logistic regression untuk memprediksi apakah
seseorang akan membeli setelah melihat iklan sebuah produk. Dataset untuk latihan
bisa Anda unduh pada tautan berikut.

Seperti biasa, setelah kita mengunggah berkas data pada Colab kita akan mengubah
dataset menjadi dataframe Pandas. Jangan lupa juga untuk mengimpor library dasar.

1. import pandas as pd

2. from sklearn.model_selection import train_test_split

3. from sklearn.preprocessing import StandardScaler

4. df = pd.read_csv('Social_Network_Ads.csv')

Pada cell selanjutnya gunakan fungsi head() pada dataframe untuk melihat 5 baris
pertama dari dataset.

1. df.head()

Hasil dari fungsi df.head() seperti di bawah ini.

Kita juga perlu melihat apakah ada nilai yang kosong pada setiap atribut dengan
menggunakan fungsi info(). Dapat dilihat bahwa nilai pada semua kolom sudah
lengkap.

1. df.info()
Sedangkan tampilan hasil dari fungsi df.info() sebagai berikut.

Pada dataset terdapat kolom ‘User ID’. Kolom tersebut merupakan atribut yang tidak
penting untuk dipelajari oleh model sehingga perlu dihilangkan. Untuk menghilangkan
kolom dari dataframe, gunakan fungsi drop.

1. data = pd.get_dummies(data)

2. data

Ketika kode di atas dijalankan hasilnya seperti di bawah ini.


Kemudian kita pisahkan antara atribut dan label.

1. predictions = ['Age' , 'EstimatedSalary' , 'Gender_Female' , 'Gender_Male']

2. X = data[predictions]

3. y = data['Purchased']

Jangan lupa untuk membagi data menjadi train set dan test set yang dapat dilakukan
dengan fungsi train_test_split yang disediaka SKLearn.

1. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25,


random_state=42)

Setelah membagi data, kita buat model dengan membuat sebuah objek logistic
regression. Setelah model dibuat, kita bisa melatih model kita dengan train set
menggunakan fungsi fit().

1. from sklearn import linear_model

2. model = linear_model.LogisticRegression()

3. model.fit(X_train, y_train)

Setelah model dilatih, kita bisa menguji akurasi model pada test set dengan memanggil
fungsi score() pada objek model.

1. model.score(X_test, y_test)

Sehingga hasilnya sebagai berikut.


Unsupervised : Clustering
Klaster adalah sebuah grup yang memiliki kemiripan tertentu. Pengklasteran adalah
sebuah metode machine learning unsupervised untuk mengelompokkan objek-objek
yang memiliki kemiripan, ke dalam sebuah klaster. Karena termasuk kategori
unsupervised, maka dataset yang digunakan model clustering tidak memiliki label.

Contoh pengklasteran adalah ketika kita memiliki data pengunjung blog pribadi kita
seperti gambar di bawah. Kemudian kita ingin mengembangkan sebuah model yang
bisa mengelompokkan pengunjung yang memiliki kemiripan sama. Tujuannya agar kita
bisa menulis konten yang sesuai untuk setiap kelompok.

Sebuah model pengklasteran, akan membandingkan atribut setiap pengunjung lalu


membuat sebuah cluster yang diisi oleh pengunjung yang memiliki kemiripan
karakteristik/atribut yang tinggi.

Contoh di atas dikenal juga sebagai customer segmentation, salah satu kasus yang
populer di industri, di mana bisnis mengelompokkan pelanggan agar bisa memberikan
penawaran yang sesuai untuk setiap kelompok. Metode clustering yang paling populer
adalah K Nearest Neighbor dan pengklasteran K-Means.
K-means Clustering
Clustering masuk dalam kategori unsupervised learning karena model ini dipakai pada
data yang tidak memiliki label. Menurut Andriy Burkov dalam buku The Hundred Page
Machine Learning Book, clustering atau pengklasteran adalah sebuah metode untuk
memberi label pada data tanpa bantuan manusia. Bagaimana proses pemberian label
ini?

Data yang memiliki kemiripan akan dikelompokkan lalu, setiap data pada kelompok
yang sama akan diberikan label yang sama.

Berbeda kan, dengan model klasifikasi dan regresi di mana setiap data memiliki label
yang ditulis oleh manusia.

Pada submodul ini kita akan belajar mengenai salah satu metode clustering yang
sangat populer yaitu K-Means clustering.

K-Means Clustering
Pengklasteran K-Means adalah sebuah metode yang dikembangkan oleh Stuart Lloyd
dari Bell Labs pada tahun 1957. Lloyd menggunakan metode ini untuk mengubah sinyal
analog menjadi sinyal digital. Proses pengubahan sinyal ini juga dikenal sebagai Pulse
Code Modulation. 

Pada awalnya metode K-means hanya dipakai untuk internal perusahaan. Metode ini
baru dipublikasikan sebagai jurnal ilmiah pada tahun 1982. Pada tahun 1965, Edward
W. Forgy mempublikasikan metode yang sama dengan K-Means, sehingga K-Means
juga dikenal sebagai metode Lloyd-Forgy.

Untuk melihat bagaimana K-Means bekerja, kita akan menggunakan data seperti di
bawah ini. Perhatikan bahwa data yang kita gunakan terdapat 12 sampel dan data ini
merupakan data 1 dimensi.

Hal yang paling pertama K-Means lakukan adalah memilih sebuah sampel secara acak
untuk dijadikan centroid. Centroid adalah sebuah sampel pada data yang menjadi pusat
dari sebuah cluster. Kita bisa melihat pada gambar bahwa 3 sampel yang dijadikan
centroid diberi warna biru, hijau dan kuning.

Kedua, karena centroid adalah pusat dari sebuah cluster, setiap sampel akan masuk ke
dalam cluster. Ini bermula dari centroid terdekat dengan sampel tersebut. Pada contoh
di bawah sampel yang ditunjuk anak panah memiliki jarak terdekat dengan centroid
warna hijau. Alhasil, sampel tersebut masuk ke dalam cluster hijau.

Berikut adalah hasil ketika tahap kedua selesai.

Ketiga, setelah setiap sampel dimasukkan pada cluster dari centroid terdekat, K-Means
akan menghitung rata-rata dari setiap sampel dan menjadikan rata-rata tersebut
sebagai centroid baru. Rata-rata di sini adalah titik tengah dari setiap sampel pada
sebuah cluster. Pada gambar dibawah rata-rata yang menjadi centroid baru
digambarkan sebagai garis tegak lurus.

 
Keempat, langkah kedua diulang kembali. Sampel akan dimasukkan ke dalam cluster
dari centroid baru yang paling dekat dengan sampel tersebut.

Pada tahap ini Anda mengulangi langkah ketiga, yaitu menemukan rata-rata dari cluster
terbaru. Anda akan menemukan rata-rata tiap cluster di tahap keempat akan sama
dengan rata-rata tiap cluster pada tahap ketiga sehingga centroidnya tidak berubah.
Ketika centroid baru tidak ditemukan, maka proses clustering berhenti.

Apakah prosesnya telah selesai?. Seperti yang bisa kita lihat, hasil pengklasteran dari
tahapan sebelumnya belum terlihat optimal. 

Untuk mengukur kualitas dari pengklasteran, K-Means akan melakukan iterasi lagi dan
mengulangi lagi tahap pertama yaitu memilih sampel secara acak untuk dijadikan
centroid. Gambar di bawah menunjukkan K-Means pada iterasi kedua mengulangi
kembali langkah pertama yaitu memilih centroid secara acak.

Untuk iterasi kedua, Anda bisa mempraktekkan langkah yang sudah dijelaskan
sebelumnya untuk menguji pemahaman Anda.Hasil dari iterasi kedua adalah sebagai
berikut.

Hasil dari iterasi kedua terlihat lebih baik dibanding iterasi pertama. Untuk
membandingkan cluster setiap iterasi, K-Means akan menghitung variance dari tiap
iterasi. Variance adalah persentase jumlah sampel pada tiap cluster. Gambar di bawah
menunjukkan variance pada iterasi pertama.

Kita bisa melihat bahwa di iterasi kedua, variance nya lebih seimbang dan tidak
condong pada cluster tertentu. Sehingga, hasil dari cluster iterasi kedua lebih baik dari
iterasi pertama. Jumlah iterasi dari K-Means ditentukan oleh programmer, dan K-Means
akan berhenti melakukan iterasi sampai batas yang telah ditentukan.

Untuk data yang memiliki 2 dimensi atau lebih, k-means bekerja dengan sama yaitu
menentukan centroid secara acak, lalu memindahkan centroid sampai posisi centroid
tidak berubah. Animasi di bawah akan membantu Anda untuk melihat bagaimana K-
Means bekerja pada data 2 dimensi.

Metode Elbow
Cara paling mudah untuk menentukan jumlah K atau cluster pada K-means adalah
dengan melihat langsung persebaran data. Otak kita bisa mengelompokkan data-data
yang berdekatan dengan sangat cepat. Tetapi cara ini hanya bekerja dengan baik pada
data yang sangat sederhana.
Ketika masalah clustering lebih kompleks seperti gambar dibawah, dan kita bingung
menentukan jumlah cluster yang pas, kita bisa menggunakan metode Elbow.

Ide mendasar dari metode elbow adalah untuk menjalankan K-Means pada dataset
dengan nilai K pada jarak tertentu (1,2,3, .., N). Kemudian hitung inersia pada setiap
nilai K. Inersia memberi tahu seberapa jauh jarak setiap sampel pada sebuah cluster.
Semakin kecil inersia maka semakin baik karena jarak setiap sampel pada sebuah
klaster lebih berdekatan.

Metode elbow bertujuan untuk menentukan elbow, yaitu jumlah K yang optimal. Untuk
menentukan elbow, kita perlu melakukannya secara manual, yaitu dengan melihat titik
dimana penurunan inersia tidak lagi signifikan. 

Pada contoh di bawah kita memiliki data yang dapat dibagi menjadi 4 klaster.
Bagaimana metode elbow dapat menentukan jumlah klaster tersebut optimal?

 
Kita akan mengaplikasikan metode elbow pada data di atas. Elbow berada di nilai K
sama dengan 4, karena penurunan inersia pada K seterusnya tidak lagi signifikan
(perubahannya nilainya kecil). Sehingga jumlah klaster yang optimal adalah 4.
Latihan SKLearn K-means
Pada latihan kali ini kita akan menggunakan data dari Kaggle yaitu data pengunjung
sebuah mall fiktif. Dataset bisa kamu dapatkan pada tautan berikut. Setelah data kamu
unduh, buka Google Colab dan masukkan dataset ke dalam environment Colab.

Pada cell pertama kita impor library yang dibutuhkan.

1. import pandas as pd
2. import matplotlib.pyplot as plt
3. %matplotlib inline
4. import seaborn as sns

Di cell selanjutnya kita ubah file csv kita ke dalam dataframe pandas dan menampilkan
3 baris pertama dari dataframe. Pastikan file csv Anda sudah dimasukkan ke dalam
Colabs.

1. #ubah file csv menjadi dataframe


2. df = pd.read_csv('Mall_Customers.csv')
3. # tammpilkan 3 baris pertama
4. df.head(3)

Tampilan dari 3 baris pertama dataframe di atas seperti berikut.

Kemudian kita akan melakukan sedikit preprocessing yaitu mengubah nama kolom agar
lebih seragam. Lalu kolom gender adalah kolom kategorik, maka kita akan mengubah
data tersebut menjadi data numerik.

1. # ubah namma kolom


2. df = df.rename(columns={'Gender': 'gender', 'Age': 'age',
3.                         'Annual Income (k$)': 'annual_income',
4.                         'Spending Score (1-100)': 'spending_score'})
5. # ubah data kategorik mmenjadi data numerik
6. df['gender'].replace(['Female', 'Male'], [0,1], inplace=True)
7. # tampilkan data yang sudah di preprocess
8. df.head(3)

Setelah dilakukan preprocessing dengan mengubah nama kolom supaya lebih


seragam, maka hasilnya seperti di bawah ini.

Di tahap selanjutnya kita akan mengimpor K-Means. Di tahap ini juga kita akan
menghilangkan kolom Customer ID dan gender karena kurang relevan untuk proses
clustering. Selanjutnya kita akan menentukan nilai K yang optimal dengan metode
Elbow. Library K-means dari SKLearn menyediakan fungsi untuk menghitung inersia
dari K-Means dengan jumlah K tertentu. Di sini kita akan membuat list yang berisi
inersia dari nilai K antara 1 sampai 11.

1. from sklearn.cluster import KMeans


2. # menghilangkan kolom customer id dan gender
3. X = df.drop(['CustomerID', 'gender'], axis=1)
4. #membuat list yang berisi inertia
5. clusters = []
6. for i in range(1,11):
7.   km = KMeans(n_clusters=i).fit(X)
8.   clusters.append(km.inertia_)

Jalankan kode di bawah untuk membuat plot dari inersia setiap K berbeda. Sesuai plot
di bawah, kita bisa melihat bahwa elbow berada di nilai K sama dengan 5, di mana
penurunan inersia tidak lagi signifikan setelah nilai K sama dengan 5.

1. # membuat plot inertia


2. fig, ax = plt.subplots(figsize=(8, 4))
3. sns.lineplot(x=list(range(1, 11)), y=clusters, ax=ax)
4. ax.set_title('Cari Elbow')
5. ax.set_xlabel('Clusters')
6. ax.set_ylabel('Inertia')

Hasil dari kode di atas menampilkan plot inersia sebagai berikut.

Terakhir kita bisa melatih kembali K-Means dengan jumlah K yang didapat dari metode
Elbow. Lalu kita bisa membuat plot hasil pengklasteran K-Means dengan menjalankan
kode di bawah.

1. # membuat objek KMeans


2. km5 = KMeans(n_clusters=5).fit(X)
3. # menambahkan kolom label pada dataset
4. X['Labels'] = km5.labels_
5. # membuat plot KMeans dengan 5 klaster
6. plt.figure(figsize=(8,4))
7. sns.scatterplot(X['annual_income'], X['spending_score'], hue=X['Labels'],
8.                 palette=sns.color_palette('hls', 5))
9. plt.title('KMeans dengan 5 Cluster')
10. plt.show()
Sehingga jika kode di atas dijalankan, maka tampilan KMeans dengan 5 klaster seperti
di bawah ini.

Anda mungkin juga menyukai