Anda di halaman 1dari 13

HASIL DAN PEMBAHASAN

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.

Gambar ?. jumlah data yang terdeteksi dari dataset.

Gambar ?.Hasil Visualisasi Data


Pada gambar diatas bisa kita lihat grafik hasil visualisasi data dari dataset dari bulan januari
2013 sampai desember 2013.

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

Gambar ?. Daftar Kehilangan Data

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.

Sehingga terdapat 33 features dengan 1 target.

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.

Hyperparameter yang akan disetel adalah:


Epochs : jumlah epoch yang akan digunakan untuk melatih model.
batch_size: ukuran batch mini yang akan digunakan selama pelatihan.
first_layer : jumlah neuron pada lapisan pertama dari jaringan syaraf.
hidden_layers : daftar bilangan bulat yang merepresentasikan jumlah neuron pada setiap
lapisan tersembunyi dari jaringan syaraf tiruan.
activation : fungsi aktivasi yang akan digunakan di lapisan padat.
optimizer : pengoptimal yang akan digunakan saat menyusun model.
Nilai-nilai dari hiperparameter yang akan dicari ditentukan sebagai daftar dalam kamus.

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. Menyimpan model terbaik ke dalam file JSON dengan menggunakan metode


to_json(). Model disimpan dalam variabel fmodel_json dan disimpan dalam file
dengan menggunakan fungsi open(). Kemudian, alamat file disimpan dalam variabel
fmodel_j_path dan dicetak pada layar dengan menggunakan fungsi print().
2. Menyimpan bobot (weights) dari model ke dalam file dengan menggunakan metode
save_weights(). Bobot model disimpan dalam variabel fmodel_w_path dan dicetak
pada layar dengan menggunakan fungsi print().
3. Menyimpan model lengkap ke dalam file dengan menggunakan metode save(). Model
disimpan dalam variabel save_model_path dan dicetak pada layar dengan
menggunakan fungsi print().
4. Menyimpan hasil grid search ke dalam file CSV dengan menggunakan metode
to_csv(). Hasil grid search disimpan dalam variabel df_cv dan disimpan dalam file
dengan menggunakan fungsi open(). Kemudian, alamat file disimpan dalam variabel
save_grid_path dan dicetak pada layar dengan menggunakan fungsi print().
Secara keseluruhan, kode tersebut digunakan untuk menyimpan model terbaik dan hasil grid
search ke dalam file yang dapat digunakan untuk analisis selanjutnya atau untuk memuat
model di tempat lain. Fungsi add dari modul mylog digunakan untuk merekam log yang
menyatakan di mana model dan hasil grid search disimpan.

Analisis coding tersebut terdiri dari empat bagian, yaitu:


1. Mengomentari dua baris kode pertama.
2. Mengimpor load_model dari keras.models.
3. Memuat model yang telah dilatih sebelumnya menggunakan load_model dan
menyimpannya sebagai final_model.
4. Membaca file CSV yang berisi informasi cross-validation untuk model dan
menampilkannya menggunakan head().
5. Menampilkan lima baris teratas dari test dataset.

Sehingga menampilkan output sebagai berikut

Kode tersebut melakukan beberapa tugas berikut:

1. Mengubah pandas.DataFrame ke numpy.array dengan menggunakan method .values


pada DataFrame. Numpy array ini kemudian akan diubah skala nilai (scaling) dengan
menggunakan StandardScaler pada baris selanjutnya.
2. Mengubah numpy array yang sudah diskala ke dalam pandas DataFrame dengan
mengatur nama kolom dan indeks yang sesuai.
3. Membuat tabel timestep dengan menggunakan modul timeseries yang mengambil
numpy array yang sudah diskala dan jumlah timesteps yang diinginkan. Hasilnya
disimpan dalam DataFrame baru yang kemudian diubah menjadi numpy array dengan
menggunakan method .values.
Secara keseluruhan, kode tersebut digunakan untuk mempersiapkan data yang akan
digunakan untuk melakukan prediksi dengan model yang sudah disimpan sebelumnya. Proses
ini melibatkan pengubahan format data dari DataFrame ke numpy array, scaling data, dan
membuat tabel timestep yang akan digunakan sebagai input model. Variabel array_test_ts
berisi data yang sudah dipersiapkan dengan format numpy array dan jumlah timesteps yang
telah ditentukan. Variabel df_test digunakan untuk merekam log yang berisi hasil data yang
sudah dipersiapkan untuk prediksi. Berikut data output yang dihasilkan
Berikutnya, kode dibawah ini melakukan beberapa 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.

Output yang dihasilkan berupa table berikut


Pada blok kode tersebut dilakukan evaluasi performa model menggunakan metrik pada data
training dan data test.
1. Pertama, dilakukan evaluasi pada data training dengan memanggil method
final_model.evaluate() pada variabel metrics_train. Kemudian, dilakukan evaluasi
pada data test dengan memanggil method yang sama pada variabel metrics_test.
2. Selanjutnya, dilakukan loop untuk mencetak metrik yang tersedia beserta nilai metrik
untuk data training dan data test.
3. Setelah itu, dilakukan penghitungan nilai Mean Squared Error (MSE) dan Mean
Absolute Error (MAE) pada data test set setelah dikembalikan ke skala original
dengan menggunakan mean_squared_error dan mean_absolute_error dari scikit-learn.
Hasilnya dicetak pada layar menggunakan f-string.

Anda mungkin juga menyukai