Secara umum forecasting time series yang menggunakan metode statistika harus memenuhi beberapa asumsi seperti autokorelasi di ARIMA. Namun bila kita menggunakan algoritma machine learning, hal semacam itu tidak diperlukan lagi. Pergerakan saham tidak hanya dipengaruhi oleh data sebelumnya / time series namun juga beberapa paramater lainnya. Oleh sebab itu kita akan mencoba Forecasting Pergerakan Saham dengan memasukan foreign flow. Sebagai bahan bacaaan, kalian bisa baca analisis teknikal investasi saham Analisis Investasi Saham
Studi kasus yang nanti kita akan lakukan yaitu untuk memprediksi saham pada emiten blue chip menggunakan atribut berupa Open, High, Low, dan Close untuk memprediksi harga Close dihari berikutnya. Salah satu penggerak saham pada emiten dengan kapitalisasi besar yaitu adanya foreign flow yang bisa kita hitung dengan cara akumulasi antara Net antara Foreign Buy dikurangi Foreign Sell pada asal investornya.
Melalui plot grafik kita dapat mencari tahu bahwa ada korelasi antara naik turunnya saham mengikuti naik turun nya akumulasi asing pada emiten tersebut. Sebagai contoh pada emiten TLKM berikut ini (data saham diambil dari Yahoo finance, IDX kemudian dilakukan merging data)
One or more columns doesn't have a header. Please enter headers for all columns in order to proceed.
Kita bisa melakukan ploting dan perhitungan Akumulasi Foreign Buy – Foreign Sell dengan rumus
Pembahasan detail mengenai Memantau pergerakan dana asing / foreign flow silahkan untuk dibaca.
Algoritma Machine Learning
Contents
Pemaparan sebelumnya telah dijelaskan bahwa pada metode statistika diharus membutuhkan beberapa asumsi yang harus dipenuhi untuk dapat digunakan sebagai metode yang tepat pada forecasting seperti contoh nya Pengertian dan Cara Perhitungan ARIMA serta Prediksi Model ARIMA
Metode yang akan digunakan nanti menggunakan algoritma machine learning Multi Layer Perceptron atau disingkat dengan MLP. Penjelasan MLP bisa kalian pelajari di Belajar Algoritma Multi Layer Percepton
Model/Arsitektur yang kita akan gunakan menggunakan multi layer perceptron dengan fungsi aktifasi MSE serta loss function MSE. Adapun Framework /package forecasting machine learning menggunakan Torch
- Penjelasan Torch bisa kalian pelajari di Machine Learning dengan Torch
- Adapun fundamental torch bisa kalian pelajari disini (masih menggunakan bahasa Python) https://softscients.com/?s=torch
Split dataset training dan testing
Kita akan melakukan split dataset dengan aturan sebagai berikut
- Training : dari 01 Januari 2019 sd 31 Desember 2021
- Testing: dari 01 Januari 2022 sd 30 Oktober 2022
Atribut input yaitu
- Open, High, Low, Close, Foreign Buy, Foreign Sell, Volume
Atribut Output yaitu
- Close dihari berikutnya
atau bila dirumuskan yaitu
Arsitektur /Model Machine Learning
Adapun arsitektur/model machine learning yang digunakan terdiri dari beberapa layer dengan total 6221 paramater. Berikut arsitektur yang digunakan
net <- nn_module( "Model-saham", initialize = function(){ self$layer1 = nn_linear(in_features = ncol(x.df.train), out_features = 100) self$layer2 = nn_linear(in_features = 100, out_features = 50) self$layer3 = nn_linear(in_features = 50, out_features = 10) self$layer4 = nn_linear(in_features = 10, out_features = 5) self$layer5 = nn_linear(in_features = 5, out_features = 1) self$sigmoid = nn_sigmoid() #self$relu = nn_relu() }, forward = function(x){ x %>% self$layer1() %>% self$sigmoid() %>% self$layer2() %>% self$sigmoid() %>% self$layer3() %>% self$sigmoid() %>% self$layer4() %>% self$sigmoid() %>% self$layer5() %>% self$sigmoid() } )
An `nn_module` containing 6,221 parameters. ── Modules ────────────────────────────────────────────────────────────────────── • layer1: <nn_linear> #600 parameters • layer2: <nn_linear> #5,050 parameters • layer3: <nn_linear> #510 parameters • layer4: <nn_linear> #55 parameters • layer5: <nn_linear> #6 parameters • sigmoid: <nn_sigmoid> #0 parameters
Activation dan Loss Function
Fungsi aktifasi menggunakan sigmoid oleh sebab itu diperlukan teknik normalisasi dengan rumus Pengertian dan Cara Normalisasi Data dengan nilai maksimal = 1 dan minimal = 0 maka rumus normalisasi dan denormalisasi yaitu
normalisasi
denormalisasi
Berikut potongan kode yang digunakan untuk persiapan datasetnya
df.train.norm = normalisasi(df.train %>% select(!Date),MAKSIMAL,MINIMAL) df.test.norm = normalisasi(df.test %>% select(!Date),MAKSIMAL,MINIMAL) x.df.train = df.train.norm %>% select(Open,High,Low,Close,ForeignBuy,ForeignSell,Volume) y.df.train = df.train.norm %>% select(Close2) #sebagai target
sedangkan untuk loss function menggunakan MSE – Mean Square Error – Pytorch Membuat Function Loss. Berikut grafik loss per epoch yang bisa dilihat mengalami penurunan untuk setiap epoch dengan maksimal epoch 10 ribu kali.
l = c() for (epoch in c(1:10000)){ optimizer$zero_grad() output = model(x_train) loss = criterion(output,y_train) loss$backward() optimizer$step() l = c(l,loss$item()) if(epoch %% 100==0){ cat(epoch,loss$item(),'\n') } }
Hasil Pelatihan dataset training dan pengujian
Hasil pelatihan menunjukan nilai RMSE yang kecil. Forecasting Pergerakan Saham dan Foreign Flow pada dataset training dan testing sebagai berikut
Disimpulkan bahwa algoritma machine learning Forecasting Pergerakan Saham dan Foreign Flow
- Sesi training menghasilkan RMSE dengan nilai 61.3 dengan plot Prediksi mengikuti target Close
- Sesi testing menghasilkan RMSE dengan nilai 109.6 dengan beberapa grafik under performance dibeberapa titik seperti pada bulan april dan september 2022
Forecasting Pergerakan Saham dan Foreign Flow dapat digunakan sebagai atribut input pada machine learning multi layer perceptron.
Download Source Code
Silahkan untuk berkirim email ke Contact Us