Friday, August 22, 2014

KawalSuara: Hitung Suara Dengan CrowdSourcing Tanpa Supervisi? Kok Bisa?

Seperti diketahui pada pilpres 2014 yang lalu KPU merilis hasil scan formulir C1 yang berisi data perolehan suara dari masing-masing TPS di seluruh Indonesia yang berjumlah lebih dari 478,000. Karena berupa hasil scan, sulit bagi masyarakat untuk menghitung rekap perolehan suara. Untuk itu aplikasi berbasis web KawalSuara (http://kawal-suara.appspot.com) dibuat agar masyarakat dapat bergotong royong (crowdsourcing) mengentri data perolehan berdasarkan scan formulit C1 tersebut ke dalam database. Dengan demikian perolehan suara dapat direkap ke semua tingkat (kelurahan, kecamatan, kabupaten, provinsi & nasional). 

Keunikan KawalSuara adalah sistem gotong royong yang sangat terbuka:
  • Setiap orang dapat berpartisipasi tanpa pendaftaran,
  • Semua kontribusi dilakukan secara anonim
  • Tidak ada supervisi oleh sekelompok orang dengan hak khusus (special privilege)
Keterbukaan ini justru menjadi sumber pertanyaan: Bagaimana memastikan akurasi data karena orang bisa saja mengisi data salah baik sengaja maupun tidak.

Artikel ini akan mencoba menjelaskan bagaimana KawalSuara menerapkan mekanisme validasi yang sederhana namun efektif untuk mendeteksi entri-entri yang salah. Efektifitas dari mekanisme ini terbukti dengan hasil yang sangat mendekati hasil resmi dari KPU (selisih 0.37% pada tanggal 22 Juli 2014). 

Cara Kerja

Ada dua prinsip utama di sistem Kawal-Suara untuk memastikan akurasi dari data entri:
  • Pemilihan formulir C1 secara acak
    Hal ini untuk menghindari bias. Dengan pemilihan formulir secara acak, persentase perolehan suara akan cepat mencapai konvergensi (kurang dari 24 jam setelah Kawal-Suara dimulai, persentase perolehan suara sudah stabil dan tidak berfluktuasi lebih dari 1%).
  • Mekanisme verifikasi untuk mendeteksi entri yang salah.
    Sistem akan mengusahakan agar setiap TPS dientri lebih dari satu kali. Bila ada entri yang berbeda maka yang dipilih adalah angka yang paling banyak dientri (nilai modus tertinggi). Misal sebuah TPS di-entri 4 kali. Data perolehan suara utk salah satu capres yang dientri adalah 125, 500, 175 dan 125. Maka yang dipilih adalah 125. Asumsinya adalah kemungkinan data entri benar lebih besar daripada data entri salah.
Sebagai implementasi kedua prinsip di atas, Kawal-Suara menyediakan dua jenis mekanisme kontribusi dari relawan:
  • Entri Data
    Relawan mengentri data berdasarkan formulir C1 yang dipilih sistem. Sistem akan memilih formulir C1 secara acak namun dengan prioritas berdasarkan nilai modus total yang terkecil (nilai modus dihitung untuk setiap jenis data: suara Prabowo, suara jokowi, suara sah, & suara tidak sah).

    Sebuah TPS yang belum pernah dientri akan mempunyai nilai modus total = 0. Semakin banyak sebuah TPS dientri dengan data yang sama, maka nilai modusnya akan semakin tinggi. Perlu diperhatikan bahwa, sebuah TPS tidak akan pernah keluar dari daftar antrian untuk Entri Data. Jadi yang terjadi adalah saat nilai modus bertambah, TPS tersebut akan dilempar ke belakang antrian. Dengan demikian pada dasarnya proses data entri tidak pernah berakhir. Selama masih ada yang melakukan data entri, antrian tersebut akan terus berputar.
  • Verifikasi Data
    Relawan mengecek hasil entri dari relawan lain dan memberi tanda:
    • “BENAR” - efeknya adalah sama dengan mengentri dengan data yang sama persis, sehingga menguatkan tingkat kepercayaan dari entri data sebelumnya.
    • “SALAH” -- efeknya tidak serta merta menghapus data yang dientri sebelumnya, melainkan sekedar mereset nilai modus menjadi 0, sehingga menempatkan TPS tersebut kembali ke antrian Entri Data dengan prioritas tinggi. Diharapkan saat entri berikutnya akan diisi dengan data yang benar.
Sama seperti Entri Data, formulir C1 yang akan diverifikasi dipilih oleh sistem secara acak dan dengan prioritas yang berbanding terbalik dengan nilai modus.

Sebenarnya mekanisme Verifikasi Data tidak benar-benar diperlukan. Karena hanya dengan mekanisme Entri Data pun lama-kelamaan setiap TPS akan dientri berkali-kali dan akan terverifikasi dengan sendirinya (Definisi terverifikasi adalah nilai modus le bih dari 1 utk setiap jenis data).  Hanya saja dikhawatirkan jika hanya ada mekanisme Entri Data, antusiasme relawan akan sangat berkurang jika jumlah TPS yang telah dientri telah mencapai 100% meskipun sebagian besar belum terverifikasi. Hal ini akan mengurangi tingkat kepercayaan akan hasil keseluruhan.

Dengan adanya mekanisme Verifikasi, jumlah TPS yang terverifikasi akan cenderung mengikuti jumlah yang terentri. Dengan demikian tingkat kepercayaan akan hasil perhitungan dapat terus dijaga. Sebagai mekanisme keamanan tambahan, setiap alamat IP hanya dapat mengentri (dan memverifikasi) data satu kali per TPS.
  
Serangan Terstruktur, Sistematis & Masif

Mekanisme verifikasi di atas mendapat ujian ketika KawalSuara menerima flood attack, di mana dalam jangka waktu singkat muncul ribuan entri yang salah. Sebagian diantaranya dapat dipastikan di-generate oleh bot (IP tertentu melakukan entri  dengan data invalid hampir setiap detik). Dampak dari serangan ini persentase perolehan suara sempat berfluktuasi hingga hampir 1%.

Selama serangan praktis tidak ada tindakan yang dilakukan admin selain menyerukan kepada para relawan untuk lebih giat melakukan entri dan verifikasi data. Dalam waktu relative singkat (2-3) jam, persentase perolehan suara kembali ke posisi “normal”.
Analisa setelah kejadian berhasil menemukan sejumlah alamat IP yang menghasilkan setidaknya 15,000 entri yang invalid. Sebagian besar berhasil terdeteksi oleh mekanisme yang ada, namun diperkirakan ada beberapa ratus entri invalid yang “lolos” dan dianggap sebagai entri yang terverifikasi. 


Hal ini diperkirakan karena adanya kerja sama antara para pengganggu tersebut.  Sebagian pelaku bertugas melakukan entri data yang salah, sementara sebagian lagi melakukan verifikasi di mana jika ditemukan entri yang salah, mereka justru menandai entri tersebut sebagai entri yang “BENAR”. Akibatnya entri tersebut akan terlempar ke belakang antrian karena nilai modusnya bertambah. Akan butuh waktu lama sebelum entri tersebut mendapat kesempatan entri/verifikasi ulang tanpa intervensi.

Hal ini bisa dianggap sebagai kelemahan dari adanya mekanisme verifikasi data. Meskipun demikian, dampak dari usaha manipulasi ini sangat terbatas, pertama karena pemilihan formulir secara acak oleh sistem baik untuk entri maupun verifikasi, dan karena jumlah entri yang valid masih jauh lebih banyak dari entri invalid.

Setelah kejadian ini sistem KawalSuara diperkuat dengan mekanisme keamanan sebagai berikut:
  • Blokir IP untuk repeat offender.
  • Heuristics untuk menolak entri yang jelas-jelas tidak valid (misal jumlah suara lebih dari 900).

Hasil Perhitungan

Hingga KPU mengumumkan perolehan suara resmi tanggal 22 Juli, KawalSuara memang baru berhasil mengentri (dan memverifikasi) data dari 284,479 TPS (59.4%). Meskipun demikian persentase perolehan suara yang dihitung sangat mendekati hasil dari KPU. Sebagai perbandingan ditampilkan pula hasil perhitungan suara oleh KawalPemilu (http://www.kawalpemilu.org)


Prabowo-Hatta
Jokowi-JK
KPU
46.85%
53.15%
KawalSuara
47.22%
52.78%
KawalPemilu
46.99%
53.01%
 
Namun perlu diperhatikan, KPU tidaklah merekap langsung dari scan C1. Melainkan berdasarkan proses rekapitulasi berjenjang mulai dari kelurahan, kecamatan, hingga nasional. Sehingga meskipun entri data dengan cara crowdsourcing bisa 100% akurat, tetap akan ada perbedaan dengan hasil perhitungan resmi antara lain karena kesalahan2 pengisian formulir C1 (yang banyak ditemukan) yang diperbaiki terutama di tingkat kelurahan dan kecamatan, pemungutan suara ulang di beberapa daerah, dan masih adanya TPS yang belum tersedua scan formulir C1. 

Ukuran akurasi lainnya adalah dengan menghitung persentase TPS yang berhasil dientri dengan benar. Sayangnya KPU tidak merilis rekap C1 mereka. Untuk kita menggunakan data dari KawalPemilu sebagai pembanding. Data diambil dari KawalPemilu per tanggal 5 Agustus 2014.

Seperti diketahui, KawalPemilu juga memanfaatkan jasa relawan untuk melakukan data entri formulir C1. Perbedaannya KawalPemilu menggunakan proses rekrutmen untuk mendapatkan relawan yang diasumsikan dapat dipercaya. Dengan demikian data dari KawalPemilu dianggap sebagai golden standard untuk menentukan tingkat akurasi dari KawalSuara.

Dari hasil perbandingan ditemukan 3233 TPS dari 284,479 TPS (1.14%) yang telah dientri di KawalSuara dengan data berbeda . Sebagai catatan, yang dibandingkan hanyalah data perolehan suara masing-masing capres. Dari 3233 TPS tersebut, 636 di antaranya belum dientri di KawalPemilu (Suara Prabowo & Jokowi keduanya 0). Ada dua kemungkinan: pada saat dientri scan formulir C1 memang belum tersedia atau karena scan formulir C1 halaman 4 tertukar dengan halaman lain yang menyebabkan pengentri mengira tidak ada data.

Dengan demikian yang benar2 menunjukkan ada perbedaan adalah di 2597 TPS (0.91%). Hasil pemeriksaan secara acak diperkirakan ada 4 macam penyebab perbedaan tersebut:
  • Unsur Kesengajaan
    Ini adalah hasil serangan seperti yang telah dijelaskan di atas
  • Unsur Ketidak-sengajaan
    Dalam banyak kasus antara scan C1 dan data yang dientri hanya berbeda 1 digit. Tidak tertutup kemungkinan ini kesalahan ketik yang tidak disengaja.
  • Tulisan yang tidak jelas   
    Cukup banyak juga hasil scan yang tidak jelas atau memang tulisan yang tidak jelas. Terkadang ini menyebabkan data entri yang salah.
  • Data dari KawalPemilu tidak akurat
    KawalPemilu pun ternyata tidak sepenuhnya terlepas dari masalah data entri yang salah. Bisa karena ketidaksengajaan, tapi tidak tertutup kemungkinan ada relawan yang “nakal”.

Untuk poin satu sampai tiga, secara teori seharusnya mekanisme verifikasi akan banyak mendeteksi hal tersebut. Namun dalam prakteknya masih juga ada yang lolos. Seperti dijelaskan sebelumnya hal ini bisa disebabkan karena ada yang sengaja memberi tanda “BENAR” untuk entri yang salah. Selain karena proses verifikasi yang sangat cepat dan dalam sebagian besar kasus entri data sudah benar, bukan tidak mungkin hal ini menyebabkan turunnya ketelitian relawan hingga tidak sengaja membenarkan entri yang salah.


Mengapa Bisa (Relatif) Akurat?

Dalam beberapa kesempatan saya menyampaikan bahwa sistem KawalSuara ini akan bekerja dengan baik jika lebih banyak orang jujur yang mengentri dibandingkan orang tidak jujur. Salah satu tujuan saya mengatakan ini tentunya adalah untuk memotivasi para relawan.  Dan ini memang sangat masuk akal. Jika probabilitas entri benar lebih besar dari entri salah (entri oleh orang jujur lebih banyak dari entri oleh orang tidak jujur), maka untuk jumlah entri cukup banyak frekuensi entri yang benar akan cenderung lebih besar dari pada frekuensi entri salah. 

Jadi meskipun orang jujur hanya sedikit lebih banyak dibanding yang tidak jujur asalkan entri data bisa dilakukan terus menerus, cepat atau lambat hasil perhitungan akan menuju konvergensi (i.e. semakin mendekati hasil sebenarnya).

Tapi secara teori sebenarnya syarat untuk menuju konvergensi bahkan jauh lebih mudah lagi. Yaitu probabilitas nilai yang benar dientri lebih besar daripada probabilitas dientrinya nilai-nilai yang lain.

Jika S adalah himpunan seluruh nilai yang mungkin, sedangkan z adalah nilai yang benar maka konvergensi dapat dicapai jika

               P(z) > P(x)           untuk semua x (elementof) S dan x ≠ z

Logikanya adalah dua orang jujur akan cenderung mengisi angka yang sama, sedangkan dua orang tidak jujur (atau orang jujur yang kurang teliti) kecil kemungkinannya mengisi angka yang sama. 

Secara umum P(z) akan jauh lebih besar jika diasumsikan P(x) adalah sama untuk semua  x (elementof) S. Hal ini S mempunyai banyak anggota (untuk kasus pilpres  S adalah himpungan bilangan bulat dari 0 sampai 800).  

Sebagai contoh jika P(z) = 0.5 (dari seluruh relawan hanya setengah yang jujur), maka P(x) = (1 – 0.5) / 800 = 0.000625. Dengan demikian cukup dua orang saja menulis angka yang sama, kemungkinan sangat besar bahwa angka tersebut adalah angka yang benar.

Memang ada kasus tertentu di mana asumsi di atas tidak berlaku, yaitu jika terjadi serangan terstruktur dan sistematis di mana sejumlah orang tidak jujur sepakat mengentri angka salah yang sama. Sebagaimana telah disebutkan sebelumnya, diperlukan mekanisme tambahan untuk mengurangi resiko hal ini yaitu dengan pemilihan formulir secara acak, pembatasan entri per TPS dari satu IP, dan fitur-fitur keamanan tambahan lainnya.


Apa Yang Bisa Diperbaiki?

Kelemahan utama  sistem crowdsourcing yang terbuka adalah perlunya usaha ekstra untuk memvalidasi seluruh data entri karena relawan tidak bisa diasumsikan semuanya terpercaya. Dalam kasus KawalSuara jumlah total kontribusi (entri data dan verifikasi data) mencapai lebih dari 730,000. Seandainya semua kontribusi itu dianggap valid tentunya lebih dari cukup untuk entri data 478,000 TPS. Namun karena rata2 setiap TPS perlu lebih dari 2 kontribusi agar dianggap terverifikasi, maka perhitungan baru mencapai hampir 60%.

Mungkinkah efisiensi sistem ini ditingkatkan? Jawabnya sangat mungkin. Perlu diperhatikan bahwa dengan sistem yang sekarang, semua kontribusi dianggap memiliki tingkat kepercayaan yang sama. Artinya meskipun berdasarkan histori dapat diketahui bahwa seluruh entri dari IP tertentu adalah tidak valid, entri berikutnya dari IP tersebut tetap dianggap sama terpercayanya dengan entri dari relawan lainnya. Seharusnya histori tersebut dapat digunakan untuk menentukan tingkat kepercayaan seorang kontributor (berdasarkan alamat IP). Dengan demikian satu entri dari kontributor yang terpercaya mungkin sudah cukup untuk menganggap entri tersebut valid. Sebaliknya beberapa entri dengan angka yang sama sekalipun tapi datang dari beberapa kontributor yang tidak dapat dipercaya, tidak menjadikan entri tersebut valid. 


Tulisan saya berikutnya akan mencoba mengembangkan ide ini lebih lanjut (kalau sempat :)).