Skip to content

Predictive analytics project about time series forecasting for dicoding "Machine Learning Terapan" submission. The dataset was taken from yahoo finance website.

Notifications You must be signed in to change notification settings

ssabrut/forex-predictive-analytics

Repository files navigation

Laporan Proyek Machine Learning - Michael Eko


Domain Proyek


Latar Belakang

Foreign Exchange (forex) atau perdagangan mata uang asign adalah merupakan salah satu jenis aset investasi yang memperdagangkan mata uang suatu negara terhadap mata uang negara lainnya (pasangan mata uang/pair) yang melibatkan pasar-pasar uang utama di dunia selama 24 jam secara berekesinambungan. Berjalannya forex ini erat kaitannya dengan pelaku usaha forex yang dikenal sebagai trader. Sebagai pelaku usaha perdagangan, trader menjual dan membeli mata uang dalam jangka pendek secara terus menerus atau seringkali dalam jangka panjang sebagai investasi.

Pergerakan nilai forex yang cukup signifikan dan besarnya keuntungan yang ditawarkan, ternyata menarik banyak masyarakat untuk berkecimpung dalam forex market. Forex market memiliki fungsi pokok dalam membantu kelancaran lalu lintas pembayaran internasional. Ada 7 mata uang dunia yang lazim di perdagangkan di forex market, yaitu Dollar Amerika (USD), Poundsterling Inggris (GBP), Euro Dollar (EUR), Swiss Franc (CHF), Japanese Yen (JPY), Australian Dollar (AUD), dan Canadian Dollar (CAD).

Menurut data dari BIS (Bank International for Settlement) yang dilakukan per April 2019, nilai transaksi forex market mencapai lebih dari USD$ 6,6 triliun per hari. Forex termasuk investasi kategori high risk dengan kata lain beresiko tinggi karena transaksi yang kurang tepat sasarang dapat langsung mengikis modal deposito dalam sebuah akun dengan cepat. Oleh karena itu, para trader harus mengetahui kapan harus masuk, berapa lama menunggu dan berapa kali harus melakukan pembelian/penjualan. Salah satu cara yang dapat dilakukan adalah dengan menggunakan teknik forecasting.

Forecasting adalah suatu teknik untuk meramalkan keadaan dimasa yang akan datang dengan menggunakan data-data yang telah ada di masa lalu. Hal ini termasuk dalam time series forecasting, dengan mendeteksi pola dan kecenderungan data time series kemudian memformulasikannya dalam suatu model, maka dapat digunakan untuk memprediksi data yang akan datang.

Business Understanding


Problem Statement

Berdasarkan pada latar belakang di atas, permasalahan yang dapat diselesaikan pada proyek ini adalah sebagai berikut :

  • Bagaimana menganalisa data harga forex market EUR/USD=X?
  • Bagaimana cara mengolah data agar di latih dengan baik oleh model?
  • Bagaimana cara membangun model yang dapat memprediksi time series forecasting dengan baik?

Goals

Tujuan proyek ini dibuat adalah sebagai berikut :

  • Dapat memprediksi harga forex dengan akurat menggunakan model machine learning
  • Melakukan analisa dan mengolah data yang optimal agar diterima dengan baik oleh model machine learning
  • Membantu para trader dalam melakukan transaksi pada forex market

Solution Statement

Solusi yang dapat dilakukan agar goals terpenuhi adalah sebagai berikut :

  • Melakukan analisa, eksplorasi, pemrosesan pada data dengan memvisualisasikan data agar mendapat gambaran bagaimana data tersebut. Berikut adalah analisa yang dapat dilakukan :
    • Menangani missing value pada data
    • Mencari korelasi pada data untuk mencari dependant variable dan independent variable
    • Menangani outlier pada data dengan menggunakan IQR Method
    • Melakukan normalisasi pada data terutama pada fitur numerik
  • Membuat model regresi untuk memprediksi bilangan kontinu untuk memprediksi harga yang akan datang. Berikut beberapa algoritma yang digunakan pada proyek ini :
    • Support Vector Machine (Support Vector Regression)
    • K-Nearest Neighbors
    • Boosting Algorithm (Gradient Boosting Regression)
  • Melakukan hyperparameter tuning agar model dapat berjalan pada performa terbaik dengan menggunakan teknik Grid Search

