Pengelompokan Top Player dengan Analisis Cluster Hierarki

Al-Fazrin Banapon
5 min readJun 19, 2019

Assalamualaikum Mate …..

What’s Up Data Enthusiast !!

Nah, akhirnya mood ana udah balik lagi buat share sedikti ilmu yang ana tau untuk kalian para Data Enthusiast yang insya Allah dirahmati Allah SWT. By The Way, har ini kita akan bahas yang namanya Clustering.

What’s Clustering ?

Clustering (Pengelompokan) adalah suatu teknik pengelompokan titik (data) kedalam suatu kelompok atau grup tertentu yang titik titik didalam kelompok (cluster) tersebut mempunyai kesamaan, namun berbeda dengan titik titik di cluster yang lain.

Lebih mudahnya kaya gini, gimana caranya seorang karyawan di gudang dapat mengelompokan dus yang sangat banyak dengan warna yang beragam ? Tentunya salah satu cara yang cukup mudah yang dapat dilakukan karyawan tersebut adalah dengan mengelompokkan dus tersebut ke suatu cluster berdasarkan kemiripann warnanya bukan.

Image result for unsupervised machine learning gif

Nah, kurang lebih ilustrasinya kaya gini ranger ….

Clustering sendiri terdapat beberapa teknik, salah satunya adalah teknik pengelompokan dengan hierarki. Teknik ini adalah salah satu teknik clustering yang cukup populer pada machine learning mate. Teknik hierarki ini yang akan kita bahas tuntas hari ini dengan memanfaatkan salah satu tool open source yang udah gk asing lagi buat seorang data analysis yaitu R, untuk teknik clustering lain yakni k means dapat mate baca disini.

Lets do it !

Langkah pertama adalah persiapkan segala package yang dibutuhkan dalam analisis ini

library(tidyverse)  # data manipulation
library(cluster) # clustering algorithms
library(factoextra) # clustering visualization
library(dendextend) # for comparing two dendrogram
library(corrplot) # for correlation visualize

Selanjtunya adalah import data dalam R, dataset dapat diakses disini.

df <- read.delim("D:...../data.csv", sep=",")

Tidak semua variabel digunakan dalam pengujian, variabel yang di gunakan hanya variabel-variabel yang sejalan dengan tujuan clustering ini, sehingga diperlukan beberapa teknik data mining untuk memperoleh variabel-variabel yang diingkan.

status_data_top <- df %>% 
filter(Overall >= 85) %>% #Selain filter dapat juga gunakan subset
select(Name,Position, 55:88)

Beradasarkan script di atas, dapat kita ketahui bahwa pemain yang akan dikelompokan adalah para pemain dengan nilai overall ≥ 85.

Salah satu langkah yang harus dilewati adalah pengecekan korelasi dengan cara sebagi berikut.

status_data_top %>% 
select(-Name,-Position) %>%
cor %>%
corrplot(type = "lower") #all

Gambar diatas menampilkan korelasi setiap variabel, terdapat beberapa variabel yang mempunyai korelasi tinggi. Korelasi yang tinggi dapat menyebabkan masalah multikolinearitas sehingga variabel-variabel yang mempunyai korelasi tinggi dapat dieliminasi.

status_data_top %>% 
select(-Name,- Position,-contains("GK"),- Marking,-SlidingTackle,
-StandingTackle, -Positioning, -Penalties, -Composure, -LongPassing, -LongShots, -ShotPower, -BallControl, -Volleys, -Crossing, -Finishing) %>%
cor %>%
corrplot(type = "lower") #all

Cluster Hierarki

Berdasarkan hasil pengujian korelasi sehingga hanya 16 variabel yang di gunakan.

data_for_dist <- df %>%
filter(Overall >= 85) %>%
select(HeadingAccuracy, ShortPassing, Dribbling, Curve, FKAccuracy,
Acceleration, SprintSpeed, Agility, Reactions, Balance, Jumping,
Stamina, Strength, Aggression, Interceptions, Vision)
rownames(data_for_dist) <- status_data_top$Name[1:110]

Terdapat perbedaan beberapa fungsi pada R untuk komputasi clustering hierarki. Yang pertama yang akan gunakan adalah menggunakan fungsi hclust, dengan sebelumnya menghitung terlebih dulu jaraknya dengan perintah dist.

# Dissimilarity matrix
dist <- dist(data_for_dist, method = "euclidean")
# Hierarchical clustering using Complete Linkage
hc1 <- hclust(dist, method = "complete")
# Plot the obtained dendrogram
plot(hc1, cex = 0.6, hang = -1)

Alternatif lain yang dapat digunakan adalah dengan menggunakan fungsi agnes kedua fungsi ini bekerja hampir sama, namun fungsi agnes dapat menampilkan koefisien aglomerative (nilai koefisien mendekati 1 artinya pengelompokan semakin kuat/baik).

# Compute with agnes
hc2 <- agnes(data_for_dist, method = "complete")
# Agglomerative coefficient
hc2$ac
## [1] 0.8526465

fungsi ini memungkinkan mate untuk menemukan metode yang terbaik pada saat berselancar dengan teknik hierarki ini.

# methods to assess
m <- c( "average", "single", "complete", "ward")
names(m) <- c( "average", "single", "complete", "ward")
# function to compute coefficient
ac <- function(x) {
agnes(data_for_dist, method = x)$ac
}
map_dbl(m, ac)
## average single complete ward
## 0.8183192 0.7710234 0.8526465 0.9573419

dengan metode ini dapat memungkinkan para mate untuk menemukan metode pengelompokkan hierarki tertentu yang dapat mengidentifikasi struktur pengelompokan yang lebih baik. Berdasarkan hasil diatas dapat kita ketahui bahwa metode ward adalah metode tebaik.

hc3 <- agnes(data_for_dist, method = "ward")
pltree(hc3, cex = 0.6, hang = -1, main = "Dendrogram of agnes")

Menentukan Cluster Optimal

Terdapat beberapa metode dalam menentukan cluster optimal, sebagai berikut

fviz_nbclust(data_for_dist, FUN = hcut, method = "wss")
fviz_nbclust(data_for_dist, FUN = hcut, method = "silhouette")
gap_stat <- clusGap(data_for_dist, FUN = hcut, nstart = 25, K.max = 10, B = 50)
fviz_gap_stat(gap_stat)

terdapat beberapa rekomendasi jumlah kluster, ana mencoba menggunakan 3 cluster.

cutree <- cutree(hc3,3)
clust_data <- data.frame(Name = names(cutree),cluster = cutree,row.names = NULL)
View(clust_data)

Selanjutnya adalah mengetahui karakterisitik dari setiap cluster, dengan cara sebagai berikut

only_status_data_top <- data.frame(data_for_dist, clust_data)
plot_data <- tidyr::gather(only_status_data_top,param,value,-cluster,-Name)
g <- ggplot(data = plot_data,aes(x=param,y=value,group=param,fill=param))
g <- g + geom_violin()
g <- g + facet_wrap(~cluster)
ggplotly(g)

Berdasarkan violin plot di atas dapat disimpulkan bahwa, pemain-pemain yang berada pada cluster 1 adalah pemain yang mempunyai keseluruhan skill tinggi. Sedangkan cluster 2 adalah cluster untuk para penjaga gawang. Dan cluster 3 adalah pemain yang hampir mempunyai skill tinggi namun mempunyai balance yang cukup rendah.

Biar makin joss pemahamannya, leh ugah nih mampir di rpubs ana biar lebih jelas liat output dari setiap pengujian.

the end of the penjelasan singkat ini, semoga bermanfaat.

Wassalamualaikum Matee ….

--

--