Pendidikan merupakan salah satu faktor penting dalam meningkatkan kualitas sumber daya manusia. Oleh karena itu, diperlukan analisis untuk mengetahui faktor-faktor yang mempengaruhi performa dan kelulusan siswa.
Pada penelitian ini dilakukan analisis terhadap data performa siswa menggunakan metode Decision Tree. Metode ini dipilih karena mampu melakukan klasifikasi data dengan baik serta menghasilkan visualisasi pohon keputusan yang mudah dipahami.
Tujuan dari penelitian ini adalah untuk memprediksi status kelulusan siswa berdasarkan beberapa faktor akademik dan kondisi siswa, seperti waktu belajar, jumlah ketidakhadiran, nilai sebelumnya, dan faktor pendukung lainnya.
library(rpart)
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.5.3
library(DT)
## Warning: package 'DT' was built under R version 4.5.1
data <- read.csv("C:\\Users\\H P\\Downloads\\student_data.csv")
Pada tahap ini hanya ditampilkan beberapa data awal untuk memahami isi dataset.
datatable(
head(data, 10),
options = list(
scrollX = TRUE,
pageLength = 5
),
caption = "10 Data Awal Student Performance Dataset"
)
str(data)
## 'data.frame': 395 obs. of 33 variables:
## $ school : chr "GP" "GP" "GP" "GP" ...
## $ sex : chr "F" "F" "F" "F" ...
## $ age : int 18 17 15 15 16 16 16 17 15 15 ...
## $ address : chr "U" "U" "U" "U" ...
## $ famsize : chr "GT3" "GT3" "LE3" "GT3" ...
## $ Pstatus : chr "A" "T" "T" "T" ...
## $ Medu : int 4 1 1 4 3 4 2 4 3 3 ...
## $ Fedu : int 4 1 1 2 3 3 2 4 2 4 ...
## $ Mjob : chr "at_home" "at_home" "at_home" "health" ...
## $ Fjob : chr "teacher" "other" "other" "services" ...
## $ reason : chr "course" "course" "other" "home" ...
## $ guardian : chr "mother" "father" "mother" "mother" ...
## $ traveltime: int 2 1 1 1 1 1 1 2 1 1 ...
## $ studytime : int 2 2 2 3 2 2 2 2 2 2 ...
## $ failures : int 0 0 3 0 0 0 0 0 0 0 ...
## $ schoolsup : chr "yes" "no" "yes" "no" ...
## $ famsup : chr "no" "yes" "no" "yes" ...
## $ paid : chr "no" "no" "yes" "yes" ...
## $ activities: chr "no" "no" "no" "yes" ...
## $ nursery : chr "yes" "no" "yes" "yes" ...
## $ higher : chr "yes" "yes" "yes" "yes" ...
## $ internet : chr "no" "yes" "yes" "yes" ...
## $ romantic : chr "no" "no" "no" "yes" ...
## $ famrel : int 4 5 4 3 4 5 4 4 4 5 ...
## $ freetime : int 3 3 3 2 3 4 4 1 2 5 ...
## $ goout : int 4 3 2 2 2 2 4 4 2 1 ...
## $ Dalc : int 1 1 2 1 1 1 1 1 1 1 ...
## $ Walc : int 1 1 3 1 2 2 1 1 1 1 ...
## $ health : int 3 3 3 5 5 5 3 1 1 5 ...
## $ absences : int 6 4 10 2 4 10 0 6 0 0 ...
## $ G1 : int 5 5 7 15 6 15 12 6 16 14 ...
## $ G2 : int 6 5 8 14 10 15 12 5 18 15 ...
## $ G3 : int 6 6 10 15 10 15 11 6 19 15 ...
names(data)
## [1] "school" "sex" "age" "address" "famsize"
## [6] "Pstatus" "Medu" "Fedu" "Mjob" "Fjob"
## [11] "reason" "guardian" "traveltime" "studytime" "failures"
## [16] "schoolsup" "famsup" "paid" "activities" "nursery"
## [21] "higher" "internet" "romantic" "famrel" "freetime"
## [26] "goout" "Dalc" "Walc" "health" "absences"
## [31] "G1" "G2" "G3"
summary(data)
## school sex age address
## Length:395 Length:395 Min. :15.0 Length:395
## Class :character Class :character 1st Qu.:16.0 Class :character
## Mode :character Mode :character Median :17.0 Mode :character
## Mean :16.7
## 3rd Qu.:18.0
## Max. :22.0
## famsize Pstatus Medu Fedu
## Length:395 Length:395 Min. :0.000 Min. :0.000
## Class :character Class :character 1st Qu.:2.000 1st Qu.:2.000
## Mode :character Mode :character Median :3.000 Median :2.000
## Mean :2.749 Mean :2.522
## 3rd Qu.:4.000 3rd Qu.:3.000
## Max. :4.000 Max. :4.000
## Mjob Fjob reason guardian
## Length:395 Length:395 Length:395 Length:395
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## traveltime studytime failures schoolsup
## Min. :1.000 Min. :1.000 Min. :0.0000 Length:395
## 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:0.0000 Class :character
## Median :1.000 Median :2.000 Median :0.0000 Mode :character
## Mean :1.448 Mean :2.035 Mean :0.3342
## 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:0.0000
## Max. :4.000 Max. :4.000 Max. :3.0000
## famsup paid activities nursery
## Length:395 Length:395 Length:395 Length:395
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## higher internet romantic famrel
## Length:395 Length:395 Length:395 Min. :1.000
## Class :character Class :character Class :character 1st Qu.:4.000
## Mode :character Mode :character Mode :character Median :4.000
## Mean :3.944
## 3rd Qu.:5.000
## Max. :5.000
## freetime goout Dalc Walc
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:3.000 1st Qu.:2.000 1st Qu.:1.000 1st Qu.:1.000
## Median :3.000 Median :3.000 Median :1.000 Median :2.000
## Mean :3.235 Mean :3.109 Mean :1.481 Mean :2.291
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:2.000 3rd Qu.:3.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
## health absences G1 G2
## Min. :1.000 Min. : 0.000 Min. : 3.00 Min. : 0.00
## 1st Qu.:3.000 1st Qu.: 0.000 1st Qu.: 8.00 1st Qu.: 9.00
## Median :4.000 Median : 4.000 Median :11.00 Median :11.00
## Mean :3.554 Mean : 5.709 Mean :10.91 Mean :10.71
## 3rd Qu.:5.000 3rd Qu.: 8.000 3rd Qu.:13.00 3rd Qu.:13.00
## Max. :5.000 Max. :75.000 Max. :19.00 Max. :19.00
## G3
## Min. : 0.00
## 1st Qu.: 8.00
## Median :11.00
## Mean :10.42
## 3rd Qu.:14.00
## Max. :20.00
dim(data)
## [1] 395 33
Tahap preparation data dilakukan untuk membersihkan dan menyiapkan data sebelum proses modeling serta melakukan format ulamg pada struktur data yang ingin di analisis. ## Mengecek Missing Value
colSums(is.na(data))
## school sex age address famsize Pstatus Medu
## 0 0 0 0 0 0 0
## Fedu Mjob Fjob reason guardian traveltime studytime
## 0 0 0 0 0 0 0
## failures schoolsup famsup paid activities nursery higher
## 0 0 0 0 0 0 0
## internet romantic famrel freetime goout Dalc Walc
## 0 0 0 0 0 0 0
## health absences G1 G2 G3
## 0 0 0 0 0
Variabel target dibuat berdasarkan nilai akhir siswa (G3).
data$Status <- ifelse(
data$G3 >= 10,
"Lulus",
"Tidak Lulus"
)
data$Status <- as.factor(data$Status)
Variabel yang digunakan dipilih berdasarkan faktor yang berhubungan dengan performa akademik siswa dan untuk menghindari penggunaan variabel yang kurang berkontribusi terhadap model.
data_model <- data[, c(
"studytime",
"failures",
"absences",
"G1",
"G2",
"higher",
"internet",
"Status"
)]
datatable(
head(data_model, 10),
options = list(
scrollX = TRUE,
pageLength = 5
),
caption = "Data Setelah Preparation"
)
data_model$higher <- as.factor(
data_model$higher
)
data_model$internet <- as.factor(
data_model$internet
)
str(data_model)
## 'data.frame': 395 obs. of 8 variables:
## $ studytime: int 2 2 2 3 2 2 2 2 2 2 ...
## $ failures : int 0 0 3 0 0 0 0 0 0 0 ...
## $ absences : int 6 4 10 2 4 10 0 6 0 0 ...
## $ G1 : int 5 5 7 15 6 15 12 6 16 14 ...
## $ G2 : int 6 5 8 14 10 15 12 5 18 15 ...
## $ higher : Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ internet : Factor w/ 2 levels "no","yes": 1 2 2 2 1 2 2 1 2 2 ...
## $ Status : Factor w/ 2 levels "Lulus","Tidak Lulus": 2 2 1 1 1 1 1 2 1 1 ...
model <- rpart(
Status ~ studytime +
failures +
absences +
G1 +
G2 +
higher +
internet,
data = data_model,
method = "class"
)
model
## n= 395
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 395 130 Lulus (0.67088608 0.32911392)
## 2) G2>=9.5 249 8 Lulus (0.96787149 0.03212851) *
## 3) G2< 9.5 146 24 Tidak Lulus (0.16438356 0.83561644)
## 6) G2>=7.5 82 24 Tidak Lulus (0.29268293 0.70731707)
## 12) absences< 10.5 65 23 Tidak Lulus (0.35384615 0.64615385)
## 24) G1>=7.5 52 22 Tidak Lulus (0.42307692 0.57692308)
## 48) G2>=8.5 32 15 Lulus (0.53125000 0.46875000)
## 96) G1< 9.5 19 6 Lulus (0.68421053 0.31578947) *
## 97) G1>=9.5 13 4 Tidak Lulus (0.30769231 0.69230769) *
## 49) G2< 8.5 20 5 Tidak Lulus (0.25000000 0.75000000) *
## 25) G1< 7.5 13 1 Tidak Lulus (0.07692308 0.92307692) *
## 13) absences>=10.5 17 1 Tidak Lulus (0.05882353 0.94117647) *
## 7) G2< 7.5 64 0 Tidak Lulus (0.00000000 1.00000000) *
rpart.plot(
model,
type = 3,
extra = 104,
box.palette = "GnRd",
shadow.col = "gray90",
branch.lty = 1,
cex = 0.9,
fallen.leaves = TRUE,
nn = FALSE,
faclen = 0,
main = "Visualisasi Decision Tree Prediksi Kelulusan"
)
prediksi <- predict(
model,
data_model,
type = "class"
)
head(prediksi)
## 1 2 3 4 5 6
## Tidak Lulus Tidak Lulus Tidak Lulus Lulus Lulus Lulus
## Levels: Lulus Tidak Lulus
conf_matrix <- table(
Aktual = data_model$Status,
Prediksi = prediksi
)
conf_matrix
## Prediksi
## Aktual Lulus Tidak Lulus
## Lulus 254 11
## Tidak Lulus 14 116
accuracy <- mean(
prediksi == data_model$Status
)
accuracy
## [1] 0.9367089
erdasarkan hasil visualisasi Decision Tree dan nilai accuracy yang diperoleh, model mampu mengklasifikasikan status kelulusan siswa dengan cukup baik.
Hasil visualisasi menunjukkan bahwa variabel yang paling berpengaruh dalam menentukan status kelulusan siswa adalah nilai G2. Hal ini terlihat karena G2 berada pada root node atau percabangan pertama pada pohon keputusan. Kondisi tersebut menunjukkan bahwa nilai pada periode kedua memiliki hubungan yang sangat kuat terhadap hasil kelulusan akhir siswa.
Siswa dengan nilai G2 ≥ 10 cenderung langsung diklasifikasikan sebagai “Lulus”. Sebaliknya, siswa dengan nilai G2 < 10 memiliki kemungkinan lebih besar untuk dikategorikan “Tidak Lulus” dan akan dianalisis kembali menggunakan variabel lain seperti absensi dan nilai G1.
Selain G2, nilai akademik sebelumnya seperti G1 juga menjadi faktor penting dalam proses klasifikasi. Siswa dengan nilai G1 dan G2 yang tinggi cenderung diprediksi lulus, sedangkan siswa dengan nilai yang rendah memiliki peluang lebih besar untuk tidak lulus. Hal ini menunjukkan bahwa performa akademik sebelumnya dapat menjadi indikator utama dalam memprediksi hasil akhir siswa.
Variabel absensi juga memberikan insight penting, dimana siswa dengan tingkat ketidakhadiran yang tinggi cenderung memiliki performa akademik yang lebih rendah dibandingkan siswa dengan jumlah absensi yang sedikit. Pada beberapa cabang pohon keputusan terlihat bahwa jumlah absensi yang tinggi mengarah pada klasifikasi “Tidak Lulus”.
Selain itu, jumlah kegagalan (failures) turut memberikan pengaruh terhadap hasil klasifikasi. Siswa yang memiliki riwayat kegagalan lebih banyak cenderung memiliki peluang kelulusan yang lebih rendah.
Di sisi lain, waktu belajar (studytime) menunjukkan bahwa siswa yang memiliki waktu belajar lebih baik cenderung memperoleh hasil akademik yang lebih baik pula.
Secara keseluruhan, hasil analisis menunjukkan bahwa faktor akademik seperti nilai sebelumnya, jumlah kegagalan, dan absensi memiliki pengaruh yang lebih dominan dibandingkan faktor pendukung lainnya seperti akses internet atau keinginan melanjutkan pendidikan tinggi.
Berdasarkan hasil analisis yang telah dilakukan menggunakan metode Decision Tree, diperoleh bahwa model mampu melakukan klasifikasi status kelulusan siswa dengan cukup baik berdasarkan faktor akademik dan kondisi siswa. Metode Decision Tree dipilih karena mampu menghasilkan model klasifikasi yang mudah dipahami melalui bentuk visualisasi pohon keputusan.
Hasil analisis menunjukkan bahwa variabel akademik seperti nilai G1 dan G2 menjadi faktor yang paling dominan dalam menentukan status kelulusan siswa. Selain itu, variabel lain seperti jumlah kegagalan (failures), tingkat absensi, dan waktu belajar (studytime) juga memberikan pengaruh terhadap hasil klasifikasi. Siswa dengan nilai akademik yang tinggi, jumlah absensi yang rendah, dan waktu belajar yang lebih baik cenderung memiliki peluang lebih besar untuk lulus.
Visualisasi Decision Tree juga menunjukkan bahwa nilai G2 menjadi percabangan utama dalam proses pengambilan keputusan model. Hal ini mengindikasikan bahwa performa akademik pada periode sebelumnya memiliki hubungan yang kuat terhadap hasil akhir siswa.
Secara keseluruhan, metode Decision Tree dapat digunakan sebagai salah satu pendekatan untuk membantu memahami faktor-faktor yang mempengaruhi kelulusan siswa. Selain mampu memberikan hasil klasifikasi yang cukup baik, metode ini juga mudah diinterpretasikan sehingga dapat membantu dalam proses pengambilan keputusan maupun evaluasi performa akademik siswa.