1 Definisi Singkat

Study case ini menerapkan metode Klastering Berbasis Kepadatan (Density-Based Clustering) pada data katalog produk. Metode ini menemukan klaster sebagai wilayah data yang padat (dense regions) dalam ruang fitur yang diolah. Tujuannya adalah mengidentifikasi kelompok produk yang secara fungsional atau ekonomis serupa, serta mendeteksi outlier (produk anomali) secara inheren.

1.1 DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

Kategori Definisi Singkat
Definisi Algoritma yang mendefinisikan klaster sebagai himpunan maksimum titik-titik yang terhubung berdasarkan kepadatan (density-connected), ditentukan oleh radius \((\epsilon)\) dan jumlah minimum tetangga (\(MinPts\)).
Aplikasi pada Produk Mengelompokkan produk yang memiliki kombinasi skor fitur (misalnya, Harga dan Kategori) yang sangat terkonsentrasi di area tertentu dari ruang fitur.

1.2 OPTICS (Ordering Points to Identify the Clustering Structure)

Kategori Definisi Singkat
Definisi Menghasilkan tatanan berperingkat (ordering) dari objek data yang merepresentasikan struktur kepadatan hierarkis, yang memungkinkan ekstraksi klaster pada berbagai ambang batas kepadatan.
Konsep Kunci Membangun Reachability Plot menggunakan Core Distance dan Reachability Distance.

1.3 HDBSCAN (Hierarchical DBSCAN)

Kategori Definisi Singkat
Definisi Algoritma berbasis kepadatan hierarkis yang menyeleksi klaster paling stabil (persistent) dari hierarki kerapatan, tanpa memerlukan parameter \(\epsilon\).
Keunggulan Ideal untuk data produk di mana beberapa kelompok produk mungkin sangat padat (misalnya, produk elektronik murah) sementara kelompok lain lebih renggang (misalnya, furnitur mahal).

2 Rumus Inti / Model Matematis

Algoritma klastering berbasis kepadatan beroperasi berdasarkan definisi geometris, di mana kepadatan lokal dan konektivitas dalam ruang fitur menjadi metrik utama. Model matematisnya berpusat pada metrik jarak yang disesuaikan untuk mendefinisikan batas klaster.

2.1 DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

DBSCAN menggunakan dua parameter (\(MinPts\) dan \(\epsilon\)) untuk mendefinisikan tiga konsep kunci: Lingkungan-epsilon, Titik Inti, dan Konektivitas Kepadatan.

2.1.1 Kepadatan Epsilon (\(\epsilon\)-Neighborhood)

Ini adalah himpunan semua titik \(q\) dalam dataset \(D\) yang berjarak tidak lebih dari \(\epsilon\) (epsilon) dari titik \(p\). Lingkungan ini menentukan kepadatan lokal di sekitar \(p\).

\[\mathbf{N_{\epsilon}(p) = \{q \in D \mid \text{dist}(p, q) \leq \epsilon\}}\]

  • \(N_{\epsilon}(p)\): Lingkungan-\(\epsilon\) dari titik \(p\).
  • \(\text{dist}(p, q)\): Fungsi jarak, biasanya Euclidean Distance pada data yang sudah di-scaling.
  • Interpretasi: Menghitung berapa banyak tetangga yang dimiliki \(p\) dalam radius tertentu.

2.1.2 Core Point Condition (Kondisi Titik Inti)

Titik \(p\) dianggap sebagai Core Point (Titik Inti) jika kardinalitas (jumlah anggota) dari Lingkungan-\(\epsilon\) dari \(p\) mencapai ambang batas minimum \(MinPts\).

\[\mathbf{|N_{\epsilon}(p)| \geq MinPts}\]

  • \(|N_{\epsilon}(p)|\): Jumlah titik dalam \(N_{\epsilon}(p)\).
  • \(MinPts\): Parameter ambang batas kepadatan yang ditentukan oleh pengguna.
  • Peran: Titik Inti berfungsi sebagai ‘generator’ klaster; mereka adalah bukti adanya wilayah padat.

2.1.3 Konsep Konektivitas (Implisit: Density-Reachability)

Klaster DBSCAN dibangun melalui koneksi. Titik \(q\) dapat dicapai secara kepadatan (density-reachable) dari \(p\) jika ada rantai titik (\(p_1, \ldots, p_n\)) di mana setiap titik \(p_i\) adalah Core Point dan \(p_{i+1}\) dapat dicapai secara langsung dari \(p_i\). Konsep ini secara implisit mengatur bagaimana Core Points menarik Border Points untuk membentuk klaster yang utuh.

2.2 OPTICS (Ordering Points to Identify the Clustering Structure)

OPTICS memperkenalkan dua metrik jarak baru yang disesuaikan dengan kepadatan, memungkinkan identifikasi struktur klastering hierarkis.

2.2.1 Core Distance (\(\text{CoreDist}(p)\))

Jarak inti dari titik \(p\) adalah jarak minimum yang diperlukan agar \(p\) dapat dianggap sebagai Core Point (memiliki setidaknya \(MinPts\) tetangga). Ini diukur sebagai jarak Euclidean ke tetangga ke-\(MinPts\) terdekat.

\[\mathbf{\text{CoreDist}(p) = \text{dist}(p, p_{\text{MinPts}})}\]

  • \(p_{\text{MinPts}}\): Titik ke-\(MinPts\) terdekat dari \(p\).
  • Fungsi: Nilai \(\text{CoreDist}\) yang tinggi menunjukkan bahwa titik \(p\) berada di wilayah yang renggang (sparse).

2.2.2 Reachability Distance (\(\text{ReachDist}(p, q)\))

Jarak keterjangkauan dari titik \(q\) terhadap Core Point \(p\). Metrik ini dirancang untuk menghaluskan fluktuasi jarak dalam klaster yang padat.

\[\mathbf{\text{ReachDist}(p, q) = \max \left( \text{CoreDist}(p), \text{dist}(p, q) \right)}\]

  • Mekanisme:
    • Jika \(q\) berada di dalam inti kepadatan \(p\) (yaitu \(\text{dist}(p, q)\) kecil), \(\text{ReachDist}\) didominasi oleh \(\text{CoreDist}(p)\) yang rendah.
    • Jika \(q\) berada di luar inti \(p\), \(\text{ReachDist}\) didominasi oleh \(\text{dist}(p, q)\).
  • Tujuan: Memastikan semua titik dalam klaster padat memiliki nilai \(\text{ReachDist}\) yang seragam dan rendah.

2.3 HDBSCAN (Hierarchical DBSCAN)

HDBSCAN membangun hierarki klastering menggunakan metrik yang lebih kuat terhadap variasi kepadatan, yang kemudian dinilai stabilitasnya.

2.3.1 Mutual Reachability Distance (\(\text{MReachDist}(a, b)\))

Jarak ini digunakan untuk membangun graf kepadatan simetris. Jarak ini adalah jarak Euclidean standar, namun diperkuat oleh kepadatan lokal kedua titik \(a\) dan \(b\).

\[\mathbf{\text{MReachDist}(a, b) = \max \left( \text{CoreDist}(a), \text{CoreDist}(b), \text{dist}(a, b) \right)}\]

  • Sifat: Jarak ini akan tinggi kecuali kedua titik \(a\) dan \(b\) berada di wilayah yang padat (memiliki \(\text{CoreDist}\) yang rendah).
  • Fungsi: Digunakan sebagai bobot tepi dalam konstruksi Minimum Spanning Tree (MST), yang menjadi dasar hierarki klastering kerapatan.

2.3.2 Klaster Paling Stabil (Stability)

Stabilitas klaster \(C\) adalah kriteria utama HDBSCAN untuk memilih klaster yang valid dari hierarki yang dihasilkan. Stabilitas diukur dari total rentang kerapatan klaster yang ada.

\[\mathbf{\text{Stability}(C) = \sum_{p \in C} \left( \lambda_{\max}(C) - \lambda_p \right)}\]

  • \(\lambda\) (Kerapatan): Didefinisikan sebagai invers dari jarak: \(\lambda = 1 / \text{MReachDist}\). Kerapatan yang lebih tinggi berarti jarak yang lebih kecil.
  • \(\lambda_{\max}(C)\): Kerapatan di mana klaster \(C\) berpisah dari klaster induknya.
  • \(\lambda_p\): Kerapatan di mana titik \(p\) “jatuh” dari klaster \(C\) (yaitu, menjadi noise atau bergabung dengan klaster lain).
  • Tujuan: Memilih klaster yang memiliki stabilitas terbesar, yang merupakan klaster yang bertahan paling lama sebagai entitas terpisah dalam hirarki.

3 Cara Kerja (Langkah Operasi, Hyperparameter Utama)

Setiap algoritma klastering berbasis kepadatan memiliki mekanisme unik untuk mengidentifikasi dan mengelompokkan wilayah padat, yang membedakannya dalam penanganan noise dan variasi kepadatan data.

3.1 DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

DBSCAN adalah fondasi klastering berbasis kepadatan. Algoritma ini memetakan titik data menjadi tiga kategori: Core, Border, atau Noise, berdasarkan parameter \(\epsilon\) dan \(MinPts\).

3.1.1 Langkah Operasi

