Water Potability Classifier — Machine Learning Modeling Project

Chris T
11 min readSep 7, 2023

--

Artikel ini ditulis sebagai bagian dari final project kelas Intro to Machine Learning dari Pacmann AI.

Github: Link

Introduction

Air adalah salah satu kebutuhan dasar bagi seluruh makhluk hidup, termasuk manusia. Walaupun pada era modern ini air bersih mudah didapatkan, sekitar 2 milyar orang masih menggunakan sumber air minum yang terkontaminasi menurut WHO. Setiap tahunya, diperkirakan 829.000 orang meninggal karena diare yang disebabkan oleh sumber air yang tidak aman diminum dan sanitasi yang buruk¹.

Water potability merujuk pada tingkat keamanan air untuk dikonsumsi oleh manusia tanpa menyebabkan risiko kesehatan. Sedangkan potable water dapat diartikan sebagai air yang aman diminum. Namun hasil evaluasi kualitas air dapat bervariasi tergantung dari parameter yang digunakan.

Machine learning lazim digunakan dalam pemantauan dan prediksi kualitas air² (Mengyuan Zhu et al., 2022). Beberapa peneliti memilih machine learning untuk prediksi kualitas air karena fleksibilitas, tingkat akurasi yang tinggi dan kemampuan beradaptasi yang lebi baik dibandingkan metode lain.

Untuk membuat model machine learning tentunya harus mempersiapkan data terlebih dahulu. Untuk itu, penulis menggunakan dataset “Water Quality” yang didapat dari Kaggle. Secara garis besar, input dari model machine learning yang akan dibuat adalah kontaminan air dan tingkat zat tertentu di dalam air, dan output -nya adalah prediksi Potability air (potable atau non-potable).

Related Works

  1. Comparison of machine learning algorithms in statistically imputed water potability dataset (Diwash Poudel et al., 2022)

Kelebihan:

  • Menjelaskan batas aman menurut standar WHO/EPA untuk setiap variabel predictor.
  • Menguji 4 algoritma(KNN, Logistic Regression, Random Forest, Neural Network) dan menjelaskan cara kerjanya masing-masing
  • Memberikan informasi hyperparameter yang digunakan untuk optimasi model.

Kekurangan:

  • Tidak menjelaskan tahap hyperparameter tuning dengan jelas, hanya hasil akhirnya saja.
  • Penjelasan tahap preprocessing kurang lengkap

2. Machine learning for water quality classification (Saleh Y. Abuzir et al., 2022)

Kelebihan:

  • Menggunakan PCA dan menguji hasil prediksinya untuk masing-masing jumlah fitur, dari 2 fitur sampai semua fitur.

Kekurangan:

  • Hanya menguji 3 algoritma (Naive Bayes, Multilayer Perceptron, J48)
  • Tidak menjelaskan parameter yang digunakan dengan lengkap.

3. A review of the application of machine learning in water quality evaluation (Mengyuan Zhu et al., 2022)

Kelebihan:

  • Menguji 7 algoritma dan memprediksi banyak variabel kualitas air
  • Menguji algoritma jenis supervised maupun unsupervised learning

Kekurangan:

  • Tidak memprediksi water potability, tapi variabel kualitas air lain seperti Dissolved Oxygen atau Algal bloom prediction.

Dataset & Features

Seperti yang sudah dijabarkan sebelumnya, penulis menggunakan dataset “Water Quality” yang didapat dari Kaggle.

dataset

Dataset ini berisi 3276 baris data dan 10 variabel yang berhubungan dengan water potability seperti ph(tingkat keasaman) atau turbidity(tingkat kekeruhan air).

Informasi fitur:

  • ph: Tingkat keasaman/kebasaan air
  • Hardness: Tingkat kandungan kalsium dan magnesium dalam air
  • Solids: Konsentrasi partikel padat terlarut dalam air
  • Chloramines: Kandungan disinfektan jenis chloramine dalam air
  • Sulfate: Kandungan sulfat(SO4) dalam air
  • Conductivity: Tingkat keterhantaran listrik dalam air
  • Organic Carbon: Kandungan kontaminan organik dalam air
  • Trihalomethanes: Kandungan Trihalomethanes/THM dalam air. THM adalah hasil reaksi antara disinfektan dan zat organik dalam air
  • Turbidity: Tingkat kekeruhan air
  • Potability: Klasifikasi apakah air potable/bisa diminum (1) atau non-potable/tidak aman diminum (0)

Data Collection and EDA

Proses pengumpulan data dimulai dengan memproses dataset ini dengan Jupyter Notebook dan Pandas. Sebelum dilakukan modeling, dataset akan melalui tahap EDA dan preprocessing terlebih dahulu.

