Cara Preprocessing Data Machine Learning dengan Pandas

Post image

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

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:

Rename Columns

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]
}

Drop Columns

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 Values

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]
}

Handling Missing Values

Data yang hilang akan menghasilkan model yang buruk. Ada beberapa cara untuk mengatasi data yang hilang ini:

  • Leave as it: biarkan saja data yang kosong tersebut
  • Drop it: hapus data yang kosong tersebut apabila data tersebut tidak terlalu penting
  • Imputation: isi data yang kosong tersebut dengan nilai yang masuk akal

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.

Deteksi Outlier dengan Box Plot

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:

  1. Hitung nilai median
  2. Hitung nilai min dan max
  3. Hitung nilai kuartil bawah (Q1) dan kuartil atas (Q3)
  4. Hitung IQR (Interquartile Range) = Q3 - Q1
  5. Hitung panjang langkah = 1.5 * IQR
  6. Tentukan batas bawah = Q1 - langkah
  7. Tentukan batas atas = Q3 + langkah

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 atau X > Max Limit, untuk setiap X yang ada di dalam data.

Transformasi 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

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

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]
}

Perbedaan Normalisasi dan Scaling

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

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

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

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

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.

Kesimpulan

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.

comments powered by Disqus

You May Also Like

Jenis-jenis Machine Learning

Jenis-jenis Machine Learning

Machine learning adalah salah satu cabang dari kecerdasan buatan (Artificial Intelligence) yang memungkinkan sistem komputer untuk belajar dari data, mengidentifikasi pola, dan membuat keputusan dengan sedikit atau tanpa campur tangan manusia.