Tugas 1 Machine Learning




Prediksi Stabilitas Jaringan Listrik Menggunakan Algoritma Naïve Bayes dan K-Means

1. Latar Belakang [back]

  • Stabilitas jaringan listrik sangat penting untuk mencegah gangguan dan blackout
  • Peningkatan permintaan energi dan variasi beban membuat prediksi stabilitas menjadi lebih kompleks.

2. Tujuan [back]

  • Memprediksi apakah jaringan listrik stabil atau tidak.
  • Mengoptimalkan analisis data dengan kombinasi K-Means dan Naïve Bayes.
  • Membandingkan hasil clustering dan klasifikasi untuk meningkatkan akurasi prediksi.

3. Dataset [back]

Dataset: Data_for_UCI_named (UCI Machine Learning Repository).

Informasi Atribut:
11 atribut prediktif, 1 atribut non-prediktif (p1), 2 bidang target:
  • tau[x]: waktu reaksi partisipan (real dari rentang [0,5–10] detik). Tau1 – nilai untuk produsen listrik.
  • p[x]: daya nominal yang dikonsumsi (negatif)/dihasilkan (positif) (real). Untuk konsumen dari rentang [-0,5, -2] s^-2; p1 = |p2 + p3 + p4|
  • g[x]: koefisien (gamma) yang sebanding dengan elastisitas harga (real dari rentang [0,05–1] s^-1). g1 – nilai untuk produsen listrik.
  • stab: bagian real maksimal dari akar persamaan karakteristik (jika positif – sistem secara linear tidak stabil) (real)
  • stabf: label stabilitas sistem (kategorikal: stabil/tidak stabil)

4. Metodologi  [back]

A. Naïve Bayes (Python)
  • Digunakan untuk klasifikasi prediksi stabilitas jaringan listrik.
  • Input: Fitur asli.
  • Langkah:
1. Import Library
  • Gunakan library untuk manipulasi data (pandas), visualisasi (matplotlib, seaborn), dan machine learning (sklearn).
2. Upload & Load Dataset
  • Upload dataset CSV ke Colab.
  • Load dataset menggunakan pd.read_csv().
  • Tampilkan beberapa baris awal (head()) dan info dataset (info()).
3. Analisis Awal
  • Cek distribusi kelas target (value_counts()) untuk melihat keseimbangan kelas.
4. Pisahkan Fitur & Label
  • Fitur (X) = semua kolom kecuali label.
  • Label (y) = kolom target (stabf).
  • Ubah label ke format numerik jika perlu (stable=0, unstable=1).
5. Bagi Dataset (Train-Test Split)
  • Gunakan train_test_split() dari sklearn.model_selection.
  • 80% data untuk latihan, 20% untuk pengujian.
6. Bangun Model Naïve Bayes
  • Gunakan GaussianNB() dari sklearn.naive_bayes.
  • Fit model dengan data latih (model.fit(X_train, y_train)).
7. Prediksi Data Uji
  • Gunakan model.predict(X_test) untuk mendapatkan prediksi.
8. Evaluasi Kinerja Model
  • Hitung accuracy, precision, recall, F1-score dengan sklearn.metrics.
  • Tampilkan hasil evaluasi dalam bentuk numerik.
9. Visualisasi Confusion Matrix
  • Gunakan confusion_matrix() dan seaborn.heatmap() untuk memvisualisasikan performa model.
10. Laporan Klasifikasi Lengkap
  • Gunakan classification_report() untuk melihat precision, recall, F1-score per kelas.
Kode program (python)
# =========================================================
# 📘 Prediksi Stabilitas Jaringan Listrik Menggunakan Naïve Bayes
# Dataset : Data_for_UCI_named.csv
# =========================================================

# 1️⃣ Import Library
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import (
    accuracy_score,
    precision_score,
    recall_score,
    f1_score,
    confusion_matrix,
    classification_report
)
from google.colab import files

# 2️⃣ Upload Dataset ke Colab
print("Silakan pilih file dataset (Data_for_UCI_named.csv):")
uploaded = files.upload()

# 3️⃣ Load Dataset
data = pd.read_csv("Data_for_UCI_named.csv")

print("\n=== Contoh 5 Data Pertama ===")
display(data.head())

print("\n=== Informasi Dataset ===")
print(data.info())

print("\n=== Distribusi Kelas Target (stabf) ===")
print(data['stabf'].value_counts())

# 4️⃣ Pisahkan Fitur dan Label Target
X = data.drop('stabf', axis=1)
y = data['stabf']

# Ubah label ke numerik (stable = 0, unstable = 1)
y = y.map({'stable': 0, 'unstable': 1})

# 5️⃣ Bagi Data (80% latih, 20% uji)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

print("\nJumlah data latih :", len(X_train))
print("Jumlah data uji   :", len(X_test))

# 6️⃣ Bangun Model Naïve Bayes
model = GaussianNB()
model.fit(X_train, y_train)

# 7️⃣ Prediksi Data Uji
y_pred = model.predict(X_test)

# 8️⃣ Evaluasi Kinerja Model
akurasi = accuracy_score(y_test, y_pred)
presisi = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print("\n=== HASIL EVALUASI MODEL NAÏVE BAYES ===")
print(f"Akurasi : {akurasi:.4f}")
print(f"Presisi : {presisi:.4f}")
print(f"Recall  : {recall:.4f}")
print(f"F1-Score: {f1:.4f}")

