Penerapan Neural Network untuk Klasifikasi Kanker Payudara

Neural Network merupakan pendekatan dalam machine learning yang meniru cara kerja jaringan saraf manusia dengan menggunakan sekumpulan neuron buatan yang saling terhubung. Melalui struktur ini, jaringan mampu mempelajari pola dan keteraturan yang terdapat dalam data, sehingga dapat menghasilkan keluaran atau prediksi berdasarkan fungsi matematis yang dipelajari selama proses pelatihan.

Setiap koneksi antar-neuron memiliki bobot yang berperan penting dalam menentukan seberapa besar pengaruh suatu neuron terhadap proses pengolahan informasi. Bobot-bobot ini akan disesuaikan selama proses pembelajaran, sehingga jaringan dapat meningkatkan kemampuannya dalam mengenali pola dan menghasilkan prediksi yang semakin akurat.

Import Libraries

library(neuralnet)
library(readxl)
library(corrplot)

Load Dataset

Analisis dilakukan pada dataset Breast Cancer Wisconsin (Diagnostic) dari UCI Machine Learning Repository sebagai sumber data utama dengan tujuan klasifikasi kanker payudara. Data ini menyediakan informasi pengukuran karakteristik inti sel (cell nuclei) yang diperoleh dari sampel jaringan payudara, sehingga memungkinkan proses klasifikasi tumor dari 569 observasi ke dalam dua kelas, yaitu tumor jinak (benign) dan tumor ganas (malignant). Terdapat 10 variabel numerik yang merepresentasikan karakteristik inti sel, diantaranya radius(x1), texture(x2), perimeter(x3), area(x4), smoothness(x5), compactness(x6), concavity (x7), concave_points(x8), symmetry(x9), dan fractal dimension(x10). Data-data tersebut dilengkapi dengan diagnosis kanker payudara, dimana y=1 menyatakan tumor ganas dan y=0 menyatakan tumor jinak.

data <- read_excel("C:\\Users\\Acer Aspire\\Downloads\\Breast_cancer_dataset.xlsx")
head(data, 5)
## # A tibble: 5 × 11
##       y    x1    x2    x3    x4     x5     x6     x7     x8    x9    x10
##   <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>  <dbl>  <dbl> <dbl>  <dbl>
## 1     1  18.0  10.4 123.  1001  0.118  0.278  0.300  0.147  0.242 0.0787
## 2     1  20.6  17.8 133.  1326  0.0847 0.0786 0.0869 0.0702 0.181 0.0567
## 3     1  19.7  21.2 130   1203  0.110  0.160  0.197  0.128  0.207 0.0600
## 4     1  11.4  20.4  77.6  386. 0.142  0.284  0.241  0.105  0.260 0.0974
## 5     1  20.3  14.3 135.  1297  0.100  0.133  0.198  0.104  0.181 0.0588

Pre-processing

Pengecekan missing value

Tahap awal pre-processing data adalah menghitung jumlah missing value (NA) pada setiap variabel dalam dataset. Berdasarkan pengecekan yang telah dilakukan, diperoleh bahwa tidak terdapat missing value pada semua variabel.

colSums(is.na(data))
##   y  x1  x2  x3  x4  x5  x6  x7  x8  x9 x10 
##   0   0   0   0   0   0   0   0   0   0   0

Pengecekan outlier

Pengecekan outlier dilakukan untuk mengidentifikasi data yang memiliki nilai ekstrem atau menyimpang secara signifikan pada distribusi suatu variabel. Deteksi dilakukan menggunakan boxplot setiap variabel. Berdasarkan boxplot, terdeteksi outlier pada variabel area(x4) yang ditunjukkan oleh titik-titik yang berada di luar batas.

boxplot(data[, 2:11],
        main = "Deteksi Outlier",
        las = 2)

Penanganan outlier

Dilakukan penanganan outlier menggunakan metode winsorizing, yaitu dengan membatasi nilai ekstrem agar berada dalam rentang batas bawah dan batas atas berdasarkan konsep Interquartile Range (IQR). Ditentukan batas bawah (lower bound) dan batas atas (upper bound) dengan rumus: \[ Lower\,Bound=Q1-1.5 \times IQR \\ Upper\,Bound=Q3+1.5 \times IQR \]

Q1 <- quantile(data$x4, 0.25)
Q3 <- quantile(data$x4, 0.75)
IQR_val <- IQR(data$x4)
lower <- Q1 - 1.5 * IQR_val
upper <- Q3 + 1.5 * IQR_val
data$x4[data$x4 < lower] <- lower
data$x4[data$x4 > upper] <- upper

Feature Scalling

Dilakukan scalling setiap variabel yang digunakan menggunakan minmax scalling sehingga setiap variabel akan bernilai 0 hingga 1.

minmax <- function(x) {
  (x - min(x)) / (max(x) - min(x))}
X <- as.data.frame(lapply(data[, !names(data) %in% "y"], minmax))
y <- data$y
data_norm <- cbind(X, class = y)

Split Training Testing

