Perkembangan teknologi menghasilkan data dalam jumlah yang semakin besar dan beragam sehingga diperlukan metode yang mampu mengolah data tersebut menjadi informasi yang bermanfaat. Salah satu metode yang banyak digunakan adalah machine learning, yang memungkinkan komputer mempelajari pola dari data untuk menghasilkan prediksi atau keputusan. Dalam penerapannya, kualitas data menjadi salah satu hal penting karena data yang belum dipersiapkan dengan baik dapat memengaruhi proses dan hasil pemodelan machine learning (Herdian dkk., 2024).
Data yang digunakan dalam machine learning dapat memiliki berbagai bentuk, seperti data numerik maupun data kategorik atau teks, sehingga diperlukan proses pengolahan agar data sesuai dengan kebutuhan algoritma. Herdian dkk. (2024) menjelaskan bahwa data teks perlu diubah menjadi bentuk numerik karena algoritma machine learning membutuhkan data yang dapat diproses dalam proses pembelajaran. Proses pengolahan tersebut dapat dilakukan melalui berbagai teknik, salah satunya encoding, yang merupakan bagian dari tahapan feature engineering dan dapat memengaruhi hasil pemodelan (Herdian dkk., 2024).
Feature engineering merupakan proses mengubah data mentah menjadi fitur yang dapat digunakan dalam algoritma machine learning, termasuk memilih dan merekayasa fitur yang dianggap penting untuk pemodelan. Tahapan ini dapat mencakup penanganan missing value, pemeriksaan kardinalitas, pembagian data, penanganan outlier, scaling, encoding, serta penanganan imbalanced dataset sesuai dengan materi praktikum. Dengan demikian, pemahaman mengenai feature engineering diperlukan agar data dapat dipersiapkan dengan baik sebelum digunakan dalam pemodelan machine learning, karena pembentukan fitur yang tepat dapat mendukung peningkatan kinerja model (Faiz dkk., 2022).
Rumusan masalah yang dapat disimpulkan adalah sebagai berikut:
Apa saja jenis feature engineering pada RStudio?
Bagaimana teknik feature engineering di program RStudio?
Tujuan dari praktikum ini adalah sebagai berikut:
Mahasiswa memahami konsep dari berbagai jenis feature engineering pada RStudio.
Mahasiswa dapat melakukan teknik feature engineering di program RStudio.
Adapun manfaat pada praktikum ini adalah:
Dapat memberi informasi serta menambah pengetahuan tentang feature engineering.
Menerapkan pengetahuan yang diperoleh tentang feature engineering.
Batasan masalah pada praktikum ini adalah gunakan dataset data curah hujan.xlsx untuk melakukan preprocessing data. NPM ganjil menggunakan mean imputation, shuffle splitting, dan Robust Scaler, sedangkan NPM genap menggunakan mode imputation, stratify splitting, dan Standard Scaler. Keduanya melakukan interpolasi pada Keadaan_Cuaca, capping pada data numerik, serta penanganan imbalance data menggunakan SMOTE. Tampilkan dan interpretasikan setiap output!
Feature engineering merupakan proses mengubah data mentah menjadi fitur yang dapat digunakan dalam algoritma machine learning. Proses ini mencakup pemilihan dan rekayasa fitur dengan mempertimbangkan karakteristik data sehingga dapat membantu menyederhanakan proses transformasi dan meningkatkan kualitas pemodelan (Fransiska, 2026). Dalam penerapannya, feature engineering berkaitan erat dengan data preprocessing, seperti pembersihan data, transformasi data, seleksi fitur, dan perubahan bentuk variabel agar sesuai dengan kebutuhan algoritma machine learning (Daniswara & Nuryana, 2023). Dengan demikian, feature engineering menjadi salah satu tahapan penting sebelum data digunakan dalam proses pembelajaran karena kualitas fitur dapat memengaruhi kemampuan model dalam mengenali pola data.
Salah satu tahapan dalam feature engineering adalah handling missing value, yaitu proses menangani data yang tidak memiliki nilai pada observasi tertentu. Keberadaan missing value perlu diperhatikan karena data yang tidak lengkap dapat memengaruhi proses analisis dan pemodelan, sehingga diperlukan metode penanganan yang sesuai dengan karakteristik data (Widianti & Pratama, 2024). Selain itu, kardinalitas juga perlu diperhatikan, khususnya pada variabel kategorik, karena menunjukkan jumlah nilai atau kategori unik dalam suatu variabel dan dapat memengaruhi kompleksitas data ketika dilakukan proses encoding. High cardinality dapat menghasilkan banyak fitur baru ketika menggunakan One-Hot Encoding, sehingga meningkatkan kompleksitas komputasi dan risiko overfitting (Fransiska, 2026).
Tahapan berikutnya adalah data splitting, yaitu membagi data menjadi data training dan testing untuk membangun serta mengevaluasi kemampuan model dalam melakukan generalisasi terhadap data baru. Data juga perlu diperiksa terhadap keberadaan outlier, yaitu observasi yang memiliki nilai ekstrem dan berbeda secara signifikan dari sebagian besar data lainnya karena dapat memberikan pengaruh yang tidak proporsional terhadap hasil pemodelan (Fransiska, 2026). Setelah itu, scaling dapat dilakukan untuk mengubah nilai variabel ke dalam skala tertentu sehingga variabel dengan rentang nilai yang besar tidak mendominasi proses pembelajaran, terutama pada algoritma yang sensitif terhadap skala data (Hadi dkk., 2024). Penggunaan metode scaling juga dapat membantu meningkatkan kinerja model ketika data mengandung outlier, seperti penggunaan Robust Scaler yang diteliti oleh Nugraha dkk. (2024).
Selain pengolahan data numerik, feature engineering juga mencakup encoding, yaitu proses mengubah fitur kategorik atau nonnumerik menjadi bentuk numerik yang dapat digunakan sebagai masukan algoritma machine learning. Teknik yang dapat digunakan antara lain One-Hot Encoding dan Ordinal Encoding, sedangkan pemilihannya perlu disesuaikan dengan karakteristik data dan metode pemodelan yang digunakan. Selanjutnya, imbalanced dataset perlu diperhatikan ketika distribusi kelas pada variabel target tidak seimbang karena kelas mayoritas dapat memiliki jumlah observasi yang jauh lebih besar dibandingkan kelas minoritas (Fransiska, 2026). Oleh karena itu, berbagai tahapan feature engineering, mulai dari penanganan missing value, kardinalitas, data splitting, outlier, scaling, encoding, hingga penanganan imbalanced dataset dan seleksi fitur, perlu dilakukan secara tepat agar data yang digunakan dalam pemodelan memiliki kualitas yang lebih baik dan mampu mendukung kinerja algoritma machine learning (Rohmaniar dkk., 2024).
Jenis data yang digunakan dalam penelitian kali ini merupakan jenis data numerik. Jenis data numerik adalah data yang berbentuk angka dan dapat diukur serta dianalisis secara kuantitatif. Data yang digunakan dalam penelitian ini berupa dataset curah hujan yang berisi nilai-nilai curah hujan dalam bentuk angka.
Sumber data penelitian ini adalah sumber data sekunder. Sumber data sekunder adalah data yang diperoleh dari pihak lain dan tidak dikumpulkan secara langsung oleh peneliti. Data sekunder yang digunakan dalam penelitian ini merupakan dataset curah hujan yang diberikan oleh Asisten Praktikum.
Variabel penelitian adalah sesuatu yang menjadi fokus perhatian yang memberikan pengaruh dan mempunyai nilai. Variabel penelitian pada batasan masalah pertama yaitu variabel hujan, suhu, kelembapan, keadaan cuaca, dan kecepatan angin. Pada batasan masalah kedua menggunakan variabel yang sama, yaitu hujan, suhu, kelembapan, keadaan cuaca, dan kecepatan angin.
Berikut adalah langkah-langkah yang dilakukan dalam analisis:
Membaca dan memeriksa dataset data curah hujan.xlsx.
Menangani missing value menggunakan mean imputation.
Melakukan interpolasi pada variabel Keadaan_Cuaca.
Menangani outlier pada data numerik menggunakan shuffle splitting.
Membagi data menjadi data training dan testing menggunakan shuffle splitting.
Melakukan scaling menggunakan Robust Scaler.
Menangani ketidakseimbangan data menggunakan metode SMOTE pada data training.
Menampilkan dan menginterpretasikan hasil dari setiap tahapan preprocessing.
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
##
## Attaching package: 'recipes'
## The following object is masked from 'package:stats':
##
## step
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
## # A tibble: 6 × 5
## Hujan Suhu Kelembapan Keadaan_Cuaca Kecepatan_Angin
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 23 95 5 NA
## 2 1 24 90 1 NA
## 3 1 26.8 77 1 NA
## 4 1 29.6 62 2 2
## 5 1 30.8 56 1 7
## 6 1 31 55 1 7
## tibble [743 × 5] (S3: tbl_df/tbl/data.frame)
## $ Hujan : num [1:743] 1 1 1 1 1 1 1 2 2 2 ...
## $ Suhu : num [1:743] 23 24 26.8 29.6 30.8 31 30.4 30.9 30.2 29.7 ...
## $ Kelembapan : num [1:743] 95 90 77 62 56 55 57 58 62 62 ...
## $ Keadaan_Cuaca : num [1:743] 5 1 1 2 1 1 3 2 2 2 ...
## $ Kecepatan_Angin: num [1:743] NA NA NA 2 7 7 9 10 8 7 ...
## Hujan Suhu Kelembapan Keadaan_Cuaca Kecepatan_Angin
## 0 0 0 9 314
# Mean Imputation
df_imp <- data
df_imp$Kecepatan_Angin[
is.na(df_imp$Kecepatan_Angin)
] <- mean(df_imp$Kecepatan_Angin, na.rm = TRUE)
# Interpolasi Keadaan_Cuaca
df_imp$Keadaan_Cuaca <- na.approx(df_imp$Keadaan_Cuaca,na.rm = FALSE)
# cek keadaan missing value
colSums(is.na(df_imp))## Hujan Suhu Kelembapan Keadaan_Cuaca Kecepatan_Angin
## 0 0 0 0 0
Berdasarkan batasan masalah, analisis dilakukan terhadap dataset curah hujan yang diberikan oleh Asisten Praktikum. Tahap awal analisis dilakukan dengan mengecek keberadaan missing value pada setiap variabel, dan hasil analisis menggunakan program R menunjukkan adanya 314 missing value pada variabel Kecepatan_Angin serta 9 missing value pada variabel Keadaan_Cuaca. Oleh karena itu, dilakukan penanganan missing value, yaitu pada NPM ganjil variabel Kecepatan_Angin ditangani menggunakan metode mean imputation dengan mengganti nilai yang hilang menggunakan nilai rata-rata sebesar 6,655012, sedangkan variabel Keadaan_Cuaca ditangani menggunakan interpolasi linear. Setelah proses penanganan dilakukan, seluruh variabel memiliki 0 missing value sehingga data sudah tidak memiliki nilai yang hilang.
set.seed(200)
split <- initial_split(df_imp, prop = 0.80)
train_data <- training(split)
test_data <- testing(split)
X_train <- train_data[, -which(names(train_data) == "Hujan")]
X_test <- test_data[, -which(names(test_data) == "Hujan")]
y_train <- train_data$Hujan
y_test <- test_data$Hujan
dim(X_train)## [1] 594 4
## [1] 149 4
## # A tibble: 6 × 5
## Hujan Suhu Kelembapan Keadaan_Cuaca Kecepatan_Angin
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 23.7 97 61 6.66
## 2 2 31 68 2 10
## 3 2 26.4 81 3 5
## 4 2 31.3 57 2 9
## 5 2 29.1 78 2 6.66
## 6 2 27.8 79 2 3
## # A tibble: 6 × 5
## Hujan Suhu Kelembapan Keadaan_Cuaca Kecepatan_Angin
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 23 95 5 6.66
## 2 1 31 55 1 7
## 3 2 30.9 58 2 10
## 4 2 28.6 73 1 5
## 5 1 24.6 90 2 6.66
## 6 2 26.3 80 1 6.66
Setelah missing value ditangani, data dibagi menjadi data training dan data testing menggunakan shuffle splitting dengan proporsi 80:20. Hasil pembagian menunjukkan bahwa data training terdiri dari 594 observasi dengan 4 variabel prediktor, sedangkan data testing terdiri dari 149 observasi dengan 4 variabel prediktor. Dengan demikian, sebanyak 80% data digunakan untuk proses pelatihan model dan 20% sisanya digunakan untuk menguji kemampuan model pada data yang tidak digunakan selama proses pelatihan. Pembagian dilakukan secara acak sehingga urutan data awal tidak menjadi dasar dalam menentukan data training dan testing.
Sebelum proses capping dilakukan, terlebih dahulu dilakukan pengecekan terhadap keberadaan outlier pada variabel numerik. Pemeriksaan outlier dilakukan pada tiga variabel, yaitu Suhu, Kelembapan, dan Kecepatan_Angin. Tahap ini dilakukan untuk mengetahui apakah terdapat nilai yang menyimpang pada masing-masing variabel sebelum dilakukan penanganan lebih lanjut.
num <- c("Suhu", "Kelembapan", "Kecepatan_Angin")
# Membuat tabel batas outlier
outliers <- data.frame(
Variabel = character(),
Q1 = numeric(),
Q3 = numeric(),
IQR = numeric(),
Batas_Bawah = numeric(),
Batas_Atas = numeric(),
Jumlah_Outlier = integer()
)
for (var in num) {
Q1 <- quantile(train_data[[var]], 0.25, na.rm = TRUE)
Q3 <- quantile(train_data[[var]], 0.75, na.rm = TRUE)
IQR_val <- IQR(train_data[[var]], na.rm = TRUE)
lower <- Q1 - 1.5 * IQR_val
upper <- Q3 + 1.5 * IQR_val
jumlah <- sum(
train_data[[var]] < lower |
train_data[[var]] > upper,
na.rm = TRUE
)
outliers <- rbind(
outliers,
data.frame(Variabel = var, Q1 = Q1, Q3 = Q3,
IQR = IQR_val, Batas_Bawah = lower,
Batas_Atas = upper, Jumlah_Outlier = jumlah
))
}
outliers## Variabel Q1 Q3 IQR Batas_Bawah Batas_Atas Jumlah_Outlier
## 25% Suhu 24.3 28.9 4.6 17.4 35.8 0
## 25%1 Kelembapan 75.0 94.0 19.0 46.5 122.5 0
## 25%2 Kecepatan_Angin 5.0 7.0 2.0 2.0 10.0 50
Berdasarkan hasil pemeriksaan outlier dengan menggunakan metode IQR, variabel Suhu dan Kelembapan tidak menunjukkan adanya nilai pencilan karena seluruh nilai masih berada dalam rentang batas bawah dan batas atas. Sementara itu, pada variabel Kecepatan_Angin ditemukan sebanyak 50 nilai yang teridentifikasi sebagai outlier. Hasil tersebut menunjukkan bahwa variabel Kecepatan_Angin memerlukan penanganan lebih lanjut terhadap nilai pencilan yang ditemukan.
diagnostic_plots <- function(data, variable) {
p1 <- ggplot(data, aes(x = .data[[variable]])
) +
geom_histogram(bins = 30) +labs(
title = paste("Histogram", variable),
x = variable,
y = "Frekuensi")
p2 <- ggplot(data, aes(y = .data[[variable]])
) +
geom_boxplot() + labs(title = paste("Boxplot", variable),
y = variable)
grid.arrange( p1, p2, ncol = 2)
}
# Sebelum capping
diagnostic_plots( X_train, "Suhu")Berdasarkan histogram dan boxplot sebelum dilakukan capping, variabel Kecepatan_Angin menunjukkan beberapa nilai yang berada di luar batas boxplot sehingga teridentifikasi sebagai outlier. Sebaliknya, pada variabel Suhu dan Kelembapan tidak ditemukan nilai yang berada di luar batas boxplot. Selanjutnya, dilakukan capping dengan metode Winsorization untuk membatasi nilai ekstrem pada variabel Kecepatan_Angin berdasarkan batas IQR tanpa menghilangkan observasi, sehingga jumlah data tetap sama, sedangkan pada variabel Suhu dan Kelembapan capping tetap diterapkan menggunakan batas yang dihitung berdasarkan data training sesuai dengan tahapan preprocessing yang digunakan.
X_train_capped <- X_train
X_test_capped <- X_test
for (i in num) {
q <- quantile(X_train[[i]], c(0.25, 0.75), na.rm = TRUE)
IQR <- q[2] - q[1]
lower <- q[1] - 1.5 * IQR
upper <- q[2] + 1.5 * IQR
X_train_capped[[i]] <- Winsorize(
X_train[[i]], val = c(lower, upper))
X_test_capped[[i]] <- Winsorize(
X_test[[i]], val = c(lower, upper))
}
summary(X_train_capped[num])## Suhu Kelembapan Kecepatan_Angin
## Min. :22.60 Min. : 52 Min. : 2.000
## 1st Qu.:24.30 1st Qu.: 75 1st Qu.: 5.000
## Median :26.00 Median : 86 Median : 6.655
## Mean :26.54 Mean : 84 Mean : 6.447
## 3rd Qu.:28.90 3rd Qu.: 94 3rd Qu.: 7.000
## Max. :31.60 Max. :100 Max. :10.000
Berdasarkan hasil statistik deskriptif setelah proses capping, variabel Suhu memiliki nilai minimum sebesar 22,60, median 26,00, dan maksimum 31,60. Pada variabel Kelembapan, diperoleh nilai minimum 52, median 86, dan maksimum 100, sedangkan variabel Kecepatan_Angin memiliki nilai minimum 2, median 6,655, dan maksimum 10. Hasil tersebut menunjukkan bahwa proses capping berhasil membatasi nilai-nilai ekstrem pada ketiga variabel sehingga pengaruhnya terhadap tahapan analisis selanjutnya dapat diminimalkan.
Berdasarkan histogram dan boxplot setelah dilakukan capping, terlihat bahwa nilai ekstrem pada variabel numerik telah dibatasi berdasarkan batas yang ditentukan dengan metode IQR. Nilai pencilan yang sebelumnya berada jauh di luar rentang data kini telah berada dalam batas yang telah ditetapkan. Proses capping dilakukan tanpa menghapus observasi, sehingga seluruh jumlah data tetap dipertahankan untuk analisis selanjutnya.
for (i in num) {
med <- median(X_train_capped[[i]], na.rm = TRUE)
iqr <- IQR(X_train_capped[[i]], na.rm = TRUE)
X_train_capped[[i]] <-(X_train_capped[[i]] - med) / iqr
X_test_capped[[i]] <-(X_test_capped[[i]] - med) / iqr
}
head(X_train_capped[num])## # A tibble: 6 × 3
## Suhu Kelembapan Kecepatan_Angin
## <dbl> <dbl> <dbl>
## 1 -0.500 0.579 0
## 2 1.09 -0.947 1.67
## 3 0.0870 -0.263 -0.828
## 4 1.15 -1.53 1.17
## 5 0.674 -0.421 0
## 6 0.391 -0.368 -1.83
Robust Scaler digunakan untuk menyamakan skala pada variabel numerik agar perbedaan rentang nilai antarvariabel tidak memengaruhi hasil analisis. Metode ini menggunakan median dan IQR sebagai dasar transformasi sehingga lebih tahan terhadap pengaruh nilai ekstrem, dan dalam penelitian ini diterapkan pada variabel Suhu, Kelembapan, serta Kecepatan_Angin setelah proses capping. Berdasarkan enam observasi pertama, nilai Suhu berada pada rentang -0,500 hingga 1,15, Kelembapan berada pada rentang -1,53 hingga 0,579, dan Kecepatan_Angin berada pada rentang -1,83 hingga 1,67, dengan nilai positif menunjukkan posisi data di atas median dan nilai negatif menunjukkan posisi di bawah median, sedangkan nilai 0 pada Kecepatan_Angin di observasi pertama dan kelima menunjukkan bahwa nilainya sama dengan median. Hasil transformasi tersebut menunjukkan bahwa ketiga variabel telah berada pada skala yang lebih sebanding tanpa menghilangkan informasi relatif dari masing-masing data.
## y_train
## 1 2
## 128 466
## y_train
## 1 2
## 21.54882 78.45118
Berdasarkan hasil pemeriksaan, variabel Hujan memiliki dua kelas, yaitu kelas 1 dengan jumlah 128 data (21,55%) dan kelas 2 sebanyak 466 data (78,45%). Perbedaan jumlah data yang cukup besar antara kedua kelas menunjukkan adanya ketidakseimbangan kelas (imbalance), dengan kelas 2 memiliki proporsi yang jauh lebih tinggi dibandingkan kelas 1. Oleh karena itu, diperlukan penanganan ketidakseimbangan data menggunakan metode SMOTE untuk menghasilkan proporsi kelas yang lebih seimbang.
train_full <- X_train_capped
train_full$Hujan <- factor(y_train)
set.seed(42)
smote_recipe <- recipe(Hujan ~ ., data = train_full) %>%
step_smote(Hujan, over_ratio = 1, neighbors = 5)
train_balanced <- bake(
prep(smote_recipe, training = train_full),
new_data = NULL
)
# Hasil SMOTE
table(y_train)## y_train
## 1 2
## 128 466
##
## 1 2
## 466 466
##
## 1 2
## 50 50
Berdasarkan hasil penerapan metode SMOTE, jumlah observasi pada kelas 1 yang semula sebanyak 128 data bertambah menjadi 466 data, sementara jumlah observasi pada kelas 2 tetap sebanyak 466 data. Setelah proses SMOTE dilakukan, kedua kelas memiliki jumlah dan proporsi yang sama, yaitu masing-masing 466 observasi atau sebesar 50%. Hal tersebut menunjukkan bahwa metode SMOTE berhasil mengatasi ketidakseimbangan kelas dengan menghasilkan data sintetis pada kelas minoritas, sehingga distribusi kedua kelas menjadi seimbang dan dapat digunakan untuk tahap analisis berikutnya.
Feature engineering pada RStudio meliputi handling missing value, kardinalitas, data splitting, handling outlier, scaling data, encoding, dan imbalanced dataset. Setiap teknik digunakan untuk mengolah karakteristik data tertentu agar data lebih sesuai untuk proses pemodelan machine learning. Dengan demikian, pemilihan teknik feature engineering perlu disesuaikan dengan kondisi dan kebutuhan data.
Teknik feature engineering di RStudio dilakukan secara bertahap mulai dari memeriksa dan menangani permasalahan pada data hingga melakukan transformasi fitur. Tahapan tersebut dapat dilakukan menggunakan fungsi atau sintaks R yang sesuai untuk menghasilkan data yang lebih terstruktur dan siap digunakan. Dengan penerapan teknik yang tepat, proses pemodelan machine learning dapat dilakukan menggunakan fitur yang lebih sesuai dan informatif.
Pada batasan masalah dilakukan tahapan preprocessing pada data curah hujan melalui penanganan missing value, pembagian data, pemeriksaan dan penanganan outlier, scaling, serta penyeimbangan kelas. Missing value berhasil ditangani menggunakan mean imputation dan interpolasi linear, sedangkan outlier pada variabel numerik dibatasi menggunakan capping metode Winsorization dan skala data disetarakan dengan Robust Scaler. Selain itu, ketidakseimbangan kelas pada variabel Hujan berhasil diatasi menggunakan SMOTE sehingga kedua kelas memiliki jumlah observasi yang sama dan data siap digunakan untuk tahap analisis selanjutnya.
Program R sangatlah bermanfaat bagi semua orang khususnya pada mahasiswa statistika, hal ini sangat memudahkan dalam mengolah suatu data di komputer. Tetapi pengguna harus lebih hati-hati dalam memasukan sintaks dan data karena apabila terjadi kesalahan dalam memasukan maupun mengolah data tersebut hasilnya akan sangat berpengaruh.
Herdian, C., Kamila, A., & Budidarma, I. G. A. M. (2024). Studi Kasus Feature Engineering Untuk Data Teks: Perbandingan Label Encoding dan One-Hot Encoding Pada Metode Linear Regresi. Technologia: Jurnal Ilmiah, 15(1), 93-108.
Faiz, M. N., Somantri, O., & Muhammad, A. W. (2022). Machine Learning-Based Feature Engineering to Detect DDoS Attacks. Jurnal Nasional Teknik Elektro dan Teknologi Informasi, 11(3).
Daniswara, A. A. A., & Nuryana, I. K. D. (2023). Data Preprocessing Pola Pada Penilaian Mahasiswa Program Profesi Guru. Journal of Informatics and Computer Science (JINACS), 5(01), 97-100.
Hadi, R., Pivin, N. L. G., Ngurah, I. G., & Kusuma, A. (2024). Implementasi metode normalisasi dan seleksi fitur dalam optimasi algoritma k-nearest neighbor (knn) untuk klasifikasi data bank. Jurnal Nasional Komputasi dan Teknologi Informasi (JNKTI), 7(5), 1064-1071.
Fransiska, H. (2026). Modul Praktikum Machine Learning dan Model Prediction. Universitas Bengkulu: Bengkulu.
Widianti, A., & Pratama, I. (2024). Penanganan Missing Values dan Prediksi Data Timbunan Sampah Berbasis Machine Learning. Rabit: Jurnal Teknologi dan Sistem Informasi Univrab, 9 (2).
Nugraha, W., Sabaruddin, R., & Murni, S. (2024). Teknik Scaling Menggunakan Robust Scaler Untuk Mengatasi Outlier Data Pada Model Prediksi Serangan Jantung. Techno. com, 23(2), 319.
Rohmaniar, M. A., Habibi, R., & Pane, S. F. (2024). Pengaruh Metode Seleksi Fitur terhadap Akurasi Model SVM dalam Klasifikasi Customer Churn pada Perusahaan Telekomunikasi. IJAI (Indonesian Journal of Applied Informatics), 9(1), 94-103.