LAPORAN PRAKTIKUM
PERTEMUAN VI
MACHINE LEARNING AND MODERN PREDICTION
Oleh
Nama: Fierianti
NPM: F1F023002
Dosen Pengampu: 1. Dr. Herlin Fransiska, S.Si., M.Si.
  2. Wina Ayu Lestari, S.Si., M.Stat.
Asisten Praktikum: 1. Avrillia Permata Hati, M.Stat.
  2. Sabrina Aulia, M.Stat.
  3. Febry Widyan Adha, S.Stat.
  4. Rahmi Yulian Utama.
LABORATORIUM STATISTIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS BENGKULU
2026
DAFTAR ISI

BAB I PENDAHULUAN

1.1 Latar Belakang

Regresi dan klasifikasi merupakan dua tugas utama dalam machine learning. Regresi bertujuan memprediksi variabel respons berupa nilai numerik kontinu, sedangkan klasifikasi bertujuan memprediksi variabel respons berupa kategori, berdasarkan sekumpulan variabel prediktor. Pada banyak kasus, hubungan antara prediktor dan respons tidak selalu linear dan dapat melibatkan interaksi antarvariabel, sehingga model yang sederhana belum tentu mampu menangkap pola data dengan baik. Salah satu metode yang dapat digunakan untuk mempelajari hubungan semacam ini adalah Artificial Neural Network (ANN), yaitu model komputasi yang terinspirasi dari kerja otak manusia, di mana sejumlah neuron saling terhubung untuk memproses informasi dan mempelajari pola dari data (Haykin, 2009).

ANN tersusun atas lapisan masukan (input layer), lapisan tersembunyi (hidden layer), dan lapisan keluaran (output layer). Setiap neuron menerima masukan yang dikalikan dengan bobot, ditambahkan bias, lalu diproses melalui fungsi aktivasi untuk menghasilkan keluaran (Haykin, 2009). Jaringan tanpa lapisan tersembunyi hanya mampu mempelajari hubungan linear, sedangkan Multi-Layer Perceptron (MLP) yang memiliki satu atau lebih lapisan tersembunyi mampu mempelajari hubungan nonlinear sehingga dapat digunakan untuk regresi maupun klasifikasi (Goodfellow et al., 2016). Perbedaan keduanya terletak pada lapisan keluaran. Pada regresi, lapisan keluaran umumnya menggunakan fungsi aktivasi linear agar jaringan dapat menghasilkan nilai prediksi sesuai rentang respons, sedangkan pada klasifikasi biner digunakan fungsi sigmoid yang menghasilkan probabilitas antara 0 dan 1, dan pada klasifikasi multikelas digunakan fungsi softmax yang menghasilkan probabilitas setiap kelas (Bishop, 2006; Fransiska, 2026).

Proses pembelajaran ANN dilakukan melalui algoritma backpropagation, yaitu menyesuaikan bobot jaringan berdasarkan kesalahan prediksi (Rumelhart et al., 1986). Prosesnya terdiri atas perhitungan keluaran jaringan (forward propagation), perhitungan gradien kesalahan terhadap bobot (backward propagation), dan pembaruan bobot untuk mengurangi kesalahan prediksi. Pada regresi, kesalahan diukur misalnya dengan Mean Squared Error (MSE), sedangkan pada klasifikasi digunakan fungsi kerugian seperti cross-entropy yang mengukur perbedaan antara probabilitas prediksi dan kelas aktual (Haykin, 2009; Fransiska, 2026).

Meskipun mampu memodelkan pola yang kompleks, kinerja ANN dipengaruhi oleh arsitektur dan pengaturan pelatihan yang harus ditentukan oleh pengguna, seperti jumlah neuron pada lapisan tersembunyi dan jumlah iterasi pelatihan. Jaringan yang terlalu sederhana dapat mengalami underfitting, sedangkan jaringan yang terlalu kompleks dapat mengalami overfitting, yaitu sangat sesuai dengan data pelatihan tetapi kurang mampu memprediksi data baru (Goodfellow et al., 2016). Oleh karena itu, selain memahami cara kerja ANN, diperlukan kemampuan mengevaluasi performa model pada data pengujian menggunakan ukuran yang sesuai dengan jenis analisisnya, yaitu Mean Squared Error (MSE) dan Mean Absolute Percentage Error (MAPE) untuk regresi, serta akurasi dan presisi yang dihitung dari confusion matrix untuk klasifikasi (Fransiska, 2026). Di samping itu, ANN sering dianggap sebagai black box karena sulit menjelaskan hubungan antarvariabel dari model yang terbentuk (Beck, 2018), sehingga diperlukan pula alat bantu untuk memvisualisasikan jaringan dan menilai kontribusi masing-masing prediktor.

Pada perangkat lunak R, ANN dengan satu lapisan tersembunyi dapat diimplementasikan menggunakan package nnet (Venables & Ripley, 2002), sedangkan package NeuralNetTools menyediakan fungsi untuk memvisualisasikan jaringan dan mengevaluasi kepentingan variabel dari model yang dibentuk (Beck, 2018). Berdasarkan uraian tersebut, praktikum ini dilakukan agar mahasiswa dapat memahami konsep Artificial Neural Network dan mengimplementasikannya untuk regresi dan klasifikasi menggunakan program R, serta mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai.

1.2 Rumusan Masalah

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

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

1.3 Tujuan

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

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

1.4 Manfaat Penelitian

Adapun manfaat pada penelitian ini yaitu:

  1. Bagi penulis:

    1. Dapat memberikan informasi serta pengetahuan tentang konsep dan mengimplementasikan model Artificial Neural Network (ANN) untuk regresi dan klasifikasi dengan menggunakan program R.
    2. Dapat mengembangkan dan menerapkan pengetahuan yang telah diperoleh dalam bidang Machine Learning dan program R.
  2. Bagi pembaca:

    1. Menambah ilmu pengetahuan dan pemahaman tentang konsep dan mengimplementasikan model Artificial Neural Network (ANN) untuk regresi dan klasifikasi dengan menggunakan program R.
    2. Menjadi rujukan bagi peneliti selanjutnya.

1.5 Batasan masalah

Adapun batasan masalah pada penelitian ini yaitu, lakukan ANN Regresi dengan Hidden Neuron=c(10,20,30) dengan data training 80% dan testing 20%. kemudian coba buat dengan maxit=(250, 500). kemudian interprestasikan output dengan jelas! Note : Menggunakan data Iris, Friedman, Breast Cancer, etc.

1.6 Sistematika Penulisan

Adapun sistematika penulisan dari praktikum ini adalah:

BAB I PENDAHULUAN

Bab ini merupakan bab yang 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, dan analisis data 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 untuk rancangan penelitian pada bab-bab berikutnya.

BAB V KESIMPULAN DAN SARAN

Bab ini merupakan bab yang memuat kesimpulan dan saran yang telah dilakukan.

DAFTAR PUSTAKA

BAB II TINJAUAN PUSTAKA

2.1 Machine Learning

Machine learning merupakan pendekatan komputasi yang memungkinkan sistem mempelajari pola dari data untuk menghasilkan prediksi atau keputusan tanpa harus diprogram secara eksplisit untuk setiap aturan. Dalam penelitian statistik dan ilmu data, machine learning digunakan untuk memodelkan hubungan antara variabel prediktor dan variabel respons, terutama ketika hubungan tersebut bersifat nonlinear atau melibatkan interaksi antarkomponen data. Penggunaan machine learning berkembang dalam berbagai bidang karena algoritmanya dapat digunakan untuk klasifikasi, regresi, pendeteksian pola, dan pengambilan keputusan berbasis data (Mienye & Sun, 2022; Zhang et al., 2022).

