BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Artificial Neural Network (ANN) atau Jaringan Syaraf Tiruan (JST) adalah model komputasi yang terinspirasi dari cara kerja otak manusia, yaitu sejumlah neuron yang saling terhubung untuk memproses informasi dan mempelajari pola dari data (Fransiska, 2026). ANN tersusun atas lapisan masukan (input layer), lapisan tersembunyi (hidden layer), dan lapisan keluaran (output layer). Setiap neuron menerima masukan yang dikalikan bobot, ditambah bias, lalu diproses melalui fungsi aktivasi untuk menghasilkan keluaran. Jaringan dengan satu atau lebih lapisan tersembunyi disebut Multi-Layer Perceptron (MLP) dan mampu mempelajari hubungan non-linear untuk pemodelan regresi maupun klasifikasi (Fransiska, 2026).

Dalam klasifikasi, ANN dilatih menggunakan algoritma backpropagation yang terdiri atas tahap forward propagation, backward propagation, dan pembaruan bobot, sehingga kesalahan prediksi diminimalkan secara bertahap (Aini dkk., 2023; Fransiska, 2026). Penerapan ANN backpropagation untuk klasifikasi telah banyak dilakukan di Indonesia. Harahap (2022) mengklasifikasikan penyakit demam menggunakan 135 data latih dan 15 data uji, dan menemukan melalui trial and error bahwa konfigurasi terbaik memakai 29 neuron pada hidden layer dengan akurasi 100%. Heryanto dkk. (2023) mengklasifikasikan jenis kulit wajah dengan memvariasikan jumlah hidden layer dan jumlah neuron per lapisan, dan memperoleh akurasi 96,70% pada model dengan sembilan lapisan tersembunyi berisi enam neuron pada tiap lapisannya. Kedua penelitian tersebut menunjukkan bahwa jumlah neuron pada lapisan tersembunyi merupakan pengaturan yang perlu dicoba secara empiris.

Selain arsitektur jaringan, proporsi pembagian data training dan testing juga memengaruhi hasil. Sapriani dkk. (2023) membandingkan lima skenario pembagian data pada klasifikasi status preeklampsia, dan skenario terbaik adalah 80% training dan 20% testing dengan akurasi 67,65%, sedangkan skenario 60:40 hanya menghasilkan akurasi 58,21%. Aini dkk. (2023) pada klasifikasi rating produk melaporkan akurasi 0,81 untuk pembagian 60:40 dan 0,83 untuk 80:20, dengan akurasi tertinggi 0,85 pada pembagian 90:10. Temuan-temuan ini menunjukkan bahwa hasil ANN bergantung pada jumlah neuron dan proporsi pembagian data.

Oleh karena itu, pada praktikum ini dilakukan ANN klasifikasi pada data Iris menggunakan package nnet dengan membandingkan jumlah hidden neuron sebesar 10, 20, dan 30 pada dua skenario pembagian data, yaitu 80% training : 20% testing dan 60% training : 40% testing. Kinerja setiap model dievaluasi pada data testing menggunakan confusion matrix, akurasi, presisi, recall, dan F1-score, kemudian setiap output diinterpretasikan. Pembahasan ANN regresi pada laporan ini dibatasi pada tinjauan teori.

1.2 Rumusan Masalah

Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan adalah sebagai berikut:

  1. Bagaimana memahami konsep dan menimplementasikan model Artificial Neural Network (ANN) untuk regresi dan klasifikasi menggunakan bahasa pemrograman R?
  2. Bagaimana mengevaluasi performa model Artificial Neural Network (ANN) menggunakan metrik evaluasi MSE dan MAPE untuk regresi, serta akurasi presisi untuk klasifikasi?

1.3 Tujuan Penelitian

Berdasarkan rumusan masalah tersebut, tujuan yang dapat disimpulkan adalah sebagai berikut:

  1. Memahami konsep dan menimplementasikan model Artificial Neural Network (ANN) untuk regresi dan klasifikasi menggunakan bahasa pemrograman R
  2. Mengevaluasi performa model Artificial Neural Network (ANN) menggunakan metrik evaluasi MSE dan MAPE untuk regresi, serta akurasi presisi untuk klasifikasi

BAB II TINJAUAN PUSTAKA

2.1 Artificial Neural Network (ANN)

ANN memiliki tiga komponen utama, yaitu arsitektur jaringan yang menggambarkan pola hubungan antar-neuron, algoritma pembelajaran yang digunakan untuk menyesuaikan bobot jaringan, serta fungsi aktivasi yang menentukan keluaran setiap neuron (Fransiska, 2026; Aini dkk., 2023). Secara matematis, pengolahan informasi pada satu neuron dinyatakan sebagai (Fransiska, 2026):

\[y = f\left(\sum_{i=1}^{p} w_i x_i + b\right)\]

dengan \(x_i\) adalah masukan ke-\(i\), \(w_i\) bobot yang menghubungkan masukan ke-\(i\) dengan neuron, \(b\) bias, \(f\) fungsi aktivasi, dan \(y\) keluaran neuron.

2.2 Arsitektur Jaringan

Tabel 1. Arsitektur ANN

Arsitektur Keterangan
Single Layer Perceptron (SLP) Jaringan tanpa lapisan tersembunyi yang digunakan untuk mempelajari hubungan linear dan klasifikasi yang dapat dipisahkan secara linear
Multi-Layer Perceptron (MLP) Jaringan dengan satu atau lebih lapisan tersembunyi yang mampu mempelajari hubungan non-linear untuk regresi dan klasifikasi

Sumber: Fransiska (2026).

Banyaknya neuron pada lapisan tersembunyi menentukan kapasitas jaringan. Pada MLP dengan \(p\) masukan, \(h\) neuron tersembunyi, dan \(K\) keluaran, banyaknya bobot (termasuk bias) yang diestimasi adalah:

\[N_{bobot} = p \cdot h + h + h \cdot K + K\]

Semakin besar \(h\), semakin banyak bobot yang harus dipelajari sehingga model lebih fleksibel, tetapi juga lebih berisiko mengalami overfitting terutama pada data berukuran kecil. Belum ada aturan pasti untuk menentukan jumlah neuron optimal sehingga penentuannya umumnya dilakukan secara trial and error (Harahap, 2022; Sapriani dkk., 2023).

2.3 ANN Regresi

ANN regresi digunakan untuk memprediksi variabel respons berupa nilai numerik kontinu. Lapisan keluaran umumnya menggunakan fungsi aktivasi linear agar jaringan dapat menghasilkan nilai prediksi sesuai rentang variabel respons, dan kinerjanya dievaluasi menggunakan MSE, RMSE, dan MAPE atau \(R^2\) (Fransiska, 2026). Pada nnet, hal ini diatur dengan argumen linout = TRUE. Sesuai batasan masalah, praktikum ini berfokus pada ANN klasifikasi.

2.4 ANN Klasifikasi

ANN klasifikasi digunakan untuk memprediksi variabel respons berupa kategori. Berdasarkan jumlah kelas, terdapat dua jenis (Fransiska, 2026):

  1. Klasifikasi biner, yaitu dua kategori dengan satu neuron keluaran berfungsi sigmoid yang menghasilkan probabilitas antara 0 dan 1.
  2. Klasifikasi multikelas, yaitu lebih dari dua kategori dengan fungsi softmax pada lapisan keluaran yang menghasilkan probabilitas setiap kelas dengan jumlah seluruh probabilitas sama dengan 1.

Data Iris memiliki tiga kelas sehingga termasuk klasifikasi multikelas dengan tiga neuron keluaran. Kelas prediksi ditentukan dari neuron keluaran yang memiliki probabilitas terbesar.

2.5 Backpropagation dan Fungsi Kerugian

Backpropagation menyesuaikan bobot jaringan berdasarkan kesalahan prediksi melalui tiga tahap, yaitu (Fransiska, 2026; Aini dkk., 2023):

  1. Forward propagation: menghitung keluaran jaringan berdasarkan masukan, bobot, dan fungsi aktivasi.
  2. Backward propagation: menghitung gradien kesalahan terhadap bobot jaringan.
  3. Pembaruan bobot: memperbarui bobot berdasarkan gradien untuk mengurangi kesalahan.

Pada klasifikasi multikelas, fungsi kerugian yang digunakan adalah categorical cross-entropy:

\[L = -\frac{1}{n}\sum_{i=1}^{n}\sum_{k=1}^{K} y_{ik}\log(\hat{y}_{ik})\]

dengan \(y_{ik}\) adalah label aktual dan \(\hat{y}_{ik}\) adalah probabilitas prediksi. Pembaruan bobot dengan gradient descent dituliskan:

\[w_{ij}^{(t+1)} = w_{ij}^{(t)} - \eta \frac{\partial L}{\partial w_{ij}}\]

dengan \(\eta\) adalah learning rate (Fransiska, 2026). Pada nnet, optimasi bobot dilakukan dengan algoritma BFGS dengan jumlah iterasi maksimum maxit (bawaan 100), sehingga tidak memakai learning rate secara eksplisit.

2.6 Fungsi Aktivasi

Tabel 2. Fungsi aktivasi pada ANN klasifikasi

Fungsi Keterangan
Sigmoid Cocok untuk klasifikasi biner
Softmax Cocok untuk klasifikasi multikelas
ReLU Mempercepat konvergensi dan mengatasi masalah vanishing gradient
Tanh Menghasilkan keluaran antara -1 dan 1 dan membantu normalisasi sinyal neuron

Sumber: Fransiska (2026).

Pada nnet, lapisan tersembunyi menggunakan fungsi sigmoid logistik dan lapisan keluaran untuk lebih dari dua kelas menggunakan softmax.

2.7 Evaluasi Model

Evaluasi ANN klasifikasi dilakukan dengan membandingkan kelas aktual dan kelas prediksi yang disajikan dalam confusion matrix (Fransiska, 2026). Pada klasifikasi biner:

Tabel 3. Confusion matrix

Predicted Positive Predicted Negative
Actual Positive True Positive (TP) False Negative (FN)
Actual Negative False Positive (FP) True Negative (TN)

Sumber: Fransiska (2026).

\[Akurasi = \frac{TP+TN}{TP+TN+FP+FN}, \quad Presisi = \frac{TP}{TP+FP}, \quad Recall = \frac{TP}{TP+FN}\]

\[F1\text{-}Score = 2\times\frac{Presisi \times Recall}{Presisi + Recall}\]

Pada klasifikasi multikelas, presisi, recall, dan \(F1\) dihitung untuk setiap kelas dengan memperlakukan kelas tersebut sebagai kelas positif dan kelas lainnya sebagai negatif (one-vs-rest), kemudian dirata-ratakan (macro average). Akurasi menyatakan proporsi observasi yang diklasifikasikan benar, yaitu jumlah diagonal confusion matrix dibagi total observasi (Sapriani dkk., 2023; Aini dkk., 2023).

2.8 Data Iris

