Daftar Tebakan yang Mengalahkan Daftar Terukur

Daftar Target yang "Lebih Benar" Secara Metodologi

Salah satu bagian dari kerja saya di proyek medcoder — asisten AI yang mengusulkan kode diagnosis ICD-10 dan tindakan ICD-9-CM dari catatan SOAP, jalan offline di server sendiri — adalah mengukur seberapa lengkap sistem retrieval-nya: dari sekian ribu kode yang ada di basis pengetahuan, berapa persen yang benar-benar bisa "ditemukan" ketika dibutuhkan.

Untuk mengukur ini saya butuh daftar target: kode-kode apa saja yang seharusnya bisa dicakup sistem. Pendekatan yang saya pilih pertama kali terasa paling rigor: hitung langsung dari database, kode apa saja yang pernah dipakai, lalu jadikan itu daftar target evaluasi. Ini kedengarannya jelas lebih objektif dibanding menebak-nebak sendiri kondisi apa yang umum terjadi.

Ketertukaran yang Tidak Disengaja

Di tengah eksperimen, saya sempat — tanpa sengaja — memakai daftar target alternatif: daftar yang saya susun manual berdasarkan perkiraan kondisi apa saja yang lazim muncul di praktik klinis sehari-hari, bukan hasil query database. Harusnya ini daftar yang "lebih kasar" dan kurang bisa dipertanggungjawabkan secara metodologi.

Tapi skornya justru lebih baik. Pada satu kategori, daftar tebakan manual menaikkan skor dari 87,5% ke 88,3% tanpa menjatuhkan metrik lain sama sekali. Daftar yang dihitung dari database untuk kategori yang sama malah menjatuhkannya ke 86,7%. Bukan selisih yang bisa dianggap kebetulan — cukup jelas untuk membuat saya berhenti dan bertanya: kenapa daftar tebakan manual mengalahkan daftar yang dihitung langsung dari data?

Kenapa Ini Bisa Terjadi

Setelah ditelusuri, jawabannya bukan soal cara menghitung daftar targetnya — daftar yang diturunkan dari database itu tetap lebih benar secara metodologi, dalam arti memang mencerminkan apa yang pernah tercatat di data. Masalahnya ada di komposisi isinya:

  • Daftar dari database didominasi kode-kode yang secara teknis "belum tercakup" oleh sistem retrieval — tapi kode-kode itu sendiri nyaris tidak pernah benar-benar dipakai di praktik nyata. Mereka masuk daftar karena tercatat, bukan karena penting.
  • Daftar tebakan manual justru secara alami berisi kondisi-kondisi yang memang lazim terjadi — karena itu yang otomatis terpikir duluan oleh siapa pun yang mencoba menebak kondisi umum, tanpa perlu query apa pun.

Jadi ketika sistem gagal mencakup satu kode langka yang ada di daftar database, itu menurunkan skor "cakupan penuh" — padahal kode itu nyaris tidak relevan untuk penggunaan sehari-hari. Sebaliknya, daftar tebakan kebetulan lebih selaras dengan apa yang benar-benar terjadi di lapangan, sehingga skornya naik justru karena mengukur hal yang lebih relevan, bukan karena metodenya lebih longgar. Pembedanya baru benar-benar ketahuan belakangan, setelah saya cek satu per satu: dari 280 kode yang ada di daftar target hasil hitung database itu, 240 di antaranya ternyata tidak pernah dipakai sekali pun di 158.712 catatan kunjungan nyata yang saya punya. Daftar itu secara teknis benar, tapi 86% isinya adalah kode yang praktis tidak relevan untuk diukur sebagai target cakupan.

Metrik yang "Lebih Presisi" Bisa Mengukur Hal yang Salah

Kesimpulan yang saya ambil bukan "cara memilih daftar target yang salah" — kalau ditanya mana yang metodologinya lebih defensible, jawabannya tetap daftar yang dihitung dari database. Yang keliru adalah apa yang diukur: mengejar cakupan penuh terhadap seluruh kode yang mungkin pernah muncul di data, ternyata target yang salah untuk dikejar. Yang seharusnya dikejar adalah cakupan terhadap kode yang benar-benar sering dipakai di praktik.

Metrik yang secara teknis lebih menyeluruh bisa jadi justru mengukur hal yang kurang penting — dibanding metrik yang kelihatannya lebih kasar atau naif, tapi kebetulan lebih selaras dengan kenyataan pemakaian.

Praktiknya, ini mengubah cara saya menyusun daftar evaluasi retrieval berikutnya: bukan lagi sekadar "semua kode yang pernah tercatat", tapi dibobot berdasarkan frekuensi pemakaian nyata — supaya kode yang jarang sekali muncul tidak ikut menyeret skor turun untuk hal yang tidak dibutuhkan pengguna sehari-hari.

Pelajaran yang Saya Bawa

Sebelum sibuk mengoptimasi angka sebuah metrik, saya belajar untuk berhenti dulu dan bertanya: apakah metrik ini benar-benar mewakili apa yang penting? Kejadian ini kebetulan — saya tidak sengaja memakai daftar yang salah — tapi justru dari kesalahan itu saya menemukan sesuatu yang lebih berharga daripada kalau eksperimennya berjalan mulus sesuai rencana. Proyek medcoder sendiri masih terus berjalan, dan cerita semacam ini yang membuat saya lebih hati-hati membaca angka benchmark ke depannya — bukan hanya percaya karena metodenya kedengaran lebih rigor di atas kertas.