Dari gambar diatas terlihat bahwa ada tidak ada data duplikat namun ada 3 kolom yang memiliki missing values yaitu Sulfate, ph dan Trihalomethanes. Pemrosesan missing value akan dilakukan setelah train-test split di tahap data preprocessing.

Heatmap

Dari heatmap diatas terlihat bahwa variabel prediktor memiliki korelasi yang sangat lemah dengan variabel Potabilty.

Histogram distribusi tiap variabel

Dari histogram diatas terlihat bahwa data tiap variabel cenderung berdistribusi normal. Jika ada missing value maka bisa menggunakan mean, selain median.

Perbandingan data Potable dan non-potable

Dari barplot diatas terlihat bahwa ada ketidakseimbangan data antara data potable dan non-potable. Oleh karena itu perlu dilakukan balancing data di tahap preprocessing nanti.

Data Preprocessing

Data Splitting

Sebelum Train-test split, ada tahap Input-Output split untuk memisahkan variabel Input (x) dan Output (y). Variabel outputnya adalah Potability karena kita akan memprediksi water potability, dan variabel sisanya menjadi variabel input.

Train test split
Test validation split

Setelah itu dilakukan Train-Test split dengan rasio 70:30 dan setelah itu data Test di split lagi menjadi Validation dan Test set dengan rasio 50:50. Jumlah data Train set adalah 2293, sedangkan jumlah data Validation dan Test set masing-masing 492 baris data.

Set Validation akan digunakan untuk menguji performa beberapa model untuk mendapatkan model terbaik, sedangkan set Test akan digunakan untuk menguji performa model tersebut.

Missing Values and Standardizing the Data

Setelah train-test split, dilakukan imputasi missing values untuk masing-masing data input (X) train/validation/test dengan metode median karena variabel predictor semuanya numerik. Metode median dipilih karena tidak terlalu dipengaruhi outliers dibanding mean.

Setelah itu, data distandarisasi dengan metode StandardScaler. Tahap ini bertujuan agar perbandingan nilai data antar fitur lebih seimbang karena range data tiap fiturnya ditransformasikan dengan skala yang tidak terlalu jauh berbeda.

Original data values
After standarscaler

Balancing the Data

Karena data variabel prediktor tidak seimbang maka perlu dilakukan balancing data di Train set. Disini penulis menggunakan RandomOversampler untuk menyeimbangkan data potable yang jumlahnya lebih kecil agar seimbang dengan data non-potable.

Hasil oversampling

Methods

Setelah pemrosesan data, selanjutnya adalah tahap modeling atau pembuatan model dengan algoritma tertentu untuk mendapatkan suatu prediksi klasifikasi atau regresi berdasarkan data yang di-input. Beberapa model akan dilatih menggunakan data Train, lalu melewati tahap hyperparameter tuning dan hasilnya akan diuji dan dievaluasi di data Validation/Test. Model yang akan diuji adalah:

1. K-Nearest Neighbor

K-Nearest Neighbor atau disingkat sebagai KNN, adalah algoritma ML sederhhana yang dapat digunakan untuk prediksi klasifikasi maupun regresi. Model ini mengidentifikasi jarak antara 1 titik data dengan data lain atau “tetangga”nya dan menentukan suatu kelas untuk data tersebut berdasarkan kelas mayoritas tetangganya. K dalam KNN adalah jumlah data tetangga terdekat dari suatu titik data yang akan digunakan untuk memprediksi kelas data tersebut. Metrik jarak yang digunakan bisa berupa Euclidean, Manhattan, atau yang lain.

KNN dengan metrik euclidean (IBM.com)

2. Logistic Regression

Logistic regression adalah salah satu algoritma ML yang dapat digunakan untuk prediksi klasifikasi karena menghasilkan nilai biner (0,1). Model ini menggunakan fungsi sigmoid yang mentransformasikan suatu nilai menjadi nilai baru yang berada diantara 0 atau 1 (nilai probabilitas). Lalu decision boundary akan menentukan apakah nilai yang telah ditransformasikan ini masuk ke dalam kelas 1 atau 0

3. Random Forest

Random Forest adalah algoritma ML yang berbasis decision tree yang bisa digunakan untuk klasifikasi dan regresi. Decision tree sendiri adalah algoritma ML juga yang membagi dataset menjadi beberapa region/daerah lalu disaat yang bersamaan membuat suatu node keputusan(decision node) untuk membagi data. Tahap ini akan diulang sampai menjadi suatu ‘pohon’ dan menghasilkan keputusan akhir.

Decision tree

