Model Prediksi Asma Berbasis Data

Silvia

Sosial Media


1 orang menyukai ini
Suka

Summary

Pembuatan model prediksi untuk kondisi medis asma berdasarkan data yang tersedia. Tujuan utama dari proyek ini adalah untuk membandingkan kinerja dua jenis model machine learning, yaitu Decision Trees dan Support Vector Machines (SVM), dalam memprediksi diagnosis asma berdasarkan berbagai fitur yang relevan.

Description

Mengimpor library dan memuat dataset 

  • import pandas as pd: Mengimpor Pandas untuk manipulasi dan analisis data.
  • from sklearn.model_selection import train_test_split: Mengimpor train_test_split untuk membagi dataset menjadi data latih dan data uji.
  • from sklearn.preprocessing import StandardScaler, OneHotEncoder: Mengimpor StandardScaler untuk penskalaan fitur numerik dan OneHotEncoder untuk encoding variabel kategori.
  • from sklearn.compose import ColumnTransformer: Mengimpor ColumnTransformer untuk menggabungkan transformer ke dalam satu transformer.
  • from sklearn.pipeline import Pipeline: Mengimpor Pipeline untuk mengatur alur proses transformasi data dan pelatihan model.
  • from sklearn.tree import DecisionTreeClassifier: Mengimpor DecisionTreeClassifier untuk membangun model klasifikasi dengan decision tree.
  • from sklearn.svm import SVC: Mengimpor SVC untuk membangun model klasifikasi dengan Support Vector Machine (SVM).
  • from sklearn.metrics import classification_report, accuracy_score: Mengimpor classification_report dan accuracy_score untuk mengevaluasi kinerja model klasifikasi.
     

Menampilkan informasi awal dataset

  • Output dari kode tersebut memberikan gambaran cepat tentang struktur data, termasuk jumlah data yang tersedia, jenis data dalam setiap kolom, dan apakah ada nilai yang hilang yang dimana ini penting untuk memahami karakteristik data sebelum melakukan analisis lebih lanjut atau membangun model prediksi.

 

Mempersiapkan data untuk proses permodelan 

  • Memisahkan fitur (X) dan target (y) dari sebuah dataset, dengan asumsi data adalah DataFrame yang berisi kolom-kolom 'Diagnosis' (target) dan 'DoctorInCharge' (fitur yang tidak dipakai).
  • Memisahkan data untuk membagi dataset menjadi data latih (train) dan data uji (test) menggunakan fungsi train_test_split dari scikit-learn.

 

Membuat pipeline preprocessing data 

  • Pipeline untuk fitur numerik 

numeric_features: Daftar nama fitur numerik yang akan diolah.
numeric_transformer: Pipeline untuk transformasi fitur numerik.
('scaler', StandardScaler()): Menggunakan StandardScaler untuk penskalaan fitur numerik agar memiliki rata-rata nol dan deviasi standar satu.

  • Pipeline untuk fitur kategorikal 

categorical_features: Daftar nama fitur kategorikal yang akan diolah.
categorical_transformer: Pipeline untuk transformasi fitur kategorikal.
('onehot', OneHotEncoder(handle_unknown='ignore')): Menggunakan OneHotEncoder untuk mengubah variabel kategorikal menjadi vektor biner, dengan menangani nilai yang tidak diketahui (handle_unknown='ignore').

  • ColumnTransformer untuk Menggabungkan Preprocessing

preprocessor: Menggabungkan preprocessing untuk fitur numerik dan kategorikal menggunakan ColumnTransformer.
transformers: Daftar tupel yang berisi nama transformer, transformer itu sendiri, dan fitur-fitur yang akan diolah oleh transformer tersebut.
('num', numeric_transformer, numeric_features): Mengaplikasikan numeric_transformer ke fitur numerik yang didefinisikan dalam numeric_features.
('cat', categorical_transformer, categorical_features): Mengaplikasikan categorical_transformer ke fitur kategorikal yang didefinisikan dalam categorical_features.

 

Membangun, melatih, dan menguji dua model machine learning (Decision Tree dan SVM) 

  • Pipeline(steps=[...]): Membuat pipeline yang terdiri dari beberapa langkah atau tahapan.
  • 'preprocessor', preprocessor: Langkah pertama dalam pipeline adalah preprocessing yang telah didefinisikan sebelumnya dalam variabel preprocessor.
  • 'classifier', DecisionTreeClassifier(random_state=42): Langkah kedua adalah penggunaan model Decision Tree (DecisionTreeClassifier).
  • random_state=42 digunakan untuk memastikan hasil yang konsisten dalam pengacakan data (opsional).
  • dt_model.fit(...): Melatih model Decision Tree dengan menggunakan data latih (X_train dan y_train).
  • dt_model.predict(X_test): Menggunakan model Decision Tree yang telah dilatih untuk melakukan prediksi terhadap data uji (X_test), dan menyimpan hasil prediksi dalam y_pred_dt.

  • Pipeline(steps=[...]): Membuat pipeline yang terdiri dari beberapa langkah atau tahapan.
  • 'preprocessor', preprocessor: Langkah pertama dalam pipeline adalah preprocessing yang telah didefinisikan sebelumnya dalam variabel preprocessor.
  • 'classifier', SVC(random_state=42): Langkah kedua adalah penggunaan model SVM (SVC). random_state=42 digunakan untuk memastikan hasil yang konsisten dalam pengacakan data (opsional).
  • svm_model.fit(...): Melatih model SVM dengan menggunakan data latih (X_train dan y_train).
  • svm_model.predict(X_test): Menggunakan model SVM yang telah dilatih untuk melakukan prediksi terhadap data uji (X_test), dan menyimpan hasil prediksi dalam y_pred_svm.

 