Data Understanding


Dataset yang digunakan pada proyek ini adalah dataset riwayat dari forex market EUR/USD=X yang diambil dari website finance.yahoo.com.

Dataset ini memiliki format .csv yang mempunyai total 4886 data dengan 7 kolom (Date, Open, High, Low, Close, Adj Close, Volume) yang memiliki total 29 missing value pada masing-masing kolom Open, High, Low, Close, Adj Close, Volume dengan informasi sebagai berikut :

  • Date : Tanggal data tersebut direkam
  • Open : Harga pembukaan pada hari tersebut
  • High : Harga tertinggi pada hari tersebut
  • Low : Harga terendah pada hari tersebut
  • Close : Harga penutupan pada hari tersebut
  • Adj Close (Adjusted Close) : Harga penutupan pada hari tersebut setelah disesuaikan dengan aksi korporasi seperti right issue, stock split atau stock reverse
  • Volume : Banyaknya transaksi pada hari tersebut

Exploratory Data Analysis

Sebelum melakukan pemrosesan data, ada baiknya untuk mengeksplor data untuk mengetahui keadaan data seperti mencari korelasi antar fitur, mencari outlier, analisis univariate dan multivariate.

  • Menangani outlier Jika data numerik divisualisasikan, hanya fitur Low saja yang memiliki outlier. Untuk menangani outlier kita akan menggunakan IQR Method yaitu dengan menghapus data yang berada diluar IQR yaitu antara 25% dan 75%.

  • Univariate Analysis Fitur yang akan kita prediksi adalah Adj Close sehingga kita akan fokus melihat fitur tersebut saja.

  • Multivariate Analysis Selanjutnya kita akan menganalisis korelasi fitur Adj Close terhadap fitur lain seperti Open, High, Low, Close dan Volume. Dapat disimpulkan bahwa Adj Close memiliki korelasi positif yang kuat terhadap Open, High, Low dan Close, sedangkan untuk fitur Volume memiliki korelasi sedang terhadap fitur Adj Close.

    Untuk memperjelas korelasi kita akan memvisualisasikannya menggunakan heatmap dari library Seaborn. Dapat kita lihat bahwa Adj Close memiliki korelasi positif tinggi pada setiap fitur, kecuali fitur Volume sehingga kita dapat menggunakan semua fitur sebagai dependant variable.

Data Preparation


Menghapus fitur yang tidak diperlukan

Karena kita tidak memerlukan fitur Date dan Volume kita akan menghapus fitur Date dan Volume. Juga kita tidak memerlukan fitur Close karena Adj Close lebih akurat dari pada Close sehingga kita menghapus fitur Close.

Splitting Dataset

Kita akan membagi dataset menjadi 2 yaitu sebagai train data dan test data. Train data digunakan sebagai training model dan test data digunakan sebagai validasi apakah model sudah akurat atau belum. Proposi yang umum dalam splitting dataset adalah 80:20, 80% sebagai train data dan 20% sebagai test data, sehingga kita akan menggunakan proporsi tersebut.

Data Normalization

Normalisasi data digunakan agar model dapat bekerja lebih optimal karena model tidak perlu mengolah data dengan angka besar. Normalisasi biasanya mentransformasi data dalam skala tertentu. Untuk proyek ini kita akan normalisasi data 0 hingga 1.

Modeling


Model yang akan digunakan proyek kali ini yaitu Support Vector Regression, Gradient Boosting, dan * K-Nearest Neighbors.

Support Vector Regression

