Code Monkey home page Code Monkey logo

symphoen1x / dicoding_expert Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 2.95 MB

Ini adalah dokumentasi proyek pertama di kelas expert dari hasil dari partisipasi beasiswa pelatihan skill IT yang bernama IDCamp. IDCamp adalah program yang diselenggarakan oleh Indosat Ooredoo Hutchison untuk untuk mencetak developer muda Indonesia yang siap bersaing di dunia digital nasional.

Home Page: https://idcamp.ioh.co.id/

Jupyter Notebook 100.00%
machine-learning teknologi

dicoding_expert's Introduction

Project Predictive Analytics By Isa Aulia Almadani Prediksi Harga Jual Mobil dengan Machine Learning

Domain Proyek

Dalam industri otomotif, harga jual mobil ditentukan oleh banyak faktor seperti merek, model, tahun produksi, spesifikasi mesin, transmisi, dimensi kendaraan dan lain-lain. Beberapa fitur tertentu memiliki pengaruh yang besar terhadap penetapan harga jual dibanding fitur lainnya. Pemahaman mengenai fitur-fitur utama penentu harga sangatlah penting bagi para produsen maupun dealer mobil dalam menentukan strategi penetapan harga yang optimal.

Dengan memanfaatkan data histori harga jual dan spesifikasi mobil, sistem predictive modelling dapat dibangun untuk memprediksi harga jual mobil berdasarkan fitur-fitur tertentu menggunakan machine learning. Teknik Machine Learning dapat dimanfaatkan dalam melakukan prediksi harga mobil bekas agar menghasilkan akurasi yang cukup baik [1].

Beberapa algoritma machine learning yang dapat digunakan antara lain random forest, K-Nearest Neighbors (KNN), dan Boosting. Sebuah Penelitian memperkuat gagasan tersebut bahwa Random Forest yang digunakan dalam permodelan kasus prediksi mampu menghasilkan prediksi harga jual mobil bekas dengan akurasi yang baik [2]. Selian itu, penggunaan modelling K-Nearest Neighbors menghasilkan performa paling bagus dengan adanya set hyper parameter tunning neighbors [3]. Pada modelling dengan algorimta boosting juga menunjukkan bahwa algoritma tersebut dengan kombinasi parameter yang optimal terbukti mampu meningkatkan akurasi prediksi dibandingkan model dasar [4].

Kesimpulan yang didapat bahwa penggunaan ketiga algoritma di atas sebagai solusi dalam membangun model prediksi. Model tersebut diharapkan dapat membantu produsen dalam menentukan harga yang kompetitif di pasar dan dealer mobil dalam merumuskan strategi penetapan harga yang optimal.

Business Understanding

1. Problem Statements

Berdasarkan latar belakang yang telah diuraikan sebelumnya, perusahaan akan mengembangkan sebuah sistem predictive modelling untuk menjawab dua permasalahan berikut:

  • Apa fitur-fitur yang paling berpengaruh terhadap harga jual mobil?
  • Berapa estimasi harga jual mobil berdasarkan fitur-fitur yang paling berpengaruh?

2. Goals

Berdasarkan problem statments yang sudah teruraikan di atassss bahwa tujuan atau goalsnya sebagai berikut:

  • Mengetahui fitur-fitur yang memiliki pengaruh erat terhadap harga jual.
  • Membuat model machine learning yang dapat memprediksi estimasi harga jual mobil secara akurat berdasarkan fitur-fitur yang berpengaruh erat disertai bukti kuat.

3. Solution Statemnet

Untuk kedua problem statemnetsdi atas, solusi yang akan digunakan sebagai berikut:

  • Membangun model prediksi untuk memperkirakan estimasi harga jual mobil berdasarkan harga_jual menggunakan algoritma machine learning, yakni K-Nearest Neighbor(KNN). Model yang dibangun dengan Algoritma tersebut menggunakan teknik Grid Search untuk mencapai performa yang diinginkan
  • Menggunakan algoritma machine learning Random Forest (Bagging Algorithm) dengan menyesuaikan beberapa parameter melalui optimasi teknik Grid Search hingga mencapai performa yang optimal.
  • Menggunakan algoritma machine learning AdaBoost (Bossting algotithm) dengan menyesuaikan beberapa parameter melalui optimasi teknik hyperparameter tunning(Grid Search) hingga mencapai performa yang optimal.

4. Metodologi

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 mobil sebagai variabel target(dependent variable) dan fitur-fitur utama mobil sebagai variabel prediktor(independent variabel).

Data Understanding