Secara umum, machine learning dapat dibedakan menjadi pembelajaran terawasi (supervised learning), pembelajaran tidak terawasi (unsupervised learning), dan pembelajaran semi-terawasi. Penelitian yang menggunakan ANN umumnya termasuk dalam pembelajaran terawasi karena model dibangun berdasarkan data pelatihan yang memiliki variabel respons atau label. Pada pembelajaran terawasi, model mempelajari fungsi pemetaan antara himpunan prediktor dan respons. Untuk permasalahan klasifikasi, respons berbentuk kategori, sedangkan pada regresi respons berbentuk numerik kontinu.

Tujuan utama pemodelan machine learning bukan hanya memperoleh kecocokan yang baik terhadap data pelatihan, tetapi juga menghasilkan kemampuan generalisasi yang baik pada data baru. Model yang terlalu kompleks dapat mengalami overfitting, yaitu ketika model sangat sesuai dengan data pelatihan tetapi kurang mampu memprediksi data pengujian. Sebaliknya, model yang terlalu sederhana dapat mengalami underfitting. Oleh karena itu, pemilihan algoritma, pengaturan hiperparameter, pembagian data, dan validasi model merupakan bagian penting dalam penelitian machine learning (Zhao et al., 2025).

2.2 Artificial Neural Network

Artificial Neural Network (ANN) atau jaringan saraf tiruan merupakan metode machine learning yang terinspirasi dari cara kerja jaringan saraf biologis. ANN memproses informasi melalui sejumlah unit komputasi yang disebut neuron. Neuron-neuron tersebut tersusun dalam beberapa lapisan, yaitu lapisan masukan, lapisan tersembunyi, dan lapisan keluaran. Lapisan masukan menerima variabel prediktor, lapisan tersembunyi mempelajari pola hubungan antarvariabel, sedangkan lapisan keluaran menghasilkan nilai prediksi atau kelas hasil klasifikasi.

Secara umum, setiap neuron menerima sejumlah masukan yang dikalikan dengan bobot tertentu. Hasil perkalian tersebut dijumlahkan dengan nilai bias, kemudian diproses menggunakan fungsi aktivasi. Secara matematis, keluaran sebuah neuron dapat dituliskan sebagai:

\[z = \sum_{i = 1}^{p}{w_{i}x_{i} + b}\]

\[y = f(z)\]

Keterangan:

  • \(x_{i}\) adalah variabel masukan ke-\(i\);
  • \(w_{i}\) adalah bobot untuk variabel masukan ke-\(i\);
  • \(b\) adalah bias;
  • \(f(z)\) adalah fungsi aktivasi; dan
  • \(y\) adalah keluaran neuron.

Fungsi aktivasi memungkinkan ANN mempelajari hubungan non-linier. Beberapa fungsi aktivasi yang umum digunakan adalah fungsi sigmoid, hiperbolik tangen, dan ReLU. Pemilihan fungsi aktivasi bergantung pada jenis permasalahan dan struktur model. Pada keluaran regresi, lapisan keluaran umumnya menggunakan fungsi aktivasi linear. Pada klasifikasi biner, fungsi sigmoid dapat digunakan untuk menghasilkan probabilitas suatu observasi masuk ke kelas tertentu. Pada klasifikasi multikelas, fungsi softmax dapat digunakan untuk menghasilkan probabilitas pada setiap kelas (Bishop, 2026).

ANN melakukan proses pembelajaran dengan menyesuaikan bobot dan bias berdasarkan kesalahan prediksi. Proses tersebut umumnya dilakukan melalui algoritma backpropagation dan optimasi menggunakan metode seperti gradient descent. Model menghasilkan prediksi, menghitung selisih antara prediksi dan nilai aktual, kemudian memperbarui bobot agar kesalahan pada iterasi berikutnya menjadi lebih kecil. Goel et al. (2023) menjelaskan bahwa ANN termasuk metode pembelajaran terawasi yang dapat digunakan untuk permasalahan klasifikasi maupun regresi.

Keunggulan utama ANN terletak pada kemampuannya dalam mempelajari hubungan kompleks dan non-linier. Meskipun demikian, ANN memerlukan data pelatihan yang memadai, pemilihan arsitektur yang sesuai, serta pengaturan hiperparameter yang tepat. Model dengan struktur terlalu kompleks dapat mengalami overfitting, sedangkan model yang terlalu sederhana dapat mengalami underfitting. Selain itu, ANN sering dianggap sulit diinterpretasikan karena hubungan antara masukan dan keluaran tidak selalu dapat dijelaskan secara langsung.

2.3 ANN untuk Regresi

Regresi merupakan metode analisis yang digunakan untuk memprediksi variabel respons berbentuk numerik atau kontinu. Dalam regresi berbasis ANN, model mempelajari hubungan antara satu atau beberapa variabel prediktor dengan variabel respons. ANN untuk regresi dapat dirumuskan sebagai fungsi:

\[\widehat{y} = f(X;\theta)\]

Keterangan:

  • \(\widehat{y}\) adalah nilai prediksi;
  • \(X\) adalah matriks variabel prediktor;
  • \(f\) adalah fungsi yang dibentuk oleh arsitektur jaringan saraf; dan
  • \(\theta\) adalah parameter model berupa bobot dan bias.

2.4 ANN untuk Klasifikasi

Klasifikasi merupakan proses pengelompokan suatu objek atau pengamatan ke dalam kelas tertentu berdasarkan karakteristik variabel prediktornya. Berbeda dari regresi yang menghasilkan nilai kontinu, klasifikasi menghasilkan label kategori. Klasifikasi dapat dibedakan menjadi klasifikasi biner dan klasifikasi multikelas. Klasifikasi biner hanya memiliki dua kelas, sedangkan klasifikasi multikelas memiliki lebih dari dua kelas.

Dalam analisis spasial, ANN untuk klasifikasi dapat digunakan untuk memetakan kelas penggunaan lahan, tingkat kerawanan bencana, kesesuaian lahan, kualitas lingkungan, atau zona potensi sumber daya alam. Variabel masukan dapat berupa data citra satelit, elevasi, kemiringan lereng, jarak dari sungai, kepadatan jalan, kepadatan penduduk, serta indikator lingkungan lainnya.

Untuk klasifikasi biner, keluaran ANN umumnya berupa probabilitas yang berada pada rentang 0 sampai 1. Nilai tersebut kemudian diubah menjadi kelas berdasarkan nilai ambang tertentu. Untuk klasifikasi multikelas, ANN dapat menggunakan fungsi softmax sehingga menghasilkan probabilitas untuk setiap kelas. Kelas dengan probabilitas tertinggi dipilih sebagai hasil klasifikasi.

2.3 Metrik Evaluasi

2.3.1 Metrik Evaluasi Model Klasifikasi

Kinerja Classification dievaluasi dengan membandingkan kelas aktual dan kelas hasil prediksi pada data testing. Hasil perbandingan tersebut disajikan dalam confusion matrix (Fransiska, 2026), yaitu tabel yang memuat jumlah prediksi benar dan salah untuk setiap kelas.

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

Keterangan: TP adalah pengamatan positif yang diprediksi positif, TN adalah pengamatan negatif yang diprediksi negatif, FP adalah pengamatan negatif yang salah diprediksi positif, dan FN adalah pengamatan positif yang salah diprediksi negatif. Berdasarkan confusion matrix, beberapa ukuran evaluasi yang digunakan adalah sebagai berikut.

  1. Accuracy, yaitu proporsi prediksi yang benar dari seluruh pengamatan.

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

  1. Precision, yaitu proporsi prediksi positif yang benar-benar positif.

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

  1. Recall atau Sensitivity, yaitu proporsi pengamatan positif yang berhasil terdeteksi oleh model.

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

  1. Specificity, yaitu proporsi pengamatan negatif yang berhasil dikenali dengan benar.

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

  1. F1-Score, yaitu rata-rata harmonik antara precision dan recall.

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

