#10 Artificial Neural Network (ANN) — Part 5 (Time Series Forecasting ISPU CO DKI Jakarta menggunakan Keras & Tensorflow)
Implementasi MLP Backpropagation pada Python menggunakan Keras dengan backend Tensorflow untuk Forecasting data Time Series ISPU CO DKI Jakarta tahun 2018
Sebelumnya kita sudah membahas teori dasar MLP Backpropagation disini.
dan menerapkannya pada prediksi gerak Oscillator pada Python tanpan menggunakan framework DL/ML disini.
Sekarang kita akan coba implementasikan MLP Backpropagation pada python dengan menggunakan library Pandas untuk preprocessing data dan Tensorflow dan Keras sebagai framework ML.
Jika kalian belum familiar dengan pandas, bisa dipelajari di tulisan saya tentang Python Data Science : Pandas (part 1–3),
Dan jika kalian juga belum pernah cobain Tensorflow dan Keras, bisa belajar disini dan disini,
Step by Step Guide
Tools & Materials
Sekarang kita persiapkan tools dan materials nya terlebih dahulu,
- Komputer terintsall Anaconda + Python 3 +Jupyter Notebook, bisa dilihat disini.
- Install library
numpy
,matplotlib
,pandas
,tensorflow
install library python menggunakan Anaconda Prompt,
conda install numpy
conda install matplotlib
conda install pandas
conda install tensorflow
conda install keras
- Download dataset Time Series ISPU CO DKI Jakarta tahun 2018 disini.
Flow Process Implementasi
Implementasi MLP Backpropagation untuk memprediksi kadar CO ini akan mengikuti flow process berikut, mulai dari tahap preprocessing data untuk aggregasi sampai penggunaan Tensorflow untuk pembuatan Model.
Preprocessing Data
- Buka Jupyter Notebook, buat Notebook baru dengan nama “MLP Backpropagation”
- Simpan 12 file CSV dataset ISPU CO DKI Jakarta tahun 2018 yang telah didownload sebelumnya ke folder lokasi Notebook baru dibuat, sehingga tampak seperti berikut,
- Import library & Load dataset menggunakan Pandas
dataset disimpan sebagai Dataframe Pandas,
- Check pada dataset apakah ada data
null
atauNA
,
- Convert
tanggal
menjadi index Data Frame dan plot Seriesco
terhadaptanggaal
pisahkan dalam orde bulan,
Sehingga dihasilkan plot data bulanan sebagai berikut,
Ditahap ini kita sudah mempersiapkan dataset untuk selanjutnya kita gunakan dalam proses Training Multi Layer Perceptron Backpropagation.
Arsitektur MLP
Berikut adalah arsitektur MLP yang akan digunakan, terdiri dari 5 neuron pada input layer, 6 neuron pada hidden layer pertama, 6 neuron pada hidden layer kedua, dan 1 neuron pada output layer. Neuron pada hidden layer pertama dan kedua akan menggunakan ReLU Activation Function dan pada output layer menggunakan Linear Activation Function.
Training Model
Ditahap ini kita akan menggunakan preprocessing dataset diatas untuk keperluan training model prediksi kadar CO. Berikut langkah-langkahnya,
- Pertama kita buat notebook baru, di folder yang sebelumnya digunakan pada tahap Preprocessing Data. Kita beri nama “Tensorflow MLP Backpropagation”,
- Setelah itu kita load library dan define parameter sebagai berikut,
- Untuk kebutuhan training model, Dataframe
CO_TS
akan coba kita split menjadi dua bagian menjadi test data dan training data,
- Selanjutnya untuk masing-masing dataset timeseries (test & training) akan kita split menjadi pasangan input output, dimana 5 input data mempunyai satu output data.
fungsi split diatas akan membagi tiap 5 data berurutan pada CO_TS_TRAIN_Arr
maupun CO_TS_TEST_Arr
array sebagai x[i] dan data ke 6 sebagai y[i], ilustrasinya sebagai berikut,
data input :
[1 2 3 4 5 6 7 8 9 dst... ]
hasil split :
|---- x ----| y |
| 1 2 3 4 5 | 6 |
| 2 3 4 5 6 | 7 |
| 3 4 5 6 7 | 8 |
| 4 5 6 7 8 | 9 |
| dst ...
Keras Model
Keras memiliki 2 model utama yang dapat digunakan, diantaranyakeras.model.Sequential
dan keras.models.Model
(functional API). Pada kesempatan ini kita akan gunakan Sequential.
- load library yang dibutuhkan,
Sequential
merupakan model Keras.Dense
layer merupakan Neural Network layer yang melakukan proses perhitungan pada input dan menghasilkan output.Adam
merupakan algoritma optimization disamping menggunakan classical stochastic gradient descent (SGD), tipe gradient decent yang dapat menghitung gradien dari loss function yang diperlukan untuk menentukan weight baru.
Detail tentang Model Keras dapat dilihat disini, dan varian optimizer yang disupport Keras dapat dilihat disini.
- Keras secara default akan menggunakan Backend Tensorflow GPU, jika kita tidak ingin menggunakan GPU dalam pemrosesan kedepan, dapat gunakan cara berikut,
- Sekarang kita define model, optimizer dan loss function yangdigunakan, kita akan gunakan
Adam
untuk optimizer danmse
(mean square error) untuk loss. Fungsi.add()
akan menambahkan layerDense
kedalam model. Layer yang pertama kali ditambahkan harus mendefinisikan input dimension (input neuron). Disamping itu fungsiDense()
memungkinkan kita untuk mendefinisikan Activation Function. Dikasus sekarang kita akan gunakan ReLU Function pada hidden layer 1 dan hidden layer ke 2 dan Linear Function pada output layer.
- Selanjutnya kita lakukan prosess fitting data train menggunakan fungsi
.fit()
,
tunggu sampai proses training data selesai, jika parameter verbose
diset 1 pada function .fit()
, kita dapat melihat log callback proses training model, dengan nilai loss tiap step nya.
- Selanjutnya kitalakukan testing pada model yang kita telah buat, dengan menggunakan data
x_test
untuk memprediksiy_test
yang merupakan data ISPU CO DKI Jakarta di bulan Desember 2018,
- Selanjutnya kita plot data
y_prediction
berdampingan dengany_test
dengan menggabungkan kedua array tersebut menjadi dataframe dengan bantuan Pandas, dan fungsi.plot()
,
sehingga dihasilkan plot y_prediction
dan y_test
terhadap waktu (tanggal data, sebagai berikut,
Dari hasil plot diatas terlihat model dapat memprediksi ISPU CO DKI Jakarta bulan Desember 2018, meskipun tidak tepat sama. Namun demikian model dapat merespon ketika data memiliki kecenderungan turun dan naik. Selanjutnya dapat diterapkan penggunaan LSTM untuk meningkatkan keakurasian prediksi data time series.
Sekian untuk tulisan kali ini selanjutnya akan coba dibahas deployment model menjadi service di backend server dengan bantuan ML Workflow Tool seperti Apache Airflow.
Terimakasih