Data Iris tersedia di R (data(iris)) dan terdiri atas 150 observasi bunga iris dari tiga spesies (setosa, versicolor, virginica) masing-masing 50 observasi. Terdapat empat variabel prediktor numerik, yaitu Sepal.Length, Sepal.Width, Petal.Length, dan Petal.Width (dalam cm), serta variabel respons Species. Spesies setosa terpisah jelas dari dua spesies lainnya, sedangkan versicolor dan virginica sebagian saling tumpang tindih sehingga kesalahan klasifikasi umumnya terjadi pada kedua kelas tersebut.

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data yang digunakan dalam penelitian ini adalah data kuantitatif. Data yang digunakan adalah data Iris bawaan R sebanyak 150 observasi. Data dibagi menjadi data training dan testing dengan dua skenario, yaitu 80% : 20% dan 60% : 40%, menggunakan pengambilan sampel acak dengan set.seed(917). Variabel Species digunakan sebagai variabel respons untuk membangun model ANN klasifikasi.

3.2 Variabel Penelitian

No Variabel Keterangan Tipe Data Peran
1 Species Spesies bunga iris (setosa, versicolor, virginica) Kategorik Respons
2 Sepal.Length Panjang kelopak (cm) Numerik Prediktor
3 Sepal.Width Lebar kelopak (cm) Numerik Prediktor
4 Petal.Length Panjang mahkota (cm) Numerik Prediktor
5 Petal.Width Lebar mahkota (cm) Numerik Prediktor

3.3 Skenario Analisis

Tabel 4. Skenario model yang dibandingkan

Skenario Data training Data testing Hidden neuron
1 80% (120 obs) 20% (30 obs) 10
2 80% (120 obs) 20% (30 obs) 20
3 80% (120 obs) 20% (30 obs) 30
4 60% (90 obs) 40% (60 obs) 10
5 60% (90 obs) 40% (60 obs) 20
6 60% (90 obs) 40% (60 obs) 30

3.4 Langkah-langkah Analisis

  1. Mulai.
  2. Memanggil package yang diperlukan (nnet, NeuralNetTools, ggplot2, dan knitr).
  3. Memanggil data Iris, lalu memeriksa struktur, ringkasan, dan missing value.
  4. Membagi data menjadi training dan testing dengan proporsi 80:20 dan 60:40 menggunakan sample() dengan set.seed(917).
  5. Membangun model ANN klasifikasi dengan nnet() untuk size (hidden neuron) = 10, 20, dan 30 pada kedua skenario pembagian data (6 model).
  6. Memprediksi data testing dan menyusun confusion matrix untuk setiap model.
  7. Menghitung akurasi, presisi, recall, dan F1-score pada data testing serta akurasi pada data training.
  8. Menginterpretasikan output setiap model.
  9. Membandingkan seluruh model dan menentukan model terbaik.
  10. Mengeksplorasi model terbaik dengan plotnet(), neuralweights(), dan olden().
  11. Menarik kesimpulan.
  12. Selesai.

3.5 Diagram Alir Penelitian

BAB IV HASIL DAN PEMBAHASAN

Pada batasan masalah diminta melakukan ANN klasifikasi dengan hidden neuron = c(10, 20, 30) menggunakan data training 80% dan testing 20% serta data training 60% dan testing 40%, kemudian menginterpretasikan setiap output dengan jelas. Data yang digunakan adalah data Iris dan seluruh pembagian data serta pelatihan model menggunakan set.seed(917) sesuai contoh pada modul.

4.1 Library

library(nnet)
library(NeuralNetTools)
library(ggplot2)
library(knitr)

Package nnet menyediakan fungsi nnet() untuk membangun ANN dengan satu lapisan tersembunyi, NeuralNetTools untuk visualisasi arsitektur (plotnet()), pengambilan bobot (neuralweights()), dan variable importance (olden()), ggplot2 untuk visualisasi, serta knitr untuk menyajikan tabel.

4.2 Eksplorasi Data

data(iris)
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
dim(iris)
## [1] 150   5
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

Data Iris terdiri atas 150 observasi dan 5 variabel, yaitu 4 variabel prediktor numerik dan 1 variabel respons Species bertipe factor dengan 3 kelas, masing-masing 50, 50, 50 observasi (setosa, versicolor, virginica). Jumlah observasi yang sama pada tiap kelas menunjukkan data seimbang (balanced) sehingga akurasi cukup layak digunakan sebagai ukuran evaluasi. Rata-rata Petal.Length adalah 3,76 cm dan rata-rata Petal.Width adalah 1,20 cm.

colSums(is.na(iris))
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
##            0            0            0            0            0

Tidak terdapat missing value pada data (total 0), sehingga data dapat langsung digunakan tanpa penanganan data hilang.

par(mfrow = c(1, 2))
boxplot(Petal.Length ~ Species, data = iris, col = c("#A5D6A7", "#90CAF9", "#FFCC80"),
        main = "Petal.Length menurut Species", xlab = "Species", ylab = "cm")
boxplot(Petal.Width ~ Species, data = iris, col = c("#A5D6A7", "#90CAF9", "#FFCC80"),
        main = "Petal.Width menurut Species", xlab = "Species", ylab = "cm")

par(mfrow = c(1, 1))

Boxplot memperlihatkan bahwa Petal.Length dan Petal.Width pada setosa jauh lebih kecil dan tidak tumpang tindih dengan dua spesies lain, sedangkan versicolor dan virginica memiliki rentang yang berdekatan dan sebagian beririsan. Pola ini menjadi dugaan awal bahwa setosa mudah diklasifikasikan, sedangkan kesalahan klasifikasi, jika ada, paling mungkin terjadi antara versicolor dan virginica.

4.3 Membagi Data Training dan Testing

lv <- levels(iris$Species)

bagi_data <- function(prop) {
  set.seed(917)
  index <- sample(1:nrow(iris), round(prop * nrow(iris)))
  list(train = iris[index, ], test = iris[-index, ])
}

sp80 <- bagi_data(0.8)   # training 80% - testing 20%
sp60 <- bagi_data(0.6)   # training 60% - testing 40%