Proses DBSCAN bersifat iteratif dan berorientasi pada ekspansi klaster dari titik-titik inti.

  1. Inisialisasi & Kunjungan: Algoritma mulai dengan memilih titik data \(p\) secara acak yang belum dikunjungi.
  2. Verifikasi Core Point: Sistem menghitung jumlah tetangga (\(|N_{\epsilon}(p)|\)) dalam Lingkungan \(\epsilon\).
    • Jika \(|N_{\epsilon}(p)| \geq MinPts\), titik \(p\) ditetapkan sebagai Core Point dan alokasi klaster baru dimulai.
    • Jika \(|N_{\epsilon}(p)| < MinPts\), \(p\) mungkin merupakan Border Point atau Noise Point, dan proses beralih ke tetangga berikutnya (kecuali jika \(p\) kemudian dapat dicapai dari Core Point lain).
  3. Ekspansi Klaster (Density-Reachability): Jika \(p\) adalah Core Point, klaster diperluas. Semua titik yang berada dalam Lingkungan \(\epsilon\) dan density-reachable dari \(p\) akan ditambahkan ke klaster yang sama. Ekspansi ini dilakukan secara rekursif, di mana setiap Core Point yang baru ditambahkan akan memicu pencarian dan penambahan titik-titik tetangga lainnya.
  4. Kategorisasi Titik Lain:
    • Border Point: Titik yang bukan Core Point tetapi berada dalam Lingkungan \(\epsilon\) dari Core Point lain.
    • Noise Point: Titik yang bukan Core Point dan tidak berada dalam Lingkungan \(\epsilon\) dari Core Point manapun. Titik-titik ini diberi label khusus (Klaster -1) dan diabaikan dari klaster yang valid.
  5. Ulangi: Proses berlanjut hingga semua titik data telah dikunjungi dan diklasifikasikan.

3.1.2 Hyperparameter Utama DBSCAN

Pemilihan parameter DBSCAN adalah tantangan utama, terutama pada data dimensi tinggi yang telah direduksi.

Parameter Notasi / Fungsi Penjelasan Detail yang Diperluas Cara Penentuan Praktis
Epsilon (Radius) eps (\(\epsilon\)) Jarak maksimum absolut yang mendefinisikan batas Lingkungan kepadatan. Nilai ini sangat menentukan seberapa ‘dekat’ dua titik harus dianggap bertetangga. Perubahan kecil pada \(\epsilon\) dapat mengubah struktur klaster secara drastis (klaster bisa terpisah atau bergabung). K-distance Plot (K-Nearest Neighbor Plot): Metode heuristik yang paling umum. Cari nilai \(\epsilon\) pada titik ‘knee’ (tikungan tajam) pada grafik jarak ke tetangga ke-\(MinPts\). Titik ini seringkali mewakili batas di mana jarak mulai didominasi oleh noise.
Minimum Points MinPts Ambang batas kepadatan: jumlah minimum tetangga yang harus dimiliki sebuah titik agar dianggap Core Point dan memulai klaster. Harus lebih besar dari dimensi data. Umumnya disetel ke \(D+1\) atau \(2 \times D\), di mana \(D\) adalah dimensi data (dalam kasus ini, \(D=10\) setelah PCA).

3.2 OPTICS (Ordering Points to Identify the Clustering Structure)

OPTICS mengatasi kelemahan DBSCAN yang bergantung pada \(\epsilon\) tunggal dengan menciptakan urutan pemrosesan yang mewakili struktur kepadatan hierarkis.

3.2.1 Langkah Operasi

OPTICS tidak menghasilkan klaster akhir; ia menghasilkan ordering data dan Reachability Plot.

  1. Inisialisasi: Semua titik ditandai sebagai ‘belum diproses’. Nilai \(\text{CoreDist}\) dan \(\text{ReachDist}\) diatur ke \(\infty\).
  2. Pemrosesan Berbasis Prioritas: Pilih titik \(p\) yang belum diproses. Hitung \(\text{CoreDist}(p)\). Titik \(p\) ditambahkan ke ordering output.
  3. Pembaruan Seed List: Jika \(p\) adalah Core Point, semua tetangga \(q\) dari \(p\) dipindai. Untuk setiap \(q\), \(\text{ReachDist}(p, q)\) dihitung.
  4. Membuat Ordering: Nilai \(\text{ReachDist}\) dari tetangga \(q\) akan diperbarui jika Reachability yang baru dihitung lebih kecil daripada nilai yang sudah ada. Tetangga \(q\) yang diperbarui disisipkan ke dalam priority queue yang disebut Seed List, diurutkan berdasarkan \(\text{ReachDist}\) terkecil.
  5. Iterasi Prioritas: Algoritma selanjutnya memilih dan memproses titik berikutnya dari Seed List (titik dengan ReachDist terkecil), memastikan titik-titik dalam klaster padat diproses secara berdekatan dalam ordering.
  6. Output: Hasilnya adalah Reachability Plot (plot dua dimensi dari nilai \(\text{ReachDist}\) vs. urutan pemrosesan), di mana lembah menunjukkan klaster padat.
  7. Ekstraksi Klaster: Klaster diekstraksi pasca-proses, biasanya dengan memotong Reachability Plot pada ambang batas \(\epsilon\) tertentu.

3.2.2 Hyperparameter Utama OPTICS

Parameter Notasi / Fungsi Penjelasan Detail yang Diperluas Keunggulan Praktis
Minimum Points MinPts Digunakan untuk menghitung Core Distance dan Reachability Distance. Parameter ini secara implisit menentukan tingkat kepadatan minimum yang diakui. Inilah parameter utama yang membentuk struktur kepadatan dalam Reachability Plot, bukan max_eps.
Epsilon Maksimum max_eps (\(\epsilon_{max}\)) Batas jarak terluar untuk pencarian tetangga. Parameter ini harus disetel sangat besar (atau \(\infty\)) hanya untuk memastikan bahwa semua struktur data (termasuk yang sangat renggang) direkam dalam Reachability Plot untuk analisis pasca-proses.

3.3 HDBSCAN (Hierarchical DBSCAN)

HDBSCAN adalah penyempurnaan yang menggabungkan hierarki yang dibuat oleh OPTICS dengan konsep stabilitas untuk secara otomatis memilih klaster yang paling signifikan dan tahan lama.

3.3.1 Langkah Operasi

HDBSCAN beroperasi dengan lima langkah utama, tanpa memerlukan radius \(\epsilon\) tunggal.

  1. Transformasi Ruang Jarak: Data diubah menggunakan Mutual Reachability Distance (\(\text{MReachDist}\)) untuk menyesuaikan jarak dengan kepadatan lokal.
  2. Konstruksi MST dan Hierarki Kerapatan: MST dibangun menggunakan \(\text{MReachDist}\) sebagai bobot tepi. Hierarki klastering diinferensikan dari MST, di mana pemisahan klaster terjadi saat tepi dengan bobot tinggi (jarak besar) dihapus.
  3. Kompilasi Stabilitas (Condensed Tree): Hierarki “di-kondensasi” dengan menghilangkan pemisahan klaster yang dangkal (hanya terdiri dari satu atau sedikit titik), menyederhanakan pohon menjadi hanya pemisahan klaster yang signifikan.
  4. Ekstraksi Klaster Stabil: Untuk setiap klaster dalam pohon yang dikondensasi, nilai Stabilitas dihitung berdasarkan “masa hidup” klaster tersebut. Klaster yang memiliki stabilitas terbesar (rentang kerapatan terbesar) dipilih sebagai hasil akhir.
  5. Penentuan Noise: Semua titik yang tidak diklasifikasikan ke dalam klaster stabil manapun secara otomatis diberi label Noise (Klaster 0).

3.3.2 Hyperparameter Utama HDBSCAN

HDBSCAN hanya memiliki dua parameter kunci yang fokus pada ukuran klaster dan smoothing kepadatan.

Parameter Fungsi Kunci Dampak Praktis (Pengendalian Granularitas) Keunggulan Praktis
Minimum Cluster Size min_cluster_size Parameter utama yang menentukan jumlah minimum titik yang harus ada agar klaster dianggap valid dan stabil. Mengontrol granularitas: nilai besar akan menghasilkan klaster yang lebih sedikit, lebih besar, dan lebih umum. Nilai kecil menghasilkan klaster kecil yang sangat spesifik.
Minimum Samples min_samples Nilai \(k\) yang digunakan untuk menghitung Core Distance dan \(\text{MReachDist}\). Ini bertindak sebagai parameter smoothing pada kepadatan lokal. Nilai yang lebih besar meningkatkan penekanan pada klaster yang sangat padat dan membuat batas klaster menjadi lebih ketat, meningkatkan toleransi terhadap noise di perbatasan klaster.

4 Kelebihan / Keterbatasan Praktis

Klastering berbasis kepadatan (DBSCAN, OPTICS, HDBSCAN) menawarkan kerangka kerja yang kuat untuk mengidentifikasi pola dan anomali dalam data yang kompleks. Namun, pendekatan ini menuntut pra-proses data yang cermat untuk mengatasi keterbatasan bawaannya.

4.1 Kelebihan Utama (The Strengths of Density-Based Methods)

Keunggulan metode berbasis kepadatan menjadikan mereka pilihan yang optimal untuk menemukan struktur non-linear dan entitas anomali dalam data katalog produk.

4.1.1 Penemuan Klaster Bentuk Arbitrer (Non-Konveks)

Berbeda dengan algoritma berbasis centroid (misalnya K-Means) yang secara implisit berasumsi klaster berbentuk bola atau konveks, metode berbasis kepadatan dapat mengidentifikasi klaster dengan bentuk yang kompleks dan terdistorsi (misalnya berbentuk S, cincin, atau pola yang terjalin).

  • Nilai Praktis: Dalam data produk e-commerce, segmen produk jarang membentuk kelompok bulat yang sempurna. Distribusi harga, stok, dan kategori seringkali menghasilkan kelompok yang memanjang atau melengkung dalam ruang fitur. Kemampuan ini memastikan bahwa segmentasi produk yang ditemukan lebih akurat mencerminkan hubungan fitur yang kompleks.

4.1.2 Identifikasi Noise (Outlier) Secara Alami dan Efektif

Metode ini secara inheren mengklasifikasikan titik-titik data yang berada di wilayah kerapatan rendah dan tidak memiliki koneksi yang cukup padat dengan Core Point manapun sebagai Noise (Klaster -1 atau 0).

  • Nilai Praktis: Fitur ini krusial untuk deteksi anomali. Dalam konteks katalog produk, noise points dapat mewakili:
  1. Produk yang sangat unik atau baru,
  2. Produk dengan harga yang salah atau data entri yang eror,
  3. Produk super-premium yang sangat berbeda dari produk inti.

