TUGAS MACHINE LEARNING



1. Judul [Kembali]

Clustering Konsumsi Energi Listrik menggunakan K-Means

2.Tujuan [Kembali]

Mengelompokkan pola konsumsi energi listrik pelanggan berdasarkan tingkat dan karakteristik pemakaian listrik menggunakan metode K-Means Clustering.

Mengidentifikasi kelompok pelanggan dengan konsumsi listrik rendah, sedang, dan tinggi secara objektif berdasarkan data historis pemakaian.

Menganalisis perbedaan karakteristik tiap cluster, sehingga dapat diketahui pola penggunaan energi listrik pada masing-masing kelompok.

3. Prinsip Kerja [Kembali]

Kenapa Menggunakan K-Means?

Metode K-Means sebaiknya digunakan dalam clustering konsumsi energi listrik karena metode ini sederhana, efisien, dan efektif untuk mengelompokkan data numerik dalam jumlah besar, seperti data pemakaian energi listrik yang umumnya berbentuk angka kontinu (kWh) per periode waktu. K-Means bekerja dengan meminimalkan jarak antar data dalam satu cluster dan memaksimalkan jarak antar cluster, sehingga mampu menghasilkan kelompok pelanggan dengan pola konsumsi yang relatif homogen. Hal ini sangat sesuai untuk mengidentifikasi perbedaan tingkat konsumsi listrik, misalnya rendah, sedang, dan tinggi, berdasarkan kesamaan pola penggunaan.

Selain itu, K-Means memiliki kompleksitas komputasi yang rendah, sehingga cocok digunakan pada dataset konsumsi listrik yang besar dan berdimensi banyak, seperti data bulanan atau tahunan. Proses iteratifnya cepat dan mudah diimplementasikan menggunakan berbagai perangkat lunak analisis data. Hasil clustering K-Means juga mudah diinterpretasikan, karena setiap cluster direpresentasikan oleh titik pusat (centroid) yang menggambarkan karakteristik rata-rata konsumsi energi listrik pada kelompok tersebut. Dengan demikian, metode ini sangat mendukung analisis lanjutan dan pengambilan keputusan dalam pengelolaan, perencanaan, serta efisiensi energi listrik.

Cara kerja algoritma K-Means Clustering adalah sebagai berikut:

Tentukan nilai k, yaitu jumlah kelompok yang ingin dibentuk.

Pilih k titik acak dari data sebagai pusat kelompok awal.

Untuk setiap data, tentukan pusat kelompok terdekat dan tempatkan data tersebut ke dalam kelompok tersebut.

Hitung ulang pusat kelompok dengan mengambil rata-rata dari seluruh data dalam kelompok.

Ulangi langkah 3 dan 4 sampai tidak ada data lagi yang berubah kelompok atau telah mencapai batas iterasi yang ditentukan.

Algoritma ini mengoptimalkan objektif untuk meminimalkan jarak antara setiap data dengan pusat kelompok yang ditugaskan. Dengan demikian, kelompok yang dihasilkan akan memiliki varian minimal dan terpisah dengan kelompok lainnya.

1. Menyiapkan Data Awal dari Artikel

Pertama, saya memasukkan artikel referensi ke dalam ChatGPT. Artikel tersebut berisi pola, variabel, atau struktur data yang ingin saya tiru.

Setelah artikel dimasukkan, saya memberikan prompt berikut kepada AI:

“Buatkan saya data yang mirip dengan artikel ini untuk saya olah.”

Melalui prompt tersebut, ChatGPT menghasilkan data dalam format Excel, biasanya berupa ratusan ribu baris (lebih dari 200.000 data), sesuai dengan struktur yang terdapat dalam artikel.

2. Mengurangi atau Menyesuaikan Jumlah Data

Jika jumlah data yang digenerate terlalu besar untuk kebutuhan atau keterbatasan perangkat, saya memberikan prompt tambahan, misalnya:

“Modifikasi datanya menjadi 365 data saja.”

Dengan perintah tersebut, AI akan memperkecil dataset menjadi 365 baris tanpa mengubah pola atau karakteristik utama data yang berasal dari artikel.

3. Membuat Listing Program Matlab

