Anda di halaman 1dari 19

HASIL DAN PEMBAHASAN

Taha pertama ditunjukan pada gambar diatas merupakan script kode Python yang
mengimpor modul datetime dan mendefinisikan beberapa variabel. Kode ini juga mencetak
beberapa informasi tentang proyek dan pengguna.
Bagian pertama dari kode tersebut mendefinisikan versi notebook, judul, awalan, dan judul
proyek menggunakan modul datetime. Versi notebook diatur ke '2.0.0', sedangkan judul
notebook diatur ke 'kualitas_air_ann_so_2.0.0'. Awalan diatur ke waktu UTC saat ini dalam
format tahun-bulan-hari-jam:menit, sedangkan judul proyek diatur ke awalan yang
digabungkan dengan judul notebook.
Bagian kedua dari kode ini memasang Google Drive sebagai tempat untuk menyimpan hasil
pelatihan. Hal ini dilakukan dengan menggunakan metode drive.mount() dari modul
google.colab.
Terakhir, baris kode terakhir mendefinisikan variabel drop_path dengan path ke direktori
dropbox di Google Drive pengguna.
Kode di atas kemungkinan merupakan bagian dari proyek yang lebih besar atau buku catatan
untuk melatih jaringan syaraf tiruan untuk memprediksi kualitas air. Nama pengguna, kelas,
dan ID siswa juga disertakan dalam hasil cetakan, menunjukkan bahwa ini adalah proyek
sekolah.
Kode di atas menginstal dan mengimpor dua paket Python, umakit dan hidrokit.
Bagian pertama dari kode tersebut menginstal paket umakit dari repositori github
https://github.com/taruma/umakit menggunakan manajer paket pip. Paket ini digunakan
untuk tujuan pencatatan, yang berarti membantu melacak apa yang terjadi selama proses
pelatihan. Paket ini diimpor menggunakan baris dari umakit.logtool import LogTool, yang
mengimpor kelas LogTool dari modul umakit.logtool. Sebuah instance dari kelas ini
kemudian dibuat menggunakan mylog = LogTool(), yang digunakan untuk mencatat proses
pelatihan.
Bagian kedua dari kode tersebut menginstal paket hidrokit dari repositori github
https://github.com/taruma/hidrokit menggunakan manajer paket pip. Paket ini digunakan
untuk prapemrosesan data dan plotting. Paket ini diinstal menggunakan baris !pip install
hidrokit, yang menginstal paket di lingkungan saat ini.
Kode tersebut adalah kode Python yang digunakan untuk memuat dataset dan mengimpor
data ke dalam pandas DataFrame. Berikut adalah analisis baris per baris:
Mengunggah Dataset
from google.colab import files
uploaded = files.upload()
Kode ini adalah untuk mengunggah dataset dari komputer lokal ke Google Colaboratory.
Analisis selanjutnya adalah sebagai berikut.
1. Import dataset ke pandas.DataFrame
import pandas as pd
Pada baris ini, kita mengimpor modul pandas dan memanggilnya sebagai "pd".
#import dataset
dataset = pd.read_excel('PLOT DATA DUGA AIR 2013.xlsx', skiprows=[0])
Kode ini memuat dataset dari file Excel 'PLOT DATA DUGA AIR 2013.xlsx' dan
menyimpannya dalam variabel "dataset". Fungsi "read_excel" adalah fungsi bawaan pandas
yang digunakan untuk membaca data dari file Excel. Parameter "skiprows" digunakan untuk
melewatkan baris pertama dari file Excel yang biasanya berisi judul atau header.
2. Menamai kolom
dataset.columns =
["tanggal","JAN","FEB","MAR","APR","MEI","JUN","JUL","AGS","SEP","OKT","NOV",
"DES"]
Kode ini memberikan nama untuk setiap kolom dalam DataFrame. Dalam kode di atas,
kolom-kolom tersebut adalah "tanggal", "JAN", "FEB", "MAR", "APR", "MEI", "JUN",
"JUL", "AGS", "SEP", "OKT", "NOV", dan "DES".
3. Mengatur index dataframe ke tanggal
dataset = dataset.set_index('tanggal')
Kode ini mengatur indeks DataFrame ke kolom "tanggal" yang telah diberi nama
sebelumnya. Ini akan memungkinkan kita untuk dengan mudah mengambil data berdasarkan
tanggal.
4. Mengubah tipe data kolom index menjadi datetime
dataset.index = pd.to_datetime(dataset.index, format='%Y-%m-%d')
Kode ini mengubah tipe data kolom indeks dari string ke tipe data datetime. Fungsi
"to_datetime" digunakan untuk melakukan konversi ini. Format '%Y-%m-%d' menentukan
format tanggal yang diharapkan.
5. Output
Setelah kode dieksekusi, tidak ada output yang dihasilkan secara eksplisit. Namun, data telah
dimuat ke dalam DataFrame, dan DataFrame tersebut siap untuk digunakan untuk analisis
lebih lanjut.

