Dataset ini merupakan sebuah riset ekonomi lingkungan untuk melihat pengaruh polusi udara terhadap harga rumah di Boston, yang dipublikasikan oleh Harrison, D. dan Rubinfeld, D.L. pada tahun 1978.
berikut beberapa informasi terkait dataset tersebut:
https://www.kaggle.com/datasets/fedesoriano/the-boston-houseprice-data/data
Jumlah Observasi Data : 506 row data
Jumlah Variabel Data : 14 variabel
Tujuan Analisis : Melihat Korelasi Harga Rumah di Wilayah Boston dengan Faktor Tata Rruang dan Lingkungan.
# Input Data
Boston <- read.csv("C:/Users/ASUS/Downloads/archive (1)/boston.csv")
colnames(Boston) <- toupper(trimws(colnames(Boston)))
# Melihat data dan struktur data
View(Boston)
str(Boston)'data.frame': 506 obs. of 14 variables:
$ CRIM : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...
$ ZN : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
$ INDUS : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
$ CHAS : int 0 0 0 0 0 0 0 0 0 0 ...
$ NOX : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
$ RM : num 6.58 6.42 7.18 7 7.15 ...
$ AGE : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
$ DIS : num 4.09 4.97 4.97 6.06 6.06 ...
$ RAD : int 1 2 2 3 3 3 5 5 5 5 ...
$ TAX : num 296 242 242 222 222 222 311 311 311 311 ...
$ PTRATIO: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
$ B : num 397 397 393 395 397 ...
$ LSTAT : num 4.98 9.14 4.03 2.94 5.33 ...
$ MEDV : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
library(dplyr)
library(stringr)
# Variabel yang dipilih
variabel_pilihan <- c("RAD", "ZN", "INDUS", "NOX", "AGE", "TAX", "PTRATIO", "LSTAT","MEDV")
data_bersih <- Boston %>%
mutate(across(all_of(variabel_pilihan),~{
# 1. Hapus spasi
x <- str_remove_all(.x, "\\s")
# 2. Hapus karakter tersembunyi
x <- str_remove_all(x, "[:cntrl:]")
# 3. Ubah menjadi numerik
as.numeric(x)
}))
# Periksa hasil struktur data baru
str(data_bersih[variabel_pilihan])'data.frame': 506 obs. of 9 variables:
$ RAD : num 1 2 2 3 3 3 5 5 5 5 ...
$ ZN : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
$ INDUS : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
$ NOX : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
$ AGE : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
$ TAX : num 296 242 242 222 222 222 311 311 311 311 ...
$ PTRATIO: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
$ LSTAT : num 4.98 9.14 4.03 2.94 5.33 ...
$ MEDV : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
Proses pertama adalah menginputkan dataset dengan nama Boston, selanjutnya melihat data dan struktur data. setelah di pperiksa ternyata struktur data terbaca sebagai karakter sehingga perlu mengubahnya ke bentuk numerik agar dapat dilakukan analisis lanjutan.
dilakukan data cleaning untuk menhapus spasi yang tidak terlihat dan karakter yang tersembunyi. setelah itu kembali dilakukan pengecekan terhadap struktur data yang sebelumnya berbentuk karakter, setelah di cek struktur data berumbah menjadi numerik.
Pemilihan variabel yang akan digunakan untuk analisis korelasi, dari 14 variabel dipilih 8 varaiabel independen (X) dengan satu variabel dependen (Y). Variabel yang digunakan adalah RAD, ZN, INDUS, NOX, AGE, TAX, PTRATIO, dan LSTAT. Variabel MEDV merupakan variabel dependen berupa harga unit rumah.
RAD ZN INDUS NOX
Min. : 1.000 Min. : 0.00 Min. : 0.46 Min. :0.3850
1st Qu.: 4.000 1st Qu.: 0.00 1st Qu.: 5.19 1st Qu.:0.4490
Median : 5.000 Median : 0.00 Median : 9.69 Median :0.5380
Mean : 9.549 Mean : 11.36 Mean :11.14 Mean :0.5547
3rd Qu.:24.000 3rd Qu.: 12.50 3rd Qu.:18.10 3rd Qu.:0.6240
Max. :24.000 Max. :100.00 Max. :27.74 Max. :0.8710
AGE TAX PTRATIO LSTAT
Min. : 2.90 Min. :187.0 Min. :12.60 Min. : 1.73
1st Qu.: 45.02 1st Qu.:279.0 1st Qu.:17.40 1st Qu.: 6.95
Median : 77.50 Median :330.0 Median :19.05 Median :11.36
Mean : 68.57 Mean :408.2 Mean :18.46 Mean :12.65
3rd Qu.: 94.08 3rd Qu.:666.0 3rd Qu.:20.20 3rd Qu.:16.95
Max. :100.00 Max. :711.0 Max. :22.00 Max. :37.97
MEDV
Min. : 5.00
1st Qu.:17.02
Median :21.20
Mean :22.53
3rd Qu.:25.00
Max. :50.00
Berdasarkan hasil tersebut masing - masing variabel memberikan informasi sebagai berikut :
Variabel RAD : Indeks aksesibilitas ke jalan tol utama berkisar antara skala 1 sampai 24. Nilai median 5, dan nilai kuartil ke-3 serta nilai maksimalnya sama - sama 24. pola tersebut mengindikasikan adanya pemusatan data (bimodal atau condong khusus), di mana terdapat sekelompok besar wilayah pengamatan yang letaknya sangat dekat atau memiliki aksesibilitas sangat tinggi ke jalan tol utama.
ZN (Zonasi Lahan Luas > \(25.000^2\)) : variabel ZN memiliki nilai batas minimal, Q1, dan mean yang sama di angka 0,00. Namun, nilai maksimalnya mencapai 100,00 dengan rata - -rata sebesar 11,36. Angka - angka tersebut membuktikan bahwa lebih dari 50% wilayah di Boston sama sekali tidak memiliki lahan pemukiman yang luas. Hanya terdapat beberapa wilayah kecil atau wilayah di pinggir kota yang dibatasi khusus untuk pemerintah sebagai daerah eksklusif dengan halaman yang luas.
INDUS (Proprsi Lahan Industri Non-Ritel) : Luas lahan industri di setiap wilayah berkisar antara 0,46% hingga 27,74%. Rata - rata wilayah di Boston mengalokasikan sekitar 11,14% lahannya untuk perindustrian, dengan nilai median sebesar 9,69%. Angka tersebt menunjukan bahwa kegiatan industri tersebar secara sedang di berbagai wilayah perkotaan.
NOX (Konsentrasi PPolusi Udara Nitrogen Oksida) : Konsentrasi gas polutan Nitric Oxides Concentration (NOX) di nilai paling rendahnya sekitar 0,3850 hingga nilai tertingginya sebesar 0,8710. Nilai rata - rata sebesar 0,5547 sangat dekat dengan nilai mediannya yaitu 0,5380. Kemiripan nilai mean dengan median menandakan bahwa tingkat polusi udara tersebar secara normal di seluruh wilayah yang di amati.
AGE (Proporsi Bangunan Tua) : Rentang usia bangunan sangat kontras, dengan wilayah yang modern dengan jumlah 2,9% bangunan tua, hingga wilayah yang diklaim bersejarah atau dalam artian daerah kuno yang semua bangunannya merupakan bangunan tua. Nilai median sebesar 77,50% dan mean 68,57% menmberikan informasi secara gambaran bahwa Boston merupakan kota tua, di mana kebanyakan wilayah di dminasi oleh pemukiman tua atau gedung - gedung kuno Pramadya.
TAX (Tarif Pajak Properti) : Tarif pajak properti di Boston memiliki rentang yang sangat besar, berkisar dari 187 USD hingga 711 USD pr 10.00- nilai properti. Rata - rata pajakknya adalah 408,2 USD. Jarak yang sangat jauh antar Q1 dengan Q3 menunjukan adanya pengelompokkan tarif pajak yang kontras.
PTRATIO (Rasio Murid per Guru) : Rasio kepadatan kelas di sekolah - sekolah Boston mulai dari angka 12,60 hingga 22,0 murid per satu guru. Rata - rata rasio berada di angka 18,46 dengan median 19,05. hal ini menggambarkan bahwa secara umum, beban pengajaran sekolah di kota Boston tergolong cuup padat karenaa nilai kuartilnya menumpuk di angka 17.
LSTAT (Persentase Penduduk Kelas Sosial-Ekonomi Bawah) : Persentase penduduk kelas bawah di wilayah pengamatan berkisar dari yang sangat kecil yaitu 1.73% hingga yang sangat besar mencapai 37.97%. Nilai rata-ratanya berada di angka 12.65%, sementara nilai tengahnya berada pada angka 11.36%. Karena nilai rata-rata lebih besar dari nilai median, secara statistik variabel LSTAT memiliki sebaran yang menjulur positif (skewed to the right), artinya mayoritas wilayah dihuni oleh sedikit penduduk kelas bawah, namun ada beberapa wilayah khusus yang tingkat kemiskinannya sangat padat.
MEDV (Median Value / Harga Rumah) : Harga rumah di wilayah Boston memiliki nilai minimum sebesar 5,000 USD dan maksimum menyentuh 50,000 USD. Rata-rata harga rumah berada di angka 22,530 USD, yang tidak jauh berbeda dengan nilai tengahnya sebesar 21,200 USD. Hal ini menandakan sebaran data harga rumah secara umum berpusat pada kelas menengah, meskipun terdapat variasi harga yang cukup lebar antara perumahan kumuh atau biasa dengan pemukiman elit.
library(ggplot2)
library(GGally)
Visual_Boston <- data_bersih[variabel_pilihan]
ggpairs(Visual_Boston,
title = "Matriks Korelasi dan Sebaran Data Boston Housing",
upper = list(continuous = wrap("cor", size = 3.5))) +
theme_minimal()melakukan visualisasi terhadap data dengan menggunakan Pairs plot, diperoleh hasil seperti berikut :
Terjadi outlier pada variabel ZN dan B, untuk variabel dua variabel tersebut memiliki outlier yang besar, untuk varibel B yang menunjukan proporsi orang berkulit gelap dengan jumlah yang besar.
Outlier pada variabel MEDV (Harga Rumah) dan PTRATIO (Rasio Murid-Guru) berada pada tingkat sedang.
Variabel yang tidak memiliki outlier yaitu variabel INDUS (Proporsi Lahan Industri), NOX (Tingkat Polusi udara), AGE (Proporsi Bangunan Tua), dan TAX (Tarif Pajak Properti).
Variabel LSTAT dan MEDV memiliki hubungan yang negatif menandakan Semakin tinggi persentase penduduk kelas sosial-ekonomi bawah di suatu wilayah kota Boston, maka harga rata-rata rumah (MEDV) di kawasan tersebut akan turun drastis. Sebaliknya, rumah-rumah termahal di Boston berkumpul di wilayah yang persentase kelas bawahnya mendekati nol.
VAriabel PTRATIO dengan MEDV memiliki hubungan yang negatif, namun tidak terlalu ekstrim sebesar -0,508.Variabel ini menunjukkan pengaruh faktor kualitas fasilitas publik terhadap nilai properti. Semakin tinggi rasio murid per guru, berarti beban kelas di sekolah setempat semakin padat yang sering kali diidentikkan dengan penurunan kualitas pengawasan pendidikan. Di mata calon pembeli rumah, wilayah dengan sekolah yang terlalu padat kurang diminati, sehingga secara signifikan menurunkan harga pasar rumah (MEDV) di kawasan tersebut.
Huungan Variabel MEDV dengan variabel NOX dan INDUS, memiliki hubungan negatif yang sedang atau tidak terlalu besar.Kedua variabel ini menggambarkan kenyamanan fisik lingkungan hunian. Semakin besar proporsi lahan yang beralih fungsi menjadi kawasan industri non-ritel (INDUS), maka emisi gas nitrogen oksida (NOX) atau polusi udara di wilayah tersebut akan ikut meningkat tajam. Lingkungan yang bising akibat aktivitas pabrik serta kualitas udara yang buruk secara konsisten membuat harga rumah (MEDV) menjadi lebih murah karena menurunkan tingkat kelayakan huni (livability) wilayah tersebut.
TAX dengan MEDV memiliki hubungan negatif sedang dengan nilai -0,469. Apabila beban pajak properti yang tinggi di wilayah Boston maka akan menurunkan harga rumah.
RAD dengan MEDV hubungan variabel tersebut negatif lemah, Wilayah yang terlalu dekat dengan akses jalan tol justru memiliki harga yang rendah, karena rumah - rumah tersebut menghadapi bebad polusi dan kebisingan kendaraan serta debu yang tinggi.
AGE dengan MEDV memiliki hubungan negatif yang lemah rumah - rumah yang berada di kawasan pemukiman kuno cenderung memiliki harga yang rendah.
ZN dengan MEDV memiliki hubungan positif yang lemah, di lingkungan yang di batasi oleh pemerintah untuk kavling dan asri menjadi daya tarik bagi masyarakat dengan sosial ekonomi kelas atas sehingga menaikkan harga rumah.
RAD ZN INDUS NOX AGE TAX
RAD 1.0000000 -0.3119478 0.5951293 0.6114406 0.4560225 0.9102282
ZN -0.3119478 1.0000000 -0.5338282 -0.5166037 -0.5695373 -0.3145633
INDUS 0.5951293 -0.5338282 1.0000000 0.7636514 0.6447785 0.7207602
NOX 0.6114406 -0.5166037 0.7636514 1.0000000 0.7314701 0.6680232
AGE 0.4560225 -0.5695373 0.6447785 0.7314701 1.0000000 0.5064556
TAX 0.9102282 -0.3145633 0.7207602 0.6680232 0.5064556 1.0000000
PTRATIO 0.4647412 -0.3916785 0.3832476 0.1889327 0.2615150 0.4608530
LSTAT 0.4886763 -0.4129946 0.6037997 0.5908789 0.6023385 0.5439934
MEDV -0.3816262 0.3604453 -0.4837252 -0.4273208 -0.3769546 -0.4685359
PTRATIO LSTAT MEDV
RAD 0.4647412 0.4886763 -0.3816262
ZN -0.3916785 -0.4129946 0.3604453
INDUS 0.3832476 0.6037997 -0.4837252
NOX 0.1889327 0.5908789 -0.4273208
AGE 0.2615150 0.6023385 -0.3769546
TAX 0.4608530 0.5439934 -0.4685359
PTRATIO 1.0000000 0.3740443 -0.5077867
LSTAT 0.3740443 1.0000000 -0.7376627
MEDV -0.5077867 -0.7376627 1.0000000
RAD dengan TAX memiliki hubungan yang sangat kuat sebesar 0,910 artinya semakin mudah mengakses tol, maka harga pajak akan semakin tinggi. nilai tersebut juga mengindikasikan adanya multikolinearitas yang tinggi pula.
INDUS, NOX, dan TAX memiliki hubungan yang kuat sebesar 0,764, artinya apabila konsentrasi gas nitogen tingi membuat pajak semakin tinggi di wilayah yang dekat dengan industri, sehingga diasumsikan aktivitas manufaktur atau pabrik mempengaruhi pajak.
NOX dengan AGE memiliki korelasi psitif sebesar 0,731. begitu juga INDUS dengan AGE memiliki korelasi positif dengan angka 0,645. kawasan industri dan polusi udara berada di wilayah Boston yang tua, di mana wilayah tersebut padat dihuni oleh pekerja pabrik.
LSTAT dengan INDUS memiliki nilai 0,604 dan hubungan NOX dengan AGE, kedua hunbungan tersebut bernilai psitif artinya penduduk Boston yang memiliki tingkat ekonomi yang rendah cenderung tinggal di wilayah pabrik yang berpolusi.
ZN dengan AGE -0,570 dan INDUS dengan NOX -0,534, kedua hungan tersebut memiliki nilai negatif artinya secara sengaja lingkungan yang asri dan memiliki ukuran tanah yang luas dibangun di lahan baru yang jauh dari kesibukan pabrik dan menjadi lingkungan dengan hunian mewah.
library(car)
library(lmtest)
regr <- lm(MEDV~RAD + ZN + INDUS + NOX + AGE + TAX + PTRATIO + log(LSTAT), data = Visual_Boston)
vif(regr) RAD ZN INDUS NOX AGE TAX PTRATIO
6.591978 1.905146 3.727508 4.001601 2.616753 8.835867 1.741085
log(LSTAT)
1.975394
Terdapat gejala multikolinearitas sedang pada variabel RAD dan TAX karena memiliki nilai VIF > 5, namun masih bisa ditoleransi dan dalam batas aman. Sedangkan variabel yang lain aman dari multikolinearitas karena nilai VIF nya < 5. Sehingga asumsi multikolinearitas terpenuhi
RAD ZN INDUS NOX AGE TAX PTRATIO LSTAT MEDV
0 0 0 0 0 0 0 0 0
Variabel yang digunakan tidak terdapat atau memuat nilai data yang hilang, sehingga kolom variabel tersebut semua barisnya terisi oleh data
berdasarkan diagram boxplot tersebut, terlihat beberapa variabel memiliki outlier bahkan ada variabel yang sangat banyak memiliki outlier.
Variabel dengan outlier eksrim, yaitu pada variabel ZN dan MEDV
Variabel dengan kondisi outlier yang ringan, yaitu pada variabel LSTAT dan PTRATIO.
Variabel yang aman dari outlier adalah variabel INDUS, NOX, TAX, dan AGE.
Feature engineering adalah proses membuat variabel (fitur) baru dari variabel yang sudah ada dengan tujuan meningkatkan kemampuan model dalam menangkap pola yang lebih kompleks dan relevan terhadap variabel target (MEDV).
library(dplyr)
data_fe <- Visual_Boston
# FITUR 1: TAX_per_RAD — Beban Pajak per Aksesibilitas Jalan Raya
data_fe <- data_fe %>%
mutate(TAX_per_RAD = TAX / (RAD + 1)) # hindari pembagian nol
# lihat ringkasan fitur baru
data_fe %>%
select(TAX, RAD, TAX_per_RAD) %>%
head() Min. 1st Qu. Median Mean 3rd Qu. Max.
26.64 26.64 50.80 54.23 64.00 211.00
# Analisis Multikolinearitas (SEBELUM fitur baru)
model_sebelum <- lm(
MEDV ~ RAD + ZN + INDUS + NOX + AGE + TAX + PTRATIO + LSTAT,
data = data_fe
)
vif_sebelum <- car::vif(model_sebelum)
vif_sebelum RAD ZN INDUS NOX AGE TAX PTRATIO LSTAT
6.570508 1.897548 3.751761 4.006231 2.625219 8.806056 1.705469 1.925747
# Analisis Multikolinearitas (SESUDAH fitur baru)
model_sesudah <- lm(
MEDV ~ ZN + INDUS + NOX + AGE + PTRATIO + LSTAT + TAX_per_RAD,
data = data_fe
)
vif_sesudah <- car::vif(model_sesudah)
vif_sesudah ZN INDUS NOX AGE PTRATIO LSTAT
1.741174 3.010225 3.573469 2.623643 1.431487 1.915745
TAX_per_RAD
1.190362
RAD mengukur tingkat aksesibilitas suatu wilayah terhadap jalan raya radial utama, sedangkan TAX mengukur tarif pajak properti per $10.000 nilai properti. Berdasarkan hasil analisis, kedua variabel teridentifikasi memiliki multikolinearitas tinggi (VIF > 5), yang menunjukkan adanya redundansi informasi di antara keduanya. Untuk mengurangi masalah tersebut, dibuat variabel baru dengan membagi TAX terhadap RAD. Variabel ini merepresentasikan besarnya pajak properti relatif terhadap tingkat aksesibilitas wilayah.
Interpretasinya, nilai TAX/RAD yang tinggi menunjukkan kawasan dengan pajak properti relatif besar dibandingkan tingkat aksesibilitas jalannya, sedangkan nilai TAX/RAD yang rendah menunjukkan kawasan dengan pajak yang relatif lebih kecil dibandingkan tingkat aksesibilitas yang dimiliki.
Hasil perbandingan nilai VIF sebelum dan sesudah pembentukan fitur TAX_per_RAD menunjukkan bahwa fitur baru memiliki nilai VIF yang lebih rendah dibandingkan variabel asalnya, sehingga membantu mengurangi masalah multikolinearitas dalam model.
# FITUR 2: POLLUTION_LOAD — Indeks Beban Polusi-Industri Gabungan
data_fe <- data_fe %>%
mutate(POLLUTION_LOAD = NOX * INDUS)
# Melihat beberapa nilai hasil feature engineering
data_fe %>%
select(NOX, INDUS, POLLUTION_LOAD) %>%
head() Min. 1st Qu. Median Mean 3rd Qu. Max.
0.1941 2.5257 4.4645 6.7834 12.1451 17.0542
Variabel NOX mengukur tingkat pencemaran udara, sedangkan INDUS mengukur proporsi lahan industri dalam suatu kawasan. Kedua variabel sama-sama menggambarkan kondisi lingkungan yang dipengaruhi aktivitas industri. Oleh karena itu, dibentuk fitur baru POLLUTION_LOAD melalui perkalian NOX dan INDUS untuk merepresentasikan beban lingkungan industri dalam satu variabel.
Interpretasinya, Nilai POLLUTION_LOAD yang tinggi menunjukkan kawasan dengan tingkat industrialisasi dan pencemaran udara yang relatif tinggi. Sebaliknya, nilai yang rendah menunjukkan kawasan dengan aktivitas industri dan tingkat pencemaran yang relatif rendah.
# Visualisasi Korelasi Fitur Baru terhadap MEDV
library(ggplot2)
library(gridExtra)
# Daftar fitur baru
fitur_baru <- c("TAX_per_RAD", "POLLUTION_LOAD", "ENV_SOCIAL_RISK", "MEDV")
# Scatter Plot TAX_per_RAD vs MEDV
p1 <- ggplot(data_fe, aes(x = TAX_per_RAD, y = MEDV)) +
geom_point(alpha = 0.5, color = "#2E86AB") +
geom_smooth(method = "lm", color = "red", se = TRUE) +
labs(
title = "TAX_per_RAD vs MEDV",
x = "Beban Pajak per Aksesibilitas",
y = "Harga Rumah Median (MEDV)"
) +
theme_minimal()
# Scatter Plot POLLUTION_LOAD vs MEDV
p2 <- ggplot(data_fe, aes(x = POLLUTION_LOAD, y = MEDV)) +
geom_point(alpha = 0.5, color = "#A23B72") +
geom_smooth(method = "lm", color = "red", se = TRUE) +
labs(
title = "POLLUTION_LOAD vs MEDV",
x = "Indeks Beban Polusi-Industri",
y = "Harga Rumah Median (MEDV)"
) +
theme_minimal()
# Scatter Plot ENV_SOCIAL_RISK vs MEDV
p3 <- ggplot(data_fe, aes(x = ENV_SOCIAL_RISK, y = MEDV)) +
geom_point(alpha = 0.5, color = "#F18F01") +
geom_smooth(method = "lm", color = "red", se = TRUE) +
labs(
title = "ENV_SOCIAL_RISK vs MEDV",
x = "Indeks Risiko Lingkungan-Sosial",
y = "Harga Rumah Median (MEDV)"
) +
theme_minimal()
# Menampilkan seluruh plot
grid.arrange(
p1, p2, p3,
ncol = 2,
top = "Hubungan Fitur Baru terhadap Harga Rumah (MEDV)"
)
=== Korelasi Fitur Baru terhadap MEDV ===
kor_medv <- cor(data_fe[fitur_baru])[, "MEDV"]
kor_df <- data.frame(
Fitur = names(kor_medv),
Korelasi_dengan_MEDV = round(as.numeric(kor_medv), 4)
)
print(kor_df) Fitur Korelasi_dengan_MEDV
1 TAX_per_RAD 0.0928
2 POLLUTION_LOAD -0.4914
3 ENV_SOCIAL_RISK -0.7007
4 MEDV 1.0000
# Menentukan fitur dengan korelasi absolut terbesar
kor_no_medv <- abs(kor_medv[names(kor_medv) != "MEDV"])
fitur_terkuat <- names(which.max(kor_no_medv))
cat(
"\nFitur baru dengan korelasi absolut terbesar terhadap MEDV adalah:",
fitur_terkuat, "\n"
)
Fitur baru dengan korelasi absolut terbesar terhadap MEDV adalah: ENV_SOCIAL_RISK
Feature selection dilakukan untuk memilih subset variabel yang paling relevan dan informatif terhadap variabel target (MEDV), sekaligus mengeliminasi variabel yang redundan, berkolinear, atau memiliki kontribusi rendah. Pada tahap ini digunakan 2 metode feature selection:
# Dataset lengkap dengan semua fitur (asli + baru)
data_fs <- data_fe
# Daftar semua kandidat variabel prediktor
semua_fitur <- c("RAD", "ZN", "INDUS", "NOX", "AGE", "TAX",
"PTRATIO", "LSTAT",
"TAX_per_RAD", "POLLUTION_LOAD", "AGING_POVERTY_INDEX")
cat("Total kandidat fitur:", length(semua_fitur), "\n")Total kandidat fitur: 11
Variabel target: MEDV
library(car)
library(ggplot2)
# METODE 1: FILTER METHOD
# Daftar seluruh fitur kandidat
semua_fitur <- c(
"RAD", "ZN", "INDUS", "NOX", "AGE", "TAX",
"PTRATIO", "LSTAT",
"TAX_per_RAD", "POLLUTION_LOAD", "ENV_SOCIAL_RISK"
)
# FILTER BERDASARKAN KORELASI
# Korelasi asli
kor_asli <- cor(data_fs[, c(semua_fitur, "MEDV")])[, "MEDV"]
kor_asli <- kor_asli[semua_fitur]
# Korelasi absolut untuk seleksi
kor_abs <- abs(kor_asli)
# Tabel korelasi
tabel_korelasi <- data.frame(
Variabel = names(kor_asli),
Korelasi = round(kor_asli, 4),
Abs_Korelasi = round(kor_abs, 4)
)
tabel_korelasi <- tabel_korelasi[
order(tabel_korelasi$Abs_Korelasi, decreasing = TRUE),
]
print(tabel_korelasi) Variabel Korelasi Abs_Korelasi
LSTAT LSTAT -0.7377 0.7377
ENV_SOCIAL_RISK ENV_SOCIAL_RISK -0.7007 0.7007
PTRATIO PTRATIO -0.5078 0.5078
POLLUTION_LOAD POLLUTION_LOAD -0.4914 0.4914
INDUS INDUS -0.4837 0.4837
TAX TAX -0.4685 0.4685
NOX NOX -0.4273 0.4273
RAD RAD -0.3816 0.3816
AGE AGE -0.3770 0.3770
ZN ZN 0.3604 0.3604
TAX_per_RAD TAX_per_RAD 0.0928 0.0928
# Threshold korelasi
threshold_kor <- 0.30
fitur_lolos_kor <- names(kor_abs[kor_abs >= threshold_kor])
fitur_gugur_kor <- names(kor_abs[kor_abs < threshold_kor])
cat("\nFitur yang LOLOS filter korelasi:\n")
Fitur yang LOLOS filter korelasi:
RAD, ZN, INDUS, NOX, AGE, TAX, PTRATIO, LSTAT, POLLUTION_LOAD, ENV_SOCIAL_RISK
Fitur yang GUGUR filter korelasi:
TAX_per_RAD
# Visualisasi korelasi
ggplot(tabel_korelasi,
aes(x = reorder(Variabel, Abs_Korelasi),
y = Abs_Korelasi,
fill = Abs_Korelasi >= threshold_kor)) +
geom_col() +
coord_flip() +
geom_hline(yintercept = threshold_kor,
color = "red",
linetype = "dashed") +
labs(
title = "Korelasi Absolut Fitur terhadap MEDV",
x = "Variabel",
y = "|Korelasi|"
) +
theme_minimal() +
theme(legend.position = "none")Metode filter korelasi digunakan untuk mengidentifikasi variabel yang memiliki hubungan linear dengan variabel target MEDV. Berdasarkan hasil analisis, hampir seluruh variabel memiliki korelasi yang cukup signifikan (|r| ≥ 0.30), kecuali TAX_per_RAD yang menunjukkan hubungan sangat lemah.
Variabel dengan korelasi tertinggi adalah LSTAT dan ENV_SOCIAL_RISK, yang menunjukkan bahwa kondisi sosial ekonomi masyarakat merupakan faktor dominan dalam menentukan harga rumah. Selain itu, variabel terkait lingkungan seperti NOX, INDUS, dan POLLUTION_LOAD juga menunjukkan hubungan negatif yang cukup kuat terhadap MEDV, mengindikasikan bahwa kualitas lingkungan berpengaruh terhadap nilai properti.
Namun, pendekatan ini hanya mempertimbangkan hubungan linear secara individual tanpa memperhatikan multikolinearitas antar variabel, sehingga masih diperlukan tahap seleksi lanjutan untuk memperoleh model yang lebih stabil.
# Model awal: gunakan hasil filter korelasi
formula_penuh <- as.formula(
paste("MEDV ~", paste(fitur_lolos_kor, collapse = " + "))
)
model_penuh <- lm(formula_penuh, data = data_fs)
cat("\nModel Awal (sebelum stepwise):\n")
Model Awal (sebelum stepwise):
Estimate Std. Error t value Pr(>|t|)
(Intercept) 57.64180063 6.331149360 9.1044765 2.132273e-18
RAD 0.34316576 0.073935886 4.6413965 4.437900e-06
ZN 0.02877672 0.017081240 1.6846973 9.267732e-02
INDUS 0.87520575 0.357991768 2.4447650 1.484233e-02
NOX -5.18331939 10.836582810 -0.4783168 6.326359e-01
AGE 0.07099720 0.015314826 4.6358477 4.553530e-06
TAX -0.01625868 0.004373905 -3.7171991 2.244448e-04
PTRATIO -1.24864167 0.149258866 -8.3656114 6.136295e-16
LSTAT -1.45952055 0.263109537 -5.5471974 4.733808e-08
POLLUTION_LOAD -1.39846634 0.640079817 -2.1848312 2.936946e-02
ENV_SOCIAL_RISK 0.95676482 0.420758779 2.2739034 2.339912e-02
AIC Model Awal: 3178.63
# Backward stepwise selection berdasarkan AIC
model_step <- step(model_penuh,
direction = "backward",
trace = TRUE)Start: AIC=1740.66
MEDV ~ RAD + ZN + INDUS + NOX + AGE + TAX + PTRATIO + LSTAT +
POLLUTION_LOAD + ENV_SOCIAL_RISK
Df Sum of Sq RSS AIC
- NOX 1 6.98 15117 1738.9
<none> 15110 1740.7
- ZN 1 86.64 15196 1741.6
- POLLUTION_LOAD 1 145.71 15256 1743.5
- ENV_SOCIAL_RISK 1 157.83 15268 1743.9
- INDUS 1 182.44 15292 1744.7
- TAX 1 421.78 15532 1752.6
- AGE 1 656.02 15766 1760.2
- RAD 1 657.59 15768 1760.2
- LSTAT 1 939.30 16049 1769.2
- PTRATIO 1 2136.25 17246 1805.6
Step: AIC=1738.9
MEDV ~ RAD + ZN + INDUS + AGE + TAX + PTRATIO + LSTAT + POLLUTION_LOAD +
ENV_SOCIAL_RISK
Df Sum of Sq RSS AIC
<none> 15117 1738.9
- ENV_SOCIAL_RISK 1 151.38 15268 1741.9
- ZN 1 161.28 15278 1742.3
- POLLUTION_LOAD 1 380.84 15498 1749.5
- INDUS 1 401.81 15519 1750.2
- TAX 1 416.81 15534 1750.7
- RAD 1 655.72 15773 1758.4
- AGE 1 737.48 15854 1761.0
- LSTAT 1 965.35 16082 1768.2
- PTRATIO 1 2161.00 17278 1804.5
=== Hasil Akhir Backward Stepwise ===
Call:
lm(formula = MEDV ~ RAD + ZN + INDUS + AGE + TAX + PTRATIO +
LSTAT + POLLUTION_LOAD + ENV_SOCIAL_RISK, data = data_fs)
Residuals:
Min 1Q Median 3Q Max
-12.0477 -3.3433 -0.8529 2.0463 25.6041
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 54.906531 2.714844 20.225 < 2e-16 ***
RAD 0.336460 0.072538 4.638 4.50e-06 ***
ZN 0.033154 0.014412 2.300 0.021839 *
INDUS 0.986577 0.271714 3.631 0.000312 ***
AGE 0.067818 0.013787 4.919 1.18e-06 ***
TAX -0.016134 0.004363 -3.698 0.000241 ***
PTRATIO -1.235996 0.146785 -8.420 4.06e-16 ***
LSTAT -1.425924 0.253364 -5.628 3.05e-08 ***
POLLUTION_LOAD -1.612999 0.456303 -3.535 0.000446 ***
ENV_SOCIAL_RISK 0.903197 0.405265 2.229 0.026284 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 5.521 on 496 degrees of freedom
Multiple R-squared: 0.6461, Adjusted R-squared: 0.6397
F-statistic: 100.6 on 9 and 496 DF, p-value: < 2.2e-16
AIC Model Terpilih: 3176.864
# Fitur yang dipilih model akhir
fitur_terpilih <- names(coef(model_step))[-1]
cat("\n>> Fitur TERPILIH oleh Stepwise:\n")
>> Fitur TERPILIH oleh Stepwise:
RAD, ZN, INDUS, AGE, TAX, PTRATIO, LSTAT, POLLUTION_LOAD, ENV_SOCIAL_RISK
# Fitur yang dieliminasi oleh stepwise
fitur_gugur_step <- setdiff(fitur_lolos_kor, fitur_terpilih)
cat("\n>> Fitur GUGUR oleh Stepwise:\n")
>> Fitur GUGUR oleh Stepwise:
NOX
Hasil backward stepwise regression menunjukkan bahwa dari seluruh variabel kandidat, hanya NOX yang dieliminasi dari model akhir. Variabel ini dihapus karena penghapusannya menghasilkan penurunan nilai AIC, yang berarti model menjadi lebih sederhana dan lebih efisien. Sementara itu, variabel lain seperti RAD, ZN, INDUS, AGE, TAX, PTRATIO, LSTAT, POLLUTION_LOAD, dan ENV_SOCIAL_RISK tetap dipertahankan karena keberadaannya membantu menjaga keseimbangan antara ketepatan model dan kompleksitasnya.
Principal Component Analysis (PCA) adalah metode reduksi dimensi yang mengubah variabel asli yang mungkin saling berkorelasi menjadi sekumpulan variabel baru yang tidak berkorelasi, disebut komponen utama (principal components). PCA digunakan untuk mengatasi multikolinearitas, menyederhanakan struktur data, dan mengekstrak informasi paling penting dari data Boston Housing.
library(FactoMineR)
library(factoextra)
library(ggplot2)
library(gridExtra)
library(tidyr)
variabel_pca <- c("RAD", "ZN", "INDUS", "NOX", "AGE", "TAX", "PTRATIO", "LSTAT")
data_pca_input <- data_bersih[variabel_pca]
pca_hasil <- prcomp(data_pca_input, center = TRUE, scale. = TRUE)
summary(pca_hasil)Importance of components:
PC1 PC2 PC3 PC4 PC5 PC6 PC7
Standard deviation 2.1760 1.0074 0.9292 0.7222 0.5657 0.54823 0.42165
Proportion of Variance 0.5919 0.1269 0.1079 0.0652 0.0400 0.03757 0.02222
Cumulative Proportion 0.5919 0.7187 0.8266 0.8918 0.9318 0.96941 0.99163
PC8
Standard deviation 0.25872
Proportion of Variance 0.00837
Cumulative Proportion 1.00000
Data yang digunakan untuk PCA adalah 8 variabel prediktor numerik dari dataset Boston Housing. Data distandarisasi (z-score) agar perbedaan satuan tidak memengaruhi hasil PCA.
variansi <- pca_hasil$sdev^2
proporsi <- variansi / sum(variansi)
kumulatif <- cumsum(proporsi)
tabel_variansi <- data.frame(
PC = paste0("PC", seq_along(variansi)),
Eigenvalue = round(variansi, 4),
Proporsi_Var = round(proporsi * 100, 2),
Kumulatif_Var = round(kumulatif * 100, 2)
)
print(tabel_variansi) PC Eigenvalue Proporsi_Var Kumulatif_Var
1 PC1 4.7349 59.19 59.19
2 PC2 1.0149 12.69 71.87
3 PC3 0.8634 10.79 82.66
4 PC4 0.5216 6.52 89.18
5 PC5 0.3200 4.00 93.18
6 PC6 0.3006 3.76 96.94
7 PC7 0.1778 2.22 99.16
8 PC8 0.0669 0.84 100.00
fviz_eig(pca_hasil,
addlabels = TRUE,
ylim = c(0, 50),
barfill = "#2E86AB",
barcolor = "#2E86AB",
linecolor = "#E63946",
ggtheme = theme_minimal()) +
labs(title = "Scree Plot -- Proporsi Variansi Tiap Principal Component",
x = "Principal Component",
y = "Persentase Variansi (%)") +
geom_hline(yintercept = 100 / ncol(data_pca_input),
linetype = "dashed", color = "gray50") +
annotate("text", x = 7, y = 100 / ncol(data_pca_input) + 1.5,
label = "Threshold rata-rata (12.5%)", size = 3, color = "gray40")Interpretasi Scree Plot:
PC1 menjelaskan 59,19% variasi data, sedangkan PC2 dan PC3 masing-masing menjelaskan 12,69% dan 10,79%. Secara kumulatif, tiga komponen utama mampu menjelaskan 82,66% total variasi data. Berdasarkan kriteria Kaiser, PC1 dan PC2 memiliki eigenvalue lebih dari 1, namun PC3 tetap dipertahankan karena masih memberikan kontribusi variansi yang cukup besar. Oleh karena itu, reduksi dimensi dari 8 variabel menjadi 3 komponen utama dinilai berhasil karena sebagian besar informasi data masih dapat dipertahankan.
loading <- pca_hasil$rotation
loading_df <- as.data.frame(round(loading[, 1:4], 4))
loading_df$Variabel <- rownames(loading_df)
print(loading_df[, c("Variabel", "PC1", "PC2", "PC3", "PC4")]) Variabel PC1 PC2 PC3 PC4
RAD RAD 0.3679 -0.4536 0.2283 -0.2002
ZN ZN -0.2943 -0.3961 0.5416 0.4312
INDUS INDUS 0.4000 0.0882 0.0797 -0.0998
NOX NOX 0.3910 0.2596 0.2979 -0.1468
AGE AGE 0.3617 0.4086 0.0167 0.0883
TAX TAX 0.3915 -0.3939 0.2637 -0.1343
PTRATIO PTRATIO 0.2459 -0.4779 -0.6991 0.1103
LSTAT LSTAT 0.3472 0.1080 -0.0299 0.8393
loading_plot <- as.data.frame(loading[, 1:4])
loading_plot$Variabel <- rownames(loading_plot)
loading_long <- pivot_longer(loading_plot,
cols = starts_with("PC"),
names_to = "Component",
values_to = "Loading")
ggplot(loading_long, aes(x = Component, y = Variabel, fill = Loading)) +
geom_tile(color = "white") +
geom_text(aes(label = round(Loading, 2)), size = 3.5) +
scale_fill_gradient2(low = "#D62828", mid = "white", high = "#2E86AB",
midpoint = 0, limits = c(-1, 1)) +
labs(title = "Heatmap Loading Factor -- PC1 hingga PC4",
x = "Principal Component", y = "Variabel", fill = "Loading") +
theme_minimal(base_size = 12)Interpretasi Loading Factor:
PC1 – Dimensi Urbanisasi & Tekanan Lingkungan: Variabel dengan loading positif besar: NOX, INDUS, TAX, RAD, AGE. PC1 mencerminkan kawasan padat industri, polusi tinggi, tarif pajak besar, dan bangunan tua – profil kawasan perkotaan yang tertekan secara lingkungan.
PC2 – Karakteristik Perumahan dan Layanan Publik: Loading besar pada PTRATIO dan ZN. PC2 memisahkan kawasan berdasarkan kualitas layanan publik (rasio murid-guru) dan proporsi lahan perumahan.
PC3 – Dimensi Status Sosial-Ekonomi: Didominasi oleh LSTAT. PC3 menangkap dimensi kemiskinan dan status sosial penduduk yang tidak sepenuhnya tercakup oleh PC1 atau PC2.
PC4 – Dimensi Residual: PC4 menangkap variasi sisa yang lebih bersifat spesifik dan sulit diinterpretasikan secara substantif.
fviz_pca_biplot(pca_hasil,
repel = TRUE,
col.var = "#E63946",
col.ind = "steelblue",
alpha.ind = 0.4,
label = "var",
ggtheme = theme_minimal()) +
labs(title = "Biplot PCA -- PC1 vs PC2",
subtitle = "Arah panah = kontribusi variabel; titik = observasi")Interpretasi Biplot:
p_contrib_pc1 <- fviz_contrib(pca_hasil, choice = "var", axes = 1,
fill = "#2E86AB", color = "#2E86AB",
ggtheme = theme_minimal()) +
labs(title = "Kontribusi Variabel terhadap PC1")
p_contrib_pc2 <- fviz_contrib(pca_hasil, choice = "var", axes = 2,
fill = "#A23B72", color = "#A23B72",
ggtheme = theme_minimal()) +
labs(title = "Kontribusi Variabel terhadap PC2")
grid.arrange(p_contrib_pc1, p_contrib_pc2, ncol = 2)fviz_pca_var(pca_hasil,
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
ggtheme = theme_minimal()) +
labs(title = "Lingkaran Korelasi Variabel -- PCA",
subtitle = "Warna menunjukkan besar kontribusi variabel")Interpretasi Kontribusi Variabel:
skor_pca <- as.data.frame(pca_hasil$x)
skor_pca$MEDV <- data_bersih$MEDV
skor_pca$Kategori_MEDV <- cut(
skor_pca$MEDV,
breaks = quantile(skor_pca$MEDV, probs = c(0, 1/3, 2/3, 1), na.rm = TRUE),
labels = c("Rendah", "Menengah", "Tinggi"),
include.lowest = TRUE
)
ggplot(skor_pca, aes(x = PC1, y = PC2, color = Kategori_MEDV)) +
geom_point(alpha = 0.6, size = 2) +
scale_color_manual(
values = c("Rendah" = "#E63946", "Menengah" = "#F4A261", "Tinggi" = "#2A9D8F"),
name = "Kategori Harga\nRumah (MEDV)"
) +
labs(title = "Score Plot PCA -- PC1 vs PC2",
subtitle = "Warna observasi berdasarkan kategori harga rumah (MEDV)",
x = "PC1 (Urbanisasi & Lingkungan)",
y = "PC2 (Aksesibilitas & Pendidikan)") +
theme_minimal(base_size = 12) +
theme(legend.position = "right")Interpretasi Score Plot:
Berdasarkan seluruh tahapan analisis – korelasi, feature selection, dan PCA – variabel-variabel berikut terbukti paling berpengaruh terhadap harga rumah di Boston:
| Rank | Variabel | Alasan Kepentingan |
|---|---|---|
| 1 | LSTAT | Korelasi negatif terkuat dengan MEDV; kontributor PC1 & PC3; dominan di feature selection |
| 2 | NOX | Merupakan salah satu kontributor utama pada PC1; mencerminkan kualitas lingkungan udara |
| 3 | INDUS | Korelasi negatif kuat; bersama NOX membentuk dimensi tekanan industri |
| 4 | TAX | Terkait erat dengan NOX dan RAD; mencerminkan beban fiskal kawasan |
| 5 | PTRATIO | Kontributor dominan PC2; merepresentasikan kualitas layanan publik |
| 6 | ENV_SOCIAL_RISK | Fitur baru dengan korelasi absolut tertinggi terhadap MEDV di antara fitur rekayasa |
Secara keseluruhan, kondisi sosial-ekonomi (LSTAT) dan kualitas lingkungan (NOX, INDUS) merupakan faktor terdominan penentu harga rumah di wilayah Boston.
Ya, reduksi dimensi berhasil dilakukan.
=== Ringkasan Reduksi Dimensi PCA ===
Jumlah variabel awal : 8 variabel
Variansi kumulatif PC1-PC2 : 71.9%
Variansi kumulatif PC1-PC3 : 82.7%
Variansi kumulatif PC1-PC4 : 89.2%
Dengan mempertahankan 3 PC, reduksi dari 8 menjadi 3 dimensi (62.5% reduksi)
Berdasarkan hasil PCA, tiga komponen utama pertama mampu menjelaskan 82,66% variasi total data. Hal ini menunjukkan bahwa sebagian besar informasi dari 8 variabel asli masih dapat dipertahankan meskipun jumlah dimensi dikurangi menjadi 3 komponen utama.
Kriteria keberhasilan reduksi dimensi terpenuhi karena:
PC1 dan PC2 memiliki eigenvalue lebih besar dari 1 sesuai kriteria Kaiser, sedangkan PC3 tetap dipertahankan karena meningkatkan variansi kumulatif yang dijelaskan menjadi 82,66%.
Tiga komponen utama mampu menjelaskan 82,66% variasi total data, sehingga sebagian besar informasi data tetap dipertahankan.
Reduksi dimensi berhasil menyederhanakan data dari 8 variabel menjadi 3 komponen utama tanpa kehilangan informasi yang signifikan.
Dengan demikian, PCA berhasil merangkum informasi dari delapan variabel ke dalam tiga komponen utama yang lebih sederhana dan tetap representatif terhadap struktur data asli.
Setiap principal component memiliki interpretasi substantif yang dikaitkan dengan konteks urban dan ekonomi Boston:
PC1 - “Urbanisasi dan Lingkungan”
PC1 didominasi oleh variabel NOX, INDUS, TAX, RAD, dan AGE. Komponen ini
menggambarkan karakteristik kawasan yang memiliki aktivitas industri
lebih tinggi, tingkat polusi yang lebih besar, serta kepadatan
pembangunan yang relatif tinggi.
PC2 - “Karakteristik Perumahan dan Layanan
Publik”
PC2 dipengaruhi terutama oleh PTRATIO dan ZN. Komponen ini berkaitan
dengan kualitas layanan pendidikan serta proporsi kawasan yang
diperuntukkan bagi perumahan.
PC3 - “Status Sosial Ekonomi Penduduk”
PC3 didominasi oleh variabel LSTAT sehingga merepresentasikan kondisi
sosial ekonomi penduduk. Komponen ini menangkap variasi yang tidak
sepenuhnya dijelaskan oleh dimensi lingkungan maupun karakteristik
perumahan.
Berdasarkan hasil EDA, feature engineering, feature selection, dan PCA, diperoleh beberapa insight utama sebagai berikut:
Insight 1 – Kondisi Sosial Ekonomi Berpengaruh terhadap Harga
Rumah
Variabel LSTAT menunjukkan hubungan negatif yang kuat dengan MEDV. Hal
ini menunjukkan bahwa kawasan dengan proporsi penduduk berstatus sosial
ekonomi rendah yang lebih tinggi cenderung memiliki harga rumah yang
lebih rendah.
Insight 2 – Kualitas Lingkungan Berkaitan dengan Nilai
Properti
Variabel NOX dan INDUS menunjukkan hubungan negatif terhadap MEDV.
Kawasan dengan tingkat polusi udara dan aktivitas industri yang tinggi
cenderung memiliki nilai properti yang lebih rendah dibandingkan kawasan
yang lebih bersih.
Insight 3 – Karakteristik Kawasan Membentuk Pola yang Saling
Berkaitan
Variabel RAD, TAX, NOX, dan INDUS memiliki korelasi yang relatif tinggi
satu sama lain. Hal ini menunjukkan bahwa kawasan dengan aktivitas
industri yang tinggi umumnya juga memiliki tingkat polusi, aksesibilitas
jalan utama, dan tarif pajak yang lebih tinggi.
Berdasarkan seluruh tahapan analisis pada data Boston Housing, dapat disimpulkan bahwa harga rumah (MEDV) terutama dipengaruhi oleh faktor sosial-ekonomi dan kondisi lingkungan wilayah. Variabel yang paling berpengaruh adalah LSTAT, NOX, INDUS, dan PTRATIO yang masing-masing merepresentasikan tingkat kesejahteraan penduduk, kualitas lingkungan, aktivitas industri, dan beban pendidikan.
Hasil feature engineering menghasilkan tiga fitur baru, yaitu TAX_per_RAD, POLLUTION_LOAD, dan ENV_SOCIAL_RISK, yang membantu merangkum hubungan antarvariabel serta mengurangi masalah multikolinearitas pada data. Pada tahap feature selection, sebagian besar variabel tetap digunakan dalam model, sementara TAX_per_RAD dieliminasi karena memiliki kontribusi yang sangat lemah terhadap MEDV.
Analisis PCA berhasil mereduksi 8 variabel menjadi 3 komponen utama yang mampu menjelaskan 82,66% variasi data. PC1 merepresentasikan tekanan urbanisasi dan lingkungan, PC2 merepresentasikan karakteristik perumahan dan layanan publik, sedangkan PC3 merepresentasikan kondisi sosial ekonomi penduduk. Dengan demikian, PCA terbukti efektif dalam menyederhanakan struktur data tanpa kehilangan informasi utama.
Secara keseluruhan, hasil analisis menunjukkan bahwa harga rumah di Boston ditentukan oleh kombinasi faktor sosial-ekonomi, kualitas lingkungan, dan karakteristik wilayah, di mana variabel seperti LSTAT dan NOX menjadi faktor dominan dalam menjelaskan variasi harga.