Tutorial

Panduan Lengkap Handling Missing Data dan Outliers: Dari Statistik Dasar hingga Machine Learning Pipelines

21 min read
Panduan Lengkap Handling Missing Data dan Outliers: Dari Statistik Dasar hingga Machine Learning Pipelines - jasa machine learning joki ML

Halo Sobat Data! Pernah nggak sih kamu lagi asyik-asyiknya mau ngoding model machine learning, eh tiba-tiba nemu dataset yang bolong-bolong atau isinya ada angka yang nggak masuk akal? Misalnya, umur orang ada yang tertulis -1 atau 500 tahun. Nah, di dunia real-world data, masalah kayak gini itu makanan sehari-hari. Data nggak pernah datang dalam keadaan bersih bin kinclong seperti di kompetisi Kaggle yang sudah di-curated.

Di artikel kali ini, kita bakal kupas tuntas cara melakukan handling missing data dan outliers dengan gaya profesional. Kita nggak cuma bakal bahas teori "klik kanan, delete row", tapi kita bakal masuk ke workflow yang lebih elegan menggunakan Scikit-Learn Pipelines. Tujuannya satu: supaya model kamu nggak cuma pinter di atas kertas, tapi juga tangguh saat menghadapi data yang berantakan. Yuk, kita mulai petualangannya!

Mengapa Data Preprocessing Itu Krusial?

Sebelum kita masuk ke teknis, kita harus paham dulu filosofinya. Bayangkan kamu lagi mau bikin jus mangga yang enak. Kalau mangganya ada yang busuk (outliers) atau ada bagian yang hilang dimakan ulat (missing data), jus kamu rasanya pasti bakal aneh, kan? Begitu juga dengan model machine learning. Integritas data adalah segalanya.

Data preprocessing seringkali memakan waktu sampai 70-80% dari total pengerjaan project data science. Capek? Iya. Tapi hasilnya sangat rewarding. Dataset yang bersih memungkinkan algoritma untuk menangkap signal yang kuat daripada terjebak dalam noise. Seperti yang kita lihat pada project analisis data penjualan Amazon, langkah awal yang paling krusial adalah memahami feature set kita secara mendalam. Apakah kolom ini numerik? Kategorial? Atau temporal? Setiap tipe butuh "treatment" yang berbeda.

Dashboard Analisis Data Penjualan Amazon

Memahami Missing Data: Lubang di Tengah Jalan

Missing data terjadi karena banyak hal: sensor rusak, human error saat input, atau memang data itu nggak tersedia (misalnya kolom "pendapatan" yang nggak diisi karena alasan privasi). Kalau kamu abaikan, model kamu bisa bias atau malah error saat training.

Dalam dunia statistik, ada tiga mekanisme missingness yang perlu kamu tahu:
1. Missing Completely at Random (MCAR): Hilangnya data bener-bener random. Nggak ada pola tertentu.
2. Missing at Random (MAR): Hilangnya data bisa dijelaskan oleh kolom lain. Misalnya, orang dengan pendidikan tinggi cenderung nggak mau ngisi kolom gaji.
3. Missing Not at Random (MNAR): Ini yang paling susah. Data hilang karena nilai itu sendiri. Misalnya, orang yang utangnya banyak cenderung nggak mau ngisi kolom utang.

Strategi Simple Statistical Imputation

Untuk memulai, kita bisa pakai cara yang paling umum: statistical imputation.
- Mean Imputation: Mengisi yang kosong dengan nilai rata-rata. Hati-hati, ini bisa bikin distribusi data kamu jadi "kurus" (variance mengecil).
- Median Imputation: Ini jagoannya kalau data kamu banyak outliers-nya. Median lebih stabil dan nggak gampang kegeser sama nilai ekstrem. Di project Amazon, median sering dipakai untuk kolom harga atau jumlah stok.
- Mode Imputation: Cocok buat data kategorial. Kita isi yang kosong dengan nilai yang paling sering muncul.

Menangani Data Kategorial: Strategi "Unknown"

Kalau data kategorial seperti "Metode Pembayaran" hilang, kamu nggak bisa cari rata-ratanya. Salah satu trik cerdas adalah mengisi nilai kosong tersebut dengan string "Unknown". Kenapa? Karena terkadang, fakta bahwa data itu hilang adalah sebuah informasi tersendiri! Model mungkin bisa belajar bahwa user yang nggak mengisi metode pembayaran punya kecenderungan tertentu dalam perilaku belanjanya.

Outliers: Si Perusak Suasana

Outliers atau pencilan adalah nilai yang jauh banget dari kawan-kawannya. Misalnya, dalam dataset gaji karyawan yang rata-rata 5-10 juta, tiba-tiba ada yang gajinya 2 miliar. Kalau itu bukan kesalahan input, mungkin itu gaji CEO. Tapi bagi model machine learning (terutama linear regression), angka ini bisa ngerusak garis prediksi.

