Skip to main content

Encoding Data dalam Data Preprocessing pada Machine Learning

· 11 min read
Ucup TopekoX
Ucup TopekoX
TimposuLabs creator

Encoding adalah salah satu tahap penting dalam data preprocessing yang digunakan untuk mengubah data kategorikal menjadi bentuk numerik sehingga dapat diproses oleh algoritma Machine Learning.

info

Pada tulisan ini, dataset yang digunakan adalah:

1. Apa Itu Encoding?​

Secara sederhana, encoding adalah proses mengubah data kategorikal menjadi representasi numerik.

Contoh:

Sex
----
male
female
male
female

menjadi:

Sex
----
0
1
0
1

Dengan Pandas:

df["Sex"] = df["Sex"].map({
"male": 0,
"female": 1
})

2. Mengapa Encoding Diperlukan?​

Banyak algoritma Machine Learning bekerja dengan data numerik. Data kategorikal seperti male, female, C, Q, dan S perlu direpresentasikan dalam bentuk yang dapat diproses model.

Alur sederhananya:

Data kategorikal
↓
Encoding
↓
Data numerik
↓
Machine Learning

3. Jenis Data Kategorikal​

Secara umum terdapat dua jenis data kategorikal:

  1. Nominal
  2. Ordinal

Pemilihan metode encoding harus mempertimbangkan jenis kategori tersebut.

4. Categorical Nominal​

Data nominal adalah kategori yang tidak memiliki urutan atau tingkatan.

Contoh:

Color
-----
Red
Blue
Green

Tidak ada konsep bahwa:

Red < Blue < Green

Contoh lain:

City
Country
Nationality
Color
Embarked

Untuk data nominal, One-Hot Encoding biasanya lebih sesuai.

5. Categorical Ordinal​

Data ordinal adalah kategori yang memiliki urutan atau tingkatan.

Contoh:

Satisfaction
------------
Low
Medium
High

Dapat direpresentasikan:

Low → 0
Medium → 1
High → 2

Ini disebut ordinal encoding.

6. Binary Encoding untuk Kategori Biner​

Jika sebuah fitur hanya mempunyai dua kategori, kita dapat menggunakan representasi biner.

Contoh Titanic:

Sex
----
male
female

Dapat dipetakan:

male → 0
female → 1

Dengan Pandas:

df["Sex"] = df["Sex"].map({
"male": 0,
"female": 1
})

Pemetaan tersebut tidak berarti female lebih tinggi daripada male. Angka hanya digunakan sebagai representasi kategori.

7. Fungsi map() pada Pandas​

map() digunakan untuk mengganti nilai berdasarkan pasangan key-value.

df["Sex"] = df["Sex"].map({
"male": 0,
"female": 1
})

Penting:

map() adalah alat untuk melakukan pemetaan. Jenis encoding ditentukan oleh bagaimana kita merancang pemetaannya.

Contoh ordinal:

df["Education"] = df["Education"].map({
"Elementary": 0,
"High School": 1,
"Bachelor": 2,
"Master": 3
})

8. Mapping yang Tidak Lengkap​

Jika mapping tidak mencakup semua kategori:

df["Sex"] = df["Sex"].map({
"male": 0
})

dan data memiliki female, maka hasil female akan menjadi NaN.

Sebelum melakukan mapping, periksa kategori:

df["Sex"].unique()

atau:

df["Sex"].value_counts()

9. One-Hot Encoding​

One-Hot Encoding mengubah setiap kategori menjadi kolom biner.

Misalnya:

Embarked
--------
C
Q
S

menjadi:

Embarked_C Embarked_Q Embarked_S
1 0 0
0 1 0
0 0 1

Nilai 1 berarti data termasuk kategori tersebut, sedangkan 0 berarti tidak termasuk.

10. One-Hot Encoding dengan Pandas menggunakan get_dummies()​

Gunakan:

pd.get_dummies(df["Embarked"])

Jika ingin hasil integer:

pd.get_dummies(
df["Embarked"],
dtype=int
)

Contoh hasil:

C Q S
0 0 0 1
1 1 0 0
2 0 1 0

11. Cara Membaca One-Hot Encoding​

Jika kolomnya:

C Q S

maka:

C → 1 0 0
Q → 0 1 0
S → 0 0 1

Misalnya:

C = 0
Q = 0
S = 1

berarti:

Embarked = S

Angka 1 bukan menunjukkan nilai atau tingkatan kategori. Angka tersebut hanya menunjukkan keanggotaan kategori.

12. Urutan Kolom pada One-Hot Encoding​