Accuracy mudah diinterpretasikan, tetapi dapat menyesatkan apabila proporsi kelas tidak seimbang, sehingga perlu dilengkapi dengan sensitivity, specificity, precision, dan F1-Score. Pada kasus medis seperti diagnosis kanker, nilai sensitivity menjadi perhatian utama karena kesalahan false negative (kasus positif yang terlewat) umumnya memiliki konsekuensi yang lebih serius daripada false positive.

Selain itu, kemampuan model membedakan kedua kelas pada berbagai ambang klasifikasi dapat dinilai menggunakan kurva Receiver Operating Characteristic (ROC). Kurva ini menggambarkan hubungan antara true positive rate (sensitivity) pada sumbu vertikal dan false positive rate (\(1-Specificity\)) pada sumbu horizontal (Fawcett, 2006). Ringkasan numeriknya adalah Area Under the Curve (AUC), yaitu luas di bawah kurva ROC. Nilai AUC berkisar antara 0 hingga 1; semakin mendekati 1, semakin baik kemampuan model membedakan kelas, sedangkan nilai 0,5 setara dengan tebakan acak (Fawcett, 2006).

2.3.2 Metrik Evaluasi Model Regresi

Kinerja model regresi dapat dievaluasi menggunakan mean squared error (MSE) atau mean absolute error (MAE). MSE menghitung rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi, sedangkan MAE menghitung rata-rata nilai absolut selisih tersebut. Kinerja model regresi juga dapat dinilai menggunakan root mean square error (RMSE) dan koefisien determinasi \(R^{2}\) serta MAPE (Fransiska, 2026).

\[ MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \]

\[RMSE = \sqrt{\frac{1}{n}\sum_{i = 1}^{n}\left( y_{i} - {\widehat{y}}_{i} \right)^{2}}\]

\[MAE = \frac{1}{n}\sum_{i = 1}^{n}|y_{i} - {\widehat{y}}_{i}|\]

\[R^{2} = 1 - \frac{\sum_{i = 1}^{n}\left( y_{i} - {\widehat{y}}_{i} \right)^{2}}{\sum_{i = 1}^{n}\left( y_{i} - {\overline{y}}\right)^{2}}\] Dengan \(n\) merupakan jumlah pengamatan, \(y_i\) merupakan nilai aktual, dan \(\hat{y}_i\) merupakan nilai prediksi. Nilai MSE yang lebih kecil menunjukkan tingkat kesalahan prediksi yang lebih rendah pada data evaluasi. Nilai RMSE dan MAE yang lebih kecil menunjukkan kesalahan prediksi yang lebih rendah. Sementara itu, nilai \(R^{2}\) yang lebih besar menunjukkan kemampuan model yang lebih baik dalam menjelaskan variasi variabel respons.

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data pada penelitian ini adalah data numerik. Data numerik adalah jenis data yang terdiri dari angka dan dapat diukur atau dihitung secara kuantitatif. Data ini digunakan untuk merepresentasikan nilai atau ukuran tertentu dalam berbagai konteks, seperti sains, ekonomi, statistik, dan matematika. Data numerik sering digunakan untuk melakukan perhitungan, analisis, dan visualisasi data.

sumber data yang digunakan pada penelitian ini adalah data sekunder, yaitu data yang telah dikumpulkan dan disusun oleh pihak lain di luar praktikan itu sendiri. Data pada praktikum ini yaitu dataset Friedman yang tersedia di R, dimana penelitian ini menggunakan data kuantitatif simulasi yang dibangkitkan secara komputasional menggunakan fungsi mlbench.friedman1() dari paket mlbench pada perangkat lunak R.

3.2 Variabel Penelitian

Variabel penelitian terdiri atas variabel respons dan variabel prediktor. Dimana variabel respons nya kontinu, yaitu \(Y\), dan sepuluh variabel prediktor numerik, yaitu \(X_1\) sampai \(X_{10}\). Variabel \(X_1\) sampai \(X_5\) memiliki hubungan dengan variabel respons, sedangkan \(X_6\) sampai \(X_{10}\) berperan sebagai variabel tambahan yang tidak memiliki pengaruh langsung terhadap respons.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis yang dilakukan dalam praktikum Artificial Neural Network (ANN) untuk regresi adalah sebagai berikut.

  1. Membuka aplikasi RStudio.
  2. Memanggil package nnet, NeuralNetTools, mlbench, dan tidyverse.
  3. Membangkitkan data Friedman sebanyak 200 observasi menggunakan fungsi mlbench.friedman1() dengan set.seed(234).
  4. Memeriksa struktur data, jumlah observasi, jumlah variabel, ringkasan statistik, dan keberadaan missing value.
  5. Menentukan y sebagai variabel respons dan x.1 sampai x.10 sebagai variabel prediktor.
  6. Membagi data menjadi data training (80%) dan data testing (20%) menggunakan fungsi sample() dengan set.seed(918).
  7. Menyusun rumus model regresi dari nama variabel pada data training.
  8. Membentuk model ANN acuan menggunakan fungsi nnet.formula() dengan 10 hidden neuron, linout = TRUE, dan maxit = 500 sesuai sintaks asisten.
  9. Menghasilkan prediksi terhadap data testing dan menghitung galat prediksi.
  10. Memvisualisasikan arsitektur jaringan dengan plotnet(), menampilkan bobot jaringan dengan neuralweights(), dan menilai kepentingan variabel dengan olden() pada model acuan.
  11. Membentuk enam model ANN dari kombinasi jumlah hidden neuron = 10, 20, 30 dan maxit = 250, 500.
  12. Menghasilkan prediksi pada data training dan testing untuk setiap model.
  13. Menghitung MSE, RMSE, MAE, MAPE, dan \(R^2\) pada data training dan testing.
  14. Membuat plot aktual dan prediksi, residual plot, serta grafik perbandingan kinerja model.
  15. Menganalisis variable importance seluruh model, menentukan model terbaik, dan menginterpretasikan pengaruh jumlah hidden neuron dan maxit terhadap kinerja model.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Eksplorasi Data

Tahap pertama adalah memanggil library yang dibutuhkan. Dimana digunakan Package nnet untuk membangun ANN dengan satu lapisan tersembunyi, lalu NeuralNetTools untuk memvisualisasikan jaringan dan menilai kepentingan variabel, serta mlbench untuk membangkitkan data Friedman.

library(nnet)
library(NeuralNetTools)
library(mlbench)
library(tidyverse)   # dimuat terakhir agar fungsi dplyr tidak tertutup package lain

# fungsi bantu: format angka dengan koma desimal untuk teks interpretasi
koma <- function(x, d = 4) format(round(x, d), decimal.mark = ",", nsmall = 0)

# Membangkitkan data Friedman (200 observasi)
set.seed(234)
reg.data <- as.data.frame(mlbench.friedman1(200))