Cara deteksinya gimana?
- Box Plots: Cara visual yang paling gampang. Kalau ada titik-titik di luar "kumis" boxplot, itu dia pelakunya.
- Z-Score: Kalau nilai Z > 3 atau < -3, berarti data itu jauh banget dari rata-rata.
- IQR (Interquartile Range): Kita tentukan batas bawah dan batas atas. Data di luar itu kita anggap outliers.

Tindakannya bisa macem-macem: kamu bisa hapus (kalau itu error input), kamu bisa clip (batasi nilai maksimalnya), atau kamu transform pakai log supaya rentangnya nggak terlalu jauh.

Advanced Imputation: Saat Statistik Dasar Nggak Cukup

Kadang, mengisi data pakai median itu terlalu sederhana. Kita pengen sesuatu yang lebih "pintar" yang melihat hubungan antar feature. Di sinilah Advanced Imputation beraksi.

K-Nearest Neighbors (KNN) Imputation

KNNImputer bekerja dengan prinsip kemiripan. Algoritma ini bakal cari "tetangga" terdekat dari baris yang datanya kosong. Misalnya, kalau baris A datanya kosong di kolom "Tinggi Badan", KNN bakal cari orang lain yang punya berat badan dan umur mirip sama baris A, lalu ambil rata-rata tinggi badan mereka. Ini jauh lebih akurat karena mempertimbangkan konteks lokal data.

Iterative Imputation (MICE)

Ini adalah "rajanya" imputation. Terinspirasi dari Multivariate Imputation by Chained Equations (MICE), IterativeImputer menganggap setiap kolom yang kosong sebagai target prediksi. Dia bakal muter-muter (iterasi) ngelakuin regresi untuk nebak nilai yang kosong berdasarkan kolom-kolom lainnya sampai nilainya stabil (converge). Teknik ini sangat powerfull untuk menangkap hubungan multivariate yang kompleks.

Perbandingan Metodologi Handling

Tutorial: Implementasi End-to-End dengan Scikit-Learn Pipelines

Sekarang saatnya kita praktik! Kita bakal bikin pipeline yang otomatis menangani missing data dan outliers secara konsisten. Penggunaan pipeline ini penting banget buat menghindari data leakage, yaitu situasi di mana informasi dari data testing "bocor" ke data training saat kita ngitung median atau rata-rata.

Step 1: Persiapan Data & Library

Pertama, kita import dulu senjata-senjata kita. Kita bakal pakai pandas buat olah data dan sklearn buat tools machine learning-nya.

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer, KNNImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

# Membuat dataset dummy sederhana
data = {
    'umur': [25, 30, np.nan, 35, 40, 150, 22, 28, np.nan, 32],
    'pendapatan': [5000, 6000, 5500, np.nan, 8000, 7000, 1000000, 6200, 5800, np.nan],
    'kota': ['Jakarta', 'Bandung', 'Jakarta', 'Surabaya', np.nan, 'Bandung', 'Jakarta', 'Surabaya', 'Jakarta', 'Surabaya'],
    'target': [150, 180, 160, 200, 220, 210, 500, 175, 165, 190]
}

df = pd.DataFrame(data)
print("Dataset Awal:\n", df.head())

Penjelasan Code:
Di sini kita membuat sebuah DataFrame yang sengaja dikasih masalah. Ada np.nan (missing values) dan ada angka aneh kayak umur 150 atau pendapatan 1.000.000 yang jauh di atas rata-rata (outliers). Kita juga punya data kategorial yaitu 'kota'.

Step 2: Mendefinisikan Pipeline Preprocessing

Kita nggak mau ribet ngurusin satu-satu setiap kali ada data baru. Kita bakal pakai ColumnTransformer.

# Pisahkan fitur dan target
X = df.drop('target', axis=1)
y = df['target']

# Tentukan mana kolom numerik dan mana kategorial
numeric_features = ['umur', 'pendapatan']
categorical_features = ['kota']

# Pipeline untuk kolom numerik
# Kita pakai Median Imputer untuk tahan terhadap outliers, lalu Scaling
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])

# Pipeline untuk kolom kategorial
# Kita isi yang kosong dengan 'Unknown' lalu lakukan OneHotEncoding
categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='constant', fill_value='Unknown')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])

# Gabungkan keduanya dalam ColumnTransformer
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)
    ])

print("Preprocessor berhasil didefinisikan.")