Jangan menganggap urutan hasil unique() selalu sama dengan urutan kolom One-Hot Encoding.

Misalnya:

df["Embarked"].unique()

menghasilkan:

['S', 'C', 'Q', nan]

tetapi:

pd.get_dummies(df["Embarked"])

dapat menghasilkan kolom:

C
Q
S

Maka representasi mengikuti urutan kolom hasil encoding.

Selalu periksa nama kolom hasil encoding.

13. One-Hot Encoding untuk Beberapa Kolom​

Kita dapat melakukan encoding beberapa kolom sekaligus:

df = pd.get_dummies(
df,
columns=["Sex", "Embarked"],
dtype=int
)

Contoh hasil:

Sex_female Sex_male Embarked_C Embarked_Q Embarked_S
0 1 0 0 1
1 0 1 0 0
0 1 0 1 0

14. One-Hot Encoding dan drop_first=True​

Kita dapat menggunakan:

pd.get_dummies(
df,
columns=["Embarked"],
drop_first=True,
dtype=int
)

Jika kategori adalah C, Q, dan S, satu kolom dapat dihilangkan.

Misalnya tersisa:

Embarked_Q
Embarked_S

Kategori yang tidak muncul menjadi kategori referensi.

15. Mengapa Satu Kolom Bisa Dihilangkan?​

Misalnya:

Embarked_Q Embarked_S
0 0

maka kita dapat menyimpulkan kategori yang tersisa adalah C.

Informasi kategori C tidak hilang. C menjadi kategori referensi.

drop_first=True sering digunakan pada model tertentu, terutama model linear, untuk mengurangi redundansi antar dummy variables.

16. Ordinal Encoding​

Untuk kategori yang mempunyai tingkatan:

Low
Medium
High

dapat direpresentasikan sebagai:

Low → 0
Medium → 1
High → 2

Contoh:

df["Level"] = df["Level"].map({
"Low": 0,
"Medium": 1,
"High": 2
})

Berbeda dengan One-Hot Encoding, angka pada ordinal encoding memang merepresentasikan urutan kategori.

17. Jangan Sembarangan Memberikan Angka pada Data Nominal​

Misalnya:

Color
-----
Red
Blue
Green

Jangan langsung menganggap:

Red → 0
Blue → 1
Green → 2

karena representasi tersebut dapat memberikan kesan adanya urutan atau jarak antar kategori.

Untuk kategori nominal, One-Hot Encoding biasanya lebih sesuai:

Color_Red Color_Blue Color_Green
1 0 0
0 1 0
0 0 1

18. Perbandingan Metode Encoding​

MetodeCocok untukContoh
Binary MappingDua kategoriMale/Female
One-Hot EncodingKategori nominalCity, Color
Ordinal EncodingKategori berurutanLow/Medium/High
Label EncodingUmumnya untuk target/labelClass A/Class B
Target EncodingKategori dengan banyak nilaiClub, Nationality

Pemilihan metode encoding harus mempertimbangkan jenis kategori, jumlah kategori, dan algoritma yang digunakan.

19. Label Encoding​

Label Encoding memberikan angka pada setiap kategori.

Contoh:

Class
-----
Cat
Dog
Bird

dapat menjadi:

Bird → 0
Cat → 1
Dog → 2

Untuk fitur input, cara ini perlu digunakan dengan hati-hati karena angka dapat terlihat seperti memiliki hubungan ordinal.

Untuk target klasifikasi, representasi seperti:

Normal → 0
Abnormal → 1

umumnya lebih sesuai sebagai label kelas.

Perbandingan Penanganan Data Kategori​

Jumlah KategoriTipe DataMetode yang TepatCatatan
2 Kategori (Biner)Bebas (Normal/Abnormal, Laki/Perempuan)Label Encoding (0 dan 1)Sangat disarankan karena efisien dan tidak membingungkan model.
> 2 KategoriNominal (Tanpa Urutan: Kucing, Anjing, Burung)One-Hot EncodingWajib dihindari menggunakan Label Encoding biasa agar model tidak salah paham.
> 2 KategoriOrdinal (Berurutan: Low, Medium, High)Label EncodingBagus digunakan karena urutan angkanya mencerminkan dunia nyata.

20. Encoding Target dan Encoding Feature​

Bedakan:

Feature
↓
X

dan:

Target
↓
y

Pada Titanic:

Sex
Embarked
Pclass
Age
Fare
↓
Features (X)

Survived
↓
Target (y)

Encoding feature:

male → 0
female → 1

Encoding target:

No → 0
Yes → 1

21. Encoding pada Dataset Titanic​

