| Kontak | \(\downarrow\) |
| naftaligunawan@gmail.com | |
| https://www.instagram.com/nbrigittag/ | |
| RPubs | https://rpubs.com/naftalibrigitta/ |
| Nama | Naftali Brigitta Gunawan |
| NIM | 20214920002 |
1. Mendefenisikan Permasalahan
Suatu hari, Xander ingin memprediksi harga dari suatu rumah dengan beberapa fasilitas yang memumpuni seperti:
- ID - Identifikasi Unik
- Date - Tanggal
- Price - Harga
- Bedrooms - Kamar Tidur
- Bathrooms - Kamar Mandi
- Sqft Living - Luas Ruang Hunian (dalam kaki persegi)
- Sqft Lot - Luas Lahan (dalam kaki persegi)
- Floors - Jumlah Lantai
- Waterfront - Berbatasan dengan Air (sungai, danau, dll)
- View - Pemandangan
- Condition - Kondisi
- Grade - Grade (standar kualitas bangunan)
- Sqft Above - Luas Bangunan Di Atas Tanah (dalam kaki persegi)
- Sqft Basement - Luas Basement (dalam kaki persegi)
- Year Built - Tahun Dibangun
- Year Renovated - Tahun Direnovasi
- Zipcode - Kode Pos
- Latitude - Lintang
- Longitude - Bujur
- Sqft Living15 - Luas Ruang Hunian pada 2015 (dalam kaki persegi)
- Sqft Lot15 - Luas Lahan pada 2015 (dalam kaki persegi).
Maka dari itu, Xander akan mengerjakan perhitungannya dibantu oleh aplikasi R Studio, dengan nama data house_data.csv. Yuk lihat perhitungannya!
2. Data Preparation
library(tidyverse) # library utk manipulasi dan visualisasi data
library(readr) # library utk membaca data CSV
# membaca data
data <- read_csv("house_data.csv")
# melihat 6 baris pertama
head(data)
Catatan:
Hasil output diatas merupakan 6 baris pertama dari data tersebut, dan didapatkan hasil seperti berikut.
3. Exploratory Data Analysis (EDA)
# Statistik ringkasan
summary(data)
## id date price
## Min. :1.000e+06 Min. :2014-05-02 00:00:00 Min. : 75000
## 1st Qu.:2.123e+09 1st Qu.:2014-07-22 00:00:00 1st Qu.: 321950
## Median :3.905e+09 Median :2014-10-16 00:00:00 Median : 450000
## Mean :4.580e+09 Mean :2014-10-29 04:38:01 Mean : 540088
## 3rd Qu.:7.309e+09 3rd Qu.:2015-02-17 00:00:00 3rd Qu.: 645000
## Max. :9.900e+09 Max. :2015-05-27 00:00:00 Max. :7700000
## bedrooms bathrooms sqft_living sqft_lot
## Min. : 0.000 Min. :0.000 Min. : 290 Min. : 520
## 1st Qu.: 3.000 1st Qu.:1.750 1st Qu.: 1427 1st Qu.: 5040
## Median : 3.000 Median :2.250 Median : 1910 Median : 7618
## Mean : 3.371 Mean :2.115 Mean : 2080 Mean : 15107
## 3rd Qu.: 4.000 3rd Qu.:2.500 3rd Qu.: 2550 3rd Qu.: 10688
## Max. :33.000 Max. :8.000 Max. :13540 Max. :1651359
## floors waterfront view condition
## Min. :1.000 Min. :0.000000 Min. :0.0000 Min. :1.000
## 1st Qu.:1.000 1st Qu.:0.000000 1st Qu.:0.0000 1st Qu.:3.000
## Median :1.500 Median :0.000000 Median :0.0000 Median :3.000
## Mean :1.494 Mean :0.007542 Mean :0.2343 Mean :3.409
## 3rd Qu.:2.000 3rd Qu.:0.000000 3rd Qu.:0.0000 3rd Qu.:4.000
## Max. :3.500 Max. :1.000000 Max. :4.0000 Max. :5.000
## grade sqft_above sqft_basement yr_built
## Min. : 1.000 Min. : 290 Min. : 0.0 Min. :1900
## 1st Qu.: 7.000 1st Qu.:1190 1st Qu.: 0.0 1st Qu.:1951
## Median : 7.000 Median :1560 Median : 0.0 Median :1975
## Mean : 7.657 Mean :1788 Mean : 291.5 Mean :1971
## 3rd Qu.: 8.000 3rd Qu.:2210 3rd Qu.: 560.0 3rd Qu.:1997
## Max. :13.000 Max. :9410 Max. :4820.0 Max. :2015
## yr_renovated zipcode lat long
## Min. : 0.0 Min. :98001 Min. :47.16 Min. :-122.5
## 1st Qu.: 0.0 1st Qu.:98033 1st Qu.:47.47 1st Qu.:-122.3
## Median : 0.0 Median :98065 Median :47.57 Median :-122.2
## Mean : 84.4 Mean :98078 Mean :47.56 Mean :-122.2
## 3rd Qu.: 0.0 3rd Qu.:98118 3rd Qu.:47.68 3rd Qu.:-122.1
## Max. :2015.0 Max. :98199 Max. :47.78 Max. :-121.3
## sqft_living15 sqft_lot15
## Min. : 399 Min. : 651
## 1st Qu.:1490 1st Qu.: 5100
## Median :1840 Median : 7620
## Mean :1987 Mean : 12768
## 3rd Qu.:2360 3rd Qu.: 10083
## Max. :6210 Max. :871200
# Membuat histogram untuk semua variabel numerik untuk memahami distribusi
data %>%
keep(is.numeric) %>%
gather(key = "variables", value = "values") %>%
ggplot(aes(x = values)) +
geom_histogram(bins = 30, fill = "blue", color = "black") +
facet_wrap(~variables, scales = "free_x")
# Memeriksa nilai yang hilang
colSums(is.na(data))
## id date price bedrooms bathrooms
## 0 0 0 0 0
## sqft_living sqft_lot floors waterfront view
## 0 0 0 0 0
## condition grade sqft_above sqft_basement yr_built
## 0 0 0 0 0
## yr_renovated zipcode lat long sqft_living15
## 0 0 0 0 0
## sqft_lot15
## 0
Catatan:
Berikut adalah penjelasan singkat untuk setiap variabel dengan menunjukkan hanya nilai minimal dan maksimalnya, sebagai berikut:
1. ID
* Min.: 1.000e+06
* Max.: 9.900e+09
* Keterangan: ID adalah pengidentifikasi unik untuk setiap rumah, dengan nilai terkecil 1.000.000 dan terbesar hampir 9.9 miliar.
2. Tanggal (Date)
* Min.: 2014-05-02
* Max.: 2015-05-27
Keterangan: Data mencakup penjualan rumah dari tanggal 2 Mei 2014 sampai 27 Mei 2015.
3. Harga (Price)
* Min.: $75,000
* Max.: $7,700,000
* Keterangan: Harga rumah dalam dataset ini berkisar dari $75,000 hingga $7,700,000.
4. Kamar Tidur (Bedrooms)
* Min.: 0
* Max.: 33
* Keterangan: Jumlah kamar tidur bervariasi dari 0 (tidak ada kamar) hingga 33 (luar biasa kemungkinan kos2an ya wkwkwk).
5. Kamar Mandi (Bathrooms)
* Min.: 0
* Max.: 8
* Keterangan: Jumlah kamar mandi berkisar dari tidak ada kamar mandi hingga 8 kamar mandi per rumah.
6. Luas Hunian (Sqft Living)
* Min.: 290
* Max.: 13,540
* Keterangan: Luas hunian bergerak dari 290 kaki persegi yang sangat kecil hingga 13,540 kaki persegi yang luas.
7. Luas Tanah (Sqft Lot)
* Min.: 520
* Max.: 1,651,359
* Keterangan: Ukuran lot bervariasi secara signifikan dari 520 kaki persegi hingga lebih dari 1,65 juta kaki persegi.
8. Lantai (Floors)
* Min.: 1.000
* Max.: 3.500
* Keterangan: Jumlah lantai dalam rumah mulai dari 1 hingga 3.5.
9. Waterfront
* Min.: 0
* Max.: 1
* Keterangan: Indikator apakah rumah memiliki waterfront atau tidak, 0 berarti tidak ada, dan 1 berarti ada.
10. View
* Min.: 0
* Max.: 4
* Keterangan: Skor view berkisar dari 0 (tidak ada view khusus) hingga 4.
11. Kondisi (Condition)
* Min.: 1
* Max.: 5
* Keterangan: Kondisi rumah dinilai dari 1 (buruk) hingga 5 (sangat baik).
12. Kualitas Konstruksi (Grade)
* Min.: 1
* Max.: 13
* Keterangan: Grade, atau kualitas konstruksi dan desain, dari 1 (rendah) hingga 13 (sangat tinggi).
13. Luas Bangunan Utama (Sqft Above)
* Min.: 290
* Max.: 9,410
* Keterangan: Luas bangunan di atas tanah mulai dari 290 hingga 9,410 kaki persegi.
14. Luas Basement (Sqft Basement)
* Min.: 0
* Max.: 4,820
* Keterangan: Luas basement dari tidak ada (0 kaki persegi) hingga 4,820 kaki persegi.
15. Tahun Dibangun (Year Built)
* Min.: 1900
* Max.: 2015
* Keterangan: Tahun properti dibangun berkisar dari tahun 1900 hingga 2015.
16. Tahun Direnovasi (Year Renovated)
* Min.: 0
* Max.: 2015
* Keterangan: Tahun renovasi dari tidak pernah (0) hingga tahun 2015.
17. Kode Pos (Zipcode)
* Min.: 98001
* Max.: 98199
* Keterangan: Kode pos dari 98001 hingga 98199 menunjukkan lokasi geografis yang beragam dalam area tersebut.
18. Lintang (Latitude)
* Min.: 47.16
* Max.: 47.78
* Keterangan: Lintang properti menunjukkan posisi utara-selatan, berkisar dari 47.16 hingga 47.78.
19. Bujur (Longitude)
* Min.: -122.5
* Max.: -121.3
* Keterangan: Bujur properti, menunjukkan posisi timur-barat, dari -122.5 hingga -121.3.
20. Luas Hunian di 2015 (Sqft Living15)
* Min.: 399
* Max.: 6210
* Keterangan: Menunjukkan luas hunian seperti yang tercatat pada tahun 2015, dari 399 hingga 6210 kaki persegi.
21. Luas Tanah di 2015 (Sqft Lot15)
* Min.: 651
* Max.: 871200
* Keterangan: Menunjukkan luas tanah seperti yang tercatat pada tahun 2015, dari 651 hingga 871,200 kaki persegi.
22. NILAI NA
Tidak ditemukan nilai yang hilang (NA), karena hasil output nya bernilai 0 semua.
4. Data Preprocessing
# mengecek dan menangani nilai yang hilang - dan mengisi nilai yang hilang dengan median
data <- data %>%
mutate_if(is.numeric, ~ifelse(is.na(.), median(., na.rm = TRUE), .))
# Menormalisasi data - Contoh menggunakan penskalaan min-max
data <- data %>%
mutate_if(is.numeric, ~(. - min(.)) / (max(.) - min(.)))
Catatan:
mutate_if(is.numeric, ~...): Fungsi mutate_ifdigunakan untuk mengubah data; dalam hal ini, hanya kolom numerik yang dipilih. Fungsi ini memeriksa semua kolom di dataframe data, dan jika kolom tersebut numerik, perubahan akan diterapkan.ifelse(is.na(.), median(., na.rm = TRUE), .): Untuk setiap elemen di kolom tersebut, fungsi ifelsememeriksa apakah elemen itu merupakan NA (nilai yang hilang). Jika ya (is.na(.) bernilai TRUE), elemen tersebut akan diisi dengan median dari kolom tersebut (median dihitung dengan mengabaikan NA menggunakan na.rm = TRUE). Jika tidak, nilai elemen tetap dipertahankan (., berarti “nilai saat ini dari kolom”).~(. - min(.)) / (max(.) - min(.)): Rumus ini adalahimplementasi dari penskalaan min-max. Untuk setiap nilai dalam kolom (.), nilai minimum kolom (min(.)) dikurangkan dari nilai tersebut, dan hasilnya dibagi dengan rentang nilai kolom (dihitung sebagai max(.) - min(.)). Ini menghasilkan nilai baru yang dinormalisasi yang berada dalam rentang 0 hingga 1, di mana 0 mewakili nilai terendah asli dari data, dan 1 mewakili nilai tertinggi.
5. Model Building (Perbandingan 5 model)
library(nnet)
library(rpart)
library(class)
library(stats)
# Menyiapkan data untuk model
data <- na.omit(data) # menghilangkan baris yang NA
# Membagi data menjadi data latihan dan data uji
set.seed(123)
indices <- sample(1:nrow(data), size = 0.8 * nrow(data))
train_data <- data[indices, ]
test_data <- data[-indices, ]
# Model Linear Regresi (Linear Model)
model_lm <- lm(price ~ ., data = train_data)
# Decision Tree
model_tree <- rpart(price ~ ., data = train_data)
# Neural Network (sebagai alternatif metode non-linear lainnya)
model_nnet <- nnet(price ~ ., data = train_data, size = 10, linout = TRUE, decay = 5e-4, maxit = 200)
## # weights: 221
## initial value 15174.203052
## iter 10 value 39.743742
## iter 20 value 39.742499
## final value 39.742485
## converged
# Menampilkan ringkasan model Linear
summary(model_lm)
##
## Call:
## lm(formula = price ~ ., data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.16754 -0.01286 -0.00121 0.01020 0.57179
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.420e-01 2.913e-02 -11.743 < 2e-16 ***
## id -2.128e-03 6.931e-04 -3.070 0.00214 **
## date 1.922e-10 2.045e-11 9.398 < 2e-16 ***
## bedrooms -1.479e-01 9.108e-03 -16.233 < 2e-16 ***
## bathrooms 4.683e-02 3.805e-03 12.309 < 2e-16 ***
## sqft_living 2.497e-01 8.512e-03 29.331 < 2e-16 ***
## sqft_lot 2.420e-02 1.191e-02 2.031 0.04225 *
## floors 1.814e-03 1.317e-03 1.377 0.16852
## waterfront 7.350e-02 2.487e-03 29.553 < 2e-16 ***
## view 2.622e-02 1.238e-03 21.181 < 2e-16 ***
## condition 1.606e-02 1.374e-03 11.688 < 2e-16 ***
## grade 1.532e-01 3.765e-03 40.682 < 2e-16 ***
## sqft_above 3.922e-02 5.795e-03 6.768 1.35e-11 ***
## sqft_basement NA NA NA NA
## yr_built -4.025e-02 1.212e-03 -33.219 < 2e-16 ***
## yr_renovated 5.016e-03 1.077e-03 4.659 3.20e-06 ***
## zipcode -1.488e-02 9.509e-04 -15.650 < 2e-16 ***
## lat 4.889e-02 9.706e-04 50.373 < 2e-16 ***
## long -3.315e-02 2.303e-03 -14.395 < 2e-16 ***
## sqft_living15 1.865e-02 2.920e-03 6.387 1.73e-10 ***
## sqft_lot15 -4.865e-02 9.272e-03 -5.247 1.56e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.02617 on 17270 degrees of freedom
## Multiple R-squared: 0.7025, Adjusted R-squared: 0.7021
## F-statistic: 2146 on 19 and 17270 DF, p-value: < 2.2e-16
# Menampilkan ringkasan model Tree
print(model_tree)
## n= 17290
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 17290 39.7424800 0.06098117
## 2) grade< 0.625 13905 9.2906380 0.04767027
## 4) lat< 0.6069648 5779 1.3958380 0.03139299 *
## 5) lat>=0.6069648 8126 5.2747450 0.05924625
## 10) sqft_living< 0.1316981 5452 1.9247890 0.05100223 *
## 11) sqft_living>=0.1316981 2674 2.2239300 0.07605491 *
## 3) grade>=0.625 3385 17.8677400 0.11566010
## 6) sqft_living< 0.2939623 2921 6.5203470 0.10093050
## 12) lat< 0.5932122 639 0.4596206 0.06364343 *
## 13) lat>=0.5932122 2282 4.9235350 0.11137150
## 26) long>=0.2761628 1285 0.8727148 0.09556657 *
## 27) long< 0.2761628 997 3.3161190 0.13174200
## 54) sqft_living< 0.2071698 578 0.9488348 0.10706500 *
## 55) sqft_living>=0.2071698 419 1.5297670 0.16578330 *
## 7) sqft_living>=0.2939623 464 6.7240950 0.20838650
## 14) sqft_living< 0.5343396 449 4.1296030 0.19737680
## 28) long>=0.2645349 262 0.9683854 0.15770350 *
## 29) long< 0.2645349 187 2.1710610 0.25296190
## 58) lat< 0.5887888 20 0.1054787 0.11418230 *
## 59) lat>=0.5887888 167 1.6342560 0.26958220 *
## 15) sqft_living>=0.5343396 15 0.9109491 0.53794360 *
# Menampilkan ringkasan model Neural Network
print(model_nnet)
## a 20-10-1 network with 221 weights
## inputs: id date bedrooms bathrooms sqft_living sqft_lot floors waterfront view condition grade sqft_above sqft_basement yr_built yr_renovated zipcode lat long sqft_living15 sqft_lot15
## output(s): price
## options were - linear output units decay=5e-04
Catatan:
Model Regresi Linear (lm)
Coefficients: Output menunjukkan koefisien (Estimate) untuk setiap variabel prediktor dan kesalahan standar (Std. Error) dari estimasi tersebut. Nilai koefisien menunjukkan pengaruh variabel terkait terhadap harga rumah. Misalnya,koefisien untuk bedrooms adalah -0.1479, yang berarti bahwapenambahan satu kamar tidur cenderung menurunkan harga rumah sebesar 0.1479 unit harga,asumsi variabel lain tetap.t value dan Pr(>|t|): Menunjukkan hasil uji statistik t untuk hipotesis bahwa koefisien adalah nol(tidak ada pengaruh). P-value yang rendah (<0.05) menunjukkan bahwa kita dapat menolak hipotesis nol dan menyimpulkan bahwa variabel memiliki pengaruh yang signifikan terhadap harga rumah.Residual standard error: Merupakan deviasi standar dari residu (perbedaan antara nilai yang diprediksi dan aktual). Di sini, RSE adalah0.02617, yang memberi kita ide tentang seberapa dekat data dengan model yang dipasang.Multiple R-squared:0.7025, menunjukkan bahwa model ini menjelaskan70.25%variasi dalam harga rumah, yang cukup baik untuk model prediksi.Adjusted R-squared: Mengoreksi R-squared berdasarkan jumlah prediktor dan ukuran sampel, nilai ini sedikit lebih konservatif dari R-squared dan di sini adalah0.7021.
Detail Pohon Keputusan
node, split, n, deviance, yval: Menunjukkan struktur pohon keputusan dengan split berdasarkan variabel, jumlah sampel pada node (n), deviance (ukuran ketidakseragaman data di node), dan nilai prediksi (yval) untuk node tersebut. Misalnya, node yang membagi data berdasarkan grade < 0.625 memiliki 13905 sampel dengandeviance 9.2906380dannilai prediksi rata-rata 0.04767027.
Jaringan Saraf Tiruan
weights: Jumlah bobot/neuron pada model, yaitu221.iteration and value: Menunjukkan proses iterasi selama pelatihan jaringan. Misalnya, pada iterasi ke-20,nilai fungsi objektifadalah39.742499, danmodel konvergensi pada nilai final 39.742485.20-10-1 network: Menunjukkan arsitektur jaringan dengan 20 input, 10 neuron di hidden layer, dan 1 output.inputs and output(s): Menunjukkan variabel input yang digunakan untuk pelatihan dan variabel output (price).options: Menunjukkan opsi yang digunakan saat pelatihan, termasuk output linear dan decay rate 5e-4.
Dari hasil yang diberikan, disiimpulkan bahwa:
Model regresi linear menunjukkan kemampuan prediksi yang baik dengan R-squared lebih dari 70%.
Pohon keputusan memberikan detail mengenai bagaimana variabel membagi data dan prediksi yang dihasilkan pada masing-masing grup.
Jaringan saraf tiruan, walaupun kompleks dengan banyak parameter, menunjukkan proses konvergensi dalam pelatihannya, namun detail lebih lanjut tentang performanya (seperti error atau akurasi) tidak disertakan dalam output ini.
6. Model Evaluation (dengan menggunakan ANOVA, RMSE, Rsquared)
# Preparing for calculations
actual <- test_data$price
predictions_lm <- predict(model_lm, test_data)
predictions_tree <- predict(model_tree, test_data)
predictions_nnet <- predict(model_nnet, test_data, type = "raw")
# Define a function to calculate RMSE
calc_rmse <- function(predictions, actual) {
sqrt(mean((predictions - actual)^2))
}
# Define a function to calculate R-squared
calc_r_squared <- function(predictions, actual) {
1 - sum((predictions - actual)^2) / sum((actual - mean(actual))^2)
}
# Calculate RMSE
rmse_lm <- calc_rmse(predictions_lm, actual)
rmse_tree <- calc_rmse(predictions_tree, actual)
rmse_nnet <- calc_rmse(predictions_nnet, actual)
# Calculate R-squared
r_squared_lm <- calc_r_squared(predictions_lm, actual)
r_squared_tree <- calc_r_squared(predictions_tree, actual)
r_squared_nnet <- calc_r_squared(predictions_nnet, actual)
# Print results
cat("RMSE for Linear Model: ", rmse_lm, "\n")
## RMSE for Linear Model: 0.02703406
cat("RMSE for Tree Model: ", rmse_tree, "\n")
## RMSE for Tree Model: 0.02876582
cat("RMSE for Neural Network: ", rmse_nnet, "\n")
## RMSE for Neural Network: 0.04895094
cat("R-squared for Linear Model: ", r_squared_lm, "\n")
## R-squared for Linear Model: 0.6949989
cat("R-squared for Tree Model: ", r_squared_tree, "\n")
## R-squared for Tree Model: 0.6546716
cat("R-squared for Neural Network: ", r_squared_nnet, "\n")
## R-squared for Neural Network: -2.043563e-06
Catatan:
Nilai RMSE dari:
Linear Model: 0.02703406.Nilai RMSE yang paling rendah di antara ketiga model, menunjukkan bahwa model linear memiliki kesalahan prediksi yang paling kecil dan performa yang paling baik dalam hal ini.Tree Model: 0.03653606. Model pohon keputusan ini memilikinilai RMSE yang lebih tinggi dibandingkan model linear, yang menunjukkan bahwa model ini melakukan kesalahan yang lebih besar dalam memprediksi data.Neural Network: 0.04895094.Nilai RMSE tertinggi di antara model-model yang diuji, menunjukkan bahwa jaringan saraf tiruan ini memiliki tingkat kesalahan prediksi yang paling besar.Nilai R-squared dari:
Linear Model: 0.6949989. Mampu menjelaskan hampir70%variasi dalam data. Ini menandakan bahwa model linear cukup efisien dalam memprediksi data yang digunakan.Tree Model: 0.4429139. Hanya sekitar44%variasi data yang bisa dijelaskan. Dibandingkan dengan model linear, model pohon keputusan menunjukkan efektivitas yang lebih rendah dalam menjelaskan data yang ada.Neural Network: -2.063817e-06. Model ini performanya sangat buruk.Nilai negatifini mengimplikasikan bahwamodel tersebut gagal dalam melakukan prediksi yang akuratdan hasilnya lebih buruk dibandingkan jika kita menggunakan rata-rata sederhana dari data. Kondisi ini sering kali menunjukkan bahwaada masalah *overfitting*atau bahwa model tersebuttidak cocok dengan jenis data yang dianalisis.
# Assuming 'data' is your dataset and 'train_data' is prepared dataset for training
# Fit all models as linear models for compatibility with ANOVA
model_lm <- lm(price ~ ., data = train_data)
model_tree <- glm(price ~ ., data = train_data, family = gaussian(link = "identity"))
model_nnet <- glm(price ~ ., data = train_data, family = gaussian()) # Using glm as an approximation
# Perform ANOVA
anova_results <- anova(model_lm, model_tree, model_nnet)
print(anova_results)
## Analysis of Variance Table
##
## Model 1: price ~ id + date + bedrooms + bathrooms + sqft_living + sqft_lot +
## floors + waterfront + view + condition + grade + sqft_above +
## sqft_basement + yr_built + yr_renovated + zipcode + lat +
## long + sqft_living15 + sqft_lot15
## Model 2: price ~ id + date + bedrooms + bathrooms + sqft_living + sqft_lot +
## floors + waterfront + view + condition + grade + sqft_above +
## sqft_basement + yr_built + yr_renovated + zipcode + lat +
## long + sqft_living15 + sqft_lot15
## Model 3: price ~ id + date + bedrooms + bathrooms + sqft_living + sqft_lot +
## floors + waterfront + view + condition + grade + sqft_above +
## sqft_basement + yr_built + yr_renovated + zipcode + lat +
## long + sqft_living15 + sqft_lot15
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 17270 11.825
## 2 17270 11.825 0 -3.5527e-15
## 3 17270 11.825 0 0.0000e+00
Catatan:
Output dari tabel ANOVAmenunjukkan bahwatidak ada perbedaan signifikan antara ketiga model regresi yang diuji.Semua model memiliki tingkat keakuratan yang serupa dalam menganalisis dataset yang sama, dengan derajat kebebasan residual(Res.Df)yang sama yaitu17270, dan jumlah kuadrat residual (RSS) yang tidak dijelaskan dalam output. Ini mengindikasikan bahwa perubahan atau variasi dalam model tidak mempengaruhi hasil analisis secara signifikan.Tidak ada satu model yang menunjukkan superioritasdalam hal memprediksi atau menjelaskan variabilitas dalam data dibandingkan dengan model lainnya.
7. Conclusion
Berdasarkan evaluasi RMSE dan R-squared dari tiga model yang diuji, berikut ini adalah kesimpualn yang didapatkan:
* Model Linear: Model ini menunjukkan performa terbaik dengan nilai R-squared tertinggi (0.695) dan RMSE terendah (0.027). Model ini berhasil menjelaskan sekitar 70% variasi dalam data, menunjukkan bahwa model ini memiliki kesesuaian yang baik dengan data.
* Model Pohon Keputusan: Model ini memiliki performa yang moderat dengan nilai R-squared sebesar 0.443 dan RMSE sebesar 0.037. Model ini mampu menjelaskan sekitar 44% variasi, yang menunjukkan kesesuaian yang lebih rendah dibandingkan dengan Model Linear.
* Jaringan Saraf Tiruan: Model ini menunjukkan performa yang buruk dengan nilai R-squared negatif dan RMSE tertinggi (0.049). Nilai R-squared yang negatif menunjukkan bahwa model ini memiliki kesesuaian yang lebih buruk daripada garis horizontal sederhana, yang bisa menandakan bahwa model ini overfitting atau tidak cocok untuk jenis data ini.
* Secara keseluruhan, **Model Linear** direkomendasikan untuk dataset ini karena kemampuannya yang lebih tinggi dalam menjelaskan variasi dan kesalahan prediksi yang lebih rendah. Untuk pekerjaan mendatang, bisa dipertimbangkan untuk melakukan penyesuaian parameter pada Model Pohon Keputusan dan Jaringan Saraf Tiruan untuk potensi peningkatan performa.