Saham dapat diartikan sebagai tanda penyertaan modal seseorang atau pihak (badan usaha) pada suatu perusahaan atau perseroan [1]. Indonesia sendiri memiliki pasar sahamnya sendiri yang dinamakan Bursa Efek Jakarta yang digabungkan dengan Bursa Efek Surabaya. Pada projek ini, mencoba memprediksi harga pasar saham menggunakan model machine learning serta mengetahui proses pengambilan data dari database. Dataset yang akan digunakan berasal dari saham apple selama 10 tahun yang didapatkan dari website Kaggle [2]. Software yang digunakan antara lain Pentaho, PostgreSQL (Pg Admin 4), JupyterNotebook, Microsoft Excel dengan model machine learning yang akan digunakan antara lain Convolutional Neural Network.
Business Understanding
Pada pernyataan yang telah dijelaskan, sehingga masalah yang diangkat adalah
Bagaimana proses pengambilan data dari database?
Bagaimana performa model machine learning yang digunakan?
Tujuan dari masalah yang diangkat adalah
Mengetahui proses pengambilan data dari database
Mengetahui performa model machine learning yang digunakan
Solusi yang dapat dilakukan
Menggunakan korelasi antar fitur pada dataset menggunakan library sklearn dan heatmap seaborn
Mengevaluasi hasil model menggunakan MSE dan RMSE
Data Understanding
Dataset yang digunakan memiliki 2518 baris dan 6 fitur, antara lain.
Date: Tanggal harga saham dibuka
Close: Harga terakhir/penutup saham pada hari tersebut
Volume: Jumlah saham yang diperdagangkan pada hari tersebut.
Open: Pembukaan harga saham pada hari tersebut
High: Harga tertinggi sebuah saham pada hari tersebut
Low: Harga terendah sebuah saham pada hari tersebut.
Dari 6 fitur, fitur High akan digunakan sebagai label dikarenakan untuk mengetahui harga tertinggi sebuah saham pada hari tersebut. Pada tahapan ini akan dilakukan proses ETL dari database PostgreSQL dan Pentaho. Banyangkan dataset yang dimiliki berada dalam sebuah database perusahaan dan ingin dilakukan pengambilan data untuk dilakukan proses lebih lanjut, disitulah ETL digunakan. ETL adalah proses pengumpulan data dari berbagai macam sumber dengan tujuan untuk memperoleh data yang berkualitas [3]. Berikut proses ETL yang dilakukan.
1. Pembuatan Database
CREATE DATABASE "Stock_market"
WITH
OWNER = postgres
ENCODING = 'UTF8'
CONNECTION LIMIT = -1;
2. Pembuatan Tabel dan Fitur
CREATE TABLE IF NOT EXISTS public.stock_hist
(
date date,
close character(10),
volume integer,
open character(10),
high character(10),
low character(10)
);
ALTER TABLE public.stock_hist
OWNER to postgres;
3. Import Dataset dan Hasil Import
![](https://static.wixstatic.com/media/67563d_4071c55bd1754de69777d43fcc6c05b0~mv2.png/v1/fill/w_928,h_497,al_c,q_90,enc_avif,quality_auto/67563d_4071c55bd1754de69777d43fcc6c05b0~mv2.png)
SELECT * FROM stock_hist LIMIT 5
![](https://static.wixstatic.com/media/67563d_3f7c1cb6f9334028a3424e07073c7f1d~mv2.png/v1/fill/w_902,h_306,al_c,q_85,enc_avif,quality_auto/67563d_3f7c1cb6f9334028a3424e07073c7f1d~mv2.png)
4. Pengambilan Data dari Database Menggunakan Pentaho
Pertama yang perlu dilakukan adalah melakukan connection ke PostgreSQL. Untuk melakukan connection ke PostgreSQL dari Pentaho diperlukan sebuah file bernama postgresql-42.5.0.jar. File tersebut tergantung dari versi Java yang diinstal dan pada projek ini versi Java yang terinstall adalah JDK 8. File yang telah di download akan diletakkan pada folder lib pada Pentaho. Setelah diletakkan, maka akan dilakukan connection ke PostgreSQL
![](https://static.wixstatic.com/media/67563d_e62e31973fa940e6a7a79e2c7cf47e5e~mv2.png/v1/fill/w_842,h_523,al_c,q_90,enc_avif,quality_auto/67563d_e62e31973fa940e6a7a79e2c7cf47e5e~mv2.png)
Setelah melakukan koneksi, tahapan selanjutnya adalah pengambilan data. Pengambilan data dilakukan pada fitur design dengan menggunakan fungsi Table Input. Pada Table Input, pilih koneksi database yang ingin diperoleh datanya dan klik Get SQL select statement.
![](https://static.wixstatic.com/media/67563d_a10de340de64403dbf2b75729937411d~mv2.png/v1/fill/w_831,h_534,al_c,q_90,enc_avif,quality_auto/67563d_a10de340de64403dbf2b75729937411d~mv2.png)
![](https://static.wixstatic.com/media/67563d_7887f8ea84c4432294d148e2ca6db996~mv2.png/v1/fill/w_841,h_291,al_c,q_85,enc_avif,quality_auto/67563d_7887f8ea84c4432294d148e2ca6db996~mv2.png)
Rangkaian diatas merupakan rangkaian ETL sederhana yang hanya sekedar pengambilan data dari sebuah database. Hal ini dikarenakan proses processing data akan dilakukan pada bahasa program Python. Namun akan dijelaskan singkat Table Output dan Microsoft Excel Output.
Table Output berfungsi sebagai pembentukan tabel baru pada database terkait. Dengan mengatur parameter seperti pada gambar dibawah ini
![](https://static.wixstatic.com/media/67563d_e27457da82a646afb1502bb952ae49ce~mv2.png/v1/fill/w_900,h_522,al_c,q_90,enc_avif,quality_auto/67563d_e27457da82a646afb1502bb952ae49ce~mv2.png)
Step name berguna untuk menamai step pada pentaho, connection sebagai database terkait, Target schema sebagai schema table dimana schema table yang digunakan pada projek ini adalah public, dan Target table sebagai nama table yang akan dibuat pada database Stock Market.
![](https://static.wixstatic.com/media/67563d_d3a76b90d338476dbf7d1b9fd178fc9f~mv2.png/v1/fill/w_288,h_92,al_c,q_85,enc_avif,quality_auto/67563d_d3a76b90d338476dbf7d1b9fd178fc9f~mv2.png)
Microsoft Excel Output digunakan sebagai file output dalam format xls. Dengan mensetting lokasi hasil file dan kolom yang digunakan
![](https://static.wixstatic.com/media/67563d_8827179d31eb4429940f2a49979a77f4~mv2.png/v1/fill/w_481,h_195,al_c,q_85,enc_avif,quality_auto/67563d_8827179d31eb4429940f2a49979a77f4~mv2.png)
![](https://static.wixstatic.com/media/67563d_562b9a88bd5b4ab4afd53499bfa16aa4~mv2.png/v1/fill/w_325,h_231,al_c,q_85,enc_avif,quality_auto/67563d_562b9a88bd5b4ab4afd53499bfa16aa4~mv2.png)
![](https://static.wixstatic.com/media/67563d_3db34c5dada04b35adca12c73e50d933~mv2.png/v1/fill/w_606,h_38,al_c,q_85,enc_avif,quality_auto/67563d_3db34c5dada04b35adca12c73e50d933~mv2.png)
Data Preparation
Tahapan yang dilakukan pada data preparation antara lain Exploratory Data Analisis dan Preprocessing
![](https://static.wixstatic.com/media/67563d_dbdb3ced6b9449c89a1f1756b243141f~mv2.png/v1/fill/w_564,h_309,al_c,q_85,enc_avif,quality_auto/67563d_dbdb3ced6b9449c89a1f1756b243141f~mv2.png)
Exploratory Data Analisis (EDA)
Dataset tidak memiliki missing value pada tiap fitur
![](https://static.wixstatic.com/media/67563d_291c87c83f774e76864ec37e948c126f~mv2.png/v1/fill/w_330,h_211,al_c,q_85,enc_avif,quality_auto/67563d_291c87c83f774e76864ec37e948c126f~mv2.png)
Dataset memiliki 1 tipe datetime, 4 tipe object, dan 1 tipe integer. Jika dilihat 4 tipe object seharusnya float, untuk merubah tipe object ke tipe float akan dilakukan penghapusan symbol ‘$’ pada fitur-fitur tersebut.
![](https://static.wixstatic.com/media/67563d_5f3b47ff34ab4257a2b8a44d177b5678~mv2.png/v1/fill/w_541,h_313,al_c,q_85,enc_avif,quality_auto/67563d_5f3b47ff34ab4257a2b8a44d177b5678~mv2.png)
![](https://static.wixstatic.com/media/67563d_5c70c6056e3a44a28a2b9fec4525bb0a~mv2.png/v1/fill/w_539,h_313,al_c,q_85,enc_avif,quality_auto/67563d_5c70c6056e3a44a28a2b9fec4525bb0a~mv2.png)
Tipe data yang telah dirubah akan dilakukan pengecekan outlier pada dataset
![](https://static.wixstatic.com/media/67563d_336f722f3c96496eba6f8e8f25c0deb2~mv2.png/v1/fill/w_975,h_323,al_c,q_85,enc_avif,quality_auto/67563d_336f722f3c96496eba6f8e8f25c0deb2~mv2.png)
Dapat dilihat bahwa tiap-tiap fitur memiliki outlier masing dan jika dihitung didapatkan sebagai berikut
![](https://static.wixstatic.com/media/67563d_d4a680fe3f3545b3960ff825ddecc99b~mv2.png/v1/fill/w_252,h_161,al_c,q_85,enc_avif,quality_auto/67563d_d4a680fe3f3545b3960ff825ddecc99b~mv2.png)
Namun pada projek ini, tidak akan dilukan pembersihan outlier dan dilakukan split dataset menjadi train dan test
![](https://static.wixstatic.com/media/67563d_317402c2dcb6473399dadb4c31abaedf~mv2.png/v1/fill/w_550,h_55,al_c,q_85,enc_avif,quality_auto/67563d_317402c2dcb6473399dadb4c31abaedf~mv2.png)
Setelah dilakukan pemisahan, diperlukan normalisasi. Hal ini dilakukan karena untuk menyamakan distribusi pada tiap data train dan testing dengan testing hanya dilakukan transform tanpa fit.
![](https://static.wixstatic.com/media/67563d_1345889e9ada467b95cbc47975faca6d~mv2.png/v1/fill/w_614,h_81,al_c,q_85,enc_avif,quality_auto/67563d_1345889e9ada467b95cbc47975faca6d~mv2.png)
![](https://static.wixstatic.com/media/67563d_f7fba2dd65584f0fb1f30d48a5ed55ba~mv2.png/v1/fill/w_809,h_334,al_c,q_85,enc_avif,quality_auto/67563d_f7fba2dd65584f0fb1f30d48a5ed55ba~mv2.png)
![](https://static.wixstatic.com/media/67563d_2a834b7086924de1867ebc60fbd86a83~mv2.png/v1/fill/w_820,h_110,al_c,q_85,enc_avif,quality_auto/67563d_2a834b7086924de1867ebc60fbd86a83~mv2.png)
![](https://static.wixstatic.com/media/67563d_b28efe4e3e2e4cd483390125ef1fc646~mv2.png/v1/fill/w_370,h_88,al_c,q_85,enc_avif,quality_auto/67563d_b28efe4e3e2e4cd483390125ef1fc646~mv2.png)
Jika dilakukan normalisasi terlebih dahulu, setelah itu split dataset akan menyebabkan persamaan semua distribusi dan hal tersebut dapat menyebabkan bias pada distribusi data. Berikut visualisasi split dataset
![](https://static.wixstatic.com/media/67563d_6b2fa63fcc1a43c795c2a4a4ab8e86f7~mv2.png/v1/fill/w_975,h_268,al_c,q_85,enc_avif,quality_auto/67563d_6b2fa63fcc1a43c795c2a4a4ab8e86f7~mv2.png)
Setelah data prepation selesai dilakukan, tahapan selanjutnya adalah modeling.
Modeling & Evaluation
Model yang digunakan pada projek ini adalah LSTM dengan optimasi Adam, loss MAE dan metrics RMSE
![](https://static.wixstatic.com/media/67563d_49e88346abec4ff4878aa78d1e437475~mv2.png/v1/fill/w_975,h_524,al_c,q_90,enc_avif,quality_auto/67563d_49e88346abec4ff4878aa78d1e437475~mv2.png)
Menggunakan epochs = 5, didapatkan loss sebagai berikut
![](https://static.wixstatic.com/media/67563d_10649fa76d3140ad82fcfc039d0e2f29~mv2.png/v1/fill/w_670,h_384,al_c,q_85,enc_avif,quality_auto/67563d_10649fa76d3140ad82fcfc039d0e2f29~mv2.png)
Berikut hasil predict dari sisi Train dan sisi Testing.
![](https://static.wixstatic.com/media/67563d_b14177925dd343b0bff18b96e916f7fc~mv2.png/v1/fill/w_975,h_473,al_c,q_90,enc_avif,quality_auto/67563d_b14177925dd343b0bff18b96e916f7fc~mv2.png)
![](https://static.wixstatic.com/media/67563d_219027d331bc47eb8fd616e723ce47fd~mv2.png/v1/fill/w_975,h_497,al_c,q_90,enc_avif,quality_auto/67563d_219027d331bc47eb8fd616e723ce47fd~mv2.png)
Jika dilihat pada Train, prediksi yang didapatkan mendekati dengan nilai aslinya. Namun pada data testing menjauhi nilai aslinya, untuk mengetahui penyebabnya mari melihat nilai RMSE data testing
![](https://static.wixstatic.com/media/67563d_6ffb84c0f62a413993a56fb099377db1~mv2.png/v1/fill/w_339,h_66,al_c,q_85,enc_avif,quality_auto/67563d_6ffb84c0f62a413993a56fb099377db1~mv2.png)
Ternyata nilai RMSE yang didapatkan cukup tingggi, hal ini dapat ditingkatkan dengan menambah layer pada model dan mengubah nilai parameter optimizer dan jumlah epochs.
DAFTAR PUSTAKA
[1] “Saham .:: SIKAPI ::.” https://sikapiuangmu.ojk.go.id/FrontEnd/CMS/Category/64 (accessed Aug. 25, 2022).
[2] Nasdaq, “Apple (AAPL) Historical Stock Data | Kaggle.” https://www.kaggle.com/datasets/tarunpaparaju/apple-aapl-historical-stock-data (accessed Aug. 25, 2022).
[3] R. Dharayani, K. A. Laksitowening, and A. P. Yanuarfiani, “Implementasi ETL ( Extract , Transform , Load ) Pangkalan Data Perguruan Tinggi dengan Menggunakan State-Space Problem,” e-Proceeding Eng., vol. Vol.2, No., no. 2355–9365, pp. 1159–1165, 2015.
Comments