Proyek ini menggunakan dataset yang memiliki 11.913 baris dan 16 kolom. Fitur-fitur di dalamnya terdiri dari merek, model, tahun produksi, bahan bakar, dan fitur lain. Dataset ini digunakan untuk memprediksi harga jual mobil yang berada di USA dari tahun 1990-2018. Cara pengambilan dataset ini berdasarkan sumber pengelola menggunakan teknik Scraped dari Emunds dan Twitter[5.

Description variable

Variabel variabel yang ada dalam dataset sebagai berikut:

  • Make: Merek/manufaktur mobil (BMW, Acura, linkoln, dll). Variabel ini berjumlah 48 nilai unik dan bertipe data kategorikal.
  • Model: Model spesifik dari mobil (1 Series M, 1 Series, dll). Variabel ini memiliki nilai unik yang banyak sekali dengan jumlah 915 unit. Variabel ini bertipe data kategorikal.
  • Year: Tahun produksi mobil. Year/tahun produksi adalah Variabel dengan jumlah nilai unik sebanyak 28 dan variabel dengan tipe data numerik.
  • Engine Fuel Type: Jenis bahan bakar mesin (gasoline, diesel, etc). Variabel ini berjumlah 10 nilai unik dan bertipe data kategorikal.
  • Engine HP: Tenaga kuda mesin dalam satuan horsepower. Variabel ini memiliki nilai unik yang lumayan ybanyak dengan jumlah 356 unit. Variabel ini bertipe data numerik.
  • Engine Cylinders: Jumlah silinder mesin. Engine Cyliners/jumlah silinder pada mesin adalah Variabel dengan jumlah nilai unik sebanyak 9 dan variabel dengan tipe data numerik.
  • Transmission: Tipe transmisi (manual, auto, dll). Variabel ini berjumlah 5 nilai unik dan bertipe data kategorikal.
  • Type Driven_Wheels:Roda penggerak (rear wheel drive, all wheel drive ll). Driven Wheels atau roda penggerak adalah Variabel dengan jumlah nilai unik sebanyak 4 dan variabel dengan tipe data numerik.
  • Number of Doors: Jumlah pintu mobil. Variabel ini berjumlah 3 nilai unik dan bertipe data numerik.
  • Market Category: Kategori pasar mobil (Factory Tuner,Luxury,High-Performance, Luxury, dll). Variabel ini memiliki nilai unik yang cukup banyak dengan jumlah 71 unit. Variabel ini bertipe data kategorikal.
  • Vehicle Size: Ukuran mobil (Compact, midsize, dll). Vehicle Size/ukuran mobil adalah Variabel dengan jumlah nilai unik sebanyak 3 dan variabel dengan tipe data kategorikal.
  • Vehicle Style: Gaya/model mobil (Coupe, Convertible, dll). Variabel ini berjumlah 16 nilai unik dan bertipe data kategorikal.
  • highway MPG: Jarak tempuh per galon di jalan tol. Variabel ini berjumlah 59 nilai unik dan bertipe data numerik.
  • city mpg: Jarak tempuh per galon di perkotaan. Variabel ini memiliki nilai unik yang cukup banyak dengan jumlah 69 unit. Variabel ini bertipe data numerik.
  • Popularity: Tingkat popularitas mobil. Ini adalah Variabel dengan jumlah nilai unik sebanyak 48 dan variabel dengan tipe data numerik.
  • MSRP: Harga jual yang disarankan produsen. Ini adalah variabel target(dependent variable) yang akan diprediksi dalam project ini.

Data Gathering dan Data Loading

Dataset yang awalnya tersimpan di luar environment colab(repository github) diimport, lalu dibaca dengan teknik read_csv melalui Pandas Library. DataFrame inilah yang nanti digunakan dalam prose modeling. Berikut adalah tabel datafrmae yang mengandung informasi awal dataset.

Tabel 1. Dataset yang dibentuk menjadi DataFrame di Environment Colab

index Make Model Year Engine Fuel Type Engine HP Engine Cylinders Transmission Type Driven_Wheels Number of Doors Market Category Vehicle Size Vehicle Style highway MPG city mpg Popularity MSRP
0 BMW 1 Series M 2011 premium unleaded (required) 335.0 6.0 MANUAL rear wheel drive 2.0 Factory Tuner,Luxury,High-Performance Compact Coupe 26 19 3916 46135
1 BMW 1 Series 2011 premium unleaded (required) 300.0 6.0 MANUAL rear wheel drive 2.0 Luxury,Performance Compact Convertible 28 19 3916 40650
2 BMW 1 Series 2011 premium unleaded (required) 300.0 6.0 MANUAL rear wheel drive 2.0 Luxury,High-Performance Compact Coupe 28 20 3916 36350
3 BMW 1 Series 2011 premium unleaded (required) 230.0 6.0 MANUAL rear wheel drive 2.0 Luxury,Performance Compact Coupe 28 18 3916 29450
4 BMW 1 Series 2011 premium unleaded (required) 230.0 6.0 MANUAL rear wheel drive 2.0 Luxury Compact Convertible 28 18 3916 34500
5 BMW 1 Series 2012 premium unleaded (required) 230.0 6.0 MANUAL rear wheel drive 2.0 Luxury,Performance Compact Coupe 28 18 3916 31200

Exploratory Data Analysis or (EDA)

EDA merupakan proses fundamental dalam analytics untuk memahami dan mengeksplorasi data sebelum melakukan modelling. EDA sangat diperlukan dalam analisis karena membantu menghasilkan model yang akurat. Pada proses EDA kali ini, terdapat lima tahapan yang akan dilakukan, yaitu Check characteristic data, Data Assesing, Data Cleaning, Univariate Analysis, dan Multivariate Analysis.

Check characteristic data

Pada tahap ini, data akan dilihat statistik ssecara umun, singkat, dan informatif. Tujuanya memberikan ringkasan statistik deskriptif dari DataFrame df_early. Ini mencakup statistik seperti mean, median, kuartil atas 75%, kuartil tengah 50%, kuartil bawah 25%, standar devisiasi, nilai maksimum, dan nilai minimum untuk setiap kolom yang berisi data numerik. Ini adalah langkah awal yang diperlukan dalam eksplorasi dan pemahaman terhadap dataset/dataframe menggunakan metode describe(). Count adalah jumlah sampel pada data.

Data Assesing

Data Assesing adalah proses evaluasi dan analisis awal terhadap data untuk memahami karakteristiknya, kualitasnya, dan potensi masalahnya sebelum melakukan analisis lebih lanjut. Pada tahap ini, terdapat tahapan-tahapan yang akan dilakukan secara perinci seperti mengecek missing or null values, mengecek duplikasi data dalam baris, dan mendeteksi outliers.

  • Checking the missing or null values Proses ini melibatkan pengecekan apakah ada nilai yang hilang atau null dalam dataset. Nilai yang hilang dapat mengganggu analisis data karena dapat menyebabkan bias atau kesalahan dalam hasil analisis. Oleh karena itu, penting untuk mengidentifikasi di mana nilai-nilai tersebut hilang dan memutuskan bagaimana cara menangani mereka. Dengan menggunakan bantuan metode isna() yang dijumlahkan, hasil terlihat bahwa terdapat missing value pada kolom Engine Fuel Type sebayak 3 sel, Engine HP sebanyak 69 sel, Engine Cylinders 30 sebanyak 30 sel, Number of Doors sebanyak 6 sel, dan Market Category sebanyak 3742 sel. image

    Gambar 1. Visualisasi missing value dengan bantuan library seaborn.

    Berdasarkan Gambar 1, terlihat jelas pada bintik-bintik yang linear dengan nama-kolom mengandung missing value.

  • Checking the duplicate rows Tahap ini bertujuan untuk melihat apakah ada baris data yang identik atau duplikat dalam dataset? Duplikasi data bisa menjadi masalah karena mereka dapat memengaruhi hasil analisis statistik dengan memberikan bobot tambahan pada observasi yang sama. Mengidentifikasi dan menghapus duplikasi dapat membantu Memastikan keakuratan analisis data dan mencegah distorsi dalam hasil. Pada notebook, proses ini menggunakan beberapa metode dari library pandas seperti shape untuk melihat ukuran data dari baris dan kolom, duplicated() untuk melihat data-data yang terduplikasi, dan count() untuk menghitung keseluruhan data dalam baris. Hasil/output yang muncul didapat kesimpulan bahwa jumlah data yang terduplikasi adalah 715 data dari seluruh kolom yang berjumlah 16. Kemudian, visualisasi jumlah data dari setiap kolom digunakan untuk melihat perbedaan sebelum kolom yang terduplikasi dihapus dan sebagai bukti berhasil atau tidaknya proses tersebut.

  • Detecting Outliers Outliers adalah nilai yang menonjol secara statistik berbeda dari mayoritas nilai dalam dataset. Mereka dapat menyebabkan bias dalam analisis statistik atau model yang dibangun dari data tersebut. Outliers juga dapat mengakibatkan testing model menghasilkan overfitting atau underfitting. Maka dari itu, proses ini sangat dibutuhkan. Dengan menggunakan library seaborn dengan methodnya boxplot(), parameter di dalamnya dapat disi dengan kolom numerik dari dataset yang digunakan. outliers

    Gambar 2. Salah satu contoh visualisasi keberadaan outlier dari kolom Engine HP.

    Berdasarskan visualisasi pada gambar 2, terlihat bahwa terdapat beberapa fitur numerik yang mengandung outlier. Nantinya, Outlier-outlier tersebut akan dihapus menggunakan teknik atau metode IQR.

Data Cleaning

Data Cleaning adalah proses pembersihan data yang bertujuan untuk memastikan kualitas dan konsistensi data sebelum dilakukan analisis lebih lanjut. Tujuan utamanya adalah untuk menghilangkan masalah atau gangguan dalam dataset yang dapat memengaruhi hasil analisis statistik atau pembangunan model. Pada tahap ini akan dilakukan beberapa proses seperti Renaming the columns, Dropping the missing or null values, Dropping the duplicated rows, dan Handling the outliers. Berikut implemetasi dan hasil yang didapat:

  • Renaming the columns: Kenapa proses ini diperlukan? Karena pada awalnya, penolahan dataset tidak selamanya melakukan renaming kolom-kolom dengan bahasa yang pasti sesuai dengan kebutuhan bisnis. Maksudnya, penamaan kolom-kolom tersebut bisa jadi mengikuti aturan tertentu sehingga terkesan umun. Meskipun bersifat opsional, proses tersebut dibutuhkan dalam project ini utnuk mengubah kolom MRSP menjadi Harga Jual.

  • Dropping the missing or null values Berasarkan tahap sebelumnya, teradapat beberapa missing value yang dapat mengganggu proses analisis dan pembuatan prediktif model. Maka perlu adanya tindakan lebih lanjut untuk menangani keberadaanya, yaitu menghapus missing value. Teknik yang akan digunakan adalah metode dropna() dari library pandas.

    Hasilnya kolom-kolom yang bermasalah seperti Engine Fuel Type sebayak 3 sel, Engine HP sebanyak 69 sel, Engine Cylinders 30 sebanyak 30 sel, Number of Doors sebanyak 6 sel, dan Market Category sebanyak 3742 sel berhasil dibersihkan. clean

    Gambar 3. Gambar untuk menunjukkan hasil dari proses cleaning data.

    Berdasarkan Gambar 3, perbedaan yang dapat dibandingkan dengan gambar sebelumnya bahwa Gambar 3 terlihat bersih.

  • Dropping the duplicated rows Terlihat di tahap sebelumnya bahwa terdapat data yang terduplikasi. Kali ini, proses lanjutan akan dilakukan untuk mengurangi gangguan yang ada pada data karena jumlahnya yang besar. Dengan menggunakan metode drop_duplicates() dari library pandas ke dataset ini proses menghapus duplikasi data dalam baris berhasil dilakukan. Bukti menunjukkan bahwa jumlah data dalam baris berkurang dari yang awalnya 11914 menjadi 7735.

  • Handling the outliers Berdasarkan visualisasi keberadaan outlier di tahap sebelumnya, proses ini penting untuk dilakukan agar akurasi model yang dilatih tidak terpengaruh secara signifikan. Teknik yang akan digunakan seperti yang sudah disinggung sebelumnya, yaitu IQR. Teknik ini mengidentifikasi outlier yang ada dibatas atas Q3 dan dibatas bawah atau Q1. Lalu, nilai-nilai yang ada di dalam batas akan digunakan sementara yang di luar kedua batas atau outlier akan dihapus. Formula yang lebih jelas untuk IQR sebagai berikut: $Batas\ bawah = Q1 - 1.5 * IQR$ dan $Batas\ atas = Q3 + 1.5 * IQR$. Berdasarkan proses perhitungan dengan rumus di atas untuk setiap data, hasil yang terlihat adalah pengurangan jumlah data dalam baris yang sebelumnya berjumlah 7735 menjadi 5622 dalam bentuk tabel sederhana dengan bantuan metode info().

Exploratory Data Analysis -Univariate Analysis

Kenapa Univariate Analysis? Jadi tujuan melakukan analysis ini untuk memahami karakteristik dari satu variabel tunggal dalam dataset tanpa ada memperhatikan hubungan variabel lain. Tahap kali ini, Univariate analysis dilakukan dengan memisah categorical feature dengan numerical features.

  • Categorical Features (Fitur Kategorik) Proses awal pemisahan kedua fitur menggunakan bantuan metode select_dtypes dengan parameter include untuk categorical features. Lalu, cara memvvisualisasikan fitur ini secara univariate dapat dilakukan dengan bantuan metode histogram dari library plotly. Berikut ini adalah salah satu gambar yang dapat dijadikan sampel output. newplot

    Gambar 5. Visualisasi univariate pada kolom Make atau Merek.

    Berdasarkan Gambar 5, TOp 5 merek mobil yang paling banyak jumlahnya, yaitu Chevrolet, Volkswagen, Cadillac, Infiniti, dan Nissan.

  • Numerical Features (Fitur Numerik) Pada Numerical Features, proses pemisahan menggunakan metode select_dtypes dengan parameter exclude untuk melakukan pemilihan tipe data. Cara memvvisualisasikan fitur ini secara univariate dapat dilakukan dengan metode histogram dari library plotly. Berikut ini adalah visualisasi univariate dari kolom-kolom numerik. multivariate

    Gambar 6. Visualisasi univariate analisis pada kolom numerik.

    Berdasarkan Gambar 6, histogram pada variabel "Harga_Jual", "highwat MPG", "Engine HP" dan "city mpg" memiliki beberapa karakteristik seperti:

  • Peningkatan harga jual mobil terdistribusi dengan cukup baik. Hal ini dapat dilihat pada histogram dari keempat kolom tersebut yang mana sampel cenderung meningkat, lalu mengalami penurunan seiring dengan meningkatnya harga jual rumah.

  • Distribusi harga cenderung cukup normal. Hal ini kemungkinan besar akan berimplikasi pada model.

Exploratory Data Analysis -Multivariate Analysis

Multivariate Analysis adalah analisis yang memperlihatkan korelasi atau hubungan dua atau lebih variabel. Analysis ini bertujuan untuk memahami hubungan antara dua atau lebih variabel dalam sebuah dataset. Seperti analysis sebelumnya, kali ini juga melakukan pemisahan antara numerical feature dan categorical feature. Nantinya, masing masing feature tersebut akan dianalisis terhadap variabel target, yaitu Harga_Jual.

  • Categorical Features Cara memvisualisasikan fitur ini secara multivariate dapat dilakukan dengan bantuan metode histogram dari library plotly. Bedanya dengan analisis univariate adalah proses ini memasukkan dua parameter yang diperlukan, yaitu x yang berisi beberapa variabel independent dan y yang berisi variabel dependent atau target (Harga_Jual). Berikut ini adalah salah satu gambar yang dapat dijadikan sampel output. newplot (2)

    Gambar 7. Visualisasi multivariate Analisis pada kolom Veichle Size.

    Berdasarkan Gambar 7, fitur veichle Size terlihat bahwa pengaruh terhadap terhadap variabel target atau Harga_Jual bervariasi. Misalkan, pada bagian "Midsize" terlihat memiliki korelasi tertinggi dengan variabel target (Harga_Jual), sementara yang lain relatif sama.

  • Numerical Features Untuk mengamati hubungan antara fitur numerik, fungsi pairplot() akan digunakan. Proses mengobservasi hubungan antara fitur numerik dengan fitur target menggunakan fungsi corr(). Berikut adalah gambar dari kedua cara tersebut. real multivariate

    Gambar 8. Visualisasi multivariate pada numerical features dengan fungsi pairplot.

    Berdasarkan gambar 8, fungsi pairplot memberikan gambaran kumpulan fitur/multivariate fitur yang saling berkorelasi dan memperlihatkan distribusi data numerik. Fitur cmaps

    Gambar 9. Visualisasi multivariate pada numerical features dengan fungsi corr.

    Berdasarkan Gambar 9, fungsi corr memberikan sebuah Heatmaps dari beberapa fitur numerik yang saling berkorelasi dengan indikasi sebuah nilai antara -1 hingga 1. Kesimpulan yang bisa diambil berdasarkan kedua teknik tersebut pada numerical feature sebagai berikut:

  • Kolom yang memiliki korelasi tertinggi dengan variabel target(Harga_Jual) adalah Engine Hp dengan skor korelasi di atas 70%.

  • Dapat disimpulkan bahwa kolom-kolom yang berkorelasi sedang dengan variabel target Harga_Jual adalah higway MPG, city mpg, dan Engine Cylinders.

  • Dapat disimpulkan bahwa kolom-kolom yang berkorelasi rendah dengan variabel target Harga_Jual adalah Popularity, Year, dan Number of Doors. Lalu, kolom-kolom yang memiliki korelasi rendah ini nantinya akan dihapus karena dapat memengaruhi kinerja model dalam memprediksi variabel target Harga_Jual. Dengan menghapus kolom-kolom yang memiliki korelasi rendah, teknik dapat mengurangi dimensi fitur dan meningkatkan performa model dapat dilakukan dalam proses pembelajaran dan prediksi.

Data Preparation

Data preparation merupakan tahapan penting dalam proses pengembangan model machine learning. Ini adalah tahap di mana proses transformasi pada data akan dilakukan dengan menjadikan data ke bentuk yang cocok untuk proses pemodelan. Terdapat beberapa tahapan di dalamnya Encoding fitur kategori, Reduksi dimensi dengan PCA, proporsi dataset dengan fungsi train_test_split, dan Standardisasi.

Encoding Feature Category

Ini adalah proses mengubah fitur kategorikal atau kualitatif menjadi representasi numerik yang dapat dimengerti oleh algoritma machine learning. Fitur kategorikal adalah fitur yang memiliki nilai dalam kategori atau kelompok tertentu tanpa urutan yang terdefinisi. Proses ini menggunakan teknik one-hot-encoding dengan tujuan untuk mendapatkan fitur baru yang sesuai. Fitur baru ini nantinya dapat digunakan untuk mewakili fitur kategori.

Untuk teknik one-hot encoding ini, metode yang dibutuhkan adalah concat dan get_dummies dari library pandas. Berdasarkan Tabel 2, hasil yang akan dilihat sebagai tahap data preparation bagian Encoding fitur kategori sebagai berikut:

Tabel 2. Hasil dari proses Encoding Feature Category.

index Engine HP Engine Cylinders highway MPG city mpg Harga_Jual Make_Acura Make_Alfa Romeo Make_Audi Make_BMW Make_Buick Make_Cadillac Make_Chevrolet Make_Chrysler Make_Dodge Make_FIAT Make_GMC Make_Genesis Make_HUMMER Make_Honda Make_Hyundai
0 335.0 6.0 26 19 46135 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
1 300.0 6.0 28 19 40650 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
2 300.0 6.0 28 20 36350 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
3 230.0 6.0 28 18 29450 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
4 230.0 6.0 28 18 34500 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0

Reduksi Dimensi dengan PCA

Teknik reduksi (pengurangan) dimensi adalah prosedur yang mengurangi jumlah fitur dengan tetap mempertahankan informasi pada data. Teknik pengurangan dimensi yang paling populer adalah Principal Component Analysis atau disingkat menjadi PCA. Ia 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. Hal ini sangat penting karena jika dataset memiliki banyak fitur yang mempersulit analisis, hal tersebut dapat menyebabkan overfitting atau masalah lain.

PCA bekerja menggunakan metode aljabar linier. Teknik ini mengasumsikan bahwa sekumpulan data pada arah dengan varians terbesar merupakan yang paling penting (utama). PCA umumnya digunakan ketika fitur dalam data memiliki korelasi yang tinggi. Korelasi tinggi ini menunjukkan data yang berulang atau redundant.

Untuk mengetahui fitur-fitur yang memiliki korelasi tinggi, maka dapat didasarkan atas visualisasi dengan fungsi pairplot(). Gambar 8 yang telah ditunjukkan sebelumnya akan dijadikan acuan analisis dalam visualisasi ini untuk menentukan fitur mana yang cocok digunakan. Pada gambar tersebut fitur "highway MPG" terhadap fitur "city mpg" memiliki korelasi yang cukup baik dan mengandung informasi yang sama, yaitu luas distribusi berdasarkan fungsi pairplot().

pairplot keren

Gambar 10. Korelasi antara fitur yang memiliki pengaruh kuat dan mengandung informasi distribusi yang sama.

Berdasarkan Gambar 10, Fitur yang mencukupi syarat-syarat tersebut adalah fitur highway MPG dan city mpg. Kedua fitur ini nantinya akan disatukan untuk diambil nilai dimensi keduanya.

Selanjutnya akan dilakukan proses memanggil class PCA() dari library scikit-learn. Paremeter yang akan dimasukkan ke dalam class adalah n_components dan random_state. Parameter n_components merupakan jumlah komponen atau dimensi, berdasarkan Gambar 10 maka jumlah yang dimasukkan ada 2. Kemudian, akan muncul hasil berupa array yang merupaakn Principal Component (PC). PC pertama maksudnya informasi mengenai dua fitur di atas sebagian besar terdapat di PC tersebut, sementara sisanya terdapat di PC dua. Pc pertama ini mewakili dua fitur melalui sebuah variabel baru yang bernama "dimension". Berikut dataframe hasil proses PCA.

Setelah proses reduksi dengan PCA selesai, Tabel 3 akan menunjukkan bagaimana visualisasi datafrane untuk hasil akhir dari proses pengurangan dimensi PCA.

Tabel 3. Dataframe hasil akhri dari proses PCA

index Engine HP Engine Cylinders Harga_Jual Make_Acura Make_Alfa Romeo Make_Audi Make_BMW Make_Buick Make_Cadillac Make_Chevrolet Make_Chrysler Make_Dodge Make_FIAT Make_GMC Make_Genesis Make_HUMMER Make_Honda Make_Hyundai Make_Infiniti Make_Kia dimension
0 335.0 6.0 46135 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.117210
1 300.0 6.0 40650 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0.452164
2 300.0 6.0 36350 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1.072056

Train-Test-Split

Pada awalnya, proses scaling pada seluruh dataset membuat model memiliki informasi mengenai distribusi pada data uji. Informasi tentang data uji (yang seharusnya tidak dilihat oleh model) turut diikutsertakan dalam proses transformasi data latih. Oleh karena itu, proses scaling akan dilakukan secara terpisah antara data latih dan data uji. Pada tahap kali ini proses pembagian data menjadi data latih dan data uji dengan proporsi 80:20. Hasil yang muncul dari pembagian datadi atass, train data sejumlah 4497 dan test data sejumlah 1125 dari total 5622 sampel data. Proses ini dibantu oleh library sklearn dengan modul train_test_split.

Standardisasi

Standardisasi adalah teknik transformasi yang palingumunm digunakan dalam tahap persiapan pemodelan. Teknik ini digunakan untuk transformasi pada feature numerik. StandardScaler melakukan proses standardisasi 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, Tabel 4 menerapkan hasil teknikdi atass dilakukan melalui pada data latih. Kemudian, pada tahap evaluasi, standardisasi dilakukan pada data uji.

Tabel 4. Dataframe hasil akhir setelah proses standardisasi pada fitur numerik.

index Engine HP Engine Cylinders dimension
3465 -0.623736691170428 0.36597140250540167 -1.6271285525468915
5206 -0.03471025265858132 0.36597140250540167 -0.4812240283983712
11487 -0.3932480847962271 -1.0305270252135548 0.9545158750588465
10798 -1.0462991361897962 -1.0305270252135548 0.922708673076368
1020 -1.1359335942242075 -1.0305270252135548 1.4180144445216696

Berdasarkan output di atas, terlihat benar bukan bahwa standardisasi mengubah nilai mean menjadi 0 dan nilai standar devisiasi menjadi 1. Sekitar 68% dari nilai akan berada di antara -1 dan 1.

Model Devlopment

Proses kali ini menunjukkan penggunaan machine learning dengan beberapa Algoritma yang akan digunakan. Algoritma yang akan digunakan pada proses Model Devploment kali ini ada tiga, yaitu K-Nearest Neighbor, Random Forest, dan Boosting Algorithm. Sebelum itu, pembuatan DataFrame yang berisi ketiga algoritma di atas untuk membandingkan hasil prediksi terbaik perlu dibuat. Tidak lupa untuk menggunakan hyperparameter tuning GridSearch dari library scikit-learn dalam proses pelatihan model dengan kaetiga algoritma tersebut. Tujuanya untuk mengingkatkan performa model yang dilatih. Parameter ini nantinya dibutuhkan dalam mencari parameter terbaik dari masing masing algoritma yang dilakukan pelatihan.

Model Devlopment Menggunakan Algoritma K-Nearest Neighbor atau KNN

KNN adalah algoritma yang relatif sederhana dibandingkan dengan algoritma lain. Algoritma ini 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 ini cocok digunakan untuk kasus regresi dan klasifikasi dalam machine learning. Algoritma K-Nearest Neighbor (KNN) bekerja dengan cara mencari K tetangga terdekat data input baru berdasarkan jaraknya, lalu memprediksi output berdasarkan rata-rata output tetangga tersebut.

Kelebihan KNN:

  • Sederhana untuk diimplementasikan dan dimengerti.
  • Tidak memerlukan pelatihan model secara eksplisit.
  • Fleksibel dan dapat menangani data non-linear.

Kekurangan KNN:

  • Sensitif terhadap noisy data dan outlier.
  • Membutuhkan banyak memori untuk menyimpan seluruh data latih.
  • Prediksi dapat menjadi lambat karena perhitungan jarak untuk data latih yang besar.
  • Hasil sangat tergantung pada pemilihan nilai k atau jumlah tetangga terdekat yang dipertimbangkan model dan fungsi jarak yang digunakan.

Kali ini, modelling dengan Algoritma KNN akan menggunakan bantuan hyperparameter tuning untuk menemukan kombinasi nilai yang optimal terhadap parameter model tersebut agar nantinya dapa meningkatkan performa model. Proses awal penggunaan algortima ini dilakukan pemanggilan metode KNeighborsRegressor dari library scikit-learn. Kemudian, parameter yang digunakan di algoritma ini, yaitu n_neigbors. Parameter n_neighbors menentukan jumlah tetangga terdekat yang akan digunakan oleh model dalam melakukan permodelan. Semakin besar nilai n_neighbors, semakin banyak tetangga yang akan dipertimbangkan dan model cenderung overfitting. Semakin kecil nilai n_neighbors, semakin sedikit tetangga yang dipertimbangkan dan model cenderung underfitting. Parameter ini akan di sesuaikan berdasarkan hyperparameter tunning. Output yang muncul dari proses tersebut adalah skor RandomSearch untuk KNN sebesar -23871881.20319546 dan parameter n_neigbors dengan nilai 10. Kemudian, masuk ke proses pelatihan model KNN dengan parameter n_neigbors menggunakan hasil dari tahapan sebelumnya. Model ditrain oleh fungsi fit dengan matrix evaluasi yang digunakan adalah Mean Squared Error atau MSE.

Model Devlopment Menggunakan Algoritma Random Forest

Random forest merupakan salah satu model machine learning yang termasuk ke dalam kategori ensemble (group) learning. Apa itu model ensemble? Sederhananya, ia merupakan model prediksi yang terdiri dari beberapa model dan bekerja secara bersama-sama. Random Forest bekerja dengan membangun sejumlah pohon keputusan (decision trees) dari data latih dengan melakukan sampling acak baik pada data maupun fiturnya. Setiap pohon akan tumbuh secara maksimal tanpa pruning. Kemudian, hasil prediksi dari masing-masing pohon ini akan digabungkan dengan rata-rata (average) atau voting untuk mendapatkan estimasi model akhir.

Kelebihan Random Forest:

  • Akurasi prediksi tinggi untuk banyak kasus.
  • Dapat menangani data dengan banyak fitur, bahkan jika sebagian besar fitur tidak relevan.
  • Mampu melakukan feature selection secara otomatis.
  • Dapat mengestimasi variabel penting.
  • Paralelisasi mudah diimplementasikan.

Kekurangan Random Forest:

  • Kehilangan interpretabilitas model dibandingkan single decision tree.
  • Waktu komputasi dan memori yang dibutuhkan besar untuk data latih yang sangat besar.
  • Sensitif terhadap noise dan outlier jika tidak ditangani dengan baik.
  • Hasilnya mungkin overfit jika ada pohon yang sangat kuat pengaruhnya.

Kembali lagi dalam penyesuaian hyperparameter, model Random Forest akan menggunakan teknik hyperparameter tunning GridSearch Tahap awal seperti biasa akan dilakukan pemanggilan metode RandomForestRegressor dari library Scikit-learn. Kemudian, parameter yang digunakan di algoritma ini, yaitu n_estimators, max_depth, random_state, dan n_jobs. Nilai dari masing-masing parameter diinput berdasarkan hasil hyperparameter tunning sebelumnya. Sebelumnya, apa maksud dari parameter-parameter tersebut:

  • n_estimators untuk menentukan jumlah pohon keputusan yang akan dibangun dalam model ensemble.Makinbesar nilai n_estimators, smakinmpleks model ensemble tersebut.
  • n_jobs untuk menentukan jumlah pekerjaan paralel yang akan dijalankan saat melatih model. Ketika diatur ke nilai -1, itu berarti menggunakan semua core CPU yang tersedia.
  • max_depth untuk mengontrol kedalaman maksimum dari setiap pohon keputusan dalam ensemble. Makin besar nilai max_depth, semakin kompleks modelnya.

Sebagai tambahan, terdapat parameter random_state yang merupakan penambahan manual untuk menentukan seed untuk generator angka acak yang digunakan saat membagi data menjadi subset saat membangun pohon sehingga menghasilkan hasil yang sama setiap kali kode dijalankan. Tahapan terakhir dalam proses pelatiahn Model Random Forest akan dibantu oleh fungsi fit dengan matrix evaluasi yang digunakan adalah Mean Squared Error atau MSE.

Model Devlopment Menggunakan Algoritma Boosting Algorithm

Boosting adalah sebuah algoritma ensemble learning yang bertujuan untuk meningkatkan akurasi model prediksi dengan cara menggabungkan sejumlah model lemah (weak learner) menjadi model kuat (strong learner). Penggabungan tersebut dilakukan dengan metode berurutan, yang secara iteratif. Pendekatan ini membantu mengurangi bias tinggi yang umun terjadi pada model machine learning. Cara kerjanya adalah membuat model kedua yang bertugas memperbaiki kesalahan dari model pertama. Model ditambahkan sampai data latih terprediksi dengan baik atau telah mencapai jumlah maksimum model untuk ditambahkan. Ada beberapa algoritma boosting yang populer, tetapi pada tahapan kali ini algoritma AdaBoost yang akan digunakan karena salah satu algoritma yang terkenal dapat mencegah overfitting dan komputasinya efisien.

Kelebihan Boosting:

  • Mampu meningkatkan akurasi model lemah menjadi model kuat.
  • Robust terhadap overfitting.
  • Parallelization mudah dilakukan.

Kekurangan Boosting:

  • Rentan terhadap noise dan outlier.
  • Sulit diinterpretasi karena banyaknya estimator yang dikombinasikan.
  • Sensitif terhadap parameter dan fungsi loss yang dipilih.
  • Lebih lambat karena harus melatih beberapa model.

Sama seperti sebelumnya, model ini akan menggunakan hyperparameter dari tuning untuk menentukan parameter-parameter yang dibutuhkan dalam pelatihan Model Boosting dengan AdaBoost. GridSearch tetap menjadi andalan tetentunya dalam menjalankan teknik tersebut. Proses awal pelatihan adalah pemanggilan metode AdaBoostRegressor dari library scikit-learn. Kemudian, proses menginput parameter ke dalam metode tersebut berdasarkan hasil teknik hyperparameter tunning dilakukan. Parameter tersebut adalah learning_rate. Parameter learning_rate adalah parameter yang digunakan untuk mengatur kecepatan pembelajaran model. Nilai learning_rate yang kecil akan membuat model melatih lebih lambat tapi lebih akurat. Sebaliknya, nilai yang besar akan mempercepat pelatihan model tetapi meningkatkan osilasi dan membuat model tidak konvergen. Pasa proses permodelan kali proses hypertunning menghasilkan nilai learning_rate 0.1. Untuk parameter lain yang digunakan dalam permodelan tersebut seperti random_state yang merupakan penambahan manual untuk menentukan seed untuk generator angka acak yang digunakan saat membagi data menjadi subset saat membangun pohon sehingga menghasilkan hasil yang sama setiap kali kode dijalankan. Tahapan akhir dalam menjalankan pelatihan ini juga akan dibantu oleh fungsi fit dengan matrix evaluasi yang digunakan adalah Mean Squared Error atau MSE.

Evaluasi Model

Tahap evaluasi dalam membangun model bertujuan untuk mengukur kinerja dan keefektifan model yang telah dibuat. Evaluasi model penting karena memberikan pemahaman tentang seberapa baik model dapat melakukan prediksi atau menggeneralisasi data baru yang tidak terlihat selama pelatihan. Pada tahap ini, penggunaan metrik akan dilakukan. Metrik yang akan digunakan adalah Mean Squared Eror(MSE) dari library Scikit-learn. Metrik ini menghitung jumlah selisih kuadrat rata-rata nilai sebenarnya dengan nilai prediksi melalui sebuah persamaan sebagai berikut:

$$MSE = {\sum{(Y_t - Y_p)^2} \over n}$$ Keterangan:

  • N = jumlah dataset
  • yi = nilai sebenarnya
  • y_pred = nilai prediksi

Selanjutnya, beberapa proses dalam tahap evaluasi yang akan dilakukan adalah scaling numeric features, count MSE for data train and test, prediction target variable, Calculates the difference between the predicted value and the y_true value, and Model Accuracy Based ons Each Algorithm.

Scaling numeric features

Sebelum menghitung nilai MSE, proses scaling akan dilakukan untuk fitur numerik pada data uji. Karena sebelumnya, pada proses scaling hanya pada data latih saja. Setelah model dilatih menggunakan 3 aalgoritma, yaituKNN, Random Forest dan AdaBoost, proses scaling fitur akan dilakukan pada data uji. Hal ini harus dilakukan agar skala antara data latih dan data uji sama sehingga evaluasi dapat berjalan.

Count MSE for data train and test

Proses perhitungan nilai MSE dimulai dengan pembuatan DataFrame yang memiliki kolom 'train' dan 'test' serta indeks 'KNN', 'RF', dan 'Boosting'. DataFrame ini akan digunakan untuk menyimpan nilai tersebut untuk setiap algoritma pada data latih (train) dan data uji (test). Selanjutnya, dalam iterasi, setiap indeks yang mewakili algoritma akan digunakan untuk menghitung nilai MSE menggunakan data latih dan data uji sebagai input.

Tabel 5. Hasil dataframe setelah dilakukan perhitungan nilai MSE untuk setiap algoritma pada data latih dan data uji.

Tabel 5 menunjukkan perbadingan ketiga algoritma dalam menghitung MSE pada data latih dan data uji. Inilah yang dijadikan bahan untuk proses mengetahui model yang mendekati y_aktual terbaik.

Nama Algoritma train test
KNN 16232.637486 18914.353625
RandomForest 5732.779149 13660.525417
Boosting 69324.69636 70718.092728

last

Gambar 11. Tahapan plot visualisasi sederhana untuk memudahkan dalam pembacaan hasildi atass.

Dari Gambar 11, terlihat bahwa, model Random Forest (RF) memberikan nilai eror yang paling kecil dibandingkan algoritma lain seperti KNN dan Boosting Algorithm. Sedangkan model dengan algoritma Boosting memiliki eror yang paling besar (berdasarkan grafik, angkanya di atas 60000). Maka dari itu, model Random Forest yang akan dipilih sebagai model terbaik untuk memprediksi harga jual mobil.

Prediction target variable

Prediksi pada Tabel 6 adalah pembuktian untuk menjawab problem statement di atas, yaitu Berapa estimasi harga jual mobil berdasarkan fitur-fitur yang paling berpengaruh dengan Harga_Jual?

Tabel 6. Hasil prediksi nilai target berdasarkan ketiga model algoritma(KNN, RandomForest,dan Boosting) menggunakan beberapa harga dari data test.

index y_true prediksi_KNN prediksi_RandomForest prediksi_Boosting
2992 68855 68385.0 69552.0 60912.8
4110 78570 78747.5 77826.1 64950.9
513 60900 65735.0 56873.0 40997.6
11298 30045 33090.5 34084.4 39771.3
10525 29420 25880.5 28549.2 39609.6
10259 64085 55512.5 59280.7 54899.2
441 41850 43285.0 39066.2 39879.0
11218 21650 20650.0 18870.5 21839.4
523 57350 62640.0 59647.6 44905.2
5689 46635 53714.0 45180.4 39771.3

Tabel di atas dapat digunakan

Calculates the difference between the predicted value and the y_true value

Tujuan dari perhitungan rata-rata selisih antara nilai sebenarnya dan nilai prediksi dari ketiga model adalah untuk membandingkan performa relatif dari ketiga model tersebut. Ketiga model tersebut memiliki nilai absolut dari rata-rata selisih antara nilai aktual (y_true). Nilai prediksi yang terkecil mengindikasikan bahwa model cenderung memiliki kinerja yang lebih baik. Dalam konteks prediksi, nilai selisih yang lebih kecil menunjukkan bahwa prediksi model lebih mendekati nilai aktual. Hasil yang muncul tetap sama bahwa model dengan Random Forestlah yang tetap menjadi model terbaik dengan nilai rata-rata selisih terkecil sebanyak 2449.79, disusul oleh Model KNN sebanyak 3544.4, dan terakhir oleh Boosting sebanyak 9203.43.

Accuracy Model with difference algorithm

Metode [12] dari library skcit-learn dapat membantu dalam pemilihan model terbaik untuk digunakan dalam suatu tugas atau masalah tertentu seperti regresi. Model dengan skor yang lebih tinggi cenderung memberikan prediksi yang lebih baik atau hasil yang lebih akurat.

Berdasarkan hasil perbadingan ketiga model, terlihat kembali bahwa pada bagian akurasi model menggunakan algoritma Random Forest menghasilkan skor yang cukup baik, yaitu 0.9313177979043304. Skor model ini menjadi yang terbaik diantara kedua model lain.

Conclusion

Berdasarkan analisis yang telah dilakukan pada proyek prediksi harga jual movil ini, dapat disimpulkan bahwa telah dilakukan pemahaman mendalam mengenai domain proyek meliputi latar belakang, tujuan, kebutuhan, dan referensi relevan. Data, fitur, dan variabel yang digunakan telah dipahami dan diolah dengan baik melalui encoding, PCA, pembagian dataset, dan standardisasi. Proses permodelan juga telah dilakukan dengan membandingkan 3 algoritma regresi, yaitu KNN, Random Forest, dan Boosting, serta penggunaan hyperparameter tunning dengan GridSearch di mana Random Forest terpilih sebagai model terbaik untuk prediksi harga jual mobil pada proyek ini. Dengan demikian, goals untuk mengetahui fitur yang berpengaruh terhadap harga jual serta membuat model prediksi harga jual mobil akurat berdasarkan fitur tersebut juga telah berhasil dicapai melalui analisis yang komprehensif dalam proyek ini. Jadi prediksi harga mobil telah sesuai harapan dan dapat digunakan menjawab problem bisnis yang ada. Model tersebut diharapkan dapat membantu produsen dalam menentukan harga yang kompetitif di pasar dan dealer mobil dalam merumuskan strategi penetapan harga yang optimal.

Reference

[1] B. Kriswantara, K. Kurniawati, and H. F. Pardede, “Prediksi Harga Mobil Bekas dengan Machine Learning,” Syntax Literate ; Jurnal Ilmiah Indonesia, vol. 6, no. 5, p. 2100, May 2021, doi: 10.36418/syntax-literate.v6i5.2716. Tersedia tautan.

[2] B. Kriswantara and R. Sadikin, “Used Car Price Prediction with Random Forest Regressor Model,” Journal of Information Systems, Informatics and Computing Issue Period, vol. 6, no. 1, pp. 40–49, 2022, doi: 10.52362/jisicom.v6i1.752. Tersedia tautan.

[3] E. Surya Negara, J. Jenderal Ahmad Yani, K. I. Seberang Ulu, and S. Selatan, “Sulaiman et al, Komparasi Algoritma K-Nearest Neoghbors dan Random Forest …….. 337 Komparasi Algoritma K-Nearest Neighbors dan Random Forest Pada Prediksi Harga Mobil Bekas,” 2023. Tersedia tautan.

[4] L. Putra Nasyuli, I. Lubis, A. Marwan Elhanafi, corresponding author, and F. Teknik Dan Komputer, “Penerapan Model Machine Learning Algoritma Gradient Boosting dan Linear Regression Melakukan Prediksi Harga Kendaraan Bekas Application Of Machine Learning Models and Gradient Boosting Algorithms Doing Linear Regression Vehicle Price Prediction Used,” 2023. Tersedia tautan.

[5] COOPERUNION, Jeffrey Shih, et al. "Car Features and MSRP". Kaggle. 2017. Tersedia: tautan. Diakses pada: Februari 2024.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.