BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan teknologi informasi menyebabkan data yang dihasilkan semakin besar dan beragam sehingga diperlukan metode machine learning untuk mempelajari pola dari data dan memprediksi suatu keluaran. Salah satu metode yang banyak digunakan adalah Artificial Neural Network (ANN) atau jaringan syaraf tiruan, yaitu model komputasi yang terinspirasi dari kerja otak manusia. ANN tersusun atas neuron-neuron yang saling terhubung dalam lapisan masukan (input layer), lapisan tersembunyi (hidden layer), dan lapisan keluaran (output layer). Setiap neuron memproses masukan melalui bobot dan bias, kemudian menerapkan fungsi aktivasi untuk menghasilkan keluaran (Fransiska, 2026; Saragih & Huda, 2022). Kemampuan tersebut membuat ANN dapat digunakan untuk permasalahan regresi maupun klasifikasi.

Pada klasifikasi, ANN digunakan untuk memprediksi variabel respons yang berbentuk kategori. Proses pembelajarannya bersifat terawasi (supervised learning) dan dilakukan melalui algoritma backpropagation, yaitu penyesuaian bobot jaringan berdasarkan kesalahan prediksi agar kesalahan tersebut semakin kecil (Fransiska, 2026). Arsitektur jaringan, termasuk banyaknya neuron pada hidden layer, memengaruhi kemampuan jaringan dalam mempelajari pola data. Jumlah neuron yang terlalu sedikit cenderung menyebabkan underfitting, sedangkan jumlah yang berlebihan berpotensi menimbulkan overfitting. Oleh karena itu, jumlah neuron pada hidden layer pada umumnya ditentukan melalui percobaan terhadap beberapa konfigurasi (Harahap, 2022).

Selain arsitektur jaringan, kinerja ANN dipengaruhi oleh praproses dan pembagian data. Normalisasi atau standardisasi data bertujuan menyesuaikan rentang nilai masukan agar sesuai dengan fungsi aktivasi sehingga pelatihan lebih stabil dan konvergensi bobot lebih cepat (Hertanto dkk., 2025), sedangkan pembagian data latih dan data uji merupakan tahapan yang lazim dilakukan sebelum model dievaluasi (Harahap, 2022). Kinerja model klasifikasi dinilai menggunakan confusion matrix beserta ukuran Accuracy, Precision, Recall, Specificity, dan F1-score (Lestari & Sirodj, 2021; Fransiska, 2026).

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, adapun rumusan masalah sebagai berikut:

  1. Bagaimana dan mengimplemeArtificial Neural Network (ANN) untuk regresi dan klasifikasi menggunakan bahas pemrograman R.
  2. Bagaimana cara mengevaluasi performa model ANN menggunakan metrik evaluasi MSE dan MAPE untuk regres, serta akurasi dan presisi untuk klasifikasi.

1.3 Tujuan Penelitian

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

  1. Memhami dan mengimplemeArtificial Neural Network (ANN) untuk regresi dan klasifikasi menggunakan bahas pemrograman R.
  2. Memahami cara mengevaluasi performa model ANN menggunakan metrik evaluasi MSE dan MAPE untuk regres, serta akurasi dan presisi untuk klasifikasi.

1.4 Manfaat Penelitian

Manfaat yang diperoleh melalui penelitian ini, yaitu:

  1. Bagi penulis:

    1. Menambah pengetahuan dan pemahaman mengenai Artificial Neural Network sebagai salah satu metode machine learning.
    2. Mampu mengaplikasikan R untuk membentuk dan mengevaluasi model ANN klasifikasi.
  2. Bagi pembaca:

    1. Menambah ilmu pengetahuan dan pemahaman yang berkaitan dengan ANN klasifikasi menggunakan R.
    2. Rujukan penelitian selanjutnya.

1.5 Batasan Masalah

Adapun batasan masalah pada penelitian ini adalah menerapkan metode Artificial Neural Network (ANN) untuk klasifikasi dengan jumlah hidden neuron sebesar 10, 20, dan 30, menggunakan pembagian data training dan testing sebesar 80%:20% serta 60%:40%, kemudian menginterpretasikan hasil setiap model.

1.6 Sistematika Penulisan

Adapun sistematika penulisan dari praktikum ini adalah:

BAB I PENDAHULUAN

Bab ini memuat latar belakang, rumusan masalah, tujuan dan manfaat, batasan masalah dan sistematika penulisan.

BAB II TINJAUAN PUSTAKA

Bab ini merupakan bab yang memuat pengertian dan teori yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.

BAB III METODE PENELITIAN

Bab ini merupakan bab yang memuat jenis dan sumber data, variabel penelitian, rancangan percobaan, dan langkah-langkah analisis yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.

BAB IV HASIL DAN PEMBAHASAN

Bab ini merupakan bab yang memuat hasil dan pembahasan yang telah dilakukan pada program kemudian diinterpretasikan.

BAB V KESIMPULAN DAN SARAN

Bab ini merupakan bab yang memuat kesimpulan dan saran.

DAFTAR PUSTAKA

BAB II TINJAUAN PUSTAKA

2.1 Artificial Neural Network (ANN)

Artificial Neural Network (ANN) merupakan model komputasi yang terinspirasi dari kerja otak manusia, yaitu sejumlah neuron saling terhubung untuk memproses informasi dan mempelajari pola dari data (Fransiska, 2026). Saragih dan Huda (2022) menjelaskan bahwa jaringan syaraf tiruan merupakan metode komputasi yang meniru sistem jaringan syaraf biologi dengan elemen perhitungan nonlinier dasar yang disebut neuron dan diorganisasikan sebagai jaringan yang saling terhubung. ANN terdiri atas lapisan masukan (input layer), lapisan tersembunyi (hidden layer), dan lapisan keluaran (output layer). Setiap neuron menerima masukan yang dikalikan dengan bobot tertentu, ditambahkan bias, kemudian diproses melalui fungsi aktivasi untuk menghasilkan keluaran (Fransiska, 2026).

Secara matematis, pengolahan informasi pada suatu neuron dinyatakan sebagai berikut (Fransiska, 2026):

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