c(train80 = nrow(sp80$train), test20 = nrow(sp80$test),
  train60 = nrow(sp60$train), test40 = nrow(sp60$test))
## train80  test20 train60  test40 
##     120      30      90      60
dist_kelas <- rbind(
  "80:20 - training" = table(sp80$train$Species),
  "80:20 - testing"  = table(sp80$test$Species),
  "60:40 - training" = table(sp60$train$Species),
  "60:40 - testing"  = table(sp60$test$Species)
)
kable(dist_kelas, align = "c", caption = "Banyaknya observasi tiap spesies pada data training dan testing")
Banyaknya observasi tiap spesies pada data training dan testing
setosa versicolor virginica
80:20 - training 42 40 38
80:20 - testing 8 10 12
60:40 - training 33 26 31
60:40 - testing 17 24 19

Pada skenario 80:20, data training berjumlah 120 observasi dan data testing 30 observasi, sehingga setiap observasi testing mewakili 3,33% akurasi. Pada skenario 60:40, data training berjumlah 90 observasi dan data testing 60 observasi, sehingga setiap observasi testing mewakili 1,67% akurasi. Pengambilan sampel dilakukan secara acak sehingga proporsi tiap spesies pada data training dan testing tidak persis sama dengan proporsi awal (lihat tabel), yang wajar karena tidak digunakan pengambilan sampel berstrata.

# Fungsi evaluasi klasifikasi multikelas (macro average)
hitung_klas <- function(aktual, prediksi) {
  aktual   <- factor(aktual, levels = lv)
  prediksi <- factor(prediksi, levels = lv)
  tab  <- table(Aktual = aktual, Prediksi = prediksi)
  acc  <- sum(diag(tab)) / sum(tab)
  prec <- diag(tab) / colSums(tab)
  rec  <- diag(tab) / rowSums(tab)
  f1   <- 2 * prec * rec / (prec + rec)
  prec[is.nan(prec)] <- 0; rec[is.nan(rec)] <- 0; f1[is.nan(f1)] <- 0
  list(tab = tab, acc = acc, prec = prec, rec = rec, f1 = f1,
       prec_m = mean(prec), rec_m = mean(rec), f1_m = mean(f1))
}

Fungsi hitung_klas() menyusun confusion matrix dan menghitung akurasi, presisi, recall, dan \(F1\) per kelas serta rata-ratanya (macro average) sesuai rumus pada subbab 2.7.

4.4 Pembentukan Model ANN Klasifikasi

Model dibentuk untuk size = 10, 20, dan 30 pada kedua skenario pembagian data. Seluruh parameter lain menggunakan nilai bawaan nnet() (antara lain maxit = 100), dan set.seed(917) dipanggil sebelum setiap model dilatih karena bobot awal jaringan ditentukan secara acak.

skenario <- expand.grid(Hidden = c(10L, 20L, 30L), prop = c(0.8, 0.6))
skenario$Split <- ifelse(skenario$prop == 0.8, "80:20", "60:40")

model_list  <- vector("list", nrow(skenario))
metrik_list <- vector("list", nrow(skenario))
hasil_rows  <- vector("list", nrow(skenario))

for (i in seq_len(nrow(skenario))) {
  sp <- if (skenario$prop[i] == 0.8) sp80 else sp60

  set.seed(917)
  mod <- nnet(Species ~ ., data = sp$train, size = skenario$Hidden[i], trace = FALSE)

  prd_test  <- predict(mod, newdata = sp$test,  type = "class")
  prd_train <- predict(mod, newdata = sp$train, type = "class")
  m <- hitung_klas(sp$test$Species, prd_test)

  model_list[[i]]  <- mod
  metrik_list[[i]] <- m
  hasil_rows[[i]]  <- data.frame(
    Split         = skenario$Split[i],
    Hidden        = skenario$Hidden[i],
    N_train       = nrow(sp$train),
    N_test        = nrow(sp$test),
    Jumlah_Bobot  = length(mod$wts),
    Galat_Akhir   = mod$value,
    Konvergen     = mod$convergence == 0,
    Akurasi_train = mean(prd_train == sp$train$Species),
    Akurasi_test  = m$acc,
    Presisi       = m$prec_m,
    Recall        = m$rec_m,
    F1            = m$f1_m
  )
}

hasil <- do.call(rbind, hasil_rows)
rownames(hasil) <- NULL

Keenam model berhasil dibentuk. Banyaknya bobot yang diestimasi pada tiap model mengikuti rumus \(N_{bobot} = p \cdot h + h + h \cdot K + K\) dengan \(p = 4\) dan \(K = 3\), yaitu 83, 163, 243 bobot untuk hidden neuron 10, 20, dan 30. Jumlah bobot ini jauh lebih besar dibandingkan banyaknya data training (120 dan 90 observasi), sehingga ada kemungkinan model mengalami overfitting, yang diperiksa dengan membandingkan akurasi training dan testing.

4.5 Hasil ANN Klasifikasi: Skenario 80:20

Pada Output ini data training sebanyak 120 observasi (80%) dan data testing sebanyak 30 observasi (20%).

4.5.1 Hidden Neuron = 10

tampil(1)
Confusion matrix data testing (80:20, hidden neuron = 10); baris = aktual, kolom = prediksi
setosa versicolor virginica
setosa 8 0 0
versicolor 0 10 0
virginica 0 0 12
Presisi, recall, dan F1 per kelas (80:20, hidden neuron = 10)
Kelas Presisi Recall F1
setosa setosa 1 1 1
versicolor versicolor 1 1 1
virginica virginica 1 1 1

