Memahami Algoritma DBSCAN Clustering: Teori Density-Based dan Implementasi dengan Scikit-learn untuk Deteksi Outlier
Mengapa K-Means Gagal pada Data Non-Spherical dan Peran DBSCAN sebagai Solusi
K-Means adalah algoritma clustering yang paling populer, tetapi memiliki tiga keterbatasan yang cukup membatasi penggunaannya. Pertama, K-Means hanya mampu mengenali cluster berbentuk spherical (bundar) karena metrik jarak Euclidean-nya. Kedua, algoritma ini sangat sensitif terhadap outlier; satu titik ekstrem dapat menggeser posisi centroid secara signifikan. Ketiga, kita harus menentukan jumlah cluster K di awal, padahal dalam banyak kasus kita tidak tahu berapa banyak kelompok yang sebenarnya ada dalam data.
Kasus nyata yang sering kita temui justru berada di luar asumsi K-Means. Data transaksi keuangan memiliki bentuk cluster yang tidak beraturan. Data sensor IoT memiliki kepadatan yang bervariasi antar wilayah. Data jaringan sering mengandung noise yang tidak dapat dihindari. K-Means juga mengasumsikan semua cluster memiliki ukuran yang relatif serupa, padahal kelompok dalam data nyata sering menunjukkan ukuran dan kepadatan yang sangat berbeda. Pada kondisi seperti ini, pendekatan berbasis jarak ke centroid mulai kehilangan makna.

Gambar: Contoh hasil clustering DBSCAN pada dataset non-spherical yang tidak dapat dikluster dengan baik oleh K-Means atau Gaussian Mixture — Sumber: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:DBSCAN-density-data.svg)
DBSCAN (Density-Based Spatial Clustering of Applications with Noise) mengambil pendekatan yang berbeda. Algoritma ini menumbuhkan cluster dari wilayah yang rapat (dense region), bukan dari centroid. Titik-titik yang berada di area sepi dianggap sebagai noise dan diberi label -1. Keunggulan utama DBSCAN adalah kita tidak perlu menentukan jumlah cluster K, dan label -1 tersebut otomatis menjadi indikator outlier yang sangat berguna untuk deteksi anomali.
Mekanisme DBSCAN dalam Mengelompokkan Core Point, Border Point, dan Noise Point
DBSCAN bekerja dengan dua parameter utama. eps adalah jari-jari pencarian tetangga, dan min_samples adalah jumlah minimum titik yang harus berada dalam radius tersebut agar suatu titik dianggap bagian dari cluster. Kombinasi kedua parameter ini menentukan bagaimana DBSCAN mengklasifikasikan setiap titik data ke dalam tiga kategori.
Core point adalah titik yang memiliki minimal min_samples tetangga dalam radius eps. Titik ini menjadi bibit pertumbuhan cluster. Border point adalah titik yang memiliki tetangga dalam radius eps tetapi jumlahnya kurang dari min_samples, dan titik tersebut berada dalam jangkauan core point. Noise point adalah titik yang tidak masuk ke dalam kategori mana pun, biasanya berada di wilayah yang sangat sepi.