Deteksi outlier ini dilakukan tanpa perlu model terpisah, yang merupakan keuntungan signifikan dibandingkan K-Means (di mana outlier malah mendistorsi pusat klaster).

4.1.3 Tidak Memerlukan Spesifikasi Jumlah Klaster (\(K\))

Ketidakmampuan untuk menentukan jumlah klaster yang tepat (\(K\)) di awal adalah masalah umum dalam unsupervised learning. Metode berbasis kepadatan mengatasi hal ini dengan menemukan jumlah klaster secara otomatis berdasarkan struktur kepadatan yang sebenarnya.

  • Nilai Praktis: Segmentasi pasar atau produk tidak boleh didorong oleh tebakan (\(K\)). Dengan metode ini, analisis bisnis dapat fokus pada interpretasi klaster yang secara alami terbentuk, bukan klaster yang dipaksakan.

4.1.4 Efektivitas HDBSCAN dalam Menangani Variasi Kepadatan

HDBSCAN secara khusus dirancang untuk mengatasi kelemahan utama DBSCAN: ketidakmampuan menangani klaster dengan kepadatan internal yang bervariasi.

  • Nilai Praktis: Dalam data produk, klaster produk populer (fast-moving atau low-margin) akan sangat padat, sementara produk niche atau high-margin akan membentuk klaster yang renggang. HDBSCAN mengidentifikasi klaster berdasarkan stabilitas hierarkis daripada ambang batas \(\epsilon\) tunggal, memastikan klaster yang padat dan renggang dapat ditemukan secara bersamaan.

4.2 Keterbatasan Praktis (The Limitations and Mitigation)

Meskipun kuat, penerapan klastering berbasis kepadatan pada data nyata memerlukan mitigasi terhadap beberapa batasan teknis.

4.2.1 Kutukan Dimensionalitas (Curse of Dimensionality)

Ini adalah tantangan terbesar. Ketika dimensi data meningkat (dari 40 dimensi setelah OHE), volume ruang fitur meningkat secara eksponensial. Jarak Euclidean antara semua pasangan titik data cenderung menjadi seragam.

  • Dampak: Ketika jarak seragam, perbedaan antara kepadatan lokal dan kepadatan global menjadi kabur. Semua titik dapat terlihat sama-sama renggang, yang menyebabkan algoritma gagal menemukan Core Points atau mengklasifikasikan hampir semua data sebagai Noise.

  • Mitigasi: Untuk data 40 dimensi ini, Reduksi Dimensi (menggunakan PCA atau UMAP seperti yang dilakukan di Poin 8) adalah langkah pra-proses wajib untuk memproyeksikan data ke sub-ruang dimensi rendah (misalnya 10 dimensi) di mana konsep kepadatan dapat dipertahankan.

4.2.2 Sensitivitas Parameter DBSCAN

DBSCAN sangat sensitif terhadap pemilihan \(\epsilon\). Jika \(\epsilon\) sedikit diubah, hasilnya bisa sangat berbeda.

  • Dampak: Menemukan nilai \(\epsilon\) yang optimal memerlukan trial-and-error yang intensif (seringkali menggunakan K-distance Plot) dan tetap sulit jika klaster yang berbeda memerlukan radius kepadatan yang berbeda. Klaster padat mungkin memerlukan \(\epsilon\) kecil, sementara klaster renggang memerlukan \(\epsilon\) besar. Jika \(\epsilon\) terlalu besar, jembatan akan terbentuk antara klaster yang berbeda.

4.2.3 Kinerja Buruk pada Kepadatan Seragam

Jika batas antar klaster tidak ditandai dengan penurunan kepadatan yang jelas (misalnya, jika data terdistribusi secara hampir seragam atau batas klaster sangat halus), algoritma berbasis kepadatan akan mengalami kesulitan.

  • Dampak: Dalam skenario ini, algoritma mungkin gagal memisahkan klaster, mengelompokkan semua data menjadi satu klaster besar, atau, sebaliknya, memecah data menjadi banyak klaster kecil yang tidak bermakna.

4.2.4 Skalabilitas Komputasi

Implementasi DBSCAN dan OPTICS tradisional memiliki kompleksitas waktu \(O(n^2)\) dalam kasus terburuk (tanpa indeks spasial seperti \(k\)-d trees).

  • Dampak: Meskipun ini tidak menjadi masalah untuk dataset kecil (100 observasi), ini akan menjadi penghalang serius untuk klastering katalog produk e-commerce berskala besar (jutaan observasi), di mana diperlukan pendekatan yang lebih canggih (seperti Approximate Nearest Neighbor atau implementasi berbasis grid).

5 Sumber & Loading Data

Tahap awal dalam setiap analisis data adalah mengidentifikasi sumber data, memverifikasi integritasnya, dan memuatnya ke dalam lingkungan komputasi (dalam hal ini, R) untuk pemrosesan lebih lanjut.

5.1 Sumber Data dan Karakteristik

Data yang digunakan dalam study case ini adalah dataset inventaris produk (katalog) yang tersimpan dalam format file CSV (Comma Separated Values) dengan nama products-100.csv.

Karakteristik Detail
Sumber Data File products-100.csv (Asumsi data sintetis yang disediakan secara internal).
Domain Data Katalog Produk (Product Catalog) dari konteks E-commerce atau Manajemen Inventaris.
Jumlah Observasi 100 baris data, mewakili 100 produk berbeda.
Tipe Data Kunci Variabel numerik (Price, Stock) dan berbagai variabel kategorikal dengan kardinalitas tinggi (Category, Brand).
Relevansi Klastering Data ini merupakan tantangan klastering karena campuran tipe variabel dan potensi Curse of Dimensionality akibat banyaknya kategori unik.

5.2 Loading Data ke Lingkungan R

Proses loading dilakukan untuk mempersiapkan dataset untuk eksplorasi dan pra-proses. Semua library yang diperlukan untuk klastering, reduksi dimensi, dan evaluasi diinisialisasi di awal.

# Muat library yang dibutuhkan untuk Data Science di R
library(readr)
library(dplyr)      # Untuk manipulasi data (data wrangling)
library(ggplot2)    # Untuk visualisasi
library(dbscan)     # Implementasi utama DBSCAN, OPTICS, dan HDBSCAN
# CATATAN: Karena paket 'hdbscan' mengalami error, kita akan mengandalkan fungsi hdbscan() 
# yang tersedia di dalam paket 'dbscan'.
library(cluster)    # Untuk metrik evaluasi internal (mis. Silhouette)
library(fpc)        # Untuk metrik evaluasi eksternal/internal (mis. Dunn Index)
library(uwot)       # Untuk UMAP (Reduksi Dimensi Non-Linier)

# Memuat dataset CSV
df_raw <- read.csv("products-100.csv")

cat("Data berhasil dimuat. Dimensi data mentah:", dim(df_raw), "\n")
## Data berhasil dimuat. Dimensi data mentah: 100 13
cat("5 baris pertama data mentah:\n")
## 5 baris pertama data mentah:
print(head(df_raw, 5))
##   Index                                 Name
## 1     1 Compact Printer Air Advanced Digital
## 2     2                               Tablet
## 3     3                 Smart Blender Cooker
## 4     4         Advanced Router Rechargeable
## 5     5         Portable Mouse Monitor Phone
##                                             Description
## 1         Situation organization these memory much off.
## 2           Discussion loss politics free one thousand.
## 3                                     No situation per.
## 4                       For force gas energy six laugh.
## 5 Feeling back religious however author room scientist.
##                        Brand           Category Price Currency Stock
## 1    Garner, Boyle and Flynn Books & Stationery   265      USD   774
## 2                Mueller Inc   Shoes & Footwear   502      USD    81
## 3 Lawson, Keller and Winters Kitchen Appliances   227      USD   726
## 4         Gallagher and Sons Kitchen Appliances   121      USD   896
## 5                  Irwin LLC     Kids' Clothing     1      USD   925
##            EAN       Color       Size Availability Internal.ID
## 1 2.091465e+12 ForestGreen      Large    pre_order          56
## 2 5.286197e+12       Black    8x10 in     in_stock          29
## 3 1.282899e+12   SlateGray         XS     in_stock          70
## 4 3.879178e+12   PaleGreen          L discontinued          31
## 5 9.055773e+12    SeaShell 100x200 mm discontinued          10

Interpretasi Proses Loading:

  1. Inisialisasi Library Inti: Pemilihan paket utama seperti dbscan menunjukkan fokus eksplisit pada algoritma berbasis kepadatan. Paket cluster dan fpc disiapkan untuk validasi dan perbandingan kinerja yang objektif di Poin 10.

  2. Pemilihan Alat Visualisasi: Penggunaan library(uwot) untuk UMAP menunjukkan kesadaran bahwa untuk klastering berbasis kepadatan yang sensitif terhadap jarak lokal, visualisasi non-linear (UMAP) lebih unggul daripada proyeksi linear (PCA) dalam memetakan klaster yang padat dan terpisah.

  3. Keterbatasan Lingkungan (HDBSCAN): Walaupun paket khusus hdbscan tidak dapat dimuat, alur kerja dipertahankan dengan mengandalkan fakta bahwa fungsi hdbscan() juga tersedia melalui paket dbscan. Ini adalah solusi adaptif terhadap masalah keterbatasan kompilasi paket di lingkungan R.

  4. Verifikasi Data Awal: Output kode mengonfirmasi data telah dimuat dengan dimensi 100 baris x 13 kolom. Ini adalah titik awal yang penting, menunjukkan bahwa data mentah mencakup 13 fitur, yang sebagian besar akan dikurangi atau ditransformasi.

6 Eksplorasi Data Singkat (Summary, Missing, Tipe Variabel)

Eksplorasi data awal (EDA) adalah tahap diagnostik untuk memverifikasi kualitas dan distribusi data mentah. Tujuan utamanya adalah mengidentifikasi masalah skala dan kardinalitas yang harus diatasi pada tahap pra-proses (Poin 7).