Support Vector Regression memiliki prinsip yang sama dengan SVM, namun SVM biasa digunakan dalam klasifikasi. Pada SVM, algoritma tersebut berusaha mencari jalan terbesar yang bisa memisahkan sampel dari kelas berbeda, sedangkan SVR mencari jalan yang dapat menampung sebanyak mungkin sampel di jalan. Untuk hyper parameter yang digunakan pada model ini adalah sebagai berikut :

  • kernel : Hyperparameter ini digunakan untuk menghitung kernel matriks sebelumnya.
  • C : Hyperparameter ini adalah parameter regularisasi digunakan untuk menukar klasifikasi yang benar dari contoh training terhadap maksimalisasi margin fungsi keputusan.
  • gamma : Hyperparameter ini digunakan untk menetukan seberapa jauh pengaruh satu contoh pelatihan mencapai, dengan nilai rendah berarti jauh dan nilai tinggi berarti dekat.
Kelebihan
  • Lebih efektif pada data dimensi tinggi (data dengan jumlah fitur yang banyak)
  • Memori lebih efisien karena menggunakan subset poin pelatihan
Kekurangan
  • Sulit dipakai pada data skala besar

K-Nearest Neighbors

K-Nearest Neighbors merupakan algoritma machine learning yang bekerja dengan mengklasifikasikan data baru menggunakan kemiripan antara data baru dengan sejumlah data (k) pada data yang telah ada. Algoritma ini dapat digunakan untuk klasifikasi dan regresi. Untuk hyperparameter yang digunakan pada model ini hanya 1 yaitu :

  • n_neighbors : Jumlah tetangga untuk yang diperlukan untuk menentukan letak data baru
Kelebihan
  • Dapat menerima data yang masih noisy
  • Sangat efektif apabila jumlah datanya banyak
  • Mudah diimplementasikan
Kekurangan
  • Sensitif pada outlier
  • Rentan pada fitur yang kurang informatif

Gradient Boosting

Gradient Boosting adalah algoritma machine learning yang menggunakan teknik ensembel learning dari decision tree untuk memprediksi nilai. Gradient Boosting sangat mampu menangani pattern yang kompleks dan data ketika linear model tidak dapat menangani. Untuk hyperparameter yang digunakan pada model ini ada 3 yaitu :

  • learning_rate : Hyperparameter training yang digunakan untuk menghitung nilai koreksi bobot padad waktu proses training. Umumnya nilai learning rate berkisar antara 0 hingga 1
  • n_estimators : Jumlah tahapan boosting yang akan dilakukan.
  • criterion : Hyperparameter yang digunakan untuk menemukan fitur dan ambang batas optimal dalam membagi data
Kelebihan
  • Hasil pemodelan yang lebih akurat
  • Model yang stabil dan lebih kuat (robust)
  • Dapat digunakan untuk menangkap hubungan linear maupun non linear pada data
Kekurangan
  • Pengurangan kemampuan interpretasi model
  • Waktu komputasi dan desain tinggi
  • Tingkat kesulitan yang tinggi dalam pemilihan model

Untuk proyek kali ini kita akan menggunakan model K-Nearest Neighbors karena memiliki error (0.00001) yang paling sedikit daripada model yang lain. Namun tidak bisa dipungkiri model dari Gradient Boosting juga memiliki error (0.000011) yang hampir seperti KNN.

Evaluation


Untuk evaluasi pada machine learning model ini, metrik yang digunakan adalah mean squared error (mse). Dimana metrik ini mengukur seberapa dekat garis pas dengan titik data.

dimana : n = jumlah titik data Yi = nilai sesungguhnya Yi_hat = nilai prediksi

setelah dilakukan training dan prediksi pada semua model, didapatkan error sebagai berikut :

Untuk proyek kali ini terdapat 2 model yang dapat berjalan dengan performa optimal yaitu, Gradient Boosting model dan K-Nearest Neighbors. Sehingga dapat disimpulkan bahwa model dapat memprediksi harga dari pasar foreign exchange (forex) dari data tes dengan baik. Sehingga kedepannya dapat membantu para trader dalam melakukan keputusan pembelian/penjualan pasar.

Referensi (APA7) :


About

Predictive analytics project about time series forecasting for dicoding "Machine Learning Terapan" submission. The dataset was taken from yahoo finance website.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published