Untuk penjelasan dan file projek dalam versi Bahasa Inggris silahkan klik disini
For the explanation and project files in the English version, please click here
Fluktuasi atau perubahan harga rumah dapat dipengaruhi oleh beberapa faktor termasuk lokasi, ukuran rumah, kondisi bangunan, faktor ekonomi makro dan sebagainya. Beberapa faktor tadi terkadang membingungkan dan membutuhkan waktu untuk mempertimbangkan dan memilih rumah yang sesuai. Oleh karena itu, dibutuhkan sebuah sistem untuk memprediksi harga rumah yang dapat memberikan estimasi dengan tepat/pantas dan membantu para penjual dan pembeli dalam mengambil keputusan.
Dengan membangun sistem yang bisa memprediksi harga rumah, pembeli maupun penjual akan mendapatkan harga rumah yang akurat serta ekspektasi harga yang realistis sehingga bisa meminimalkan risiko overpricing atau underpricing. Jika seorang investor atau pengembang, memiliki perkiraan harga rumah yang akurat dapat membantu dalam menentukan apakah suatu properti merupakan investasi yang menguntungkan atau tidak.
Untuk proses pengembangan model machine learning, dataset yang digunakan pada proyek ini adalah Ames Housing Dataset. Dataset ini berisi berbagai atribut rumah yang ada di daerah Ames, Iowa, United States termasuk dengan harga jualnya dan jumlah fitur yang mencangkup setiap aspek rumah hunian di daerah tersebut. Menurut hasil studi dari Alan Ihre et al dalam jurnalnya berjudul Predicting House Prices with Machine Learning Methods dengan menggunakan dataset yang sama, didapat hasil bahwa permasalahan mengenai prediksi harga rumah bisa menggunakan metode regresi seperti misalnya KNN (K-Nearest Neighbor) atau Random Forest. Dengan membangun model prediksi harga rumah berdasarkan dataset dari daerah Ames, diharapkan hasil model dari proyek ini dapat juga digunakan untuk memprediksi harga rumah di daerah lain.
Sekarang, Misalkan ada sebuah perusahaan atau pengembang properti perumahan yang ingin menentukan harga jual rumah pantas tapi perusahaan tetap ingin mendapat keuntungan sebesar mungkin dari penjualan properti tersebut. Berdasarkan kondisi yang telah diuraikan sebelumnya, perusahaan akan mengembangkan sistem yang mampu memprediksi harga rumah untuk menjawab permasalahan berikut:
- Dari serangkaian fitur yang ada, fitur apa saja yang paling berpengaruh terhadap harga jual rumah?
- Berapa harga pasar jual rumah dengan karakteristik atau fitur tertentu?
Untuk menjawab pertanyaan tersebut, perusahaan akan membuat predictive modelling dengan tujuan atau goals sebagai berikut:
- Mengetahui fitur yang paling berkorelasi dengan harga jual rumah.
- Membuat model machine learning yang dapat memprediksi harga jual rumah seakurat mungkin berdasarkan fitur - fitur yang ada.
Prediksi harga adalah tujuan yang ingin dicapai dan harga merupakan variabel kontinu. Dalam predictive analytics, untuk data yang bersifat variabel kontinu artinya merupakan permasalahan regresi. Oleh karena itu, metodologi pada proyek ini adalah: membangun model regresi dengan harga jual rumah sebagai target.
Berdasarkan tujuan atau goals yang sudah dijelaskan sebelumnya, solusi yang diberikan untuk menyelesaikan permasalahan adalah sebagai berikut:
- Membuat sebuah model untuk memprediksi harga jual rumah. Pengembangan model akan menggunakan beberapa algoritma machine learning yaitu K-Nearest Neighbor, Random Forest, dan Boosting Algorithm dengan mengatur hyperparameter tuning dan melakukan improvement pada baseline model. Dari ketiga model ini, akan dipilih satu model yang memiliki nlai kesalahan prediksi terkecil untuk membuat model yang seakurat mungkin.
- Metrik digunakan untuk mengevaluasi seberapa baik model dalam memprediksi harga. Karena kasus kali ini merupakan kasus regresi, beberapa metrik yang digunakan adalah Mean Squared Error (MSE) dan Root Mean Squared Error (RMSE). Secara umum, metrik ini mengukur seberapa jauh hasil prediksi dengan nilai sebenarnya.
Data yang digunakan pada proyek ini adalah Ames Housing Dataset yang diunduh dari platform Kaggle. Dataset ini merupakan dataset competition yang diguanakan untuk latihan di Kaggle dan didalamnya terdapat 1.460 jenis rumah hunian dengan berbagai karakteristik dan harga. Karakteristik terdiri dari 79 jenis fitur yang mencangkup fitur numerik dan non-numerik serta terdapat 1 label yaitu sale price (harga rumah) sebagai variabel target. Fitur numerik seperti misalnya MSSub Class, Lot Frontage, dan Lot Area, sedangkan fitur non-numerik misalnya Street, Alley, dan Lot Shape. 79 Jenis fitur ini adalah fitur yang akan digunakan dalam menentukan pola data, sedangkan harga jual merupakan fitur target. Karena banyaknya jumlah fitur/variabel yang tersedia dalam dataset, maka dibuatkan file bernama data_description.txt untuk melihat informasi lebih lengkap mengenai kategori dan penjelasan dari masing - masing fitur yang tersedia. Berikut adalah struktur folder Ames Housing Dataset yang sudah di download:
├── house-prices <- nama folder utama.
├── data_description.txt <- berisi kategori dan penjelasan lengkap dari masing - masing fitur.
├── sample_submission.csv <- berisi contoh submission kompetisi.
├── test.csv <- test data untuk melakukan pengujian model.
└── train.csv <- train data untuk melatih model.
- SalePrice : Harga jual rumah dalam dollar. Ini adalah variabel target yang ingin diprediksi.
- MSSubClass : Tipe atau kelas bangunan, terdiri dari beberapa jenis kelas rumah yang direpresentasikan dalam bentuk angka.
- MSZoning : Klasifikasi zonasi umum dari penjualan properti yang direpresentasikan dalam bentuk huruf seperti A (Agriculture/Pertanian), C (Commercial/Komersial), FV (Pemukiman Desa Terapung), I (Industri), RH (Kepadatan tinggi perumahan), RL (Kepadatan rendah perumahan), RP (Kepadatan rendah perumahan taman), dan RM (Kepadatan menengah perumahan).
- LotFrontage : Panjang linear dari jalan yang terhubung ke properti.
- LotArea : Luas lot (lahan/tanah) dalam kaki persegi.
- Street : Jenis akses jalan ke properti.
- Alley : Jenis akses gang ke properti.
- LotShape : Bentuk umum dari properti.
- LandContour : Kontur tanah dari properti.
- Utilities : Jenis utilitas yang tersedia.
- LotConfig : Konfigurasi lot.
- LandSlope : Kemiringan properti.
- Neighborhood : Lokasi fisik dalam batas kota Ames.
- Condition1 : Proksimitas (kedekatan) dengan properti.
- Condition2 : Proksimitas terhadap berbagai kondisi di dekat properti (jika lebih dari satu).
- BldgType : Tipe hunian.
- HouseStyle : Gaya hunian.
- OverallQual : Penilaian bahan/material dan penyelesaian keseluruhan rumah.
- OverallCond : Penilaian kondisi keseluruhan rumah.
- YearBuilt : Tanggal konstruksi asli.
- YearRemodAdd : Tanggal remodel (sama dengan tanggal konstruksi jika tidak ada renovasi atau penambahan).
- RoofStyle : Jenis atap.
- RoofMatl : Bahan atap.
- Exterior1st : Penutup luar rumah.
- Exterior2nd : Penutup luar rumah (jika lebih dari satu bahan).
- MasVnrType : Jenis veneer batu bata.
- MasVnrArea : Luas veneer batu bata dalam kaki persegi.
- ExterQual : Kualitas material pada eksterior.
- ExterCond : Kondisi saat ini dari material pada eksterior.
- Foundation : Jenis pondasi.
- BsmtQual : Ketinggian basement.
- BsmtCond : Kondisi umum basement.
- BsmtExposure : Dinding tingkat berjalan atau taman.
- BsmtFinType1 : Penilaian area basement yang sudah selesai.
- BsmtFinSF1 : Tipe 1 yang sudah selesai dalam kaki persegi.
- BsmtFinType2 : Penilaian area basement yang sudah selesai (jika ada beberapa tipe).
- BsmtFinSF2 : tipe 2 yang sudah selesai dalam kaki persegi.
- BsmtUnfSF : area yang belum selesai dari area basement dalam kaki persegi.
- TotalBsmtSF : Total area basement dalam kaki persegi.
- Heating : jenis pemanas.
- HeatingQC : Kualitas dan kondisi pemanas.
- CentralAir : terdapat pemanas udara pusat.
- Electrical : Sistem listrik.
- 1stFlrSF : Luas lantai pertama dalam kaki persegi.
- 2ndFlrSF : Luas lantai kedua dalam kaki persegi.
- LowQualFinSF : luas lantai yang sudah selesai berkualitas rendah dalam kaki persegi.
- GrLivArea : Area tinggal di atas tingkat tanah dalam kaki persegi.
- BsmtFullBath : Kamar mandi penuh di basement.
- BsmtHalfBath : Kamar mandi setengah di basement.
- FullBath : Kamar mandi penuh di atas tingkat tanah.
- HalfBath : Kamar mandi setengah di atas tingkat tanah (lantai atas).
- Bedroom : Kamar tidur di atas tingkat tanah (TIDAK termasuk kamar tidur di basement).
- Kitchen : Dapur di atas tingkat tanah.
- KitchenQual : Kualitas dapur.
- TotRmsAbvGrd : Total kamar di atas tingkat tanah (tidak termasuk kamar mandi).
- Functional : Fungsionalitas rumah (Anggap tipikal kecuali ada pengurangan).
- Fireplaces : Jumlah perapian.
- FireplaceQu : Kualitas perapian.
- GarageType : Lokasi garasi.
- GarageYrBlt : Tahun pembuatan garasi.
- GarageFinish : Penyelesaian interior garasi.
- GarageCars : Ukuran garasi dalam kapasitas mobil.
- GarageArea : Ukuran garasi dalam kaki persegi.
- GarageQual : Kualitas garasi.
- GarageCond : Kondisi garasi.
- PavedDrive : Jalan beraspal.
- WoodDeckSF : Luas area dek kayu dalam kaki persegi.
- OpenPorchSF : Luas area teras terbuka dalam kaki persegi.
- EnclosedPorch : Luas area teras tertutup dalam kaki persegi.
- 3SsnPorch : Luas area teras tiga musim dalam kaki persegi.
- ScreenPorch : Luas area teras berlayar dalam kaki persegi.
- PoolArea : Luas area kolam renang dalam kaki persegi.
- PoolQC : Kualitas kolam renang.
- Fence : Kualitas pagar.
- MiscFeature : Fitur tambahan lainnya yang tidak termasuk dalam kategori lain.
- MiscVal : Nilai fitur tambahan dalam dolar.
- MoSold : Bulan Dijual (MM).
- YrSold : Tahun Dijual (YYYY).
- SaleType : Jenis penjualan.
- SaleCondition : Kondisi penjualan.
- Data Loading
- Exploratory Data Analysis - Deskripsi Variabel
- Exploratory Data Analysis - Identifikasi Missing Value, Outliers dan Menghapus fitur yang tidak diperlukan untuk pelatihan model
- Exploratory Data Analysis - Univariate Analysis
- Exploratory Data Analysis - Multivariate Analysis
Pada bagian ini, dataset akan dibaca secara langsung dari folder dataset yang sudah di download melalui Ames Housing Dataset. Dataset yang digunakan adalah train.csv yang berisi dataset untuk proses pelatihan model.
Tabel 1. Train data dari Ames Housing Dataset
Id | MSSubClass | MSZoning | LotFrontage | LotArea | Street | Alley | LotShape | LandContour | Utilities | LotConfig | LandSlope | Neighborhood | Condition1 | Condition2 | BldgType | HouseStyle | OverallQual | OverallCond | YearBuilt | YearRemodAdd | RoofStyle | RoofMatl | Exterior1st | Exterior2nd | MasVnrType | MasVnrArea | ExterQual | ExterCond | Foundation | BsmtQual | BsmtCond | BsmtExposure | BsmtFinType1 | BsmtFinSF1 | BsmtFinType2 | BsmtFinSF2 | BsmtUnfSF | TotalBsmtSF | Heating | HeatingQC | CentralAir | Electrical | 1stFlrSF | 2ndFlrSF | LowQualFinSF | GrLivArea | BsmtFullBath | BsmtHalfBath | FullBath | HalfBath | BedroomAbvGr | KitchenAbvGr | KitchenQual | TotRmsAbvGrd | Functional | Fireplaces | FireplaceQu | GarageType | GarageYrBlt | GarageFinish | GarageCars | GarageArea | GarageQual | GarageCond | PavedDrive | WoodDeckSF | OpenPorchSF | EnclosedPorch | 3SsnPorch | ScreenPorch | PoolArea | PoolQC | Fence | MiscFeature | MiscVal | MoSold | YrSold | SaleType | SaleCondition | SalePrice | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 60 | RL | 65 | 8450 | Pave | nan | Reg | Lvl | AllPub | Inside | Gtl | CollgCr | Norm | Norm | 1Fam | 2Story | 7 | 5 | 2003 | 2003 | Gable | CompShg | VinylSd | VinylSd | BrkFace | 196 | Gd | TA | PConc | Gd | TA | No | GLQ | 706 | Unf | 0 | 150 | 856 | GasA | Ex | Y | SBrkr | 856 | 854 | 0 | 1710 | 1 | 0 | 2 | 1 | 3 | 1 | Gd | 8 | Typ | 0 | nan | Attchd | 2003 | RFn | 2 | 548 | TA | TA | Y | 0 | 61 | 0 | 0 | 0 | 0 | nan | nan | nan | 0 | 2 | 2008 | WD | Normal | 208500 |
1 | 2 | 20 | RL | 80 | 9600 | Pave | nan | Reg | Lvl | AllPub | FR2 | Gtl | Veenker | Feedr | Norm | 1Fam | 1Story | 6 | 8 | 1976 | 1976 | Gable | CompShg | MetalSd | MetalSd | None | 0 | TA | TA | CBlock | Gd | TA | Gd | ALQ | 978 | Unf | 0 | 284 | 1262 | GasA | Ex | Y | SBrkr | 1262 | 0 | 0 | 1262 | 0 | 1 | 2 | 0 | 3 | 1 | TA | 6 | Typ | 1 | TA | Attchd | 1976 | RFn | 2 | 460 | TA | TA | Y | 298 | 0 | 0 | 0 | 0 | 0 | nan | nan | nan | 0 | 5 | 2007 | WD | Normal | 181500 |
2 | 3 | 60 | RL | 68 | 11250 | Pave | nan | IR1 | Lvl | AllPub | Inside | Gtl | CollgCr | Norm | Norm | 1Fam | 2Story | 7 | 5 | 2001 | 2002 | Gable | CompShg | VinylSd | VinylSd | BrkFace | 162 | Gd | TA | PConc | Gd | TA | Mn | GLQ | 486 | Unf | 0 | 434 | 920 | GasA | Ex | Y | SBrkr | 920 | 866 | 0 | 1786 | 1 | 0 | 2 | 1 | 3 | 1 | Gd | 6 | Typ | 1 | TA | Attchd | 2001 | RFn | 2 | 608 | TA | TA | Y | 0 | 42 | 0 | 0 | 0 | 0 | nan | nan | nan | 0 | 9 | 2008 | WD | Normal | 223500 |
3 | 4 | 70 | RL | 60 | 9550 | Pave | nan | IR1 | Lvl | AllPub | Corner | Gtl | Crawfor | Norm | Norm | 1Fam | 2Story | 7 | 5 | 1915 | 1970 | Gable | CompShg | Wd Sdng | Wd Shng | None | 0 | TA | TA | BrkTil | TA | Gd | No | ALQ | 216 | Unf | 0 | 540 | 756 | GasA | Gd | Y | SBrkr | 961 | 756 | 0 | 1717 | 1 | 0 | 1 | 0 | 3 | 1 | Gd | 7 | Typ | 1 | Gd | Detchd | 1998 | Unf | 3 | 642 | TA | TA | Y | 0 | 35 | 272 | 0 | 0 | 0 | nan | nan | nan | 0 | 2 | 2006 | WD | Abnorml | 140000 |
4 | 5 | 60 | RL | 84 | 14260 | Pave | nan | IR1 | Lvl | AllPub | FR2 | Gtl | NoRidge | Norm | Norm | 1Fam | 2Story | 8 | 5 | 2000 | 2000 | Gable | CompShg | VinylSd | VinylSd | BrkFace | 350 | Gd | TA | PConc | Gd | TA | Av | GLQ | 655 | Unf | 0 | 490 | 1145 | GasA | Ex | Y | SBrkr | 1145 | 1053 | 0 | 2198 | 1 | 0 | 2 | 1 | 4 | 1 | Gd | 9 | Typ | 1 | TA | Attchd | 2000 | RFn | 3 | 836 | TA | TA | Y | 192 | 84 | 0 | 0 | 0 | 0 | nan | nan | nan | 0 | 12 | 2008 | WD | Normal | 250000 |
Berdasarkan Tabel 1 informasi yang didapat dataset adalah sebagai berikut:
- Terdapat 1.460 baris (records atau jumlah pengamatan) dalam dataset.
- Terdapat 81 kolom yaitu: Id, MSSubClass, MSZoning, LotFrontage, dan sebagainya.
Exploratory data analysis atau sering disingkat EDA merupakan proses investigasi awal pada data untuk menganalisis karakteristik, menemukan pola, anomali, dan memeriksa asumsi pada data. Proses EDA akan melakukan deskripsi variabel untuk mengetahui informasi lebih lengkap dan mengecek informasi pada dataset. Berdasarkan informasi dari Kaggle Terdapat sekitar 80 variabel (termasuk harga rumah) yang dijelaskan lebih lengkap di file data_description.txt. Berikut adalah contoh penjelasan dari salah satu variabel yaitu MSZoning yang berasal dari file data_description.txt:
- MSZoning : Mengidentifikasi klasifikasi zona umum dari penjualan. Terdiri dari:
- A : Pertanian
- C : Komersial
- FV : Perumahan Desa Mengambang
- I : Industri
- RH : Kepadatan Tinggi Perumahan
- RL : Kepadatan Rendah Perumahan
- RP : Taman Kepadatan Rendah Perumahan
- RM : Kepadatan Sedang Perumahan
Dengan menggunakan fungsi info() di dataset terlihat bahwa:
- Terdapat 43 kolom dengan tipe object. Kolom ini merupakan categorical features (fitur non-numerik)
- Terdapat 3 kolom dengan tipe data float64. Kolom ini merupakan fitur numerik yang merupakan hasil pengukuran secara fisik.
- Terdapat 35 kolom dengan tipe data int64. Kolom ini merupakan fitur numerik yang salah satunya adalah target fitur yaitu harga jual rumah.
Terdapat juga beberapa fitur/kolom yang memiliki nilai null/NaN. Berdasarkan hasil analisis, terdapat 19 fitur yang mempunyai nilai NaN/Null yaitu 'LotFrontage', 'Alley', 'MasVnrType', 'MasVnrArea', 'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2', 'Electrical', 'FireplaceQu', 'GarageType', 'GarageYrBlt', 'GarageFinish', 'GarageQual', 'GarageCond', 'PoolQC', 'Fence', dan 'MiscFeature'. Karena nilai ini nantinya akan mengganggu kinerja dari model maka akan dihapus fitur yang memiliki nilai NaN/Null tersebut. Setelah di drop fitur yang memiliki nilai NaN/Null, dataset akan terlihat pada Tabel 2.
Tabel 2. Dataset setelah dilakukan proses drop fitur yang memiliki nilai NaN/Null
Id | MSSubClass | MSZoning | LotArea | Street | LotShape | LandContour | Utilities | LotConfig | LandSlope | Neighborhood | Condition1 | Condition2 | BldgType | HouseStyle | OverallQual | OverallCond | YearBuilt | YearRemodAdd | RoofStyle | RoofMatl | Exterior1st | Exterior2nd | ExterQual | ExterCond | Foundation | BsmtFinSF1 | BsmtFinSF2 | BsmtUnfSF | TotalBsmtSF | Heating | HeatingQC | CentralAir | 1stFlrSF | 2ndFlrSF | LowQualFinSF | GrLivArea | BsmtFullBath | BsmtHalfBath | FullBath | HalfBath | BedroomAbvGr | KitchenAbvGr | KitchenQual | TotRmsAbvGrd | Functional | Fireplaces | GarageCars | GarageArea | PavedDrive | WoodDeckSF | OpenPorchSF | EnclosedPorch | 3SsnPorch | ScreenPorch | PoolArea | MiscVal | MoSold | YrSold | SaleType | SaleCondition | SalePrice | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 60 | RL | 8450 | Pave | Reg | Lvl | AllPub | Inside | Gtl | CollgCr | Norm | Norm | 1Fam | 2Story | 7 | 5 | 2003 | 2003 | Gable | CompShg | VinylSd | VinylSd | Gd | TA | PConc | 706 | 0 | 150 | 856 | GasA | Ex | Y | 856 | 854 | 0 | 1710 | 1 | 0 | 2 | 1 | 3 | 1 | Gd | 8 | Typ | 0 | 2 | 548 | Y | 0 | 61 | 0 | 0 | 0 | 0 | 0 | 2 | 2008 | WD | Normal | 208500 |
1 | 2 | 20 | RL | 9600 | Pave | Reg | Lvl | AllPub | FR2 | Gtl | Veenker | Feedr | Norm | 1Fam | 1Story | 6 | 8 | 1976 | 1976 | Gable | CompShg | MetalSd | MetalSd | TA | TA | CBlock | 978 | 0 | 284 | 1262 | GasA | Ex | Y | 1262 | 0 | 0 | 1262 | 0 | 1 | 2 | 0 | 3 | 1 | TA | 6 | Typ | 1 | 2 | 460 | Y | 298 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 2007 | WD | Normal | 181500 |
2 | 3 | 60 | RL | 11250 | Pave | IR1 | Lvl | AllPub | Inside | Gtl | CollgCr | Norm | Norm | 1Fam | 2Story | 7 | 5 | 2001 | 2002 | Gable | CompShg | VinylSd | VinylSd | Gd | TA | PConc | 486 | 0 | 434 | 920 | GasA | Ex | Y | 920 | 866 | 0 | 1786 | 1 | 0 | 2 | 1 | 3 | 1 | Gd | 6 | Typ | 1 | 2 | 608 | Y | 0 | 42 | 0 | 0 | 0 | 0 | 0 | 9 | 2008 | WD | Normal | 223500 |
3 | 4 | 70 | RL | 9550 | Pave | IR1 | Lvl | AllPub | Corner | Gtl | Crawfor | Norm | Norm | 1Fam | 2Story | 7 | 5 | 1915 | 1970 | Gable | CompShg | Wd Sdng | Wd Shng | TA | TA | BrkTil | 216 | 0 | 540 | 756 | GasA | Gd | Y | 961 | 756 | 0 | 1717 | 1 | 0 | 1 | 0 | 3 | 1 | Gd | 7 | Typ | 1 | 3 | 642 | Y | 0 | 35 | 272 | 0 | 0 | 0 | 0 | 2 | 2006 | WD | Abnorml | 140000 |
4 | 5 | 60 | RL | 14260 | Pave | IR1 | Lvl | AllPub | FR2 | Gtl | NoRidge | Norm | Norm | 1Fam | 2Story | 8 | 5 | 2000 | 2000 | Gable | CompShg | VinylSd | VinylSd | Gd | TA | PConc | 655 | 0 | 490 | 1145 | GasA | Ex | Y | 1145 | 1053 | 0 | 2198 | 1 | 0 | 2 | 1 | 4 | 1 | Gd | 9 | Typ | 1 | 3 | 836 | Y | 192 | 84 | 0 | 0 | 0 | 0 | 0 | 12 | 2008 | WD | Normal | 250000 |
5 | 6 | 50 | RL | 14115 | Pave | IR1 | Lvl | AllPub | Inside | Gtl | Mitchel | Norm | Norm | 1Fam | 1.5Fin | 5 | 5 | 1993 | 1995 | Gable | CompShg | VinylSd | VinylSd | TA | TA | Wood | 732 | 0 | 64 | 796 | GasA | Ex | Y | 796 | 566 | 0 | 1362 | 1 | 0 | 1 | 1 | 1 | 1 | TA | 5 | Typ | 0 | 2 | 480 | Y | 40 | 30 | 0 | 320 | 0 | 0 | 700 | 10 | 2009 | WD | Normal | 143000 |
6 | 7 | 20 | RL | 10084 | Pave | Reg | Lvl | AllPub | Inside | Gtl | Somerst | Norm | Norm | 1Fam | 1Story | 8 | 5 | 2004 | 2005 | Gable | CompShg | VinylSd | VinylSd | Gd | TA | PConc | 1369 | 0 | 317 | 1686 | GasA | Ex | Y | 1694 | 0 | 0 | 1694 | 1 | 0 | 2 | 0 | 3 | 1 | Gd | 7 | Typ | 1 | 2 | 636 | Y | 255 | 57 | 0 | 0 | 0 | 0 | 0 | 8 | 2007 | WD | Normal | 307000 |
7 | 8 | 60 | RL | 10382 | Pave | IR1 | Lvl | AllPub | Corner | Gtl | NWAmes | PosN | Norm | 1Fam | 2Story | 7 | 6 | 1973 | 1973 | Gable | CompShg | HdBoard | HdBoard | TA | TA | CBlock | 859 | 32 | 216 | 1107 | GasA | Ex | Y | 1107 | 983 | 0 | 2090 | 1 | 0 | 2 | 1 | 3 | 1 | TA | 7 | Typ | 2 | 2 | 484 | Y | 235 | 204 | 228 | 0 | 0 | 0 | 350 | 11 | 2009 | WD | Normal | 200000 |
8 | 9 | 50 | RM | 6120 | Pave | Reg | Lvl | AllPub | Inside | Gtl | OldTown | Artery | Norm | 1Fam | 1.5Fin | 7 | 5 | 1931 | 1950 | Gable | CompShg | BrkFace | Wd Shng | TA | TA | BrkTil | 0 | 0 | 952 | 952 | GasA | Gd | Y | 1022 | 752 | 0 | 1774 | 0 | 0 | 2 | 0 | 2 | 2 | TA | 8 | Min1 | 2 | 2 | 468 | Y | 90 | 0 | 205 | 0 | 0 | 0 | 0 | 4 | 2008 | WD | Abnorml | 129900 |
9 | 10 | 190 | RL | 7420 | Pave | Reg | Lvl | AllPub | Corner | Gtl | BrkSide | Artery | Artery | 2fmCon | 1.5Unf | 5 | 6 | 1939 | 1950 | Gable | CompShg | MetalSd | MetalSd | TA | TA | BrkTil | 851 | 0 | 140 | 991 | GasA | Ex | Y | 1077 | 0 | 0 | 1077 | 1 | 0 | 1 | 0 | 2 | 2 | TA | 5 | Typ | 2 | 1 | 205 | Y | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 2008 | WD | Normal | 118000 |
10 | 11 | 20 | RL | 11200 | Pave | Reg | Lvl | AllPub | Inside | Gtl | Sawyer | Norm | Norm | 1Fam | 1Story | 5 | 5 | 1965 | 1965 | Hip | CompShg | HdBoard | HdBoard | TA | TA | CBlock | 906 | 0 | 134 | 1040 | GasA | Ex | Y | 1040 | 0 | 0 | 1040 | 1 | 0 | 1 | 0 | 3 | 1 | TA | 5 | Typ | 0 | 1 | 384 | Y | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 2008 | WD | Normal | 129500 |
11 | 12 | 60 | RL | 11924 | Pave | IR1 | Lvl | AllPub | Inside | Gtl | NridgHt | Norm | Norm | 1Fam | 2Story | 9 | 5 | 2005 | 2006 | Hip | CompShg | WdShing | Wd Shng | Ex | TA | PConc | 998 | 0 | 177 | 1175 | GasA | Ex | Y | 1182 | 1142 | 0 | 2324 | 1 | 0 | 3 | 0 | 4 | 1 | Ex | 11 | Typ | 2 | 3 | 736 | Y | 147 | 21 | 0 | 0 | 0 | 0 | 0 | 7 | 2006 | New | Partial | 345000 |
12 | 13 | 20 | RL | 12968 | Pave | IR2 | Lvl | AllPub | Inside | Gtl | Sawyer | Norm | Norm | 1Fam | 1Story | 5 | 6 | 1962 | 1962 | Hip | CompShg | HdBoard | Plywood | TA | TA | CBlock | 737 | 0 | 175 | 912 | GasA | TA | Y | 912 | 0 | 0 | 912 | 1 | 0 | 1 | 0 | 2 | 1 | TA | 4 | Typ | 0 | 1 | 352 | Y | 140 | 0 | 0 | 0 | 176 | 0 | 0 | 9 | 2008 | WD | Normal | 144000 |
13 | 14 | 20 | RL | 10652 | Pave | IR1 | Lvl | AllPub | Inside | Gtl | CollgCr | Norm | Norm | 1Fam | 1Story | 7 | 5 | 2006 | 2007 | Gable | CompShg | VinylSd | VinylSd | Gd | TA | PConc | 0 | 0 | 1494 | 1494 | GasA | Ex | Y | 1494 | 0 | 0 | 1494 | 0 | 0 | 2 | 0 | 3 | 1 | Gd | 7 | Typ | 1 | 3 | 840 | Y | 160 | 33 | 0 | 0 | 0 | 0 | 0 | 8 | 2007 | New | Partial | 279500 |
14 | 15 | 20 | RL | 10920 | Pave | IR1 | Lvl | AllPub | Corner | Gtl | NAmes | Norm | Norm | 1Fam | 1Story | 6 | 5 | 1960 | 1960 | Hip | CompShg | MetalSd | MetalSd | TA | TA | CBlock | 733 | 0 | 520 | 1253 | GasA | TA | Y | 1253 | 0 | 0 | 1253 | 1 | 0 | 1 | 1 | 2 | 1 | TA | 5 | Typ | 1 | 1 | 352 | Y | 0 | 213 | 176 | 0 | 0 | 0 | 0 | 5 | 2008 | WD | Normal | 157000 |
15 | 16 | 45 | RM | 6120 | Pave | Reg | Lvl | AllPub | Corner | Gtl | BrkSide | Norm | Norm | 1Fam | 1.5Unf | 7 | 8 | 1929 | 2001 | Gable | CompShg | Wd Sdng | Wd Sdng | TA | TA | BrkTil | 0 | 0 | 832 | 832 | GasA | Ex | Y | 854 | 0 | 0 | 854 | 0 | 0 | 1 | 0 | 2 | 1 | TA | 5 | Typ | 0 | 2 | 576 | Y | 48 | 112 | 0 | 0 | 0 | 0 | 0 | 7 | 2007 | WD | Normal | 132000 |
16 | 17 | 20 | RL | 11241 | Pave | IR1 | Lvl | AllPub | CulDSac | Gtl | NAmes | Norm | Norm | 1Fam | 1Story | 6 | 7 | 1970 | 1970 | Gable | CompShg | Wd Sdng | Wd Sdng | TA | TA | CBlock | 578 | 0 | 426 | 1004 | GasA | Ex | Y | 1004 | 0 | 0 | 1004 | 1 | 0 | 1 | 0 | 2 | 1 | TA | 5 | Typ | 1 | 2 | 480 | Y | 0 | 0 | 0 | 0 | 0 | 0 | 700 | 3 | 2010 | WD | Normal | 149000 |
17 | 18 | 90 | RL | 10791 | Pave | Reg | Lvl | AllPub | Inside | Gtl | Sawyer | Norm | Norm | Duplex | 1Story | 4 | 5 | 1967 | 1967 | Gable | CompShg | MetalSd | MetalSd | TA | TA | Slab | 0 | 0 | 0 | 0 | GasA | TA | Y | 1296 | 0 | 0 | 1296 | 0 | 0 | 2 | 0 | 2 | 2 | TA | 6 | Typ | 0 | 2 | 516 | Y | 0 | 0 | 0 | 0 | 0 | 0 | 500 | 10 | 2006 | WD | Normal | 90000 |
18 | 19 | 20 | RL | 13695 | Pave | Reg | Lvl | AllPub | Inside | Gtl | SawyerW | RRAe | Norm | 1Fam | 1Story | 5 | 5 | 2004 | 2004 | Gable | CompShg | VinylSd | VinylSd | TA | TA | PConc | 646 | 0 | 468 | 1114 | GasA | Ex | Y | 1114 | 0 | 0 | 1114 | 1 | 0 | 1 | 1 | 3 | 1 | Gd | 6 | Typ | 0 | 2 | 576 | Y | 0 | 102 | 0 | 0 | 0 | 0 | 0 | 6 | 2008 | WD | Normal | 159000 |
19 | 20 | 20 | RL | 7560 | Pave | Reg | Lvl | AllPub | Inside | Gtl | NAmes | Norm | Norm | 1Fam | 1Story | 5 | 6 | 1958 | 1965 | Hip | CompShg | BrkFace | Plywood | TA | TA | CBlock | 504 | 0 | 525 | 1029 | GasA | TA | Y | 1339 | 0 | 0 | 1339 | 0 | 0 | 1 | 0 | 3 | 1 | TA | 6 | Min1 | 0 | 1 | 294 | Y | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 2009 | COD | Abnorml | 139000 |
20 | 21 | 60 | RL | 14215 | Pave | IR1 | Lvl | AllPub | Corner | Gtl | NridgHt | Norm | Norm | 1Fam | 2Story | 8 | 5 | 2005 | 2006 | Gable | CompShg | VinylSd | VinylSd | Gd | TA | PConc | 0 | 0 | 1158 | 1158 | GasA | Ex | Y | 1158 | 1218 | 0 | 2376 | 0 | 0 | 3 | 1 | 4 | 1 | Gd | 9 | Typ | 1 | 3 | 853 | Y | 240 | 154 | 0 | 0 | 0 | 0 | 0 | 11 | 2006 | New | Partial | 325300 |
21 | 22 | 45 | RM | 7449 | Pave | Reg | Bnk | AllPub | Inside | Gtl | IDOTRR | Norm | Norm | 1Fam | 1.5Unf | 7 | 7 | 1930 | 1950 | Gable | CompShg | Wd Sdng | Wd Sdng | TA | TA | PConc | 0 | 0 | 637 | 637 | GasA | Ex | Y | 1108 | 0 | 0 | 1108 | 0 | 0 | 1 | 0 | 3 | 1 | Gd | 6 | Typ | 1 | 1 | 280 | N | 0 | 0 | 205 | 0 | 0 | 0 | 0 | 6 | 2007 | WD | Normal | 139400 |
22 | 23 | 20 | RL | 9742 | Pave | Reg | Lvl | AllPub | Inside | Gtl | CollgCr | Norm | Norm | 1Fam | 1Story | 8 | 5 | 2002 | 2002 | Hip | CompShg | VinylSd | VinylSd | Gd | TA | PConc | 0 | 0 | 1777 | 1777 | GasA | Ex | Y | 1795 | 0 | 0 | 1795 | 0 | 0 | 2 | 0 | 3 | 1 | Gd | 7 | Typ | 1 | 2 | 534 | Y | 171 | 159 | 0 | 0 | 0 | 0 | 0 | 9 | 2008 | WD | Normal | 230000 |
... | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1456 | 1457 | 20 | RL | 13175 | Pave | Reg | Lvl | AllPub | Inside | Gtl | NWAmes | Norm | Norm | 1Fam | 1Story | 6 | 6 | 1978 | 1988 | Gable | CompShg | Plywood | Plywood | TA | TA | CBlock | 790 | 163 | 589 | 1542 | GasA | TA | Y | 2073 | 0 | 0 | 2073 | 1 | 0 | 2 | 0 | 3 | 1 | TA | 7 | Min1 | 2 | 2 | 500 | Y | 349 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 2010 | WD | Normal | 210000 |
1457 | 1458 | 70 | RL | 9042 | Pave | Reg | Lvl | AllPub | Inside | Gtl | Crawfor | Norm | Norm | 1Fam | 2Story | 7 | 9 | 1941 | 2006 | Gable | CompShg | CemntBd | CmentBd | Ex | Gd | Stone | 275 | 0 | 877 | 1152 | GasA | Ex | Y | 1188 | 1152 | 0 | 2340 | 0 | 0 | 2 | 0 | 4 | 1 | Gd | 9 | Typ | 2 | 1 | 252 | Y | 0 | 60 | 0 | 0 | 0 | 0 | 2500 | 5 | 2010 | WD | Normal | 266500 |
1458 | 1459 | 20 | RL | 9717 | Pave | Reg | Lvl | AllPub | Inside | Gtl | NAmes | Norm | Norm | 1Fam | 1Story | 5 | 6 | 1950 | 1996 | Hip | CompShg | MetalSd | MetalSd | TA | TA | CBlock | 49 | 1029 | 0 | 1078 | GasA | Gd | Y | 1078 | 0 | 0 | 1078 | 1 | 0 | 1 | 0 | 2 | 1 | Gd | 5 | Typ | 0 | 1 | 240 | Y | 366 | 0 | 112 | 0 | 0 | 0 | 0 | 4 | 2010 | WD | Normal | 142125 |
1459 | 1460 | 20 | RL | 9937 | Pave | Reg | Lvl | AllPub | Inside | Gtl | Edwards | Norm | Norm | 1Fam | 1Story | 5 | 6 | 1965 | 1965 | Gable | CompShg | HdBoard | HdBoard | Gd | TA | CBlock | 830 | 290 | 136 | 1256 | GasA | Gd | Y | 1256 | 0 | 0 | 1256 | 1 | 0 | 1 | 1 | 3 | 1 | TA | 6 | Typ | 0 | 1 | 276 | Y | 736 | 68 | 0 | 0 | 0 | 0 | 0 | 6 | 2008 | WD | Normal | 147500 |
Berdasarkan Tabel 2 terlihat bahwa jumlah fitur yang tersisa adalah sebesar 62 fitur setelah menghilangkan fitur yang memiliki nilai NaN/Null. Selanjutnya, karena semua kolom telah memiliki tipe data yang sesuai dilakukan proses pengecekan deksripsi statistik data menggunakan fitur describe().
Fungsi describe() memberikan informasi statistik pada masing - masing kolom, antara lain:
- Count adalah jumlah sampel pada data.
- Mean adalah nilai rata-rata.
- Std adalah standar deviasi.
- Min yaitu nilai minimum setiap kolom.
- 25% adalah kuartil pertama. Kuartil adalah nilai yang menandai batas interval dalam empat bagian sebaran yang sama.
- 50% adalah kuartil kedua, atau biasa juga disebut median (nilai tengah).
- 75% adalah kuartil ketiga.
- Max adalah nilai maksimum.
Dari hasil fungsi describe(), nilai minimum untuk beberapa kolom adalah 0. Karena terdapat banyak fitur dalam dataset, sehingga dibeberapa kasus nilai 0 ini menyulitkan nantinya untuk melihat keseluruhan fitur, maka dilakukan investigasi untuk mencari informasi semua fitur dengan nilai minimum sama dengan 0.
Berdasarkan analisis dengan bantuan fungsi describe(), didapat bahwa terdapat 22 fitur yang memiliki nilai minimum 0. Berdasarkan data description di file data_description.txt diketahui bahwa nilai 0 di dataset juga memiliki makna tertentu yang artinya bukan merupakan nilai missing value tapi berupa informasi yang ada di beberapa variabel. Misalnya untuk fitur PoolArea yang paling banyak terdapat nilai 0 sebesar 1.453, nilai 0 disini memiliki arti bahwa di beberapa jenis properti rumah tersebut tidak terdapat kolam renang. Nilai 0 ini juga tidak bisa dianggap sebagai tipe data boolean karena angka 0 disini memiliki arti jumlah (kuantitas) bukan bermakna True/False. Jadi bisa disimpulkan bahwa tidak terdapat missing value pada dataset tersebut.
Outliers adalah sampel yang nilainya sangat jauh dari cakupan umum data utama. Ada beberapa teknik outliers yang umum digunakan. Pada proyek ini akan menggunakan metode IQR (Inter Quartile Range). IQR menggunakan konsep kuartil untuk menghilangkan outliers, Kuartil dari suatu populasi adalah tiga nilai yang membagi distribusi data menjadi empat sebaran. Seperempat dari data berada di bawah kuartil pertama (Q1), setengah dari data berada di bawah kuartil kedua (Q2), dan tiga perempat dari data berada di kuartil ketiga (Q3). Dengan demikian interquartile range atau IQR = Q3 - Q1.
Hal pertama yang perlu dilakukan adalah membuat batas bawah dan batas atas. Untuk membuat batas bawah, kurangi Q1 dengan 1,5 * IQR. Kemudian, untuk membuat batas atas, tambahkan 1.5 * IQR dengan Q3.
Selanjutnya, visualisasikan terlebih dahulu dataset dengan boxplot untuk mendeteksi outliers pada beberapa fitur numerik. Misalnya pada fitur 'MSSubClass' seperti terlihat pada Gambar 1.
Gambar 1. Boxplot untuk melihat outliers pada fitur MSSubClass
Selanjutnya gunakan metode IQR untuk mengatasi outliers yang terdapat di beberapa fitur tersebut. Metode IQR digunakan untuk mengidentifikasi outlier yang berada di luar Q1 dan Q3. Nilai apa pun yang berada di luar batas ini dianggap sebagai outlier.
Setelah dilakukan proses penghapusan outliers maka dataset akan memiliki dimensi sebesar (601, 62). Ini berarti dataset sudah bersih dan memiliki 601 sampel dengan tersisa 62 fitur. Untuk lebih jelasnya, dilakukan pengecekan kembali fitur 'MSSubClass' dengan menggunakan boxplot dan seperti terlihat pada Gambar 2 bahwa fitur tersebut sudah bersih dari outliers.
Gambar 2. Boxplot pada fitur MSSubClass setelah outliers dihilangkan
Sebelum dilakukan proses analisis data lebih lanjut. Perlu dilakuan pengecekan fitur yang tidak terlalu berpengaruh pada proses pemodelan nantinya. Penghapusan fitur yang tidak diperlukan akan membantu mempercepat proses pelatihan model dan membantu memahami data dengan lebih mudah.
- Pertama, dihapus kolom Id karena tidak terlalu berpengaruh pada proses training nantinya.
- Mengecek jumlah fitur yang mempunyai unique value hanya 1 saja. Jika suatu fitur hanya memiliki satu nilai unik, maka fitur tersebut tidak terlalu berpengaruh atau memberikan banyak informasi yang berguna dalam analisis statistik atau pemodelan. Fitur ini sering disebut juga sebagai fitur konstan.
Setelah dibersihkan dari fitur yang tidak perlu, maka dataset hanya tersisa 49 fitur/variabel dan akan terlihat seperti Tabel 3.
Tabel 3. Dataset yang sudah bersih dari fitur yang tidak diperlukan
MSSubClass | MSZoning | LotArea | Street | LotShape | LandContour | LotConfig | LandSlope | Neighborhood | Condition1 | BldgType | HouseStyle | OverallQual | OverallCond | YearBuilt | YearRemodAdd | RoofStyle | Exterior1st | Exterior2nd | ExterQual | ExterCond | Foundation | BsmtFinSF1 | BsmtUnfSF | TotalBsmtSF | Heating | HeatingQC | CentralAir | 1stFlrSF | 2ndFlrSF | GrLivArea | BsmtFullBath | FullBath | HalfBath | BedroomAbvGr | KitchenQual | TotRmsAbvGrd | Functional | Fireplaces | GarageCars | GarageArea | PavedDrive | WoodDeckSF | OpenPorchSF | MoSold | YrSold | SaleType | SaleCondition | SalePrice | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 60 | RL | 8450 | Pave | Reg | Lvl | Inside | Gtl | CollgCr | Norm | 1Fam | 2Story | 7 | 5 | 2003 | 2003 | Gable | VinylSd | VinylSd | Gd | TA | PConc | 706 | 150 | 856 | GasA | Ex | Y | 856 | 854 | 1710 | 1 | 2 | 1 | 3 | Gd | 8 | Typ | 0 | 2 | 548 | Y | 0 | 61 | 2 | 2008 | WD | Normal | 208500 |
2 | 60 | RL | 11250 | Pave | IR1 | Lvl | Inside | Gtl | CollgCr | Norm | 1Fam | 2Story | 7 | 5 | 2001 | 2002 | Gable | VinylSd | VinylSd | Gd | TA | PConc | 486 | 434 | 920 | GasA | Ex | Y | 920 | 866 | 1786 | 1 | 2 | 1 | 3 | Gd | 6 | Typ | 1 | 2 | 608 | Y | 0 | 42 | 9 | 2008 | WD | Normal | 223500 |
4 | 60 | RL | 14260 | Pave | IR1 | Lvl | FR2 | Gtl | NoRidge | Norm | 1Fam | 2Story | 8 | 5 | 2000 | 2000 | Gable | VinylSd | VinylSd | Gd | TA | PConc | 655 | 490 | 1145 | GasA | Ex | Y | 1145 | 1053 | 2198 | 1 | 2 | 1 | 4 | Gd | 9 | Typ | 1 | 3 | 836 | Y | 192 | 84 | 12 | 2008 | WD | Normal | 250000 |
6 | 20 | RL | 10084 | Pave | Reg | Lvl | Inside | Gtl | Somerst | Norm | 1Fam | 1Story | 8 | 5 | 2004 | 2005 | Gable | VinylSd | VinylSd | Gd | TA | PConc | 1369 | 317 | 1686 | GasA | Ex | Y | 1694 | 0 | 1694 | 1 | 2 | 0 | 3 | Gd | 7 | Typ | 1 | 2 | 636 | Y | 255 | 57 | 8 | 2007 | WD | Normal | 307000 |
10 | 20 | RL | 11200 | Pave | Reg | Lvl | Inside | Gtl | Sawyer | Norm | 1Fam | 1Story | 5 | 5 | 1965 | 1965 | Hip | HdBoard | HdBoard | TA | TA | CBlock | 906 | 134 | 1040 | GasA | Ex | Y | 1040 | 0 | 1040 | 1 | 1 | 0 | 3 | TA | 5 | Typ | 0 | 1 | 384 | Y | 0 | 0 | 2 | 2008 | WD | Normal | 129500 |
Sebelum masuk ke tahap proses analisis data dengan teknik Univariate EDA. Pertama, dilakukan proses pembagian fitur pada dataset menjadi dua bagian, yaitu numerical features dan categorical features (non numerik). Lakukan analisis pada fitur kategori terlebih dahulu kemudian pada fitur numerik.
Untuk fitur kategori, pertama visualisasikan dalam bentuk plot dan data frame untuk menganalisis persentase dari masing - masing fitur. Gambar 3 memperlihatkan salah satu visualisasi dari fitur bernama 'KitchenQual'.
Gambar 3. Visualisasi dari salah satu fitur kategori bernama KitchenQual
Berdasarkan Gambar 3, diketahui bahwa beberapa fitur kategori memiliki persentase yang berbeda. Persentase ini menunjukkan jumlah kategori dari masing - masing fitur atau seberapa sering kategori itu muncul pada fitur tersebut.
Untuk fitur numerik bisa menggunakan histogram untuk melihat hubungan fitur numerik terhadap sampel. Hasilnya terlihat pada Gambar 4.
Gambar 4. Visualisasi histogram hubungan antara fitur - fitur numerik terhadap sampel.
Perhatikan Gambar 4, khususnya histogram untuk variabel "SalePrice" yang merupakan fitur target (label) pada dataset. Dari histogram "SalePrice" tersebut terdapat beberapa informasi, antara lain:
- Peningkatan harga jual rumah terdistribusi dengan cukup baik. Hal ini dapat dilihat pada histogram "SalePrice" yang mana sampel cenderung meningkat lalu mengalami penurunan seiring dengan meningkatnya harga jual rumah.
- rentang harga jual rumah cukup tinggi yaitu skala puluhan ribu dollar Amerika hingga sekitar $350000.
- Sebagian besar harga jual rumah bernilai antara $100000 sampai $200000.
- Distribusi harga cenderung cukup normal. Hal ini kemungkinan besar akan berimplikasi pada model.
Multivariate EDA menunjukkan hubungan antara dua atau lebih variabel pada data. Multivariate EDA yang menunjukkan hubungan antara dua variabel biasa disebut sebagai bivariate EDA. Selanjutnya,untuk melihat hubungan tersebut dilakukan analisis data pada fitur kategori dan numerik.
Untuk fitur kategori, dilakukan pengamatan rata - rata harga jual rumah terhadap fitur kategori. Gambar 5 memperlihatkan salah satu visualisasi dari fitur kategori yaitu 'PavedDrive':
Gambar 5. Visualisasi diagram multivariate analysis dari salah satu fitur kategori bernama PavedDrive
Dengan mengamati rata - rata harga jual rumah relatif terhadap fitur kategori diatas, diperoleh insight yaitu bahwa beberapa fitur kategori memiliki pengaruh yang cukup tinggi terhadap harga jual rumah. Misalkan pada fitur 'PavedDrive' (jalan masuk beraspal) yang terdapat pada Gambar 5, harga jual tertinggi dimiliki oleh tipe Y (Paved).
Untuk mengamati hubungan antara fitur numerik, dilakukan Corellation matrix untuk melihat hubungan korelasi antar fitur. Koefisien korelasi berkisar antara -1 dan +1, dimana itu akan mengukur kekuatan hubungan antara dua variabel serta arahnya (positif atau negatif). Mengenai kekuatan hubungan antar variabel, semakin dekat nilainya ke 1 atau -1, korelasinya semakin kuat. Sedangkan, semakin dekat nilainya ke 0, korelasinya semakin lemah. Arah korelasi antara dua variabel bisa bernilai positif (nilai kedua variabel cenderung meningkat bersama-sama) maupun negatif (nilai salah satu variabel cenderung meningkat ketika nilai variabel lainnya menurun).
Gambar 6. Correlation matrix untuk fitur numerik
Berdasarkan Gambar 6, terdapat beberapa fitur yang memiliki skor korelasi yang cukup besar diatas 70% dengan fitur target yaitu "SalePrice", Fitur tersebut adalah "OveralQual", "GLivArea", "GarageCars", dan "GarageArea". Sementara fitur lainnya memiliki korelasi yang kecil. Sehingga, fitur - fitur tersebut dapat di-drop atau dihapus dari dataset. Setelah itu fitur numerik akan di cek untuk memastikan tidak ada nilai Null/NaN di dalamnya. Jika ada, maka nilai tersebut akan dihapus. Setelah dilakukan proses drop dan menghilangkan nilai None/NaN, dataset akan tersisa 29 fitur seperti terlihat pada Tabel 4.
Tabel 4. Dataset setelah dilakukan proses EDA (Exploratory Data Analysis)
MSZoning | Street | LotShape | LandContour | LotConfig | LandSlope | Neighborhood | Condition1 | BldgType | HouseStyle | OverallQual | RoofStyle | Exterior1st | Exterior2nd | ExterQual | ExterCond | Foundation | Heating | HeatingQC | CentralAir | GrLivArea | KitchenQual | Functional | GarageCars | GarageArea | PavedDrive | SaleType | SaleCondition | SalePrice | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | RL | Pave | Reg | Lvl | Inside | Gtl | CollgCr | Norm | 1Fam | 2Story | 7 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1710 | Gd | Typ | 2 | 548 | Y | WD | Normal | 208500 |
2 | RL | Pave | IR1 | Lvl | Inside | Gtl | CollgCr | Norm | 1Fam | 2Story | 7 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1786 | Gd | Typ | 2 | 608 | Y | WD | Normal | 223500 |
4 | RL | Pave | IR1 | Lvl | FR2 | Gtl | NoRidge | Norm | 1Fam | 2Story | 8 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 2198 | Gd | Typ | 3 | 836 | Y | WD | Normal | 250000 |
6 | RL | Pave | Reg | Lvl | Inside | Gtl | Somerst | Norm | 1Fam | 1Story | 8 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1694 | Gd | Typ | 2 | 636 | Y | WD | Normal | 307000 |
10 | RL | Pave | Reg | Lvl | Inside | Gtl | Sawyer | Norm | 1Fam | 1Story | 5 | Hip | HdBoard | HdBoard | TA | TA | CBlock | GasA | Ex | Y | 1040 | TA | Typ | 1 | 384 | Y | WD | Normal | 129500 |
13 | RL | Pave | IR1 | Lvl | Inside | Gtl | CollgCr | Norm | 1Fam | 1Story | 7 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1494 | Gd | Typ | 3 | 840 | Y | New | Partial | 279500 |
18 | RL | Pave | Reg | Lvl | Inside | Gtl | SawyerW | RRAe | 1Fam | 1Story | 5 | Gable | VinylSd | VinylSd | TA | TA | PConc | GasA | Ex | Y | 1114 | Gd | Typ | 2 | 576 | Y | WD | Normal | 159000 |
19 | RL | Pave | Reg | Lvl | Inside | Gtl | NAmes | Norm | 1Fam | 1Story | 5 | Hip | BrkFace | Plywood | TA | TA | CBlock | GasA | TA | Y | 1339 | TA | Min1 | 1 | 294 | Y | COD | Abnorml | 139000 |
20 | RL | Pave | IR1 | Lvl | Corner | Gtl | NridgHt | Norm | 1Fam | 2Story | 8 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 2376 | Gd | Typ | 3 | 853 | Y | New | Partial | 325300 |
23 | RM | Pave | Reg | Lvl | Inside | Gtl | MeadowV | Norm | TwnhsE | 1Story | 5 | Gable | CemntBd | CmentBd | TA | TA | PConc | GasA | TA | Y | 1060 | TA | Typ | 2 | 572 | Y | WD | Normal | 129900 |
25 | RL | Pave | Reg | Lvl | Corner | Gtl | NridgHt | Norm | 1Fam | 1Story | 8 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1600 | Gd | Typ | 3 | 890 | Y | WD | Normal | 256300 |
27 | RL | Pave | Reg | Lvl | Inside | Gtl | NridgHt | Norm | 1Fam | 1Story | 8 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1704 | Gd | Typ | 3 | 772 | Y | WD | Normal | 306000 |
31 | RL | Pave | IR1 | Lvl | CulDSac | Gtl | Sawyer | Norm | 1Fam | 1Story | 5 | Gable | HdBoard | HdBoard | TA | TA | CBlock | GasA | Gd | Y | 1228 | Gd | Typ | 1 | 271 | Y | WD | Normal | 149350 |
32 | RL | Pave | Reg | Lvl | Corner | Gtl | CollgCr | Norm | 1Fam | 1Story | 8 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1234 | Gd | Typ | 2 | 484 | Y | WD | Normal | 179900 |
34 | RL | Pave | Reg | Lvl | Inside | Gtl | NridgHt | Norm | TwnhsE | 1Story | 9 | Hip | MetalSd | MetalSd | Ex | TA | PConc | GasA | Ex | Y | 1561 | Ex | Typ | 2 | 556 | Y | WD | Normal | 277500 |
35 | RL | Pave | Reg | Lvl | Inside | Gtl | NridgHt | Norm | 1Fam | 2Story | 8 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 2452 | Gd | Typ | 3 | 691 | Y | WD | Normal | 309000 |
36 | RL | Pave | Reg | Lvl | Corner | Gtl | CollgCr | Norm | 1Fam | 1Story | 5 | Gable | VinylSd | VinylSd | TA | TA | PConc | GasA | Ex | Y | 1097 | TA | Typ | 2 | 672 | Y | WD | Normal | 145000 |
38 | RL | Pave | Reg | Lvl | Inside | Gtl | NAmes | Norm | 1Fam | 1Story | 5 | Gable | VinylSd | VinylSd | TA | Gd | CBlock | GasA | TA | Y | 1057 | Gd | Typ | 1 | 246 | Y | WD | Abnorml | 109000 |
40 | RL | Pave | Reg | Lvl | Inside | Gtl | NAmes | Norm | 1Fam | 1Story | 6 | Gable | Wd Sdng | Wd Sdng | TA | TA | CBlock | GasA | Ex | Y | 1324 | TA | Typ | 2 | 440 | Y | WD | Abnorml | 160000 |
45 | RL | Pave | Reg | Lvl | Inside | Gtl | NridgHt | Norm | TwnhsE | 1Story | 9 | Hip | MetalSd | MetalSd | Ex | TA | PConc | GasA | Ex | Y | 1752 | Ex | Typ | 2 | 576 | Y | WD | Normal | 319900 |
47 | FV | Pave | Reg | Lvl | Inside | Gtl | Somerst | Norm | 1Fam | 1Story | 8 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1656 | Gd | Typ | 3 | 826 | Y | WD | Normal | 249700 |
49 | RL | Pave | Reg | Lvl | Inside | Gtl | Sawyer | Norm | 1Fam | 1Story | 5 | Gable | HdBoard | HdBoard | TA | TA | CBlock | GasA | Ex | Y | 955 | TA | Typ | 1 | 386 | Y | WD | Normal | 127000 |
54 | RL | Pave | Reg | Bnk | Inside | Mod | NAmes | Norm | 1Fam | SLvl | 5 | Gable | MetalSd | MetalSd | TA | TA | CBlock | GasA | TA | Y | 1360 | TA | Min1 | 2 | 572 | Y | WD | Normal | 130000 |
... | |||||||||||||||||||||||||||||
1451 | RL | Pave | Reg | Lvl | Inside | Gtl | Somerst | Norm | 1Fam | 1Story | 8 | Gable | CemntBd | CmentBd | Gd | TA | PConc | GasA | Ex | Y | 1578 | Ex | Typ | 3 | 840 | Y | New | Partial | 287090 |
1453 | RL | Pave | Reg | Lvl | Inside | Gtl | Mitchel | Norm | 1Fam | 1Story | 5 | Gable | VinylSd | VinylSd | TA | TA | PConc | GasA | Ex | Y | 1140 | TA | Typ | 0 | 0 | Y | WD | Abnorml | 84500 |
1454 | FV | Pave | Reg | Lvl | Inside | Gtl | Somerst | Norm | 1Fam | 1Story | 7 | Gable | VinylSd | VinylSd | Gd | TA | PConc | GasA | Ex | Y | 1221 | Gd | Typ | 2 | 400 | Y | WD | Normal | 185000 |
1455 | RL | Pave | Reg | Lvl | Inside | Gtl | Gilbert | Norm | 1Fam | 2Story | 6 | Gable | VinylSd | VinylSd | TA | TA | PConc | GasA | Ex | Y | 1647 | TA | Typ | 2 | 460 | Y | WD | Normal | 175000 |
Pada bagian ini, terdapat empat tahap persiapan data, yaitu:
- Encoding fitur kategori.
- Reduksi dimensi dengan Principal Component Analysis (PCA).
- Pembagian dataset dengan fungsi train_test_split dari library sklearn.
- Standarisasi.
Proses encoding fitur kategori menggunakan teknik one-hot-encoding. Teknik ini adalah salah satu metode dalam proses encoding fitur (feature encoding) pada data kategorikal. Tujuannya adalah untuk mengubah variabel kategorikal menjadi representasi biner yang dapat digunakan dalam algoritma pembelajaran mesin. Dalam dataset terdapat beberapa variabel kategori, maka dilakukan proses encoding ini dengan fitur get_dummies. Dan menghasilkan dataset seperti terlihat pada Tabel 5.
Tabel 5. Dataset hasil dari Encoding Fitur Kategori
OverallQual | GrLivArea | GarageCars | GarageArea | SalePrice | MSZoning_FV | MSZoning_RH | MSZoning_RL | MSZoning_RM | Street_Grvl | Street_Pave | LotShape_IR1 | LotShape_IR2 | LotShape_IR3 | LotShape_Reg | LandContour_Bnk | LandContour_HLS | LandContour_Low | LandContour_Lvl | LotConfig_Corner | LotConfig_CulDSac | LotConfig_FR2 | LotConfig_FR3 | LotConfig_Inside | LandSlope_Gtl | LandSlope_Mod | Neighborhood_Blmngtn | Neighborhood_BrkSide | Neighborhood_ClearCr | Neighborhood_CollgCr | Neighborhood_Crawfor | Neighborhood_Edwards | Neighborhood_Gilbert | Neighborhood_IDOTRR | Neighborhood_MeadowV | Neighborhood_Mitchel | Neighborhood_NAmes | Neighborhood_NPkVill | Neighborhood_NWAmes | Neighborhood_NoRidge | Neighborhood_NridgHt | Neighborhood_OldTown | Neighborhood_SWISU | Neighborhood_Sawyer | Neighborhood_SawyerW | Neighborhood_Somerst | Neighborhood_StoneBr | Neighborhood_Timber | Neighborhood_Veenker | Condition1_Artery | Condition1_Feedr | Condition1_Norm | Condition1_PosA | Condition1_PosN | Condition1_RRAe | Condition1_RRAn | Condition1_RRNe | Condition1_RRNn | BldgType_1Fam | BldgType_Duplex | BldgType_Twnhs | BldgType_TwnhsE | HouseStyle_1.5Fin | HouseStyle_1.5Unf | HouseStyle_1Story | HouseStyle_2Story | HouseStyle_SFoyer | HouseStyle_SLvl | RoofStyle_Gable | RoofStyle_Gambrel | RoofStyle_Hip | Exterior1st_AsbShng | Exterior1st_BrkFace | Exterior1st_CemntBd | Exterior1st_HdBoard | Exterior1st_MetalSd | Exterior1st_Plywood | Exterior1st_Stucco | Exterior1st_VinylSd | Exterior1st_Wd Sdng | Exterior1st_WdShing | Exterior2nd_AsbShng | Exterior2nd_BrkFace | Exterior2nd_CmentBd | Exterior2nd_HdBoard | Exterior2nd_ImStucc | Exterior2nd_MetalSd | Exterior2nd_Plywood | Exterior2nd_Stone | Exterior2nd_Stucco | Exterior2nd_VinylSd | Exterior2nd_Wd Sdng | Exterior2nd_Wd Shng | ExterQual_Ex | ExterQual_Fa | ExterQual_Gd | ExterQual_TA | ExterCond_Fa | ExterCond_Gd | ExterCond_TA | Foundation_BrkTil | Foundation_CBlock | Foundation_PConc | Foundation_Wood | Heating_GasA | Heating_GasW | Heating_Grav | HeatingQC_Ex | HeatingQC_Fa | HeatingQC_Gd | HeatingQC_TA | CentralAir_N | CentralAir_Y | KitchenQual_Ex | KitchenQual_Fa | KitchenQual_Gd | KitchenQual_TA | Functional_Maj1 | Functional_Maj2 | Functional_Min1 | Functional_Min2 | Functional_Typ | PavedDrive_N | PavedDrive_P | PavedDrive_Y | SaleType_COD | SaleType_CWD | SaleType_Con | SaleType_ConLD | SaleType_ConLI | SaleType_ConLw | SaleType_New | SaleType_Oth | SaleType_WD | SaleCondition_Abnorml | SaleCondition_AdjLand | SaleCondition_Alloca | SaleCondition_Family | SaleCondition_Normal | SaleCondition_Partial | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 7 | 1710 | 2 | 548 | 208500 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
2 | 7 | 1786 | 2 | 608 | 223500 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
4 | 8 | 2198 | 3 | 836 | 250000 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
6 | 8 | 1694 | 2 | 636 | 307000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
10 | 5 | 1040 | 1 | 384 | 129500 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
Teknik reduksi (pengurangan) dimensi adalah prosedur yang mengurangi jumlah fitur dengan tetap mempertahankan informasi pada data. Teknik pengurangan dimensi yang digunakan pada proyek ini adalah PCA. PCA adalah teknik untuk mereduksi dimensi, mengekstraksi fitur, dan mentransformasi data dari “n-dimensional space” ke dalam sistem berkoordinat baru dengan dimensi m, di mana m lebih kecil dari n.
PCA bekerja menggunakan metode aljabar linier dengan mengasumsikan bahwa sekumpulan data pada arah dengan varians terbesar merupakan yang paling penting (utama). PCA umumnya digunakan ketika variabel dalam data memiliki korelasi yang tinggi. Korelasi tinggi ini menunjukkan data yang berulang atau redundant. Karena hal inilah, teknik PCA digunakan untuk mereduksi variabel asli menjadi sejumlah kecil variabel baru yang tidak berkorelasi linier, disebut komponen utama (PC). Komponen utama ini dapat menangkap sebagian besar varians dalam variabel asli. Sehingga, saat teknik PCA diterapkan pada data, PCA hanya akan menggunakan komponen utama dan mengabaikan sisanya.
Sebelum dilakukan proses PCA, dilakukan proses analisis fitur numerik menggunakan pairplot. Dari hasil pairplot terdapat beberapa fitur yang akan dilakukan proses reduksi. Seperti terlihat pada Gambar 7, Fitur GrLivArea dan GarageArea memiliki korelasi yang cukup tinggi. Hal ini terjadi karena beberapa fitur tersebut mengandung informasi yang sama yaitu area/luas. Selanjutnya aplikasikan class PCA dari library scikit learn ke dalam kode program untuk melakukan pengurangan dimensi pada fitur tersebut.
Gambar 7. Diagram pairplot hasil proses analisis fitur numerik
Setelah dilakukan proses PCA, maka akan terdapat fitur baru bernama 'dimension' yang merupakan pengurangan dimensi dari fitur 'GrLivArea' dan 'GarageArea' seperti terlihat pada Tabel 6.
Tabel 6. Dataset hasil dari proses PCA
OverallQual | GarageCars | SalePrice | MSZoning_FV | MSZoning_RH | MSZoning_RL | MSZoning_RM | Street_Grvl | Street_Pave | LotShape_IR1 | LotShape_IR2 | LotShape_IR3 | LotShape_Reg | LandContour_Bnk | LandContour_HLS | LandContour_Low | LandContour_Lvl | LotConfig_Corner | LotConfig_CulDSac | LotConfig_FR2 | LotConfig_FR3 | LotConfig_Inside | LandSlope_Gtl | LandSlope_Mod | Neighborhood_Blmngtn | Neighborhood_BrkSide | Neighborhood_ClearCr | Neighborhood_CollgCr | Neighborhood_Crawfor | Neighborhood_Edwards | Neighborhood_Gilbert | Neighborhood_IDOTRR | Neighborhood_MeadowV | Neighborhood_Mitchel | Neighborhood_NAmes | Neighborhood_NPkVill | Neighborhood_NWAmes | Neighborhood_NoRidge | Neighborhood_NridgHt | Neighborhood_OldTown | Neighborhood_SWISU | Neighborhood_Sawyer | Neighborhood_SawyerW | Neighborhood_Somerst | Neighborhood_StoneBr | Neighborhood_Timber | Neighborhood_Veenker | Condition1_Artery | Condition1_Feedr | Condition1_Norm | Condition1_PosA | Condition1_PosN | Condition1_RRAe | Condition1_RRAn | Condition1_RRNe | Condition1_RRNn | BldgType_1Fam | BldgType_Duplex | BldgType_Twnhs | BldgType_TwnhsE | HouseStyle_1.5Fin | HouseStyle_1.5Unf | HouseStyle_1Story | HouseStyle_2Story | HouseStyle_SFoyer | HouseStyle_SLvl | RoofStyle_Gable | RoofStyle_Gambrel | RoofStyle_Hip | Exterior1st_AsbShng | Exterior1st_BrkFace | Exterior1st_CemntBd | Exterior1st_HdBoard | Exterior1st_MetalSd | Exterior1st_Plywood | Exterior1st_Stucco | Exterior1st_VinylSd | Exterior1st_Wd Sdng | Exterior1st_WdShing | Exterior2nd_AsbShng | Exterior2nd_BrkFace | Exterior2nd_CmentBd | Exterior2nd_HdBoard | Exterior2nd_ImStucc | Exterior2nd_MetalSd | Exterior2nd_Plywood | Exterior2nd_Stone | Exterior2nd_Stucco | Exterior2nd_VinylSd | Exterior2nd_Wd Sdng | Exterior2nd_Wd Shng | ExterQual_Ex | ExterQual_Fa | ExterQual_Gd | ExterQual_TA | ExterCond_Fa | ExterCond_Gd | ExterCond_TA | Foundation_BrkTil | Foundation_CBlock | Foundation_PConc | Foundation_Wood | Heating_GasA | Heating_GasW | Heating_Grav | HeatingQC_Ex | HeatingQC_Fa | HeatingQC_Gd | HeatingQC_TA | CentralAir_N | CentralAir_Y | KitchenQual_Ex | KitchenQual_Fa | KitchenQual_Gd | KitchenQual_TA | Functional_Maj1 | Functional_Maj2 | Functional_Min1 | Functional_Min2 | Functional_Typ | PavedDrive_N | PavedDrive_P | PavedDrive_Y | SaleType_COD | SaleType_CWD | SaleType_Con | SaleType_ConLD | SaleType_ConLI | SaleType_ConLw | SaleType_New | SaleType_Oth | SaleType_WD | SaleCondition_Abnorml | SaleCondition_AdjLand | SaleCondition_Alloca | SaleCondition_Family | SaleCondition_Normal | SaleCondition_Partial | dimension | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 7 | 2 | 208500 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 272.251 |
2 | 7 | 2 | 223500 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 361.222 |
4 | 8 | 3 | 250000 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 818.289 |
6 | 8 | 2 | 307000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 279.646 |
10 | 5 | 1 | 129500 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -417.353 |
13 | 7 | 3 | 279500 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 139.467 |
18 | 5 | 2 | 159000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -296.043 |
19 | 5 | 1 | 139000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | -151.972 |
20 | 8 | 3 | 325300 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 994.599 |
23 | 5 | 2 | 129900 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -349.23 |
25 | 8 | 3 | 256300 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 254.814 |
27 | 8 | 3 | 306000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 324.612 |
31 | 5 | 1 | 149350 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -265.137 |
32 | 8 | 2 | 179900 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -204.043 |
34 | 9 | 2 | 277500 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 130.437 |
35 | 8 | 3 | 309000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1025.93 |
36 | 5 | 2 | 145000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -287.536 |
38 | 5 | 1 | 109000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | -436.764 |
40 | 6 | 2 | 160000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | -128.553 |
45 | 9 | 2 | 319900 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 320.08 |
47 | 8 | 3 | 249700 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 292.278 |
49 | 5 | 1 | 127000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -498.919 |
54 | 5 | 2 | 130000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -59.5168 |
... | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1451 | 8 | 3 | 287090 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 220.587 |
1453 | 5 | 0 | 84500 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | -420.477 |
1454 | 7 | 2 | 185000 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | -238.406 |
1455 | 6 | 2 | 175000 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 188.564 |
Selanjutnya adalah membagi dataset menjadi data latih (train) dan data uji (test). Proses pembagian dataset menggunakan library sklearn yaitu train-test-split. Proporsi pembagian adalah 80:20. Dilakukan juga pemisahkan fitur dengan target (label) yaitu SalePrice. Hasil pembagian dataset menghasilkan sampel untuk train dataset sebesar 480 dan sampel untuk test dataset sebesar 121 dari total keseluruhan dataset yaitu sebesar 601 buah sampel.
Algoritma machine learning memiliki performa lebih baik dan konvergen lebih cepat ketika dimodelkan pada data dengan skala relatif sama atau mendekati distribusi normal. Proses scaling dan standarisasi membantu untuk membuat fitur data menjadi bentuk yang lebih mudah diolah oleh algoritma.
Standardisasi adalah teknik transformasi yang paling umum digunakan dalam tahap persiapan pemodelan. Untuk fitur numerik tidak akan melakukan transformasi dengan one-hot-encoding seperti pada fitur kategori, tetapi akan menggunakan teknik StandarScaler dari library Scikitlearn. StandardScaler melakukan proses standarisasi fitur dengan mengurangkan mean (nilai rata-rata) kemudian membaginya dengan standar deviasi untuk menggeser distribusi. StandardScaler menghasilkan distribusi dengan standar deviasi sama dengan 1 dan mean sama dengan 0. Sekitar 68% dari nilai akan berada di antara -1 dan 1.
Untuk menghindari kebocoran informasi pada data uji, hanya akan diterapkan fitur standarisasi pada data latih. Kemudian, setelah itu pada tahap evaluasi akan dilakukan standarisasi pada data uji. Hasil dari proses standarisasi fitur numerik bisa dilihat pada Tabel 7.
Tabel 7. Fitur numerik setelah dilakukan proses standarisasi
OverallQual | GarageCars | dimension | |
---|---|---|---|
83 | -0.985648 | 0.26343 | -0.869308 |
1200 | -1.77417 | -1.18998 | -1.43807 |
1410 | 0.591389 | 0.26343 | 0.994863 |
1280 | 0.591389 | 0.26343 | 0.338825 |
283 | 1.37991 | 1.71683 | 0.316431 |
Pada tahap ini, akan dikembangkan model machine learning dengan tiga algoritma. Kemudian, dilakukan evaluasi performa masing-masing algoritma dan menentukan algoritma mana yang memberikan hasil prediksi terbaik. Ketiga algoritma yang akan digunakan pada proyek kali ini antara lain:
- K-Nearest Neighbor
- Random Forest
- Boosting Algorithm
Untuk proses mencari nilai parameter terbaik atau hyperparameter tunning, digunakan metode GridSearch dari Library SkLearn. GridSearch akan menentukan hyperparameter terbaik berdasarkan best score untuk nanti digunakan pada proses pelatihan model machine learning. Dengan menggunakan GridSearch akan menghemat dalam proses analisis dan pencarian parameter untuk di-tune dalam model machine learning.
KNN adalah algoritma yang relatif sederhana dibandingkan dengan algoritma lain. Algoritma KNN menggunakan ‘kesamaan fitur’ untuk memprediksi nilai dari setiap data yang baru. Dengan kata lain, setiap data baru diberi nilai berdasarkan seberapa mirip titik tersebut dalam set pelatihan. KNN bekerja dengan membandingkan jarak satu sampel ke sampel pelatihan lain dengan memilih sejumlah k tetangga terdekat (dengan k adalah sebuah angka positif), itulah mengapa algoritma ini dinamakan K-nearest neighbor (sejumlah k tetangga terdekat). KNN bisa digunakan untuk kasus klasifikasi dan regresi. Walaupun begitu KNN memiliki kelebihan dan kekurangan sebagai berikut:
Kelebihan KNN adalah:
- Sederhana dan Mudah Dipahami: Konsep KNN relatif mudah untuk dipahami dan diimplementasikan. Ini adalah salah satu algoritma pembelajaran mesin yang paling sederhana.
- Cocok untuk Klasifikasi Non-Linier: KNN bisa sangat efektif untuk masalah klasifikasi yang tidak memiliki batas keputusan linier yang jelas. Algoritma ini mampu menangani relasi non-linier antara fitur.
- Cocok untuk Dataset dengan Banyak Fitur: KNN dapat berfungsi dengan baik bahkan pada dataset dengan banyak fitur, asalkan jumlah tetangga (k) dipilih dengan benar.
Kelemahan KNN adalah:
- Sensitif terhadap Pemilihan Jumlah Tetangga (k): KNN sangat sensitif terhadap nilai k yang dipilih. Jika k terlalu kecil, model akan menjadi sensitif terhadap noise dan outlier. Jika k terlalu besar, model dapat kehilangan kemampuan untuk memahami struktur lokal dari data.
- Membutuhkan Memori Lebih Banyak: Algoritma KNN memerlukan penyimpanan seluruh dataset latih di memori. Untuk dataset besar, ini dapat menghabiskan banyak memori.
- Komputasi yang Tinggi pada Pengujian: Untuk memprediksi label atau nilai untuk setiap sampel baru, algoritma KNN harus menghitung jarak dari sampel baru ke semua sampel dalam set pelatihan, yang dapat memakan waktu jika dataset besar.
- Tidak Cocok untuk Data Berkasatria Tinggi (High-Dimensional Data): Ketika jumlah fitur sangat besar, ruang berkasatria menjadi sangat penuh dan mengukur jarak antara tetangga mungkin kehilangan makna.
Proses pembuatan model menggunakan algoritma KNN dimulai dengan mencari kombinasi terbaik dari hyperparameter terbaik menggunakan GridSearch. Pada tahap ini dataset yang dilatih hanya data training, sedangkan data testing digunakan nantinya untuk tahap evaluasi yang akan dibahas pada bagian evaluasi model. Proses pembuatan model menggunakan library scikit-learn bernama KNeighborsRegressor dimana method ini menggunakan paramater bernama n_neighbors yang merepresentasikan jumlah nilai k tetangga serta digunakan juga metrik Mean Squared Error (MSE) sebagai metrik evaluasi model. Berdasarkan hasil pencarian parameter terbaik menggunakan GridSearch, di dapat nilai paramater terbaik untuk n_neighbors adalah 10 (k = 10) dengan nilai best score (KNN GridSearch score) sebesar -601473767.6230625. Nilai parameter inilah yang digunakan pada model KNN.
Random forest merupakan salah satu model machine learning yang termasuk ke dalam kategori ensemble (group) learning. Random forest merupakan model prediksi yang terdiri dari beberapa model dan bekerja secara bersama-sama. Ide dibalik model ensemble adalah sekelompok model yang bekerja bersama menyelesaikan masalah. Sehingga, tingkat keberhasilan akan lebih tinggi dibanding model yang bekerja sendirian. Pada model ensemble, setiap model harus membuat prediksi secara independen. Kemudian, prediksi dari setiap model ensemble ini digabungkan untuk membuat prediksi akhir. Disebut random forest karena algoritma ini disusun dari banyak algoritma pohon (decision tree) yang pembagian data dan fiturnya dipilih secara acak.
Kelebihan Random Forest:
- Akurasi Tinggi: Random Forest adalah salah satu algoritma yang memiliki akurasi tinggi dalam masalah klasifikasi dan regresi. Karena menggabungkan banyak pohon keputusan, cenderung mengurangi overfitting.
- Tidak Sensitif terhadap Outlier dan Data Missing: Random Forest bisa menangani data yang tidak seimbang dan fitur yang hilang (missing values) tanpa memerlukan pre-processing yang ekstensif.
- Bisa Mengatasi Data Berkasatria Tinggi (High-Dimensional Data): Algoritma ini bekerja dengan baik pada data yang memiliki banyak fitur.
- Mampu Menangani Variabel Numerik dan Kategorikal: Random Forest dapat menangani baik variabel numerik maupun kategorikal tanpa memerlukan transformasi tambahan.
Kekurangan Random Forest:
- Kesulitan dalam Interpretasi Model: Random Forest adalah model ensemble kompleks, yang bisa sulit untuk diinterpretasi dan menjelaskan mengapa keputusan spesifik dibuat.
- Membutuhkan Memori Lebih Banyak: Karena Random Forest menggabungkan beberapa pohon keputusan, ia memerlukan lebih banyak memori daripada model tunggal.
- Kurang Cepat dalam Proses Prediksi: Proses prediksi dengan Random Forest mungkin lebih lambat daripada model tunggal seperti pohon keputusan karena harus menggabungkan hasil dari beberapa pohon.
Sedikit mirip dengan membuat model KNN, Proses pembuatan model menggunakan algoritma Random Forest dimulai dengan mengimpor RandomForestRegressor dari library scikit-learn dan mengimport mean_squared_error sebagai metrik untuk mengevaluasi performa model. Kemudian dibuat juga variabel bernama RF dan memanggil RandomForestRegressor dengan beberapa nilai parameter. Berikut adalah parameter-parameter yang digunakan:
- n_estimator: jumlah trees (pohon) di forest.
- max_depth: kedalaman atau panjang pohon dan merupakan ukuran seberapa banyak pohon dapat membelah (splitting) untuk membagi setiap node ke dalam jumlah pengamatan yang diinginkan.
- random_state: digunakan untuk mengontrol random number generator yang digunakan. Pada proyek kali ini digunakan random state sebesar 55.
- n_jobs: jumlah job (pekerjaan) yang digunakan secara paralel dan merupakan komponen untuk mengontrol thread atau proses yang berjalan secara paralel. Pada proses pembuatan model kali ini ditetapkan nilai n_jobs=-1, artinya semua proses berjalan secara paralel.
Proses Pencarian nilai parameter (hyperparameter tunning) dilakukan dengan metode GridSearch. Berdasarkan hasil pencarian kombinasi nilai parameter dengan GridSearch didapat hasil nilai max_depth adalah 32 dan n_estimators adalah 60 sebagai nilai best parameters. Sedangkan didapat nilai RF GridSearch score sebesar -440290781.7763111, ini menunjukkan skor evaluasi terbaik yang didapat dari GridSearch untuk model yang dibuat. Kombinasi nilai parameter tersebut yang akan digunakan ke dalam model Random Forest pada proyek ini.
Boosting Algorithm adalah metode pembelajaran mesin ensemble yang berusaha meningkatkan kinerja model dengan menggabungkan sejumlah kecil model lemah (biasanya pohon keputusan dangkal atau pengklasifikasi lemah lainnya) menjadi model yang kuat. Secara umum, algoritma boosting bekerja dengan cara memberikan bobot yang berbeda pada setiap sampel dalam dataset sehingga model berfokus pada sampel yang sulit diprediksi oleh model sebelumnya.
Ada beberapa jenis algoritma boosting yang populer, tapi pada proyek ini yang digunakan adalah AdaBoost (Adaptive Boosting). AdaBoost menggunakan model lemah dan menyesuaikan bobot pada setiap sampel, memberikan lebih banyak fokus pada sampel yang salah diklasifikasikan sebelumnya.
Kelebihan algoritma boosting:
- Akurasi Tinggi: Boosting sering menghasilkan model yang memiliki akurasi yang sangat tinggi, karena mampu mengurangi bias dan varians.
- Mampu Menangani Data yang Tidak Seimbang: Boosting dapat menangani masalah klasifikasi dengan dataset yang tidak seimbang dengan baik, karena memberi bobot lebih pada sampel dari kelas yang kurang umum.
- Tidak Sensitif terhadap Data Outlier: Boosting memiliki kekebalan terhadap outlier, karena fokus pada sampel yang sulit diprediksi oleh model sebelumnya.
- Mampu Menangani Variabel Kategorikal dan Numerik: Banyak implementasi boosting dapat menangani baik variabel kategorikal maupun numerik tanpa memerlukan pre-processing tambahan.
Kelemahan algoritma boosting:
- Memerlukan Waktu Komputasi yang Lebih Lama: Training boosting algorithms mungkin memerlukan lebih banyak waktu dan sumber daya komputasi dibandingkan dengan beberapa algoritma pembelajaran mesin lainnya.
- Overfitting Jika Tidak Dikontrol: Ada kemungkinan overfitting jika parameter tidak diatur dengan benar atau jika terlalu banyak pohon digunakan dalam ensemble.
- Rentan terhadap Noise: Boosting bisa sangat sensitif terhadap noise dalam data latih.
Proses pembuatan model dengan algoritma AdaBoost dimulai dengan mengimpor AdaBoostRegressor dari library scikit-learn serta mengimpor mean_squared_error sebagai metrik evaluasi model. Terdapat beberapa parameter yang digunakan pada method AdaBoostRegressor pada proyek ini yaitu:
- learning_rate: bobot yang diterapkan pada setiap regressor di masing-masing proses iterasi boosting.
- random_state: digunakan untuk mengontrol random number generator yang digunakan. Nilai random_state ditetapkan pada model ini adalah 55.
Digunakan juga metode GridSearch untuk melakukan pencarian kombinasi nilai parameter terbaik yang akan digunakan pada model. Berdasarkan hasil GridSearch didapat nilai learning_rate adalah 0.1 sebagai nilai best parameters. Sedangkan nilai AdaBoost GridSearch score didapat sebesar -634782552.3145735 yang menunjukkan score evaluasi terbaik yang didapat dari GridSearch. Nilai parameter inilah yang akan digunakan ke dalam model AdaBoost.
Metrik yang digunakan pada proyek ini untuk melakukan evaluasi model adalah MSE atau Mean Squared Error yang menghitung jumlah selisih kuadrat rata-rata nilai sebenarnya dengan nilai prediksi. Jika prediksi mendekati nilai sebenarnya, performanya baik. Sedangkan jika tidak, performanya buruk. Secara teknis, selisih antara nilai sebenarnya dan nilai prediksi disebut eror. Maka, semua metrik mengukur seberapa kecil nilai eror tersebut. MSE didefinisikan dalam persamaan berikut:
Keterangan:
- N = jumlah dataset
- yi = nilai sebenarnya
- y_pred = nilai prediksi
Sebelum menghitung nilai MSE, dilakukan proses scaling fitur numerik pada data uji terlebih dahulu. Karena sebelumnya, hanya dilakukan proses scaling pada data latih saja. Setelah model dilatih menggunakan 3 jenis algoritma yaitu KNN, Random Forest dan AdaBoost, selanjutnya harus dilakukan proses scaling fitur pada data uji, hal ini bertujuan agar skala antara data latih dan data uji sama dan bisa melakukan proses evaluasi.
Evaluasi ketiga model menggunakan metrik MSE. Saat menghitung nilai MSE pada data train dan test dilakukan pembagian dengan bilangan 1e6, hal ini bertujuan agar nilai mse tidak terlalu besar skalanya. Nilai MSE dari ketiga model dapat dilihat pada Tabel 8.
Tabel 8. Nilai MSE dari ketiga model yaitu KNN, Random Forest (RF) dan Boosting Algorithm
train | test | |
---|---|---|
KNN | 451.357 | 797.892 |
RF | 61.4616 | 448.85 |
Boosting | 459.925 | 592.737 |
Berdasarkan Tabel 8, terlihat bahwa, model Random Forest (RF) memberikan skor nilai error paling kecil dibandingkan algoritma lain seperti KNN dan AdaBoost. Jadi, Model Random Forest yang akan dipilih sebagai model terbaik untuk memprediksi harga jual rumah. Untuk mengujinya, dilakukan prediksi menggunakan beberapa harga dari data test dan didapatkan output atau hasil seperti Tabel 9.
Tabel 9. Hasil Prediksi dari ketiga model (KNN, Random Forest, dan Boosting Algorithm) pada data uji
y_true | prediksi_KNN | prediksi_RF | prediksi_Boosting | |
---|---|---|---|---|
787 | 233000 | 222500 | 234852 | 241872 |
Terlihat bahwa prediksi Random Forest (RF) memberikan hasil yang paling mendekati dengan y_true (data test). Dimana nilai y_true adalah 233000 sedangkan nilai prediksi dari Random Forest adalah 234851.5.