Terdapat data prediksi ketinggian air pada tahun 2013. Dilihat dari dataset terdapat 29 data
pada setiap bulannya. Namun pada beberapa bulan masih terdapat beberapa data yang hilang
seperti bulan februari kehilangan 3 data dan pada bulan April,juni September November
masing masing kehilangan satu data.
Pada grafik hasil visualisasi diatas akan dibaca ada beberapa data yang hilang oleh sistem,
untuk itu program coding untuk untuk mendeteksi data yang hilang/tidak terbaca harus
dilakukan
Pada kolom hasil pendeteksian kehilangan data, yang terbaca data hilang hanya 1 data pada
bulan februari saja, padahal data yang hilang pada bulan februari saja ada 3 data. Hal ini
dikembalikan pengkajian dataset excel kembali, apakah datanya lengkap atau tidak.
Kemudian proses selanjutnya adalah proses mengisi kehilangan data, jadi data yang tidak
diisi delengkapi kembali untuk proses penyempurnaan prediksi. Diasumsikan bahwa data
yang hilang dapat diisi dengan metode interpolasi linear dan didapat visualisasi data seperti
berikut
Gambar ?. Hasil visualisasi data setelah mengisi kehilangan data
Gambar ?. Visualisasi Penyebaran data
Dari visualisasi diatas diketahui bahwa terdapat kolom yang memiliki distribusi tidak normal,
sehingga dalam scaling digunakan MinMaxScaler.
Kemudian tahap selanjutnya yaitu tahap proses pengolahan data dari new_dataset, proses
pertama yaitu pembagian training set dan test set
Setelah itu kita lakukan proses scaling dengan menggunaka skala yaitu MinMaxScaler.
MinMaxscaler adalah salah satu Teknik saclling data yang digunakan untuk mengubah ddata
numerik pada rentang skala tertentu (biasanya 0 hingga 1) tanpa mengubah distribusi relative
dari nilai-nilai tersebut.dan dialukan juga proses mempresentasikan timesteps.
Kemudian kita lanjutkna proses training
Berdasarkan persamaan sebelumnya, kolom output pada waktu t harus dipisahkan sebagai
label training-nya. Dan karena dalam kasus ini fokus pada single-output, maka kolom output yang
digunakan sebagai target hanya Des_tmin0.
Selanjutnya pada kode yang diberikan diatas mendefinisikan sebuah fungsi bernama
build_model dan membuat sebuah objek KerasRegressor bernama model menggunakan
fungsi ini. Fungsi build_model membutuhkan beberapa argumen:
optimizer (nilai default 'adam'): pengoptimal yang akan digunakan saat mengkompilasi
model.
activation (nilai default 'sigmoid'): fungsi aktivasi yang akan digunakan pada lapisan padat.
first_layer (nilai default 10): jumlah neuron pada lapisan pertama.
hidden_layers (nilai default [30]): sebuah daftar bilangan bulat yang merepresentasikan
jumlah neuron pada setiap lapisan tersembunyi.
p (nilai default 0): probabilitas dropout untuk semua lapisan Dropout.
message (nilai default True): sebuah bendera boolean yang mengindikasikan apakah akan
mencetak pesan atau tidak selama pembuatan model.
Fungsi ini membuat model Sequential dan menambahkan lapisan Dense dengan neuron
first_layer dan fungsi aktivasi yang ditentukan. Lapisan Dropout ditambahkan dengan
probabilitas dropout yang ditentukan p.
Jika hidden_layers tidak kosong, fungsi ini akan membuat sebuah perulangan yang
menambahkan lapisan Dense dan Dropout untuk setiap elemen x dalam hidden_layers. Untuk
setiap lapisan Dense, jumlah neuron sama dengan x dan fungsi aktivasi sama dengan aktivasi.
Jika x adalah elemen terakhir di hidden_layers, sebuah lapisan Dropout dengan probabilitas
dropout p/2 ditambahkan setelah lapisan Dense. Jika tidak, sebuah lapisan Dropout dengan
probabilitas dropout p ditambahkan.
Terakhir, sebuah Dense layer dengan satu neuron ditambahkan ke output, dan model disusun
dengan pengoptimal yang ditentukan, loss function (mean_squared_error), dan metrik (mse
dan mae). Jika pesan bernilai True dan variabel idx didefinisikan dalam ruang nama global,
sebuah pesan dicetak dengan nilai saat ini dari idx dan idx dikurangi 1. Jika idx adalah
kelipatan 10, sebuah karakter baris baru akan dicetak sebelum pesan.
Model objek KerasRegressor dibuat dengan menggunakan argumen build_fn, yang diatur ke
fungsi build_model. Argumen verbose diatur ke 0, yang berarti tidak ada output yang akan
dicetak selama pelatihan.
Berikutnya, kode yang diatas diawali dengan mengimpor GridSearchCV dari modul
sklearn.model_selection dan mendefinisikan kamus param_grid yang berisi
hiperparameter dan nilai yang sesuai untuk dicari selama penyetelan hiperparameter.
Kode ini juga mendefinisikan sebuah variabel cv yang diatur ke [(slice(None), slice(None))],
yang mengabaikan K-Fold Cross Validation dan menggunakan seluruh dataset untuk
pelatihan dan pengujian. Sebagai alternatif, Anda dapat mengaturnya menjadi bilangan bulat
untuk menentukan jumlah lipatan yang digunakan untuk validasi silang.
Terakhir, kode tersebut membuat objek GridSearchCV bernama grid_search. Argumen
estimator diatur ke objek model yang telah dibuat sebelumnya, yang menggunakan fungsi
build_model untuk mendefinisikan arsitektur jaringan saraf. Argumen param_grid diatur ke
kamus param_grid yang telah didefinisikan sebelumnya. Argumen cv diatur ke variabel cv
yang telah didefinisikan sebelumnya. Argumen return_train_score diatur ke True, yang berarti
bahwa skor pelatihan akan dikembalikan begitu juga dengan skor validasi. Argumen verbose
diatur ke 1, yang berarti bahwa pesan kemajuan akan dicetak selama pencarian. Argumen
penilaian diatur ke 'neg_mean_squared_error', yang berarti bahwa rata-rata kesalahan kuadrat
akan digunakan sebagai metrik penilaian untuk pencarian.
Kode tersebut terdiri dari beberapa bagian yang melakukan tugas-tugas berikut:
1. Menghitung indeks pencarian (idx) dengan mengalikan jumlah nilai dalam setiap
hyperparameter di grid pencarian (param_grid) untuk mendapatkan jumlah iterasi
pencarian. Variabel search_steps bertindak sebagai akumulator yang menghitung
jumlah iterasi yang diperlukan.
2. Jika parameter cv bertipe integer, maka nilai idx dikalikan dengan nilai cv. Hal ini
menunjukkan bahwa cross-validation akan dilakukan sebanyak nilai cv.
3. Melakukan fitting dengan menggunakan grid search, yaitu mencari kombinasi
hyperparameter yang terbaik pada model.
4. Memulai waktu (start time) fitting dengan menggunakan fungsi add_savepoint dari
modul mylog.
5. Mengeksekusi grid_search.fit() untuk melakukan fitting model pada data training
(X_train dan y_train), dan menggunakan validation_split untuk validasi model.
6. Mengakhiri waktu (end time) fitting dengan menggunakan fungsi add_savepoint dari
modul mylog.
7. Menampilkan durasi waktu yang diperlukan untuk fitting model dengan
menggunakan fungsi add_duration dari modul mylog.
Secara keseluruhan, kode tersebut digunakan untuk melakukan grid search pada model dan
menghitung waktu yang dibutuhkan untuk menyelesaikan fitting model. Fungsi
add_savepoint dan add_duration dari modul mylog digunakan untuk merekam log waktu
yang dibutuhkan dalam melakukan fitting model.
Kode diatas terdiri dari dua bagian yang melakukan tugas berikut:
1. Menyimpan objek model terbaik yang ditemukan melalui grid search ke dalam
variabel final_model. Kode tersebut mengakses atribut best_estimator_ dari objek
grid_search untuk mendapatkan model terbaik, dan kemudian mengambil atribut
model dari model terbaik tersebut. Dengan cara ini, variabel final_model akan berisi
model yang memiliki kombinasi hyperparameter terbaik.
2. Menyimpan hasil grid search ke dalam DataFrame dengan menggunakan modul
pandas. Hasil tersebut disimpan dalam variabel df_cv dan dapat digunakan untuk
analisis selanjutnya. DataFrame tersebut akan berisi informasi tentang kombinasi
hyperparameter yang dicoba dan hasil evaluasi model untuk setiap kombinasi
tersebut.
Secara keseluruhan, kedua bagian kode tersebut digunakan untuk menyimpan model terbaik
dan hasil grid search dalam format yang dapat digunakan untuk analisis selanjutnya.
Kode tersebut berfungsi untuk menyimpan model terbaik dan hasil grid search ke dalam file.
Lebih spesifik, kode tersebut terdiri dari empat bagian yang melakukan tugas berikut:
1. Memisahkan input (X_test) dan target (y_test) dari data uji (test_dataset) yang sudah
dipersiapkan sebelumnya dengan menghapus kolom yang tidak perlu (drop_col) dan
memilih kolom target (target_col) pada DataFrame df_test.
2. Mengubah DataFrame X_test dan y_test menjadi numpy array untuk digunakan
sebagai input dan target model.
3. Mencetak dimensi dari X_test dan y_test untuk memastikan ukuran yang sesuai.
4. Melakukan prediksi dengan menggunakan model yang sudah disimpan sebelumnya
dan menghitung nilai kebenaran (truth) berdasarkan data target yang sebenarnya
(y_test).
Kode tersebut digunakan untuk melakukan prediksi dengan menggunakan model yang sudah
disimpan sebelumnya dengan data uji yang sudah dipersiapkan sebelumnya. Hasil prediksi
kemudian digunakan untuk menghitung nilai kebenaran terhadap data target yang sebenarnya.
Variabel predict dan truth berisi hasil prediksi dan nilai kebenaran (yang diambil dari data
target yang sebenarnya) secara berturut-turut.
Kode tersebut melakukan beberapa tugas berikut:
1. Membuat objek MinMaxScaler baru (sc_test) yang hanya akan digunakan untuk
scaling kolom output.
2. Mengambil parameter scaling (min_, scale_, data_min_, dan data_max_) yang
dihitung pada tahap training untuk kolom output.
3. Mengubah hasil prediksi (predict) dan nilai kebenaran (truth) dari skala yang telah
distandarisasi kembali ke skala aslinya.
4. Menyimpan hasil prediksi dan nilai kebenaran dalam sebuah DataFrame (diff_table).
5. Menghitung selisih (absolute) antara prediksi dan nilai kebenaran dan menyimpannya
sebagai kolom baru pada DataFrame (diff_table).
6. Mentranspose DataFrame (diff_table) untuk memudahkan pembacaan.
Kode tersebut digunakan untuk melakukan scaling balik dari hasil prediksi dan nilai
kebenaran ke skala aslinya, sehingga memungkinkan untuk dilakukan perbandingan antara
nilai prediksi dan nilai sebenarnya. Hasil prediksi dan nilai kebenaran kemudian disimpan
dalam sebuah DataFrame untuk memudahkan analisis perbandingan antara keduanya. Selain
itu, dengan menghitung selisih antara prediksi dan nilai kebenaran, kita dapat melihat
seberapa besar kesalahan prediksi yang dilakukan oleh model.