Setelah data siap, saya meminta ChatGPT untuk membuatkan kode pemrosesan sesuai kebutuhan analisis. Langkah-langkahnya sebagai berikut:

  1. Inputkan artikel ke ChatGPT sebagai dasar referensi konsep, metode, atau struktur data.

  2. Memberikan prompt lanjutan:

    “Buatkan saya coding Matlab K-Means yang sesuai dengan artikel di atas, dengan hasil yang mirip dan dapat membaca file Excel yang sudah dibuat sebelumnya.”

Melalui prompt tersebut, ChatGPT akan menghasilkan listing program Matlab lengkap yang:

  • Mengimpor data dari file Excel,

  • Melakukan proses clustering menggunakan metode K-Means, dan

  • Menampilkan output yang sesuai atau menyerupai hasil pada artikel referensi.


Ada 2 data yang saya gunakan dapat di download disini

Klik Disini Data A

Klik Disini Data B

Saya melakukan simulasi dengan kedua data
Data A (200rb)

Data B (365)


Prinsip Kerja Listing Program

Algoritma :
  • Baca data konsumsi energi dari Excel
  • Normalisasi data
  • Cari jumlah klaster terbaik dengan Elbow Method
  • Jalankan K-Means (k=8)
  • Validasi hasil dengan Silhouette & DBI
  • Hitung centroid dalam kWh
  • Visualisasi klaster
  • Simpan hasil ke Excel

    Program Matlab ini bekerja untuk melakukan analisis pengelompokan konsumsi energi listrik menggunakan metode K-Means. Langkah pertama dimulai dengan membaca data Excel yang berisi catatan konsumsi energi pelanggan. Data tersebut ditampilkan sebagian untuk memastikan bahwa proses impor berjalan dengan benar. Setelah data masuk, nilai konsumsi energi dinormalisasi menggunakan metode Z-Score agar setiap nilai berada pada skala yang sama, sehingga algoritma K-Means dapat bekerja lebih akurat tanpa dipengaruhi perbedaan besar kecilnya angka.

    Tahap berikutnya adalah menentukan jumlah klaster terbaik menggunakan Elbow Method. Pada bagian ini, program menjalankan K-Means untuk jumlah klaster 1 hingga 12, lalu menghitung total jarak dalam klaster (WCSS). Nilai tersebut kemudian diplotkan menjadi sebuah grafik, dan dari bentuk grafik itulah dapat ditemukan titik "siku" yang menjadi indikasi jumlah klaster optimal. Setelah jumlah klaster ditetapkan—dalam contoh ini sebanyak 8 klaster sesuai acuan jurnal—program menjalankan K-Means secara penuh dengan beberapa pengulangan untuk memastikan hasil yang stabil. Setiap data kemudian diberi label klaster dan digabungkan kembali ke tabel utama.

    Untuk mengevaluasi kualitas klaster yang terbentuk, program menggunakan dua metode validasi: Silhouette Score dan Davies–Bouldin Index. Silhouette Score memberikan gambaran mengenai seberapa baik data berada dalam kelompoknya masing-masing, sementara Davies–Bouldin Index menunjukkan seberapa besar pemisahan antar klaster. Nilai-nilai ini membantu memastikan bahwa pengelompokan yang dilakukan sudah cukup baik. Setelah itu, program menghitung kembali nilai centroid dalam satuan kWh asli dengan mengambil rata-rata konsumsi pada tiap klaster. Ini penting agar hasil clustering dapat dipahami dalam konteks dunia nyata, bukan hanya dalam skala Z-Score.

    Sebagai tambahan, program juga menampilkan visualisasi distribusi klaster berdasarkan konsumsi energi dan bulan pencatatan. Visualisasi ini membantu melihat pola penggunaan energi sepanjang waktu. Pada akhir proses, semua hasil pengelompokan disimpan kembali ke file Excel baru sebagai output yang dapat digunakan untuk analisis lanjutan atau kebutuhan laporan. Dengan rangkaian langkah yang sistematis ini, program memberikan gambaran menyeluruh mengenai pola konsumsi energi dan pengelompokannya menggunakan K-Means.


Proses Filterisasi Data :

Mengapa data awal 300 ribu berubah menjadi sekitar 200 ribu?

Perubahan jumlah data ini terjadi bukan karena error, tetapi karena proses pembersihan data (data cleaning) yang memang wajib dilakukan agar analisis dan clustering tidak salah.