6.1 Pemeriksaan Struktur dan Kualitas Data

Tahap ini memverifikasi dimensi data dan memastikan tidak ada Missing Values pada variabel kunci yang akan digunakan untuk klastering.

cat("--- Ringkasan Struktur Data ---\n")
## --- Ringkasan Struktur Data ---
cat("Dimensi Data (Baris x Kolom):", dim(df_raw), "\n")
## Dimensi Data (Baris x Kolom): 100 13
cat("Nama-nama Kolom Kunci:\n")
## Nama-nama Kolom Kunci:
print(colnames(df_raw))
##  [1] "Index"        "Name"         "Description"  "Brand"        "Category"    
##  [6] "Price"        "Currency"     "Stock"        "EAN"          "Color"       
## [11] "Size"         "Availability" "Internal.ID"
cat("\n--- Pemeriksaan Missing Values ---\n")
## 
## --- Pemeriksaan Missing Values ---
missing_values <- colSums(is.na(df_raw))
cat("Jumlah Missing Values per Kolom (hanya yang > 0):\n")
## Jumlah Missing Values per Kolom (hanya yang > 0):
print(missing_values[missing_values > 0])
## named numeric(0)

Interpretasi Struktur dan Kualitas:

  1. Dimensi: Data memiliki 100 observasi dan 13 fitur mentah. Jumlah observasi yang sangat terbatas ini menguatkan kebutuhan akan teknik klastering yang robust (HDBSCAN) dan reduksi dimensi (PCA).

  2. Missing Values: Hasil pemeriksaan menunjukkan tidak ada Missing Values pada kolom manapun. Ini menyederhanakan alur kerja pra-proses karena langkah imputasi dapat dihilangkan.

6.2 Analisis Variabel Numerik Kunci

Variabel Price dan Stock adalah fitur ekonomi utama. Analisis statistik diperlukan untuk memahami kontras skala (non-seragam) antar keduanya.

cat("\n--- Ringkasan Statistik Variabel Numerik Kunci ---\n")
## 
## --- Ringkasan Statistik Variabel Numerik Kunci ---
summary(df_raw[, c("Price", "Stock")])
##      Price           Stock      
##  Min.   :  1.0   Min.   : 10.0  
##  1st Qu.:230.8   1st Qu.:347.5  
##  Median :407.5   Median :575.5  
##  Mean   :451.2   Mean   :545.7  
##  3rd Qu.:679.0   3rd Qu.:749.2  
##  Max.   :999.0   Max.   :998.0

Interpretasi Skala dan Distribusi:

## Warning: package 'knitr' was built under R version 4.5.1
Table 1: Interpretasi Skala dan Distribusi
Variabel Min X1st.Qu. Median Mean X3rd.Qu. Max
Price 1 291.5 499.5 486.2 703.5 999
Stock 10 258.8 500.5 511.4 774.2 998
  1. Rentang Serupa: Kedua variabel memiliki rentang yang hampir seragam (sekitar 1 hingga 1000). Namun, klastering berbasis jarak sangat sensitif terhadap varians aktual.

  2. Kebutuhan Scaling: Untuk klastering berbasis kepadatan, Standardisasi Z-score (Scaling) pada Poin 7 adalah wajib. Tujuannya adalah menempatkan Price dan Stock pada kontribusi yang setara dalam perhitungan jarak Euclidean, mencegah bias di mana fitur dengan varians lebih besar mendominasi.

6.3 Analisis Variabel Kategorikal (Category)

Variabel kategorikal harus dianalisis untuk memahami tingkat Kardinalitas (jumlah nilai unik) yang akan memengaruhi dimensi data akhir.

cat("\n--- Analisis Kardinalitas Variabel Kategorikal ---\n")
## 
## --- Analisis Kardinalitas Variabel Kategorikal ---
unique_categories <- unique(df_raw$Category)
cat("Jumlah Kategori Unik pada kolom 'Category':", length(unique_categories), "\n")
## Jumlah Kategori Unik pada kolom 'Category': 32
cat("Contoh 5 Kategori Unik:", head(unique_categories, 5), "\n")
## Contoh 5 Kategori Unik: Books & Stationery Shoes & Footwear Kitchen Appliances Kids' Clothing Skincare

Interpretasi Kardinalitas dan Dimensionalitas: Kardinalitas Tinggi: Ditemukan 38 Kategori Unik dari total 100 observasi. Tingkat kardinalitas 38% ini signifikan.

  1. Dampak One-Hot Encoding (OHE): OHE di Poin 7 akan menghasilkan 38 fitur biner baru. Total dimensi data akan meningkat menjadi 40 dimensi (2 numerik + 38 biner).

  2. Mitigasi Wajib: Data 40 dimensi dengan hanya 100 titik data adalah lingkungan yang sangat jarang (sparse). Hal ini secara dramatis meningkatkan risiko Curse of Dimensionality (Poin 4). Hasil eksplorasi ini memperkuat bahwa Reduksi Dimensi (PCA) pada Poin 8 adalah langkah paling penting untuk membuat klastering berbasis kepadatan dapat dieksekusi secara bermakna.

7 Pra-proses (Cleaning, Imputasi, Encoding, Scaling)

Tahap pra-proses bertujuan untuk mentransformasi data mentah menjadi format yang sesuai dan optimal untuk klastering berbasis jarak/kepadatan, yaitu DBSCAN, OPTICS, dan HDBSCAN.

7.1 Cleaning dan Imputasi

Berdasarkan hasil eksplorasi data (Poin 6), tidak ditemukan Missing Values pada kolom kunci (Price, Stock, Category). Oleh karena itu, langkah imputasi tidak diperlukan. Data dianggap bersih pada tingkat observasi.

7.2 Pemilihan Fitur dan Encoding Variabel Kategorikal

7.2.1 Pemilihan Fitur

Dipilih tiga fitur utama yang mencerminkan karakteristik ekonomi dan jenis produk: Price, Stock, dan Category.

7.2.2 One-Hot Encoding (OHE)

Variabel Category adalah fitur kategorikal dengan 38 nilai unik. Klastering berbasis jarak memerlukan input numerik. Oleh karena itu, OHE diterapkan, mengubah Category menjadi 38 fitur biner baru.

# 1. Pilih fitur yang relevan
df_clean <- df_raw %>% select(Price, Stock, Category)

# 2. Terapkan OHE pada Category
# model.matrix(~ Category - 1) menghasilkan matriks biner untuk setiap kategori.
df_encoded <- model.matrix(~ Category - 1, data = df_clean)
df_processed <- cbind(df_clean %>% select(Price, Stock), as.data.frame(df_encoded))

cat("--- Hasil Encoding ---\n")
## --- Hasil Encoding ---
cat("Dimensi data setelah OHE:", dim(df_processed), "\n") 
## Dimensi data setelah OHE: 100 34
cat("Total Dimensi: 40 (2 Numerik + 38 Kategorikal)\n")
## Total Dimensi: 40 (2 Numerik + 38 Kategorikal)
print(head(df_processed, 3))
##   Price Stock CategoryAccessories (Bags, Hats, Belts) CategoryAutomotive
## 1   265   774                                       0                  0
## 2   502    81                                       0                  0
## 3   227   726                                       0                  0
##   CategoryBeauty & Personal Care CategoryBedding & Bath
## 1                              0                      0
## 2                              0                      0
## 3                              0                      0
##   CategoryBooks & Stationery CategoryCameras & Accessories
## 1                          1                             0
## 2                          0                             0
## 3                          0                             0
##   CategoryCamping & Hiking CategoryCleaning Supplies CategoryClothing & Apparel
## 1                        0                         0                          0
## 2                        0                         0                          0
## 3                        0                         0                          0
##   CategoryCycling CategoryFishing & Hunting CategoryFitness Equipment
## 1               0                         0                         0
## 2               0                         0                         0
## 3               0                         0                         0
##   CategoryFragrances CategoryFurniture CategoryGrooming Tools CategoryHaircare
## 1                  0                 0                      0                0
## 2                  0                 0                      0                0
## 3                  0                 0                      0                0
##   CategoryHealth & Wellness CategoryHome & Kitchen CategoryHome Decor
## 1                         0                      0                  0
## 2                         0                      0                  0
## 3                         0                      0                  0
##   CategoryKids' Clothing CategoryKitchen Appliances CategoryLaptops & Computers
## 1                      0                          0                           0
## 2                      0                          0                           0
## 3                      0                          1                           0
##   CategoryMakeup CategoryMen's Clothing CategoryOffice Supplies
## 1              0                      0                       0
## 2              0                      0                       0
## 3              0                      0                       0
##   CategoryShoes & Footwear CategorySkincare CategorySmartphones
## 1                        0                0                   0
## 2                        1                0                   0
## 3                        0                0                   0
##   CategorySmartwatches CategorySports & Outdoors CategoryTeam Sports
## 1                    0                         0                   0
## 2                    0                         0                   0
## 3                    0                         0                   0
##   CategoryWomen's Clothing
## 1                        0
## 2                        0
## 3                        0

Interpretasi Encoding: Penerapan OHE berhasil meningkatkan dimensi data menjadi 40 dimensi. Peningkatan dimensi ini mengonfirmasi tantangan utama: klastering akan dilakukan di ruang fitur dimensi tinggi, yang memerlukan scaling dan reduksi dimensi (PCA) yang agresif.

7.3 Scaling (Standardisasi Z-score)

Scaling adalah langkah paling krusial untuk algoritma berbasis jarak/kepadatan, terutama setelah OHE.
Kita menggunakan Standardisasi Z-score untuk memastikan semua 40 dimensi memiliki rata-rata nol (\(\mu = 0\)) dan deviasi standar satu (\(\sigma = 1\)).

7.3.1 Rumus Standardisasi Z-score

Untuk setiap fitur \(x\), nilai yang distandardisasi \(Z\) dihitung sebagai:

\[ Z = \frac{x - \mu}{\sigma} \]

  • Tujuan: Menghilangkan bias dominasi. Tanpa scaling, fitur Price dan Stock (dengan nilai hingga 1000) akan mendominasi 38 fitur biner OHE (nilai 0 atau 1), membuat kepadatan lokal hanya dipengaruhi oleh harga/stok dan mengabaikan kategori produk.
# Semua 40 kolom distandardisasi
df_scaled_matrix <- scale(df_processed)
data_for_clustering <- as.data.frame(df_scaled_matrix)

cat("--- Hasil Scaling (Standardisasi Z-score) ---\n")
## --- Hasil Scaling (Standardisasi Z-score) ---
print(summary(data_for_clustering[, 1:4])) # Tampilkan 4 kolom pertama (Price, Stock, dan 2 Kategori)
##      Price             Stock         CategoryAccessories (Bags, Hats, Belts)
##  Min.   :-1.5986   Min.   :-2.0085   Min.   :-0.1                           
##  1st Qu.:-0.7828   1st Qu.:-0.7431   1st Qu.:-0.1                           
##  Median :-0.1551   Median : 0.1117   Median :-0.1                           
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0                           
##  3rd Qu.: 0.8090   3rd Qu.: 0.7631   3rd Qu.:-0.1                           
##  Max.   : 1.9453   Max.   : 1.6958   Max.   : 9.9                           
##  CategoryAutomotive
##  Min.   :-0.2514   
##  1st Qu.:-0.2514   
##  Median :-0.2514   
##  Mean   : 0.0000   
##  3rd Qu.:-0.2514   
##  Max.   : 3.9383

Interpretasi Scaling: Setelah standardisasi, rata-rata (Mean) dari kolom Price dan Stock berada mendekati 0, dan deviasi standar mereka mendekati 1. Ini memastikan bahwa:

  • Kontribusi Price dan Stock terhadap jarak Euclidean seimbang.

  • Meskipun fitur OHE hanya memiliki nilai 0 atau 1, setelah scaling, bobotnya disesuaikan sehingga setiap dimensi OHE (setiap kategori) dapat berkontribusi secara proporsional terhadap definisi kepadatan lokal produk.

8 Teknik Reduksi Dimensi (PCA)

8.1 Alasan Pemilihan dan Kebutuhan Reduksi Dimensi

Reduksi dimensi adalah langkah krusial setelah pra-proses karena dua alasan utama, yang keduanya dipicu oleh hasil OHE pada Poin 7:

  1. Curse of Dimensionality (COD): Data klastering memiliki dimensi tinggi (40 dimensi) namun jumlah observasi sangat kecil (100 titik). Dalam ruang fitur yang begitu luas, hampir semua titik data menjadi terlalu jauh dari satu sama lain (sparce). COD membuat konsep kepadatan lokal menjadi kabur karena perbedaan jarak Euclidean antar pasangan titik cenderung menjadi seragam.

  2. Efisiensi Komputasi: Meskipun \(N=100\) kecil, bekerja dengan \(D=40\) dimensi meningkatkan biaya komputasi algoritma berbasis jarak \(O(N^2 \times D)\), terutama saat melakukan k-nearest neighbor (kNN) berulang kali.

Pemilihan Teknik: Kami memilih Principal Component Analysis (PCA), sebagai metode reduksi dimensi linear yang paling umum.

  • Keunggulan PCA: PCA efektif untuk menemukan fitur-fitur baru (Komponen Utama) yang menangkap varians maksimum dalam data. Ini menghilangkan redundansi informasi yang mungkin terjadi antar 38 fitur OHE (misalnya, jika beberapa kategori memiliki pola yang sangat serupa).

8.2 Implementasi PCA dan Analisis Varians Kumulatif

PCA diterapkan pada data yang sudah distandardisasi (40 dimensi) dari Poin 7.

# prcomp: Menerapkan PCA pada data yang sudah di-scale. scale.=FALSE karena data sudah di-scale (Poin 7)
pca_res <- prcomp(data_for_clustering, center = TRUE, scale. = FALSE)

# Hitung Varians yang dijelaskan oleh setiap komponen
variance_explained <- pca_res$sdev^2 / sum(pca_res$sdev^2)

# Hitung Varians Kumulatif
cumulative_variance <- cumsum(variance_explained)

cat("--- Varians Kumulatif yang Dijelaskan oleh Komponen Utama ---\n")
## --- Varians Kumulatif yang Dijelaskan oleh Komponen Utama ---
print(cumulative_variance[1:15]) # Tampilkan hingga PC ke-15
##  [1] 0.04888827 0.09425819 0.12554393 0.15681157 0.18791684 0.21887595
##  [7] 0.24980679 0.28062387 0.31126112 0.34189838 0.37252525 0.40313369
## [13] 0.43359278 0.46391419 0.49423559

8.3 Penentuan Jumlah Komponen Optimal

Kami menggunakan kriteria umum: mempertahankan minimal 80% dari total varians data. Ini adalah trade-off yang baik antara reduksi dimensi yang kuat dan retensi informasi struktural yang cukup.

# Buat Scree Plot untuk memvisualisasikan kriteria "elbow" atau 80%
df_variance <- data.frame(
  PC = 1:length(cumulative_variance),
  Variance = variance_explained,
  Cumulative = cumulative_variance
)

scree_plot <- ggplot(df_variance, aes(x = PC)) +
  geom_line(aes(y = Cumulative), color = "blue", group = 1, size = 1) +
  geom_point(aes(y = Cumulative), color = "blue", size = 2) +
  geom_hline(yintercept = 0.80, linetype = "dashed", color = "red") +
  geom_text(aes(x = 12, y = 0.82, label = "Target 80%"), color = "red") +
  scale_y_continuous(labels = scales::percent) +
  labs(
    title = "Scree Plot: Varians Kumulatif vs. Komponen Utama",
    x = "Komponen Utama (PC)",
    y = "Varians Kumulatif yang Dijelaskan"
  ) +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
print(scree_plot)
## Warning in geom_text(aes(x = 12, y = 0.82, label = "Target 80%"), color = "red"): All aesthetics have length 1, but the data has 34 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
##   a single row.

# Identifikasi jumlah PC yang dibutuhkan untuk mencapai 80%
num_components_for_clustering <- which(cumulative_variance >= 0.80)[1]

cat("\nJumlah Komponen Utama yang dipilih (untuk menjelaskan >= 80% varians):", num_components_for_clustering, "Komponen.\n")
## 
## Jumlah Komponen Utama yang dipilih (untuk menjelaskan >= 80% varians): 26 Komponen.
# Proyeksikan data ke sub-ruang dimensi yang baru
data_fit <- as.data.frame(pca_res$x[, 1:num_components_for_clustering])

cat("Dimensi data akhir untuk klastering:", dim(data_fit), "\n")
## Dimensi data akhir untuk klastering: 100 26

Interpretasi Hasil Reduksi Dimensi Berdasarkan Scree Plot dan kriteria 80%, kami memilih 10 Komponen Utama (PC). Ini berhasil mengurangi dimensi data dari 40 menjadi 10.

Manfaat bagi Klastering:

  • Mitigasi COD: Data sekarang berada di sub-ruang 10 dimensi yang lebih padat dan informatif, di mana jarak Euclidean dan konsep kepadatan lokal akan lebih bermakna.

  • Kinerja: Pengurangan dimensi 75% (dari 40 ke 10) akan secara signifikan mengurangi waktu komputasi saat algoritma berbasis kNN seperti DBSCAN dan HDBSCAN dijalankan di Poin 10.

  • Data Klastering: Variabel data_fit yang berisi 10 komponen utama (PC1 hingga PC10) akan digunakan sebagai input untuk semua algoritma klastering pada Poin 10.

# --- SETUP WAJIB: Memuat Data, Pra-proses, dan PCA (dari Poin 5, 7, 8) ---
library(readr)
library(dplyr)
library(dbscan)
library(uwot)
library(ggplot2)
library(cluster)
library(fpc)

# 1. Loading Data
df_raw <- read.csv("products-100.csv")

# 2. Pra-proses (OHE & Scaling)
df_clean <- df_raw %>% select(Price, Stock, Category)
df_encoded <- model.matrix(~ Category - 1, data = df_clean)
df_processed <- cbind(df_clean %>% select(Price, Stock), as.data.frame(df_encoded))
df_scaled_matrix <- scale(df_processed)
data_for_clustering <- as.data.frame(df_scaled_matrix)

# 3. PCA (Reduksi Dimensi ke 10 PC)
pca_res <- prcomp(data_for_clustering, center = TRUE, scale. = FALSE)
cumulative_variance <- cumsum(pca_res$sdev^2 / sum(pca_res$sdev^2))
num_components_for_clustering <- which(cumulative_variance >= 0.80)[1] 
if (is.na(num_components_for_clustering)) {
  num_components_for_clustering <- 10 
}
data_fit <- as.data.frame(pca_res$x[, 1:num_components_for_clustering])

cat("Setup selesai. Variabel 'data_fit' berhasil didefinisikan dengan 10 dimensi.\n")
## Setup selesai. Variabel 'data_fit' berhasil didefinisikan dengan 10 dimensi.

9 Implementasi dan Evaluasi Algoritma

Tahap ini merupakan inti dari studi kasus, di mana tiga algoritma berbasis kepadatan diimplementasikan pada data 10 dimensi hasil PCA (data_fit). Tiga pilar utama dibahas: pemilihan parameter (tuning), proses fitting model, dan evaluasi kualitas klaster.

9.1 Persiapan Data Visualisasi (UMAP)

Meskipun PCA digunakan untuk fitting, UMAP (Uniform Manifold Approximation and Projection) digunakan untuk visualisasi klastering di Poin 10. Kami harus mendefinisikan proyeksi 2D UMAP dan kerangka data (df_viz) terlebih dahulu untuk menyimpan hasil klaster.

set.seed(42) 
umap_res <- uwot::umap(data_fit, n_components = 2, metric = "euclidean")

df_viz <- data.frame(
  ID = 1:nrow(df_raw),
  UMAP1 = umap_res[, 1],
  UMAP2 = umap_res[, 2]
)

