From a53fb8425c3aa8c1c8fac1cc760beb8267b1bf46 Mon Sep 17 00:00:00 2001 From: Muhammad Ammar Nabil Date: Sun, 18 Sep 2022 14:08:47 +0700 Subject: [PATCH] Created using Colaboratory --- ...ce in Beijing (Predictive_Analytics).ipynb | 311 ++++++++++++++++++ 1 file changed, 311 insertions(+) create mode 100644 (Documentaion) House Price in Beijing (Predictive_Analytics).ipynb diff --git a/(Documentaion) House Price in Beijing (Predictive_Analytics).ipynb b/(Documentaion) House Price in Beijing (Predictive_Analytics).ipynb new file mode 100644 index 0000000..e231c46 --- /dev/null +++ b/(Documentaion) House Price in Beijing (Predictive_Analytics).ipynb @@ -0,0 +1,311 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "collapsed_sections": [], + "authorship_tag": "ABX9TyPRex5F+VFD0hW8NZbH5am2", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "
\n", + "\n", + "# Laporan Proyek Machine Learning - Muhammad Ammar Nabil\n", + "\n", + "
\n", + "\n", + "## **Domain Proyek**\n", + "---\n", + "Sekarang ini menentukan hunian idaman merupakan hal yang sulit. Diperlukan pemikiran yang matang dalam hal mempertimbangkan beberapa aspek. Maka dari itu diperlukan sistem pendukung keputusan untuk memecahkan masalah tersebut. Dalam pembuatan sistem pendukung keputusan tersebut sebuah model yang bagus agar bisa memprediksi dengan baik. Machine learning bisa menjadi solusi dari semua itu. Dengan machine learning, seseorang dapat membuat suatu model untuk memprediksi harga rumah. [Truong, Q. et al. (2020)](https://www.sciencedirect.com/science/article/pii/S1877050920316318) telah membuat sebuah model yang dapat digunakan untuk memprediksi harga rumah di Beijing. Dengan model tersebut akan membantu banyak ekonom perumahan untuk menentukan HPI (House Price Index) yang digunakan untuk mengukur perubahan harga perumahan di banyak negara, lalu untuk menentukan total pembayaran di muka, menentukan target pasar, perubahan tingkat default hipotek, keterjangkauan perumahan di wilayah geografis tertentu [(Truong, Q. et al., 2020)](https://www.sciencedirect.com/science/article/pii/S1877050920316318).\n", + "\n", + "
\n", + "\n", + "\n", + "Prediksi Harga Rumah Merupakan Hal Yang Dicari Saat ini\n", + "
\n", + "\n", + "Dikarenakan pada proses penentuan HPI dihasilkan dari perhitungan semua transaksi yang ada, membuat HPI tidak efisien untuk memprediksi harga rumah tertentu. Banyak fitur seperti distrik, usia, dan jumlah lantai juga perlu dipertimbangkan, bukan hanya penjualan berulang di dekade sebelumnya [(Truong, Q. et al., 2020)](https://www.sciencedirect.com/science/article/pii/S1877050920316318). Maka dari itu dalam memecahkan kasus ini dibutuhkan sebuah cara untuk menentukan harga rumah dengan mempertimbangkan beberapa aspek dan memiliki prediksi yang lebih akurat. Cara tersebut salah satunya dengan membuat predictive analysis. Pada kasus ini model yang dibuat adalah sebuah model regresi yang digunakan untuk menentukan harga rumah berdasarkan beberapa fitur/atribut yang ada. Dataset yang digunakan berasal dari [Housing price in Beijing](https://www.kaggle.com/datasets/ruiqurm/lianjia).\n", + "\n", + "## **Business Understanding**\n", + "---\n", + "\n", + "### *Problem Statements*\n", + "Berdasarkan latar belakang di atas, rumusan masalah dalam kasus ini adalah :\n", + "- Bagaimana membuat model predictive analysis untuk menentukan harga rumah ?\n", + "- Bagaimana cara kerja model predictive analysis untuk menentukan harga rumah ?\n", + "- Bagaimana hasil evaluasi model yang telah dibuat untuk menentukan harga rumah ?\n", + "\n", + "### *Goals*\n", + "Adapun tujuan yang ingin dicapai dari kasus ini adalah sebagai berikut:\n", + "- Menghasilkan model predictive analysis yang dapat digunakaan untuk menentukan harga rumah\n", + "- Mengetahui cara kerja model predictive analysis dalam menentukan harga rumah\n", + "- Menghasilkan evaluasi model yang telah dibuat untuk menentukan harga rumah\n", + "\n", + "### *Solution Statements*\n", + "Adapun beberapa cara yang akan digunakan untuk menyelesaikan masalah tersebut adalah:\n", + "- Menggunakan algoritma KNN dengan metriks akurasi MSE (Mean Squared Error)\n", + "- Menggunakan algoritma KNN dengan metriks akurasi RMSE (Root Mean Squared Error)\n", + "- Menggunakan algoritma Random Forest dengan metriks akurasi MSE (Mean Squared Error)\n", + "- Menggunakan algoritma Random Forest dengan metriks akurasi RMSE (Root Mean Squared Error)\n", + "- Menggunakan algoritma Boosting Algorithm dengan metriks akurasi MSE (Mean Squared Error)\n", + "- Menggunakan algoritma Boosting Algorithm dengan metriks akurasi RMSE (Root Mean Squared Error)\n", + "\n", + "## **Data Understanding**\n", + "---\n", + "\n", + "dataset yang berisi lebih dari 300.000 data dengan 26 variabel yang merepresentaikan harga rumah yang diperdagangkan antara tahun 2009 sampai 2018 [(Truong, Q. et al., 2020)](https://www.sciencedirect.com/science/article/pii/S1877050920316318). Variabel ini yang nantinya digunakan sebagai fitur pada dataset yang akan digunakan untuk memprediksi harga rata rata masing masing rumah per meter [(Truong, Q. et al., 2020)](https://www.sciencedirect.com/science/article/pii/S1877050920316318). Pada dataset tersebut masing-masing data terdapat 26 fitur yang terdiri dari\n", + "> - ***'url'***: URL saat fetch data\n", + "- ***'id'***: Id transaksi\n", + "- ***'Lng'***: Longitudinal coordinates\n", + "- ***'Lat'***: Latitude coordinates\n", + "- ***'Cid'***: Id komunitas\n", + "- ***'tradeTime'***: Waktu transaksi\n", + "- ***'DOM'***: Waktu saat di market sebelum rumah terjual (Days on Market)\n", + "- ***'followers'***: Jumlah orang mengikuti transaksi\n", + "- ***'totalPrice'***: Harga total\n", + "- ***'price'***: Harga rata-rata per meter\n", + "- ***'square'***: Luas rumah\n", + "- ***'livingRoom'***: Total ruang tamu\n", + "- ***'drawingRoom'***: Total ruang gambar\n", + "- ***'kitchen'***: Total ruang dapur\n", + "- ***'bathroom'*** Total kamar mandi\n", + "- ***'floor'***: Total lantai\n", + "- ***'buildingType'***: Jenis bangunan rumah\n", + " - Tower( 1 )\n", + " - Bungalow( 2 )\n", + " - Combination of plate and tower( 3 )\n", + " - Plate( 4 )\n", + "- ***'constructionTime'***: Waktu konstruksi\n", + "- ***'renovationCondition'***: Kondisi renovasi\n", + " - other( 1 )\n", + " - rough( 2 )\n", + " - Simplicity( 3 )\n", + " - hardcover( 4 )\n", + "- ***'buildingStructure'***: Struktur bangunan \n", + " - unknown( 1 )\n", + " - mixed( 2 )\n", + " - brick and wood( 3 )\n", + " - brick and concrete( 4 )\n", + " - steel( 5 )\n", + " - steel-concrete composite ( 6 )\n", + "- ***'ladderRatio'***: Rasio penghuni yang sama satu lantai dengan jumlah elevator/ tangga\n", + "- ***'elevator'***: Ketersediaan elevator\n", + " - have ( 1 )\n", + " - not have elevator( 0 )\n", + "- ***'fiveYearsProperty'***: Apakah rumah sudah berdiri selama 5 tahun atau tidak \n", + " - less than 5 years( 0 )\n", + " - more than 5 years( 1 )\n", + "\n", + "### *Exploratory Data Analysis*\n", + "\n", + "#### **Variable Description**\n", + "Variable description merupakan proses investigasi awal pada data untuk menganalisis karakteristik, menemukan pola, anomali, dan memeriksa asumsi pada data [(Dicoding, 2022)](https://dicoding.com). Salah satu contoh variable description adalah dengan menganalisa jenis tipe data masing masing feature. Dengan menganalisis tipe data peneliti dapat mengecek bagaimana sifat fitur fitur tersebut karena terkadang terdapat fitur tidak tepat. Dengan mengecek tipe data masing masing fitur peneliti akan lebih mengenal dataset tersebut.\n", + "\n", + "#### **Removing Null Value**\n", + "Agar model memiliki akurasi yang optimal, pengecekan nilai Null merupakan hal yang penting. Dikarenakan model akan menghitung semua data tanpa peduli nilai data tersebut apa, maka dari itu diperlukan untuk menghapus data yang kosong / Null karena model hanya bisa menghitung/memprediksi berdasarkan angka / nilai.\n", + "\n", + "Pada dataset ini terdapat **lebih dari 150.000 data** yang berisi null. Maka dari itu diperlukan tindakan untuk membuang data kosong tersebut. Lalu setelah menghilangkan data Null tersebut, jumlah dataset menjadi setengahnya yaitu **± 150.000 data**\n", + "\n", + "#### **Univariate Analysis**\n", + "\n", + "Univariate Analysis merupakan analisis yang digunakan pada satu variabel dengan tujuan untuk mengetahui dan mengidentifikasi karakteristik dari variabel tersebut [(Yuvalianda, 2020)](https://yuvalianda.com/analisis-univariat/). Dengan melakukan univariate analisis membuat peneliti dapat melihat mengenai distribusi pada salah satu variable tersebut sehingga akan bisa mencegah adanya bias/unfair data. Dibawah ini merupakan salah satu contoh univariate analisis pada fitur buildingType\n", + "\n", + "
\n", + "\n", + "\n", + "Univariate Analysis pada Fitur buildingType\n", + "
\n", + "\n", + "Dapat dilihat bahwa pada fitur buildingType distribusi datanya cenderung pada \"plate\" sehingga besar kemungkinan jika membuat model klasifikasi berdasarkan buildingType, maka plate akan menjadi hasil yang paling dominan. Maka dari itu peneliti harus menyamakan semua data agar distribusi datanya lebih rata\n", + "\n", + "#### **Multivariate Analysis**\n", + "Multivariate Analysis adalah salah satu jenis EDA yang menunjukkan hubungan antara dua atau lebih variabel pada data [(Dicoding, 2022)](https://dicoding.com). Multivariate EDA yang menunjukkan hubungan antara dua variabel biasa disebut sebagai bivariate EDA [(Dicoding, 2022)](https://dicoding.com). Berikut merupakan adalah multivariate analysis dari dataset \"House in Beijing\":\n", + "\n", + "
\n", + "\n", + "\n", + "Multivariate Analysis \"House in Beijing\"\n", + "
\n", + "\n", + "Dilihat dari grapik tersebut terdapat korelasi antara price dan totalPrice. Lalu terdapat kolerasi juga antara square dan price. Selain itu, bathRoom, livingRoom, drawingRoom memiliki korelasi terhadap square. Maka dari itu peneliti dapat lebih fokus menggunakan fitur fitur yang penting tersebut untuk pembuatan model kedepannya \n", + "\n", + "#### **Mengatasi Outliers**\n", + "Outliers adalah nilai yang anomali dengan rata rata nilai lainnya. Dalam model, nilai outliers jika dibiarkan akan membuat model susah untuk memproses dan menghasilkan akurasi yang kurang maksimal. Maka dari itu perlu pengecekan apakah ada outliers dalam dataset, jika ada maka perlu tindakan untuk menghilangkan outliers tersebut. \n", + "\n", + "Berikut merupakan grafik yang digunakan untuk memvisualisasikan data outliers pada fitur totalPrice. Titik titik disisi kanan merepresentasikan data outliers yang ada\n", + "\n", + "
\n", + "\n", + "\n", + "Visualisasi Outliers pada Fitur totalPrice\n", + "
\n", + "\n", + "Dalam proses mendeteksi data outliers terdapat 3 metode yaitu:\n", + "\n", + "* Hypothesis Testing\n", + "* Z-score method\n", + "* IQR Method\n", + "\n", + "Pada kasus ini, metode yang digunakan adalah metode IQR. Metode IQR (Inter Quartile Range) adalah salah satu metode pendeteksian outliers dengan memanfaatkan kuartil dalam data. Cara kerjanya adalah pertama dataset akan dibagi menjadi 4 bagian dengan dibagi oleh 3 quartil. Hal tersebut dilakukan untuk mengetahui distribusi masing masing data. Dengan adanya hal tersebut data yang berada diantara kuartil pertama (Q1) sampai kuartil ketiga (Q3) pasti merupakan distribusi terbanyak pada dataset sehingga data yang berada diluar kuartil tersebut dianggap sebagai data outliers yang patut untuk dibuang. Dengan demikian interquartile range atau IQR = Q3 - Q1 [(Dicoding, 2022)](https://dicoding.com).\n", + "\n", + "Dalam dataset tersebut, setelah melakukan pengecekan outliers terdapat data outliers sekitar **15.000 data outliers**. Maka dari itu diperlukan pembuangan data tersebut dari dataset.\n", + "\n", + "## **Data Preparation**\n", + "---\n", + "Pada data preparation, terdapat dua metode yang digunakan yaitu\n", + "* **Pembagian dataset**\n", + " \n", + " Pembagian dataset merupakan salah satu tindakan yang sangat diperlukan untuk mengetest apakah model sudah memiliki tingkat akurasi sesuai yang diharapkan atau tidak\n", + "* **Standarisasi**\n", + "\n", + " Standarisasi digunakan untuk memudahkan model dalam memproses dataset. Dengan melakukan standarisasi , model dapat memproses lebih cepat dan lebih akurat tanpa kehilangan nilai dalam dataset. Dalam dataset ini terdapat fitur yang memiliki nilai terlalu tinggi, yaitu pada fitur price dan totalPrice. Maka dari itu sebelum membuat model perlu dilakukan standarisasi terlebih dahulu\n", + "\n", + "Dalam kasus ini, **tidak ada proses Reduction Dimention** dikarenakan setelah melihat Multivariate Analysis diatas, hanya sedikit fitur yang saling berkolerasi, fitur tersebut adalah totalPrice dan price yang mana tidak mungkin untuk dijadikan satu dimensi karena totalPrice merupakan target dan price merupakan fitur. Berikut merupakan coding yang dilakukan untuk membagi dataset dan standarisasi dataset\n", + "\n", + "
\n", + "\n", + "\n", + "Statistik Deskriptif Setelah Standarisasi\n", + "
\n", + "\n", + "## **Modeling**\n", + "---\n", + "Dalam modeling, algoritma yang digunakan terdapat 3 antara lain: \n", + "* K-Nearest Neighbor\n", + "* Random Forest\n", + "* Boosting Algorithm\n", + "\n", + "Adapun kelebihan dan kekurangan masing masing algoritma tersebut antara lain\n", + "\n", + "
\n", + "\n", + "| No | Algoritma | Kelebihan | Kekurangan\n", + "| --- | --- | --- | --- |\n", + "| 1 K-Nearest Neighbor | Simpel | Sensitif terhadap data outliers\n", + "| | Hampir tidak ada asumsi data | komputasi yang mahal (tergantung jumlah n)\n", + "| | Tidak ada re-training | Waktu komputasi besar(tergantung jumlah n)\n", + "| 2 Random Forest | Tingkat akurasi tinggi | Komputasi yang mahal\n", + "| | Tidak mudah overfit | Sulit untuk diintrepertasikan\n", + "| | Tidak terlalu sensitif terhadap data outliers | Waktu komputasi besar\n", + "| 3 Boosting Algorithm | Simple | Sensitif terhadap data outliers\n", + "| | Cukup bagus dalam genralisasi | Butuh estimator yang besar\n", + "| | Bagus dalam mengurangi bias dan variance | Waktu komputasi besar\n", + "\n", + "Tabel Kekurangan dan Kelebihan Algoritma KNN, RF, dan AdaBoost\n", + "
\n", + "\n", + "### *K-Nearest Neighbor*\n", + "KNN adalah salah satu algoritma yang sering digunakan dalam menyelesaikan masalah regresi dan klasifikasi. KNN sendiri bekerja dengan memperhitungkan tiap tiap data berdasarkan jarak dengan data tertentu. Pertama KNN akan menentukan secara acak data awal sebanyak n yang digunakan untuk mewakili kelas tertentu lalu setelah dipilih semua data yang mewakili n kelas, KNN akan mengecek satu satu jarak data dengan data awal tersebut, jarak yang dekat dengan kelas x akan dianggap sebagai kelas x\n", + "\n", + "Dalam kasus ini, KNN digunakan untuk menyelesaikan masalah regresi. Untuk parameternya sendiri menggunakan ***n_neigbors = 10***. Sehingga terdapat 10 data yang akan dipilih secara acak untuk mewakili tiap tiap kelas\n", + "\n", + "### *Random Forest*\n", + "Random forest adalah pengembangan decision tree yang mana memilih secara acak tree yang ada sebanyak n lalu dipilih tree yang paling bagus akurasinya. Random forest juga dapat menangani masalah regresi dan klasifikasi. Pada model ini menggunakan beberapa parameter untuk mengatur kinerja Random Forest antara lain : \n", + "> - n_estimators = 50 \n", + "- max_depth = 16\n", + "- random_state = 55\n", + "- n_jobs = -1\n", + "\n", + "> Keterangan\n", + "- n_estimators = Banyaknya tree yang dibuat \n", + "- max_depth = Kedalaman maksimal masing masing tree\n", + "- random_state = Sebuah konstanta yang digunakan untuk menentukan pengacakan\n", + "- n_jobs = Jumlah pekerjaan yang dikerjakan dalam satu waktu\n", + "\n", + "### *Boosting Algorithm*\n", + "\n", + "Boosting Algorithm adalah algoritma yang terdiri dari beberapa model yang bekerja secara bersama-sama dan model dilatih secara berurutan atau dalam proses yang iteratif akan memboost atau meningkatkan algoritma sebelumnya [(Dicoding, 2022)](https://dicoding.com). Dalam Boosting Algorithm terdiri dari beberapa algoritma yang saling terkait. Adapun parameter yang digunakan adalah\n", + "> - learning_rate = 0.05\n", + "- random_state = 55\n", + "\n", + "> Keterangan\n", + "- learning_rate = Sebuah konstanta yang digunakan untuk menentukan besar kecilnya proses belajar\n", + "- random_state = Sebuah konstanta yang digunakan untuk menentukan pengacakan\n", + "\n", + "### *Kesimpulan*\n", + "\n", + "
\n", + "\n", + "| | KNN | RF | Boosting\n", + "| -- | -- | -- | --\n", + "| MSE | 6.80438 | 0.172762 | 3379.780709\n", + "\n", + "Tabel MSE Hasil Train\n", + "
\n", + "\n", + "Berdasarkan matriks MSE, didapat model yang paling baik adalah **Random Forest** dengan nilai MSE terkecil mencapai **0.172762**\n", + "\n", + "## **Evaluation**\n", + "---\n", + "Dalam menentukan model mana yang terbaik akurasinya, perlu diperhatikan terlebih dahulu metriks apa yang digunakan. Antara kasus regresi dan klasifikasi terdapat masing masing matriks. Dalam kasus kali ini, model dibuat untuk menyelesaikan kasus regresi maka dari itu metriks yang digunakan antara lain \n", + "> * MSE (Mean Square Error)\n", + "* RMSE (Root Mean Square Error)\n", + "* MAE (Mean Average Error)\n", + "\n", + "Namun pada model ini menggunakan 2 metriks yaitu **MSE dan RMSE**. Semua matriks regresi pada umumnya memiliki cara kerja yang sama yaitu menghitung nilai error. Nilai errornya sendiri didapat berdasarkan pada masing masing matriks namun secara umum nilai error didapat dari nilaiBenar - nilaiPrediksi . Jika nilai prediksi semakin mendekati nilai benar maka nilai error pun akan semakin kecil (mendekati 0). \n", + "\n", + "Pada matriks MSE (Mean Square Error) nilai error didapatkan dari mengkuadratkan terlebih dahulu lalu baru di rata rata. Berikut merupakan MSE yang jika dinotasikan dalam matematika\n", + "\n", + "
\n", + "\n", + "
\n", + "\n", + "Sedangkan pada matriks RMSE (Root Mean Square Error) nilai error didapat sama sepert MSE namun setelah itu diakarkan. Berikut merupakan RMSE yang jika dinotasikan dalam matematika\n", + "\n", + "
\n", + "\n", + "
\n", + "\n", + "Dari kedua matriks tersebut didapatkan tingkat error pada masing masing algoritma sebagai berikut\n", + "\n", + "
\n", + "\n", + "| | Matrik | Algoritma | train | test\n", + "| -- | :-- | --: | :--: | :--:\n", + "| 1 MSE | KNN | 0.006804 | 0.009395\n", + "| | RF | 0.000173 | 0.000573\n", + "| | Boosting | 3.379781 | 3.464695\n", + "| 2 RMSE | KNN | 0.002609 | 0.003065\n", + "| | RF | 0.000416 | 0.000757\n", + "| | Boosting | 0.058136 | 0.058862\n", + "\n", + "Tabel MSE Hasil Train dan Testing\n", + "
\n", + "\n", + "Jika disimpulkan maka dapat diambil kesimpulan bahwa model **Random Forest** dengan matrik MSE lah yang menjadi model terbaik karena MSE yang didapat mencapai ***0.000173***\n", + "\n", + "\n", + "## **Daftar Pustaka**\n", + "---\n", + "1. Truong, Q., Nguyen, M., Dang, H., & Mei, B. (2020). Housing price prediction via improved machine learning techniques. *Procedia Computer Science*, 174, 433-442.\n", + "2. Dicoding, A. (2022). *Machine Learning Terapan*. Dicoding Academy. https://dicoding.com\n", + "3. Yuvalianda. (2020). *Analisis Univariat: Pengertian, Manfaat, Hingga Contoh Lengkap*. https://yuvalianda.com/analisis-univariat/\n" + ], + "metadata": { + "id": "sMQV5nPrxWNw" + } + } + ] +} \ No newline at end of file