Gambar 1. Illustrasi asap rokok
Karena indonesia menjadi negara dengan mayoritas masyarakatnya perokok aktif dan banyak tempat yang seharusnya dilarang merokok namun seringkali perokok tetap membakar rokoknya ditempat tersebut.
Banyak dari masyarakat indonesia sering melanggar peraturan dilarang merokok diarea tersebut mengakibatkan orang yang berada di area tersebut dapat terkena dampaknya juga yang dihasilkan dari perokok itu sendiri (Joaquin Barnoya and Stanton A. Glantz, 2005). orang-orang yang berada di no smoking area mengasumsikan kalo diarea tersebut tidak ada perokok sehingga orang-orang yang tidak ingin terkena asap rokok memilih tempat tersebut. selain itu model machine learning ini juga dapat digunakan untuk mendeteksi asap kebakaran jika didalam rumah atau ruangan terdapat asap. salah satu solusinya adalah dengan cara membuat sebuah model machine learning untuk mendeteksi adanya asap ditempat tersebut, yang nantinya model machine learning tersebut dapat dikembangkan ke perangkat IoT agar dapat memfasilitasi diberbagai tempat. jika perangkat IoT tersebut mendeteksi asap nantinya terdapat sebuah pemberitahuan seperti alarm.
Pada bagian ini, akan menjelaskan proses klarifikasi masalah.
Gambar 2. Illustrasi asap rokok- Dari serangkaian fitur yang terdapat pada dataset, fitur apa yang paling berkorelasi terhadap fire alarm?
- Apakah model machine learning yang telah dibuat nantinya dapat memberikan score yang tinggi?
-
Mengetahui fitur yang paling berkorelasi dengan fire alarm.
-
Membuat sebuah model machine learning yang dapat mendeteksi asap seakurat mungkin dari fitur-fitur yang ada.
- dapat menggunakan satu algoritma machine learning yaitu Logistic Regression dan dari algoritma machine learning tersebut akan diimprove recall scorenya menggunakan hyperparameter tuning GridSearchCV.
Link download dataset: https://www.kaggle.com/datasets/deepcontractor/smoke-detection-dataset
- UTC: Time when experiment was performed
- Temperature[C]: Temperature of surroundings, measured in celcius
- Humidity[%]: Air humidity during the experiment
- TVOC[ppb]: Total Volatile Organic Compounds, measured in ppb (parts per billion)
- eCO2[ppm]: CO2 equivalent concentration, measured in ppm (parts per million)
- Raw H2: The amount of Raw Hydrogen [Raw Molecular Hydrogen; not compensated (Bias, Temperature etc.)] present in surroundings
- Raw Ethanol: The amount of Raw Ethanol present in surroundings
- Pressure[hPa]: Air pressure, Measured in hPa
- PM1.0: Paticulate matter of diameter less than 1.0 micrometer
- PM2.5: Paticulate matter of diameter less than 2.5 micrometer
- NC0.5: Concentration of particulate matter of diameter less than 0.5 micrometer
- NC1.0: Concentration of particulate matter of diameter less than 1.0 micrometer
- NC2.5: Concentration of particulate matter of diameter less than 2.5 micrometer
- CNT: Sample Count. Fire Alarm(Reality) If fire was present then value is 1 else it is 0
- Fire Alarm: 1 means Positive and 0 means Not Positive
Langkah pertama import library yang dibutuhkan untuk kasus kali ini:
Library yang akan diimport adalah library yang berhubungan untuk memanipulasi data, data visualisasi, preprocessing, algoritma machine learning, evaluasi dan mematikan warning yang didapat setelah menjalankan code.
Selanjutnya membaca dataset dan menampilkan 5 data teratas:
UTC | Temperature[C] | Humidity[%] | TVOC[ppb] | eCO2[ppm] | Raw H2 | Raw Ethanol | Pressure[hPa] | PM1.0 | PM2.5 | NC0.5 | NC1.0 | NC2.5 | CNT | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1654733331 | 20.0 | 57.36 | 0 | 400 | 12306 | 18520 | 939.735 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0 |
1 | 1654733332 | 20.015 | 56.67 | 0 | 400 | 12345 | 18651 | 939.744 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1 |
2 | 1654733333 | 20.029 | 55.96 | 0 | 400 | 12374 | 18764 | 939.738 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 2 |
3 | 1654733334 | 20.044 | 55.28 | 0 | 400 | 12390 | 18849 | 939.736 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 3 |
4 | 1654733335 | 20.059 | 54.69 | 0 | 400 | 12403 | 18921 | 939.744 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 4 |
Dapat menghapus fitur 'Unnamed: 0' Kemudian melihat dimensi dari dataset ini. lalu melihat dimensi dari dataset.
Dataset ini terdiri dari 62630 data dan 15 kolom.
Exploratory data analysis atau sering disingkat EDA merupakan proses investigasi awal pada data untuk menganalisis karakteristik, menemukan pola, anomali, dan memeriksa asumsi pada data. Teknik ini biasanya menggunakan bantuan statistik dan representasi grafis atau visualisasi.
Cakupan proses EDA sangat luas. Namun, secara umum, Anda dapat melakukan proses EDA untuk menjawab beberapa pertanyaan berikut:
- Apa saja jenis variabel pada dataset?
- Bagaimana distribusi variabel dalam dataset?
- Apakah ada missing value?
- Apakah ada fitur yang tidak berguna (redundant)?
- Bagaimana korelasi antara fitur dan target?
Kolom | Type |
---|---|
UTC | int64 |
Temperature[C] | float64 |
Humidity[%] | float64 |
TVOC[ppb] | int64 |
eCO2[ppm] | int64 |
Raw H2 | int64 |
Raw Ethanol | int64 |
Pressure[hPa] | float64 |
PM1.0 | float64 |
PM2.5 | float64 |
NC0.5 | float64 |
NC1.0 | float64 |
NC2.5 | float64 |
CNT | int64 |
Fire Alarm | int64 |
Seluruh fitur pada dataset bertipe numeric.
Melakukan pengecekkan deskripsi statistik pada dataset untuk mengetahui apakah terdapat anomali:
UTC | Temperature[C] | Humidity[%] | TVOC[ppb] | eCO2[ppm] | Raw H2 | Raw Ethanol | Pressure[hPa] | PM1.0 | PM2.5 | NC0.5 | NC1.0 | NC2.5 | CNT | Fire Alarm | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 | 62630.0 |
mean | 1654792066.1842728 | 15.97042358294747 | 48.539499441162384 | 1942.0575283410506 | 670.0210442280057 | 12942.453935813508 | 19754.257911543988 | 938.6276494651127 | 100.59430911703656 | 184.46777023790517 | 491.46360769599227 | 203.58648749800412 | 80.04904232795785 | 10511.38615679387 | 0.7146255787961041 |
std | 110002.48807802147 | 14.359576152610806 | 8.865367089675287 | 7811.589055386021 | 1905.8854393506067 | 272.4643052353358 | 609.5131564626391 | 1.3313435732418013 | 922.5242445867349 | 1976.3056148260875 | 4265.661251435324 | 2214.738555639472 | 1083.3831887688002 | 7597.870997377545 | 0.4515961881806646 |
min | 1654712187.0 | -22.01 | 10.74 | 0.0 | 400.0 | 10668.0 | 15317.0 | 930.852 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
25% | 1654743244.25 | 10.99425 | 47.53 | 130.0 | 400.0 | 12830.0 | 19435.0 | 938.7 | 1.28 | 1.34 | 8.82 | 1.384 | 0.033 | 3625.25 | 0.0 |
50% | 1654761919.5 | 20.13 | 50.15 | 981.0 | 400.0 | 12924.0 | 19501.0 | 938.816 | 1.81 | 1.88 | 12.45 | 1.943 | 0.044 | 9336.0 | 1.0 |
75% | 1654777576.75 | 25.4095 | 53.24 | 1189.0 | 438.0 | 13109.0 | 20078.0 | 939.418 | 2.09 | 2.18 | 14.42 | 2.249 | 0.051 | 17164.75 | 1.0 |
max | 1655130051.0 | 59.93 | 75.2 | 60000.0 | 60000.0 | 13803.0 | 21410.0 | 939.861 | 14333.69 | 45432.26 | 61482.03 | 51914.68 | 30026.438 | 24993.0 | 1.0 |
Tidak ada keanehan dari deskripsi statistik diatas.
Function describe() memberikan informasi statistik pada masing-masing kolom, antara lain:
- Count adalah jumlah sampel pada data.
- Mean adalah nilai rata-rata.
- Std adalah standar deviasi.
- Min yaitu nilai minimum setiap kolom.
- 25% adalah kuartil pertama. Kuartil adalah nilai yang menandai batas interval dalam empat bagian sebaran yang sama.
- 50% adalah kuartil kedua, atau biasa juga disebut median (nilai tengah).
- 75% adalah kuartil ketiga.
- Max adalah nilai maksimum.
Kolom | Total | Percentage of Missing Values |
---|---|---|
UTC | 0 | 0.0 |
Temperature[C] | 0 | 0.0 |
Humidity[%] | 0 | 0.0 |
TVOC[ppb] | 0 | 0.0 |
eCO2[ppm] | 0 | 0.0 |
Raw H2 | 0 | 0.0 |
Raw Ethanol | 0 | 0.0 |
Pressure[hPa] | 0 | 0.0 |
PM1.0 | 0 | 0.0 |
PM2.5 | 0 | 0.0 |
NC0.5 | 0 | 0.0 |
NC1.0 | 0 | 0.0 |
NC2.5 | 0 | 0.0 |
CNT | 0 | 0.0 |
Fire Alarm | 0 | 0.0 |
Tidak terdapat missing value pada dataset.
Gambar 3. Outlier pada dataset
- Outlier yang terjadi pada fitur temperature merupakan nilai yang wajar karena temperature dapat berubah secara signifikan tiap waktu.
- Outlier yang terjadi pada fitur Raw Ethanol, TVOC dan Raw H2 merupakan nilai yang wajar karena dapat berubah secara signifikan tiap saat tergantung pada gas yang dapat dideteksi oleh sistem
- Outlier yang terjadi pada fitur eCO2 merupakan turunan dari nilai TVOC sehingga outlier yang dihasilkan seperti yang terjadi pada fitur TVOC
- Outlier yang terjadi pada fitur Humidity merupakan nilai yang wajar karena dapat berubah secara signifikan di suatu kondisi dan bergantung pada temperature
- Outlier yang terjadi pada fitur Pressure merupakan nilai yang wajar karena bergantung pada temperature saat itu
- Outlier yang terjadi pada fitur PM1.0 dan PM2.5 merupakan nilai yang wajar karena yang dapat menghasilkan PM1.0 dan PM2.5 bukan cuman asap melainkan seperti tempat konstruksi dan jalan tak beraspal.
- Outlier yang terjadi pada fitur NC0.5, NC1.0 dan NC2.5 merupakan nilai yang wajar karena sama halnya pada fitur PM1.0 dan PM2.5
Melihat proporsi dari nilai variabel target pada dataset:
Gambar 4. Proporsi pada fitur target
Terjadi data imbalance pada variabel target. Permasalahan tersebut dapat diselesaikan dengan cara melakukan pendekatan undersampling dan uppersampling pada variabel target atau dengan cara lain yaitu memilih metric yang tepat seperti recall, precision dan F1 Score. Tidak dapat menggunakan metric accuracy karena dapat menyebabkan bias pada saat scoring model.
Melihat kernel density estimation (KDE) plot dari tiap variabel:
Melihat hubungan humidity dengan variabel target menggunakan KDE
Gambar 5. KDE Humidity vs Fire Alarm
Selama experiment kemungkinan fire alarm ditempat yang memiliki kelembapan cukup tinggi. karena puncak density pada visualisasi diatas mencakup kelembapan > 40%
Melihat hubungan temperature dengan variabel target menggunakan KDE
Gambar 6. KDE Temperature vs Fire Alarm
Selama experiment kemungkinan fire alarm ditempat yang memiliki temperature sekitar 20 celcius
Melihat hubungan Pressure dengan variabel target menggunakan KDE
Gambar 7. KDE Pressure vs Fire Alarm
Berdasarkan puncak density dari visualisasi diatas dapat dilihat bahwa semakin tinggi Pressure maka kemungkinan untuk fire alarm berbunyi semakin besar juga
Melihat hubungan Raw H2 dengan variabel target menggunakan KDE
Gambar 8. KDE Raw H2 vs Fire Alarm
Berdasarkan puncak density dari visualisasi diatas dapat dilihat bahwa Raw H2 pada yes fire dan no fire memiliki rentang yang serupa yaitu 12500 - 1340
Melihat hubungan Raw Ethanol dengan variabel target menggunakan KDE
Gambar 9. KDE Raw Ethanol vs Fire Alarm
Berdasarkan puncak density dari visualisasi diatas dapat dilihat bahwa yes fire memiliki kecenderungan berada di jumlah Raw Ethanol sekitar 19500 - 20500 dan no fire memiliki kecenderungan berada di jumlah Raw Ethanol sekitar 20000 - 21000
Melihat korelasi antara tiap fitur:
Gambar 10. Korelasi ditiap fitur pada dataset
- Semua kolom 'PM's dan 'NC's memiliki korelasi yang tinggi dengan sesama kolom tersebut
- Tidak ada fitur yang berkorelasi tinggi dengan fitur target. Humidity, Pressure dan Raw H2 adalah fitur yang memiliki korelasi positif namun tidak tinggi dan sisanya adalah fitur yang berkorelasi rendah dengan fitur targetnya.
Gambar 11. Illustrasi Data Preparation Pada bagian ini terdapat empat tahap persiapan data, yaitu:
- Feature Selection
- Reduksi dimensi dengan Principal Component Analysis (PCA)
- Pembagian dataset dengan fungsi train_test_split dari library sklearn
- Standarisasi
Feature selection adalah proses mengurangi jumlah fitur atau variabel input dengan memilih fitur-fitur yang dianggap paling relevan terhadap model.
- Fitur yang sangat didominasi oleh satu nilai saja akan dibuang pada tahap ini. karena fitur yang didominasi satu nilai saja tidak berarti untuk machine learning.
Tidak ada fitur dengan satu nilai saja maka tidak ada fitur yang harus dibuang.
- menghapus kolom UTC karena tidak berpengaruh pada model machine learning sehingga hal ini dapat memudahkan machine learning dalam pencari pola dari dataset.
PCA bekerja menggunakan metode aljabar linier. Ia mengasumsikan bahwa sekumpulan data pada arah dengan varians terbesar merupakan yang paling penting (utama). PCA umumnya digunakan ketika variabel dalam data memiliki korelasi yang tinggi. Korelasi positif yang tinggi ini menunjukkan data yang berulang atau redundant.
Fitur yang akan dilakukan PCA adalah PM1.0, PM2.5, NC0.5, NC1.0 dan NC2.5. Karena fitur tersebut saling berkorelasi positif dan cukup tinggi.
- parameter n_components adalah jumlah komponen atau dimensi seperti dikasus ini 5 yaitu 'PM1.0', 'PM2.5', 'NC0.5', 'NC1.0' dan 'NC2.5'
- parameter random_state berfungsi untuk mengontrol random number generator yang digunakan. Parameter ini berupa bilangan integer dan nilainya bebas. Pada kasus ini, Menerapkan random_state = 42. Berapa pun nilai integer yang ditentukan. selama itu bilangan integer, ia akan memberikan hasil yang sama setiap kali dilakukan pemanggilan fungsi.
Hasil dari PCA adalah, 0.9% informasi pada kelima fitur 'PM1.0', 'PM2.5', 'NC0.5', 'NC1.0' dan 'NC2.5' terdapat pada Principal Component pertama. Sedangkan sisanya, sebesar 0.1%, 0.0%, 0.0% dan 0.0% terdapat pada Principal Component kedua, ketiga, keempat dan kelima.
Dari hasil diatas dapat dipertahankan pada Principal Component pertama saja untuk menggantikan kelima fitur yang telah direduksi sebelumnya lalu beri nama fitur ini dengan 'dimension'
Selanjutnya dapat melakukan split data ke dalam beberapa bagian yaitu data train dan data test. Melakukan beberapa transformasi pada data train sedangkan data test digunakan sebagai data uji yang diasumsikan adalah data baru sama halnya nanti di production. karna data test adalah data baru sehingga tidak diperkenankan untuk melakukan transformasi apapun, jika melakukan transformasi pada data test itu akan menimbulkan masalah baru yaitu data leakage dan dapat menyebabkan model machine learning bias.
proporsi pembagian data latih dan uji biasanya adalah 80:20. Bahwa proporsi ini hanya kebiasaan umum saja. Tujuan dari data uji adalah untuk untuk mengukur kinerja model pada data baru. Jadi, jika dataset yang dimiliki berukuran sangat kecil, misalnya kurang dari 1.000 sampel, maka pembagian 80:20 ini cukup ideal. Namun, jika memiliki dataset berukuran besar, Perlu memikirkan strategi pembagian dataset lain agar proporsi data uji tidak terlalu banyak.
Sebagai contoh, Terdapat dataset berjumlah 5 juta sampel. Dengan proporsi pembagian 80:20, maka data uji akan berjumlah 1 juta sampel. Tentu ini merupakan jumlah yang terlalu banyak karena untuk proses pengujian tidak dibutuhkan 1 juta sampel. Dalam kasus proses pengujian ini sebenarnya cukup menggunakan 1-2% data atau sebanyak 100.000 hingga 200.000 sampel saja.
Bisa disimpulkan pembagian proporsi untuk data train dan data test sangat relative tergantung ketersedian dataset.
Penjelasan:
- X adalah sebagai variabel independent
- y adalah sebagai variabel dependent
- test_size adalah proporsi untuk data testnya
- random_state berfungsi untuk mengontrol random number generator yang digunakan.
Melihat dimensi hasil pembagian pada data train dan data test:
Total Data | 62630 |
---|---|
Train Data | 56367 |
Test Data | 6263 |
Setelah melakukan split data ke dalam data train dan data test, Selanjutnya adalah melakukan data scaling, Karena value pada tiap fitur memiliki angka yang signifikan dan hal itu dapat mengakibatkan model dari machine learning kesulitan dalam mencari polanya oleh karena itu dapat dilakukan penyeragaman value tersebut kedalam rentang -1 to 1 menggunakan StandardScaler.
Selanjutnya akan lakukan training pada data train dan melakukan predict pada data test yang telah displit sebelumnya. Algoritma yang akan digunakan adalah Logistic Regression.
Logistic Regression hampir mirip dengan Linear Regression, memiliki kemiripan yaitu sama-sama memiliki garis regresi. Salah satu yang membedakan adalah Logistic Regression digunakan untuk menentukan prediksi yang benar atau salah sedangkan Linear Regression digunakan untuk memprediksi nilai yang kontinu.
Kelebihan Logistic Regression:
- Ketika terjadi overfitting pada algoritma Logistic Regression dapat menggunakan parameter regularisasi (L1 dan L2) untuk menghindari overfitting.
- Tidak memerlukan spesifikasi device yang tinggi untuk melakukan training pada algoritma logistic regression.
- bagus Ketika digunakan pada masalah binary classification.
Kekurangan Logistic Regression:
- Pada data dengan high dimensional akan memiliki kecenderungan overfitting, salah satu cara untuk menghindari hal tersebut adalah dengan melakukan regularization akan tetapi hal tersebut dapat menambah kompleksitas dari model yang akan dihasilkan.
- Permasalahan non-linear sulit untuk diselesaikan menggunakan logistic regression dikarenakan algoritma tersebut memiliki linear decision surface.
Selanjutnya define sebuah object dari Logistic Regression dan beberapa parameter yang akan dilakukan hyperparameter tuning untuk mendapatkan parameter terbaik pada case.
penjelasan dari setiap parameter:
- solvers adalah optimizer dari algoritma yang akan digunakan sebagai method untuk mencari loss terkecil dari gradient descent. terdapat beberapa solvers yang dapat digunakan seperti newton-cg, lbfgs, liblinear, sag dan saga. Secara default akan menggunakan lbfgs.
- C_values adalah nilai dari regularization yang digunakan, semakin kecil semakin memanandakan regularization yang dilakukan semakin kuat. gunanya adalah untuk menghindari overfitting.
- penalty adalah bentuk regularization dari nilai yang telah dispecify sebelumnya pada c_values. terdapat beberapa jenis penalty yang dapat dikombinasikan. seperti l1, l2 dan elasticnet.
Selanjutnya adalah melakukan hyperparameter tuning menggunakan GridSearchCV. GridSearchCV adalah metode pemilihan kombinasi model dan hyperparameter dengan cara menguji coba satu persatu kombinasi dan melakukan validasi untuk setiap kombinasi. Tujuannya adalah menentukan kombinasi yang menghasilkan performa model terbaik yang dapat dipilih untuk dijadikan model untuk prediksi.
penjelasan dari parameter yang digunakan:
- estimator adalah object dari algoritma yang telah didefine sebelumnya.
- param_grid adalah parameter dari logistic regression yang akan dilakukan hyperparameter tuning untuk mencari kombinasi parameter yang terbaik
- n_jobs adalah jumlah dari processor yang dipunya untuk gunakan nge running jobs tersebut secara parallel. value -1 berarti nge running jobs tersebut menggunakan seluruh dari processor yang dipunya.
- cv adalah cross-validation generator yang menentukan ingin melakukan berapa kali percobaan secara acak pada dataset.
Menampilkan hasil dari prediksi berupa score tertinggi dari kombinasi parameter terbaik yang telah dilakukan tuning.
names | values |
---|---|
C | 100 |
penalty | l2 |
solver | liblinear |
Precision | Recall | F1-score | Support | |
---|---|---|---|---|
0 | 0.9385026737967914 | 0.9892897406989853 | 0.9632272228320526 | 1774.0 |
1 | 0.9956749374004097 | 0.974381822232123 | 0.9849133078135555 | 4489.0 |
Hasil score dari* metric recall yang sangat baik yaitu 97% namun score ini masih dapat dilakukan improve menggunakan beberapa cara yaitu feature importance, melakukan feature engineering dan menggunakan parameter lebih banyak lagi untuk di hyperparameter tuning.
metric yang digunakan pada kasus ini adalah: Recall, karena hasil yang dinginkan adalah False Negative(FN) sekecil mungkin sehingga akan menggunakan recall sebagai metric patokan pada kasus ini. konsep dari recall ini sebagai berikut:
Penjelasan dari formula diatas:
- True Positve berarti model machine learning berhasil memprediksi bahwa ditempat tersebut terdapat asap dan memang terdapat asap di tempat tersebut.
- False Negative berarti model machine learning memprediksi bahwa ditempat tersebut tidak ada asap padahal ditempat tersebut terdapat asap. model machine learning ini dianggap gagal mendeteksi adanya asap.
Gambar 12. heatmap confusion matrix
Recall adalah salah satu metric dari kasus klasifikasi yang lebih fokus untuk memprediksi asap dalam ruangan tersebut padahal tidak ada asap. dibandingkan model machine learning memprediksi tidak ada asap dalam ruangan tersebut padahal terdapat asap. tentu akan sangat fatal jika model machine learning memilih fokus memprediksi tidak ada asap dalam ruangan tersebut padahal terdapat asap, karena jika asap yang keluar adalah potensi dari kebakaran maka hal tersebut dapat berbahaya bagi orang yang ada didalam ruangan tersebut.
Kesimpulan: Projek ini berhasil mengetahui bahwa fitur dari Humadity dan CNT adalah fitur yang paling berkorelasi dengan Fire Alarm. Menarik bahwa hanya dengan algoritma machine learning klasik sudah dapat memberikan score yang sangat tinggi. Dapat mencoba menggunakan neural network untuk hasil yang lebih baik lagi karena algoritma machine learning klasik seperti logistic regression memiliki keterbatasan dan neural network dapat menutupi dari keterbatasan itu.
Reference: (Donglin Jin, Shengzhe and Hakil Kim, 2015)
---END---