Di dalam file dijelaskan bahwa:

1. Menghapus akun tidak aktif (21.526 data dibuang)

Banyak pelanggan tidak memiliki konsumsi selama tahun 2023–2024.
Akun seperti ini dianggap tidak aktif / kosong, sehingga tidak mewakili perilaku konsumsi listrik.

2. Menghapus data konsumsi negatif (8.978 data dibuang)

Ada catatan yang nilai konsumsi bulanannya minus.
Ini biasanya terjadi karena:

  • kesalahan input,

  • kesalahan pencatatan meter,

  • re-billing / koreksi tagihan.

Data ini dianggap tidak valid, sehingga harus dibuang.

3. Menghapus pelanggan non-residensial (59.720 data dibuang)

Penelitian hanya fokus pada pelanggan rumah tangga (BTCRSD01).
Jadi semua pelanggan:

  • komersial,

  • industri,

  • fasilitas umum,

  • dan jenis tarif lain

dikeluarkan dari dataset, data dibuang sekitar 29%

Improvment yang saya lakukan :

Sebelumnya:
➡ Semua pelanggan dengan konsumsi 0 kWh sepanjang tahun langsung dihapus.

Sekarang (improvement):
Jangan langsung hapus, tapi klasifikasikan menjadi beberapa kategori:

Kategori Pengguna 0 kWh

  1. Inactive – benar-benar tidak digunakan (kosong).

  2. Meter Error – meter rusak, pencatatan tidak masuk.

  3. Late Input / Missing Record – data terlambat masuk.

  4. Seasonal Zero – hanya beberapa bulan nol, bukan setahun.

Dengan cara ini:

  • Data tidak langsung hilang.

  • Bisa dianalisis dengan lebih akurat.

  • Bisa dipakai untuk prediksi migrasi pelanggan.


4. Listring Program [Kembali]

Listing Program