Namun model decision tree ini rentan terhadap bias dan overfitting (IBM.com). Oleh karena itu model Random Forest terdiri dari beberapa decision tree yang dilatih secara independen dari pecahan training data yang dipecah dengan metode “Bagging” (boostrap aggregating). Hasil prediksi klasifikasi Random Forest ditentukan dari voting keputusan terbanyak /modus dari decision tree yang telah dihasilkan, dan rata-rata/mean untuk kasus regresi(pacmann.io, 2022).

Random Forest

4. Support Vector Machine

Support Vector Machine (SVM) adalah algoritma ML yang lazim digunakan dalam analisa data yang berdimensi tinggi(IBM.com). Model SVM menggunakan suatu hyperplane yang dapat membagi data menjadi kelas yang berbeda. Tujuan dari model ini adalah mencari hyperplane terbaik untuk membagi dan memisahkan kelas data (Rhohit Gandhi., 2018).

SVM (towardsdatascience.com)

Hyperplane adalah batasan keputusan untuk membagi/mengklasifikasi data. Pada data dengan 2 dimensi berbentuk garis, 3 dimensi berbentuk bidang, dan pada data dengan dimensi yang lebih tinggi berbentuk hyperlane. Namun kenyataanya, seringkali tidak mungkin menemukan hyperplane yang memisahkan kelas data secara sempurna. Oleh karena itu model SVM ini juga terdapat Soft Margin yang memperbolehkan beberapa misklasifikasi dibandingan Max/Hard margin.

Max Margin classifier
Soft Margin classifier

5. Naive Bayes

Naive Bayes adalah algoritma ML yang digunakan untuk prediksi klasifikasi, biasanya untuk klasifikasi teks atau spam filter. Algoritma ini disebut juga probabilistic classifier karena menggunakan basis teorema Bayes (IBM.com).

Teorema Bayes
  • P(Y|X) adalah probabilitas posterior outcome kelas Y jika diketahui fitur prediktor X
  • P(X|Y) adalah probabilitas likelihood adanya fitur prediktor X jika diketahui kelas Y
  • P(Y) adalah probabilitas prior kelas Y
  • P(X) adalah probabiltias prior fitur prediktor X

6. XGBoost

XGBoost (eXtreme Gradient Boosting) adalah algoritma ML buatan Tianqi Chen dan Carlos Guestrin yang bisa digunakan untuk klasifikasi maupun regresi. Algoritma ini adalah algoritma ensemble berbasis decision tree yang menggunakan framework gradient boosting (Vishal Morde, 2019). Karena adanya penerapan ensemble & boosting, maka algoritma ini menggabungkan hasil prediksi beberapa model lemah untuk menghasilkan prediksi yang lebih kuat.

Evolusi metode decision tree ke XGBoost (towardsdatascience.com)

Algoritma ini bisa dibilang pengembangan lebih lanjut dari Decision Tree. Random Forest dan Gradient Boosting. Konsep pengembangan ini bisa disimpulkan seperti ini:

  • Random Forest adalah pengembangan Decision Tree dengan menerapkan ensemble dan bagging untuk membuat suatu voting keputusan dari beberapa model decision tree.
  • Gradient Boosting adalah alternatif dari Random Forest dimana kumpulan decision tree dibuat secara berurutan dengan meminimalisir error dari setiap model decision tree sebelumnya (boosting) dan memaksimalkan pengaruh dari model dengan performa baik.
  • XGBoost mengembangkan Gradient Boosting dengan menerapkan processing secara paralel, tree pruning dan regularisasi untuk menghindari overfitting.

Keunggulan XGBoost adalah kemampuan menangani dataset besar dan penanganan missing values tanpa harus melewati tahap preprocessing yang signifikan(geeksforgeeks.org). Model ini juga lebih efisien dari sisi penggunaan sumber daya hardware.

Experiment & Results

Metric

Sebelum mulai modeling, kita harus menentukan metrik apa yang akan digunakan untuk acuan performa model. Resiko salah prediksi dalam kasus ini bisa dijabarkan seperti ini:

  • Resiko salah prediksi potable (false positive): Yang meminum air dapat terjangkit penyakit dan resiko kesehatan lainya, juga memakan biaya pengobatan jika terkena penyakit.
  • Resiko salah prediksi non-potable(false negative): Harus mencari sumber air lain yang potable

Oleh karena itu penulis menggunakan Precision sebagi metrik utama untuk analisa ini karena resiko false positive lebih berbahaya dibanding false negative.

Modeling

Pertama, 6 model tersebut akan dilatih ke data Train set dengan parameter default dan diuji di Validation set untuk mendapatkan performa baseline.

Hasil uji coba 6 model