head(reg.data)
##          x.1       x.2        x.3       x.4       x.5       x.6        x.7
## 1 0.74562000 0.5754994 0.02885590 0.7201653 0.8748022 0.2761835 0.93319087
## 2 0.78171242 0.3157821 0.93745388 0.1849746 0.7039934 0.6426889 0.40177800
## 3 0.02003711 0.7646459 0.79777294 0.5338609 0.9515834 0.9873938 0.08742998
## 4 0.77608539 0.2289793 0.66797951 0.5534984 0.4780999 0.8425175 0.89302195
## 5 0.06691009 0.1715219 0.59740948 0.7547957 0.5332404 0.7327976 0.10244557
## 6 0.64479512 0.6473963 0.01351334 0.7894812 0.2376348 0.4302338 0.88236742
##           x.8       x.9      x.10         y
## 1 0.607462891 0.7560942 0.7179672 24.349507
## 2 0.003687496 0.4046106 0.5338439 18.046792
## 3 0.010598118 0.2473974 0.6669937 12.018651
## 4 0.446393069 0.1443539 0.6802987 12.101870
## 5 0.834936006 0.1874371 0.5950115  9.911772
## 6 0.843509237 0.6166422 0.1081932 21.874286
str(reg.data)
## 'data.frame':    200 obs. of  11 variables:
##  $ x.1 : num  0.7456 0.7817 0.02 0.7761 0.0669 ...
##  $ x.2 : num  0.575 0.316 0.765 0.229 0.172 ...
##  $ x.3 : num  0.0289 0.9375 0.7978 0.668 0.5974 ...
##  $ x.4 : num  0.72 0.185 0.534 0.553 0.755 ...
##  $ x.5 : num  0.875 0.704 0.952 0.478 0.533 ...
##  $ x.6 : num  0.276 0.643 0.987 0.843 0.733 ...
##  $ x.7 : num  0.9332 0.4018 0.0874 0.893 0.1024 ...
##  $ x.8 : num  0.60746 0.00369 0.0106 0.44639 0.83494 ...
##  $ x.9 : num  0.756 0.405 0.247 0.144 0.187 ...
##  $ x.10: num  0.718 0.534 0.667 0.68 0.595 ...
##  $ y   : num  24.35 18.05 12.02 12.1 9.91 ...
summary(reg.data)
##       x.1                x.2                x.3               x.4         
##  Min.   :0.001198   Min.   :0.004583   Min.   :0.01021   Min.   :0.00707  
##  1st Qu.:0.274097   1st Qu.:0.255644   1st Qu.:0.24506   1st Qu.:0.20772  
##  Median :0.541847   Median :0.436813   Median :0.48965   Median :0.50295  
##  Mean   :0.509759   Mean   :0.465323   Mean   :0.48570   Mean   :0.48821  
##  3rd Qu.:0.741416   3rd Qu.:0.651439   3rd Qu.:0.73476   3rd Qu.:0.76599  
##  Max.   :0.993590   Max.   :0.999850   Max.   :0.99985   Max.   :0.99761  
##       x.5                x.6                x.7                x.8          
##  Min.   :0.008246   Min.   :0.005504   Min.   :0.001884   Min.   :0.002496  
##  1st Qu.:0.267523   1st Qu.:0.194431   1st Qu.:0.226788   1st Qu.:0.249826  
##  Median :0.522081   Median :0.446060   Median :0.491332   Median :0.480306  
##  Mean   :0.503282   Mean   :0.468544   Mean   :0.503754   Mean   :0.482050  
##  3rd Qu.:0.751688   3rd Qu.:0.746035   3rd Qu.:0.780325   3rd Qu.:0.696675  
##  Max.   :0.994604   Max.   :0.999021   Max.   :0.993044   Max.   :0.995613  
##       x.9                x.10                y         
##  Min.   :0.004483   Min.   :0.005544   Min.   : 3.082  
##  1st Qu.:0.203254   1st Qu.:0.329160   1st Qu.:10.593  
##  Median :0.453476   Median :0.592614   Median :13.810  
##  Mean   :0.471873   Mean   :0.540708   Mean   :14.270  
##  3rd Qu.:0.742412   3rd Qu.:0.765353   3rd Qu.:18.063  
##  Max.   :0.997436   Max.   :0.998141   Max.   :26.146
dim(reg.data)
## [1] 200  11

Data Friedman dibangkitkan secara komputasional sehingga terdiri dari 200 observasi dan 11 variabel, yaitu satu variabel respons y dan sepuluh variabel prediktor x.1 sampai x.10 yang seluruhnya bertipe numerik. Variabel respons dibentuk dari persamaan

\[ y = 10\sin(\pi x_1 x_2) + 20(x_3 - 0{,}5)^2 + 10x_4 + 5x_5 + \varepsilon, \qquad \varepsilon \sim N(0,1) \]

sehingga hanya x.1 sampai x.5 yang berpengaruh terhadap y, sedangkan x.6 sampai x.10 merupakan variabel pengganggu (noise) tanpa pengaruh. Hubungan x.1 dengan x.2 bersifat nonlinear dan saling berinteraksi, x.3 berpengaruh secara kuadratik, sedangkan x.4 dan x.5 berpengaruh linear. Struktur ini membuat data Friedman cocok untuk menguji kemampuan ANN mempelajari hubungan nonlinear. Variabel y memiliki rata-rata 14,27, simpangan baku 5,08, dan berkisar dari 3,08 hingga 26,15, sedangkan seluruh prediktor berada pada rentang 0 sampai 1 sehingga tidak diperlukan penskalaan tambahan.

Pengecekan Missing Value dan Hubungan Awal Prediktor dengan Respons

colSums(is.na(reg.data))
##  x.1  x.2  x.3  x.4  x.5  x.6  x.7  x.8  x.9 x.10    y 
##    0    0    0    0    0    0    0    0    0    0    0
cor_y <- cor(reg.data[, names(reg.data) != "y"], reg.data$y)[, 1]
tabel_cor <- data.frame(Variabel = names(cor_y), Korelasi_dengan_y = round(as.numeric(cor_y), 3))
knitr::kable(tabel_cor, align = "c", caption = "Korelasi linear setiap prediktor dengan y")
Korelasi linear setiap prediktor dengan y
Variabel Korelasi_dengan_y
x.1 0.480
x.2 0.374
x.3 -0.069
x.4 0.591
x.5 0.244
x.6 -0.080
x.7 0.011
x.8 0.111
x.9 0.023
x.10 0.049
ggplot(reg.data, aes(x = y)) +
  geom_histogram(bins = 25, fill = "#008080", color = "black") +
  labs(title = "Distribusi Variabel Respons y", x = "y", y = "Frekuensi") +
  theme_minimal()

Setelah dilakukan pengecekan data tidak memiliki missing value (0 nilai hilang) karena dibangkitkan secara simulasi. Korelasi linear tertinggi dengan y dimiliki oleh x.4 (0,591), sedangkan lima variabel pengganggu x.6 sampai x.10 memiliki korelasi yang mendekati nol (nilai mutlak terbesar 0,111). Korelasi x.1, x.2, dan x.3 terhadap y relatif kecil (0,48, 0,374, dan -0,069), padahal ketiganya sebenarnya berpengaruh. Dimana hal terjadi karena koefisien korelasi hanya menangkap hubungan linear, sedangkan pengaruh ketiga variabel tersebut bersifat nonlinear dan interaksi. Hal inilah alasan model nonlinear seperti ANN diperlukan.

4.2 Splitting Data

Data dibagi menjadi data training (80%) dan data testing (20%). Pengambilan sampel dilakukan secara acak menggunakan sample() dengan set.seed(918).