Gambar ?. jumlah data yang terdeteksi dari dataset.


Berikutnya pada tangkapan layar diatas terdapat output 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 ?.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 melanjutkan 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.

Visualisasi pada grafik nilai prediksi dan observasi, terdapat kecenderungan nilai pada salah
satu variabel yang berada pada garis diagonal. Hal ini menunjukkan bahwa model cukup baik
dalam memprediksi kualitas air pada tahap tertentu data yang diberikan atau dengan kata lain
diketahui bahwa ‘final_model’ mampu mengikuti fluktuasi data observasi yang dilakukan.

Pada plot titik prediksi dan observasi, titik-titik yang mewakili nilai prediksi dan observasi
akan ditempatkan pada sumbu x ‘truth_value’ dan y ‘Prediction_value’. Nilai prediksi dan
observasi ditampulkan sesuai data dengan tampilan beberapa titik berada diposisi yang sama,
dibuktikan bahwa model dapat memprediksi nilai kualitas air dengan sangat baik. Dari dua
grafik diatas terlihat bahwa terdapat hasil prediksi yang negatif meski pada kejadian nyata
bahwa nilai negatif tidak mungkin untuk kualitas air.
(4.5) Nilai beda prediksi dan observasi (residu) mengukur akar rata-rata kuadrat perbedaan
antara nilai prediksi dan observasi. Semakin kecil nilai RMSE, semakin akurat model dalam
memprediksi kualitas air.
Dari statistik deskriptif diatas diketahui bahwa nilai median (50%) sebesar 0.136631 Dengan
rata-rata nilai beda sebesar 0.261498 perlu diperhatikan juga nilai standar deviasi 0.267359
Ini kembali lagi ke nilai toleransi/ketelitian pada parameter tersebut, apakah rata-rata 0.2
termasuk signifikan atau tidak.

Interpretasi model neural networks dengan codingan menghilangkan tanda ‘[ ]’ dan memilih
kolom yang akan digunakan untuk interpretasi kemudian mengurutkan value grid
‘rank_test_score’ sehingga berdasarkan GridSearchCV Diperoleh model terbaik dengan
parameter sebagaimana sigmoid sebagai activation dan adam untuk optimizer. Relu sebagai
activation dan adam untuk optimizer dengan model terburuk.

Evaluasi hasil GridSearchCV menurut data maka diperlukan sebanyak 20 hasil terbaik
evaluasi ‘grid_sorted’ dan menghitung nilai unik tiap kolom. Dari informasi diatas diketahui
bahwa aktivasi sigmoid memiliki performa lebih baik dibandingkan relu. Selain parameter
aktivasi, tidak ada perbedaan signifikan dengan pemilihan parameter model.
Dari kurva diatas bisa dilihat nilai beda antara rank_test_score mendekati 0.020 - 0.015
dimulai dari urutan ke 10.

Anda mungkin juga menyukai