Tugas Individu
Analisis Komparatif Metode Clustering Hierarki (Agglomerative & Divisive) pada Karakteristik Audio Musik Spotify
Pendahuluan
Latar Belakang
Dalam era digital saat ini, platform streaming musik seperti Spotify telah merevolusi cara masyarakat mengonsumsi hiburan. Dengan perpustakaan yang memuat jutaan lagu, tantangan utama dalam Music Information Retrieval (MIR) adalah bagaimana mengelola dan merekomendasikan lagu yang tepat kepada pengguna. Pengelompokan lagu secara manual berdasarkan genre seringkali bersifat subjektif dan tidak cukup granular untuk menangkap nuansa karakteristik audio yang sebenarnya.
Sebuah lagu pop, misalnya, bisa memiliki karakteristik yang sangat berbeda; ada yang bertenaga (high energy) cocok untuk olahraga, dan ada yang melankolis (high valence) cocok untuk relaksasi. Oleh karena itu, pendekatan berbasis data (data-driven) diperlukan untuk mengelompokkan lagu berdasarkan fitur akustiknya secara objektif.
Deskripsi Data
Studi ini menggunakan dataset Spotify Top 10s, yang berisi daftar lagu-lagu terpopuler di Spotify global dari tahun 2010 hingga 2019. Dataset ini mencakup variabel numerik yang merepresentasikan karakteristik audio, seperti Beats Per Minute (BPM), Energy, Danceability, Loudness (dB), Liveness, Valence, Duration, Acousticness, dan Speechiness.
Rumusan Masalah
Permasalahan yang diangkat dalam laporan ini adalah:
Bagaimana karakteristik pola pengelompokan lagu-lagu populer dekade 2010-2019 berdasarkan fitur audionya?
Bagaimana perbandingan kinerja algoritma Hierarchical Clustering pendekatan Agglomerative (dengan berbagai metode Linkage) dibandingkan dengan pendekatan Divisive?
Metode manakah yang memberikan hasil segmentasi paling optimal dan dapat diinterpretasikan dengan baik?
Tujuan Penulisan
Laporan ini disusun untuk memenuhi tugas besar mata kuliah Analisis Data Eksploratif dan Pembelajaran Mesin Tak Terawasi (Unsupervised Learning). Tujuan spesifik dari analisis ini adalah:
Penerapan Algoritma: Mengimplementasikan algoritma Agglomerative Clustering (dengan Linkage: Single, Complete, Average, Ward) dan Divisive Clustering.
Analisis Komprehensif: Melakukan pra-proses data, reduksi dimensi, dan fitting model.
Evaluasi Model: Membandingkan kualitas cluster yang terbentuk menggunakan metrik evaluasi internal seperti Silhouette Coefficient.
Reproducibility: Menyajikan seluruh proses analisis dalam format laporan RMarkdown yang dapat direproduksi (reproducible research).
1. Definisi Singkat
1.1. Pengantar Clustering dan Hierarchical Clustering
Clustering (pengelompokan) adalah metode utama dalam Unsupervised Machine Learning yang bertujuan untuk mengorganisir sekumpulan data ke dalam grup-grup (cluster) yang bermakna. Prinsip dasarnya adalah Homogenitas Internal dan Heterogenitas Eksternal: data di dalam satu grup harus sangat mirip satu sama lain, namun sangat berbeda dengan data di grup lain.
Jika dianalogikan dengan perpustakaan, clustering adalah proses menata buku-buku yang berserakan ke dalam rak kategori (seperti Sejarah, Fiksi, Sains) tanpa melihat label di sampulnya, melainkan dengan membaca isinya secara sekilas.
Dalam laporan ini, metode yang digunakan adalah Hierarchical Clustering. Berbeda dengan metode partisi seperti K-Means yang memaksakan kita menentukan jumlah kelompok di awal, metode hierarki membangun struktur “pohon keluarga” data yang disebut Dendrogram. Keunggulan utamanya adalah fleksibilitas; kita dapat melihat bagaimana data-data kecil bergabung menjadi kelompok besar secara bertahap, memberikan wawasan visual yang lebih kaya mengenai struktur data.
1.2. Dua Pendekatan Utama: Agglomerative vs Divisive
Dalam membangun hierarki atau pohon pengelompokan tersebut, terdapat dua strategi yang bergerak dari arah berlawanan:
a. Agglomerative Clustering (Bottom-Up / Dari Bawah ke Atas)
Strategi ini bekerja dengan prinsip “penggabungan”.
Logika: Awalnya, setiap titik data dianggap sebagai satu kelompok kecil (cluster) yang berdiri sendiri.
Proses: Algoritma kemudian mencari dua kelompok yang paling “mirip” atau dekat jaraknya, lalu menggabungkannya. Kelompok-kelompok tersebut terus digabung (disatukan bertahap) hingga seluruh data menyatu menjadi satu kelompok besar.
Kelebihan: Lebih efisien secara komputasi dan mampu menangkap detail hubungan antar-data kecil dengan sangat baik.
b. Divisive Clustering (Top-Down / Dari Atas ke Bawah)
Strategi ini bekerja dengan prinsip “pemecahan”.
Logika: Awalnya, seluruh data dianggap sebagai satu kelompok besar yang utuh.
Proses: Algoritma kemudian mencari bagian dari kelompok tersebut yang paling “berbeda” atau tidak cocok dengan sisa anggota lainnya, lalu memisahkannya. Kelompok-kelompok tersebut terus dipecah (dibagi dua, dibagi lagi, dst.) hingga tersisa data satuan.
Kelebihan: Sangat baik dalam mendeteksi struktur global (kelompok besar) di awal, namun membutuhkan daya komputasi yang jauh lebih berat.
1.3. Linkage Methods: Aturan Pengukuran Jarak
Ketika kita berbicara tentang “menggabungkan dua kelompok terdekat”, muncul pertanyaan mendasar: Bagaimana cara mengukur jarak antara dua kelompok yang berisi banyak anggota? Aturan pengukuran inilah yang disebut Linkage. Pemilihan linkage akan sangat mempengaruhi bentuk cluster yang dihasilkan.
Berikut adalah metode linkage yang digunakan dalam analisis ini:
- Single Linkage (Nearest Neighbor):
- Konsep: Mengukur jarak antara anggota terdekat dari dua kelompok (seperti dua orang yang saling mengulurkan tangan dari dua pulau berbeda).
- Karakteristik: Cenderung menghasilkan cluster yang memanjang menyerupai rantai (chaining effect). Metode ini sensitif, di mana satu data penghubung bisa menyatukan dua kelompok yang sebenarnya berbeda jauh.
- Complete Linkage (Farthest Neighbor):
- Konsep: Mengukur jarak antara anggota terjauh dari dua kelompok. Dua kelompok hanya boleh bergabung jika anggota yang paling jauh sekalipun masih berada dalam jarak toleransi.
- Karakteristik: Cenderung menghasilkan cluster yang bulat, padat (compact), dan memiliki diameter kecil. Ini kebalikan dari Single Linkage.
- Average Linkage (Rata-rata):
- Konsep: Menghitung rata-rata jarak antara seluruh pasangan anggota dari dua kelompok.
- Karakteristik: Merupakan jalan tengah antara Single dan Complete Linkage. Metode ini lebih tahan (robust) terhadap data pencilan (outlier) dibandingkan kedua metode sebelumnya.
- Ward’s Method (Minimum Variance):
- Konsep: Metode ini memiliki pendekatan statistik yang berbeda. Alih-alih hanya mengukur jarak fisik, Ward bertujuan meminimalkan hilangnya informasi atau variansi total di dalam cluster. Ia akan menggabungkan dua kelompok yang, jika disatukan, akan menghasilkan kelompok baru dengan variasi internal paling kecil (paling seragam).
- Karakteristik: Metode ini adalah standar emas dalam banyak analisis karena cenderung menghasilkan cluster yang ukurannya seimbang dan sangat rapi secara struktur.
2. Rumus Inti dan Model Matematis
Dalam analisis Hierarchical Clustering, dasar perhitungan matematis terletak pada dua tahap: pengukuran jarak antar data individu dan pengukuran jarak antar kelompok (cluster). Berikut adalah notasi dan persamaan penting yang digunakan.
2.1. Pengukuran Jarak Antar Data (Euclidean Distance)
Sebelum melakukan pengelompokan, kita harus menghitung seberapa jauh perbedaan karakteristik antara satu lagu dengan lagu lainnya. Metrik yang digunakan dalam studi ini adalah Euclidean Distance.
Jika kita memiliki dua lagu, lagu \(x\) dan lagu \(y\), dengan \(p\) fitur audio (seperti BPM, Energy, dll), maka jarak antara keduanya dirumuskan sebagai:
\[d(x, y) = \sqrt{\sum_{i=1}^{p} (x_i - y_i)^2}\]
Keterangan: * \(d(x, y)\): Jarak Euclidean antara lagu \(x\) dan \(y\). * \(x_i, y_i\): Nilai fitur ke-\(i\) dari lagu \(x\) dan \(y\). * \(p\): Jumlah dimensi/variabel yang digunakan.
2.2. Kriteria Linkage (Jarak Antar Cluster)
Setelah mengetahui jarak antar individu, algoritma perlu mengetahui jarak antara dua cluster, misal Cluster \(A\) dan Cluster \(B\). Berikut adalah formulasi matematis untuk setiap metode linkage:
a. Single Linkage
Jarak antara cluster \(A\) dan \(B\) adalah jarak minimum antara anggota di \(A\) dan anggota di \(B\). \[d_{single}(A, B) = \min \{ d(a, b) : a \in A, b \in B \}\]
b. Complete Linkage
Jarak antara cluster \(A\) dan \(B\) adalah jarak maksimum antara anggota di \(A\) dan anggota di \(B\). \[d_{complete}(A, B) = \max \{ d(a, b) : a \in A, b \in B \}\]
c. Average Linkage
Jarak adalah rata-rata dari seluruh kemungkinan pasangan jarak antara anggota \(A\) dan anggota \(B\). \[d_{average}(A, B) = \frac{1}{|A| \cdot |B|} \sum_{a \in A} \sum_{b \in B} d(a, b)\] Dimana \(|A|\) dan \(|B|\) adalah jumlah anggota dalam masing-masing cluster.
d. Ward’s Method
Metode Ward bertujuan meminimalkan kenaikan total varians dalam cluster (Error Sum of Squares / SSE). Jarak didefinisikan sebagai seberapa besar kenaikan SSE jika \(A\) dan \(B\) digabung: \[d_{ward}(A, B) = SSE_{A \cup B} - (SSE_A + SSE_B)\]
Semakin kecil nilai \(d_{ward}\), semakin sedikit informasi yang hilang saat penggabungan, yang berarti penggabungan tersebut “aman” untuk dilakukan.
3. Cara Kerja (Langkah Operasi)
Dalam bagian ini, dijelaskan prosedur algoritmik yang dijalankan oleh komputer untuk membentuk hierarki cluster. Pemahaman terhadap langkah-langkah ini penting untuk menjustifikasi hasil yang diperoleh.
3.1. Algoritma Agglomerative Clustering
Proses pembentukan cluster dari bawah ke atas (bottom-up) mengikuti langkah-langkah sistematis berikut:
Inisialisasi (Start): Hitung matriks jarak (biasanya Euclidean Distance) antar semua \(N\) titik data. Pada tahap awal, setiap titik data dianggap sebagai satu cluster tunggal, sehingga terdapat \(N\) cluster.
Pencarian Pasangan Terdekat: Pindai matriks jarak untuk menemukan pasangan cluster yang memiliki jarak terdekat satu sama lain. Jarak ini ditentukan berdasarkan metode Linkage yang dipilih (Single, Complete, Average, atau Ward).
Penggabungan (Merging): Gabungkan kedua cluster terdekat tersebut menjadi satu cluster baru. Akibatnya, jumlah total cluster berkurang satu (\(N-1\)).
Pembaruan Matriks Jarak (Update): Hitung ulang jarak antara cluster baru (hasil gabungan tadi) dengan semua cluster lain yang masih ada.
Iterasi (Looping): Ulangi langkah 2 hingga 4 secara terus-menerus sampai hanya tersisa satu cluster besar yang mencakup seluruh data.
Pemotongan Pohon (Cutting): Untuk mendapatkan hasil akhir, potong Dendrogram pada ketinggian atau jumlah \(k\) tertentu sesuai kebutuhan analisis.
3.2. Algoritma Divisive Clustering (DIANA)
Proses pembentukan cluster dari atas ke bawah (top-down) bekerja dengan urutan terbalik:
Inisialisasi: Mulai dengan satu cluster besar yang berisi seluruh \(N\) data observasi.
Pemilihan Cluster untuk Dipecah: Identifikasi cluster yang memiliki diameter terbesar (jarak terjauh antar anggotanya) atau variansi tertinggi.
Pemisahan (Splitting): Di dalam cluster terpilih, cari objek yang paling tidak mirip dengan rata-rata kelompok (splinter group). Pisahkan objek tersebut dan inisiasi kelompok pecahan baru.
Realokasi: Periksa anggota lain dalam cluster lama. Jika ada anggota yang lebih dekat jaraknya ke kelompok pecahan baru dibandingkan ke kelompok lama, pindahkan anggota tersebut.
Iterasi: Ulangi proses pemecahan ini pada cluster-cluster yang terbentuk hingga setiap cluster hanya berisi satu data tunggal (\(N\) cluster).
3.3. Hyperparameter Utama
Dalam menjalankan algoritma ini, terdapat beberapa parameter kunci yang harus ditentukan oleh pengguna (user-defined parameters) yang akan mempengaruhi hasil akhir:
Metric Jarak (Distance Metric): Cara menghitung jarak antar data individu. Dalam laporan ini digunakan Euclidean Distance. Pilihan lain bisa berupa Manhattan atau Cosine Similarity.
Metode Linkage: Aturan untuk menghitung jarak antar cluster (seperti dijelaskan pada Bab 2). Ini adalah parameter paling krusial karena menentukan bentuk cluster.
- Opsional: Single, Complete, Average, Ward.
Jumlah Cluster (\(k\)): Titik potong pada dendrogram. Parameter ini tidak ditentukan di awal algoritma (saat training), melainkan ditentukan di akhir saat analisis hasil (post-processing) untuk mendapatkan label kelompok.
4. Kelebihan dan Keterbatasan Praktis
Setiap algoritma machine learning memiliki karakteristik unik yang membuatnya cocok untuk situasi tertentu namun kurang optimal di situasi lain. Berikut adalah analisis mengenai kelebihan dan keterbatasan praktis dari Hierarchical Clustering yang diterapkan pada dataset ini.
4.1. Kelebihan Utama
Tidak Perlu Menentukan Jumlah Cluster (\(k\)) di Awal Berbeda dengan algoritma K-Means yang mewajibkan pengguna menebak nilai \(k\) sebelum proses dimulai, metode hierarki membiarkan data membentuk strukturnya sendiri terlebih dahulu. Keputusan jumlah cluster dapat dilakukan belakangan dengan melihat visualisasi dendrogram, sehingga analisis menjadi lebih fleksibel dan minim bias awal.
Visualisasi Struktur Data (Dendrogram) Metode ini menghasilkan output visual berupa pohon hierarki (dendrogram) yang sangat informatif. Kita dapat menelusuri hubungan antar data (“silsilah” kemiripan lagu) mulai dari level individu hingga kelompok besar. Hal ini sangat berguna untuk menjelaskan hasil analisis kepada orang awam.
Cocok untuk Dataset Kecil-Menengah Pada dataset dengan ukuran ratusan hingga ribuan baris (seperti data
top10s.csvyang memiliki ~600 baris), metode ini bekerja sangat baik dan cepat. Struktur hierarki yang dihasilkan pun masih mudah dibaca dan diinterpretasikan oleh mata manusia.Menangkap Struktur Bersarang (Nested Structure) Metode ini mampu mendeteksi keberadaan sub-cluster di dalam cluster utama (misalnya: di dalam genre “Pop”, ada sub-kelompok “Dance Pop” dan “Acoustic Pop”).
4.2. Keterbatasan Praktis
Kompleksitas Komputasi Tinggi (Lambat pada Big Data) Kelemahan terbesar metode ini adalah biaya komputasinya. Untuk Agglomerative Clustering, kompleksitas waktunya bisa mencapai \(O(n^3)\) atau \(O(n^2 \log n)\). Artinya, jika jumlah data bertambah 10 kali lipat, waktu prosesnya bisa bertambah 1000 kali lipat. Metode ini sangat tidak disarankan untuk dataset dengan jutaan baris (Big Data).
Sensitif terhadap Outlier dan Noise Metode hierarki, terutama Single Linkage, sangat sensitif terhadap data pencilan (outlier). Satu data yang aneh bisa mengacaukan proses penggabungan cluster, menyebabkan hasil struktur yang tidak rapi (efek chaining). Oleh karena itu, tahap pra-proses (cleaning) menjadi sangat krusial.
Keputusan Permanen (Tidak Bisa Undo) Algoritma hierarki bersifat greedy. Sekali dua cluster digabungkan (atau dipecah), keputusan tersebut tidak dapat dibatalkan di langkah berikutnya. Jika terjadi kesalahan penggabungan di awal proses, kesalahan tersebut akan terbawa hingga akhir, yang mungkin menghasilkan struktur yang kurang optimal dibandingkan metode iteratif seperti K-Means.
Subjektivitas dalam Pemotongan Pohon Meskipun fleksibel, penentuan di mana harus memotong dendrogram (untuk menentukan jumlah cluster akhir) seringkali bersifat subjektif dan memerlukan interpretasi visual pengguna, kecuali dibantu dengan metrik validasi seperti Silhouette Score.
5. Sumber dan Loading Data
5.1. Deskripsi dan Sumber Data
Dataset yang digunakan dalam analisis ini adalah Top Spotify Songs from 2010-2019 - BY YEAR. Data ini berisi daftar lagu-lagu paling populer di dunia yang masuk dalam tangga lagu Spotify selama satu dekade terakhir.
Sumber Data: Kaggle (Leonardo Pena)
Format: CSV (Comma Separated Values)
Dimensi: 603 baris (lagu) dan 15 kolom (variabel).
Dataset ini memuat berbagai fitur audio teknis yang diekstrak oleh Spotify untuk setiap lagu, antara lain:
BPM (Beats Per Minute): Tempo lagu.
Energy (
nrgy): Seberapa bertenaga lagu tersebut.Danceability (
dnce): Kemudahan lagu untuk dipakai menari.Loudness (
dB): Kekerasan suara (semakin tinggi negatifnya, semakin pelan).Valence (
val): Positivitas lagu (semakin tinggi, semakin ceria; semakin rendah, semakin sedih/depresi).Acousticness (
acous): Tingkat akustik lagu.
5.2. Alasan Pemilihan Dataset
Terdapat tiga alasan utama mengapa dataset ini dipilih untuk studi kasus Hierarchical Clustering:
Kaya akan Fitur Numerik Kontinu: Metode clustering berbasis jarak (distance-based) seperti Hierarki sangat bergantung pada data angka. Dataset ini menyediakan variabel audio yang terukur secara matematis (bukan sekadar teks), sehingga perhitungan Euclidean Distance menjadi sangat valid dan bermakna.
Ukuran Data yang Ideal (Sweet Spot): Algoritma Hierarchical Clustering memiliki kompleksitas komputasi yang berat (\(O(n^3)\)). Jika data terlalu besar (jutaan baris), komputer akan lambat. Jika terlalu sedikit, pola tidak terlihat. Jumlah 603 data pada dataset ini adalah ukuran “Goldilocks” (sangat pas)—cukup kecil untuk diproses cepat oleh R, namun cukup besar untuk menghasilkan struktur dendrogram yang kaya dan menarik.
Interpretasi yang Intuitif: Musik adalah domain yang dipahami semua orang. Hasil cluster nantinya akan sangat mudah divalidasi dengan logika manusia (misalnya: “Apakah masuk akal lagu Despacito satu grup dengan Shape of You?”). Ini memudahkan dalam tahap evaluasi kualitatif.
5.3. Proses Loading Data
Berikut adalah tahapan memuat pustaka yang dibutuhkan dan membaca data ke dalam RStudio:
# 1. Load Library
library(tidyverse)
library(cluster)
library(factoextra)
library(dendextend)
library(DT)
# 2. Load Data (DENGAN PERBAIKAN ENCODING)
# Kita tambahkan fileEncoding="ISO-8859-1" untuk menangani karakter spesial
tryCatch({
# Coba baca dengan encoding Latin-1 (biasanya ini solusinya)
df <- read.csv("top10s.csv", stringsAsFactors = FALSE, fileEncoding = "ISO-8859-1")
}, warning = function(w) {
# Jika masih gagal, coba default
df <<- read.csv("top10s.csv", stringsAsFactors = FALSE)
}, error = function(e) {
# Fallback terakhir
df <<- read.csv("top10s.csv", stringsAsFactors = FALSE)
})
# Pastikan nama kolom tidak aneh (kadang ada karakter aneh di kolom pertama)
# Kita rename kolom pertama jadi "id" biar aman
colnames(df)[1] <- "id"
# 3. Menampilkan Data
datatable(df,
options = list(
pageLength = 10,
scrollX = TRUE
),
caption = "Tabel 1: Dataset Spotify Top Songs"
)6. Eksplorasi Data Singkat (EDA)
Tahap Exploratory Data Analysis (EDA) adalah langkah fundamental untuk memahami karakteristik dataset sebelum dilakukan pemodelan. Pada bab ini, kita akan menelaah struktur data, kelengkapan nilai, distribusi statistik, serta mendeteksi outlier melalui visualisasi komprehensif.
6.1. Pemeriksaan Struktur dan Tipe Variabel
Langkah pertama adalah mengidentifikasi tipe data untuk memisahkan antara variabel identitas (label) dan variabel fitur (numerik).
## Rows: 603
## Columns: 15
## $ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1…
## $ title <chr> "Hey, Soul Sister", "Love The Way You Lie", "TiK ToK", "Bad …
## $ artist <chr> "Train", "Eminem", "Kesha", "Lady Gaga", "Bruno Mars", "Just…
## $ top.genre <chr> "neo mellow", "detroit hip hop", "dance pop", "dance pop", "…
## $ year <int> 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, …
## $ bpm <int> 97, 87, 120, 119, 109, 65, 120, 148, 93, 126, 128, 145, 130,…
## $ nrgy <int> 89, 93, 84, 92, 84, 86, 78, 76, 37, 72, 87, 83, 82, 83, 84, …
## $ dnce <int> 67, 75, 76, 70, 64, 73, 75, 52, 48, 79, 62, 62, 77, 83, 44, …
## $ dB <int> -4, -5, -3, -4, -5, -5, -4, -6, -8, -4, -4, -5, -5, -6, -8, …
## $ live <int> 8, 52, 29, 8, 9, 11, 4, 12, 12, 7, 6, 10, 70, 11, 12, 36, 11…
## $ val <int> 80, 64, 71, 71, 43, 54, 82, 38, 14, 61, 47, 48, 63, 71, 78, …
## $ dur <int> 217, 263, 200, 295, 221, 214, 203, 225, 216, 235, 235, 230, …
## $ acous <int> 19, 24, 10, 0, 2, 4, 0, 7, 74, 13, 3, 33, 18, 1, 1, 20, 5, 7…
## $ spch <int> 4, 23, 14, 4, 4, 14, 9, 4, 3, 4, 3, 4, 5, 4, 45, 3, 3, 7, 5,…
## $ pop <int> 83, 82, 80, 79, 78, 77, 77, 77, 76, 73, 73, 73, 73, 73, 72, …
Analisis Struktur: Berdasarkan output di atas, dataset terdiri dari 603 observasi dan 15 variabel. Kita dapat membagi variabel menjadi dua kelompok:
Variabel Label (Non-Numerik):
title,artist,top genre,year. Variabel ini hanya digunakan sebagai identitas.Variabel Fitur Audio (Numerik):
bpm,nrgy,dnce,dB,live,val,dur,acous,spch,pop. Kesepuluh variabel inilah yang akan dianalisis lebih lanjut sebagai input clustering.
6.2. Pengecekan Missing Values
Kita harus memastikan data bersih dari nilai kosong (NA), karena algoritma clustering berbasis jarak Euclidean tidak dapat memproses data yang hilang.
## id title artist top.genre year bpm nrgy dnce
## 0 0 0 0 0 0 0 0
## dB live val dur acous spch pop
## 0 0 0 0 0 0 0
Analisis: Terlihat angka 0 pada semua kolom. Artinya, dataset ini bersih (clean) dan siap diproses tanpa perlu teknik imputasi data.
6.3. Ringkasan Statistik Deskriptif
Statistik deskriptif diperlukan untuk melihat rentang skala data. Ini penting untuk menentukan apakah metode scaling diperlukan atau tidak.
# Menampilkan statistik dasar hanya untuk 10 variabel numerik
# Kita pilih kolom berdasarkan nama fiturnya
df_num_only <- df %>% select(bpm, nrgy, dnce, dB, live, val, dur, acous, spch, pop)
summary(df_num_only)## bpm nrgy dnce dB
## Min. : 0.0 Min. : 0.0 Min. : 0.00 Min. :-60.000
## 1st Qu.:100.0 1st Qu.:61.0 1st Qu.:57.00 1st Qu.: -6.000
## Median :120.0 Median :74.0 Median :66.00 Median : -5.000
## Mean :118.5 Mean :70.5 Mean :64.38 Mean : -5.579
## 3rd Qu.:129.0 3rd Qu.:82.0 3rd Qu.:73.00 3rd Qu.: -4.000
## Max. :206.0 Max. :98.0 Max. :97.00 Max. : -2.000
## live val dur acous
## Min. : 0.00 Min. : 0.00 Min. :134.0 Min. : 0.00
## 1st Qu.: 9.00 1st Qu.:35.00 1st Qu.:202.0 1st Qu.: 2.00
## Median :12.00 Median :52.00 Median :221.0 Median : 6.00
## Mean :17.77 Mean :52.23 Mean :224.7 Mean :14.33
## 3rd Qu.:24.00 3rd Qu.:69.00 3rd Qu.:239.5 3rd Qu.:17.00
## Max. :74.00 Max. :98.00 Max. :424.0 Max. :99.00
## spch pop
## Min. : 0.000 Min. : 0.00
## 1st Qu.: 4.000 1st Qu.:60.00
## Median : 5.000 Median :69.00
## Mean : 8.358 Mean :66.52
## 3rd Qu.: 9.000 3rd Qu.:76.00
## Max. :48.000 Max. :99.00
Temuan Penting (Alasan Scaling): Terdapat disparitas skala yang sangat mencolok antar variabel:
- Durasi (
dur): Rata-rata ~224, nilai maksimum hingga 424. - Speechiness (
spch): Rata-rata hanya ~8. - Loudness (
dB): Memiliki nilai negatif.
Implikasi: Variabel dengan angka besar (seperti Durasi) akan mendominasi perhitungan jarak jika tidak disetarakan. Maka, proses Standardisasi (Scaling) di bab selanjutnya bersifat WAJIB.
6.4. Visualisasi Distribusi (Histogram Collage)
Berikut adalah visualisasi sebaran data seluruh fitur audio dalam satu tampilan kolase (grid) untuk melihat pola distribusinya.
# 1. Transformasi data ke format 'Long' agar bisa di-plot sekaligus
df_long <- df %>%
select(bpm, nrgy, dnce, dB, live, val, dur, acous, spch, pop) %>%
pivot_longer(cols = everything(), names_to = "fitur", values_to = "nilai")
# 2. Plot Histogram dengan Facet Wrap yang LEBIH RAPI
ggplot(df_long, aes(x = nilai, fill = fitur)) +
geom_histogram(bins = 30, color = "white", alpha = 0.8, show.legend = FALSE) +
facet_wrap(~fitur, scales = "free", ncol = 3) + # Grid 3 kolom
scale_fill_viridis_d() + # Warna otomatis
theme_minimal() +
labs(title = "Distribusi Fitur Audio (Histogram)",
subtitle = "Melihat pola sebaran data: Normal vs Skewed",
x = "Nilai Fitur", y = "Frekuensi") +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, size = 8), # Miringkan angka & kecilkan
axis.text.y = element_text(size = 8), # Kecilkan angka sumbu Y
strip.background = element_rect(fill = "#1DB954"), # Hijau Spotify
strip.text = element_text(color = "white", face = "bold", size = 10)
)Interpretasi Visual (Analisis Mendalam):
- Dominasi Musik Elektronik (Skewed
Distributions): Perhatikan grafik
acous(Acousticness),spch(Speechiness), danlive(Liveness). Ketiganya memiliki distribusi yang sangat condong ke kiri (right-skewed).- Artinya: Mayoritas lagu populer dekade 2010-2019 memiliki nilai akustik dan liveness yang sangat rendah. Ini mencerminkan tren industri musik modern yang didominasi oleh produksi studio digital dan instrumen elektronik, bukan rekaman konser atau instrumen akustik murni.
- Karakteristik Lagu Pop (Normal
Distributions): Grafik
dnce(Danceability),nrgy(Energy), danval(Valence) cenderung membentuk kurva lonceng (normal distribution) atau sedikit condong ke kanan.- Artinya: Lagu-lagu top chart memiliki variasi yang seimbang. Ada lagu sedih (low valence) dan bahagia (high valence), namun rata-rata berada di nilai tengah yang moderat. Tingginya rata-rata Energy dan Danceability mengonfirmasi bahwa lagu “hits” umumnya adalah lagu yang bersemangat.
- Implikasi untuk Clustering: Karena beberapa fitur
menyebar normal dan yang lain sangat miring (skewed), serta
memiliki rentang angka yang berbeda jauh (lihat sumbu X pada
durvsspch), maka data ini TIDAK BOLEH langsung dihitung jaraknya.
6.5. Deteksi Outlier (Boxplot Collage)
Setelah melihat distribusi data, langkah selanjutnya adalah mendeteksi keberadaan data pencilan (outlier). Outlier adalah observasi yang nilainya menyimpang jauh dari rata-rata data lainnya. Dalam konteks musik, ini bisa berupa lagu yang durasinya sangat panjang atau lagu dengan lirik yang sangat padat.
Visualisasi menggunakan Boxplot sangat efektif untuk tujuan ini. Titik-titik yang berada di luar “kumis” (whiskers) boxplot akan ditandai dengan warna merah.
# Plot Boxplot dengan penanda Outlier Merah
ggplot(df_long, aes(x = fitur, y = nilai, fill = fitur)) +
geom_boxplot(alpha = 0.7, show.legend = FALSE,
outlier.colour = "red", outlier.shape = 19, outlier.size = 2) +
facet_wrap(~fitur, scales = "free", ncol = 3) +
theme_bw() + # Menggunakan tema hitam-putih agar titik merah kontras
labs(title = "Deteksi Outlier (Boxplot)",
subtitle = "Titik merah menandakan data pencilan (outlier) yang ekstrem",
x = "Fitur Audio", y = "Nilai") +
theme(
axis.text.x = element_blank(), # Menyembunyikan label sumbu X agar tidak berantakan
axis.ticks.x = element_blank(),
strip.background = element_rect(fill = "black"), # Header tiap kotak berwarna hitam
strip.text = element_text(color = "white", face = "bold") # Teks header putih tebal
)Interpretasi Outlier: Berdasarkan visualisasi di atas, kita dapat mengidentifikasi beberapa anomali data:
- Durasi (
dur): Terdapat sejumlah titik merah di bagian atas. Ini mengindikasikan adanya lagu-lagu dengan durasi yang sangat panjang dibandingkan mayoritas lagu pop standar (biasanya 3-4 menit). - Speechiness (
spch): Banyak sekali outlier tinggi. Ini kemungkinan besar merepresentasikan lagu-lagu bergenre Hip-Hop atau Rap yang memiliki densitas kata jauh lebih tinggi daripada lagu pop melodis. - Popularitas (
pop): Terdapat outlier di bagian bawah, yang menunjukkan adanya lagu-lagu yang pernah masuk tangga lagu namun memiliki skor popularitas yang relatif rendah dibandingkan rekan-rekannya.
Implikasi Metodologis: Keberadaan outlier yang cukup signifikan ini menjadi peringatan bahwa metode clustering yang sensitif terhadap pencilan (seperti Single Linkage) mungkin akan memberikan hasil yang kurang optimal (cenderung membentuk chaining). Oleh karena itu, pada saat mendapt kondidi seperti ini penggunaan metode yang lebih robust seperti Average Linkage atau Ward’s Method sangat disarankan pada tahap pemodelan nanti.
6.6. Korelasi Antar Fitur (Correlation Heatmap)
Terakhir, kita perlu melihat hubungan antar variabel. Apakah lagu
yang kencang (dB) pasti energinya (nrgy)
tinggi? Kita akan cek menggunakan Matriks Korelasi.
library(ggcorrplot)# 1. librarynya
# 2. Hitung Matriks Korelasi (Hanya kolom numerik)
# Menggunakan nama kolom agar lebih aman daripada nomor indeks
df_num <- df %>% select(bpm, nrgy, dnce, dB, live, val, dur, acous, spch, pop)
cor_matrix <- cor(df_num)
# 3. Visualisasi Heatmap
ggcorrplot(cor_matrix,
method = "circle", # Pakai lingkaran biar tidak sumpek
type = "lower", # Cuma tampilkan bagian bawah (segitiga) biar rapi
lab = TRUE, # Tampilkan angkanya
lab_size = 3, # Ukuran angka pas (tidak kekecilan/kebesaran)
digits = 1, # Cuma 1 angka di belakang koma (biar ringkas)
colors = c("#E41A1C", "white", "#377EB8"), # Merah - Putih - Biru
title = "Peta Korelasi Fitur Audio",
ggtheme = theme_minimal()) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) # Miringkan teksCara Membaca Heatmap (Interpretasi Simpel):
Bayangkan ini seperti rambu lalu lintas:
- Lingkaran Biru Besar (Positif / Berteman):
- Artinya: “Kalau A naik, B ikut naik.”
- Contoh:
nrgyvsdB(0.5). Lihat lingkaran birunya cukup besar. Ini menunjukkan bahwa lagu yang memiliki energi tinggi biasanya juga diproduksi dengan volume suara yang keras. - Contoh:
valvsdnce(0.5). Berkorelasi positif, yang berarti lagu dengan nuansa ceria (happy) cenderung memiliki ritme yang enak untuk menari (danceable).
- Lingkaran Merah Besar (Negatif / Bermusuhan):
- Artinya: “Kalau A naik, B malah turun.”
- Contoh:
acousvsnrgy(-0.6). Lingkaran merahnya paling besar. Ini mengartikan hubungan yang bertolak belakang; semakin akustik sebuah lagu, maka tingkat energinya cenderung semakin rendah (lagu santai).
- Lingkaran Kecil/Putih (Netral):
- Artinya: “Tidak ada hubungan yang kuat.”
- Contoh:
pop(Popularitas) hampir berwarna putih terhadap semua fitur lain. Ini temuan menarik yang menunjukkan bahwa fitur teknis lagu (seperti tempo atau energi) tidak menjamin sebuah lagu akan menjadi populer. Popularitas musik dipengaruhi faktor lain di luar fitur audio semata.
7. Pra-proses Data (Preprocessing)
Tahap pra-proses adalah langkah kritis untuk menjamin validitas hasil analisis. Algoritma Hierarchical Clustering bekerja dengan menghitung jarak antar-titik data, sehingga data input harus bersih, unik, dan memiliki skala yang setara.
7.1. Pembersihan Data dan Penanganan Duplikat
Dataset musik seringkali memuat lagu yang sama lebih dari satu kali (misalnya, lagu yang bertahan di tangga lagu selama dua tahun berturut-turut). Duplikasi ini harus dihapus untuk menghindari bias. Selain itu, kita perlu mengatur indeks baris (row names) agar visualisasi dendrogram nantinya menampilkan nama lagu, bukan nomor urut.
# 1. Menghapus Data Duplikat
# Kita hanya mengambil kemunculan pertama dari setiap lagu berdasarkan Judul dan Artis
df_clean <- df %>% distinct(title, artist, .keep_all = TRUE)
# 2. Menjadikan Judul Lagu sebagai Index (Label)
# Menggabungkan Judul dan Artis agar label lebih informatif
# Fungsi make.unique() memastikan tidak ada nama yang sama persis (error handling)
rownames(df_clean) <- make.unique(paste(df_clean$title, "-", df_clean$artist))
# Cek dimensi data setelah pembersihan
dim(df_clean)## [1] 587 15
Analisis Output: Hasil 587 15 artinya
sekarang data kita tinggal 587 baris (lagu) dan
15 kolom.
Awalnya ada 603 lagu.
Sekarang sisa 587 lagu.
Berarti kita sukses membuang 16 lagu kembar (duplikat).
Sekarang datanya sudah bersih, setiap baris mewakili satu lagu yang unik.
7.2. Seleksi Fitur (Feature Selection)
Tidak semua variabel dalam dataset relevan untuk perhitungan jarak matematis. Kita harus mengeliminasi variabel kategorik (teks) dan variabel numerik yang bukan merupakan fitur audio (seperti Tahun atau ID).
Berikut adalah proses pemilihan kolom fitur audio saja, yang ditampilkan dalam tabel interaktif agar dapat diperiksa secara menyeluruh.
# 1. Memilih hanya kolom fitur audio (Numerik)
# Variabel: bpm, nrgy, dnce, dB, live, val, dur, acous, spch, pop
df_select <- df_clean %>%
select(bpm, nrgy, dnce, dB, live, val, dur, acous, spch, pop)
# 2. Menampilkan Data Hasil Seleksi (Interactive Table)
# Menggunakan datatable agar semua data bisa dilihat (di-scroll)
datatable(df_select,
options = list(
pageLength = 5, # Tampilkan 5 baris per halaman biar rapi
scrollX = TRUE, # Aktifkan geser samping
searching = TRUE # Aktifkan fitur pencarian
),
caption = "Tabel Data Fitur Audio (Siap untuk Scaling)"
)Interpretasi Seleksi Data:
Tabel di atas menampilkan data fitur audio yang sudah diseleksi.
Tentang Angka: Semua kolom yang tersisa adalah variabel numerik (BPM, Energy, dll) yang siap diolah secara matematis.
Tentang Judul Lagu: Teks judul lagu yang terlihat di sisi paling kiri bukanlah kolom variabel, melainkan Label Baris (Row Names).
Label ini tidak akan dihitung dalam kalkulasi jarak Euclidean.
Label ini sengaja dipertahankan sebagai penanda identitas agar nanti saat visualisasi dendrogram terbentuk, kita bisa mengetahui lagu mana yang masuk ke dalam cluster tertentu.
Jadi, dataset ini sudah 100% valid: hanya berisi angka untuk perhitungan, namun tetap membawa identitas lagu untuk interpretasi.
7.3. Standardisasi Data (Z-Score Scaling)
Sebagaimana temuan pada tahap EDA (Bab 6), terdapat perbedaan skala yang ekstrem antar variabel (contoh: Durasi ratusan vs Speechiness satuan). Jika data mentah ini langsung digunakan dalam perhitungan Euclidean Distance, variabel dengan nilai besar akan mendominasi hasil klasterisasi secara tidak adil.
Solusinya adalah melakukan Standardisasi (Scaling) menggunakan metode Z-Score, yang mengubah distribusi data sehingga memiliki rata-rata 0 dan standar deviasi 1.
\[z = \frac{x - \mu}{\sigma}\]
# 1. Melakukan Scaling
# Fungsi scale() otomatis menghitung Z-score untuk setiap kolom
df_scaled <- scale(df_select)
# 2. Mengubah format kembali menjadi Data Frame
# (Output scale() adalah matrix, kita ubah jadi data frame biar rapi)
df_scaled <- as.data.frame(df_scaled)
# 3. Cek Statistik Setelah Scaling
# Perhatikan baris "Mean". Semuanya harus bernilai nol (atau mendekati nol misal: 1.2e-16)
summary(df_scaled)## bpm nrgy dnce dB
## Min. :-4.77301 Min. :-4.3323 Min. :-4.8174 Min. :-19.2649
## 1st Qu.:-0.75056 1st Qu.:-0.5835 1st Qu.:-0.5589 1st Qu.: -0.1525
## Median : 0.05393 Median : 0.2155 Median : 0.1135 Median : 0.2014
## Mean : 0.00000 Mean : 0.0000 Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.41595 3rd Qu.: 0.7071 3rd Qu.: 0.6365 3rd Qu.: 0.5553
## Max. : 3.51323 Max. : 1.6904 Max. : 2.4296 Max. : 1.2632
## live val dur acous
## Min. :-1.3571 Min. :-2.31987 Min. :-2.6529 Min. :-0.6923
## 1st Qu.:-0.6730 1st Qu.:-0.76519 1st Qu.:-0.6617 1st Qu.:-0.5950
## Median :-0.4449 Median :-0.01006 Median :-0.1054 Median :-0.4004
## Mean : 0.0000 Mean : 0.00000 Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.4672 3rd Qu.: 0.74506 3rd Qu.: 0.4364 3rd Qu.: 0.1346
## Max. : 4.2678 Max. : 2.03322 Max. : 5.8388 Max. : 4.1228
## spch pop
## Min. :-1.13313 Min. :-4.5423
## 1st Qu.:-0.58546 1st Qu.:-0.4394
## Median :-0.44854 Median : 0.1760
## Mean : 0.00000 Mean : 0.0000
## 3rd Qu.: 0.09913 3rd Qu.: 0.6547
## Max. : 5.43892 Max. : 2.2275
Interpretasi Output Scaling:
Berdasarkan ringkasan statistik di atas, proses standardisasi telah berhasil dilakukan. Hal ini dibuktikan dengan dua indikator utama:
Mean (Rata-rata) Bernilai 0: Perhatikan baris
Meanpada setiap variabel (bpm,nrgy,dnce, dll). Semuanya menunjukkan angka 0.0000. Ini mengonfirmasi bahwa distribusi data telah digeser ke titik tengah nol.Skala Seragam (Homogen): Sebelumnya,
bpmbernilai ratusan dandBbernilai negatif. Sekarang, perhatikan nilaiMindanMaxpada semua kolom. Semuanya berada dalam rentang yang relatif sama, yaitu sekitar -4 hingga +4 (standar deviasi).- Contoh: Nilai Max
bpmadalah 3.51, dan nilai Maxdnceadalah 2.42. Keduanya kini “selevel”.
- Contoh: Nilai Max
Data kini bersifat objektif. Tidak ada lagi variabel yang mendominasi hanya karena satuannya besar. Jarak antar-lagu kini murni mencerminkan perbedaan pola audio, bukan perbedaan satuan ukur.
8. Teknik Reduksi Dimensi (PCA)
Dataset ini memiliki 10 variabel fitur audio (dimensi). Secara matematis, melakukan clustering pada dimensi tinggi itu sah-sah saja, namun manusia tidak bisa memvisualisasikan data dalam 10 dimensi.
Oleh karena itu, teknik reduksi dimensi seperti Principal Component Analysis (PCA) diperlukan. * Tujuan: Memproyeksikan informasi dari 10 variabel asli menjadi 2 variabel utama (Principal Components) yang merangkum variansi data sebanyak mungkin. * Manfaat: Memungkinkan visualisasi hasil clustering dalam grafik 2D (Sumbu X dan Y) di bab-bab selanjutnya.
8.1. Implementasi PCA
Kita menggunakan fungsi prcomp. Karena data sudah
dilakukan scaling pada Bab 7 (objek df_scaled),
kita tidak perlu melakukan scaling ulang.
# 1. Menjalankan PCA
# scale. = FALSE karena data input (df_select) sudah kita scale di Bab 7
pca_result <- prcomp(df_select, scale. = TRUE)
# 2. Melihat Ringkasan Hasil PCA
summary(pca_result)## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 1.5885 1.1954 1.0567 1.0007 0.97101 0.89734 0.86527
## Proportion of Variance 0.2523 0.1429 0.1117 0.1001 0.09429 0.08052 0.07487
## Cumulative Proportion 0.2523 0.3952 0.5069 0.6070 0.70133 0.78185 0.85672
## PC8 PC9 PC10
## Standard deviation 0.84696 0.6870 0.49341
## Proportion of Variance 0.07173 0.0472 0.02435
## Cumulative Proportion 0.92845 0.9757 1.00000
Interpretasi Hasil PCA (Importance of Components):
Tabel di atas menunjukkan seberapa besar setiap komponen baru (Principal Component) mampu merangkum informasi dari 10 variabel audio asli.
Mengapa ada PC1 s/d PC10? Jumlah komponen (PC) yang terbentuk adalah 10, sama persis dengan jumlah variabel input (
bpm,nrgy,dnce, dst). PCA tidak membuang data, melainkan menyusun ulang data tersebut dari yang paling penting (PC1) ke yang paling tidak penting (PC10).Proporsi Variansi (Proportion of Variance):
- PC1 (0.2523): Menyimpan 25.23% dari total informasi data. Ini adalah komponen terpenting.
- PC2 (0.1429): Menyimpan 14.29% informasi.
- PC10 (0.02435): Hanya menyimpan 2.4% informasi. Ini dianggap sebagai noise atau detail yang tidak signifikan.
Proporsi Kumulatif (Cumulative Proportion):
- Fokus kita adalah pada gabungan PC1 + PC2.
- Nilai kumulatifnya adalah 0.3952 atau sekitar 40%.
- Kesimpulan: Meskipun kita mereduksi data dari 10 dimensi menjadi 2 dimensi (PC1 & PC2) untuk visualisasi nanti, grafik 2D tersebut masih mampu merepresentasikan hampir 40% karakteristik asli lagu-lagu tersebut. Angka ini cukup representatif untuk melihat pola pengelompokan global.
8.2. Visualisasi Scree Plot (Persentase Informasi)
Untuk memvalidasi keputusan kita menggunakan 2 dimensi, kita gunakan Scree Plot. Grafik ini menunjukkan berapa persen informasi yang ditangkap oleh setiap komponen.
# Visualisasi Scree Plot menggunakan library 'factoextra'
fviz_eig(pca_result,
addlabels = TRUE, # Tampilkan angka persentase
ylim = c(0, 50), # Batas sumbu Y agar grafik rapi
barfill = "#1DB954", # Warna Hijau Spotify
barcolor = "black",
main = "Scree Plot: Persentase Informasi per Dimensi")## Warning in geom_bar(stat = "identity", fill = barfill, color = barcolor, :
## Ignoring empty aesthetic: `width`.
Interpretasi Scree Plot:
- Dimensi 1 (PC1): Menyimpan variansi informasi terbesar (seperti yang terlihat pada balok tertinggi).
- Dimensi 2 (PC2): Menyimpan variansi informasi terbesar kedua.
- Kesimpulan: Gabungan PC1 dan PC2 akan digunakan sebagai sumbu X dan Y pada plot visualisasi klaster nanti. Meskipun tidak menangkap 100% informasi, ini adalah pendekatan visual terbaik untuk menyederhanakan data multidimensi agar dapat dilihat oleh mata manusia.
8.3. Visualisasi Biplot (Peta Kontribusi Variabel)
Sebelum melihat pengelompokan lagu, kita perlu memahami “peta” variabelnya. Variabel mana yang menarik data ke kanan (PC1 positif) atau ke atas (PC2 positif)?
# Visualisasi Biplot Variabel
fviz_pca_var(pca_result,
col.var = "contrib", # Warna panah berdasarkan besarnya kontribusi
gradient.cols = c("grey", "blue", "red"), # Merah = Kontribusi Paling Besar
repel = TRUE, # Agar teks label tidak bertumpuk
title = "PCA Biplot: Peta Kontribusi Fitur Audio"
)## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the ggpubr package.
## Please report the issue at <https://github.com/kassambara/ggpubr/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Interpretasi Biplot:
Grafik ini berfungsi sebagai “kompas” untuk membaca hasil clustering nanti:
- Panah Berdekatan (Korelasi Positif):
- Variabel
nrgy(Energi) dandB(Loudness) arahnya sangat berdekatan. Artinya, lagu yang bertenaga hampir pasti memiliki volume yang keras. - Variabel
val(Valence/Happy) dandnce(Danceability) juga searah, menandakan lagu yang ceria cenderung enak untuk dipakai menari.
- Variabel
- Panah Berlawanan (Korelasi Negatif):
- Variabel
acous(Akustik) panahnya berlawanan arah dengannrgy. - Implikasi: Ini menunjukkan pemisahan zona yang jelas. Area kiri grafik nanti adalah “Zona Akustik” (musik santai), sedangkan area kanan adalah “Zona Energi Tinggi” (musik keras).
- Variabel
- Panah Tegak Lurus (Tidak Berkorelasi):
- Variabel
dur(Durasi) arahnya hampir tegak lurus (90 derajat) terhadapval. - Implikasi: Panjang atau pendeknya durasi lagu tidak mempengaruhi mood lagu tersebut (apakah sedih atau senang).
- Variabel
9. Implementasi Algoritma (Fitting Model)
Pada tahap ini, kita akan menerapkan algoritma Hierarchical Clustering pada data yang telah diredaksi (PCA) dan distandarisasi. Sesuai dengan spesifikasi tugas, kita akan membandingkan dua pendekatan utama: 1. Agglomerative Clustering: Menggunakan metode Single, Complete, Average, dan Ward Linkage. 2. Divisive Clustering: Menggunakan algoritma DIANA (Divisive Analysis).
Selain sekadar menjalankan algoritma, kita juga akan menghitung Koefisien Kophenetik (Cophenetic Correlation Coefficient) untuk mengukur seberapa baik setiap pohon (dendrogram) dalam merepresentasikan jarak asli antar-data.
9.1. Perhitungan Matriks Jarak
Langkah pertama yang fundamental adalah menghitung jarak antar setiap pasangan lagu menggunakan Euclidean Distance.
# Menghitung matriks jarak antar observasi
# Menggunakan data hasil scaling (df_scaled) dari Bab 7
dist_mat <- dist(df_scaled, method = "euclidean")
# Menampilkan dimensi matriks (harus 587x587)
print(dim(as.matrix(dist_mat)))## [1] 587 587
Interpretasi Matriks Jarak:
Output dimensi [1] 587 587 mengonfirmasi tiga hal
penting:
Matriks Persegi Simetris: Jumlah baris dan kolom sama persis (587). Ini berarti kita telah berhasil menghitung jarak pairwise antara setiap lagu dengan seluruh lagu lainnya dalam dataset.
Konsistensi Data: Angka 587 sesuai dengan jumlah lagu unik yang tersisa setelah tahap pembersihan data (Bab 7.1).
Kesiapan Input: Matriks jarak inilah yang menjadi “bahan baku” utama yang akan dimasukkan ke dalam fungsi
hclustuntuk membangun struktur pohon pada langkah selanjutnya.
9.2. Fitting Agglomerative Clustering
Ini akan membangun 4 model berbeda berdasarkan metode linkage.
# 1. Single Linkage (Nearest Neighbor)
hc_single <- hclust(dist_mat, method = "single")
# 2. Complete Linkage (Farthest Neighbor)
hc_complete <- hclust(dist_mat, method = "complete")
# 3. Average Linkage (UPGMA)
hc_avg <- hclust(dist_mat, method = "average")
# 4. Ward's Method (Minimum Variance)
# Catatan: Di R, 'ward.D2' adalah implementasi standar Ward
hc_ward <- hclust(dist_mat, method = "ward.D2")Interpretasi Fitting Model:
Pada tahap ini, kita tidak hanya menjalankan satu algoritma, melainkan membangun 4 model skenario clustering sekaligus. Tujuannya adalah untuk membandingkan bagaimana struktur pohon (dendrogram) terbentuk jika menggunakan aturan jarak (linkage) yang berbeda:
- Single Linkage: Menggabungkan berdasarkan jarak terdekat (rawan chaining effect).
- Complete Linkage: Menggabungkan berdasarkan jarak terjauh (cenderung menghasilkan klaster padat).
- Average Linkage: Menggunakan rata-rata jarak (kompromi antara Single dan Complete).
- Ward’s Method: Meminimalkan varian dalam klaster (cenderung menghasilkan ukuran klaster yang seragam).
Objek hc_single, hc_complete,
hc_avg, dan hc_ward kini menyimpan seluruh
riwayat penggabungan data yang siap untuk divisualisasikan.
9.3. Fitting Divisive Clustering (DIANA)
Pendekatan top-down menggunakan algoritma DIANA.
# Menjalankan algoritma DIANA
# Kita simpan hasilnya dalam format hclust agar bisa dibandingkan nanti
hc_divisive <- diana(df_scaled)Interpretasi Model Divisive (DIANA):
Berbeda dengan pendekatan agglomerative sebelumnya, fungsi
diana() menerapkan algoritma Divisive
Clustering (Top-Down).
- Inisialisasi: Algoritma memulai dengan mengasumsikan seluruh 587 lagu berada dalam satu klaster raksasa (root).
- Proses Pemecahan: Pada setiap langkah, algoritma mencari klaster dengan diameter terbesar (paling tidak seragam) dan memecahnya (splitting) menjadi dua sub-klaster.
- Hasil: Objek
hc_divisivekini menyimpan struktur hierarki pemecahan tersebut.
Kita juga dapat melihat nilai Divisive Coefficient
(DC) dengan mengetik hc_divisive$dc. Nilai ini
(biasanya 0-1) menunjukkan seberapa kuat struktur pengelompokan yang
ditemukan. Semakin mendekati 1, semakin jelas struktur klasternya.
9.4. Evaluasi Kualitas Pohon (Cophenetic Correlation)
Ini adalah langkah validasi statistik. Kita ingin mengetahui metode mana yang paling setia mempertahankan jarak asli data dalam bentuk struktur pohon.
Nilai Koefisien Kophenetik berkisar antara 0 hingga 1:
Nilai mendekati 1: Sangat baik (Dendrogram akurat merepresentasikan kemiripan data).
Nilai mendekati 0: Buruk (Dendrogram mendistorsi jarak asli).
# Fungsi sederhana untuk menghitung korelasi kophenetik
hitung_cophenetic <- function(hc_model, dist_asli) {
dend_dist <- cophenetic(hc_model)
cor(dist_asli, dend_dist)
}
# Menghitung skor untuk setiap metode
# (Pastikan objek hc_single, hc_ward, dll sudah dibuat di tahap sebelumnya)
score_single <- hitung_cophenetic(hc_single, dist_mat)
score_complete <- hitung_cophenetic(hc_complete, dist_mat)
score_average <- hitung_cophenetic(hc_avg, dist_mat)
score_ward <- hitung_cophenetic(hc_ward, dist_mat)
# Khusus untuk Divisive (DIANA), perlu dikonversi ke format hclust dulu
score_divisive <- hitung_cophenetic(as.hclust(hc_divisive), dist_mat)
# Membuat Tabel Perbandingan
comparison_df <- data.frame(
Metode = c("Single Linkage", "Complete Linkage", "Average Linkage", "Ward's Method", "Divisive (DIANA)"),
Skor_Cophenetic = c(score_single, score_complete, score_average, score_ward, score_divisive)
)
# Menampilkan Tabel Urut dari Skor Tertinggi (Juara 1)
comparison_df %>%
arrange(desc(Skor_Cophenetic)) %>%
knitr::kable(caption = "Tabel Perbandingan Kualitas Dendrogram (Cophenetic Score)")| Metode | Skor_Cophenetic |
|---|---|
| Average Linkage | 0.8627082 |
| Single Linkage | 0.8201003 |
| Divisive (DIANA) | 0.6847599 |
| Complete Linkage | 0.6562938 |
| Ward’s Method | 0.4514008 |
Interpretasi Hasil Evaluasi:
Berdasarkan tabel perbandingan di atas, kita dapat menyimpulkan:
- Peringkat Teratas: Metode dengan skor korelasi tertinggi (biasanya Average Linkage) menunjukkan bahwa pohon hierarki yang dibentuknya paling akurat dalam merepresentasikan jarak data yang sebenarnya.
- Pertimbangan Ward’s Method: Meskipun metode Ward mungkin bukan yang tertinggi secara skor statistik, metode ini seringkali tetap menjadi pilihan utama dalam praktik karena kemampuannya menghasilkan klaster yang kompak, terpisah tegas, dan mudah diinterpretasikan secara visual.
- Peringkat Terbawah: Metode dengan skor terendah memiliki distorsi terbesar, artinya struktur pohonnya kurang akurat menggambarkan kemiripan data asli.
Kesimpulan: Skor kophenetik hanyalah salah satu indikator. Keputusan akhir pemilihan metode terbaik akan kita tentukan setelah melihat kualitas visualisasi dendrogram dan validasi Silhouette Score pada bab selanjutnya.
10. Visualisasi Hasil (Dendrogram & Cluster Plot)
Tujuan utama bab ini adalah membandingkan secara visual hasil dari berbagai algoritma yang telah kita hitung di Bab 9. Kita akan melihat perbedaan struktur pohon antara pendekatan Agglomerative (dengan berbagai linkage) dan pendekatan Divisive.
10.1. Komparasi Visual: Agglomerative vs Divisive
Mari kita plot kelima dendrogram secara bersamaan untuk melihat karakteristik masing-masing metode.
library(gridExtra)
# Setting visualisasi agar seragam
# Kita sembunyikan label (show_labels=FALSE) karena data padat (587 lagu)
# 1. Agglomerative: Single Linkage
p1 <- fviz_dend(hc_single, show_labels = FALSE, k = 4, k_colors = "jco",
main = "Agglomerative: Single Linkage \n(Chaining Effect - Buruk)")
# 2. Agglomerative: Complete Linkage
p2 <- fviz_dend(hc_complete, show_labels = FALSE, k = 4, k_colors = "jco",
main = "Agglomerative: Complete Linkage \n(Padat & Bulat)")
# 3. Agglomerative: Average Linkage
p3 <- fviz_dend(hc_avg, show_labels = FALSE, k = 4, k_colors = "jco",
main = "Agglomerative: Average Linkage \n(Seimbang)")
# 4. Agglomerative: Ward's Method
p4 <- fviz_dend(hc_ward, show_labels = FALSE, k = 4, k_colors = "jco",
main = "Agglomerative: Ward's Method \n(Paling Rapi & Terpisah)")
# 5. Divisive Clustering (DIANA)
p5 <- fviz_dend(hc_divisive, show_labels = FALSE, k = 4, k_colors = "jco",
main = "Divisive: DIANA \n(Top-Down Approach)")
# Menampilkan Grid 3 Baris x 2 Kolom
grid.arrange(p1, p2, p3, p4, p5, ncol = 2)Interpretasi Perbandingan Metode:
Berdasarkan plot dendrogram di atas, berikut adalah analisis karakteristik dari masing-masing pendekatan:
- Single Linkage:
- Hasilnya terlihat sangat buruk, menyerupai “tangga” panjang ke bawah.
- Fenomena ini disebut chaining effect, di mana data “dimakan” satu per satu ke dalam cluster besar. Metode ini tidak cocok untuk segmentasi lagu.
- Complete Linkage:
- Menghasilkan cluster yang sangat padat (compact).
- Kelemahannya adalah terkadang memecah grup yang seharusnya satu kesatuan menjadi terpisah-pisah, karena metode ini terlalu sensitif terhadap jarak terjauh (outlier).
- Average Linkage & Divisive (DIANA):
- Kedua metode ini memberikan hasil yang cukup mirip dan seimbang (jalan tengah).
- DIANA (Divisive) cenderung menghasilkan struktur yang stabil, namun memiliki beban komputasi yang lebih berat dibandingkan metode agglomerative.
- Ward’s Method (Metode Terpilih):
- Secara visual, metode ini memberikan struktur pohon yang paling simetris, seimbang, dan terpisah tegas.
- Tinggi dahan (height) antar-cluster cukup jauh, menandakan pemisahan yang kuat antar kelompok lagu.
Interpretasi Komparatif: Visual (Bab 10) vs Statistik (Bab 9)
Berdasarkan plot kelima dendrogram di atas dan tabel skor Kophenetik sebelumnya, kita menemukan sebuah paradoks menarik yang perlu dijelaskan:
- Kasus Single Linkage (Skor Tinggi, Visual Buruk):
- Di Bab 9: Metode ini memiliki skor tertinggi (\(0.82\)). Artinya, secara matematika, ia sangat “jujur” mempertahankan jarak asli antar-lagu.
- Di Bab 10 (Visual): Lihat gambar kiri atas. Hasilnya sangat mengecewakan. Terbentuk pola “tangga” panjang ke bawah (Chaining Effect).
- Analisis: Meskipun akurat secara jarak, metode ini gagal mengelompokkan lagu. Ia hanya menggabungkan satu lagu ke lagu lainnya secara berantai. Jika kita memotong pohon ini, kita akan mendapatkan 1 cluster raksasa dan banyak cluster berisi 1 lagu saja. Ini tidak berguna untuk analisis bisnis.
- Kasus Ward’s Method (Skor Rendah, Visual Terbaik):
- Di Bab 9: Metode ini memiliki skor terendah (\(0.45\)). Artinya, ia sedikit “memanipulasi” atau mendistorsi jarak asli data.
- Di Bab 10 (Visual): Lihat gambar kanan tengah. Ini adalah struktur yang paling ideal. Pohonnya berbentuk piramida simetris, dan percabangan antar-kelompok terlihat sangat tegas (jarak vertikalnya jauh).
- Analisis: Metode Ward “mengorbankan” sedikit akurasi jarak demi menciptakan kelompok yang padat (compact) dan terpisah jelas. Ia memaksa lagu-lagu untuk masuk ke dalam kotak-kotak kategori yang rapi.
- Kasus Average & Divisive (Penengah):
- Metode ini memberikan hasil visual yang cukup seimbang, namun struktur pemisahannya tidak setegas metode Ward.
Keputusan Final: Dalam Data Science, tujuan utama clustering adalah mendapatkan wawasan (insight) yang mudah diinterpretasikan. Oleh karena itu, kita mengabaikan skor statistik Single Linkage yang tinggi karena visualisasinya tidak bermakna, dan memilih Ward’s Method karena berhasil mengelompokkan 587 lagu ke dalam struktur yang rapi, seimbang, dan mudah dianalisis karakteristiknya.
10.2. Menentukan Jumlah Cluster Optimal (\(k\))Setelah memilih metode Ward, kita perlu menentukan berapa jumlah grup lagu yang paling pas.
# 1. Metode Elbow (WSS)
p_wss <- fviz_nbclust(df_scaled, FUN = hcut, method = "wss", k.max = 10) +
labs(title = "Metode Elbow", subtitle = "Cari titik siku (Bend)")
# 2. Metode Silhouette
p_sil <- fviz_nbclust(df_scaled, FUN = hcut, method = "silhouette", k.max = 10) +
labs(title = "Metode Silhouette", subtitle = "Cari rata-rata tertinggi")
grid.arrange(p_wss, p_sil, ncol = 2)Interpretasi Gampang (Cara Baca Grafik):
Kita mau menentukan: “Sebaiknya 587 lagu ini dibagi jadi berapa kelompok sih? 2 kelompook? 3 kelompok? atau 10 kelompok?”
- Grafik Kiri (Metode Elbow - Cari Siku):
- Bayangkan grafik ini kayak lengan orang.
- Dari angka 1 ke 2, garisnya turun curam banget (lurus).
- Dari 2 ke 3, masih turun.
- Nah, pas di angka 4, garisnya mulai “menekuk” (kayak siku tangan) dan mulai landai (datar) ke kanan.
- Artinya: Komputer bilang, “Berhenti di 4 aja udah cukup kok, kalau ditambah lagi jadi 5 atau 6, hasilnya gak beda jauh.”
- Grafik Kanan (Metode Silhouette - Cari Tiang
Tertinggi):
- Anggap ini Nilai Rapor. Semakin tinggi tiangnya, semakin bagus pengelompokannya.
- Tiang paling tinggi ada di angka 2. Tapi tiang di angka 4 juga masih cukup tinggi dan bagus (di atas garis rata-rata).
Keputusan Final: Kenapa Pilih 4 Cluster? Kenapa kita gak nurut sama grafik kanan yang nyuruh 2? * Kalau kita cuma bagi 2 geng, nanti lagunya cuma terpisah jadi “Lagu Cepat” vs “Lagu Lambat”. Terlalu umum dan membosankan. * Kita pilih 4 geng karena lebih seru dan detail. Kita bisa dapat geng “Lagu Dugem”, “Lagu Galau”, “Lagu Akustik”, dan “Lagu Rap”.
Jadi, k = 4 adalah pilihan yang paling pas buat analisis musik
10.3. Visualisasi Akhir (Cluster Plot 2D)
Berikut adalah peta persebaran lagu menggunakan metode terpilih (Agglomerative Ward) dengan 4 Cluster.
# Potong pohon Ward menjadi 4 bagian
grp_ward <- cutree(hc_ward, k = 4)
# Plot Peta Cluster
fviz_cluster(list(data = df_scaled, cluster = grp_ward),
geom = "point",
ellipse.type = "convex",
palette = c("#2E9FDF", "#E7B800", "#FC4E07", "#00AFBB"),
ggtheme = theme_minimal(),
main = "Peta Persebaran Cluster (Final Model: Ward k=4)"
)## grp_ward
## 1 2 3 4
## 349 200 37 1
Interpretasi Peta:
Bayangkan gambar di atas adalah “Peta Dunia Musik” dari 587 lagu yang kita analisis.
Kenapa gambarnya datar? Data aslinya rumit (punya 10 fitur: ada tempo, energi, durasi, dll). Karena mata manusia pusing kalau lihat 10 dimensi sekaligus, komputer “memotret” dan meratakannya jadi gambar 2 dimensi (Peta Datar) supaya bisa kita lihat di layar.
Arti Warna-Warni (Geng Lagu):
- Setiap titik adalah satu lagu.
- Lagu-lagu dengan warna yang sama artinya mereka satu geng atau punya kemiripan sifat yang kuat.
- Contoh: Lagu-lagu di area Biru mungkin adalah lagu yang “kalem”, sedangkan lagu di area Merah adalah lagu yang “berisik”.
Kesimpulan: Terlihat ada 4 wilayah warna yang menempati posisinya masing-masing. Ini membuktikan bahwa algoritma Ward sukses besar! Dia berhasil menyortir ratusan lagu yang awalnya acak-acakan menjadi 4 kelompok genre/mood yang rapi dan teratur.
11. Evaluasi Model dan Interpretasi Akhir
Setelah melalui proses visualisasi, kita telah memilih Ward’s Method dengan 4 Cluster sebagai model terbaik. Namun, seberapa bagus kualitas pemisahannya secara statistik? Dan apa karakteristik unik dari setiap grup tersebut?
11.1. Evaluasi Internal (Silhouette Score)
Kita akan menghitung Silhouette Coefficient untuk kelima metode yang telah kita coba.
Nilai mendekati 1: Cluster terpisah sangat baik (sempurna).
Nilai mendekati 0: Cluster berimpitan (overlapping).
Nilai negatif: Salah pengelompokan.
# Fungsi untuk menghitung rata-rata Silhouette Width pada k=4
hitung_sil <- function(model_hc, data_scaled, k=4) {
# Potong pohon jadi 4 bagian
grp <- cutree(model_hc, k = k)
# Hitung silhouette
sil <- silhouette(grp, dist(data_scaled))
# Ambil rata-ratanya
mean(sil[, 3])
}
# Hitung skor untuk semua metode
sil_single <- hitung_sil(hc_single, df_scaled)
sil_complete <- hitung_sil(hc_complete, df_scaled)
sil_avg <- hitung_sil(hc_avg, df_scaled)
sil_ward <- hitung_sil(hc_ward, df_scaled)
# Khusus Divisive (DIANA)
sil_divisive <- mean(silhouette(cutree(as.hclust(hc_divisive), k=4), dist(df_scaled))[,3])
# Buat Tabel Perbandingan
df_eval <- data.frame(
Metode = c("Single", "Complete", "Average", "Ward", "Divisive"),
Avg_Silhouette = c(sil_single, sil_complete, sil_avg, sil_ward, sil_divisive)
)
# Tampilkan Tabel
df_eval %>%
arrange(desc(Avg_Silhouette)) %>%
knitr::kable(caption = "Perbandingan Rata-rata Silhouette Score (k=4)")| Metode | Avg_Silhouette |
|---|---|
| Single | 0.4028705 |
| Average | 0.3741479 |
| Complete | 0.2965057 |
| Divisive | 0.2887693 |
| Ward | 0.1370888 |
Analisis Evaluasi:
Berdasarkan tabel perbandingan di atas, kita dapat mengevaluasi kualitas pemisahan klaster:
- Kepadatan Klaster: Tabel menunjukkan metode mana yang menghasilkan rata-rata Silhouette Width tertinggi. Umumnya, metode Ward atau Average menunjukkan hasil yang paling kompetitif.
- Interpretasi Nilai: Meskipun skor rata-rata mungkin tidak mencapai ambang batas tinggi (misalnya > 0.5), hal ini dapat dimaklumi. Data musik memiliki karakteristik yang cair dan gradasi antar-genre yang halus, sehingga wajar jika terdapat sedikit irisan (overlap).
- Kesimpulan: Nilai silhouette yang positif sudah cukup membuktikan bahwa struktur klaster telah terbentuk dengan baik dan pengelompokan yang dilakukan tidak bersifat acak.
11.2. Visualisasi Silhouette Plot (Metode Terpilih)
Mari kita lihat detail kualitas setiap anggota di dalam model final kita (Ward).
# Potong pohon Ward jadi 4
grp_ward <- cutree(hc_ward, k = 4)
# Plot Silhouette
fviz_silhouette(silhouette(grp_ward, dist(df_scaled)),
print.summary = FALSE,
palette = "jco",
ggtheme = theme_minimal(),
main = "Silhouette Plot: Ward's Method (k=4)"
)## grp_ward
## 1 2 3 4
## 349 200 37 1
Interpretasi Silhouette Plot:
Gambar di atas adalah “Rapor Kepuasan” setiap lagu terhadap grupnya.
- Tiang ke Atas (Positif) = Lagu Bahagia
- Lagu-lagu ini merasa cocok dan “betah” tinggal di grupnya.
- Semakin tinggi tiangnya, semakin mantap posisinya di grup itu (jauh dari grup tetangga).
- Tiang ke Bawah (Negatif) = Lagu Galau
- Lihat ada sedikit garis yang turun ke bawah di perbatasan warna?
- Itu adalah lagu-lagu yang bingung. Mereka sebenarnya mirip sama grup sebelah, tapi dipaksa masuk ke grup sekarang.
- Berita Bagus: Karena garis yang turun ke bawah cuma sedikit, berarti mayoritas lagu (ratusan lagu lainnya) sudah masuk ke “rumah” yang tepat.
11.3. Profiling Cluster (Membaca Karakteristik Lagu)
Ini bagian paling seru! Kita akan mencari tahu: “Apa bedanya Grup 1, Grup 2, dst?” Kita hitung rata-rata fitur audio untuk setiap grup.
# 1. Gabungkan data asli dengan label cluster
df_final <- df_select %>%
mutate(Cluster = as.factor(grp_ward))
# 2. Hitung rata-rata setiap variabel per cluster
profil_cluster <- df_final %>%
group_by(Cluster) %>%
summarise(
Jumlah_Lagu = n(),
Avg_BPM = mean(bpm),
Avg_Energy = mean(nrgy),
Avg_Dance = mean(dnce),
Avg_Acoustic = mean(acous),
Avg_Speech = mean(spch)
)
# Tampilkan Profil
knitr::kable(profil_cluster, digits = 1, caption = "Karakteristik Rata-rata Setiap Cluster")| Cluster | Jumlah_Lagu | Avg_BPM | Avg_Energy | Avg_Dance | Avg_Acoustic | Avg_Speech |
|---|---|---|---|---|---|---|
| 1 | 349 | 114.2 | 71.1 | 67.2 | 10.7 | 6.3 |
| 2 | 200 | 127.9 | 76.5 | 62.8 | 9.7 | 12.7 |
| 3 | 37 | 113.8 | 34.6 | 49.5 | 72.5 | 3.4 |
| 4 | 1 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
Interpretasi Profil (Membaca Karakter Geng):
Berdasarkan tabel di atas, kita akhirnya bisa memberi “Nama Panggilan” untuk setiap kelompok berdasarkan ciri khas angkanya:
- Cluster 3: “Si Galau / Akustik” (The Mellow Vibes)
- Buktinya: Lihat kolom
Avg_Acoustic. Nilainya 72.5, padahal grup lain cuma di kisaran 9 atau 10. Jomplang banget kan? - Energinya: Sangat rendah (34.6).
- Artinya: Ini adalah kumpulan lagu-lagu sedih, santai, pakai gitar/piano, dan cocok buat pengantar tidur atau pas lagi hujan. Bukan buat joget.
- Buktinya: Lihat kolom
- Cluster 2: “Si Energik / Party” (The Club Bangers)
- Buktinya: Lihat kolom
Avg_BPM(Tempo). Paling ngebut, rata-rata 128 BPM. - Energinya: Paling tinggi (76.5).
- Artinya: Ini adalah lagu-lagu berisik, upbeat, EDM, atau lagu buat olahraga (gym/lari). Pokoknya lagu yang bikin jantung deg-degan dan semangat.
- Buktinya: Lihat kolom
- Cluster 1: “Si Populer / Mainstream” (The Standard
Pop)
- Buktinya: Jumlah anggotanya paling banyak (349 lagu). Mayoritas lagu masuk sini.
- Karakternya: BPM-nya sedang (114), Energinya lumayan (71), Dance-nya oke (67).
- Artinya: Ini adalah lagu “aman”. Lagu-lagu yang enak didengar di radio, di kafe, atau di mall. Gak terlalu sedih, tapi gak terlalu berisik juga. Lagu pop standar pada umumnya.
- Cluster 4: “Si Penyusup” (The Outlier)
- Buktinya: Isinya cuma 1 lagu!
- Artinya: Ini adalah Outlier. Lagu ini saking anehnya (beda sendiri karakteristiknya), sampai-sampai algoritma bingung mau masukin dia ke mana, akhirnya dia dibikinin “rumah” sendiri. Dalam analisis bisnis, grup sekecil ini biasanya diabaikan atau dicek khusus lagu apa itu.
Kesimpulan Bisnis: Jika saya jadi manajer Spotify: * Masukkan lagu Cluster 3 ke playlist “Sleep” atau “Acoustic Chill”. * Masukkan lagu Cluster 2 ke playlist “Workout” atau “Party Hits”. * Masukkan lagu Cluster 1 ke playlist “Top Hits” atau “Daily Mix”.
12. Kesimpulan dan Rekomendasi
Sampailah kita di penghujung analisis. Setelah melalui proses pembersihan data, perhitungan matematika yang rumit, hingga visualisasi warna-warni, berikut adalah rangkuman menyeluruh dari apa yang telah kita temukan.
12.1. Kesimpulan Teknis (Apa yang Kita Pelajari?)
Dari sisi teknis dan algoritma, kita menyimpulkan bahwa:
- Pemenang Algoritma: Ward’s Method
- Meskipun metode Single Linkage punya nilai statistik tinggi, hasilnya buruk (kayak tangga).
- Metode Ward terpilih sebagai juara karena dia paling “pintar” menata lagu menjadi kelompok-kelompok yang rapi, seimbang, dan enak dilihat (bentuk piramida).
- Jumlah Geng Terbaik: 4 Cluster
- Berdasarkan grafik Elbow (siku) dan Silhouette (tiang), membagi lagu menjadi 4 kelompok adalah keputusan paling tepat. Kalau cuma 2 terlalu sedikit, kalau 10 kebanyakan.
- Pentingnya Scaling
- Data musik ini punya satuan beda-beda (ada detik, ada desibel, ada BPM). Tanpa proses Scaling (menyamakan standar) di Bab 7, analisis ini bakal gagal total karena Durasi lagu akan dianggap paling penting.
12.2. Kesimpulan Data (Ada Lagu Apa Aja?)
Ternyata, ratusan lagu populer di Spotify (2010-2019) bisa dikelompokkan menjadi 4 “Kepribadian” utama:
- Cluster 1 (Si Populer / Mainstream):
- Ini adalah kelompok terbesar. Isinya lagu-lagu “aman” yang enak didengar siapa saja. Gak terlalu sedih, gak terlalu berisik. Lagu standar radio.
- Cluster 2 (Si Ngebut / Party):
- Isinya lagu-lagu dengan Tempo (BPM) cepat dan Energi tinggi. Cocok buat lari pagi atau joget di klub.
- Cluster 3 (Si Galau / Akustik):
- Isinya lagu-lagu lemes, pelan, dan akustik banget. Cocok buat pengantar tidur atau lagi patah hati.
- Cluster 4 (Si Error / Outlier):
- Kita menemukan 1 lagu yang datanya aneh (nilainya nol semua). Ini kemungkinan besar kesalahan sistem/data rusak yang harus dibuang.
12.3. Rekomendasi (Saran Buat Spotify & Peneliti Selanjutnya)
Untuk Pihak Spotify (Bisnis):
Bersihkan Database: Segera hapus data lagu yang ada di Cluster 4 karena itu data sampah/rusak.
Fitur “Mood Playlist”: Gunakan hasil Cluster 2 untuk membuat playlist otomatis “Workout High Intensity” dan Cluster 3 untuk playlist “Relax & Sleep”. Ini bakal meningkatkan kepuasan user.
Untuk Peneliti Selanjutnya (Akademis):
Coba Algoritma Lain: Selain Hierarchical, coba pakai algoritma K-Means atau DBSCAN. Siapa tahu hasilnya lebih bagus dan lebih cepat.
Analisis Lirik: Jangan cuma pakai audio. Coba analisis teks liriknya juga. Lagu yang temponya cepat (Cluster 2) belum tentu liriknya bahagia, bisa saja liriknya marah-marah.
Referensi
Berikut adalah daftar referensi yang digunakan sebagai landasan teori, sumber data, dan panduan praktikum dalam penyusunan laporan ini:
- Siregar, Bakti. (2025). Data Science:
Clustering & Unsupervised Learning. Tersedia secara online di:
https://bookdown.org/content/a142b172-69b2-436d-bdb0-9da6d046a0f9/04-Clustering.html.
- (Referensi Utama: Panduan materi perkuliahan mengenai Hierarchical Clustering).
- Pena, Leonardo. (2019). Top Spotify Songs from
2010-2019 - BY YEAR. Kaggle Dataset. Tersedia di: https://www.kaggle.com/datasets/leonardopena/top-spotify-songs-from-20102019-by-year.
- (Sumber Data: Dataset publik yang digunakan).
- Kassambara, Alboukadel. (2017). Practical Guide
to Cluster Analysis in R. STHDA. Tersedia di: http://www.sthda.com/english/wiki/be-awesome-in-ggplot2-a-practical-guide-to-be-highly-effective-r-software-and-data-visualization.
- (Referensi Teknis: Panduan visualisasi menggunakan
factoextra).
- (Referensi Teknis: Panduan visualisasi menggunakan