Interpretasi. Model dengan 10 hidden neuron (83 bobot) pada skenario 80:20 dilatih dengan 120 data training dan diuji dengan 30 data testing. Pada confusion matrix, 30 dari 30 observasi testing diklasifikasikan dengan benar sehingga akurasi testing sebesar 100,00%. Tidak terdapat kesalahan klasifikasi; seluruh observasi testing diprediksi pada kelas yang benar. Rata-rata presisi sebesar 1,0000, rata-rata recall sebesar 1,0000, dan rata-rata \(F1\) sebesar 1,0000. Seluruh kelas memiliki presisi, recall, dan \(F1\) sebesar 1, yang berarti ketiga spesies terpisah sempurna pada data testing ini. Akurasi training (99,17%) dan akurasi testing (100,00%) berada pada kisaran yang sama, sehingga tidak tampak overfitting yang berarti. Proses optimasi berhenti karena mencapai iterasi maksimum (maxit = 100) sebelum konvergen, sehingga bobot yang diperoleh belum tentu optimal. Nilai fungsi galat akhir pada data training sebesar 1,5692.

4.5.2 Hidden Neuron = 20

tampil(2)
Confusion matrix data testing (80:20, hidden neuron = 20); baris = aktual, kolom = prediksi
setosa versicolor virginica
setosa 8 0 0
versicolor 0 10 0
virginica 0 3 9
Presisi, recall, dan F1 per kelas (80:20, hidden neuron = 20)
Kelas Presisi Recall F1
setosa setosa 1.0000 1.00 1.0000
versicolor versicolor 0.7692 1.00 0.8696
virginica virginica 1.0000 0.75 0.8571

Interpretasi. Model dengan 20 hidden neuron (163 bobot) pada skenario 80:20 dilatih dengan 120 data training dan diuji dengan 30 data testing. Pada confusion matrix, 27 dari 30 observasi testing diklasifikasikan dengan benar sehingga akurasi testing sebesar 90,00%. Kesalahan klasifikasi terjadi pada 3 observasi virginica yang diprediksi sebagai versicolor. Rata-rata presisi sebesar 0,9231, rata-rata recall sebesar 0,9167, dan rata-rata \(F1\) sebesar 0,9089. Kelas dengan \(F1\) terendah adalah virginica (0,8571). Akurasi training (100,00%) lebih tinggi 10,00 poin persentase dibandingkan akurasi testing, yang mengindikasikan kecenderungan overfitting. Proses optimasi konvergen sebelum mencapai iterasi maksimum (maxit = 100). Nilai fungsi galat akhir pada data training sebesar 0,0000.

4.5.3 Hidden Neuron = 30

tampil(3)
Confusion matrix data testing (80:20, hidden neuron = 30); baris = aktual, kolom = prediksi
setosa versicolor virginica
setosa 8 0 0
versicolor 0 8 2
virginica 0 1 11
Presisi, recall, dan F1 per kelas (80:20, hidden neuron = 30)
Kelas Presisi Recall F1
setosa setosa 1.0000 1.0000 1.0000
versicolor versicolor 0.8889 0.8000 0.8421
virginica virginica 0.8462 0.9167 0.8800

Interpretasi. Model dengan 30 hidden neuron (243 bobot) pada skenario 80:20 dilatih dengan 120 data training dan diuji dengan 30 data testing. Pada confusion matrix, 27 dari 30 observasi testing diklasifikasikan dengan benar sehingga akurasi testing sebesar 90,00%. Kesalahan klasifikasi terjadi pada 1 observasi virginica yang diprediksi sebagai versicolor; 2 observasi versicolor yang diprediksi sebagai virginica. Rata-rata presisi sebesar 0,9117, rata-rata recall sebesar 0,9056, dan rata-rata \(F1\) sebesar 0,9074. Kelas dengan \(F1\) terendah adalah versicolor (0,8421). Akurasi training (100,00%) lebih tinggi 10,00 poin persentase dibandingkan akurasi testing, yang mengindikasikan kecenderungan overfitting. Proses optimasi konvergen sebelum mencapai iterasi maksimum (maxit = 100). Nilai fungsi galat akhir pada data training sebesar 0,0000.

4.6 Hasil ANN Klasifikasi: Skenario 60:40

Pada skenario ini data training sebanyak 90 observasi (60%) dan data testing sebanyak 60 observasi (40%).

4.6.1 Hidden Neuron = 10

tampil(4)
Confusion matrix data testing (60:40, hidden neuron = 10); baris = aktual, kolom = prediksi
setosa versicolor virginica
setosa 17 0 0
versicolor 0 23 1
virginica 0 2 17
Presisi, recall, dan F1 per kelas (60:40, hidden neuron = 10)
Kelas Presisi Recall F1
setosa setosa 1.0000 1.0000 1.0000
versicolor versicolor 0.9200 0.9583 0.9388
virginica virginica 0.9444 0.8947 0.9189

Interpretasi. Model dengan 10 hidden neuron (83 bobot) pada skenario 60:40 dilatih dengan 90 data training dan diuji dengan 60 data testing. Pada confusion matrix, 57 dari 60 observasi testing diklasifikasikan dengan benar sehingga akurasi testing sebesar 95,00%. Kesalahan klasifikasi terjadi pada 2 observasi virginica yang diprediksi sebagai versicolor; 1 observasi versicolor yang diprediksi sebagai virginica. Rata-rata presisi sebesar 0,9548, rata-rata recall sebesar 0,9510, dan rata-rata \(F1\) sebesar 0,9526. Kelas dengan \(F1\) terendah adalah virginica (0,9189). Akurasi training (100,00%) lebih tinggi 5,00 poin persentase dibandingkan akurasi testing, yang mengindikasikan kecenderungan overfitting. Proses optimasi konvergen sebelum mencapai iterasi maksimum (maxit = 100). Nilai fungsi galat akhir pada data training sebesar 0,0000.

