- Pengenalan konsep tipe
Uncertain<T>, sebuah abstraksi baru untuk menangani ketidakpastian di level kode
- Tipe ini menerapkan metodologi pemrograman probabilistik untuk memodelkan tingkat kepercayaan atau kemungkinan nilai, alih-alih logika boolean tradisional
- Menyediakan kemampuan untuk menangani data dunia nyata yang penuh noise seperti GPS dan data sensor sebagai distribusi probabilitas matematis
- Mendukung keseimbangan antara efisiensi komputasi dan keandalan hasil melalui teknik sampling seperti SPRT dan metode Monte Carlo
- Dapat diintegrasikan secara bertahap dengan kode yang sudah ada, sehingga sangat praktis untuk diterapkan di dunia kerja
Mengodekan ketidakpastian: jarak antara keyakinan dan data dunia nyata
- Disebutkan fenomena banyak orang yang terlalu bergantung pada kepastian
- Ditunjukkan bahwa seiring bertambahnya pengalaman dalam pengembangan perangkat lunak, frekuensi mengatakan “tergantung situasinya” juga meningkat
- Namun dalam kode, pola yang hanya bergantung pada penilaian benar/salah masih terus berulang
- Kritik terhadap kenyataan bahwa bahkan saat menangani data yang tidak pasti seperti GPS, kita tetap hanya menggunakan nilai boolean
- Model pemrograman terlalu cepat membelah ‘ketidakpastian’ dunia nyata menjadi dua kategori, sehingga menyembunyikan kompleksitasnya
Memilih abstraksi yang tepat
- Pada 2014, University of Washington dan Microsoft Research mengusulkan konsep yang secara langsung mencerminkan ketidakpastian dalam sistem tipe
- Melalui makalah "Uncertain<T>: A First-Order Type for Uncertain Data", mereka menunjukkan bahwa pendekatan pemrograman probabilistik bersifat praktis
- Kode yang mem-porting konsep tersebut ke Swift dipublikasikan di repositori GitHub
- Dengan
Uncertain<T>, hasil perbandingan juga diekspresikan sebagai probabilitas relatif, dan hasil dikembalikan sebagai Uncertain<Bool>, bukan sekadar benar/salah
- Error posisi GPS dimodelkan sesuai karakteristik data nyata, misalnya dengan distribusi Rayleigh
Praktik berbagai operasi ketidakpastian
- Mendukung berbagai operator dan model distribusi probabilitas, serta membangun graph komputasi dan hanya menjalankan sampling saat diperlukan
- Menggunakan SPRT (Sequential Probability Ratio Testing) untuk mengatur jumlah sampel secara efisien
- Contoh kode menjelaskan perbedaan jumlah sampel yang dibutuhkan antara perbandingan sederhana dan perbandingan majemuk
- Melalui abstraksi ini, ketidakpastian tidak diabaikan, tetapi dimanfaatkan secara alami dalam proses komputasi, sehingga memungkinkan implementasi kode yang lebih ‘cerdas’
Penerapan metodologi Monte Carlo
- Mengadopsi sampling Monte Carlo untuk analisis distribusi probabilitas dan perhitungan nilai harapan
- Dalam praktiknya, dengan mensimulasikan hasil mesin slot berulang kali, nilai ekspektasi dapat diperoleh dengan mudah
- Bahkan tanpa perhitungan analitis yang rumit, hasil yang realistis bisa didapat hanya melalui sampling berulang oleh komputer
Pemodelan distribusi probabilitas yang kaya
Uncertain<T> memiliki berbagai konstruktor distribusi probabilitas bawaan, sehingga dapat memodelkan secara presisi data dunia nyata seperti noise sensor, perilaku pengguna, dan latensi jaringan
- Mendukung parameterisasi untuk berbagai situasi seperti mixture distribution, Bernoulli, exponential, normal, dan lainnya
- Untuk membantu pemahaman intuitif tiap distribusi, juga disediakan proyek visualisasi interaktif secara terpisah
Menyediakan operasi statistik dan analisis
- Menyediakan beragam fungsi statistik seperti nilai harapan, deviasi standar, interval kepercayaan, skewness, kurtosis, dan entropy
- Hasil komputasi memungkinkan pengaturan jumlah sampel, sehingga trade-off antara presisi dan efisiensi bisa disesuaikan
- Dengan memanfaatkan cumulative distribution function (CDF), probabilitas bahwa nilai berada di bawah ambang tertentu juga dapat dihitung dengan mudah
Panduan penerapan di dunia nyata
- Menjelaskan masalah yang bisa muncul di aplikasi nyata ketika ketidakpastian diabaikan (misalnya tampilan kecepatan GPS yang tidak masuk akal)
- Menekankan transisi bertahap: disarankan mulai mengintegrasikan
Uncertain<T> secara parsial dari jalur inti seperti pengukuran jarak yang sudah ada
- Akurasi dan performa dapat diseimbangkan melalui pengaturan biaya komputasi seperti jumlah sampel
- Dalam praktik, sangat disarankan memanfaatkan alat profiling seperti Instruments.app secara aktif
- Tujuannya bukan menghilangkan ketidakpastian, melainkan mengakui keberadaannya dan membangun pola pengembangan yang menanganinya dengan tepat
Kesimpulan dan prospek
- Pengembang dapat mulai memperkenalkan penanganan ketidakpastian dari area kecil terlebih dahulu untuk meningkatkan usability dan mengurangi error
- Dengan menerima bahwa kepastian sempurna tidak ada, kualitas perangkat lunak dapat ditingkatkan satu tingkat melalui alat dan abstraksi yang tepat
- Secara praktis, menangani ketidakpastian yang memang ada dengan benar adalah bentuk perbaikan nyata yang sesungguhnya
1 komentar
Opini Hacker News