Gambar: Ilustrasi core point (titik merah A), border point (titik B dan C), serta noise point (titik N) yang dikelilingi lingkaran radius eps pada DBSCAN — Sumber: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:DBSCAN-Illustration.svg)
Konsep core point dapat dibayangkan seperti pusat keramaian pasar, titik dengan tetangga cukup banyak menjadi pusat pengelompokan orang-orang di sekitarnya. Proses ekspansi cluster dimulai dari core point, lalu semua titik yang density-reachable dihubungkan secara berantai hingga cluster selesai terbentuk. Titik yang density-reachable terhubung seperti orang yang saling mengenal satu sama lain dalam rantai pertemanan, tanpa perlu mengenal semuanya secara langsung.
Ada perbedaan penting antara density-reachable dan density-connected. Density-reachable bersifat berurutan: titik A mencapai titik C melalui titik B yang masing-masing saling berdekatan. Density-connected lebih longgar, dua titik terhubung jika keduanya dijangkau oleh core point yang sama. Perbedaan inilah yang membuat DBSCAN mampu membentuk cluster dengan bentuk bebas, tidak terikat pada bentuk bundar.
Deep Learning Bootcamp
A beginner-friendly, highly interactive bootcamp designed to take you from found...
Implementasi DBSCAN dengan Scikit-learn pada Synthetic Dataset
Mari kita uji kemampuan DBSCAN pada data sintetis yang sengaja dibuat menantang. Kita gunakan make_blobs untuk membuat tiga cluster dengan bentuk cukup rapat, lalu menambahkan titik-titik noise secara acak. Data seperti ini merepresentasikan skenario nyata di mana outlier tersebar di antara cluster yang valid.
!pip install scikit-learn numpy matplotlib
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import DBSCAN
np.random.seed(42)
X, _ = make_blobs(n_samples=300, centers=3, cluster_std=0.6, random_state=42)
# Tambahkan 20 titik noise yang tersebar acak
noise = np.random.uniform(-6, 6, (20, 2))
X = np.vstack([X, noise])
model = DBSCAN(eps=0.8, min_samples=5)
labels = model.fit_predict(X)
# Analisis hasil clustering
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
print(f"Jumlah cluster terdeteksi: {n_clusters}")
print(f"Jumlah noise/outlier: {list(labels).count(-1)}")
# Hitung jumlah titik per cluster
for label in sorted(set(labels)):
count = list(labels).count(label)
if label == -1:
print(f" Noise (-1): {count} titik")
else:
print(f" Cluster {label}: {count} titik")
# Visualisasi hasil
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', s=20)
plt.colorbar(scatter, label='Cluster Label')
plt.title('Hasil Clustering DBSCAN')
plt.xlabel('Fitur 1')
plt.ylabel('Fitur 2')
plt.show()Alur kerja kode di atas cukup ringkas. Setelah data dibuat, kita menginisialisasi DBSCAN dengan eps=0.8 dan min_samples=5, lalu memanggil fit_predict(). Atribut labels_ berisi nilai cluster untuk setiap titik; nilai positif menandakan anggota cluster, sedangkan nilai -1 menandakan noise. Hasilnya akan menunjukkan bahwa DBSCAN berhasil memisahkan tiga cluster dan menandai titik-titik yang tersebar sebagai outlier.
Output:
Jumlah cluster terdeteksi: 3
Jumlah noise/outlier: 20
Noise (-1): 20 titik
Cluster 0: 100 titik
Cluster 1: 100 titik
Cluster 2: 100 titik
Pada scatter plot, kita akan melihat tiga kelompok titik berwarna berbeda yang kompak, sementara 20 titik noise tersebar di area kosong dengan warna ungu (label -1). Titik-titik noise ini adalah outlier yang siap dianalisis lebih lanjut, misalnya sebagai indikasi transaksi mencurigakan. Kombinasi antara label cluster dan posisi titik pada plot memberi gambaran langsung tentang kualitas hasil; jika banyak titik yang salah kelompok, kita bisa menyesuaikan eps dan menjalankan kembali eksperimen.
Menentukan Nilai Epsilon dengan K-Distance Plot
Nilai eps sangat menentukan kualitas hasil DBSCAN. Jika terlalu kecil, cluster akan terpecah menjadi banyak potongan. Jika terlalu besar, cluster yang berbeda bisa tergabung menjadi satu. Memilih eps secara asal akan menghasilkan clustering yang sulit diinterpretasikan.
Kita bisa menentukan eps secara sistematis dengan k-distance plot. Alur kerjanya sederhana. Pertama, hitung jarak setiap titik ke tetangga ke-k menggunakan NearestNeighbors. Kedua, ambil jarak ke tetangga ke-k untuk setiap titik, lalu urutkan dari kecil ke besar. Ketiga, plot nilai tersebut sebagai kurva. Titik siku (elbow) pada kurva adalah nilai eps yang direkomendasikan.
!pip install scikit-learn numpy matplotlib
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors
k = 5 # nilainya sama dengan min_samples
neigh = NearestNeighbors(n_neighbors=k)
neigh.fit(X)
distances, _ = neigh.kneighbors(X)
k_distances = np.sort(distances[:, -1])
plt.figure(figsize=(8, 5))
plt.plot(k_distances)
plt.xlabel('Titik Data (diurutkan)')
plt.ylabel(f'Jarak ke tetangga ke-{k}')
plt.title('K-Distance Plot untuk Menentukan Epsilon')
plt.grid(True, alpha=0.3)
plt.show()Output:

Nilai k pada k-distance plot sebaiknya disamakan dengan min_samples yang akan kita gunakan. Parameter eps terbaik berada di area siku kurva, yaitu titik di mana kemiringan kurva berubah dari landai menjadi curam. Titik-titik di sebelah kiri siku adalah data dalam cluster yang rapat, sedangkan titik-titik di sebelah kanan adalah noise yang jaraknya besar. Pada dataset contoh ini, kurva mulai naik tajam di sekitar nilai 1.0 hingga 1.4, sehingga eps di kisaran 0.8 hingga 1.0 menjadi pilihan yang wajar dan konsisten dengan implementasi sebelumnya. Dengan kurva ini, kita mendapatkan dasar yang objektif untuk memilih eps alih-alih menebak.
Praktik Pemilihan MinPts dan Best Practices untuk Deteksi Outlier
min_samples menentukan seberapa ketat kita mendefinisikan kepadatan. Aturan umum yang disarankan: gunakan minimal jumlah dimensi data ditambah satu (min_samples = n_features + 1), atau dua kali dimensi data untuk dataset yang lebih besar. Untuk data dua dimensi, nilai 4 hingga 6 biasanya bekerja dengan baik. Aturan praktis ini berlaku untuk data berdimensi rendah hingga menengah; semakin besar dimensi, semakin besar pula nilai min_samples yang dibutuhkan agar core point benar-benar mencerminkan kepadatan lokal.
Penting untuk men-tuning eps dan min_samples secara bersamaan, bukan terpisah. Kedua parameter ini saling bergantung: menurunkan min_samples memperlonggar definisi core point, sehingga eps yang lebih kecil bisa digunakan. Mengubah salah satu parameter tanpa menyesuaikan yang lain sering menghasilkan hasil yang tidak konsisten.
Interpretasi titik noise sebagai outlier perlu dilakukan dengan hati-hati. Label -1 memang menandakan titik yang tidak cocok dengan cluster mana pun, tetapi belum tentu itu anomali yang bermakna. Kita perlu memvalidasi hasil dengan konteks domain sebelum mengambil keputusan. Misalnya, pada deteksi fraud, noise perlu diperiksa secara manual untuk memastikan bahwa pola tersebut memang mencurigakan, bukan sekadar data yang tidak lengkap.
DBSCAN memiliki keterbatasan yang perlu disadari. Algoritma ini kesulitan pada data dengan kepadatan yang sangat bervariasi karena satu nilai eps tidak bisa mengakomodasi semua skala. Pada dataset berdimensi tinggi, perhitungan jarak Euclidean menjadi kurang bermakna akibat curse of dimensionality. Untuk evaluasi, silhouette score tetap berguna sebagai pembanding antar konfigurasi parameter, tetapi keputusan akhir sebaiknya selalu melibatkan validasi domain.
Setelah memahami DBSCAN, langkah selanjutnya adalah memperdalam unsupervised learning secara menyeluruh. Bergabunglah dengan kursus Machine Learning di Rumah Coding untuk menguasai pipeline clustering end-to-end, dari pemilihan algoritma hingga evaluasi dan deployment.
Kursus Terkait
Deep Learning Bootcamp
A beginner-friendly, highly interactive bootcamp designed to take you from foundational concepts to deploying real-world Artificial Intelligence applications. Through a completely project-based approach, you will master the core of Deep Learning, Artificial Neural Networks, and Computer Vision using Python and TensorFlow, ultimately building a professional-grade AI web application for your portfolio.
GreenGuard: Intelligent Plant Disease Diagnosis Web App
- Interactive Image Upload UI: A clean, user-friendly interface built with Streamlit that supports drag-and-drop image uploads directly from a computer or mobile phone.
- Real-Time AI Inference: Utilizes a lightweight, optimized CNN model (like MobileNetV2) to process the image and return a diagnosis in seconds without heavy server load.
- Confidence Scoring Dashboard: Visually displays the model's prediction probability (e.g., "95% confident this is Tomato Late Blight") using interactive progress bars or charts.
LLM Bootcamp
This project-based bootcamp is designed for beginners to dive practically into the world of Large Language Models (LLMs). Through hands-on building, you will learn how to interact with top-tier AI APIs, master prompt engineering, orchestrate complex workflows using LangChain, and implement Retrieval-Augmented Generation (RAG) to query your own documents. By the end of this course, you will have the skills to build, test, and deploy a fully functional, custom AI web application.
Domain-Specific AI Knowledge Assistant
- Dynamic Document Processing: A sidebar interface allowing users to upload new PDF or TXT files, which the app automatically chunks, embeds, and stores in the vector database.
- Context-Aware Chat UI: A modern chat interface built with Streamlit that maintains conversation history, allowing users to ask follow-up questions naturally.
- Strict Guardrails (Anti-Hallucination): System instructions designed so the AI politely declines to answer questions that fall outside the context of the uploaded documents.
Machine Learning Bootcamp
A beginner-friendly, 7-week project-based bootcamp designed to take you from Python basics to deploying your first Machine Learning model. Through hands-on practice, you will master essential data manipulation, build predictive algorithms, and develop an end-to-end, industry-ready application to kickstart your career in data science.
End-to-End Student Success Predictor
- Automated Data Pipeline: A preprocessing script that automatically cleans missing values, encodes categorical data (like course type or student background), and scales numerical inputs.
- Predictive Engine: A tuned machine learning classification model (e.g., Random Forest) specifically optimized for high Recall, ensuring that "at-risk" students are not missed.
- Interactive Web Dashboard: A user-friendly Streamlit interface featuring a sidebar where instructors can manually input a student's study hours, quiz scores, and login frequency to get an instant pass/fail probability.
Artikel Terkait
Memahami Konsep Feature Selection dengan Chi-Square, Mutual Information, dan RFE: Implementasi dengan Scikit-learn
Memahami Konsep Logistic Regression dan Implementasinya dengan Python untuk Klasifikasi Biner