4.6.2 Hidden Neuron = 20

tampil(5)
Confusion matrix data testing (60:40, hidden neuron = 20); baris = aktual, kolom = prediksi
setosa versicolor virginica
setosa 17 0 0
versicolor 0 23 1
virginica 0 2 17
Presisi, recall, dan F1 per kelas (60:40, hidden neuron = 20)
Kelas Presisi Recall F1
setosa setosa 1.0000 1.0000 1.0000
versicolor versicolor 0.9200 0.9583 0.9388
virginica virginica 0.9444 0.8947 0.9189

Interpretasi. Model dengan 20 hidden neuron (163 bobot) pada skenario 60:40 dilatih dengan 90 data training dan diuji dengan 60 data testing. Pada confusion matrix, 57 dari 60 observasi testing diklasifikasikan dengan benar sehingga akurasi testing sebesar 95,00%. Kesalahan klasifikasi terjadi pada 2 observasi virginica yang diprediksi sebagai versicolor; 1 observasi versicolor yang diprediksi sebagai virginica. Rata-rata presisi sebesar 0,9548, rata-rata recall sebesar 0,9510, dan rata-rata \(F1\) sebesar 0,9526. Kelas dengan \(F1\) terendah adalah virginica (0,9189). Akurasi training (100,00%) lebih tinggi 5,00 poin persentase dibandingkan akurasi testing, yang mengindikasikan kecenderungan overfitting. Proses optimasi konvergen sebelum mencapai iterasi maksimum (maxit = 100). Nilai fungsi galat akhir pada data training sebesar 0,0000.

4.6.3 Hidden Neuron = 30

tampil(6)
Confusion matrix data testing (60:40, hidden neuron = 30); baris = aktual, kolom = prediksi
setosa versicolor virginica
setosa 17 0 0
versicolor 0 24 0
virginica 0 3 16
Presisi, recall, dan F1 per kelas (60:40, hidden neuron = 30)
Kelas Presisi Recall F1
setosa setosa 1.0000 1.0000 1.0000
versicolor versicolor 0.8889 1.0000 0.9412
virginica virginica 1.0000 0.8421 0.9143

Interpretasi. Model dengan 30 hidden neuron (243 bobot) pada skenario 60:40 dilatih dengan 90 data training dan diuji dengan 60 data testing. Pada confusion matrix, 57 dari 60 observasi testing diklasifikasikan dengan benar sehingga akurasi testing sebesar 95,00%. Kesalahan klasifikasi terjadi pada 3 observasi virginica yang diprediksi sebagai versicolor. Rata-rata presisi sebesar 0,9630, rata-rata recall sebesar 0,9474, dan rata-rata \(F1\) sebesar 0,9518. Kelas dengan \(F1\) terendah adalah virginica (0,9143). Akurasi training (100,00%) lebih tinggi 5,00 poin persentase dibandingkan akurasi testing, yang mengindikasikan kecenderungan overfitting. Proses optimasi konvergen sebelum mencapai iterasi maksimum (maxit = 100). Nilai fungsi galat akhir pada data training sebesar 1e-04.

4.7 Perbandingan Seluruh Model

tab_banding <- hasil[, c("Split", "Hidden", "Akurasi_train", "Akurasi_test", "Presisi", "Recall", "F1")]
kable(tab_banding, digits = 4, align = "c",
      caption = "Perbandingan kinerja seluruh model (Presisi, Recall, dan F1 adalah rata-rata makro pada data testing)")
Perbandingan kinerja seluruh model (Presisi, Recall, dan F1 adalah rata-rata makro pada data testing)
Split Hidden Akurasi_train Akurasi_test Presisi Recall F1
80:20 10 0.9917 1.00 1.0000 1.0000 1.0000
80:20 20 1.0000 0.90 0.9231 0.9167 0.9089
80:20 30 1.0000 0.90 0.9117 0.9056 0.9074
60:40 10 1.0000 0.95 0.9548 0.9510 0.9526
60:40 20 1.0000 0.95 0.9548 0.9510 0.9526
60:40 30 1.0000 0.95 0.9630 0.9474 0.9518

Berdasarkan akurasi pada data testing, model terbaik adalah model dengan 10 hidden neuron pada skenario 80:20 dengan akurasi 100,00%, presisi 1,0000, recall 1,0000, dan \(F1\) 1,0000. Model ini memiliki akurasi testing tertinggi tunggal di antara keenam model.

kable(tab_split, digits = 4, align = "c",
      caption = "Rata-rata kinerja menurut skenario pembagian data (rata-rata atas tiga hidden neuron)")
Rata-rata kinerja menurut skenario pembagian data (rata-rata atas tiga hidden neuron)
Split Akurasi_train Akurasi_test Presisi Recall F1
60:40 1.0000 0.9500 0.9575 0.9498 0.9523
80:20 0.9972 0.9333 0.9449 0.9407 0.9388
kable(tab_hidden, digits = 4, align = "c",
      caption = "Rata-rata kinerja menurut jumlah hidden neuron (rata-rata atas dua skenario pembagian data)")
Rata-rata kinerja menurut jumlah hidden neuron (rata-rata atas dua skenario pembagian data)
Hidden Akurasi_train Akurasi_test Presisi Recall F1
10 0.9958 0.975 0.9774 0.9755 0.9763
20 1.0000 0.925 0.9389 0.9338 0.9307
30 1.0000 0.925 0.9373 0.9265 0.9296