Data awal:

Sex Embarked
0 male S
1 female C
2 female S
3 male Q

Step 1 - Encoding Sex​

df["Sex"] = df["Sex"].map({
"male": 0,
"female": 1
})

Step 2 - One-Hot Encoding Embarked​

df = pd.get_dummies(
df,
columns=["Embarked"],
dtype=int
)

Hasil:

Sex Embarked_C Embarked_Q Embarked_S
0 0 0 0 1
1 1 1 0 0
2 1 0 0 1
3 0 0 1 0

22. Menentukan Kolom yang Membutuhkan Encoding​

Periksa tipe data:

df.info()

atau:

df.dtypes

Misalnya:

Age float64
Fare float64
Sex object
Embarked object
Survived int64

Maka:

Age → numerik
Fare → numerik
Sex → kategorikal
Embarked → kategorikal
Survived → numerik

Kandidat encoding:

Sex
Embarked

23. Tidak Semua object Harus Di-One-Hot​

Tipe object sering menunjukkan teks atau kategori, tetapi tidak berarti semua kolom object harus langsung di-One-Hot.

Contoh Titanic:

Name
Ticket
Cabin

dapat mempunyai banyak nilai unik.

Jangan langsung melakukan:

pd.get_dummies(df["Name"])

Pahami terlebih dahulu makna kolom dan cardinality-nya.

24. High Cardinality​

High cardinality berarti sebuah fitur memiliki banyak kategori unik.

Contoh pada dataset FIFA:

Club
Nationality

Jika One-Hot Encoding digunakan secara langsung pada ratusan kategori, jumlah kolom dapat menjadi sangat besar:

Club_1
Club_2
Club_3
...
Club_500

Karena itu, fitur dengan cardinality tinggi perlu dipertimbangkan secara khusus.

25. Encoding pada Dataset FIFA​

Misalnya:

Preferred Foot
---------------
Left
Right

dapat dipetakan:

df["Preferred Foot"] = df["Preferred Foot"].map({
"Left": 0,
"Right": 1
})

Sedangkan Position dapat memiliki banyak kategori:

ST
CM
CB
GK
LW
RW
...

One-Hot Encoding dapat digunakan:

df = pd.get_dummies(
df,
columns=["Position"],
dtype=int
)

Untuk kategori yang sangat banyak, pertimbangkan strategi encoding lainnya.

26. Encoding Bukan Sekadar Mengubah Teks Menjadi Angka​

Encoding bukan sekadar:

text → number

Kita perlu memahami karakteristik kategori:

Kategori?
│
├── Hanya 2 kategori
│ ↓
│ Binary Mapping
│
├── Tidak memiliki urutan
│ ↓
│ One-Hot Encoding
│
├── Memiliki urutan
│ ↓
│ Ordinal Encoding
│
└── Sangat banyak kategori
↓
Pertimbangkan strategi
encoding lainnya

27. Encoding dan Feature Engineering​

Encoding juga dapat menghasilkan representasi fitur baru.

Contoh:

Sex
----
male
female

menjadi:

Sex
---
0
1

Sedangkan:

Embarked
--------
C
Q
S

menjadi:

Embarked_C
Embarked_Q
Embarked_S

28. Encoding Harus Konsisten​

Preprocessing pada data training dan data baru harus konsisten.

Misalnya saat training:

male → 0
female → 1

maka data baru harus menggunakan aturan yang sama.

Jangan sampai pada production menjadi:

male → 1
female → 0

Model yang dilatih dengan satu aturan encoding harus menerima data dengan representasi yang sama.

29. Encoding dalam Machine Learning​

Alur sederhananya:

Data Mentah
↓
Data Cleaning
↓
Encoding
↓
Feature Engineering
↓
Feature Selection
↓
Train/Test Split
↓
Model Training
↓
Evaluation

Dalam production:

Input User
↓
Preprocessing
↓
Encoding
↓
Model
↓
Prediction

User dapat memasukkan data yang mudah dipahami:

Sex = "female"
Embarked = "S"
Age = 25
Fare = 50

Preprocessing mengubahnya menjadi representasi yang dibutuhkan model.

30. Menggunakan sklearn untuk Encoding​

Untuk proyek Machine Learning, kita dapat menggunakan encoder dari Scikit-learn.

Contoh:

from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder(
handle_unknown="ignore"
)

Encoder dipelajari dari data training:

encoder.fit(X_train[["Embarked"]])

Kemudian digunakan untuk transformasi:

X_train_encoded = encoder.transform(
X_train[["Embarked"]]
)

