
Membangun Model Klasifikasi dengan Decision Trees
Apa itu Model Klasifikasi? Model klasifikasi adalah salah satu jenis model machine learning yang digunakan untuk memprediksi kelas atau label dari data yang diberikan.
Preprocessing data adalah persiapan data sebelum dilakukan analisis. Proses ini melibatkan berbagai teknik seperti cleaning, transforming, dan encoding.
Preprocessing data sangat penting dalam machine learning karena data yang tidak bersih dan tidak siap akan menghasilkan model yang buruk. Contohnya di dalam data terdapat informasi yang tidak sesuai dengan keadaan sebenarnya, seperti umur yang bernilai negatif, atau data yang hilang.
Data cleaning adalah proses mengidentifikasi dan memperbaiki (atau menghapus) data yang tidak lengkap, tidak akurat, tidak relevan, atau tidak konsisten.
Beberapa hal yang perlu diperhatikan dalam data cleaning adalah:
Nama kolom yang jelas dan deskriptif akan memudahkan kita dalam membaca data. Format yang biasa digunakan di python yaitu snake_case
.
Artinya apabila terdapat nama kolom:
ID_
: perlu diubah menjadi id
Nama Lengkap
: perlu diubah menjadi nama_lengkap
G
: perlu diubah menjadi gender
import pandas as pd
data = {
'Nama Lengkap': ['Andi', 'Budi', 'Caca'],
'Umur': [20, 25, 22]
}
df = pd.DataFrame(data)
df.columns = ['nama_lengkap', 'umur']
print(df)
{
"nama_lengkap": ["Andi", "Budi", "Caca"],
"umur": [20, 25, 22]
}
Kolom yang tidak relevan atau tidak diperlukan dapat dihapus. Hal ini akan mempercepat proses analisis data. Rekomendasi untuk melakukan drop kolom yaitu dengan membuat data frame baru tanpa kolom yang tidak diperlukan.
import pandas as pd
data = {
'nama': ['Andi', 'Budi', 'Caca'],
'umur': [20, 25, 22],
'pekerjaan': ['guru', 'dokter', 'pengacara']
}
df = pd.DataFrame(data)
df_new = df.drop(columns=['pekerjaan'])
print(df)
{
"nama": ["Andi", "Budi", "Caca"],
"umur": [20, 25, 22]
}
Duplicate value dapat terjadi karena kesalahan operator dalam pengumpulan atau pemrosesan data. Data yang baik seharusnya tidak memiliki duplikasi, alias semua data unik setiap rownya.
Teknik yang dapat digunakan untuk mengatasi duplicate value adalah dengan menggunakan fungsi drop_duplicates()
pada pandas.
import pandas as pd
data = {
'nama': ['Andi', 'Budi', 'Andi', 'Caca'],
'umur': [20, 25, 20, 22]
}
df = pd.DataFrame(data)
df.drop_duplicates(inplace=True)
print(df)
{
"nama": ["Andi", "Budi", "Caca"],
"umur": [20, 25, 22]
}
Data yang hilang akan menghasilkan model yang buruk. Ada beberapa cara untuk mengatasi data yang hilang ini:
Contoh apabila kita ingin menghapus data yang kosong:
data = {
'nama': ['Andi', 'Budi', None, 'Caca'],
'umur': [20, 25, None, 22]
}
df = pd.DataFrame(data)
df.dropna(inplace=True)
print(df)
{
"nama": ["Andi", "Budi", "Caca"],
"umur": [20, 25, 22]
}
Contoh lain apabila kita ingin mengisi data yang kosong dengan nilai rata-rata:
data = {
'nama': ['Andi', 'Budi', 'Sinta', 'Caca'],
'umur': [20, 25, None, 22]
}
df = pd.DataFrame(data)
df['umur'].fillna(df['umur'].mean(), inplace=True)
print(df)
{
"nama": ["Andi", "Budi", "Sinta", "Caca"],
"umur": [20, 25, 22.33, 22]
}
Permasalahannya ketika kita menggunakan rata-rata, apabila data tersebut memiliki outlier, maka rata-rata akan terpengaruh oleh outlier tersebut.
Outlier adalah data yang berbeda jauh dari data lainnya. Outlier dapat mempengaruhi hasil analisis data. Contoh:
Jumlah rata-rata pendapatan pekerja di Indonesia pada kenyataannya 5jt. Namun ketika terdapat outlier dengan pendapatan 100jt, maka rata-rata pendapatan pekerja akan terpengaruh, misalnya menjadi 15jt. Hal ini sangat jauh dari kenyataannya.
Untuk menghilangkan outlier, dapat menggunakan box plot:
Data yang berada di luar batas bawah dan batas atas adalah outlier.
import pandas as pd
data = {
'umur': [20, 25, 22, 100]
}
df = pd.DataFrame(data)
Q1 = df['umur'].quantile(0.25)
Q3 = df['umur'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['umur'] > lower_bound) & (df['umur'] < upper_bound)]
print(df)
{
"umur": [20, 25, 22]
}
Data disebut outlier apabila:
X < Min Limit
atauX > Max Limit
, untuk setiap X yang ada di dalam data.
Transformasi data adalah proses mengubah data dari bentuk asalnya menjadi bentuk yang lebih berguna untuk analisis. Beberapa teknik transformasi data yang sering digunakan adalah:
Normalisasi adalah proses mengubah data ke dalam skala yang sama. Normalisasi sangat penting dalam machine learning karena data yang tidak dinormalisasi akan menghasilkan model yang buruk.
Contoh normalisasi data:
import pandas as pd
data = {
'umur': [20, 25, 22, 30]
}
df = pd.DataFrame(data)
df['umur'] = (df['umur'] - df['umur'].min()) / (df['umur'].max() - df['umur'].min())
print(df)
{
"umur": [0.0, 0.25, 0.125, 1.0]
}
Scaling adalah proses mengubah data ke dalam skala tertentu.
Contoh scaling data:
import pandas as pd
data = {
'umur': [20, 25, 22, 30]
}
df = pd.DataFrame(data)
df['umur'] = (df['umur'] - df['umur'].mean()) / df['umur'].std()
print(df)
{
"umur": [-0.94, -0.31, -0.63, 1.88]
}
No | Normalisasi | Scaling |
---|---|---|
1 | Mengubah data ke dalam skala 0-1 | Mengubah data ke dalam skala tertentu, misalnya -1 sampai 1 |
2 | Cocok digunakan pada data yang memiliki distribusi normal | Hanya mengubah skala fitur (mengubah rentang data), tetapi tidak mengubah distribusi data |
3 | Mengurangi pengaruh outlier | Tidak mengurangi pengaruh outlier |
4 | Mengubah distribusi data | Tidak mengubah distribusi data |
Feature encoding adalah proses mengubah data kategorikal menjadi data numerik. Hal ini penting karena model machine learning hanya dapat memproses data numerik.
Ada beberapa teknik encoding yang sering digunakan:
One-Hot Encoding mengubah setiap kategori menjadi kolom biner (0 atau 1). Teknik ini cocok digunakan jika tidak ada urutan alami di antara kategori.
import pandas as pd
data = {
'warna': ['merah', 'biru', 'hijau', 'merah', 'biru']
}
df = pd.DataFrame(data)
df_encoded = pd.get_dummies(df, columns=['warna'])
print(df_encoded)
warna_biru warna_hijau warna_merah
0 0 0 1
1 1 0 0
2 0 1 0
3 0 0 1
4 1 0 0
Label Encoding mengubah setiap kategori menjadi angka yang unik. Namun, teknik ini memberikan urutan pada kategori, sehingga kurang cocok untuk fitur yang tidak memiliki urutan alami.
import pandas as pd
from sklearn._preprocessing_ import LabelEncoder
data = {
'warna': ['merah', 'biru', 'hijau', 'merah', 'biru']
}
df = pd.DataFrame(data)
label_encoder = LabelEncoder()
df['warna_encoded'] = label_encoder.fit_transform(df['warna'])
print(df)
warna warna_encoded
0 merah 2
1 biru 0
2 hijau 1
3 merah 2
4 biru 0
Ordinal Encoding digunakan ketika kategori memiliki urutan yang jelas. Setiap kategori diubah menjadi nilai integer
sesuai urutannya.
import pandas as pd
from sklearn._preprocessing_ import OrdinalEncoder
data = {
'ukuran': ['kecil', 'sedang', 'besar', 'sedang', 'besar']
}
df = pd.DataFrame(data)
ordinal_encoder = OrdinalEncoder(categories=[['kecil', 'sedang', 'besar']])
df['ukuran_encoded'] = ordinal_encoder.fit_transform(df[['ukuran']])
print(df)
ukuran ukuran_encoded
0 kecil 0.0
1 sedang 1.0
2 besar 2.0
3 sedang 1.0
4 besar 2.0
Masih banyak teknik feature encoding lainnya seperti Target Encoding, Frequency Encoding, Binary Encoding dan lain-lain.
Preprocessing data adalah proses penting dalam machine learning. Data yang bersih dan siap akan menghasilkan model yang baik. Beberapa teknik preprocessing data yang sering digunakan adalah cleaning, transforming, dan encoding.
Apa itu Model Klasifikasi? Model klasifikasi adalah salah satu jenis model machine learning yang digunakan untuk memprediksi kelas atau label dari data yang diberikan.
Apa itu Regresi Linier? Regresi linier adalah metode statistik yang digunakan untuk memahami hubungan antara dua variabel, yaitu variabel dependen dan independen.
Setelah kita membahas Regresi dan Klasifikasi pada post sebelumnya, yang merupakan tipe machine learning Supervised, sekarang kita akan membahas tipe machine learning yang lain, yaitu Unsupervised Learning.
Apa itu regresi? Apa itu klasifikasi? Sebelum kita masuk ke definisi, mari kita pahami beberapa tipe machine learning.