Keterangan:

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

ANN memiliki tiga komponen utama, yaitu arsitektur jaringan yang menggambarkan pola hubungan antarneuron, algoritma pembelajaran yang digunakan untuk menyesuaikan bobot jaringan, serta fungsi aktivasi yang menentukan keluaran setiap neuron (Fransiska, 2026).

2.2 Arsitektur Jaringan

Arsitektur ANN dibedakan menjadi Single Layer Perceptron (SLP) dan Multi-Layer Perceptron (MLP) (Fransiska, 2026). Perbedaan keduanya dirangkum pada Tabel 1 berikut.

Tabel 1. Arsitektur Jaringan ANN

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

Hertanto dkk. (2025) menyebutkan bahwa jaringan banyak lapisan memiliki kemampuan yang lebih baik dalam menyelesaikan permasalahan kompleks dibandingkan jaringan yang hanya terdiri dari satu lapisan. Praktikum ini menggunakan MLP dengan satu hidden layer.

2.3 Algoritma Backpropagation

Backpropagation merupakan algoritma pembelajaran pada ANN yang digunakan untuk menyesuaikan bobot jaringan berdasarkan kesalahan prediksi (Fransiska, 2026). Algoritma ini menggunakan konsep supervised learning, yaitu pembelajaran dengan data yang kelas atau nilai targetnya telah diketahui (Saragih & Huda, 2022). Proses pembelajaran terdiri atas tiga tahap berikut (Fransiska, 2026):

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

Pembaruan bobot menggunakan gradient descent dapat dituliskan sebagai berikut (Fransiska, 2026):

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

dengan \(L\) adalah fungsi kerugian (loss function) dan \(\eta\) adalah laju pembelajaran (learning rate). Proses pelatihan dilakukan berulang sampai kesalahan mencapai nilai minimum yang diharapkan atau batas iterasi maksimum tercapai (Hertanto dkk., 2025).

2.4 Fungsi Aktivasi

Fungsi aktivasi digunakan untuk menentukan keluaran neuron dan membantu jaringan mempelajari pola nonlinear (Fransiska, 2026). Beberapa fungsi aktivasi yang umum digunakan dirangkum pada Tabel 2 berikut.

Tabel 2. Fungsi Aktivasi pada ANN

