Regression Modeling Workflow - Predicting Property Sales Price: in Jakarta, Tangsel, and Depok Area

Keinginan untuk memiliki properti sendiri merupakan impian banyak orang. Selain bisa dijadikan tempat tinggal, memiliki properti di Jakarta dan Depok adalah salah satu aset investasi yang menguntungkan karena harganya yang cenderung naik setiap tahunnya.

Dalam proses pencarian tempat tinggal idaman ini, beberapa orang mungkin saja mengalami hambatan, yaitu kesulitan dalam mencari tempat tinggal yang sesuai dengan spesifikasi yang diinginkan dan budget yang dimiliki. Banyak orang menemukan tempat tinggal dengan harga yang cukup mahal namun tidak sesuai dengan spesifikasi yang ditawarkan.

“Ada gak sih kira-kira sistem yang dapat memberikan referensi harga properti?” menjadi tujuan analisis pada Dive Deeper ini.

Read Data

Kita akan gunakan data properti_jual.csv yang tersimpan di folder data_dd. Data yang diambil adalah data hasil scrapping dari website https://www.rumah123.com/

properti <- read.csv("data_dd/properti_jual.csv")
head(properti)
##   K..Mandi K..Tidur L..Bangunan                    Sertifikat Tipe.Properti
## 0        3        4         294    SHM - Sertifikat Hak Milik         Rumah
## 1        3        3          78    SHM - Sertifikat Hak Milik     Apartemen
## 2        1        1          33       HGB - Hak Guna Bangunan     Apartemen
## 3        2        2         120    SHM - Sertifikat Hak Milik         Rumah
## 4        3        3         130    SHM - Sertifikat Hak Milik         Rumah
## 5        1        1          97 Lainnya (PPJB,Girik,Adat,dll)     Apartemen
##              Kota    Price
## 0   Jakarta Utara 3.50e+09
## 1 Jakarta Selatan 2.50e+09
## 2   Jakarta Timur 2.65e+08
## 3   Jakarta Pusat 2.60e+09
## 4           Depok 1.30e+09
## 5   Jakarta Barat 3.20e+09

Berikut deskripsi variabel dari data tersebut: - K..Mandi: Jumlah kamar mandi pada suatu properti

  • K..Tidur: Jumlah kamar tidur pada suatu properti

  • L..Bangunan: Luas bangunan properti (m2)

  • Sertifikat: Jenis sertifikat atas properti yang di jual

    • Sertifikat Hak Pakai
    • Sertifikat Hak Sewa
    • Sertifikat lainnya (PPJB, Girik, Adat, dll)
    • Sertifikat PPJB
    • Sertifikat Hak Milik
  • Tipe.Properti: Jenis properti yang dijual

    • Rumah: Untuk tipe properti rumah
    • Apartemen: Untuk tipe properti apartemen
  • Kota: Lokasi kota tempat properti di jual

    • Depok
    • Jakarta Selatan
    • Jakarta Timur
    • Jakarta Utara
    • Jakarta Barat
    • Jakarta Pusat
    • Tangerang Selatan
  • Price: Nominal harga properti yang dijual

Data Cleansing

❓ Manakah data yang belum tepat tipe datanya?

  • Sertifikat
  • Tipe.Properti
  • Kota