Data baru menggunakan encoder yang sama:

X_new_encoded = encoder.transform(
X_new[["Embarked"]]
)

31. Mengapa handle_unknown="ignore" Berguna?​

Misalnya data training hanya memiliki:

C
Q
S

tetapi data baru mempunyai kategori yang tidak dikenal.

Dengan:

OneHotEncoder(
handle_unknown="ignore"
)

encoder dapat menangani kategori yang tidak dikenal tanpa menyebabkan proses transformasi gagal.

32. Encoding dengan Pipeline​

Preprocessing dapat digabungkan menggunakan Pipeline.

Contoh:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.pipeline import Pipeline

categorical_features = [
"Sex",
"Embarked"
]

preprocessor = ColumnTransformer(
transformers=[
(
"categorical",
OneHotEncoder(
handle_unknown="ignore"
),
categorical_features
)
]
)

Konsepnya:

Raw Data
↓
Preprocessor
↓
Encoding
↓
Model
↓
Prediction

Pendekatan ini membantu menjaga preprocessing tetap konsisten dan mudah digunakan kembali.

33. Kesalahan yang Sering Terjadi​

Kesalahan 1 - Menganggap semua kategori harus menjadi 0, 1, 2​

Tidak selalu benar.

Red → 0
Blue → 1
Green → 2

dapat memberikan kesan adanya urutan.

Kesalahan 2 - Menganggap map() otomatis melakukan ordinal encoding​

Tidak.

df["Sex"].map({
"male": 0,
"female": 1
})

hanya melakukan mapping. Makna angka ditentukan oleh kita.

Kesalahan 3 - Menggunakan df.get_dummies()​

Ini salah:

df.get_dummies()

Gunakan:

pd.get_dummies(df)

Kesalahan 4 - Tidak memeriksa kategori terlebih dahulu​

Gunakan:

df["Embarked"].unique()

atau:

df["Embarked"].value_counts()

Kesalahan 5 - Tidak menangani missing value​

Contoh:

Embarked
--------
S
C
NaN
Q

Tentukan strategi missing value sebelum atau sebagai bagian dari preprocessing yang sesuai.

Kesalahan 6 - Encoding training dan production berbeda​

Aturan encoding harus sama pada training, validasi, testing, dan production.

34. Ringkasan Metode Encoding​

Panduan sederhana:

Kategori?
│
├── Hanya 2 kategori
│ ↓
│ Binary Mapping
│
├── Tidak memiliki urutan
│ ↓
│ One-Hot Encoding
│
├── Memiliki urutan
│ ↓
│ Ordinal Encoding
│
└── Sangat banyak kategori
↓
Pertimbangkan strategi
encoding lainnya

35. Contoh Lengkap pada Dataset Titanic​

import pandas as pd

df = pd.read_csv("train.csv")

Periksa kategori:

print(df["Sex"].unique())
print(df["Embarked"].unique())

Encoding Sex:

df["Sex"] = df["Sex"].map({
"male": 0,
"female": 1
})

One-Hot Encoding Embarked:

df = pd.get_dummies(
df,
columns=["Embarked"],
dtype=int
)

Periksa hasil:

print(df.head())
print(df.dtypes)

36. Encoding dalam Konteks Preprocessing​

Encoding merupakan salah satu bagian dari preprocessing.

Dataset
↓
Data Understanding
↓
Data Cleaning
↓
Missing Value Handling
↓
Encoding
↓
Scaling
↓
Feature Engineering
↓
Feature Selection
↓
Model

Tidak semua dataset membutuhkan semua tahap tersebut.

37. Kesimpulan​

Encoding adalah proses mengubah data kategorikal menjadi representasi yang dapat digunakan oleh algoritma Machine Learning.

Metode yang umum digunakan:

Binary Mapping
One-Hot Encoding
Ordinal Encoding
Label Encoding

Pemilihannya harus disesuaikan dengan karakteristik data.

Hal paling penting:

Jangan memilih metode encoding hanya karena sebuah kolom berisi teks. Pahami terlebih dahulu apakah kategorinya nominal, ordinal, biner, atau memiliki cardinality yang tinggi.

Contoh:

Sex
male / female
↓
Binary Mapping

Embarked
C / Q / S
↓
One-Hot Encoding

Satisfaction
Low / Medium / High
↓
Ordinal Encoding

Dengan memahami konsep tersebut, encoding tidak lagi sekadar proses "mengubah teks menjadi angka", tetapi menjadi bagian penting dari bagaimana kita merepresentasikan informasi agar dapat dipahami oleh algoritma Machine Learning.