# Divide the data into train and test
set.seed(918)
nrow(reg.data)
## [1] 200
# Mengambil secara acak 80% data untuk sampel training
index <- sample(1:nrow(reg.data), round(0.8 * nrow(reg.data)))
train <- reg.data[index, ];  nrow(train)
## [1] 160
test  <- reg.data[-index, ]; nrow(test)
## [1] 40
ringkas <- rbind(
  Data_Asli     = c(Mean_y = mean(reg.data$y), SD_y = sd(reg.data$y)),
  Data_Training = c(Mean_y = mean(train$y),    SD_y = sd(train$y)),
  Data_Testing  = c(Mean_y = mean(test$y),     SD_y = sd(test$y))
)
knitr::kable(ringkas, digits = 3, align = "c", caption = "Ringkasan variabel respons y pada tiap himpunan data")
Ringkasan variabel respons y pada tiap himpunan data
Mean_y SD_y
Data_Asli 14.270 5.078
Data_Training 14.523 4.997
Data_Testing 13.256 5.335

Berdasarkan output data terbagi menjadi 160 observasi training dan 40 observasi testing (80:20). Dengan rata-rata dan simpangan baku y pada kedua himpunan data berdekatan dengan data asli, sehingga pembagian acak dinilai cukup representatif. Data training digunakan untuk melatih bobot jaringan, sedangkan data testing hanya digunakan untuk mengukur kemampuan prediksi pada pengamatan baru.

4.3 Pembentukan Model ANN Acuan

Sebelum membandingkan berbagai pengaturan, terlebih dahulu dibangun model acuan yaitu, ANN dengan 10 hidden neuron dan maxit = 500. Rumus model disusun dari nama variabel pada data training, dengan y sebagai respons dan seluruh variabel lain sebagai prediktor. Dimana arti pengaturan pada nnet.formula() adalah sebagai berikut.

  • size: jumlah neuron pada lapisan tersembunyi (hidden neuron).
  • linout = TRUE: fungsi aktivasi pada lapisan keluaran berupa fungsi linear, sebagaimana diperlukan pada regresi agar prediksi dapat bernilai di luar rentang 0 sampai 1.
  • maxit: jumlah iterasi maksimum pelatihan. Pelatihan berhenti lebih awal bila sudah konvergen.
  • trace = FALSE: menyembunyikan catatan proses iterasi.

Bobot awal jaringan diambil secara acak, sehingga set.seed(918) dipanggil sebelum setiap model dilatih agar hasilnya dapat direproduksi.

# Sintaks ANN: menyusun rumus model
i <- names(train)
form <- as.formula(paste("y ~", paste(i[!i %in% "y"], collapse = " + ")))
form
## y ~ x.1 + x.2 + x.3 + x.4 + x.5 + x.6 + x.7 + x.8 + x.9 + x.10
## Sintaks Neural Networks: 10 hidden neuron
set.seed(918)
nn <- nnet.formula(form, size = 10, data = train, linout = TRUE,
                   maxit = 500, trace = FALSE)
nn
## a 10-10-1 network with 121 weights
## inputs: x.1 x.2 x.3 x.4 x.5 x.6 x.7 x.8 x.9 x.10 
## output(s): y 
## options were - linear output units
## hasil prediksi
predict_regresi <- predict(nn, newdata = test, type = "raw")

## hasil evaluasi
error <- test$y - predict_regresi

head(data.frame(Aktual = test$y, Prediksi = as.numeric(predict_regresi),
                Galat = as.numeric(error), Galat_Mutlak = abs(as.numeric(error))), 10)
##       Aktual Prediksi       Galat Galat_Mutlak
## 1  10.335689 14.52301  -4.1873178    4.1873178
## 2  16.727262 14.52301   2.2042549    2.2042549
## 3  12.693668 14.52301  -1.8293438    1.8293438
## 4  14.253885 14.52301  -0.2691219    0.2691219
## 5  11.321374 14.52301  -3.2016333    3.2016333
## 6   9.552838 14.52301  -4.9701693    4.9701693
## 7   4.104309 14.52301 -10.4187059   10.4187059
## 8   8.731957 14.52301  -5.7910496    5.7910496
## 9  13.464266 14.52301  -1.0587406    1.0587406
## 10 19.657470 14.52301   5.1344634    5.1344634
MAE_acuan  <- mean(abs(error))
RMSE_acuan <- sqrt(mean((test$y - as.numeric(predict_regresi))^2))
MAE_acuan
## [1] 4.47793
RMSE_acuan
## [1] 5.41829

Keluaran nn menunjukkan arsitektur jaringan 10-10-1, yaitu 10 neuron masukan (sepuluh prediktor), 10 hidden neuron, dan 1 neuron keluaran dengan total 121 bobot (termasuk bias), serta menggunakan keluaran linear (linear output units). Pada data testing, model acuan menghasilkan MAE sebesar 4,4779 dan RMSE sebesar 5,4183, artinya rata-rata prediksi menyimpang sekitar 4,48 satuan dari nilai aktual y. Dimana MAE dihitung dengan mean(abs(error)) agar sesuai dengan definisinya, yaitu rata-rata galat mutlak. Rata-rata galat bertanda pada model acuan adalah -1,2669, yang menunjukkan prediksi model secara rata-rata sedikit lebih tinggi daripada nilai aktual.

4.4 Visualisasi dan Eksplorasi Model Acuan

Arsitektur Jaringan

## plot nnet
plotnet(nn)

Diagram di atas menggambarkan arsitektur jaringan pada model acuan. Lapisan masukan (I1 sampai I10) berisi sepuluh prediktor, lapisan tersembunyi (H1 sampai H10) berisi sepuluh neuron, dan lapisan keluaran (O1) berisi satu neuron untuk prediksi y. Garis hitam menunjukkan bobot positif, garis abu-abu menunjukkan bobot negatif, dan ketebalan garis sebanding dengan besar bobot. Neuron B1 dan B2 adalah bias pada lapisan tersembunyi dan lapisan keluaran. Pada jaringan yang terhubung penuh (fully connected) seperti ini, setiap prediktor terhubung ke setiap hidden neuron, sehingga garis yang tebal pada suatu prediktor menandakan prediktor tersebut berkontribusi besar terhadap hasil jaringan.

Bobot Jaringan

#get the neural weights
neuralweights(nn)
## $struct
## [1] 10 10  1
## 
## $wts
## $wts$`hidden 1 1`
##  [1] -6.202385 -2.109143 -1.347211 -3.989987 -2.004069 -3.295069 -3.025520
##  [8] -2.547282 -1.744627 -2.028968 -2.002841
## 
## $wts$`hidden 1 2`
##  [1] -6.293183 -3.470866 -2.710535 -3.371020 -3.102570 -3.461920 -3.035710
##  [8] -3.236018 -3.118535 -2.860204 -3.522202
## 
## $wts$`hidden 1 3`
##  [1] -7.171676 -2.388281 -1.451843 -3.083067 -2.385102 -2.153646 -3.089805
##  [8] -3.111106 -2.545382 -2.967236 -3.152825
## 
## $wts$`hidden 1 4`
##  [1] -5.802412 -2.755960 -3.255327 -2.994492 -3.165933 -3.255913 -2.953869
##  [8] -2.785000 -2.527090 -2.651316 -3.349276
## 
## $wts$`hidden 1 5`
##  [1] -12.210815  -5.566041  -4.744753  -5.551504  -5.032429  -5.704718
##  [7]  -5.632307  -6.007471  -5.515508  -5.647151  -6.042871
## 
## $wts$`hidden 1 6`
##  [1] -7.244389 -2.883554 -1.678060 -3.452762 -2.124291 -1.757717 -2.737311
##  [8] -2.875979 -2.037843 -3.267992 -2.698318
## 
## $wts$`hidden 1 7`
##  [1] -7.521479 -3.011331 -2.387148 -3.516417 -2.574367 -3.003475 -3.520077
##  [8] -3.572862 -3.132868 -2.866839 -3.165089
## 
## $wts$`hidden 1 8`
##  [1] 9.964286 2.178255 1.558299 4.730028 1.491754 4.084822 5.197241 4.646239
##  [9] 3.217802 3.795255 4.036364
## 
## $wts$`hidden 1 9`
##  [1] -13.049439  -5.315010  -4.874585  -5.314961  -5.123696  -4.919152
##  [7]  -6.985787  -5.923817  -6.747700  -6.547414  -5.343853
## 
## $wts$`hidden 1 10`
##  [1] -9.201606 -4.821415 -3.682852 -4.968899 -4.420695 -4.953370 -4.507024
##  [8] -4.673750 -4.920118 -4.715574 -4.438351
## 
## $wts$`out 1`
##  [1] 15.823042 11.158415  6.339004  2.851027 13.713408 21.342319  4.985420
##  [8]  3.567082 -1.300036  7.420857 22.661643