library(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
glimpse(properti)
## Rows: 6,287
## Columns: 7
## $ K..Mandi      <int> 3, 3, 1, 2, 3, 1, 1, 1, 4, 3, 1, 2, 3, 1, 2, 4, 2, 1, 1,…
## $ K..Tidur      <int> 4, 3, 1, 2, 3, 1, 1, 2, 4, 3, 2, 2, 3, 2, 2, 3, 2, 2, 1,…
## $ L..Bangunan   <int> 294, 78, 33, 120, 130, 97, 23, 42, 160, 85, 40, 70, 110,…
## $ Sertifikat    <chr> "SHM - Sertifikat Hak Milik", "SHM - Sertifikat Hak Mili…
## $ Tipe.Properti <chr> "Rumah", "Apartemen", "Apartemen", "Rumah", "Rumah", "Ap…
## $ Kota          <chr> "Jakarta Utara", "Jakarta Selatan", "Jakarta Timur", "Ja…
## $ Price         <dbl> 3.50e+09, 2.50e+09, 2.65e+08, 2.60e+09, 1.30e+09, 3.20e+…
properti <- properti %>% 
  mutate_if(is.character, as.factor)
glimpse(properti)
## Rows: 6,287
## Columns: 7
## $ K..Mandi      <int> 3, 3, 1, 2, 3, 1, 1, 1, 4, 3, 1, 2, 3, 1, 2, 4, 2, 1, 1,…
## $ K..Tidur      <int> 4, 3, 1, 2, 3, 1, 1, 2, 4, 3, 2, 2, 3, 2, 2, 3, 2, 2, 1,…
## $ L..Bangunan   <int> 294, 78, 33, 120, 130, 97, 23, 42, 160, 85, 40, 70, 110,…
## $ Sertifikat    <fct> "SHM - Sertifikat Hak Milik", "SHM - Sertifikat Hak Mili…
## $ Tipe.Properti <fct> Rumah, Apartemen, Apartemen, Rumah, Rumah, Apartemen, Ap…
## $ Kota          <fct> Jakarta Utara, Jakarta Selatan, Jakarta Timur, Jakarta P…
## $ Price         <dbl> 3.50e+09, 2.50e+09, 2.65e+08, 2.60e+09, 1.30e+09, 3.20e+…

Exploratory Data Analysis

Cek Hubungan antara variabel target dan prediktor

library(GGally)
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
ggcorr(properti, label = TRUE)
## Warning in ggcorr(properti, label = TRUE): data in column(s) 'Sertifikat',
## 'Tipe.Properti', 'Kota' are not numeric and were ignored

💡Insight :

  • Variabel yang memiliki hubungan yang kuat/korelasi tinggi antara variabel Price adalah Luas Bangunan

Modeling - Keseluruhan Prediktor

Coba lakukan pembentukan model dengan keseluruhan variabel prediktor

model_all <- lm(Price ~ ., data = properti)
summary(model_all)
## 
## Call:
## lm(formula = Price ~ ., data = properti)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -6.741e+09 -3.851e+08 -1.127e+08  2.613e+08  3.954e+09 
## 
## Coefficients:
##                                           Estimate Std. Error t value Pr(>|t|)
## (Intercept)                             -103500776   41061065  -2.521   0.0117
## K..Mandi                                  89422402   18268163   4.895 1.01e-06
## K..Tidur                                 103745234   16914121   6.134 9.11e-10
## L..Bangunan                               13659934     228673  59.736  < 2e-16
## SertifikatHP - Hak Pakai                -185644260  124504582  -1.491   0.1360
## SertifikatHS - Hak Sewa                 -295223961  318008806  -0.928   0.3533
## SertifikatLainnya (PPJB,Girik,Adat,dll)   41371839   31531506   1.312   0.1895
## SertifikatPPJB                          -161517621  502101218  -0.322   0.7477
## SertifikatSHM - Sertifikat Hak Milik     -70251816   30627540  -2.294   0.0218
## Tipe.PropertiRumah                      -323483239   30490591 -10.609  < 2e-16
## KotaJakarta Barat                        408778315   32866753  12.437  < 2e-16
## KotaJakarta Pusat                        541558140   38218742  14.170  < 2e-16
## KotaJakarta Selatan                      809639863   37896650  21.364  < 2e-16
## KotaJakarta Timur                         -2317356   30993739  -0.075   0.9404
## KotaJakarta Utara                        362759231   37698697   9.623  < 2e-16
## KotaTangerang Selatan                    274005320   32583828   8.409  < 2e-16
##                                            
## (Intercept)                             *  
## K..Mandi                                ***
## K..Tidur                                ***
## L..Bangunan                             ***
## SertifikatHP - Hak Pakai                   
## SertifikatHS - Hak Sewa                    
## SertifikatLainnya (PPJB,Girik,Adat,dll)    
## SertifikatPPJB                             
## SertifikatSHM - Sertifikat Hak Milik    *  
## Tipe.PropertiRumah                      ***
## KotaJakarta Barat                       ***
## KotaJakarta Pusat                       ***
## KotaJakarta Selatan                     ***
## KotaJakarta Timur                          
## KotaJakarta Utara                       ***
## KotaTangerang Selatan                   ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 708400000 on 6271 degrees of freedom
## Multiple R-squared:  0.6817, Adjusted R-squared:  0.6809 
## F-statistic: 895.4 on 15 and 6271 DF,  p-value: < 2.2e-16

💡 Interpretasi Model

1. Significant Predictor - variabel signifikan (p-value < 0.05) : Keseluruhan prediktor - variabel tidak signifikan (p-value < 0.05) : -

note: - untuk prediktor kategorik, dianggap signifikan mempengaruhi target jika salah satu kategori signifikan - Apabila ada 1 variabel berjenis kategorik dan dia tidak signifikan, silahkan: 1. Cek kembali banyaknya data untuk kategori yang tidak signifikan -> kalau sedikit bisa usahakan untuk tambah data. 2. Bisa take out salah satu kategori yang membuat tidak signifikan.

2. Interpretasi Coefficient - Untuk Variabel numerik + Interpretasi L..Bangunan : Dengan asumsi variabel lain tetap, peningkatan 1 m2 luas bangunan akan meningkatkan harga properti sebesar 13,659,933.672

  • Untuk variabel kategorik
    • Interpretasi Kota Tangerang Selatan : Apabila kita memiliki properti di Tangerang selatan harga properti akan meningkat sebesar 274,005,320 dibandingkan dengan harga properti di depok, dengan asumsi variabel lainnya tetap.

3. Goodness of fit (adj R-Squared) - Sebesar 68,09% dari variansi/keberagaman variabel target dapat dijelaskan oleh model.

Model Evaluation

Lakukan model evaluasi berdasarkan hasil prediksi model menggunakan nilai RMSE Apakah nilai RMSE cukup kecil dibandingkan dengan range target variabel?

# RMSE
y_pred <- predict(model_all, newdata = properti)
library(MLmetrics)
## 
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:base':
## 
##     Recall
RMSE(y_pred = y_pred, y_true = properti$Price)
## [1] 707517644
# Range target variable
range(properti$Price)
## [1] 2.05e+08 5.97e+09

💡 Insight: Dari RMSE, model_all dengan keseluruhan prediktor masih kurang baik. Karena memiliki error yang cukup besar