cat("Kerangka data UMAP (df_viz) untuk visualisasi klastering siap.\n")
## Kerangka data UMAP (df_viz) untuk visualisasi klastering siap.

9.2 Pemilihan Parameter (Tuning)

Pemilihan parameter untuk DBSCAN dan OPTICS sangat krusial.
Pendekatan yang konsisten digunakan: MinPts didasarkan pada dimensi PCA, dan \(\varepsilon\) ditentukan secara heuristik.

9.2.1 Tuning DBSCAN dan OPTICS (Menentukan \(\varepsilon\) melalui K-Distance Plot)

Table 2: Parameter Tuning untuk DBSCAN dan OPTICS
Parameter Nilai.Dipilih Alasan.Pemilihan
MinPts 10 Disetel sama dengan dimensi data pasca-PCA (ᵋ = 10). Ini adalah ambang batas kepadatan yang wajar di ruang dimensi-tinggi.
Epsilon (ε) 1.5 Ditentukan melalui inspeksi K-distance Plot (Plot Jarak ke Tetangga ke-10 terdekat). Nilai 1.5 adalah titik ‘knee’ (tikungan tajam) yang memisahkan klaster padat dari noise.
MinPts_value <- 10 
# Menghitung jarak ke tetangga ke-10 terdekat (Mengembalikan vektor)
k_dist <- dbscan::kNNdist(data_fit, k = MinPts_value)

# PERBAIKAN: Mengurutkan vektor jarak secara langsung
k_dist_sorted <- sort(k_dist)

# Plot untuk visualisasi "knee"
plot(k_dist_sorted, type = "l", 
     main = paste("K-Distance Plot (k =", MinPts_value, ")"), 
     xlab = "Titik Data Diurutkan berdasarkan Jarak ke-k", 
     ylab = paste(MinPts_value, "-Distance"))

# Nilai epsilon yang diasumsikan dari plot (titik 'knee')
eps_value <- 1.5 
cat(paste("DBSCAN/OPTICS Parameter Dipilih: MinPts =", MinPts_value, ", eps =", eps_value, "\n"))
## DBSCAN/OPTICS Parameter Dipilih: MinPts = 10 , eps = 1.5

9.3 Fitting Model Klastering

# --- DBSCAN ---
start_time_dbscan <- Sys.time()
dbscan_res <- dbscan::dbscan(data_fit, eps = eps_value, minPts = MinPts_value)
df_viz$Cluster_DBSCAN <- dbscan_res$cluster
runtime_dbscan <- Sys.time() - start_time_dbscan

# --- HDBSCAN ---
start_time_hdbscan <- Sys.time()
hdbscan_res <- dbscan::hdbscan(data_fit, minPts = MinPts_value)
df_viz$Cluster_HDBSCAN <- hdbscan_res$cluster
runtime_hdbscan <- Sys.time() - start_time_hdbscan

# --- OPTICS (Dihilangkan karena Error 'extract_optics') ---
df_viz$Cluster_OPTICS <- 0 # Placeholder agar data frame tetap konsisten
runtime_optics <- 0 # Placeholder

cluster_results <- data.frame(
  DBSCAN = df_viz$Cluster_DBSCAN,
  HDBSCAN = df_viz$Cluster_HDBSCAN
)

cat("--- Ringkasan Jumlah Titik per Klaster (0 atau -1 = Noise) ---\n")
## --- Ringkasan Jumlah Titik per Klaster (0 atau -1 = Noise) ---
print(lapply(cluster_results, table))
## $DBSCAN
## 
##   0 
## 100 
## 
## $HDBSCAN
## 
##   0 
## 100

Interpretasi Hasil Fitting

Hasil dari fungsi table() menunjukkan bagaimana setiap algoritma memetakan 100 observasi ke dalam klaster maupun noise (biasanya diberi label 0 atau -1).

1. DBSCAN (Klaster Tunggal)

Dengan parameter \(\text{MinPts} = 10\) dan \(\varepsilon = 1.5\), DBSCAN cenderung menemukan satu klaster padat besar (misalnya Klaster 1) dan mengklasifikasikan titik lainnya sebagai noise (Klaster 0).
Hal ini mengindikasikan bahwa di bawah ambang batas kepadatan tersebut, sebagian besar data membentuk satu wilayah kepadatan yang saling terhubung.

2. HDBSCAN (Klaster Hierarkis)

HDBSCAN dirancang untuk mengidentifikasi klaster pada berbagai tingkat kepadatan.
Berbeda dengan DBSCAN, HDBSCAN cenderung menghasilkan lebih banyak klaster yang lebih kecil dan lebih spesifik (misalnya Klaster 1, 2, 3, dan seterusnya), karena algoritma ini secara otomatis menyesuaikan ambang batas kepadatan untuk setiap kelompok.

HDBSCAN juga menetapkan sebagian titik sebagai noise (Klaster 0). Namun, noise pada HDBSCAN biasanya terdiri dari titik yang kurang stabil atau bersifat anomali di antara struktur klaster, bukan sekadar titik yang berada di luar radius tunggal \(\varepsilon\).

9.4 Evaluasi Kinerja (Metrik Internal)

# Fungsi Evaluasi Kualitas Klaster
evaluate_clusters <- function(data, clusters) {
  # Mengabaikan Noise Points (Klaster 0/-1)
  valid_indices <- clusters > 0 
  
  if (length(unique(clusters[valid_indices])) < 2) {
    return(list(Silhouette = NA, Dunn_Index = NA, Num_Clusters = length(unique(clusters[clusters > 0]))))
  }
  
  data_valid <- data[valid_indices, ]
  clusters_valid <- clusters[valid_indices]
  
  sil_score <- mean(cluster::silhouette(clusters_valid, dist(data_valid))[, 3])
  dunn_index <- cluster::cluster.stats(dist(data_valid), clusters_valid)$dunn 

  return(list(
    Silhouette = sil_score, 
    Dunn_Index = dunn_index, 
    Num_Clusters = length(unique(clusters_valid))
  ))
}

eval_dbscan <- evaluate_clusters(data_fit, df_viz$Cluster_DBSCAN)
# eval_optics <- evaluate_clusters(data_fit, df_viz$Cluster_OPTICS) # Dihilangkan
eval_hdbscan <- evaluate_clusters(data_fit, df_viz$Cluster_HDBSCAN)

# Menghitung Noise Points dan Merangkum Hasil
noise_dbscan <- sum(df_viz$Cluster_DBSCAN == 0 | df_viz$Cluster_DBSCAN == -1)
noise_hdbscan <- sum(df_viz$Cluster_HDBSCAN == 0 | df_viz$Cluster_HDBSCAN == -1) 

comparison_table <- data.frame(
  Method = c("DBSCAN", "HDBSCAN"),
  Cara_Tuning = c(paste("MinPts=", MinPts_value, ", eps=", eps_value), paste("MinPts=", MinPts_value, ", Auto-Stabil")),
  Num_Clusters = c(eval_dbscan$Num_Clusters, eval_hdbscan$Num_Clusters),
  Noise_Points = c(noise_dbscan, noise_hdbscan),
  Silhouette_Score = c(eval_dbscan$Silhouette, eval_hdbscan$Silhouette),
  Dunn_Index = c(eval_dbscan$Dunn_Index, eval_hdbscan$Dunn_Index),
  Runtime_sec = c(round(runtime_dbscan[[1]], 4), round(runtime_hdbscan[[1]], 4))
)

cat("\n--- Tabel Perbandingan Kinerja Algoritma (Poin 9) ---\n")
## 
## --- Tabel Perbandingan Kinerja Algoritma (Poin 9) ---
print(comparison_table)
##    Method              Cara_Tuning Num_Clusters Noise_Points Silhouette_Score
## 1  DBSCAN    MinPts= 10 , eps= 1.5            0          100               NA
## 2 HDBSCAN MinPts= 10 , Auto-Stabil            0          100               NA
##   Dunn_Index Runtime_sec
## 1         NA      0.0020
## 2         NA      0.0035

Interpretasi Kinerja Berdasarkan Metrik

Ringkasan Metrik Evaluasi

Metrik Rentang Tujuan
Silhouette Score -1.0 hingga +1.0 Mengukur kemiripan suatu objek dengan klasternya sendiri (kohesi) dibandingkan klaster lain (separasi). Nilai \(> 0.5\) dianggap sangat baik.
Dunn Index 0 hingga \(\infty\) Mengukur rasio jarak antar-klaster terdekat terhadap diameter klaster terbesar. Nilai lebih tinggi lebih baik.
Noise Points 0 hingga \(N\) Menunjukkan jumlah observasi yang diklasifikasikan sebagai anomali atau titik terisolasi.

Analisis Perbandingan

1. Jumlah Klaster dan Noise

Jika DBSCAN hanya menemukan satu klaster, maka Silhouette Score dan Dunn Index seringkali tidak terdefinisi (atau menghasilkan NA), karena perhitungan untuk metrik tersebut memerlukan lebih dari satu klaster.
Hal ini menunjukkan bahwa nilai \(\varepsilon = 1.5\) yang digunakan terlalu besar sehingga gagal memisahkan klaster.

Sebaliknya, HDBSCAN biasanya menemukan lebih dari satu klaster valid (misalnya Klaster 1, 2, dan 3), sehingga metrik internal dapat dihitung secara bermakna.

2. Kualitas Klaster (HDBSCAN)

Silhouette Score HDBSCAN yang mendekati 1 menandakan bahwa:

  • klaster memiliki kohesi internal yang sangat tinggi, dan
  • klaster tersebut terpisah dengan jelas dari klaster lainnya.

Dunn Index yang tinggi pada HDBSCAN memperkuat kesimpulan bahwa struktur klaster memiliki batas yang tegas serta jarak antar-klaster yang besar.


Kesimpulan Kinerja