Keluaran neuralweights() menampilkan seluruh bobot jaringan: bobot dari setiap neuron masukan (dan bias) menuju setiap hidden neuron, serta bobot dari setiap hidden neuron (dan bias) menuju neuron keluaran. Total terdapat 121 bobot, jauh lebih banyak daripada jumlah koefisien pada regresi linear (sebelas koefisien). Jumlah parameter yang banyak ini membuat ANN fleksibel dalam mempelajari hubungan nonlinear, tetapi nilai bobot tidak dapat ditafsirkan satu per satu seperti koefisien regresi, sehingga ANN sering dianggap sebagai black box.

Kepentingan Variabel (Metode Olden)

# Plot the importance
olden(nn)

imp_acuan <- olden(nn, bar_plot = FALSE)
imp_acuan_df <- data.frame(Variabel = rownames(imp_acuan), Importance = imp_acuan[[1]])

Untuk melihat kepentingan model digunakan metode Olden. Metode Olden merupakan metode yang menjumlahkan hasil kali bobot sepanjang jalur dari setiap prediktor ke keluaran, sehingga nilainya dapat positif maupun negatif (arah pengaruh) dan makin besar nilai mutlaknya makin besar kontribusi variabel. Pada model acuan, variabel dengan kontribusi terbesar secara berurutan adalah x.3, x.6, dan x.7. Variabel yang sebenarnya berpengaruh (x.1 sampai x.5) menyumbang 48,69% dari total nilai mutlak kepentingan, sedangkan lima variabel pengganggu (x.6 sampai x.10) hanya menyumbang 51,31%. Hal ini menunjukkan bahwa jaringan belum sepenuhnya memisahkan variabel yang berpengaruh dari variabel pengganggu, yang dapat disebabkan oleh bobot awal acak atau jumlah iterasi yang terbatas.

4.5 Perbandingan Jumlah Hidden Neuron dan maxit

Kemudian dilakan perbandingan tiga jumlah hidden neuron (10, 20, dan 30) dengan dua nilai maxit (250 dan 500), sehingga terbentuk enam model. Seluruh pengaturan lain, data training, dan seed dibuat sama agar perbedaan hasil hanya berasal dari jumlah hidden neuron dan maxit.

grid_ann <- expand.grid(size = c(10, 20, 30), maxit = c(250, 500))
grid_ann$Model <- paste0("size=", grid_ann$size, " | maxit=", grid_ann$maxit)

model_ann <- vector("list", nrow(grid_ann))
names(model_ann) <- grid_ann$Model

for (k in seq_len(nrow(grid_ann))) {
  set.seed(918)
  model_ann[[k]] <- nnet.formula(form, size = grid_ann$size[k], data = train,
                                 linout = TRUE, maxit = grid_ann$maxit[k], trace = FALSE)
}

tabel_arsitektur <- data.frame(
  size       = grid_ann$size,
  maxit      = grid_ann$maxit,
  Jumlah_Bobot = sapply(model_ann, function(m) length(m$wts)),
  Konvergensi  = sapply(model_ann, function(m) m$convergence)
)
rownames(tabel_arsitektur) <- NULL
knitr::kable(tabel_arsitektur, align = "c",
             caption = "Jumlah bobot dan status konvergensi (0 = konvergen, 1 = mencapai maxit)")
Jumlah bobot dan status konvergensi (0 = konvergen, 1 = mencapai maxit)
size maxit Jumlah_Bobot Konvergensi
10 250 121 0
20 250 241 1
30 250 361 0
10 500 121 0
20 500 241 0
30 500 361 0

Pada output dapat dilihat jumlah bobot bertambah seiring bertambahnya hidden neuron, yaitu 121 bobot pada 10 neuron, 241 bobot pada 20 neuron, dan 361 bobot pada 30 neuron, padahal jumlah data training hanya 160 observasi. Artinya, pada jaringan yang besar jumlah parameter dapat melampaui jumlah data sehingga risiko overfitting meningkat. Kolom konvergensi menunjukkan bahwa 1 dari 6 model berhenti karena mencapai batas maxit sebelum mencapai konvergensi (kode 1), sedangkan 5 model berhenti karena sudah konvergen (kode 0). Model yang berhenti pada batas maxit belum selesai belajar, sehingga menaikkan maxit berpotensi memperbaiki kinerjanya.

4.6 Prediksi dan Evaluasi Model

Setiap model digunakan untuk memprediksi y pada data training dan data testing. Kinerja dihitung dengan lima ukuran, yaitu MSE, RMSE, MAE, MAPE, dan \(R^2\).Nilai MSE, RMSE, MAE, dan MAPE yang lebih kecil menunjukkan prediksi yang lebih akurat, sedangkan \(R^2\) yang lebih besar (mendekati 1) menunjukkan model menjelaskan lebih banyak variasi y.

hitung_metrik <- function(aktual, pred) {
  pred <- as.numeric(pred)
  err  <- aktual - pred
  data.frame(MSE  = mean(err^2),
             RMSE = sqrt(mean(err^2)),
             MAE  = mean(abs(err)),
             MAPE = mean(abs(err / aktual)) * 100,
             R2   = 1 - sum(err^2) / sum((aktual - mean(aktual))^2))
}

pred_test  <- lapply(model_ann, function(m) as.numeric(predict(m, newdata = test,  type = "raw")))
pred_train <- lapply(model_ann, function(m) as.numeric(predict(m, newdata = train, type = "raw")))

tabel_test <- do.call(rbind, lapply(seq_along(pred_test), function(k) {
  cbind(grid_ann[k, c("size", "maxit")], hitung_metrik(test$y, pred_test[[k]]))
}))
tabel_train <- do.call(rbind, lapply(seq_along(pred_train), function(k) {
  cbind(grid_ann[k, c("size", "maxit")], hitung_metrik(train$y, pred_train[[k]]))
}))
rownames(tabel_test) <- NULL
rownames(tabel_train) <- NULL

knitr::kable(tabel_test, digits = 4, align = "c",
             caption = "Metrik evaluasi model ANN pada data testing")
Metrik evaluasi model ANN pada data testing
size maxit MSE RMSE MAE MAPE R2
10 250 29.3579 5.4183 4.4779 50.2311 -0.0578
20 250 15.3844 3.9223 2.9968 32.7047 0.4457
30 250 7.3164 2.7049 2.2087 20.1884 0.7364
10 500 29.3579 5.4183 4.4779 50.2311 -0.0578
20 500 15.6318 3.9537 3.0162 32.9675 0.4368
30 500 7.3164 2.7049 2.2087 20.1884 0.7364
knitr::kable(tabel_train, digits = 4, align = "c",
             caption = "Metrik evaluasi model ANN pada data training")