Dari tabel diatas terlihat bahwa model terbaik dari sisi Precision adalah Random Forest(63%), diikuti dengan KNN(61%). Oleh karena itu kedua model ini akan dioptimasi parameternya dengan hyperparameter tuning untuk meningkatkan performa model.

Cross validation yang digunakan adalah 10 karena secara empiris nilai CV 5 dan 10 memberikan estimasi error yang hasil bias dan variansinya tidak terlalu tinggi. (Gareth James et al., 2013). KNN di-tuning Gridsearch karena jumlah parameternya sedikit dan untuk Random Forest menggunakan Randomized Search karena pertimbangan waktu prosesnya.

Tuning KNN dengan Gridsearch
Tuning RF dengan Randomized Search

Setelah di-tuning, didapatkan parameter terbaik untuk 2 model ini adalah:

  • KNeighborsClassifier : metric=’manhattan’, n_neighbors=50, weights=’distance
  • RandomForestClassifier: bootstrap=False, max_depth=24, max_features=’sqrt’, min_samples_leaf=3, min_samples_split=8, n_estimators=500, random_state=123
Hasil tuning KNN

Pada model KNN dengan hasil hyperparameter tuning ternyata turun 0.12% dibanding model baseline. Walaupun perbedaanya sangat kecil, bisa disimpulkan bahwa KNN dengan parameter default sudah hampir setara dengan KNN dengan tuning

Hasil Tuning RandomForest

Padal model RandomForest, ada kenaikan 1.92% dari segi precision. Oleh karena itu penulis memilih model Random Forest sebagai final model dan model terbaik dengan precision 65%.

Results and Evaluation

Setelah mendapatkan final model, model tersebut akan diuji di Test data.

classification report
Confusion Matrix
Real value

Pada test data, precision sedikit menurun dari 65% ke 63%. Berdasarkan confusion matrix, prediksi dengan hasil True Positive sebesar 69 dan False Positive sebesar 47. Walaupun TP lebih besar dari FP, namun ini juga bisa diartikan bahwa model hanya memprediksi dengan benar 69 sumber air potable dari total 193 sumber air yang potable. Hasil ini terbilang masih belum cukup baik untuk prediksi water potability.

Conclusion

Secara garis besar, alur project modeling water potability ini adalah:

1. Preparation and Preprocessing

  • Membagi data input(predictor) dan data output(outcome).
  • Memecah data input dan output menjadi data Train, Validation dan Test set.
  • Melakukan EDA untuk mengetahui informasi statistik dasar dan masalah apa yang ada di dataset.
  • Menangani missing values dengan imputasi median.
  • Standarisasi range nilai data dengan StandardScaler
  • Menangani data imbalance dengan RandomOversampler di data yang lebih rendah jumlahnya

2. Modeling

  • Menentukan metric yang akan menjadi acuan performa model
  • Menguji 6 model (KNN, Random Forest, XGBoost, SVM, Naive Bayes dan Logistic Regression) di data Validation set sebagai baseline model

3. Final Model

  • Memilih 2 model terbaik (KNN dan RF) dan melakukan hyperparameter tuning dengan Gridsearch dan Randomized Search untuk menentukan final model, yaitu Random Forest
  • Menguji performa Random Forest dengan parameter optimal di data Test set

Diantara 6 model baseline yang diuji, 2 model dengan performa terbaik adalah KNN dan Random Forest. Setelah dilakukan hyperparameter tuning di 2 model ini, Random Forest terpilih menjadi model terbaik dengan nilai precision 65% di data Validation set dan 63% di Test set.

Future Work

Karena performa model akhir masih belum cukup baik, maka penulis perlu eksplorasi algoritma klasifikasi lain yang belum digunakan seperti Neural Network ataupun metode unsupervised learning seperti Clustering. Penulis juga masih perlu mengeksplorasi pilihan parameter yang digunakan untuk Hyperparameter Tuning karena hasil tuning tidak memberikan peningkatan yang cukup signifikan dibanding baseline model.

Reference

[1]. Pacmann AI https://pacmann.io/

[2]. Support Vector Machine — Introduction to Machine Learning Algorithms https://towardsdatascience.com/support-vector-machine-introduction-to-machine-learning-algorithms-934a444fca47

[3]. What is random forest? https://www.ibm.com/topics/random-forest

[4]. What is the k-nearest neighbors algorithm? https://www.ibm.com/topics/knn

[5]. XGBoost Algorithm: Long May She Reign! https://towardsdatascience.com/https-medium-com-vishalmorde-xgboost-algorithm-long-she-may-rein-edd9f99be63d

[6]. XGBoost https://www.geeksforgeeks.org/xgboost/

[7.] An Introduction to Statistical Learning: with Applications in R (2013)halaman 184.

--

--