clc; clear; close all;
%% 1️⃣ Membaca Data Excel
data = readtable('Data_KMeans_Energi.xlsx');
disp('Contoh 5 data pertama:');
disp(head(data));
%% 2️⃣ Normalisasi Konsumsi (Z-Score)
X = zscore(data.Konsumsi_kWh);
%% 3️⃣ Menentukan Jumlah Klaster Optimal (Elbow Method)
maxK = 12;
wcss = zeros(maxK,1); % Within-Cluster Sum of Squares
for k = 1:maxK
[~,~,sumd] = kmeans(X, k, 'Replicates',3, 'MaxIter',300);
wcss(k) = sum(sumd);
end
% Plot Elbow Method
figure;
plot(1:maxK, wcss, 'bo-','LineWidth',1.5);
xlabel('Jumlah Klaster (k)');
ylabel('Total Within-Cluster Sum of Squares');
title('Elbow Method untuk Menentukan k Optimal');
grid on;
%% 4️⃣ K-Means Clustering (K=8 Sesuai Jurnal)
k = 8;
[idx, C, sumd] = kmeans(X, k, 'Replicates',5, 'MaxIter',500);
% Tambahkan hasil klaster ke tabel
data.Cluster_KMeans = idx;
%% 5️⃣ Validasi Hasil Klaster
% Silhouette Score
figure;
silhouette(X, idx);
title('Silhouette Plot (K=8)');
avgSilhouette = mean(silhouette(X, idx));
disp(['Rata-rata Silhouette: ', num2str(avgSilhouette)]);
% Davies–Bouldin Index
daviesBouldin = evalclusters(X, idx, 'DaviesBouldin');
disp(['Davies–Bouldin Index: ', num2str(daviesBouldin.CriterionValues)]);
%% 6️⃣ Nilai Centroid (dalam satuan kWh)
for i = 1:k
centroid_real(i) = mean(data.Konsumsi_kWh(idx==i));
end
disp('Centroid rata-rata konsumsi tiap klaster (kWh):');
disp(centroid_real');
%% 7️⃣ Visualisasi Distribusi Klaster
figure;
gscatter(data.Konsumsi_kWh, month(data.Tanggal), idx);
xlabel('Konsumsi (kWh/bulan)');
ylabel('Bulan');
title('Distribusi Pelanggan berdasarkan Klaster K-Means');
legend('Klaster 1','Klaster 2','Klaster 3','Klaster 4','Klaster 5','Klaster 6','Klaster 7','Klaster 8');
%% 8️⃣ Simpan Hasil Klaster ke File Excel Baru
writetable(data, 'Hasil_KMeans_Energi.xlsx');
disp('✅ Hasil klaster telah disimpan ke file "Hasil_KMeans_Energi.xlsx"');

Output

Data A



Contoh 5 data pertama:

      Tanggal      Konsumsi_kWh    Lokasi    Tarif    Cluster_asli

    ___________    ____________    ______    _____    ____________

 

    01-Feb-2023       30.638         4         2           1     

    01-Dec-2024       16.819         2         2           1     

    01-Nov-2023       17.336         5         2           1     

    01-Mar-2023       13.969         1         2           1     

    01-Mar-2024       25.948         3         3           1     

    01-Feb-2024       6.3765         3         1           1     

    01-Jul-2024       31.383         4         3           1     

    01-May-2023       15.896         3         1           1     

 

Rata-rata Silhouette: 0.72763

Davies–Bouldin Index: 0.54969

Centroid rata-rata konsumsi tiap klaster (kWh):

   1.0e+03 *

 

    0.0692

    1.1510

    4.9160

    0.2019

    3.3990

    1.6587

    0.4019

    0.6964

 

Data B

Contoh 5 data pertama:
          Tanggal           Konsumsi_kWh    Cluster_asli
    ____________________    ____________    ____________

    01-Jan-2024 00:00:00       18.024            1      
    02-Jan-2024 00:03:57       20.252            1      
    03-Jan-2024 00:07:54       7.3983            1      
    04-Jan-2024 00:11:52       30.737            1      
    05-Jan-2024 00:15:49       9.5166            1      
    06-Jan-2024 00:19:46       15.398            1      
    07-Jan-2024 00:23:44       23.708            1      
    08-Jan-2024 00:27:41       12.904            1      

Rata-rata Silhouette: 0.76829
Davies–Bouldin Index: 0.40176
Centroid rata-rata konsumsi tiap klaster (kWh):
   1.0e+03 *

    0.0803
    5.3425
    0.2574
    1.9702
    6.7095
    3.9715
    1.2213
    0.5576




Listing Program Improvment:

Data  ini

clc; clear; close all;
% ========================================
% BACA DATA DARI EXCEL
% ========================================
filename = 'data_konsumsi.xlsx';
% Baca semua data
raw = readtable(filename);
% Ambil hanya kolom bulan (kolom 2 sampai 13)
data = raw{:, 2:13};
% Jumlah pelanggan
num_customers = size(data, 1);
labels = strings(num_customers, 1);
% ========================================
% KLASIFIKASI KONSUMSI 0 kWh
% ========================================
for i = 1:num_customers
row = data(i,:);
zero_count = sum(row == 0);
% 1. Semua nol → Inactive
if all(row == 0)
labels(i) = "Inactive";
% 2. Nol berturut-turut panjang → Meter Error
elseif contains(regexprep(num2str(row==0), ' +', ''), '1111')
labels(i) = "Meter Error";
% 3. Nol sedikit (1-2 bulan) → Missing Input
elseif zero_count <= 2
labels(i) = "Missing Input";
% 4. Nol di awal atau akhir → Seasonal Zero
elseif row(1)==0 || row(end)==0
labels(i) = "Seasonal Zero";
% 5. Jika tidak termasuk semua di atas
else
labels(i) = "Active Normal";
end
end
% ========================================
% TAMPILKAN HASIL
% ========================================
T = table(raw.ID, labels);
disp(T)
Output :

    Var1         Var2      
    ____    _______________

     1      "Inactive"     
     2      "Missing Input"
     3      "Missing Input"
     4      "Seasonal Zero"
     5      "Meter Error"  

5. Download File[Kembali]

Data Excel Klik Disini

Listing Program Klik Disini

Data Improvment Klik Disini



Tidak ada komentar:

Posting Komentar

     BAHAN PRESENTASI     MATA KULIAH ELEKTRONIKA 2022 Oleh Muhammad Farhan Pramasta 2210953033 DOSEN PENGAMPU DR. DARWISON, M.T. Referensi ...