Penjelasan Code:
- numeric_transformer: Kita pakai SimpleImputer dengan strategi median. Ingat penjelasan tadi? Median lebih aman kalau ada pencilan. Setelah diisi, kita lakukan StandardScaler supaya semua feature punya skala yang sama (penting buat algoritma kayak KNN atau SVM).
- categorical_transformer: Kita pakai strategi constant dengan fill_value='Unknown'. Ini taktik "Safety First" supaya model tahu kalau datanya memang nggak ada. Lalu kita pakai OneHotEncoder supaya data teks bisa dibaca mesin sebagai angka 0 dan 1.

Step 3: Membuat Full Pipeline dengan Model

Sekarang kita gabungkan preprocessor tadi dengan model machine learning, misalnya RandomForestRegressor.

# Gabungkan preprocessor dengan model regresi
model_pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('regressor', RandomForestRegressor(n_estimators=100, random_state=42))
])

# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Training model
model_pipeline.fit(X_train, y_train)

# Prediksi
preds = model_pipeline.predict(X_test)
print(f"MAE: {mean_absolute_error(y_test, preds)}")

Penjelasan Code:
Keren kan? Cuma dengan satu perintah model_pipeline.fit(), semua proses dari ngisi data kosong, nanganin teks, sampe training model jalan otomatis secara berurutan. Ini rahasia para pro supaya kodenya bersih dan gampang di-maintenance.

Analisis Error: Blunder dalam Pencatatan

Penting buat kamu tahu kalau nggak semua outliers itu "asli". Banyak outliers yang muncul karena recording blunders atau kesalahan input. Misalnya, koma yang kegeser atau sensor yang glitch.

Dalam dunia profesional, kita sering sebut proses ini sebagai Data Scrubbing. Kita harus jeli melihat frequency data. Kalau ada nilai yang munculnya aneh banget (misalnya suhu ruangan 100 derajat Celsius tapi cuma muncul satu kali), besar kemungkinan itu adalah error sistem. Mendeteksi pola ini sebelum melakukan imputation itu wajib hukumnya. Jangan sampai kamu malah "memprediksi" data baru berdasarkan data error yang sudah kamu impute.

Beberapa istilah teknis yang harus kamu akrab:
- Data Conditioning: Membersihkan noise dari signal mentah.
- Data Manipulation: Mengubah format supaya cocok sama model (scaling, encoding).
- Data Treatment: Intervensi aktif untuk memperbaiki kualitas data.

Tips Tambahan untuk Pro

  1. Gunakan Log Transformation untuk Outliers: Kalau data kamu punya skewness tinggi (miring banget), coba kasih fungsi np.log1p. Ini bakal narik outliers yang jauh banget supaya lebih dekat ke pusat distribusi.
  2. Jangan Asal Hapus: Menghapus baris yang ada missing data itu pilihan terakhir. Kamu bisa kehilangan banyak informasi berharga kalau main hapus aja.
  3. Dokumentasikan Preprocessing: Setiap keputusan kamu (kenapa pakai median, kenapa hapus outliers) harus dicatat. Ini penting banget buat reproduktifitas project kamu.

Kesimpulan

Menangani missing data dan outliers bukan cuma soal "bersih-bersih", tapi soal membangun pondasi yang kokoh buat model AI kamu. Dengan transisi dari pembersihan pasif ke rekonstruksi aktif (menggunakan KNN atau MICE), kamu sudah selangkah lebih maju dibanding data scientist amatiran.

Ingat, kunci dari model yang hebat bukan cuma algoritma yang kompleks, tapi data yang berkualitas. Selalu gunakan Pipelines untuk memastikan workflow kamu konsisten dan terhindar dari bias. Jadi, sudah siap "berperang" dengan dataset berantakan besok?

Semoga panduan ini bermanfaat buat project kamu selanjutnya! Kalau ada pertanyaan, jangan ragu buat terus belajar dan eksperimen. Happy coding!

Referensi

Analytics Vidhya. (2026). Amazon Machine Learning Project: Sales Data in Python. Retrieved from https://www.analyticsvidhya.com/blog/2026/01/machine-learning-project-on-amazon-sales-data-using-python/

Bex T. (2026). In-depth Tutorial to Advanced Missing Data Imputation Methods with Sklearn. TDS Archive | Medium. Retrieved from https://medium.com/data-science/advanced-missing-data-imputation-methods-with-sklearn-d9875cbcc6eb

Analytics Vidhya. (2026). Handling Missing Data and Outliers in Machine Learning. Retrieved from https://www.analyticsvidhya.com/blog/2026/01/data-preprocessing-best-practices/

LEO Dictionary. (2026). Handling - Translation in English-German Dictionary. Retrieved from https://dict.leo.org/german-english/handling

Rosebrock, A. (2026). Practical Python and OpenCV: Learn Computer Vision in a Single Weekend. PyImageSearch. Retrieved from https://pyimagesearch.com/practical-python-opencv