Evaluasi pada Bagian 4 memberi angka; analisis kesalahan memberi penjelasan. Bagian penutup ini menjalankan src/analisis_kesalahan.py yang menyusun tiga pandangan berlapis: confusion matrix, daftar sampel salah beserta keyakinan model, dan statistik bercak yang menguji hipotesis secara eksplisit. Metode berlapis seperti ini adalah inti chapter Analisis Kesalahan
— dugaan “model kesulitan pada daun dengan sedikit bercak” tidak kita biarkan sebagai dugaan, tetapi kita buktikan dengan data.
Menjalankan Analisis #
Dari folder proyek, analisis berjalan di atas checkpoint hasil Bagian 3:
python3 src/analisis_kesalahan.pyOutput yang Dihasilkan:
model : CNNDaun (9538 parameter)
data uji : 75 gambar (pembagian stratified, seed 42)
confusion matrix (baris = label, kolom = prediksi):
pred sehat pred berbintak
label sehat 35 3
label berbintak 4 33
akurasi uji: 0.9067 (68/75)
sampel salah: 7
posisi label prediksi keyakinan bercak
1 sehat berbintak 0.642 0 (FP)
2 sehat berbintak 0.684 0 (FP)
15 berbintak sehat 0.905 1 (FN)
21 berbintak sehat 0.868 1 (FN)
33 berbintak sehat 0.516 1 (FN)
40 berbintak sehat 0.752 1 (FN)
57 sehat berbintak 0.568 0 (FP)
akurasi per kelompok jumlah bercak (hanya daun berbintak):
kelompok jumlah benar akurasi
1 16 12 0.750
2 8 8 1.000
3 5 5 1.000
4 8 8 1.000
sehat 38 35 0.921
rata-rata bercak: sampel salah 1.00 vs sampel benar 2.27
kasus tersulit: daun berbintak dengan 1 bercak (akurasi 0.750 dari 16 sampel)Skrip membagi tugasnya menjadi tiga fungsi: muat_model membangun CNNDaun lalu mengisi bobot dari checkpoint, prediksi mengembalikan kelas terpilih beserta keyakinan softmax, dan fungsi main menyusun seluruh laporan. Kunci yang menghubungkan laporan ini dengan Bagian 2 adalah indeks_latih_uji(y) — indeks uji identik dengan yang dipakai pelatihan, sehingga baris jumlah_bintak dapat dibaca untuk sampel uji tanpa risiko salah pasang.
Membaca Daftar Sampel Salah #
Kolom bercak pada daftar sampel salah langsung memperlihatkan pola yang dicari:
- Empat false negative (posisi 15, 21, 33, 40): seluruhnya daun berbintak dengan tepat satu bercak — kategori kasus sulit yang sengaja kita tanam pada generator di Bagian 1.
- Tiga false positive (posisi 1, 2, 57): daun sehat dengan keyakinan 0.568-0.684. Pada dataset ini, sekitar 22 persen daun sehat membawa satu-dua piksel noise gelap yang menyerupai bercak kecil — model menangkap kemiripan itu dan menebak berbintak.
- Keyakinan tidak selalu rendah saat keliru: false negative pada posisi 15 justru berkeyakinan 0.905. Model tidak sekadar “ragu-ragu”; pada kasus satu bercak samar, model yakin ke arah yang salah — temuan yang tidak akan terlihat bila kita hanya memfilter sampel berkeyakinan rendah.
Statistik Bercak Membuktikan Pola #
Tabel akurasi per kelompok jumlah bercak mengubah daftar kesalahan menjadi bukti terukur:
| Kelompok | Jumlah uji | Akurasi |
|---|---|---|
| 1 bercak | 16 | 0.750 |
| 2 bercak | 8 | 1.000 |
| 3 bercak | 5 | 1.000 |
| 4 bercak | 8 | 1.000 |
| sehat | 38 | 0.921 |
Dua-dua bercak ke atas selalu benar; satu bercak hanya benar 12 dari 16. Rata-rata bercak pada sampel salah (1.00) versus sampel benar (2.27) menutup argumen: semakin banyak bercak, semakin mudah model mengenali — dan semakin sedikit, semakin menyerupai daun sehat yang membawa noise. Kesalahan tidak tersebar acak; kesalahan terkonsentrasi pada satu segmen data yang dapat kita definisikan tanpa melihat label prediksinya.
Hipotesis dan Langkah Perbaikan #
Pola yang sudah terbukti mengarahkan langkah perbaikan berikutnya secara jauh lebih presisi daripada “latih lebih lama”:
- Tambah sampel kasus sulit: menaikkan proporsi daun berbercak satu (misalnya dari 15 menjadi 40 persen) memberi gradien lebih banyak contoh pada segmen tersulit — perubahan satu baris pada generator.
- Augmentasi potongan gambar: memotong area sekitar bercak dan melatih ulang membantu filter convolution menangkap bercak kecil; tekniknya dibahas pada chapter Image Augmentation .
- Ambang keputusan khusus: menggeser batas keputusan ke kelas berbintak (misalnya prediksi berbintak bila peluangnya melewati 0.35, bukan 0.5) menukar beberapa false positive dengan recall lebih tinggi — pilihan yang masuk akal karena biaya false negative jauh lebih besar.
Proyek ini menutup satu putaran penuh: data diperiksa, diproses, model dilatih, prediksi dievaluasi, lalu kesalahannya dibedah sampai akar penyebabnya terbukti. Kemampuan yang sama — membangun model dari data terbatas — bisa dilampaui ketika kita memakai model yang sudah dilatih orang lain sebagai titik awal; itulah pokok bahasan proyek berikutnya, Transfer Learning dengan Model Pretrained .