Evaluasi Model 

  • print("\nEvaluasi Decision Tree:"): Menampilkan teks untuk memulai bagian evaluasi model Decision Tree.
  • accuracy_score(y_test, y_pred_dt): Menggunakan fungsi accuracy_score dari scikit-learn untuk menghitung akurasi model. Fungsi ini membandingkan nilai target sebenarnya (y_test) dengan hasil prediksi (y_pred_dt) dan mengembalikan nilai akurasi dalam persentase.
  • classification_report(y_test, y_pred_dt): Menggunakan fungsi classification_report dari scikit-learn untuk menghasilkan laporan klasifikasi yang mencakup metrik seperti precision, recall, f1-score, dan support untuk setiap kelas.
  • \n: Menambahkan baris baru untuk memisahkan teks sebelumnya dengan laporan klasifikasi.
  • Hasil evaluasi : Akurasi: 88.9% menunjukkan seberapa baik model memprediksi dengan benar pada data uji.
    Laporan Klasifikasi:
    Untuk kelas 0 (Mayoritas):
    Precision: 0.95, Recall: 0.93, F1-score: 0.94
    Support: 456
    Untuk kelas 1 (Minoritas):
    Precision: 0.08, Recall: 0.13, F1-score: 0.10
    Support: 23
    Rata-rata:
    Macro Avg: Precision: 0.52, Recall: 0.53, F1-score: 0.52
    Weighted Avg: Precision: 0.91, Recall: 0.89, F1-score: 0.90
    Hasil ini menunjukkan bahwa model Decision Tree memiliki kinerja baik dalam mengidentifikasi kelas mayoritas (kelas 0), tetapi kinerja yang rendah dalam mengidentifikasi kelas minoritas (kelas 1).

  • Hasil evaluasi : Akurasi: 95.2% menunjukkan seberapa baik model memprediksi dengan benar pada data uji.
    Laporan Klasifikasi:
    Untuk kelas 0 (Mayoritas):
    Precision: 0.95, Recall: 1.00, F1-score: 0.98
    Support: 456
    Untuk kelas 1 (Minoritas):
    Precision: 0.00, Recall: 0.00, F1-score: 0.00
    Support: 23
    Rata-rata:
    Macro Avg: Precision: 0.48, Recall: 0.50, F1-score: 0.49
    Weighted Avg: Precision: 0.91, Recall: 0.95, F1-score: 0.93

 

Kesimpulan 

  • Decision tree : Hasil evaluasi model dengan decision tree memiliki kinerja yang baik dalam mengidentifikasi kelas mayoritas (kelas 0), tetapi mengalami kesulitan dalam mengidentifikasi kelas minoritas (kelas 1), seperti yang tercermin dari nilai precision, recall, dan f1-score yang rendah untuk kelas 1.
  • SVM : Hasil evaluasi model dengan SVM memiliki akurasi yang tinggi dalam mengidentifikasi kelas mayoritas (kelas 0), tetapi performa yang sangat buruk dalam mengidentifikasi kelas minoritas (kelas 1), seperti yang tercermin dari nilai precision, recall, dan f1-score yang sangat rendah untuk kelas 1. 
  • Rekomendasi : Berdasarkan perbandingan di atas, rekomendasi untuk digunakan dalam proyek ini adalah Decision Tree. Meskipun SVM memiliki akurasi yang lebih tinggi secara keseluruhan, kemampuannya untuk mengidentifikasi kasus asma (kelas 1) sangat rendah, dengan precision, recall, dan F1-score yang mencerminkan performa yang sangat buruk untuk kelas minoritas ini. Decision Tree, meskipun memiliki performa yang lebih rendah dalam hal akurasi global, masih memberikan hasil yang lebih baik dalam memprediksi kelas 1, meskipun tidak sempurna. Ini memberikan keuntungan dalam konteks medis di mana mengidentifikasi kasus positif (asma) dengan lebih baik bisa menjadi prioritas utama untuk diagnosis dan penanganan yang tepat

Informasi Course Terkait
  Kategori: Data Science / Big Data
  Course: Data Science SIB Batch 6