Pengaruh proporsi pembagian data. Rata-rata akurasi testing pada skenario 80:20 adalah 93,33% dan pada skenario 60:40 adalah 95,00%. Skenario 60:40 menghasilkan akurasi rata-rata yang lebih tinggi, sehingga tidak sejalan dengan temuan Sapriani dkk. (2023) dan Aini dkk. (2023) bahwa porsi data training yang lebih besar cenderung lebih baik. Hal ini dapat terjadi karena data Iris berukuran kecil dengan kelas yang relatif mudah dipisahkan, sehingga hasil sangat dipengaruhi oleh komposisi observasi yang kebetulan masuk ke data testing. Perlu diingat bahwa data testing skenario 80:20 hanya 30 observasi sehingga satu kesalahan klasifikasi mengubah akurasi sebesar 3,33 poin persentase, sedangkan pada skenario 60:40 sebesar 1,67 poin persentase. Selisih akurasi yang kecil antar-skenario sebaiknya tidak ditafsirkan sebagai perbedaan kemampuan model yang nyata.

Pengaruh jumlah hidden neuron. Pada skenario 80:20, akurasi testing untuk 10, 20, dan 30 hidden neuron masing-masing adalah 100,00%, 90,00%, 90,00%, dengan rentang 10,00 poin persentase antar-model. Pada skenario 60:40, akurasinya masing-masing 95,00%, 95,00%, 95,00%, sehingga penambahan neuron juga tidak mengubah akurasi. Jumlah neuron memberikan perbedaan akurasi yang cukup terlihat, tetapi karena data testing berukuran kecil perbedaan tersebut perlu ditafsirkan dengan hati-hati. Penambahan neuron juga meningkatkan jumlah bobot dari 83 menjadi 243, sehingga kompleksitas model meningkat. Sebanyak 1 dari 6 model berhenti pada iterasi maksimum (maxit = 100) sebelum konvergen. Hal ini menunjukkan model dengan neuron lebih banyak membutuhkan iterasi lebih banyak, sehingga menaikkan maxit dapat menjadi pengaturan yang layak dicoba. Hasil ini sejalan dengan Harahap (2022) dan Heryanto dkk. (2023) bahwa jumlah neuron perlu ditentukan secara empiris dan tidak selalu semakin banyak semakin baik.

plot_df <- rbind(
  data.frame(Split = hasil$Split, Hidden = factor(hasil$Hidden), Jenis = "Training", Akurasi = hasil$Akurasi_train),
  data.frame(Split = hasil$Split, Hidden = factor(hasil$Hidden), Jenis = "Testing",  Akurasi = hasil$Akurasi_test)
)
plot_df$Split <- factor(plot_df$Split, levels = c("80:20", "60:40"))
plot_df$Jenis <- factor(plot_df$Jenis, levels = c("Training", "Testing"))

ggplot(plot_df, aes(x = Hidden, y = Akurasi, fill = Jenis)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = round(Akurasi, 3)), position = position_dodge(width = 0.9),
            vjust = -0.3, size = 3) +
  facet_wrap(~ Split, labeller = labeller(Split = function(x) paste("Pembagian data", x))) +
  coord_cartesian(ylim = c(0, 1.08)) +
  theme_minimal() +
  labs(title = "Akurasi Data Training dan Testing menurut Hidden Neuron",
       x = "Jumlah hidden neuron", y = "Akurasi", fill = "")

Grafik batang membandingkan akurasi training dan testing untuk setiap jumlah hidden neuron pada kedua skenario. Selisih yang besar antara batang training dan testing menandakan overfitting, sedangkan batang yang sama tinggi menandakan model dapat menggeneralisasi dengan baik.

4.8 Eksplorasi Model Terbaik

Eksplorasi dilakukan pada model terbaik, yaitu model dengan 10 hidden neuron pada skenario 80:20.

mod_best <- model_list[[i_best]]
sp_best  <- if (hasil$Split[i_best] == "80:20") sp80 else sp60
mod_best
## a 4-10-3 network with 83 weights
## inputs: Sepal.Length Sepal.Width Petal.Length Petal.Width 
## output(s): Species 
## options were - softmax modelling

4.8.1 Arsitektur Jaringan (plotnet)

plotnet(mod_best)

Diagram menampilkan arsitektur model terbaik: 4 neuron pada input layer (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width), 10 neuron pada hidden layer, dan 3 neuron pada output layer (satu untuk tiap spesies). Neuron berlabel B adalah bias. Garis hitam menunjukkan bobot positif dan garis abu-abu menunjukkan bobot negatif, sedangkan ketebalan garis sebanding dengan besar bobot. Banyaknya garis yang terbentuk menunjukkan jaringan terhubung penuh (fully connected) dengan 83 bobot.

4.8.2 Bobot Jaringan (neuralweights)

bobot <- neuralweights(mod_best)
str(bobot, max.level = 1)
## List of 2
##  $ struct: int [1:3] 4 10 3
##  $ wts   :List of 13

Output neuralweights() memuat bobot yang menghubungkan setiap neuron pada satu lapisan ke lapisan berikutnya, termasuk bobot bias. Total bobot yang diestimasi pada model terbaik adalah 83, sesuai rumus \(p \cdot h + h + h \cdot K + K\). Bobot-bobot ini yang diperbarui selama proses backpropagation untuk meminimalkan galat. Karena banyak dan saling berinteraksi melalui fungsi aktivasi non-linear, bobot individual sulit diinterpretasikan langsung sehingga variable importance digunakan sebagai ringkasan.

4.8.3 Variable Importance (olden)

olden_mat <- tryCatch({
  sapply(lv, function(sp) {
    o <- olden(mod_best, out_var = sp, bar_plot = FALSE)
    v <- o$importance
    names(v) <- rownames(o)
    v[names(iris)[1:4]]
  })
}, error = function(e) NULL)

if (!is.null(olden_mat)) kable(olden_mat, digits = 3, align = "c",
                               caption = "Olden variable importance menurut neuron keluaran (spesies)")