Metrik evaluasi model ANN pada data training
size maxit MSE RMSE MAE MAPE R2
10 250 24.8175 4.9817 4.0663 36.7441 0
20 250 0.0001 0.0074 0.0047 0.0335 1
30 250 0.0000 0.0007 0.0005 0.0039 1
10 500 24.8175 4.9817 4.0663 36.7441 0
20 500 0.0000 0.0008 0.0006 0.0040 1
30 500 0.0000 0.0007 0.0005 0.0039 1

Pada data testing, MSE keenam model berkisar antara 7,3164 dan 29,3579, dengan RMSE antara 2,7049 dan 5,4183, MAE antara 2,2087 dan 4,4779, MAPE antara 20,19% dan 50,23%, serta \(R^2\) antara -0,0578 dan 0,7364. Model terbaik berdasarkan MSE terkecil pada data testing adalah model dengan 30 hidden neuron dan maxit = 250, dengan MSE 7,3164, RMSE 2,7049, MAE 2,2087, MAPE 20,19%, dan \(R^2\) 0,7364. Nilai \(R^2\) tersebut berarti model menjelaskan sekitar 73,64% variasi y pada data testing.

4.7 Plot Aktual dan Prediksi serta Residual Plot

ap_df <- do.call(rbind, lapply(seq_along(pred_test), function(k) {
  data.frame(Model = grid_ann$Model[k], Aktual = test$y, Prediksi = pred_test[[k]])
}))
ap_df$Model <- factor(ap_df$Model, levels = grid_ann$Model)

ggplot(ap_df, aes(x = Aktual, y = Prediksi)) +
  geom_point(color = "#008080", alpha = 0.8) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
  facet_wrap(~ Model, ncol = 3) +
  labs(title = "Nilai Aktual vs Prediksi pada Data Testing",
       x = "Nilai Aktual", y = "Nilai Prediksi") +
  theme_minimal()

pred_best  <- pred_test[[nama_best]]
resid_best <- test$y - pred_best

ggplot(data.frame(Prediksi = pred_best, Residual = resid_best),
       aes(x = Prediksi, y = Residual)) +
  geom_point(color = "#008080", alpha = 0.8) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  labs(title = paste0("Residual Plot Model Terbaik (", nama_best, ")"),
       x = "Nilai Prediksi", y = "Residual") +
  theme_minimal()

Pada plot aktual dan prediksi, titik yang berada dekat garis putus-putus (garis 45 derajat, tempat prediksi sama dengan aktual) menunjukkan prediksi yang akurat. Korelasi antara nilai aktual dan prediksi pada data testing berkisar antara -0,4288 dan 0,8663, sehingga sebagian model menghasilkan prediksi yang kurang selaras dengan nilai aktual. Model dengan MSE yang lebih besar terlihat memiliki titik yang lebih menyebar dari garis diagonal, yang menunjukkan galat prediksi yang lebih besar. Pada residual plot model terbaik, residual menyebar di sekitar garis nol dengan rata-rata -0,5608 dan simpangan baku 2,6798. Sebaran residual yang acak tanpa pola melengkung atau melebar menandakan model telah menangkap struktur nonlinear pada data, sedangkan pola yang sistematis menandakan masih ada struktur yang belum dipelajari model.

4.8 Perbandingan Kinerja Model

plot_mse <- bind_rows(
  mutate(tabel_train, Data = "Training"),
  mutate(tabel_test,  Data = "Testing")
) %>%
  mutate(maxit = factor(maxit), Data = factor(Data, levels = c("Training", "Testing")))

ggplot(plot_mse, aes(x = factor(size), y = MSE, color = maxit, group = maxit)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2.5) +
  facet_wrap(~ Data, scales = "free_y") +
  scale_color_manual(values = c("#E69F00", "#008080")) +
  labs(title = "MSE Model ANN pada Data Training dan Testing",
       x = "Jumlah hidden neuron", y = "MSE", color = "maxit") +
  theme_minimal()

Pengaruh jumlah hidden neuron. Rata-rata MSE data testing untuk 10, 20, dan 30 hidden neuron berturut-turut sebesar 29,3579, 15,5081, dan 7,3164, sehingga jumlah hidden neuron dengan kesalahan terkecil secara rata-rata adalah 30 neuron. Pada data training, rata-rata MSE untuk ketiganya adalah 24,8175, 0, dan 0. Penambahan neuron memperbesar kapasitas jaringan sehingga kesalahan pada data training cenderung menurun, tetapi penurunan tersebut belum tentu diikuti oleh data testing. Rasio MSE testing terhadap MSE training berkisar antara 1,18 dan 26949860, dengan rasio terbesar pada model size=20 | maxit=500. Rasio yang jauh di atas 1 menunjukkan indikasi overfitting, yaitu model lebih baik pada data training daripada data testing.

Pengaruh maxit. Rata-rata MSE data testing untuk maxit = 250 dan 500 berturut-turut sebesar 17,3529 dan 17,4353. Menaikkan maxit dari 250 menjadi 500 menurunkan MSE data testing pada 0 dari 3 ukuran jaringan. Hal ini menunjukkan bahwa iterasi tambahan tidak memperbaiki kinerja pada data testing, karena jaringan sudah konvergen atau mulai menyesuaikan diri terhadap data training. Perlu diperhatikan pula bahwa bobot awal ANN diambil secara acak, sehingga sebagian perbedaan kecil antarmodel dapat berasal dari inisialisasi bobot dan bukan semata-mata dari pengaturan model.

4.9 Variable Importance pada Seluruh Model

imp_df <- do.call(rbind, lapply(seq_along(model_ann), function(k) {
  imp <- olden(model_ann[[k]], bar_plot = FALSE)
  data.frame(Model = grid_ann$Model[k], Variabel = rownames(imp), Importance = imp[[1]])
}))
imp_df$Model    <- factor(imp_df$Model, levels = grid_ann$Model)
imp_df$Variabel <- factor(imp_df$Variabel, levels = rev(paste0("x.", 1:10)))
imp_df$Jenis    <- ifelse(imp_df$Variabel %in% paste0("x.", 1:5), "Berpengaruh (x.1-x.5)", "Pengganggu (x.6-x.10)")

ggplot(imp_df, aes(x = Variabel, y = Importance, fill = Jenis)) +
  geom_col() +
  coord_flip() +
  facet_wrap(~ Model, ncol = 3) +
  scale_fill_manual(values = c("Berpengaruh (x.1-x.5)" = "#008080", "Pengganggu (x.6-x.10)" = "#BBBBBB")) +
  labs(title = "Variable Importance (Metode Olden) pada Seluruh Model",
       x = "", y = "Importance", fill = "") +
  theme_minimal() +
  theme(legend.position = "bottom")

Variabel yang sebenarnya berpengaruh (x.1 sampai x.5, warna hijau kebiruan) menyumbang 48,69% sampai 81,63% dari total nilai mutlak kepentingan pada keenam model, sedangkan variabel pengganggu (abu-abu) menyumbang sisanya. Variabel dengan kepentingan terbesar pada tiap model adalah x.3, x.4. Hasil ini menunjukkan bahwa kemampuan ANN memisahkan variabel yang berpengaruh dari variabel pengganggu berbeda antarmodel, sehingga peringkat kepentingan variabel perlu ditafsirkan dengan hati-hati. Nilai kepentingan pada metode Olden dihitung dari bobot jaringan sehingga ikut dipengaruhi oleh bobot awal yang acak dan jumlah neuron, sehingga hasilnya lebih tepat dipakai sebagai gambaran umum daripada ukuran yang pasti.

4.10 Model Terbaik dan Interpretasi Keseluruhan