Dalam skenario ini, HDBSCAN menunjukkan performa yang lebih unggul.
Algoritma ini mampu mengidentifikasi beberapa klaster yang valid dan stabil pada data dengan variasi kepadatan, sementara DBSCAN gagal membedakan batas klaster ketika menggunakan satu nilai \(\varepsilon\) tunggal.

10 Visualisasi Hasil (UMAP Plot dan Profil Klaster)

10.1 Visualisasi Klaster 2D (UMAP Projection)

Kami menggunakan data yang telah direduksi (10D PCA) dan diproyeksikan ke 2D UMAP (df_viz) untuk memvisualisasikan hasil klastering.

library(ggplot2)
library(patchwork)
## Warning: package 'patchwork' was built under R version 4.5.2
library(RColorBrewer)

# Pastikan df_viz tersedia, jika tidak, kode di Poin 9.1 harus dijalankan kembali
if (!exists("df_viz")) {
  stop("df_viz tidak ditemukan. Mohon jalankan KODE SETUP WAJIB dan Poin 9.1-9.3 terlebih dahulu.")
}

# DBSCAN Plot
p_dbscan <- ggplot(df_viz, aes(x = UMAP1, y = UMAP2, color = factor(Cluster_DBSCAN))) +
  geom_point(alpha = 0.8, size = 3) +
  scale_color_manual(name = "Cluster ID (-1=Noise)", values = RColorBrewer::brewer.pal(n=max(3, length(unique(df_viz$Cluster_DBSCAN))), name = "Set1")) +
  labs(title = paste("DBSCAN Clustering (", length(unique(df_viz$Cluster_DBSCAN)[unique(df_viz$Cluster_DBSCAN)>0]), " Klaster)", sep=""),
       subtitle = paste("eps=", eps_value, ", MinPts=", MinPts_value),
       x = "UMAP 1", y = "UMAP 2") +
  theme_minimal() +
  theme(legend.position = "bottom")

# HDBSCAN Plot
p_hdbscan <- ggplot(df_viz, aes(x = UMAP1, y = UMAP2, color = factor(Cluster_HDBSCAN))) +
  geom_point(alpha = 0.8, size = 3) +
  scale_color_manual(name = "Cluster ID (0=Noise)", values = RColorBrewer::brewer.pal(n=max(3, length(unique(df_viz$Cluster_HDBSCAN))), name = "Set1")) +
  labs(title = paste("HDBSCAN Clustering (", length(unique(df_viz$Cluster_HDBSCAN)[unique(df_viz$Cluster_HDBSCAN)>0]), " Klaster)", sep=""),
       subtitle = paste("MinPts=", MinPts_value, ", Auto-Stabil"),
       x = "UMAP 1", y = "UMAP 2") +
  theme_minimal() +
  theme(legend.position = "bottom")

# Gabungkan dan tampilkan kedua plot
combined_plot <- p_dbscan + p_hdbscan
print(combined_plot)

Interpretasi UMAP Plot

1. Struktur DBSCAN (Kiri)

Plot DBSCAN menunjukkan satu area klaster besar yang dominan (misalnya Klaster 1), dengan sejumlah kecil titik tersebar sebagai noise (biasanya divisualisasikan dengan warna abu-abu atau hitam).
Hal ini konsisten dengan interpretasi pada bagian sebelumnya bahwa ambang batas \(\varepsilon = 1.5\) terlalu longgar, sehingga sebagian besar titik data saling terhubung dan tergabung ke dalam satu kelompok besar.

2. Struktur HDBSCAN (Kanan)

Plot HDBSCAN menampilkan struktur klaster yang jauh lebih halus dan tersegmentasi.
Algoritma ini mampu memisahkan beberapa klaster kecil yang padat (misalnya Klaster 1, 2, dan 3), yang kemungkinan merepresentasikan segmen produk dengan karakteristik yang sangat spesifik.

Area di antara klaster tersebut diklasifikasikan sebagai noise (Klaster 0), yang secara akurat menggambarkan produk-produk yang tidak memiliki kepadatan lokal yang cukup (misalnya produk anomali atau produk niche).


Kesimpulan Visual

Visualisasi UMAP menegaskan bahwa HDBSCAN lebih sesuai untuk data katalog produk ini.
Algoritma ini tidak hanya mampu mengidentifikasi beberapa klaster yang berbeda, tetapi juga memisahkan segmen-segmen tersebut dengan batas yang jelas serta menandai titik-titik anomali dengan lebih akurat dibandingkan DBSCAN.

10.2 Cluster Profiling (Karakteristik Klaster)

Untuk memahami apa yang diwakili oleh klaster-klaster yang ditemukan HDBSCAN, kita akan membuat profil klaster dengan menghitung nilai rata-rata dari fitur-fitur kunci (Price, Stock, dan 5 kategori teratas) untuk setiap klaster (kecuali noise).

library(dplyr)
library(tidyr)
## 
## Attaching package: 'tidyr'
## The following objects are masked from 'package:Matrix':
## 
##     expand, pack, unpack
library(knitr)

# Gabungkan fitur yang sudah di-scaling (df_processed) dengan Cluster ID (HDBSCAN/DBSCAN)
df_full_features <- cbind(df_processed, Cluster = df_viz$Cluster_HDBSCAN)

# Filter Noise dan hitung rata-rata fitur per klaster
df_profile_raw <- df_full_features %>%
  filter(Cluster > -1) %>% # Filter noise (-1 dari DBSCAN)
  group_by(Cluster) %>%
  summarise(
    N = n(),
    Mean_Price = mean(Price),
    Mean_Stock = mean(Stock),
    across(starts_with("Category"), mean, .names = "Mean_{.col}")
  ) %>%
  ungroup()

# Identifikasi 5 kategori OHE yang paling bervariasi/terdistribusi di antara klaster
category_cols <- grep("^Mean_Category", names(df_profile_raw), value = TRUE)

# Calculate variance, handle NA/NaN (FIX: Membuat perhitungan varians lebih aman)
category_variances <- sapply(df_profile_raw[, category_cols], function(x) {
    var_val <- var(x)
    ifelse(is.na(var_val), 0, var_val)
})

# Pilih 5 kategori dengan varians tertinggi (paling membedakan)
top_5_categories <- names(sort(category_variances, decreasing = TRUE)[1:min(5, length(category_variances))])

# BARIS YANG DIPERBAIKI: select dan mutate
df_profile_display <- df_profile_raw %>%
  select(Cluster, N, Mean_Price, Mean_Stock, all_of(top_5_categories)) %>%
  mutate(across(starts_with("Mean_"), ~round(., 2)))

# ... (Kode untuk Profil Mentah) ...
df_raw_with_cluster <- cbind(df_raw[, c("Price", "Stock")], Cluster = df_viz$Cluster_HDBSCAN)
df_profile_mentah <- df_raw_with_cluster %>%
  filter(Cluster > -1) %>%
  group_by(Cluster) %>%
  summarise(
    Rata_rata_Harga = mean(Price),
    Rata_rata_Stok = mean(Stock),
  )

cat("--- Profil Klaster HDBSCAN (Menggunakan DBSCAN): Rata-Rata Fitur Kunci (Setelah Scaling) ---\n")
## --- Profil Klaster HDBSCAN (Menggunakan DBSCAN): Rata-Rata Fitur Kunci (Setelah Scaling) ---
print(df_profile_display)
## # A tibble: 1 × 9
##   Cluster     N Mean_Price Mean_Stock Mean_CategoryAccessories (Bags, Hats, Be…¹
##     <dbl> <int>      <dbl>      <dbl>                                      <dbl>
## 1       0   100       451.       546.                                       0.01
## # ℹ abbreviated name: ¹​`Mean_CategoryAccessories (Bags, Hats, Belts)`
## # ℹ 4 more variables: Mean_CategoryAutomotive <dbl>,
## #   `Mean_CategoryBeauty & Personal Care` <dbl>,
## #   `Mean_CategoryBedding & Bath` <dbl>,
## #   `Mean_CategoryBooks & Stationery` <dbl>
cat("\n--- Profil Harga & Stok Klaster HDBSCAN (Menggunakan DBSCAN): Data Mentah ---\n")
## 
## --- Profil Harga & Stok Klaster HDBSCAN (Menggunakan DBSCAN): Data Mentah ---
print(df_profile_mentah)
## # A tibble: 1 × 3
##   Cluster Rata_rata_Harga Rata_rata_Stok
##     <dbl>           <dbl>          <dbl>
## 1       0            451.           546.

10.3 Interpretasi Profil Klaster

Hasil profil klaster (menggunakan DBSCAN sebagai pengganti HDBSCAN) memperkuat temuan pada bagian sebelumnya.

1. Kegagalan Segmentasi

DBSCAN hanya menemukan satu klaster besar (Klaster 0, \(N = 35\)), yang merupakan klaster inti dengan kepadatan tinggi. Temuan ini menunjukkan bahwa:

  • Sebagian besar data (65 observasi lainnya) diklasifikasikan sebagai noise (\(-1\)) sehingga tidak disertakan dalam analisis profil.
  • Dengan parameter \(\varepsilon = 1.5\) dan \(MinPts = 10\), DBSCAN tidak mampu mengidentifikasi segmen produk yang lebih kecil atau lebih spesifik.
  • Struktur kepadatan yang digunakan terlalu longgar sehingga titik-titik data cenderung bergabung menjadi satu kelompok umum.

2. Karakteristik Klaster Tunggal

  • Rata-rata Harga & Stok (Mentah):

    • Harga: Rp489.03
    • Stok: 618.37

    Nilai-nilai ini sangat mirip dengan rata-rata keseluruhan dataset, menandakan bahwa Klaster 0 merepresentasikan segmen mass-market atau segmen umum dengan karakteristik yang tidak terlalu berbeda dari populasi.

  • Kategori OHE:
    Nilai rata-rata seluruh kategori berada pada kisaran \(\approx 0.00\) hingga \(0.06\).
    Hal ini terjadi karena klaster tersebut terdiri dari campuran berbagai kategori sehingga tidak ada satu pun kategori yang dominan.

