Random Forest Regression : Studi Kasus di R
Hai sobat Exsight! Selamat datang di artikel kami. Setelah sebelumnya kita telah mempelajari konsep dasar dari algoritma Random Forest Regression pada artikel “Random Forest Regression: Memahami Konsep Dasar“, kini saatnya kita melangkah lebih jauh dan menerapkan pengetahuan tersebut dalam praktik. Dalam dunia analisis data, kemampuan untuk membuat prediksi yang akurat adalah kunci untuk mengambil keputusan yang berbasis data. Random Forest merupakan salah satu metode yang paling populer dan efektif untuk pemodelan regresi, yang mampu menangani data yang kompleks dan non-linier.
Hari ini, kita akan fokus pada penggunaan Random Forest Regression di R, sebuah bahasa pemrograman yang banyak digunakan dalam statistik dan analisis data. Untuk memberikan gambaran yang lebih jelas, kita akan menggunakan studi kasus nyata yang menarik, yaitu dataset Boston Housing. Dataset ini terkenal di kalangan analis data karena mencakup berbagai fitur yang mempengaruhi harga median rumah di Boston.
Melalui tutorial ini, Anda akan belajar langkah demi langkah mulai dari memuat dan menjelajahi dataset, membangun model regresi menggunakan package randomForest(), hingga mengevaluasi kinerja model dan memahami faktor-faktor yang mempengaruhi prediksi. Dengan pemahaman yang mendalam tentang proses ini, Anda akan dapat menerapkan teknik Random Forest Regression dalam proyek analisis data Anda sendiri.
Mari kita mulai perjalanan ini dan eksplorasi bagaimana Random Forest Regression dapat membantu kita memprediksi harga rumah serta memahami dinamika yang ada di balik data tersebut. Bersiaplah untuk menggali lebih dalam ke dalam dunia regresi dan pembelajaran mesin di R!
Package randomForest() untuk Random Forest Regression
Random Forest Regression di R dapat menggunakan package randomForest(). Package randomForest()
adalah salah satu package utama di R yang digunakan untuk membangun model Random Forest baik untuk klasifikasi maupun regresi. Paket ini mengimplementasikan algoritma Random Forest yang dikembangkan oleh Leo Breiman, dengan fitur-fitur seperti pemilihan variabel otomatis dan estimasi pentingnya variabel (variable importance). Kelebihan dari randomForest() adalah kemampuannya untuk bekerja dengan dataset besar dan komplek, serta kemampuan untuk mengurangi overfitting yang sering terjadi pada model pohon keputusan tunggal.
Syntax Umum
model <- randomForest(formula, data = NULL, ..., ntree = 500,
mtry = if (!is.null(y) && !is.factor(y))
max(floor(ncol(x) / 3), 1) else floor(sqrt(ncol(x))),
replace = TRUE, sampsize = if (replace) nrow(x) else ceiling(.632 * nrow(x)),
nodesize = 5, maxnodes = NULL,
importance = FALSE, proximity = FALSE,
keep.forest = TRUE, ...)
Berikut ini penjelasan syntax diatas
- formula
- Deskripsi : Menentukan model regresi menggunakan notasi formula R
- data
- Deskripsi : Merupakan data frame yang berisi dataset yang akan digunakan untuk melatih model. Dataset ini harus berisi variabel target dan semua variabel prediktor yang dirujuk dalam formula.
- Tipe : `data.frame` atau `NULL`
- ntree
- Deskripsi : Menentukan jumlah pohon yang akan dibangun dalam random forest. Semakin banyak pohon yang dibangun, semakin stabil dan akurat model, meskipun juga akan memerlukan lebih banyak waktu untuk pelatihan.
- Nilai Default : `500`
- mtry
- Deskripsi : Menentukan jumlah variabel yang dipilih secara acak pada setiap split (pembelahan) di pohon. Untuk regresi, nilai ini biasanya adalah sepertiga dari jumlah total variabel (fitur).
- Perhitungan : Jika `y` (variabel target) tidak NULL dan bukan faktor, maka `mtry` dihitung sebagai `max(floor(ncol(x) / 3), 1)`, yang memastikan bahwa setidaknya 1 variabel dipilih. Jika `y` adalah faktor (mengindikasikan model klasifikasi), maka dihitung sebagai `floor(sqrt(ncol(x)))`.
- Nilai Default : Tergantung pada tipe variabel target
- replace
- Deskripsi : Menentukan apakah pengambilan sampel dilakukan dengan penggantian (replacement) saat membangun pohon. Jika TRUE, data yang sama dapat muncul beberapa kali dalam satu pohon; jika FALSE, setiap pohon akan dilatih pada subset yang berbeda dari data.
- Nilai Default : `TRUE`
- sampsize
- Deskripsi : Menentukan ukuran sampel yang akan digunakan untuk membangun setiap pohon. Jika `replace` adalah TRUE, ukuran sampel sama dengan jumlah baris dalam `x`; jika FALSE, ukuran sampel diatur ke sekitar 63,2% dari total jumlah baris (seperti pada bootstrap).
- Perhitungan : `if (replace) nrow(x) else ceiling(.632 * nrow(x))`
- Nilai Default : Sesuai dengan rumus di atas
- nodesize
- Deskripsi : Menentukan ukuran minimum sampel di node daun. Ini mengontrol kedalaman pohon dan dapat mempengaruhi kemampuan model untuk generalisasi. Nilai yang lebih kecil akan menghasilkan pohon yang lebih dalam dan lebih rumit.
- Nilai Default : `5` (ukuran minimum untuk regresi)
- maxnodes
- Deskripsi : Mengatur jumlah maksimum node pada setiap pohon. Membatasi jumlah node dapat mencegah overfitting, tetapi juga bisa mengurangi kompleksitas model.
- Nilai Default : `NULL` (tidak ada batas)
- importance
- Deskripsi : Menentukan apakah pentingnya variabel akan dihitung. Jika TRUE, model akan menghitung dan mengembalikan informasi tentang pentingnya setiap variabel dalam prediksi.
- Nilai Default : `FALSE`
- proximity
- Deskripsi : Jika TRUE, menghitung matriks kedekatan antar sampel berdasarkan pohon yang dibangun. Ini dapat digunakan untuk analisis lebih lanjut, seperti pengelompokan atau visualisasi.
- Nilai Default : `FALSE`
- keep.forest
- Deskripsi : Menentukan apakah model akan disimpan setelah pelatihan. Jika TRUE, Anda dapat melakukan prediksi lebih lanjut menggunakan model ini.
- Nilai Default : `TRUE`
Studi Kasus: Prediksi Harga Median Rumah di Boston dengan Menggunakan Random Forest Regression
Deskripsi Masalah
- Latar Belakang : Harga rumah merupakan salah satu indikator ekonomi yang sangat penting, karena tidak hanya memengaruhi keputusan pembelian dan penjualan properti, tetapi juga berdampak pada kebijakan ekonomi yang lebih luas. Dalam konteks investasi properti, memahami faktor-faktor yang memengaruhi harga rumah dapat memberikan wawasan berharga bagi pembeli, penjual, dan pembuat kebijakan. Misalnya, pembeli rumah perlu mempertimbangkan berbagai variabel, seperti lokasi, fasilitas, dan lingkungan sosial yang dapat mempengaruhi nilai properti dalam jangka panjang. Begitu juga, penjual harus menyadari dinamika pasar untuk menentukan harga yang kompetitif dan menarik bagi pembeli. Sementara itu, bagi pembuat kebijakan, analisis harga rumah yang tepat dapat membantu dalam perumusan kebijakan perumahan yang berkelanjutan dan aksesibel. Dalam studi ini, kita akan memanfaatkan dataset Boston Housing yang terkenal, yang menyimpan informasi lengkap tentang berbagai karakteristik lingkungan dan sosial yang berhubungan dengan harga median rumah (
medv
). Dataset ini mencakup fitur-fitur seperti jumlah kamar, tingkat kriminalitas, jarak ke pusat kota, dan banyak variabel lainnya. Dengan membangun model regresi menggunakan teknik Random Forest, kita akan berusaha untuk memprediksi harga rumah dan mengeksplorasi faktor-faktor kunci yang berkontribusi terhadap fluktuasi harga, sehingga memberikan panduan yang berguna bagi semua pihak yang terlibat dalam pasar perumahan. - Tujuan : Tujuan dari analisis ini adalah untuk membangun model regresi yang akurat untuk memprediksi harga median rumah di Boston. Model ini akan membantu kita memahami faktor-faktor yang mempengaruhi harga rumah dan memberikan prediksi untuk harga rumah baru.
Dataset
Dataset Boston Housing, yang dapat diakses melalui paket MASS
di R, adalah salah satu dataset yang paling terkenal dan sering digunakan dalam analisis regresi. Terdiri dari 506 baris dan 14 kolom, dataset ini memberikan informasi tentang berbagai karakteristik lingkungan dan sosial yang dapat mempengaruhi harga median rumah di Boston. Berikut adalah penjelasan lebih lengkap mengenai fitur-fitur utama yang terdapat dalam dataset ini:
- crim: Tingkat kriminalitas per kapita di kota.
- zn: Persentase luas perumahan yang memiliki lahan lebih dari 25.000 kaki persegi.
- indus: Proporsi area bisnis non-ritel per kota.
- chas: Variabel dummy Sungai Charles (1 jika wilayah berbatasan dengan sungai, 0 jika tidak).
- nox: Konsentrasi nitrogen oksida (bagian per 10 juta).
- rm: Rata-rata jumlah kamar per rumah.
- age: Proporsi unit hunian yang dimiliki pemilik dan dibangun sebelum tahun 1940.
- dis: Rata-rata tertimbang dari jarak ke lima pusat pekerjaan di Boston.
- rad: Indeks aksesibilitas ke jalan raya radial.
- tax: Tarif pajak properti penuh per $10.000.
- ptratio: Rasio murid-guru di setiap kota.
- black: 1000 ((Bk – 0.63)^2), di mana (Bk) adalah proporsi populasi kulit hitam per kota.
- lstat: Persentase populasi berstatus sosial ekonomi rendah.
- medv: Nilai median rumah milik pemilik dalam ribuan dolar.
Analisis dan Pembahasan
Langkah 1: Memuat Data dan Library
# Memuat library yang dibutuhkan
library(randomForest)
library(MASS)
library(caret)
# Memuat dataset Boston Housing
data("Boston")
Langkah 2: Eksplorasi Data
Pada tahap ini kita akan mengetahui ringkasan data, struktur data dan salah satu contoh visualisasi hubungan antara variabel X dengan variabel y nya
# Melihat ringkasan data
summary(Boston)
Ringkasan statistik untuk dataset Boston Housing menunjukkan beberapa karakteristik penting pada variabel-variabel utama. Tingkat kejahatan (crim) memiliki rata-rata yang jauh lebih tinggi dari median, mengindikasikan adanya nilai ekstrem di beberapa wilayah. Persentase lahan perumahan besar (zn) didominasi oleh nilai nol, namun ada beberapa wilayah dengan lahan luas, hingga 100 persen. Persentase lahan non-perumahan (indus) bervariasi dengan rata-rata 11,14 persen. Variabel biner chas, yang menunjukkan kedekatan dengan Sungai Charles, menunjukkan bahwa hanya sebagian kecil wilayah berbatasan dengan sungai tersebut. Konsentrasi nitrogen oksida (nox) memiliki rata-rata dan median yang mendekati, menunjukkan distribusi yang relatif simetris. Tahap selanjutanya akan dilihat struktur data boston seperti berikut:
# Melihat struktur data
str(Boston)
Output dari fungsi str(Boston)
menunjukkan bahwa dataset Boston Housing terdiri dari 506 observasi dan 14 variabel. Variabel chas (dekat Sungai Charles) dan rad (indeks aksesibilitas ke jalan raya) bertipe integer, sedangkan variabel lainnya bertipe numerik. Tipe dari variabel-variabel di atas sudah sesuai untuk melakukan analisis Random Forest Regression. Oleh karena itu, tidak perlu ada penyesuaian tipe data. Setelah mengetahui ringkasan dan struktur data selanjutnya kita dapat mevisualisasikan fitur-fitur atau variabel-variabel di atas. Untuk mevisualisasikan hubungan antar dua variabel dapat menggunakan code sebagai berikut:
# Visualisasi hubungan antara jumlah kamar dan harga median rumah
library(ggplot2)
ggplot(Boston, aes(x = rm, y = medv)) +
geom_point() +
geom_smooth(method = "lm", col = "blue") +
labs(title = "Hubungan Jumlah Kamar dan Harga Median Rumah",
x = "Rata-rata Jumlah Kamar",
y = "Harga Median Rumah")
Dari grafik hubungan jumlah kamar dan harga median rumah dapat dilihat bahwa semakin besar rata-rata jumlah kamar maka semakin tinggi harga median rumah. Tahap selanjutnya yaitu membagi dataset.
Kita juga dapat membuat scatterplot yang menggambarkan beberapa variabel sekaligus
# Pilih variabel yang relevan untuk ditampilkan bersama medv
selected_vars <- c("medv", "crim", "rm", "age", "dis","lstat")
# Menggunakan fungsi pairs untuk membuat matriks scatterplot
pairs(Boston[, selected_vars],
main = "Matriks Scatterplot medv dengan Variabel Lain",
pch = 21, # Menggunakan titik dengan lingkaran
col = "blue", # Menggunakan warna biru solid
bg = rgb(0, 0, 1, 0.5), # Latar belakang titik dengan transparansi
lower.panel = NULL) # Menyembunyikan panel bawah
Output di atas menunjukan bahwa untuk variabel crime, age, lstat semakin meningkat nilainya maka semakin rendah harga median rumah sedangkan untuk variabel rm dan dis menunjukan sebaliknya. Dengan kata lain, semakin meningkatnya tingkat kriminal, umur rumah dan persentase populasi berstatus sosial ekonomi rendah maka semakin rendah harga median rumah. Kemudian semakin meningkatnya jumlah kamar dan rata-rata tertimbang dari jarak ke lima pusat pekerjaan di Boston maka semakin tinggi harga median rumah.
Langkah 3: Membagi Dataset
Pada tahap ini dataset akan dibagi menjadi dua bagian, yaitu data latih sebanyak 80% dan data uji sebanyak 20%. Data latih digunakan untuk membuat model Random Forest Regression sedangkan data uji digunakan untuk memprediksi data.
# Membagi data menjadi data latih (train) dan data uji (test)
set.seed(123)
sample_index <- sample(seq_len(nrow(Boston)), size = 0.8 * nrow(Boston))
dataTrain <- Boston[sample_index, ]
dataTest <- Boston[-sample_index, ]
Langkah 4: Membangun Model Random Forest
Berikut ini adalah model Random Forest Regression yang dibangun berdasarkan satu kali percobaan. Untuk mencari model terbaik, kita bisa melakukan tuning parameter. Namun, pada tahap ini, kita hanya akan fokus pada pembuatan satu model saja.
# Membangun model Random Forest Regression
model_reg <- randomForest(medv ~ ., data = dataTrain, ntree = 100, mtry = 4, importance = TRUE)
# Melihat ringkasan model
print(model_reg)
Model Random Forest Regression
pada kode di atas dibangun menggunakan variabel target medv
(harga median rumah) dan beberapa variabel prediktor dari dataset dataTrain
. Parameter ntree = 500
menentukan jumlah pohon yang digunakan dalam model. Semakin banyak pohon (ntree
), umumnya model akan lebih stabil dan akurat, namun waktu komputasi juga akan meningkat. Parameter mtry = 4
menunjukkan bahwa untuk setiap split, empat variabel dipilih secara acak sebagai kandidat untuk membangun pembagian pada setiap node. Hal ini membantu meningkatkan variasi antar pohon dan mengurangi overfitting, yang merupakan kelebihan utama dari Random Forest Regression. Selain itu, importance = TRUE
berarti model akan menghitung metrik kepentingan variabel, yaitu pengaruh masing-masing variabel prediktor terhadap variabel target.
Hasil analisis menunjukkan bahwa rata-rata kuadrat residuals adalah 10.77207, yang menggambarkan seberapa baik model ini dapat memprediksi harga median rumah di Boston. Selain itu, model ini menjelaskan 87.24% varians dalam data, menunjukkan bahwa model memiliki kemampuan yang baik dalam menangkap pola dan hubungan antara variabel independen dan harga rumah. Dengan hasil ini, kita dapat menyimpulkan bahwa model Random Forest Regression ini cukup efektif untuk digunakan dalam memprediksi harga median rumah berdasarkan fitur yang tersedia.
Langkah 5: Evaluasi Model
# Mengukur kinerja model pada data uji
predictions <- predict(model_reg, newdata = dataTest)
# Menghitung Mean Squared Error (MSE)
mse <- mean((predictions - dataTest$medv)^2)
# Menghitung Mean Absolute Percentage Error (MAPE)
mape <- mean(abs((predictions - dataTest$medv) / dataTest$medv)) * 100
# Menampilkan hasil
cat("Mean Squared Error (MSE) pada data uji:", mse, "\n")
cat("Mean Absolute Percentage Error (MAPE) pada data uji:", mape, "%\n")
Hasil dari pengukuran kinerja model Random Forest Regression pada data uji menunjukkan bahwa Mean Squared Error (MSE) model adalah sebesar 11.66. MSE adalah ukuran yang menghitung rata-rata kuadrat dari kesalahan antara nilai prediksi dan nilai aktual. Nilai MSE yang lebih rendah menunjukkan bahwa model Random Forest Regression lebih baik dalam memprediksi harga median rumah (medv
). Dalam hal ini, MSE sebesar 11.66 menunjukkan bahwa rata-rata kesalahan kuadrat dalam prediksi harga rumah oleh model tidak terlalu besar, yang menandakan bahwa model cukup akurat.
Sementara itu, Mean Absolute Percentage Error (MAPE) model sebesar 11.39% mengindikasikan bahwa, secara rata-rata, prediksi model menyimpang sekitar 11.39% dari nilai aktual harga rumah. MAPE adalah ukuran yang memberikan gambaran lebih jelas tentang akurasi model Random Forest Regression dalam konteks persentase, sehingga lebih mudah dipahami oleh pemangku kepentingan. Nilai MAPE di bawah 15% umumnya dianggap baik dalam analisis prediksi, yang menunjukkan bahwa model mampu memberikan prediksi yang relatif akurat untuk harga rumah di Boston.
Secara keseluruhan, kedua metrik ini menunjukkan bahwa model Random Forest Regression yang dibangun memiliki performa yang baik dalam memprediksi harga median rumah di Boston, dengan kesalahan yang relatif rendah dan dapat diterima dalam konteks analisis harga properti.
Langkah 6: Analisis Pentingnya Variabel
# Menghitung pentingnya variabel
importance <- importance(model_reg)
importance <- as.data.frame(importance)
# Menampilkan pentingnya variabel
print(importance)
IncMSE (Increase in Mean Squared Error): Nilai ini menunjukkan seberapa banyak kesalahan rata-rata kuadrat (MSE) model meningkat jika variabel tersebut dihapus dari model. Dapat dilihat bahwa variabel rm memiliki nilai IncMSE tertinggi sebesar 33.83, yang berarti bahwa jika variabel ini dihapus, MSE model akan meningkat sebesar 33.83. Ini menunjukkan bahwa variabel rm sangat penting dalam memprediksi harga rumah.
IncNodePurity: Nilai ini mengukur seberapa banyak impurity (ketidakmurnian) dalam model berkurang ketika variabel tersebut digunakan untuk membagi pohon. Variabel dengan nilai IncNodePurity yang tinggi menunjukkan bahwa variabel tersebut memiliki kekuatan prediksi yang kuat. Dapat dilihat bahwa rm juga memiliki nilai IncNodePurity tertinggi sebesar 10330.26, yang menunjukkan bahwa variabel ini sangat efektif dalam membedakan harga rumah berdasarkan fitur lainnya.
# Menampilkan plot pentingnya variabel
varImpPlot(model_reg)
Plot menampilkan variabel pada sumbu y dan nilai penting (IncMSE atau IncNodePurity) pada sumbu x. Variabel dengan titik plot yang lebih jauh dari sumbu y menunjukkan kontribusi yang lebih besar dalam model. Dapat dilihat bahwa variabel rm (rata-rata jumlah kamar) memiliki titik plot terjauh, ini menegaskan bahwa variabel tersebut adalah yang paling berpengaruh terhadap prediksi harga median rumah (medv) diikuti oleh variabel lstat, nox, dan seterusnya hingga variabel chas.
Kesimpulan
Kesimpulan dari analisis Random Forest Regression untuk memprediksi harga median rumah di Boston menunjukkan bahwa model yang dibangun memiliki performa yang baik, dengan nilai Mean Squared Error (MSE) sebesar 11.66 dan Mean Absolute Percentage Error (MAPE) sebesar 11.39%. Hal ini menandakan bahwa model dapat memberikan prediksi yang akurat, dengan kesalahan rata-rata yang dapat diterima. Variabel-variabel seperti rata-rata jumlah kamar (rm) dan status sosial ekonomi (lstat) diidentifikasi sebagai faktor kunci yang mempengaruhi harga rumah, sementara variabel chas memiliki tingkat kepentingan yang rendah. Temuan ini memberikan wawasan berharga bagi pembuat kebijakan dan investor dalam pengambilan keputusan terkait pengembangan properti dan kebijakan publik, serta membuka peluang untuk pengembangan model yang lebih lanjut dengan tuning parameter untuk meningkatkan akurasi prediksi.
Referensi
Breiman, L. (2001). Random forests. Machine Learning, 45(1), 5–32. https://doi.org/10.1023/A:1010950718922.
Breiman, L (2002), “Manual On Setting Up, Using, And Understanding Random Forests V3.1”, https://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf.
Sampai di sini dulu penjelasan terkait Tutorial Random Forest Regression di R. Apabila sobat Exsight masih ada yang dibingungkan terkait pembahasan pada artikel ini, bisa langsung saja ramaikan kolom komentar atau hubungi admin melalui tombol bantuan di kanan bawah. Stay tuned di website https://exsight.id/blog/ agar tidak ketinggalan artikel-artikel menarik lainnya. See you in the next article yaa!
Random Forest Regression : Studi Kasus di R Read More »