tabel_ringkas <- data.frame(
  Model     = grid_ann$Model,
  MSE_Train = tabel_train$MSE,
  MSE_Test  = tabel_test$MSE,
  RMSE_Test = tabel_test$RMSE,
  MAE_Test  = tabel_test$MAE,
  MAPE_Test = tabel_test$MAPE,
  R2_Test   = tabel_test$R2,
  Konvergensi = tabel_arsitektur$Konvergensi
)
tabel_ringkas <- tabel_ringkas[order(tabel_ringkas$MSE_Test), ]
rownames(tabel_ringkas) <- NULL
knitr::kable(tabel_ringkas, digits = 4, align = "c",
             caption = "Peringkat model ANN berdasarkan MSE pada data testing")
Peringkat model ANN berdasarkan MSE pada data testing
Model MSE_Train MSE_Test RMSE_Test MAE_Test MAPE_Test R2_Test Konvergensi
size=30 | maxit=250 0.0000 7.3164 2.7049 2.2087 20.1884 0.7364 0
size=30 | maxit=500 0.0000 7.3164 2.7049 2.2087 20.1884 0.7364 0
size=20 | maxit=250 0.0001 15.3844 3.9223 2.9968 32.7047 0.4457 1
size=20 | maxit=500 0.0000 15.6318 3.9537 3.0162 32.9675 0.4368 0
size=10 | maxit=250 24.8175 29.3579 5.4183 4.4779 50.2311 -0.0578 0
size=10 | maxit=500 24.8175 29.3579 5.4183 4.4779 50.2311 -0.0578 0

Berdasarkan MSE pada data testing, model terbaik adalah size=30 | maxit=250 dengan MSE 7,3164 dan \(R^2\) 0,7364, sedangkan model dengan kinerja terendah adalah size=10 | maxit=500 dengan MSE 29,3579. Selisih MSE antara model terbaik dan terendah adalah 22,0415. Dibandingkan dengan model acuan (10 hidden neuron, maxit = 500) yang memiliki MSE 29,3579, model terbaik menghasilkan MSE yang lebih kecil sehingga pengaturan alternatif memberi perbaikan. Karena jumlah data testing hanya 40 observasi dan bobot awal ANN bersifat acak, perbedaan kecil antarmodel perlu ditafsirkan dengan hati-hati, dan pemilihan model sebaiknya mempertimbangkan pula kesederhanaan jaringan dan waktu komputasi.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

Artificial Neural Network (ANN) merupakan model komputasi yang terdiri dari lapisan masukan, lapisan tersembunyi, dan lapisan keluaran, di mana neuron-neuron terhubung melalui bobot dan fungsi aktivasi, serta dilatih dengan backpropagation untuk meminimalkan kesalahan prediksi. Pada regresi, lapisan keluaran menggunakan fungsi aktivasi linear. Berdasarkan hasil penerapan ANN regresi pada data Friedman, dapat disimpulkan sebagai berikut:

  1. Data Friedman terdiri dari 200 observasi dengan satu variabel respons y dan sepuluh variabel prediktor, di mana hanya x.1 sampai x.5 yang berpengaruh terhadap y. Hubungan yang bersifat nonlinear dan interaksi membuat korelasi linear sederhana tidak cukup menggambarkan pengaruh prediktor, sehingga model nonlinear seperti ANN diperlukan. Data dibagi menjadi 160 observasi training dan 40 observasi testing (80:20).
  2. Model ANN acuan dengan 10 hidden neuron dan maxit = 500 terdiri dari 121 bobot dan menghasilkan MAE 4,4779 serta RMSE 5,4183 pada data testing.
  3. Dilakukan perbandingan enam model dari kombinasi 10, 20, 30 hidden neuron dan maxit = 250, 500. MSE pada data testing berkisar antara 7,3164 dan 29,3579, dengan \(R^2\) antara -0,0578 dan 0,7364.
  4. Model terbaik adalah model dengan 30 hidden neuron dan maxit = 250 (MSE 7,3164, RMSE 2,7049, MAE 2,2087, MAPE 20,19%, dan \(R^2\) 0,7364).
  5. Rata-rata MSE data testing terkecil dicapai pada 30 hidden neuron, dan peningkatan maxit dari 250 ke 500 menurunkan MSE testing pada 0 dari 3 ukuran jaringan. Penambahan neuron menambah jumlah bobot hingga 361 pada jaringan terbesar, sehingga terdapat indikasi overfitting pada jaringan yang lebih kompleks.
  6. Analisis kepentingan variabel (metode Olden) menunjukkan bahwa variabel yang berpengaruh (x.1 sampai x.5) menyumbang 48,69% sampai 81,63% dari total kepentingan pada seluruh model, sehingga ANN belum sepenuhnya konsisten dalam memisahkan variabel yang berpengaruh dari variabel pengganggu.

5.2 Saran

  1. Karena bobot awal ANN diambil secara acak, penelitian selanjutnya sebaiknya mengulang pelatihan dengan beberapa nilai seed dan melaporkan rata-rata serta variasi kinerjanya agar perbandingan antarmodel lebih andal.
  2. Pemilihan jumlah hidden neuron dan maxit dapat dilengkapi dengan validasi silang (cross-validation) dan regularisasi (argumen decay pada nnet) untuk mengendalikan overfitting pada jaringan yang besar.
  3. Penelitian selanjutnya dapat mencoba lebih dari satu lapisan tersembunyi, fungsi aktivasi lain, atau penskalaan variabel respons, serta membandingkan ANN dengan metode lain seperti Random Forest atau Gradient Boosting pada data yang sama.
  4. Metrik MAPE sebaiknya digunakan dengan hati-hati pada data yang memiliki nilai aktual mendekati nol, dan dilengkapi dengan MSE, RMSE, MAE, serta \(R^2\).
  5. Praktikum dapat dikembangkan pada data nyata dengan variabel prediktor dan respons yang berbeda skala, disertai prapemrosesan seperti standarisasi.

DAFTAR PUSTAKA

Bishop, C. M. (2006). Pattern recognition and machine learning. New York: Springer.

Beck, M. W. (2018). NeuralNetTools: Visualization and analysis tools for neural networks. Journal of Statistical Software, 85(11), 1–20. https://doi.org/10.18637/jss.v085.i11

Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861–874. https://doi.org/10.1016/j.patrec.2005.10.010

Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Bengkulu: Universitas Bengkulu.

Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep learning. Cambridge, MA: MIT Press.

Goel, A., Goel, A. K., & Kumar, A. (2023). The role of artificial neural network and machine learning in utilizing spatial information. In Spatial Information Research (Vol. 31, Number 3). https://doi.org/10.1007/s41324-022-00494-x

Haykin, S. (2009). Neural networks and learning machines (3rd ed.). Upper Saddle River, NJ: Pearson Education.

Mienye, I. D., & Sun, Y. (2022). A survey of ensemble learning: Concepts, algorithms, applications, and prospects. IEEE Access, 10. https://doi.org/10.1109/ACCESS.2022.3207287

Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature, 323(6088), 533–536. https://doi.org/10.1038/323533a0

Venables, W. N., & Ripley, B. D. (2002). Modern applied statistics with S (4th ed.). New York: Springer.

Zhang, Y., Liu, J., & Shen, W. (2022). A review of ensemble learning algorithms used in remote sensing applications. Applied Sciences, 12(17). https://doi.org/10.3390/app12178654

Zhao, H., Liu, W., Wang, Y., & Wu, L. (2025). Comparative analysis of algorithmic approaches in ensemble learning: Bagging vs. boosting. Scientific Reports, 15(1). https://doi.org/10.1038/s41598-025-15971-0