# 9️⃣ Confusion Matrix (Visualisasi)
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(6, 4))
sns.heatmap(
    cm, annot=True, fmt='d', cmap='Blues',
    xticklabels=['Pred: Stable', 'Pred: Unstable'],
    yticklabels=['Aktual: Stable', 'Aktual: Unstable']
)
plt.title('Confusion Matrix - Naïve Bayes')
plt.xlabel('Prediksi')
plt.ylabel('Aktual')
plt.show()

# 🔟 Laporan Klasifikasi
print("\n=== Laporan Klasifikasi Lengkap ===")
print(classification_report(y_test, y_pred, target_names=['Stable', 'Unstable']))

B. K-Means (Rapidminer)
  • Digunakan untuk clustering data awal.
  • Menentukan pola/kelompok tersembunyi dalam data.
  • Langkah:
1. Retrieve Dataset
  • Gunakan operator Retrieve untuk memuat dataset Data_for_UCI_named.
2. Set Role
  • Tentukan kolom target (stabf) menjadi label dengan operator Set Role.
3. Multiply Data
  • Gunakan operator Multiply jika ingin mencoba beberapa jumlah cluster (k) secara paralel.
  • Ini memungkinkan evaluasi beberapa konfigurasi K-Means sekaligus.
4. K-Means Clustering
  • Tambahkan operator K-Means untuk masing-masing dataset hasil multiply.
  • Sesuaikan parameter k (jumlah cluster) sesuai eksperimen: k=2, k=3, k=4, k=5, k=6, k=7
  • Hubungkan output exa (examples) ke operator evaluasi.
5. Performance / Evaluation
  • Gunakan operator Performance (Cluster Distance Performance) untuk menilai kualitas cluster.
6. Output / Analisis
  • Pilih jumlah k optimal berdasarkan kriteria evaluasi dengan Elbow Method.

5. Hasil Analisis [back]

=== HASIL EVALUASI MODEL NAÏVE BAYES === Akurasi : 0.9735 Presisi : 0.9891 Recall : 0.9702 F1-Score: 0.9795

=== Laporan Klasifikasi Lengkap === precision recall f1-score support Stable 0.95 0.98 0.96 693 Unstable 0.99 0.97 0.98 1307 accuracy 0.97 2000 macro avg 0.97 0.97 0.97 2000 weighted avg 0.97 0.97 0.97 2000

Akurasi: 97,35%
  • Tingkat akurasi yang tinggi ini menunjukkan bahwa model Naïve Bayes mampu membedakan kondisi jaringan listrik yang stabil dan tidak stabil dengan benar lebih dari 97% kasus. Hal ini membuktikan bahwa model ini sangat efektif untuk tugas klasifikasi tersebut.
Presisi: 98,91%
  • Presisi yang hampir sempurna ini sangat penting. Artinya, ketika model memprediksi sistem sebagai "tidak stabil," hampir dipastikan prediksi tersebut benar. Dalam konteks operasional, ini krusial karena mengurangi risiko alarm palsu, yang bisa menyebabkan intervensi mahal dan tidak perlu pada jaringan listrik.
Recall (Sensitivitas): 97,02%
  • Selain presisi yang tinggi, nilai recall yang kuat menunjukkan model berhasil mengidentifikasi 97% dari semua kondisi "tidak stabil" yang sebenarnya terjadi. Metrik ini sangat penting untuk keselamatan sistem, karena menunjukkan risiko rendah model melewatkan kejadian ketidakstabilan yang nyata, sehingga mencegah potensi kegagalan sistem tidak terdeteksi.
F1-Score: 97,95%
  • Sebagai rata-rata harmonis antara presisi dan recall, F1-score yang tinggi ini menegaskan bahwa model Naïve Bayes memiliki keseimbangan yang sangat baik antara keandalan (menghindari alarm palsu) dan sensitivitas (tidak melewatkan kejadian nyata).

Dari matriks ini, kita dapat mengamati secara kuantitatif:

  • Jumlah False Positives (FP) yang sangat rendah, yaitu 39, menegaskan kemampuan model untuk menghindari salah menandai kondisi stabil sebagai tidak stabil.
  • Jumlah False Negatives (FN) yang rendah, yaitu 14, menunjukkan bahwa model jarang gagal mendeteksi ketidakstabilan yang sebenarnya terjadi, yang sangat penting untuk keandalan operasional.


Dengan Rapidminer diperoleh:


Berdasarkan data rata-rata dalam jarak centroid pada setiap variasi k, gunakan metode elbow untuk menentukan nilai k untuk jumlah cluster yang paling optimal

selisih rata rata jarak centroid 
k=2 - k=3: 3,47
k=3 - k=4: 2,784
k=4 - k=5: 2,092
k=5 - k=6: 1,503
k=6 - k=7: 1,458

dengan metode elbow diperoleh k=4 untuk jumlah cluster paling optimal

6. Kesimpulan [back]

Model Naive Bayes berhasil memprediksi stabilitas jaringan listrik pada dataset yang telah diproses dengan sangat akurat, mencapai akurasi 97,35%, presisi 98,91%, dan recall 97,02%. Presisi tinggi mengurangi risiko alarm palsu, sedangkan recall tinggi memastikan deteksi instabilitas nyata, menjadikan model ini andal dan efisien untuk manajemen sistem tenaga listrik. Sebelum klasifikasi, K-Means clustering dengan K=4 (hasil Metode Elbow) bisa digunakan untuk mengidentifikasi struktur data optimal, memudahkan pembersihan anomali dan noise, sehingga meningkatkan kualitas dan representasi dataset. Kombinasi kedua metode ini menunjukkan pendekatan yang kuat, praktis, dan efektif untuk analisis dan prediksi stabilitas jaringan listrik.

7. Download File [back]





Posting Komentar

Lebih baru Lebih lama