Ujian Tulis Berbasis Komputer (UTBK) merupakan ujian masuk Perguruan Tinggi Negeri yang diadakan oleh Lembaga Tes masuk Perguruan Tinggi (LTMPT) Kementrian Riset, Teknologi dan Pendidikan Tinggi (Ristekdikti). UTBK dapat diikuti oleh siswa lulusan tahun yang sama dengan pelaksanaan UTBK hingga 2 tahun setelah kelulusan pendidikan SMA/MA/SMK dan sederajat. Nilai yang didapatkan dari UTBK kemudian digunakan untuk mengikuti Seleksi Bersama Masuk Perguruan Tinggi Negeri (SBMPTN).
Analisis clustering menjadi hal yang sangat penting dalam melakukan efisiensi waktu belajar calon peserta UTBK. Salah satu contohnya yaitu calon peserta UTBK Saintek dapat meningkatkan kemampuan kuantitatif dengan mempelajari mata ujian seperti Matematika IPA atau Fisika (Analisis keterkaitan nilai UTBK dapat dilihat disini). Oleh karena itu penulis mencoba membuat clustering peserta UTBK 2019 berdasarkan skor yang mereka peroleh. Clustering akan dibagi menajdi dau kelompok yaitu clustering skor Saintek dan clustering skor Soshum
library(readxl) #Untuk membaca data excel
library(tidyverse) #Untuk data pre-processing
library(GGally) #Untuk cek korelasi prediktor
library(factoextra) #Untuk visualisasi hasil clustering# Memanggil data saintek
saintekdata <- read_excel("UTBK2019.xlsx", sheet = "Saintek")
# Inspeksi data
glimpse(saintekdata)## Rows: 86,569
## Columns: 20
## $ index <dbl> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...
## $ id_first_major <dbl> 3321065, 3211015, 3721093, 3321096, 5211104, ...
## $ first_major <chr> "SEKOLAH ILMU DAN TEKNO. HAYATI - PROG. SAINS...
## $ capacity_first_major <dbl> 64, 72, 68, 120, 30, 125, 40, 100, 50, 72, 12...
## $ id_first_university <dbl> 332, 321, 372, 332, 521, 611, 341, 353, 711, ...
## $ first_university <chr> "INSTITUT TEKNOLOGI BANDUNG", "UNIVERSITAS IN...
## $ id_second_major <dbl> 3331187, 3611066, 3551302, 3551194, 5211085, ...
## $ second_major <chr> "PSIKOLOGI", "KEDOKTERAN", "TEKNOLOGI PANGAN"...
## $ capacity_second_major <dbl> 80, 79, 50, 90, 64, 50, 41, 40, 50, 125, 125,...
## $ id_second_university <dbl> 333, 361, 355, 355, 521, 333, 341, 353, 711, ...
## $ second_university <chr> "UNIVERSITAS PADJADJARAN", "UNIVERSITAS GADJA...
## $ id_user <dbl> 4, 14, 19, 23, 28, 29, 33, 37, 39, 43, 45, 46...
## $ score_bio <dbl> 400, 816, 562, 700, 461, 516, 675, 641, 440, ...
## $ score_fis <dbl> 400, 666, 839, 669, 619, 503, 584, 567, 410, ...
## $ score_kim <dbl> 400, 651, 624, 692, 441, 410, 578, 600, 554, ...
## $ score_kmb <dbl> 400, 678, 700, 679, 593, 717, 670, 627, 645, ...
## $ score_kpu <dbl> 400, 685, 781, 692, 563, 614, 647, 553, 587, ...
## $ score_kua <dbl> 400, 706, 464, 813, 500, 641, 706, 597, 502, ...
## $ score_mat <dbl> 400, 695, 551, 507, 666, 479, 478, 529, 649, ...
## $ score_ppu <dbl> 400, 562, 668, 573, 370, 512, 590, 691, 447, ...
Berikut spesifikasi setiap kolom yang terdapat pada dataset :
index, merupakan nomor urut baris yang dimulai dari 0 sampai (n-1) baris.
id_first_major, merupakan kode program studi pilihan pertama peserta.
first_major, merupakan nama program studi pilihan pertama peserta.
capacity_first_major, merupakan daya tampung program studi pilihan pertama peserta yang dapat diterima.
id_first_university, merupakan kode Perguruan Tinggi Negeri pilihan pertama peserta.
first_university, merupakan nama Perguruan Tinggi Negeri pilihan pertama peserta.
id_second_major, merupakan kode program studi pilihan kedua peserta.
second_major, merupakan nama program studi pilihan kedua peserta.
capacity_second_major, merupakan daya tampung program studi pilihan kedua peserta yang dapat diterima.
id_second_university, merupakan kode Perguruan Tinggi Negeri pilihan kedua peserta.
second_university, merupakan nama Perguruan Tinggi Negeri pilihan kedua peserta.
id_user, merupakan nomor urut peserta (digabung dengan peserta soshum)
score_bio, merupakan nilai mata ujian Biologi user.
score_fis, merupakan nilai mata ujian Fisika user.
score_kim, merupakan nilai mata ujian Kimia user.
score_kmb, merupakan nilai mata ujian Kemampuan Memahami Bacaan & Menulis user.
score_kpu, merupakan nilai mata ujian Kemampuan Penalaran Umum user.
score_kua, merupakan nilai mata ujian Kemampuan Kuantitatif user.
score_mat, merupakan nilai mata ujian Matematika Saintek user.
score_ppu, merupakan nilai mata ujian Pengetahuan & Pemahaman Umum user.
pass_university, merupakan keputusan apakah dinyatakan berhasil atau gagal dari SBMPTN.
# Cek missing value
anyNA(saintekdata)## [1] FALSE
Dataset tidak memiliki missing value di setiap selnya, sehingga tidak perlu dilakukan pembersihan data.
Dari semua kolom yang terdapat pada dataframe, yang akan digunakan sebagai data pembuatan model terdapat pada kolom berbagai macam skor mata ujian UTBK saja, sehingga kolom lain yang tidak diperlukan dapat dibuang.
#Subsetting kolom
saintekdata <- saintekdata %>%
select(c(score_bio , score_fis , score_kim , score_mat , score_kmb , score_kpu , score_kua , score_ppu))
# Cek kesesuaian kolom
head(saintekdata)# Memanggil data soshum
soshumdata <- read_excel("UTBK2019.xlsx", sheet = "Soshum")
# Inspeksi data
glimpse(soshumdata)## Rows: 61,198
## Columns: 21
## $ index <dbl> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...
## $ id_first_major <dbl> 3322014, 3212057, 3722057, 3212081, 3812106, ...
## $ first_major <chr> "FAKULTAS SENIRUPA DAN DESAIN (FSRD)", "ILMU ...
## $ capacity_first_major <dbl> 14, 16, 20, 16, 48, 26, 20, 16, 16, 45, 16, 1...
## $ id_first_university <dbl> 332, 321, 372, 321, 381, 142, 323, 362, 322, ...
## $ first_university <chr> "INSTITUT TEKNOLOGI BANDUNG", "UNIVERSITAS IN...
## $ id_second_major <dbl> 3532154, 3322022, 1912042, 3212301, 3852034, ...
## $ second_major <chr> "DESAIN KOMUNIKASI VISUAL", "SEKOLAH BISNIS D...
## $ capacity_second_major <dbl> 25, 14, 18, 16, 40, 26, 16, 25, 32, 45, 30, 4...
## $ id_second_university <dbl> 353, 332, 191, 321, 385, 142, 322, 353, 336, ...
## $ second_university <chr> "UNIVERSITAS SEBELAS MARET", "INSTITUT TEKNOL...
## $ id_user <dbl> 26, 35, 44, 55, 171, 173, 184, 213, 215, 234,...
## $ score_eko <dbl> 778, 579, 600, 559, 838, 424, 686, 503, 580, ...
## $ score_geo <dbl> 486, 631, 481, 563, 734, 381, 663, 583, 485, ...
## $ score_kmb <dbl> 679, 710, 314, 646, 654, 526, 763, 529, 517, ...
## $ score_kpu <dbl> 594, 700, 432, 638, 613, 452, 556, 563, 544, ...
## $ score_kua <dbl> 643, 810, 522, 591, 690, 503, 558, 513, 608, ...
## $ score_mat <dbl> 686, 656, 494, 538, 315, 561, 537, 422, 467, ...
## $ score_ppu <dbl> 559, 638, 461, 585, 628, 637, 597, 601, 454, ...
## $ score_sej <dbl> 392, 535, 467, 647, 660, 488, 612, 499, 469, ...
## $ score_sos <dbl> 676, 686, 574, 589, 674, 435, 569, 485, 501, ...
Berikut spesifikasi setiap kolom yang terdapat pada dataset :
index, merupakan nomor urut baris yang dimulai dari 0 sampai (n-1) baris.
id_first_major, merupakan kode program studi pilihan pertama peserta.
first_major, merupakan nama program studi pilihan pertama peserta.
capacity_first_major, merupakan daya tampung program studi pilihan pertama peserta yang dapat diterima.
id_first_university, merupakan kode Perguruan Tinggi Negeri pilihan pertama peserta.
first_university, merupakan nama Perguruan Tinggi Negeri pilihan pertama peserta.
id_second_major, merupakan kode program studi pilihan kedua peserta.
second_major, merupakan nama program studi pilihan kedua peserta.
capacity_second_major, merupakan daya tampung program studi pilihan kedua peserta yang dapat diterima.
id_second_university, merupakan kode Perguruan Tinggi Negeri pilihan kedua peserta.
second_university, merupakan nama Perguruan Tinggi Negeri pilihan kedua peserta.
id_user, merupakan nomor urut peserta (digabung dengan peserta soshum)
score_eko, merupakan nilai mata ujian Ekonomi user.
score_geo, merupakan nilai mata ujian Geografi user.
score_kmb, merupakan nilai mata ujian Kemampuan Memahami Bacaan & Menulis user.
score_kpu, merupakan nilai mata ujian Kemampuan Penalaran Umum user.
score_kua, merupakan nilai mata ujian Kemampuan Kuantitatif user.
score_mat, merupakan nilai mata ujian Matematika Soshum user.
score_ppu, merupakan nilai mata ujian Pengetahuan & Pemahaman Umum user.
score_sej, merupakan nilai mata ujian Sejarah user.
score_sos, merupakan nilai mata ujian Sosiologi user.
# Cek missing value
anyNA(soshumdata)## [1] FALSE
Dataset tidak memiliki missing value di setiap selnya, sehingga tidak perlu dilakukan pembersihan data.
Dari semua kolom yang terdapat pada dataframe, yang akan digunakan sebagai data pembuatan model terdapat pada kolom berbagai macam skor mata ujian UTBK saja, sehingga kolom lain yang tidak diperlukan dapat dibuang.
#Subsetting kolom
soshumdata <- soshumdata %>%
select(c(score_eko , score_geo , score_sej , score_sos , score_mat , score_kmb , score_kpu , score_kua , score_ppu,))
# Cek kesesuaian kolom
head(soshumdata)Clustering menggunakan teknik k-means menggunakan konsep berupa jumlah cluster yang dapat ditentukan oleh user sesuai kebuhan serta setiap cluster memiliki pusat cluster (centroid)
Sebelum melakukan clustering ada baiknya kita melihat semua kebungkinan pembentukan cluster dari data berdasarkan nilai withinss atau WSS menggunakan Elbow method
Dikarenakan data yang sangat banyak hingga mencapai puluhan ribu dan tidak dapat dikomparasikan secara keseluruhan oleh Elbow Method, maka dibentuk sampling data hingga data mampu dikomparasikan.
set.seed(100)
row_data <- nrow(saintekdata)
# sampel diambil sebanyak 500 data acak
index <- sample(row_data, 500)
sample_saintekdata <- saintekdata[ index, ]
# Melihat optimal cluster
fviz_nbclust(x = sample_saintekdata, method = "wss", kmeans)Grafik di atas menunjukkan nilai WSS total yang dihasilkan untuk setiap cluster yang dibentuk. Ketentuan yang dapat membantu keputusan dalam pemilihan banyak cluster diantaranya yaitu 1. Nilai WSS diusahakan mendekati nol (atau sekecil mungkin). 2. Cluster yang efektif dipakai apabila tidak ada pengurangan WSS yang signifikan seiring dengan penambahan jumlah cluster yang dipakai, atau secara matematis persyaratan tersebut dapat ditulis sebagai
\[WSS_k - WSS_{k-1} \simeq 0\]
Berdasarkan grafik di atas maka diambil jumlah cluster yang akan digunakan sebanyak 5 cluster. Pengurangan nilai WSS di cluster ke-6 dan selanjutnya dapat dikatakan tidak signifikan.
# Membuat model cluster
set.seed(100)
saintek_cluster <- kmeans(x = saintekdata, centers = 5)## Warning: Quick-TRANSfer stage steps exceeded maximum (= 4328450)
# Visualisasi model
fviz_cluster(object = saintek_cluster,
data = saintekdata,
labelsize = 0, show.clust.cent = T)Plot di atas telah menggambarkan sistem Clusterisasi dari data dengan jumlah cluster sebanyak 5 buah. Terlihat setiap cluster memiliki wilayahnya masing masing dan tidak bertumpuk dengan cluster lainnya.
Data cluster kemudian digabung dengan data awal.
# Menggabungkan kolom cluster ke dataframe awal
saintekdata <- saintekdata %>%
mutate(cluster = as.factor(saintek_cluster$cluster))
head(saintekdata)Data yang sangat banyak tentu sulit untuk diidentifikasi spesifikasi setiap clusternya menggunakan data frame biasa. Oleh karena itu untuk mendapatkan spesifikasi setiap cluster, maka diperlukan visualisasi data secara komprehensif.
# Menyiapkan data untuk visualisasi
saintekvis <- saintekdata %>%
group_by(cluster) %>%
summarise_all(mean)# Visualisasi cluster
saintekvis %>%
pivot_longer(cols = -cluster, names_to = "type", values_to = "value") %>%
ggplot(aes(x = cluster, y = value)) +
geom_col(aes(fill = cluster)) +
facet_wrap(~type, ncol = 3) +
theme_update()Spesifikasi dari setiap cluster yang telah dibentuk yaitu :
Cluster 1 : Peserta memiliki skor yang sangat tinggi di mata ujian Matematika IPA (score_mat) dari seluruh cluster yang lainnya.
Cluster 2 : Peserta memiliki skor yang cenderung kecil di mata ujian khusus Saintek seperti Matematika IPA (score_mat), Kimia (score_kim), Fisika (score_fis), dan Biologi (score_bio).
Cluster 3 : Peserta pada umumnya memiliki skor rataan di setiap mata ujian dibanding cluster yang lain, namun lebih tinggi di skor Fisika (score_fis) dan Kimia (score_kim) dan lebih renda di skor Matematika IPA (score_mat).
Cluster 4 : Peserta memiliki skor yang relatif tinggi di setiap mata ujian. Peserta yang tergabung ke dalam cluster 4 memiliki kemungkinan besar untuk lulus dari seleksi masuk PTN menggunakan nilai UTBK.
Cluster 5 : Peserta memiliki skor yang rendah di setiap mata ujian. Peserta yang tergabung ke dalam cluster 5 sangat kecil kemungkinannya untuk lulus dari seleksi masuk PTN menggunakan nilai UTBK.
set.seed(100)
row_data2 <- nrow(soshumdata)
# sampel diambil sebanyak 500 data acak
index <- sample(row_data2, 500)
sample_soshumdata <- soshumdata[ index, ]
# Melihat optimal cluster
fviz_nbclust(x = sample_soshumdata, method = "wss", kmeans)Berdasarkan grafik di atas maka diambil jumlah cluster yang akan digunakan sebanyak 5 cluster. Pengurangan nilai WSS di cluster ke-6 dan selanjutnya dapat dikatakan tidak signifikan.
# Membuat model cluster
set.seed(100)
soshum_cluster <- kmeans(x = soshumdata, centers = 5)
# Visualisasi model
fviz_cluster(object = soshum_cluster,
data = soshumdata,
labelsize = 0, show.clust.cent = T)Plot di atas telah menggambarkan sistem Clusterisasi dari data dengan jumlah cluster sebanyak 5 buah. Terlihat setiap cluster memiliki wilayahnya masing masing dan tidak bertumpuk dengan cluster lainnya.
Data cluster kemudian digabung dengan data awal.
# Menggabungkan kolom cluster ke dataframe awal
soshumdata <- soshumdata %>%
mutate(cluster = as.factor(soshum_cluster$cluster))
head(soshumdata)Data yang sangat banyak tentu sulit untuk diidentifikasi spesifikasi setiap clusternya menggunakan data frame biasa. Oleh karena itu untuk mendapatkan spesifikasi setiap cluster, maka diperlukan visualisasi data secara komprehensif.
# Menyiapkan data untuk visualisasi
soshumvis <- soshumdata %>%
group_by(cluster) %>%
summarise_all(mean)# Visualisasi cluster
soshumvis %>%
pivot_longer(cols = -cluster, names_to = "type", values_to = "value") %>%
ggplot(aes(x = cluster, y = value)) +
geom_col(aes(fill = cluster)) +
facet_wrap(~type, ncol = 3) +
theme_update()Spesifikasi dari setiap cluster yang telah dibentuk yaitu :
Cluster 1 : Peserta memiliki skor yang rendah di setiap mata ujian. Peserta yang tergabung ke dalam cluster 1 sangat kecil kemungkinannya untuk lulus dari seleksi masuk PTN menggunakan nilai UTBK.
Cluster 2 : Peserta memiliki skor yang relatif tinggi di setiap mata ujian. Peserta yang tergabung ke dalam cluster 2 memiliki kemungkinan besar untuk lulus dari seleksi masuk PTN menggunakan nilai UTBK.
Cluster 3 : Peserta memiliki skor yang relatif tinggi di mata ujian gabungan Saintek - Soshum, aitu Tes Potensi Skolastik yang berupa mata ujian Kemampuan Penalaran Umum(score_kpu), Kemampuan Kuantitatif (score_kua), Pengetahuan & Pemahaman Umum (score_ppu) dan Kemampuan Memahami Bacaan & Menulis (score_kmb) namun skor di mata ujian khusus Soshum (Geografi, Sosiologi, Sejarah dan Ekonomi) cenderung rendah. Peserta yang dikategorikan ke dalam cluster 3 memiliki kemungkinan besar merupakan peserta lintas jurusan (Peserta dari SMA/SMK/MA IPA yang mengambil konsentrasi UTBK Soshum).
Cluster 4 : Peserta memiliki skor yang sangat tinggi di mata ujian Matematika IPS (score_mat).
Cluster 5 : Peserta memiliki skor yang relatif tinggi di mata ujian khusus Soshum seperti Geografi (score_geo), Sosiologi (score_sos), Sejarah (score_sej) dan Ekonomi (score_eko) namun sangat rendah di mata ujian Matematika IPS (score_mat).
Clustering data UTBK memiliki fungsi untuk efisiensi dan treatment setiap kelompok cluster. Efisiensi diperlukan sebagai bahan evaluasi pembelajaran pra-UTBK setiap kelompok dan treatmen diperlukan sebagai solusinya. Adanya clusterisasi ini dapat membantu persiapan UTBK bagi calun peserta yang menginginkan kelulusannya di PTN dan Program Studi yang diinginkan.
Akhir kata, semoga laporan yang dibuat dapat bermanfaat bagi para pembaca, khususnya bagi sekolah dan lembaga mimbel yang menginginkan siswanya lulus di seleksi masuk PTN sebanyak mungkin.
Terima kasih.