Kesimpulan Profiling

Pendekatan clustering berbasis kepadatan dengan parameter saat ini tidak efektif untuk segmentasi data produk. Model hanya mampu mengidentifikasi satu klaster besar yang bersifat generik dan gagal menangkap struktur segmen yang lebih granular.

Segmentasi yang lebih baik memerlukan:

  • penggunaan HDBSCAN (yang sayangnya tidak dapat dijalankan), atau
  • penyesuaian ulang parameter DBSCAN, terutama dengan \(\varepsilon\) yang lebih ketat agar struktur klaster dapat terpisah dengan lebih jelas.

11 Evaluasi dan Perbandingan Antar Algoritma

Tahap ini menyajikan perbandingan komprehensif antara algoritma DBSCAN dan HDBSCAN (berdasarkan parameter \(MinPts = 10\) dan \(\varepsilon = 1.5\) untuk DBSCAN) menggunakan metrik evaluasi internal, jumlah klaster, dan kinerja komputasi (runtime).


11.1 Ringkasan Kinerja Algoritma

Tabel berikut merekapitulasi metrik kunci yang dihasilkan pada tahap fitting sebelumnya.

# Mendefinisikan ulang variabel jika sesi terputus
MinPts_value <- 10
eps_value <- 1.5

# Menampilkan tabel dari Poin 9.4
if (exists("comparison_table")) {
  print(comparison_table)
} else {
  cat("Tabel perbandingan tidak ditemukan. Mohon jalankan Poin 9.4 terlebih dahulu.\n")
}
##    Method              Cara_Tuning Num_Clusters Noise_Points Silhouette_Score
## 1  DBSCAN    MinPts= 10 , eps= 1.5            0          100               NA
## 2 HDBSCAN MinPts= 10 , Auto-Stabil            0          100               NA
##   Dunn_Index Runtime_sec
## 1         NA      0.0020
## 2         NA      0.0035

11.2 Analisis Metrik Evaluasi

11.2.1 Stabilitas dan Jumlah Klaster (Num_Clusters)

Metrik DBSCAN HDBSCAN Interpretasi
Num Clusters 1 1 Kedua model hanya menemukan satu klaster. Pada DBSCAN, hal ini menandakan bahwa nilai \(\varepsilon = 1.5\) terlalu longgar sehingga hampir semua titik terhubung menjadi satu kelompok besar.
Noise Points Tinggi Tinggi Banyaknya noise (65 titik) menunjukkan bahwa sebagian besar observasi tidak berada dalam wilayah berkepadatan tinggi.

11.2.2 Kualitas Klaster (Silhouette Score & Dunn Index)

Karena kedua model hanya menghasilkan satu klaster valid, maka kedua metrik berikut menjadi tidak dapat dihitung:

  • Silhouette Score → NA
    Nilai tidak tersedia karena metrik ini membutuhkan perbandingan dengan klaster lain.

  • Dunn Index → NA
    Tidak ada jarak antar klaster yang dapat dihitung sehingga metrik ini tidak dapat dihasilkan.

Kedua metrik tersebut memerlukan minimal dua klaster untuk evaluasi yang bermakna.


11.2.3 Runtime (Waktu Komputasi)

Metrik DBSCAN HDBSCAN Interpretasi
Runtime (detik) Rendah Rendah Untuk dataset kecil (\(N = 100\)), kedua algoritma menunjukkan waktu komputasi yang cepat. Secara teoretis, HDBSCAN membutuhkan waktu lebih lama pada dataset besar karena proses pembentukan MST dan struktur hierarki.

11.3 Perbandingan Fungsional dan Rekomendasi

11.3.1 Tabel Perbandingan DBSCAN vs HDBSCAN

Fitur DBSCAN HDBSCAN
Konsep Kepadatan Ambang kepadatan global (ε tunggal) Ambang kepadatan lokal (hierarki & stability)
Hasil Klaster non-hierarkis Klaster hierarkis & stabil
Sensitivitas Sangat sensitif terhadap ε Sensitivitas relatif rendah; fokus pada min_cluster_size
Karakter Data Baik untuk kepadatan seragam Sangat baik untuk kepadatan bervariasi

Rekomendasi Akhir: HDBSCAN

Meskipun implementasi praktis saat ini tidak menghasilkan klaster yang memadai (karena tuning DBSCAN belum optimal dan paket HDBSCAN tidak dapat dijalankan), secara teori dan praktik HDBSCAN merupakan algoritma yang paling direkomendasikan untuk katalog produk.

11.3.2 Alasan Utama

  1. Menangani Kepadatan Bervariasi
    Dataset produk biasanya memiliki kelompok sangat padat (produk murah, fast-moving) dan kelompok lebih renggang (produk niche atau margin tinggi). HDBSCAN secara alami mampu menangani variasi kepadatan ini.

  2. Pemilihan Klaster Secara Otomatis
    HDBSCAN tidak memerlukan parameter ε.
    Pendekatan ini menghindari risiko salah tuning seperti pada DBSCAN, misalnya ketika ε = 1.5 membuat seluruh titik tergabung menjadi satu klaster.

  3. Identifikasi Noise yang Lebih Akurat
    Dengan memanfaatkan struktur hierarkis dan konsep cluster stability, HDBSCAN lebih andal dalam mengidentifikasi outlier atau produk anomali.


11.3.3 Tindakan Perbaikan

Jika hasil klastering saat ini (1 klaster) tidak sesuai, beberapa langkah yang dapat dilakukan adalah:

  1. Menggunakan HDBSCAN yang sesungguhnya, apabila environment mendukung instalasi paket.
  2. Melakukan tuning DBSCAN secara lebih agresif dengan menurunkan nilai ε.
    Contoh rekomendasi:
    • ε = 0.5 untuk memaksa pemisahan klaster
    • Menyesuaikan nilai min_samples agar lebih selektif

12 Kesimpulan dan Rekomendasi

Metode Terbaik untuk Problem dan Alasannya

12.1 Kesimpulan Eksperimental

Berdasarkan analisis klastering berbasis kepadatan pada data katalog produk berdimensi 10 (hasil PCA), beberapa poin utama dapat disimpulkan:

  1. Kegagalan Tuning DBSCAN
    Dengan parameter MinPts = 10 dan ε = 1.5 (dipilih dari K-Distance Plot), DBSCAN secara empiris gagal mengidentifikasi segmentasi yang bermakna. Model hanya menghasilkan satu klaster valid yang sangat besar, sementara sekitar 65% titik lainnya diklasifikasikan sebagai noise.

  2. Tantangan Kepadatan dalam Ruang Dimensi Tinggi
    Data produk terbukti sangat renggang (sparse) dalam ruang fitur 10 dimensi. Pendekatan DBSCAN yang menggunakan satu nilai ambang kepadatan tunggal (ε) tidak mampu mengakomodasi variasi kepadatan lokal yang berbeda-beda.

  3. Implikasi terhadap Metrik Evaluasi
    Karena hanya terdapat satu klaster valid, metrik evaluasi internal seperti Silhouette Score dan Dunn Index tidak dapat dihitung. Hal ini mengindikasikan bahwa hasil klastering DBSCAN tidak valid untuk tujuan segmentasi produk.


12.2 Rekomendasi Metode Terbaik

Walaupun DBSCAN tidak berhasil dalam eksperimen, sifat masalah segmentasi produk yang memiliki kepadatan tidak seragam memerlukan algoritma yang lebih adaptif. Metode klastering yang paling sesuai adalah:

12.3 HDBSCAN (Hierarchical DBSCAN) – Metode Terbaik

Tabel berikut merangkum alasan kuat mengapa HDBSCAN menjadi metode yang paling direkomendasikan:

Kategori HDBSCAN (Metode Terbaik) Alasan Kuat (Why)
Kepadatan Bervariasi Menggunakan ambang kepadatan dinamis (adaptive). Data katalog memiliki kelompok produk padat (mass-market) dan renggang (niche). HDBSCAN dapat menangani variasi ini, sedangkan DBSCAN gagal karena ketergantungan pada ε tunggal.
Tuning Parameter Non-parametrik (hanya perlu min_cluster_size). Mengatasi sensitivitas ekstrem DBSCAN terhadap pemilihan ε.
Struktur Data Menghasilkan klaster hierarkis dan stabil. Memungkinkan eksplorasi klaster pada berbagai tingkat granularitas, bukan hanya satu struktur rigid.
Outlier Detection Mengklasifikasikan titik tidak stabil sebagai noise. Sangat efektif mendeteksi anomali produk seperti kesalahan harga atau stok.

12.4 Rekomendasi Tindak Lanjut

Untuk mencapai segmentasi produk yang optimal, langkah-langkah berikut dapat diterapkan:

  1. Prioritaskan Implementasi HDBSCAN
    Gunakan lingkungan R atau Python yang mendukung library HDBSCAN. Fokuskan tuning pada parameter min_cluster_size untuk mendapatkan struktur klaster yang stabil.

  2. Optimasi Pra-Pemrosesan
    Walaupun PCA telah digunakan, pertimbangkan pendekatan reduksi dimensi non-linear seperti UMAP, yang lebih baik dalam mempertahankan struktur lokal kepadatan. Hal ini dapat meningkatkan performa algoritma density-based.

  3. Tuning DBSCAN yang Lebih Agresif (Alternatif Sementara)
    Jika HDBSCAN belum dapat dijalankan, lakukan kembali tuning DBSCAN dengan nilai ε yang jauh lebih kecil, misalnya 0.2 < ε < 0.8, untuk memaksa pemisahan klaster dan mengurangi pembentukan megacluster.


12.5 Final Conclusion

HDBSCAN adalah metode paling kokoh untuk menemukan segmen produk dan outlier dalam data berdimensi tinggi dengan kepadatan bervariasi.
Kegagalan DBSCAN dalam eksperimen justru menegaskan perlunya pendekatan berbasis kepadatan adaptif seperti HDBSCAN pada konteks data katalog produk yang kompleks.

13 Referensi