Olden variable importance menurut neuron keluaran (spesies)
setosa versicolor virginica
Sepal.Length 2547227 6060020 -8609192
Sepal.Width 2893670 6840309 -9736171
Petal.Length -5567725 -13147630 18719615
Petal.Width -5286873 -12526804 17817810
for (sp in lv) {
  tryCatch(print(olden(mod_best, out_var = sp) +
                   ggtitle(paste("Olden variable importance - neuron keluaran", sp))),
           error = function(e) NULL)
}

Metode Olden menjumlahkan hasil kali bobot dari tiap prediktor melalui seluruh neuron tersembunyi menuju satu neuron keluaran, sehingga nilainya memiliki tanda. Nilai positif berarti kenaikan prediktor meningkatkan keluaran neuron tersebut (peluang spesies tersebut), sedangkan nilai negatif berarti sebaliknya, dan semakin besar nilai mutlaknya semakin besar pengaruhnya. Hasilnya: pada neuron keluaran setosa variabel dengan pengaruh terbesar adalah Petal.Length (-5.567.724,81, berpengaruh negatif); pada neuron keluaran versicolor variabel dengan pengaruh terbesar adalah Petal.Length (-13.147.629,53, berpengaruh negatif); pada neuron keluaran virginica variabel dengan pengaruh terbesar adalah Petal.Length (18.719.615,17, berpengaruh positif). Hasil ini sebaiknya dibandingkan dengan boxplot pada subbab 4.2, yaitu variabel ukuran mahkota (Petal) tampak paling membedakan ketiga spesies, sedangkan nilai olden bergantung pada bobot awal acak dan karena itu dapat berbeda jika model dilatih ulang dengan seed yang berbeda.

BAB V KESIMPULAN

5.1 Kesimpulan

Artificial Neural Network (ANN) adalah model yang terdiri atas input layer, hidden layer, dan output layer, yang dilatih dengan backpropagation melalui tahap forward propagation, backward propagation, dan pembaruan bobot. Pada klasifikasi multikelas, lapisan keluaran menggunakan softmax sehingga setiap kelas memiliki probabilitas dan jumlah probabilitasnya sama dengan 1. ANN klasifikasi pada data Iris berhasil dibangun menggunakan fungsi nnet() dan dievaluasi menggunakan confusion matrix, akurasi, presisi, recall, dan \(F1\).

Berdasarkan perbandingan enam model (hidden neuron 10, 20, dan 30 pada pembagian data 80:20 dan 60:40), model terbaik pada data testing adalah model dengan 10 hidden neuron pada skenario 80:20 dengan akurasi 100,00%, presisi 1,0000, recall 1,0000, dan \(F1\) 1,0000. Rata-rata akurasi testing pada skenario 80:20 adalah 93,33% dan pada skenario 60:40 adalah 95,00%, sehingga skenario 60:40 menghasilkan akurasi rata-rata yang lebih baik pada data ini. Akurasi antar-jumlah hidden neuron menunjukkan perbedaan yang terlihat, sehingga jumlah neuron yang lebih banyak tidak otomatis memberikan hasil yang lebih baik dan hanya menambah jumlah bobot dari 83 menjadi 243. Karena data testing berukuran kecil, perbedaan satu atau dua observasi dapat mengubah urutan model, sehingga pemilihan model terbaik perlu ditafsirkan dengan hati-hati.

5.2 Saran

Praktikan disarankan untuk mempelajari lebih lanjut mengenai program RStudio melalui berbagai sumber pembelajaran, seperti buku, jurnal, modul praktikum, maupun sumber belajar lainnya agar semakin memahami penerapan ANN. Pada penelitian selanjutnya, disarankan menggunakan validasi silang (cross-validation) atau pengulangan pembagian data dengan beberapa nilai set.seed agar perbandingan model lebih andal, menaikkan nilai maxit bila model belum konvergen, menambahkan regularisasi (decay) untuk mengurangi overfitting, melakukan standardisasi prediktor, serta menggunakan data yang lebih besar atau lebih kompleks seperti Breast Cancer. Praktikan juga diharapkan lebih teliti dalam melakukan pengolahan data dan penulisan kode program agar dapat meminimalkan kesalahan selama praktikum.

DAFTAR PUSTAKA

Fransiska, H. (2026). Modul Praktikum Machine Learning dan Model Prediction. Universitas Bengkulu: Bengkulu.

Aini, D. H. N., Kurniasari, D., Nuryaman, A., & Usman, M. (2023). Implementasi artificial neural network dengan algoritma backpropagation untuk klasifikasi penilaian rating pada penjualan Blackmores di Tokopedia. Jurnal Teknik Informatika (JUTIF), 4(2), 365–372. https://doi.org/10.52436/1.jutif.2023.4.2.539

Harahap, C. P. (2022). Klasifikasi penyakit demam menggunakan jaringan syaraf tiruan algoritma backpropagation. Journal of Informatics and Data Science, 1(2). https://doi.org/10.24114/j-ids.v1i2.38680

Heryanto, M. A., Juananta, D., Sadanareswari, A., & Wulandari, S. A. (2023). Klasifikasi jenis kulit wajah menggunakan backpropagation neural networks berbasis GLCM. ELKOMIKA: Jurnal Teknik Energi Elektrik, Teknik Telekomunikasi, & Teknik Elektronika, 11(3), 705–715. https://doi.org/10.26760/elkomika.v11i3.705

Sapriani, Poerwanto, B., & Aswi, A. (2023). Implementasi backpropagation neural network pada status preeklampsia ibu hamil. Jurnal Matematika dan Statistika serta Aplikasinya, 11(2). https://journal.uin-alauddin.ac.id/index.php/msa/article/download/40657/18540