1. Buat Data Siswa (Tanpa Label Awal)
set.seed(123)
data_siswa <- data.frame(
Nama = paste0("Siswa_", 1:35),
Nilai_UAS = c(90, 77, 68, 83, 92, 55, 80, 78, 85, 73,
88, 81, 79, 76, 84, 89, 91, 87, 86, 70,
90, 83, 82, 78, 77, 93, 84, 88, 81, 85,
76, 80, 87, 79, 90),
Nilai_Tugas = c(85, 88, 72, 95, 91, 60, 73, 76, 88, 78,
83, 79, 82, 74, 85, 80, 93, 77, 81, 75,
90, 78, 75, 79, 76, 87, 84, 92, 80, 88,
71, 86, 89, 90, 91),
Kehadiran = c(18, 17, 19, 16, 19, 12, 17, 15, 20, 16,
19, 18, 16, 15, 20, 19, 20, 18, 17, 20,
18, 19, 18, 16, 15, 20, 19, 20, 18, 17,
16, 19, 20, 19, 18)
)
2. Buat Label Kelulusan Berdasarkan Aturan
data_siswa$Lulus <- ifelse(
data_siswa$Nilai_UAS > 75 &
data_siswa$Nilai_Tugas > 70 &
data_siswa$Kehadiran >= 15, "Lulus", "Tidak"
)
data_siswa$Lulus <- as.factor(data_siswa$Lulus)
3. Normalisasi Fitur
normalize <- function(x) {(x - min(x)) / (max(x) - min(x))}
data_norm <- as.data.frame(lapply(data_siswa[, 2:4], normalize))
data_norm$Lulus <- data_siswa$Lulus
4. Training Neural Network
library(nnet)
## Warning: package 'nnet' was built under R version 4.4.3
set.seed(123)
model <- nnet(Lulus ~ ., data = data_norm, size = 3, decay = 0.01, maxit = 200)
## # weights: 16
## initial value 28.641984
## iter 10 value 8.076062
## iter 20 value 3.995427
## iter 30 value 3.878243
## iter 40 value 3.673393
## iter 50 value 3.613051
## iter 60 value 3.600568
## iter 70 value 3.599887
## iter 80 value 3.598719
## iter 90 value 3.595773
## iter 100 value 3.595366
## iter 110 value 3.595355
## iter 120 value 3.595350
## final value 3.595350
## converged
6. Visualisasi Model
library(NeuralNetTools)
## Warning: package 'NeuralNetTools' was built under R version 4.4.3
plotnet(model)

7. Prediksi dan Gabungkan ke Data Asli
prediksi <- predict(model, data_norm[, 1:3], type = "class")
data_siswa$Prediksi_Kelulusan <- prediksi
7. Evaluasi dengan confusion matrix
library(caret)
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: ggplot2
## Loading required package: lattice
prediksi_factor <- factor(prediksi, levels = levels(data_siswa$Lulus))
conf_matrix <- confusionMatrix(prediksi_factor, data_siswa$Lulus)
print(conf_matrix)
## Confusion Matrix and Statistics
##
## Reference
## Prediction Lulus Tidak
## Lulus 31 1
## Tidak 0 3
##
## Accuracy : 0.9714
## 95% CI : (0.8508, 0.9993)
## No Information Rate : 0.8857
## P-Value [Acc > NIR] : 0.07887
##
## Kappa : 0.8416
##
## Mcnemar's Test P-Value : 1.00000
##
## Sensitivity : 1.0000
## Specificity : 0.7500
## Pos Pred Value : 0.9688
## Neg Pred Value : 1.0000
## Prevalence : 0.8857
## Detection Rate : 0.8857
## Detection Prevalence : 0.9143
## Balanced Accuracy : 0.8750
##
## 'Positive' Class : Lulus
##
8. Tabel hasil prediksi
tabel_hasil <- data_siswa[, c("Nama", "Nilai_UAS", "Nilai_Tugas", "Kehadiran", "Prediksi_Kelulusan")]
print("TABEL INPUT & OUTPUT:")
## [1] "TABEL INPUT & OUTPUT:"
print(tabel_hasil)
## Nama Nilai_UAS Nilai_Tugas Kehadiran Prediksi_Kelulusan
## 1 Siswa_1 90 85 18 Lulus
## 2 Siswa_2 77 88 17 Lulus
## 3 Siswa_3 68 72 19 Tidak
## 4 Siswa_4 83 95 16 Lulus
## 5 Siswa_5 92 91 19 Lulus
## 6 Siswa_6 55 60 12 Tidak
## 7 Siswa_7 80 73 17 Lulus
## 8 Siswa_8 78 76 15 Lulus
## 9 Siswa_9 85 88 20 Lulus
## 10 Siswa_10 73 78 16 Lulus
## 11 Siswa_11 88 83 19 Lulus
## 12 Siswa_12 81 79 18 Lulus
## 13 Siswa_13 79 82 16 Lulus
## 14 Siswa_14 76 74 15 Lulus
## 15 Siswa_15 84 85 20 Lulus
## 16 Siswa_16 89 80 19 Lulus
## 17 Siswa_17 91 93 20 Lulus
## 18 Siswa_18 87 77 18 Lulus
## 19 Siswa_19 86 81 17 Lulus
## 20 Siswa_20 70 75 20 Tidak
## 21 Siswa_21 90 90 18 Lulus
## 22 Siswa_22 83 78 19 Lulus
## 23 Siswa_23 82 75 18 Lulus
## 24 Siswa_24 78 79 16 Lulus
## 25 Siswa_25 77 76 15 Lulus
## 26 Siswa_26 93 87 20 Lulus
## 27 Siswa_27 84 84 19 Lulus
## 28 Siswa_28 88 92 20 Lulus
## 29 Siswa_29 81 80 18 Lulus
## 30 Siswa_30 85 88 17 Lulus
## 31 Siswa_31 76 71 16 Lulus
## 32 Siswa_32 80 86 19 Lulus
## 33 Siswa_33 87 89 20 Lulus
## 34 Siswa_34 79 90 19 Lulus
## 35 Siswa_35 90 91 18 Lulus
9. Hitung akurasi manual
akurasi <- sum(data_siswa$Lulus == data_siswa$Prediksi_Kelulusan) / nrow(data_siswa) * 100
cat("\nAkurasi Model Neural Network:", round(akurasi, 2), "%\n")
##
## Akurasi Model Neural Network: 97.14 %