Fungsi Rumus Penggunaan
Sigmoid \(f(z)=\dfrac{1}{1+e^{-z}}\), dengan \(f'(z)=f(z)\left[1-f(z)\right]\) Hidden layer atau klasifikasi biner; menghasilkan nilai antara 0 dan 1.
Hyperbolic tangent (Tanh) \(f(x)=\dfrac{1-e^{-2x}}{1+e^{-2x}}=\tanh(x)\), dengan \(f'(x)=1-\tanh^{2}(x)\) Hidden layer; menghasilkan nilai antara -1 dan 1.
Rectified Linear Unit (ReLU) \(f(x)=\max(0,x)\) Hidden layer; mempelajari pola nonlinear dan mempercepat konvergensi.
Softmax \(\operatorname{softmax}(z_k)=\dfrac{e^{z_k}}{\sum_{j=1}^{K}e^{z_j}}\) Klasifikasi multikelas; jumlah probabilitas seluruh kelas sama dengan 1.

Pemilihan fungsi aktivasi dapat memengaruhi kecepatan konvergensi dan kemampuan jaringan dalam memodelkan hubungan nonlinear (Fransiska, 2026).

2.5 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. Evaluasi dilakukan dengan membandingkan nilai aktual dan nilai prediksi menggunakan Mean Squared Error (MSE) dan Mean Absolute Percentage Error (MAPE) (Fransiska, 2026):

\[ MSE=\frac{1}{n}\sum_{i=1}^{n}\left(y_i-\hat{y}_i\right)^2 \qquad MAPE=\frac{100\%}{n}\sum_{i=1}^{n}\left|\frac{y_i-\hat{y}_i}{y_i}\right| \]

Nilai MSE dan MAPE yang lebih kecil menunjukkan prediksi yang lebih mendekati nilai aktual.

2.6 ANN Klasifikasi

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

  1. Klasifikasi biner, yaitu klasifikasi dengan dua kategori. Lapisan keluaran umumnya menggunakan satu neuron dengan fungsi sigmoid untuk menghasilkan probabilitas antara 0 dan 1.
  2. Klasifikasi multikelas, yaitu klasifikasi dengan lebih dari dua kategori. Lapisan keluaran umumnya menggunakan fungsi softmax untuk menghasilkan probabilitas setiap kelas.

Pembelajaran ANN klasifikasi dilakukan dengan meminimalkan kesalahan klasifikasi. Salah satu fungsi kerugian yang digunakan adalah cross-entropy loss, yang mengukur perbedaan antara probabilitas prediksi dan kelas aktual. Untuk klasifikasi biner digunakan binary cross-entropy (Fransiska, 2026):

\[ BCE=-\frac{1}{n}\sum_{i=1}^{n}\left[y_i\ln(\hat{p}_i)+(1-y_i)\ln(1-\hat{p}_i)\right] \]

dengan \(y_i\) adalah kelas aktual observasi ke-\(i\) yang bernilai 0 atau 1, dan \(\hat{p}_i\) adalah probabilitas kelas positif pada observasi ke-\(i\). Untuk klasifikasi multikelas digunakan 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 model untuk kelas ke-\(k\) (Fransiska, 2026).

2.7 Hidden Neuron dan Praproses Data

Hidden neuron adalah neuron pada hidden layer yang berperan mempelajari hubungan antara variabel prediktor dan variabel respons. Hertanto dkk. (2025) menjelaskan bahwa penentuan arsitektur didasarkan pada keseimbangan antara kemampuan mempelajari pola dan risiko overfitting maupun underfitting: jumlah neuron yang terlalu sedikit cenderung menyebabkan underfitting, sedangkan jumlah yang berlebihan berpotensi menimbulkan overfitting. Jumlah neuron pada hidden layer umumnya ditentukan melalui percobaan beberapa konfigurasi (Harahap, 2022), sehingga praktikum ini membandingkan 10, 20, dan 30 hidden neuron (Fransiska, 2026).

Normalisasi atau standardisasi data dilakukan untuk menyesuaikan rentang nilai masukan agar sesuai dengan fungsi aktivasi yang digunakan, serta berfungsi meningkatkan stabilitas pelatihan dan mempercepat konvergensi bobot (Hertanto dkk., 2025). Sebelum evaluasi, data dibagi menjadi data latih (training) untuk membentuk model dan data uji (testing) untuk menilai kinerja model (Harahap, 2022).

2.8 Evaluasi Klasifikasi

Evaluasi ANN klasifikasi dilakukan dengan membandingkan kelas aktual dan kelas hasil prediksi, yang disajikan dalam confusion matrix (Fransiska, 2026). Struktur confusion matrix untuk klasifikasi biner disajikan pada Tabel 3 berikut.

Tabel 3. Confusion Matrix

Prediksi Positif Prediksi Negatif
Aktual Positif True Positive (TP) False Negative (FN)
Aktual Negatif False Positive (FP) True Negative (TN)

Berdasarkan confusion matrix, ukuran evaluasi yang digunakan adalah sebagai berikut (Fransiska, 2026).

1. Accuracy

\[ \text{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN} \]

2. Precision

\[ \text{Precision}=\frac{TP}{TP+FP} \]

3. Recall

\[ \text{Recall}=\frac{TP}{TP+FN} \]

4. Specificity

\[ \text{Specificity}=\frac{TN}{TN+FP} \]

5. F1-score

\[ F1\text{-score}=2\times\frac{\text{Precision}\times\text{Recall}}{\text{Precision}+\text{Recall}} \]

Accuracy menunjukkan proporsi prediksi yang benar secara keseluruhan, Precision mengukur ketepatan prediksi pada kelas positif, Recall mengukur kemampuan model mengenali seluruh kasus positif, Specificity mengukur kemampuan model mengenali kasus negatif, sedangkan F1-score merupakan rata-rata harmonis Precision dan Recall. Pada praktikum ini kelas malignant ditetapkan sebagai kelas positif, sehingga Recall menunjukkan kemampuan model mengenali observasi malignant dan Specificity menunjukkan kemampuan model mengenali observasi benign.

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

Penelitian ini merupakan penelitian terapan dengan pendekatan kuantitatif. Data yang digunakan adalah data sekunder berupa dataset BreastCancer dari package mlbench pada program R. Data tersebut memuat hasil pengamatan karakteristik sel jaringan payudara yang digunakan untuk mengklasifikasikan tumor sebagai benign (jinak) atau malignant (ganas) menggunakan ANN.

3.2 Variabel Penelitian

Variabel respons yang digunakan adalah Class, yaitu kelas tumor dengan kategori benign dan malignant. Variabel prediktor meliputi Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl.cromatin, Normal.nucleoli, dan Mitoses. Kolom Id tidak digunakan karena hanya berfungsi sebagai identitas observasi.

3.3 Analisis Data

Berikut merupakan algoritma pengolahan data:

  1. Mulai.

  2. Input data.

  3. Membagi data training dan testing (80%:20% dan 60%:40%).

  4. Membangun model ANN dengan hidden neuron 10, 20, dan 30.

  5. Melakukan prediksi dan evaluasi model.

  6. Menginterpretasikan dan membandingkan hasil.

  7. Menarik kesimpulan.

  8. Selesai.

3.4 Diagram Alir Penelitan

BAB IV HASIL DAN PEMBAHASAN

Berikut merupakan diagram alir penelitian:

Gambar 3.1 Diagram Alir Penelitian

4.1 Persiapan dan Preprocessing Data

4.1.1 Pemanggilan Package

# 1. Library
library(nnet)
library(NeuralNetTools)
library(mlbench)
library(caret)
library(knitr)
library(ggplot2)
library(dplyr)
library(tidyr)

4.1.2 Deskripsi Data

# 2. Data
# Mengambil Dataset
data("BreastCancer", package = "mlbench")
bc_raw <- BreastCancer
# Melihat Dimensi Data
dim(bc_raw)
## [1] 699  11
# Memeriksa Missing Value
colSums(is.na(bc_raw))
##              Id    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion 
##               0               0               0               0               0 
##    Epith.c.size     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses 
##               0              16               0               0               0 
##           Class 
##               0

Interpretasi: Dataset BreastCancer terdiri atas 699 observasi dan 11 variabel, yaitu kolom Id, sembilan variabel prediktor, dan variabel Class. Terdapat 16 data kosong pada variabel Bare.nuclei, sedangkan variabel lainnya tidak memiliki data kosong.

4.1.3 Preprocessing dan Statistik Deskriptif

# 3. Preprocessing Data
# Menghapus Kolom Id (Identitas Observasi)
bc <- bc_raw
bc$Id <- NULL
# Menghapus Pengamatan dengan Missing Value
bc <- na.omit(bc)
# Mengubah Prediktor Menjadi Numerik
kolom_prediktor <- setdiff(names(bc), "Class")
bc[kolom_prediktor] <- lapply(bc[kolom_prediktor], function(x) {
  as.numeric(as.character(x))
})
# Menetapkan Urutan Kelas (benign sebagai Level Pertama)
bc$Class <- factor(as.character(bc$Class), levels = c("benign", "malignant"))
# Memeriksa Dimensi dan Missing Value Setelah Preprocessing
dim(bc)
## [1] 683  10
sum(is.na(bc))
## [1] 0
# 4. Statistik Deskriptif
summary(bc)
##   Cl.thickness      Cell.size        Cell.shape     Marg.adhesion  
##  Min.   : 1.000   Min.   : 1.000   Min.   : 1.000   Min.   : 1.00  
##  1st Qu.: 2.000   1st Qu.: 1.000   1st Qu.: 1.000   1st Qu.: 1.00  
##  Median : 4.000   Median : 1.000   Median : 1.000   Median : 1.00  
##  Mean   : 4.442   Mean   : 3.151   Mean   : 3.215   Mean   : 2.83  
##  3rd Qu.: 6.000   3rd Qu.: 5.000   3rd Qu.: 5.000   3rd Qu.: 4.00  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.00  
##   Epith.c.size     Bare.nuclei      Bl.cromatin     Normal.nucleoli
##  Min.   : 1.000   Min.   : 1.000   Min.   : 1.000   Min.   : 1.00  
##  1st Qu.: 2.000   1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.: 1.00  
##  Median : 2.000   Median : 1.000   Median : 3.000   Median : 1.00  
##  Mean   : 3.234   Mean   : 3.545   Mean   : 3.445   Mean   : 2.87  
##  3rd Qu.: 4.000   3rd Qu.: 6.000   3rd Qu.: 5.000   3rd Qu.: 4.00  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.00  
##     Mitoses             Class    
##  Min.   : 1.000   benign   :444  
##  1st Qu.: 1.000   malignant:239  
##  Median : 1.000                  
##  Mean   : 1.603                  
##  3rd Qu.: 1.000                  
##  Max.   :10.000
# Distribusi Kelas
table(bc$Class)
## 
##    benign malignant 
##       444       239
round(prop.table(table(bc$Class)), 4)
## 
##    benign malignant 
##    0.6501    0.3499

Interpretasi: Setelah data kosong dihapus, tersisa 683 observasi dengan 9 variabel prediktor dan 1 variabel respons tanpa data kosong. Seluruh prediktor bernilai 1 sampai 10, dengan rata-rata tertinggi pada Cl.thickness (4,442) dan Bare.nuclei (3,545), serta rata-rata terendah pada Mitoses (1,603) yang bernilai 1 pada sebagian besar observasi. Distribusi kelas menunjukkan 444 observasi benign (65,0%) dan 239 observasi malignant (35,0%), sehingga data tidak seimbang sempurna. Oleh karena itu, evaluasi model tidak cukup hanya menggunakan Accuracy, tetapi juga Precision, Recall, Specificity, dan F1-score.

4.2 Pembagian Data Training dan Testing

# 5. Pembagian Data Training dan Testing
# Skenario 1: Training 80% dan Testing 20%
set.seed(234)
indeks_80 <- createDataPartition(bc$Class, p = 0.80, list = FALSE)
train_80 <- bc[indeks_80, , drop = FALSE]
test_20  <- bc[-indeks_80, , drop = FALSE]

# Skenario 2: Training 60% dan Testing 40%
set.seed(234)
indeks_60 <- createDataPartition(bc$Class, p = 0.60, list = FALSE)
train_60 <- bc[indeks_60, , drop = FALSE]
test_40  <- bc[-indeks_60, , drop = FALSE]

# Jumlah Observasi dan Distribusi Kelas
distribusi_split <- bind_rows(
  data.frame(Skenario = "80:20", Bagian = "Training",
             as.data.frame(table(Kelas = train_80$Class))),
  data.frame(Skenario = "80:20", Bagian = "Testing",
             as.data.frame(table(Kelas = test_20$Class))),
  data.frame(Skenario = "60:40", Bagian = "Training",
             as.data.frame(table(Kelas = train_60$Class))),
  data.frame(Skenario = "60:40", Bagian = "Testing",
             as.data.frame(table(Kelas = test_40$Class)))
)
names(distribusi_split)[4] <- "Jumlah"
kable(distribusi_split, caption = "Distribusi Kelas pada Data Training dan Testing")
Distribusi Kelas pada Data Training dan Testing
Skenario Bagian Kelas Jumlah
80:20 Training benign 356
80:20 Training malignant 192
80:20 Testing benign 88
80:20 Testing malignant 47
60:40 Training benign 267
60:40 Training malignant 144
60:40 Testing benign 177
60:40 Testing malignant 95

Interpretasi: Pada skenario 80:20, sebanyak 548 observasi digunakan sebagai data training (356 benign dan 192 malignant) dan 135 observasi sebagai data testing (88 benign dan 47 malignant). Pada skenario 60:40, sebanyak 411 observasi digunakan sebagai data training (267 benign dan 144 malignant) dan 272 observasi sebagai data testing (177 benign dan 95 malignant). Proporsi kelas benign dan malignant relatif terjaga pada kedua skenario. Perlu diperhatikan bahwa data testing skenario 80:20 lebih sedikit, sehingga satu kesalahan klasifikasi memengaruhi nilai metrik lebih besar (sekitar 0,74% dari 135 observasi) dibandingkan skenario 60:40 (sekitar 0,37% dari 272 observasi).

4.3 Standardisasi Data

# 6. Fungsi Standardisasi (berdasarkan data training)
siapkan_data <- function(data_train, data_test) {
  x_train <- data_train[, kolom_prediktor, drop = FALSE]
  x_test  <- data_test[, kolom_prediktor, drop = FALSE]

  # Rata-rata dan simpangan baku dihitung dari data training
  pusat <- vapply(x_train, mean, numeric(1))
  skala <- vapply(x_train, sd, numeric(1))
  skala[is.na(skala) | skala == 0] <- 1

  # Parameter yang sama diterapkan pada data testing
  train_sc <- as.data.frame(scale(x_train, center = pusat, scale = skala))
  train_sc$Class <- data_train$Class
  test_sc <- as.data.frame(scale(x_test, center = pusat, scale = skala))
  test_sc$Class <- data_test$Class

  list(train = train_sc, test = test_sc)
}

# Contoh pemeriksaan pada skenario 80:20
cek_sc <- siapkan_data(train_80, test_20)
round(colMeans(cek_sc$train[, kolom_prediktor]), 4)
##    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion    Epith.c.size 
##               0               0               0               0               0 
##     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses 
##               0               0               0               0
round(apply(cek_sc$train[, kolom_prediktor], 2, sd), 4)
##    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion    Epith.c.size 
##               1               1               1               1               1 
##     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses 
##               1               1               1               1

Interpretasi: Setelah standardisasi, seluruh prediktor pada data training memiliki rata-rata 0 dan simpangan baku 1, sehingga skala antarvariabel menjadi seragam dan tidak ada variabel yang mendominasi proses pelatihan. Data testing distandardisasi menggunakan rata-rata dan simpangan baku yang sama dari data training, sehingga informasi data testing tidak ikut memengaruhi pembentukan model.

4.4 Pembentukan Model ANN

# 7. Fungsi Evaluasi Model
evaluasi_ann <- function(aktual, prediksi) {
  aktual   <- factor(aktual, levels = c("benign", "malignant"))
  prediksi <- factor(as.character(prediksi), levels = c("benign", "malignant"))
  cm <- table(Aktual = aktual, Prediksi = prediksi)

  TN <- as.numeric(cm["benign", "benign"])
  FP <- as.numeric(cm["benign", "malignant"])
  FN <- as.numeric(cm["malignant", "benign"])
  TP <- as.numeric(cm["malignant", "malignant"])

  precision <- TP / (TP + FP)
  recall    <- TP / (TP + FN)

  metrik <- data.frame(
    Accuracy    = (TP + TN) / sum(cm),
    Precision   = precision,
    Recall      = recall,
    Specificity = TN / (TN + FP),
    F1_Score    = 2 * precision * recall / (precision + recall)
  )
  list(confusion = cm, metrics = metrik)
}

# 8. Pembentukan Enam Model ANN
skenario <- list(
  "80:20" = list(train = train_80, test = test_20),
  "60:40" = list(train = train_60, test = test_40)
)
hidden_neuron <- c(10, 20, 30)

model_ann <- list()
hasil_confusion <- list()
hasil_metrik <- list()
hasil_train <- list()

for (nama_skenario in names(skenario)) {
  dat <- siapkan_data(skenario[[nama_skenario]]$train,
                      skenario[[nama_skenario]]$test)

  for (h in hidden_neuron) {
    nama <- paste0("Train", gsub(":", "", nama_skenario), "_Hidden", h)

    # Seed berbeda untuk setiap model agar bobot awal dapat direproduksi
    set.seed(234 + h + ifelse(nama_skenario == "80:20", 80, 60))

    model <- nnet(
      Class ~ .,
      data = dat$train,
      size = h,
      maxit = 1000,
      decay = 0.01,
      rang = 0.1,
      MaxNWts = 20000,
      trace = FALSE
    )

    # Prediksi dan evaluasi pada data testing
    pred <- predict(model, newdata = dat$test, type = "class")
    ev <- evaluasi_ann(dat$test$Class, pred)

    # Akurasi pada data training sebagai pembanding
    pred_train <- predict(model, newdata = dat$train, type = "class")

    model_ann[[nama]] <- model
    hasil_confusion[[nama]] <- ev$confusion
    hasil_metrik[[nama]] <- data.frame(
      Model = nama, Skenario = nama_skenario, Hidden_Neuron = h, ev$metrics
    )
    hasil_train[[nama]] <- data.frame(
      Model = nama,
      Accuracy_Training = mean(pred_train == dat$train$Class)
    )
  }
}

tabel_metrik <- bind_rows(hasil_metrik)
kable(tabel_metrik, digits = 4, caption = "Hasil Evaluasi Enam Model ANN pada Data Testing")
Hasil Evaluasi Enam Model ANN pada Data Testing
Model Skenario Hidden_Neuron Accuracy Precision Recall Specificity F1_Score
Train8020_Hidden10 80:20 10 0.9630 0.9773 0.9149 0.9886 0.9451
Train8020_Hidden20 80:20 20 0.9778 1.0000 0.9362 1.0000 0.9670
Train8020_Hidden30 80:20 30 0.9852 1.0000 0.9574 1.0000 0.9783
Train6040_Hidden10 60:40 10 0.9706 0.9485 0.9684 0.9718 0.9583
Train6040_Hidden20 60:40 20 0.9596 0.9286 0.9579 0.9605 0.9430
Train6040_Hidden30 60:40 30 0.9743 0.9490 0.9789 0.9718 0.9637

Interpretasi: Pada setiap skenario dibentuk tiga model ANN dengan 10, 20, dan 30 hidden neuron sehingga diperoleh enam model. Seluruh model memperoleh Accuracy pada data testing antara 0,9596 dan 0,9852, yang menunjukkan bahwa ANN mampu membedakan tumor benign dan malignant dengan baik pada data yang tidak digunakan saat pelatihan. Perbedaan kinerja antarmodel relatif kecil dan dibahas lebih rinci pada subbab berikut.

4.5 Hasil ANN pada Training 80% dan Testing 20%

# 9. Fungsi Menampilkan Confusion Matrix dan Metrik Satu Model
tampil_model <- function(nama) {
  print(kable(as.data.frame.matrix(hasil_confusion[[nama]]),
              caption = paste("Confusion Matrix", nama)))
  print(kable(filter(tabel_metrik, Model == nama), digits = 4,
              caption = paste("Metrik Evaluasi", nama)))
}

4.5.1 Model dengan 10 Hidden Neuron

tampil_model("Train8020_Hidden10")
## 
## 
## Table: Confusion Matrix Train8020_Hidden10
## 
## |          | benign| malignant|
## |:---------|------:|---------:|
## |benign    |     87|         1|
## |malignant |      4|        43|
## 
## 
## Table: Metrik Evaluasi Train8020_Hidden10
## 
## |Model              |Skenario | Hidden_Neuron| Accuracy| Precision| Recall| Specificity| F1_Score|
## |:------------------|:--------|-------------:|--------:|---------:|------:|-----------:|--------:|
## |Train8020_Hidden10 |80:20    |            10|    0.963|    0.9773| 0.9149|      0.9886|   0.9451|

Interpretasi: Dari 135 observasi testing, model ini mengklasifikasikan 130 observasi dengan benar (87 benign dan 43 malignant). Terdapat 1 kesalahan False Positive (benign diprediksi malignant) dan 4 kesalahan False Negative (malignant diprediksi benign). Model memperoleh Accuracy 0,9630, Precision 0,9773, Recall 0,9149, Specificity 0,9886, dan F1-score 0,9451. Artinya, hampir seluruh prediksi malignant benar (Precision tinggi), tetapi sekitar 8,5% kasus malignant tidak terdeteksi. Karena Specificity lebih tinggi daripada Recall, model lebih baik dalam mengenali kelas benign.

4.5.2 Model dengan 20 Hidden Neuron

tampil_model("Train8020_Hidden20")
## 
## 
## Table: Confusion Matrix Train8020_Hidden20
## 
## |          | benign| malignant|
## |:---------|------:|---------:|
## |benign    |     88|         0|
## |malignant |      3|        44|
## 
## 
## Table: Metrik Evaluasi Train8020_Hidden20
## 
## |Model              |Skenario | Hidden_Neuron| Accuracy| Precision| Recall| Specificity| F1_Score|
## |:------------------|:--------|-------------:|--------:|---------:|------:|-----------:|--------:|
## |Train8020_Hidden20 |80:20    |            20|   0.9778|         1| 0.9362|           1|    0.967|

Interpretasi: Model ini mengklasifikasikan 132 dari 135 observasi testing dengan benar (88 benign dan 44 malignant). Tidak ada kesalahan False Positive, sedangkan False Negative berjumlah 3 observasi. Model memperoleh Accuracy 0,9778, Precision 1,0000, Recall 0,9362, Specificity 1,0000, dan F1-score 0,9670. Seluruh prediksi malignant benar dan seluruh observasi benign dikenali dengan tepat, tetapi masih terdapat 3 kasus malignant yang tidak terdeteksi. Dibandingkan model dengan 10 hidden neuron, kesalahan berkurang dari 5 menjadi 3 observasi.

4.5.3 Model dengan 30 Hidden Neuron

tampil_model("Train8020_Hidden30")
## 
## 
## Table: Confusion Matrix Train8020_Hidden30
## 
## |          | benign| malignant|
## |:---------|------:|---------:|
## |benign    |     88|         0|
## |malignant |      2|        45|
## 
## 
## Table: Metrik Evaluasi Train8020_Hidden30
## 
## |Model              |Skenario | Hidden_Neuron| Accuracy| Precision| Recall| Specificity| F1_Score|
## |:------------------|:--------|-------------:|--------:|---------:|------:|-----------:|--------:|
## |Train8020_Hidden30 |80:20    |            30|   0.9852|         1| 0.9574|           1|   0.9783|

Interpretasi: Model ini mengklasifikasikan 133 dari 135 observasi testing dengan benar (88 benign dan 45 malignant). Tidak ada kesalahan False Positive dan hanya 2 kesalahan False Negative. Model memperoleh Accuracy 0,9852, Precision 1,0000, Recall 0,9574, Specificity 1,0000, dan F1-score 0,9783. Model ini memiliki kinerja tertinggi pada skenario 80:20. Pada skenario ini, penambahan hidden neuron dari 10 ke 20 lalu 30 diikuti peningkatan Accuracy dan F1-score serta penurunan jumlah kesalahan secara konsisten.

4.6 Hasil ANN pada Training 60% dan Testing 40%

4.6.1 Model dengan 10 Hidden Neuron

tampil_model("Train6040_Hidden10")
## 
## 
## Table: Confusion Matrix Train6040_Hidden10
## 
## |          | benign| malignant|
## |:---------|------:|---------:|
## |benign    |    172|         5|
## |malignant |      3|        92|
## 
## 
## Table: Metrik Evaluasi Train6040_Hidden10
## 
## |Model              |Skenario | Hidden_Neuron| Accuracy| Precision| Recall| Specificity| F1_Score|
## |:------------------|:--------|-------------:|--------:|---------:|------:|-----------:|--------:|
## |Train6040_Hidden10 |60:40    |            10|   0.9706|    0.9485| 0.9684|      0.9718|   0.9583|

Interpretasi: Dari 272 observasi testing, model ini mengklasifikasikan 264 observasi dengan benar (172 benign dan 92 malignant). Terdapat 5 kesalahan False Positive dan 3 kesalahan False Negative. Model memperoleh Accuracy 0,9706, Precision 0,9485, Recall 0,9684, Specificity 0,9718, dan F1-score 0,9583. Nilai Recall sedikit lebih tinggi daripada Specificity, sehingga model relatif seimbang dalam mengenali kedua kelas dengan kecenderungan lebih baik pada kelas malignant.

4.6.2 Model dengan 20 Hidden Neuron

tampil_model("Train6040_Hidden20")
## 
## 
## Table: Confusion Matrix Train6040_Hidden20
## 
## |          | benign| malignant|
## |:---------|------:|---------:|
## |benign    |    170|         7|
## |malignant |      4|        91|
## 
## 
## Table: Metrik Evaluasi Train6040_Hidden20
## 
## |Model              |Skenario | Hidden_Neuron| Accuracy| Precision| Recall| Specificity| F1_Score|
## |:------------------|:--------|-------------:|--------:|---------:|------:|-----------:|--------:|
## |Train6040_Hidden20 |60:40    |            20|   0.9596|    0.9286| 0.9579|      0.9605|    0.943|

Interpretasi: Model ini mengklasifikasikan 261 dari 272 observasi testing dengan benar (170 benign dan 91 malignant). Terdapat 7 kesalahan False Positive dan 4 kesalahan False Negative. Model memperoleh Accuracy 0,9596, Precision 0,9286, Recall 0,9579, Specificity 0,9605, dan F1-score 0,9430. Model ini memiliki kinerja terendah di antara keenam model. Hal ini menunjukkan bahwa menambah hidden neuron dari 10 menjadi 20 pada skenario ini tidak meningkatkan kinerja, melainkan justru menurunkannya.

4.6.3 Model dengan 30 Hidden Neuron

tampil_model("Train6040_Hidden30")
## 
## 
## Table: Confusion Matrix Train6040_Hidden30
## 
## |          | benign| malignant|
## |:---------|------:|---------:|
## |benign    |    172|         5|
## |malignant |      2|        93|
## 
## 
## Table: Metrik Evaluasi Train6040_Hidden30
## 
## |Model              |Skenario | Hidden_Neuron| Accuracy| Precision| Recall| Specificity| F1_Score|
## |:------------------|:--------|-------------:|--------:|---------:|------:|-----------:|--------:|
## |Train6040_Hidden30 |60:40    |            30|   0.9743|     0.949| 0.9789|      0.9718|   0.9637|

Interpretasi: Model ini mengklasifikasikan 265 dari 272 observasi testing dengan benar (172 benign dan 93 malignant). Terdapat 5 kesalahan False Positive dan 2 kesalahan False Negative. Model memperoleh Accuracy 0,9743, Precision 0,9490, Recall 0,9789, Specificity 0,9718, dan F1-score 0,9637. Model ini memiliki F1-score tertinggi pada skenario 60:40 dan Recall tertinggi di antara keenam model, sehingga paling baik dalam mengenali kasus malignant.

4.7 Perbandingan Seluruh Model

# 10. Perbandingan Metrik Enam Model
tabel_metrik_long <- tabel_metrik %>%
  pivot_longer(
    cols = c(Accuracy, Precision, Recall, Specificity, F1_Score),
    names_to = "Metrik",
    values_to = "Nilai"
  )

ggplot(tabel_metrik_long,
       aes(x = factor(Hidden_Neuron), y = Nilai,
           group = Skenario, linetype = Skenario)) +
  geom_point(size = 2.5) +
  geom_line() +
  facet_wrap(~ Metrik, scales = "free_y") +
  labs(
    title = "Perbandingan Metrik Evaluasi Enam Model ANN",
    x = "Jumlah Hidden Neuron",
    y = "Nilai Metrik",
    linetype = "Pembagian Data"
  ) +
  theme_minimal()

Interpretasi: Grafik menunjukkan bahwa pengaruh jumlah hidden neuron berbeda pada kedua skenario. Pada skenario 80:20, Accuracy meningkat dari 0,9630 ke 0,9778 lalu 0,9852, dan F1-score meningkat dari 0,9451 ke 0,9670 lalu 0,9783. Pada skenario 60:40, nilai Accuracy tidak meningkat secara konsisten (0,9706; 0,9596; 0,9743), dengan model 20 hidden neuron sebagai yang terendah. Dengan demikian, jumlah hidden neuron yang lebih banyak tidak selalu menghasilkan kinerja yang lebih baik. Pada kedua skenario, model dengan 30 hidden neuron menghasilkan F1-score tertinggi. Skenario 80:20 dengan 20 dan 30 hidden neuron menghasilkan Precision dan Specificity sebesar 1,0000, sedangkan Recall tertinggi (0,9789) diperoleh skenario 60:40 dengan 30 hidden neuron. Karena jumlah data testing berbeda (135 dan 272 observasi), perbandingan antarskenario perlu dilakukan dengan hati-hati.

Perbandingan Akurasi Training dan Testing

# 11. Akurasi Training vs Testing
tabel_train_test <- bind_rows(hasil_train) %>%
  left_join(tabel_metrik %>% select(Model, Accuracy_Testing = Accuracy),
            by = "Model") %>%
  mutate(Selisih = Accuracy_Training - Accuracy_Testing)
kable(tabel_train_test, digits = 4,
      caption = "Perbandingan Akurasi pada Data Training dan Testing")
Perbandingan Akurasi pada Data Training dan Testing
Model Accuracy_Training Accuracy_Testing Selisih
Train8020_Hidden10 1 0.9630 0.0370
Train8020_Hidden20 1 0.9778 0.0222
Train8020_Hidden30 1 0.9852 0.0148
Train6040_Hidden10 1 0.9706 0.0294
Train6040_Hidden20 1 0.9596 0.0404
Train6040_Hidden30 1 0.9743 0.0257

Interpretasi: Seluruh model memperoleh akurasi 1,0000 pada data training, sedangkan akurasi pada data testing berkisar antara 0,9596 dan 0,9852 dengan selisih 0,0148 sampai 0,0404. Model yang mampu memprediksi seluruh data training dengan benar menunjukkan bahwa jaringan memiliki fleksibilitas yang besar sehingga terdapat kecenderungan overfitting. Meskipun demikian, selisih terhadap data testing relatif kecil, sehingga model tetap mampu melakukan generalisasi dengan baik pada data baru. Selisih terkecil terdapat pada model dengan 30 hidden neuron skenario 80:20.

4.8 Penentuan Model Terbaik

# 12. Peringkat Model (F1-score, kemudian Recall, kemudian Accuracy)
peringkat_model <- tabel_metrik %>%
  arrange(desc(F1_Score), desc(Recall), desc(Accuracy))

kable(peringkat_model, digits = 4,
      caption = "Peringkat Model ANN Berdasarkan F1-score, Recall, dan Accuracy")
Peringkat Model ANN Berdasarkan F1-score, Recall, dan Accuracy
Model Skenario Hidden_Neuron Accuracy Precision Recall Specificity F1_Score
Train8020_Hidden30 80:20 30 0.9852 1.0000 0.9574 1.0000 0.9783
Train8020_Hidden20 80:20 20 0.9778 1.0000 0.9362 1.0000 0.9670
Train6040_Hidden30 60:40 30 0.9743 0.9490 0.9789 0.9718 0.9637
Train6040_Hidden10 60:40 10 0.9706 0.9485 0.9684 0.9718 0.9583
Train8020_Hidden10 80:20 10 0.9630 0.9773 0.9149 0.9886 0.9451
Train6040_Hidden20 60:40 20 0.9596 0.9286 0.9579 0.9605 0.9430
# Model Terbaik
model_terbaik <- peringkat_model[1, ]
model_terbaik$Model
## [1] "Train8020_Hidden30"

Interpretasi: Berdasarkan urutan F1-score, Recall, dan Accuracy, model terbaik adalah Train8020_Hidden30, yaitu ANN dengan pembagian data 80:20 dan 30 hidden neuron. Model ini memperoleh Accuracy 0,9852, Precision 1,0000, Recall 0,9574, Specificity 1,0000, dan F1-score 0,9783. F1-score digunakan sebagai kriteria utama karena memperhitungkan keseimbangan Precision dan Recall pada data yang kelasnya tidak seimbang. Peringkat berikutnya ditempati Train8020_Hidden20 (F1-score 0,9670) dan Train6040_Hidden30 (F1-score 0,9637). Perlu dicatat bahwa Train6040_Hidden30 memiliki jumlah False Negative yang sama (2 observasi) dengan model terbaik, tetapi Recall-nya lebih tinggi (0,9789) karena jumlah observasi malignant pada data testing lebih banyak. Selain itu, model terbaik masih melewatkan 2 dari 47 kasus malignant, sehingga pada konteks diagnosis hasil ini tetap perlu dipandang sebagai evaluasi klasifikasi pada dataset ini dan bukan pengganti diagnosis medis.

4.9 Eksplorasi Jaringan ANN

# 13. Eksplorasi Model Terbaik
model_pilihan <- model_ann[[as.character(model_terbaik$Model)]]

# Struktur dan jumlah bobot jaringan
model_pilihan$n
## [1]  9 30  1
length(model_pilihan$wts)
## [1] 331
# Plot arsitektur jaringan
plotnet(model_pilihan)

# Bobot jaringan
bobot_ann <- neuralweights(model_pilihan)

# Variable importance (metode Olden)
olden(model_pilihan)

Interpretasi: Model terbaik memiliki struktur jaringan 9-30-1, yaitu sembilan neuron masukan (variabel prediktor), 30 neuron pada hidden layer, dan satu neuron keluaran (Class), dengan total 331 bobot termasuk bias. Setiap variabel masukan terhubung ke seluruh neuron tersembunyi, kemudian diteruskan ke neuron keluaran untuk menghasilkan probabilitas kelas malignant. Banyaknya hubungan antarneuron menunjukkan bahwa ANN mampu mempelajari pola hubungan yang kompleks antara prediktor dan respons.

Berdasarkan grafik variable importance metode Olden, variabel Bare.nuclei memiliki kontribusi terbesar (sekitar 27,6), diikuti Cl.thickness (sekitar 21,4), Bl.cromatin (sekitar 18,0), Mitoses (sekitar 17,9), dan Cell.shape (sekitar 14,7) yang berarah positif, yaitu cenderung meningkatkan probabilitas kelas malignant. Variabel Epith.c.size memiliki nilai negatif yang cukup besar (sekitar -16,2), sedangkan Cell.size, Marg.adhesion, dan Normal.nucleoli memiliki nilai mendekati nol. Pada metode Olden, tanda positif atau negatif menunjukkan arah kontribusi berdasarkan bobot jaringan dan besarnya nilai mutlak menunjukkan besarnya kontribusi, sehingga nilai negatif tidak berarti variabel tersebut tidak berpengaruh. Karena antarvariabel prediktor saling berkorelasi, nilai ini menggambarkan kontribusi dalam model dan tidak menunjukkan hubungan sebab-akibat.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

Artificial Neural Network (ANN) dapat diterapkan untuk regresi dan klasifikasi menggunakan bahasa pemrograman R. Regresi digunakan untuk memprediksi nilai numerik, sedangkan klasifikasi digunakan untuk memprediksi kategori. Penerapannya meliputi persiapan data, pembentukan arsitektur jaringan, pelatihan model, dan prediksi.

Evaluasi performa ANN untuk regresi menggunakan MSE dan MAPE, sedangkan klasifikasi menggunakan akurasi dan presisi. MSE mengukur rata-rata kuadrat kesalahan prediksi, sementara MAPE mengukur rata-rata persentase kesalahan. Akurasi mengukur proporsi prediksi yang benar, sedangkan presisi mengukur ketepatan model dalam memprediksi kelas positif.

Model ANN klasifikasi pada dataset BreastCancer menggunakan 683 observasi dengan enam kombinasi pembagian data dan hidden neuron 10, 20, dan 30, menghasilkan Accuracy pengujian sebesar 95,96%–98,52%. Model terbaik menggunakan pembagian data 80:20 dan 30 hidden neuron, dengan Accuracy 98,52%, Precision 100%, dan hanya 2 kasus malignant tidak terdeteksi. Seluruh model menunjukkan indikasi overfitting, sedangkan metode Olden mengidentifikasi Bare.nuclei sebagai variabel dengan kontribusi terbesar.

5.2 Saran

Penelitian selanjutnya disarankan untuk memperbaiki penulisan kode dan sintaks program agar terhindar dari kesalahan (error). Setiap tahapan analisis perlu diperiksa untuk memastikan proses berjalan sesuai prosedur. Selain itu, ketelitian dalam menjalankan dan mengevaluasi program perlu ditingkatkan agar hasil analisis lebih akurat.

DAFTAR PUSTAKA

  1. Fransiska, H. (2026). Modul praktikum machine learning and modern prediction: Pertemuan VI Artificial Neural Network (ANN) untuk regresi dan klasifikasi. Laboratorium Matematika, Fakultas Matematika dan Ilmu Pengetahuan Alam, Universitas Bengkulu.
  2. 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
  3. Hertanto, I., Wulan, R., Mahida, L. R., Meilano, D. R., Setiawan, P. A., & Indra. (2025). Implementasi jaringan syaraf tiruan backpropagation untuk peramalan penjualan pada PT. Central Pacific Development. SKANIKA: Sistem Komputer dan Teknik Informatika, 8(2), 364–376.
  4. Lestari, T. S., & Sirodj, D. A. N. (2021). Klasifikasi penipuan transaksi kartu kredit menggunakan metode random forest. Jurnal Riset Statistika, 1(2), 160–167. https://doi.org/10.29313/jrs.v1i2.525
  5. Saragih, T. H., & Huda, N. (2022). Jaringan syaraf tiruan backpropagation dengan adaptive moment estimation untuk klasifikasi penyakit COVID-19 di Kalimantan Selatan. Epsilon: Jurnal Matematika Murni dan Terapan, 16(2), 162–172. https://doi.org/10.20527/epsilon.v16i2.6792