Statistik memiliki peranan penting dalam pengolahan dan analisis data karena dapat digunakan untuk memperoleh informasi dan pola yang terdapat dalam suatu kumpulan data. Seiring dengan perkembangan teknologi, jumlah dan jenis data yang tersedia semakin beragam sehingga diperlukan metode yang mampu mengolah data secara efektif. Salah satu metode yang banyak digunakan adalah machine learning, yaitu pendekatan yang memungkinkan komputer mempelajari pola dari data untuk menghasilkan prediksi atau klasifikasi. Penerapan machine learning telah digunakan dalam berbagai bidang karena mampu membantu proses analisis data dan pengambilan keputusan berdasarkan pola yang ditemukan dari data (Ariyanto & Wulandhari, 2024).
Dalam penerapan machine learning, kualitas data yang digunakan sebagai masukan (input) merupakan salah satu faktor yang dapat memengaruhi hasil pemodelan. Data yang tersedia terkadang memiliki fitur yang kurang relevan, informasi yang berulang, skala yang berbeda, atau bentuk data yang belum sesuai dengan kebutuhan algoritma. Oleh karena itu, data perlu dipersiapkan terlebih dahulu sebelum digunakan dalam proses pemodelan. Salah satu tahapan yang dapat dilakukan adalah feature engineering, yaitu proses mengolah dan mempersiapkan fitur agar dapat memberikan informasi yang lebih sesuai bagi model machine learning (Puteri dkk., 2021). Feature engineering dapat dilakukan melalui beberapa teknik, di antaranya transformasi fitur, pembuatan fitur baru, pengubahan data kategorik menjadi data numerik, serta seleksi fitur (Herdian dkk., 2024).
Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan adalah sebagai berikut:
Berdasarkan rumusan masalah tersebut, tujuan yang dapat disimpulkan adalah sebagai berikut:
Feature engineering merupakan proses mengolah dan mempersiapkan fitur atau variabel yang terdapat dalam suatu dataset agar lebih sesuai dan informatif untuk digunakan dalam proses pemodelan machine learning. Proses ini dapat dilakukan melalui berbagai teknik, seperti transformasi data, normalisasi, encoding, pembuatan fitur baru, dan seleksi fitur. Tujuan feature engineering adalah memperoleh fitur yang lebih relevan sehingga model dapat mempelajari pola dalam data dengan lebih baik. Penerapan pengolahan dan seleksi fitur juga dapat membantu meningkatkan kinerja model serta mengurangi kompleksitas data (Hadi dkk., 2024).
Berikut merupakan beberapa jenis feature engineering yang harus dilakukan:
Handling Missing Value Missing values atau missing data, terjadi ketika tidak ada data / tidak ada nilai yang tersimpan untuk observasi tertentu dalam suatu variabel. Missing data adalah kejadian yang umum dan dapat berdampak signifikan pada pemodelan machine learning. Data yang tidak lengkap adalah masalah yang tidak terhindarkan dalam menangani sebagian besar sumber data.
Kardinalitas Kardinalitas merujuk pada jumlah nilai unik, atau label, yang terdapat dalam suatu variabel kategoris. Konsep ini digunakan untuk mengukur granularitas atau keunikan data dalam sebuah fitur. Kardinalitas dapat diklasifikasikan dalam spektrum, namun umumnya dibedakan menjadi kardinalitas rendah (low cardinality) dan kardinalitas tinggi (high cardinality). Pengaruh kardinalitas, sangat krusial terhadap performa model dan efisiensi komputasi. Pertama, variabel high cardinality dapat menyebabkan curse of dimensionality jika ditransformasi menggunakan metode encoding standar seperti One-Hot Encoding. Kedua, kardinalitas secara signifikan meningkatkan risiko overfitting.
Splitting Data Splitting data merupakan strategi fundamental dalam machine learning untuk membagi himpunan data menjadi bagian terpisah: data training dan data testing. Pembagian ini krusial untuk membangun model yang robust dan dapat digeneralisasi dengan baik pada data baru. Proporsi pembagian data bersifat subjektif dan fleksibel. Rasio yang umum digunakan adalah 80% untuk training dan 20% untuk testing.
Handling Outlier Outlier, atau dikenal sebagai pencilan, merupakan observasi atau titik data yang menunjukkan deviasi ekstrem dan berbeda secara signifikan dari sebagian besar data lain dalam suatu set data. Keberadaan outlier dapat diatribusikan ke berbagai sumber, mulai dari kesalahan pengukuran, kesalahan entri data (misinput), kontaminasi data, hingga representasi sah dari kejadian langka atau variabilitas inheren dalam populasi. Dalam analisis statistik dan pemodelan machine learning, outlier menuntut perhatian khusus karena memiliki potensi untuk memberikan pengaruh yang tidak proporsional (disproportionate influence) terhadap hasil.
Scaling data Scaling data adalah salah satu langkah pra-pemrosesan dalam analisis data untuk mentransformasi variabel data ke dalam rentang skala yang sama. Tujuannya adalah untuk memastikan bahwa tidak ada satu variabel independen pun yang mendominasi proses pembelajaran hanya karena memiliki rentang nilai yang lebih besar dibandingkan variabel independen lainnya. Sebagaimana dinyatakan oleh Singh dan Singh (2020), normalisasi data sering kali dapat meningkatkan performa model prediktif secara signifikan, terutama untuk algoritma yang sensitif terhadap skala input.
Encoding Feature encoding adalah proses mengubah fitur kategoris atau non-numerik menjadi format numerik yang dapat digunakan sebagai input untuk algoritma machine learning. Banyak algoritma machine learning membutuhkan input numerik. Ada beberapa teknik umum untuk feature encoding, seperti One-Hot Encoding dan Ordinal Encoding.
Imbalanced Dataset Imbalanced Dataset adalah sebuah dataset di mana distribusi kelas atau kategorinya tidak setara. Kelas-kelas yang mencakup proporsi besar dari set data disebut kelas mayoritas, sedangkan kelas-kelas yang mencakup proporsi lebih kecil disebut kelas minoritas. Dalam praktiknya, akan lebih sering menjumpai data yang tidak seimbang daripada yang seimbang. Hal ini tidak serta merta menjadi masalah jika variabel target hanya memiliki sedikit ketidakseimbangan. Sayangnya, kenyataannya tidak selalu demikian dan variabel target Anda mungkin sangat tidak seimbang, sebagai contoh, dengan rasio 10:1.
Adapun jenis data yang digunakan dalam penelitian ini berupa data kuantitatif. Data kuantitatif adalah jenis data yang dapat diukur (measurable) atau dihitung secara langsung sebagai variabel angka. Data kuantitatif disebut juga dikenal dengan data numerik.
Sumber data yang digunakan dalam penelitian ini yaitu data sekunder. Data sekunder adalah data yang diperoleh secara tidak langsung oleh peneliti melainkan melalui prantara. Data sekunder dalam penelitian ini yaitu data yang diperoleh dari dari Asisten Prakrikum Machine Learning and Modern Prediction.
Variabel adalah objek penelitian atau apa yang menjadi titik perhatian Variabel yang digunakan dalam penelitian ini adalah variabel hujan, suhu, kelembapan, keadaan cuaca dan kecepatan angin.
Langkah-langkah yang digunakan pada penelitian ini adalah sebagai berikut:
Masukkan data.
Melakukan pemeriksaan dan preprocessing data.
Melakukan mean imputation.
Melakukan shuffle splitting.
Melakukan Robust Scaler.
Melakukan interpolasi pada variabel Keadaan_Cuaca.
Melakukan capping pada data numerik.
Menangani imbalance data menggunakan SMOTE.
Menampilkan dan menginterpretasikan setiap output.
Menarik kesimpulan.
Pada batasan masalah diminta menggunakan dataset data curah hujan.xlsx untuk melakukan preprocessing data menggunakan mean imputation, shuffle splitting, dan Robust Scaler. Kemudian melakukan interpolasi pada Keadaan_Cuaca, capping pada data numerik, serta penanganan imbalance data menggunakan SMOTE. Tampilkan dan interpretasikan setiap output!
##
## 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
Berikut adalah package yang digunakan pada pertemuan 1.
## # 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 ...
Berikut adalah data curah hujan yang digunakan.
## Hujan Suhu Kelembapan Keadaan_Cuaca Kecepatan_Angin
## 0 0 0 9 314
Sebelum melakukan analisis dilakukan terlebih dahulu pengecekkan missing value pada data dan terdapat 314 missing value pada variabel kecepatan angin dan terdapat 9 missing value pada keadaan cuaca.
# Mean Imputation + Interpolasi
# Membuat data hasil imputasi
df_imp <- data
# Mean Imputation pada Kecepatan_Angin
df_imp$Kecepatan_Angin[
is.na(df_imp$Kecepatan_Angin)
] <- mean(
df_imp$Kecepatan_Angin,
na.rm = TRUE
)
# Interpolasi linear pada Keadaan_Cuaca
df_imp$Keadaan_Cuaca <- na.approx(
df_imp$Keadaan_Cuaca,
na.rm = FALSE
)
# Cek kembali missing value
colSums(is.na(df_imp))## Hujan Suhu Kelembapan Keadaan_Cuaca Kecepatan_Angin
## 0 0 0 0 0
Oleh karena itu dilakukanlah penanganan missing value pada data. Pada variabel Kecepatan_Angin ditangani menggunakan metode mean imputation, yaitu menggantikan nilai yang hilang dengan nilai rata-rata variabel tersebut sebesar 6,655012. Sementara itu, missing value pada variabel Keadaan_Cuaca ditangani menggunakan metode interpolasi linear. Setelah kedua metode penanganan tersebut diterapkan, seluruh variabel tidak lagi memiliki missing value, dengan jumlah missing value sebesar 0.
set.seed(200)
split <- initial_split(
df_imp,
prop = 0.80
)
# Data training dan testing
train_data <- training(split)
test_data <- testing(split)
# Memisahkan variabel prediktor dan target
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
# Ukuran data training
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 proses penanganan missing value selesai, data selanjutnya dibagi menjadi data training dan testing menggunakan metode shuffle splitting dengan proporsi 80:20. Berdasarkan hasil pembagian, data training terdiri atas 594 observasi dengan 4 variabel prediktor, sedangkan data testing terdiri atas 149 observasi dengan 4 variabel prediktor. Dengan demikian, sebesar 80% data digunakan untuk melatih model, sementara 20% data digunakan untuk menguji performa model** pada data yang tidak digunakan selama proses pelatihan. Proses pembagian dilakukan secara acak, sehingga posisi atau urutan data pada dataset awal tidak memengaruhi penentuan data training dan testing.
Sebelum proses capping dilakukan, terlebih dahulu dilakukan identifikasi terhadap keberadaan outlier pada variabel numerik. Pemeriksaan tersebut dilakukan pada tiga variabel, yaitu Suhu, Kelembapan, dan Kecepatan_Angin
# Metode IQR
# Variabel numerik yang akan diperiksa
num <- c(
"Suhu",
"Kelembapan",
"Kecepatan_Angin"
)
# Membuat tabel outlier
outliers <- data.frame(
Variabel = character(),
Q1 = numeric(),
Q3 = numeric(),
IQR = numeric(),
Batas_Bawah = numeric(),
Batas_Atas = numeric(),
Jumlah_Outlier = integer()
)
# Menghitung batas dan jumlah outlier
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
)
)
}
# Menampilkan hasil pemeriksaan outlier
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 tabel hasil pemeriksaan outlier menggunakan metode Interquartile Range (IQR), variabel Suhu memiliki Q1 sebesar 24,3 dan Q3 sebesar 28,9 dengan batas bawah 17,4 serta batas atas 35,8. Variabel Kelembapan memiliki Q1 sebesar 75,0 dan Q3 sebesar 94,0 dengan batas bawah 46,5 serta batas atas 122,5. Sementara itu, variabel Kecepatan_Angin memiliki Q1 sebesar 5,0 dan Q3 sebesar 7,0, dengan batas bawah 2,0 dan batas atas 10,0. Berdasarkan batas tersebut, Suhu dan Kelembapan tidak memiliki nilai yang berada di luar batas outlier, sedangkan pada variabel Kecepatan_Angin ditemukan sebanyak 50 nilai yang teridentifikasi sebagai outlier.
diagnostic_plots <- function(data, variable) {
# Histogram
p1 <- ggplot(
data,
aes(x = .data[[variable]])
) +
geom_histogram(bins = 30) +
labs(
title = paste("Histogram", variable),
x = variable,
y = "Frekuensi"
)
# Boxplot
p2 <- ggplot(
data,
aes(y = .data[[variable]])
) +
geom_boxplot() +
labs(
title = paste("Boxplot", variable),
y = variable
)
# Menampilkan histogram dan boxplot
grid.arrange(
p1,
p2,
ncol = 2
)
}
# Visualisasi Sebelum Capping
# Suhu
diagnostic_plots(
X_train,
"Suhu"
)Berdasarkan hasil histogram dan boxplot sebelum dilakukan capping, terlihat bahwa variabel Kecepatan_Angin memiliki beberapa data yang berada di luar batas boxplot, yang mengindikasikan adanya outlier. Sedangkan pada variabel Suhu dan Kelembapan, tidak ditemukan data yang berada di luar batas boxplot.
Selanjutnya, dilakukan proses capping dengan metode Winsorization untuk membatasi nilai ekstrem pada variabel Kecepatan_Angin berdasarkan batas IQR. Proses ini dilakukan tanpa menghilangkan observasi, sehingga seluruh jumlah data tetap dipertahankan. Sementara itu, pada variabel Suhu dan Kelembapan, capping tetap diterapkan meskipun tidak terdapat outlier, dengan menggunakan batas yang diperoleh dari data training sesuai dengan tahapan preprocessing yang telah ditetapkan.
# Membuat salinan data
X_train_capped <- X_train
X_test_capped <- X_test
# Capping berdasarkan batas IQR data training
for (i in num) {
q <- quantile(
X_train[[i]],
c(0.25, 0.75),
na.rm = TRUE
)
IQR_val <- q[2] - q[1]
lower <- q[1] - 1.5 * IQR_val
upper <- q[2] + 1.5 * IQR_val
# Capping data training
X_train_capped[[i]] <- Winsorize(
X_train[[i]],
val = c(lower, upper)
)
# Capping data testing
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, variabel Suhu memiliki nilai minimum sebesar 22,60 dan maksimum sebesar 31,60, dengan median 26,00 dan rata-rata 26,54. Hal ini menunjukkan bahwa suhu pada data cenderung berada di sekitar 26–27, dengan 50% data berada pada rentang 24,30 hingga 28,90. Variabel Kelembapan memiliki nilai minimum 52 dan maksimum 100, dengan median sebesar 86 dan rata-rata 84. Sebanyak 50% nilai kelembapan berada pada rentang 75 hingga 94, sehingga kelembapan dalam data tergolong cukup tinggi. Sementara itu, variabel Kecepatan_Angin memiliki nilai minimum 2,00 dan maksimum 10,00, dengan median sebesar 6,655 dan rata-rata 6,447. Sebanyak 50% data kecepatan angin berada pada rentang 5,00 hingga 7,00, yang menunjukkan bahwa kecepatan angin umumnya berada di sekitar nilai tersebut.
Selanjutnya, berdasarkan histogram dan boxplot setelah dilakukan capping, terlihat bahwa nilai ekstrem pada variabel numerik telah dibatasi sesuai dengan batas yang diperoleh melalui metode IQR. Dengan demikian, nilai pencilan tidak lagi berada jauh di luar rentang data. Proses capping dilakukan tanpa menghapus observasi, sehingga seluruh jumlah data tetap dipertahankan.
for (i in num) {
# Median data training
med <- median(
X_train_capped[[i]],
na.rm = TRUE
)
# IQR data training
iqr_val <- IQR(
X_train_capped[[i]],
na.rm = TRUE
)
# Robust Scaler data training
X_train_capped[[i]] <-
(X_train_capped[[i]] - med) /
iqr_val
# Robust Scaler data testing
X_test_capped[[i]] <-
(X_test_capped[[i]] - med) /
iqr_val
}
# Melihat hasil Robust Scaler
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 antarvariabel numerik agar perbedaan rentang nilai tidak memengaruhi proses analisis. Metode ini menggunakan median dan IQR sebagai dasar transformasi sehingga lebih tahan terhadap pengaruh nilai ekstrem. Dalam penelitian ini, Robust Scaler diterapkan pada variabel Suhu, Kelembapan, dan Kecepatan_Angin setelah proses capping dilakukan. Berdasarkan enam observasi pertama, nilai hasil transformasi Suhu berada pada rentang -0,500 hingga 1,153, Kelembapan berada pada rentang -1,526 hingga 0,579, sedangkan Kecepatan_Angin berada pada rentang -1,828 hingga 1,672. Nilai positif menunjukkan bahwa observasi berada di atas nilai median, sedangkan nilai negatif menunjukkan bahwa observasi berada di bawah median. Pada variabel Kecepatan_Angin, nilai 0 pada observasi pertama dan kelima menunjukkan bahwa nilai tersebut berada tepat pada median. Dengan demikian, penerapan Robust Scaler menghasilkan skala variabel yang lebih sebanding dengan tetap mempertahankan posisi relatif setiap observasi terhadap nilai tengah datanya.
## y_train
## 1 2
## 128 466
## y_train
## 1 2
## 21.54882 78.45118
Berdasarkan hasil pemeriksaan pada data training variabel Hujan, terdapat dua kelas, yaitu kelas 1 sebanyak 128 observasi (21,55%) dan kelas 2 sebanyak 466 observasi (78,45%). Kelas 1 merupakan kelas minoritas, sedangkan kelas 2 merupakan kelas mayoritas karena memiliki jumlah observasi paling banyak. Dengan demikian, sebagian besar data training termasuk ke dalam kelas 2. Perbedaan proporsi yang cukup besar antara kedua kelas menunjukkan bahwa data mengalami ketidakseimbangan (imbalanced). Kondisi ini dapat menyebabkan model klasifikasi lebih cenderung memprediksi kelas 2 sebagai kelas mayoritas. Oleh karena itu, diperlukan penanganan ketidakseimbangan menggunakan metode SMOTE agar distribusi kelas menjadi lebih seimbang sebelum dilakukan pemodelan.
# Menggabungkan predictor dan target
train_full <- X_train_capped
train_full$Hujan <- factor(
y_train
)
# Menentukan seed
set.seed(42)
# Membuat recipe SMOTE
smote_recipe <- recipe(
Hujan ~ .,
data = train_full
) %>%
step_smote(
Hujan,
over_ratio = 1,
neighbors = 5
)
# Menerapkan SMOTE
train_balanced <- bake(
prep(
smote_recipe,
training = train_full
),
new_data = NULL
)
# Sebelum SMOTE
table(y_train)## y_train
## 1 2
## 128 466
##
## 1 2
## 466 466
##
## 1 2
## 50 50
Berdasarkan hasil penerapan SMOTE, jumlah observasi pada kelas 1 yang semula sebanyak 128 data bertambah menjadi 466 data, sedangkan kelas 2 tetap berjumlah 466 data. Dengan demikian, setelah proses SMOTE dilakukan, kedua kelas memiliki jumlah observasi yang sama dengan proporsi masing-masing sebesar 50%. Hasil tersebut menunjukkan bahwa metode SMOTE berhasil mengatasi ketidakseimbangan data dengan menghasilkan data sintetis pada kelas minoritas, sehingga distribusi kedua kelas menjadi seimbang dan lebih sesuai untuk digunakan dalam proses pemodelan selanjutnya.
Berbagai jenis feature engineering pada RStudio merupakan teknik yang digunakan untuk mengolah dan mempersiapkan fitur dalam dataset agar lebih sesuai untuk digunakan dalam proses machine learning. Teknik feature engineering dapat berupa transformasi data, normalisasi, encoding, pembuatan fitur baru, dan seleksi fitur. Setiap teknik memiliki kegunaan yang berbeda, sehingga penerapannya disesuaikan dengan karakteristik data yang digunakan. Pengolahan fitur yang tepat dapat membuat data menjadi lebih terstruktur, informatif, dan mudah diproses oleh algoritma machine learning.
Teknik feature engineering dapat dilakukan menggunakan program RStudio dengan memanfaatkan berbagai fungsi dan package yang tersedia dalam bahasa pemrograman R. Proses tersebut dapat dilakukan dengan mengubah data kategorik menjadi numerik, menyamakan skala antarfitur, melakukan transformasi terhadap variabel, membuat fitur baru, serta memilih fitur yang relevan untuk analisis. Melalui penerapan teknik tersebut, mahasiswa dapat memahami tahapan pengolahan fitur secara langsung dan mempersiapkan dataset agar lebih sesuai untuk digunakan pada tahap pemodelan machine learning.
Berdasarkan hasil analisis, data curah hujan telah melalui beberapa tahapan feature engineering, meliputi penanganan missing value dengan mean imputation dan interpolasi, shuffle splitting, penanganan outlier melalui capping, serta Robust Scaler untuk menyetarakan skala antarvariabel. Hasil pemeriksaan outlier menunjukkan bahwa hanya variabel Kecepatan_Angin yang memiliki outlier, yaitu sebanyak 50 data. Selain itu, variabel Hujan memiliki distribusi kelas yang tidak seimbang, dengan kelas 1 sebesar 21,55% dan kelas 2 sebesar 78,45%. Setelah diterapkan metode SMOTE, distribusi kedua kelas berhasil diseimbangkan menjadi masing-masing 50%, sehingga data menjadi lebih siap digunakan pada tahap pemodelan selanjutnya.
Praktikan disarankan untuk mempelajari lebih lanjut mengenai program RStudio melalui berbagai sumber pembelajaran, seperti buku, jurnal, modul praktikum, maupun sumber belajar lainnya agar semakin memahami penerapan feature engineering. Praktikan juga diharapkan lebih teliti dalam melakukan pengolahan data dan penulisan kode program agar dapat meminimalkan kesalahan selama praktikum.
Ariyanto, S. D., & Wulandhari, L. A. (2024). Prediksi kinerja calon mahasiswa berdasarkan nilai seleksi masuk menggunakan pendekatan machine learning. Jurnal Ilmiah Komputasi, 23(2).
Hadi, R., Suwirmayanti, N. L. G. P., Kusuma, I. G. N. A., Saryanti, I. G. A. D., & Novayanti, P. D. (2024). Implementasi metode normalisasi dan seleksi fitur dalam optimasi algoritma K-Nearest Neighbor (KNN) untuk klasifikasi data bank. Jurnal Nasional Komputasi dan Teknologi Informasi, 7(5).
Fransiska, H. (2026). Modul Praktikum Machine Learning dan Model Prediction. Universitas Bengkulu: Bengkulu.
Herdian, C., Kamila, A., Tampinongkol, F. F., Kembau, A. S., & Budidarma, I. G. A. M. (2024). One-hot encoding feature engineering untuk label-based data studi kasus prediksi harga mobil bekas. Informasi Interaktif: Jurnal Informatika dan Teknologi Informasi, 9(1).
Puteri, A. N., Arizal, & Achmad, A. D. (2021). Feature selection correlation-based pada prediksi nasabah bank telemarketing untuk deposito. MATRIK: Jurnal Manajemen, Teknik Informatika dan Rekayasa Komputer, 20(2).