Untuk analisis selanjutnya, data aktual dibagi menjadi data training sebanyak 80% dan testing sebanyak 20%.

set.seed(123)
n <- nrow(data_norm)
idx <- sample(1:n, 0.8 * n)
train <- data_norm[idx, ]
test  <- data_norm[-idx, ]

Pembangunan Model

Analisis dilakukan menggunakan metode neural network backpropagation untuk membangun model klasifikasi. Arsitektur jaringan terdiri dari satu hidden layer dengan lima neuron. Fungsi aktivasi yang digunakan merupakan fungsi sigmoid biner yang umum diaplikasikan pada kasus klasifikasi biner yang didefinisikan sebagai berikut: \[ y = \phi(u)=\frac{1}{1 + e^{-x}} \] Selama proses pelatihan, bobot pada setiap koneksi neuron diperbarui secara iteratif menggunakan package neuralnet dengan algoritma backpropagation untuk meminimalkan galat antara nilai prediksi dan nilai aktual pada data pelatihan. Setelah proses pelatihan selesai, model diterapkan pada data uji untuk menghasilkan output klasifikasi ke kelas 0 atau 1 dengan ambang batas 0.5.

formula_nn <- as.formula(
  paste("class ~", paste(colnames(train)[-ncol(train)], collapse = "+")))
nn <- neuralnet(formula_nn, data = train, hidden = 5, linear.output = FALSE)
pred <- compute(nn, test[, -ncol(test)])$net.result
pred_class <- ifelse(pred > 0.5, 1, 0)

Evaluasi Model

Evaluasi dilakukan menggunakan confusion matrix, kemudian dihitung metrik berikut.

1. Akurasi

Ukuran proporsi prediksi benar terhadap seluruh data uji.

2. Presisi

Ukuran ketepatan prediksi positif, yaitu banyaknya prediksi “tumor ganas” yang benar.

3. Recall

Ukuran performa model dalam memprediksi kasus positif, yaitu banyaknya pasien “tumor ganas” yang berhasil diprediksi dengan tepat.

4. F-1 Score

Rata-rata harmonik presisi dan recall secara seimbang.

conf_mat <- table(Actual = test$class, Predicted = pred_class)
conf_mat
##       Predicted
## Actual  0  1
##      0 61  0
##      1  5 48

Berdasarkan confusion matrix, dapat dilihat:

  1. 61 pasien tumor jinak diklasifikasi dengan benar (True Negative). Tidak ada pasien yang salah diklasifikasikan sebagai pasien tumor ganas (False Negative).

  2. 48 pasien tumor ganas diklasifikasi dengan benar (True Positive), sementara 5 pasien salah diklasifikasikan sebagai pasien tumor jinak (False Positive).

TP <- conf_mat[2,2]
TN <- conf_mat[1,1]
FP <- conf_mat[1,2]
FN <- conf_mat[2,1]

accuracy  <- round(mean(test$class == pred_class), 4)
precision <- round(TP / (TP + FP), 4)
recall    <- round(TP / (TP + FN), 4)
f1_score  <- round(2 * precision * recall / (precision + recall), 4)

evaluation_table <- data.frame(
  Accuracy = accuracy,
  Precision = precision,
  Recall = recall,
  F1_Score = f1_score
)
evaluation_table
##   Accuracy Precision Recall F1_Score
## 1   0.9561         1 0.9057   0.9505

Nilai akurasi sebesar 0.9561 menunjukkan bahwa 95.61% pasien dapat diklasifikasikan dengan tepat. Namun, evaluasi klasifikasi medis perlu mempertimbangkan ukuran lain untuk menentukan kemampuan model mendeteksi penyakit.

Diperoleh presisi 1 yang menunjukkan bahwa model mampu mendeteksi tumor ganas dengan tepat pada data uji. Recall sebesar 0.9057 menunjukkan bahwa 90.57% pasien tumor ganas dapat dideteksi dengan tepat. Artinya, 9.43% pasien tumor ganas belum dapat dideteksi oleh model. Diperoleh F1-Score sebesar 0.9505 yang menunjukkan keseimbangan yang sangat baik antara nilai precision dan recall dalam klasifikasi penyakit tumor ganas dan penyakit tumor jinak.

Kesimpulan

Berdasarkan hasil penelitian yang telah dilakukan, dapat disimpulkan bahwa metode Neural Network mampu melakukan klasifikasi kanker payudara dengan memanfaatkan data klinis pasien. Model yang dikembangkan menunjukkan kinerja yang baik, dengan akurasi mencapai 95.61%, presisi sebesar 100%, recall sebesar 90.57%, dan F1-score sebesar 95.05%. Hasil tersebut mengindikasikan bahwa model mampu mengklasifikasikan kasus tumor ganas dan tumor jinak dengan tingkat kesalahan yang rendah dan tanpa kecenderungan bias pada salah satu kelas. Secara keseluruhan, analisis ini menunjukkan bahwa metode Neural Network dapat diandalkan untuk deteksi kanker payudara.