3 poin oleh GN⁺ 2025-08-29 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-08-29
Opini Hacker News
  • Ketidakpastian GPS umumnya hanya bisa didekati sebagai lingkaran dalam kondisi tertentu seperti penentuan posisi jangka panjang di bawah langit terbuka; sebenarnya model galat keseluruhannya jauh lebih kompleks dan ada berbagai cara mengukur galat. Hal ini menjadi penting dalam banyak situasi yang membuat posisi sulit diperlakukan sebagai satu titik tunggal. Misalnya, pada mobil otonom, ketidakpastian estimasi posisi sering kali didominasi oleh fenomena multipath yang non-sirkular. Jika memikirkan kesulitan ini cukup dalam, pada akhirnya kita akan sampai pada titik “menemukan kembali” teknik seperti particle filter.
    • GPS kendaraan biasanya dilengkapi dengan beberapa sensor dan asumsi tambahan, terutama odometer, kompas, dan pengetahuan bahwa kendaraan kemungkinan berada di salah satu jalan pada peta. Selain itu, asumsi bahwa tidak ada perubahan posisi antara pemadaman daya terakhir dan penyalaan ulang memungkinkan penentuan posisi yang cepat.
    • Titik-titik lidar sebenarnya bukan sekadar titik, melainkan hadir sebagai elipsoid yang berpusat pada lokasi paling mungkin.
  • Di University of Cambridge, saya merancang mikroarsitektur prosesor yang terinspirasi oleh Uncertain<T>(James Bornholt) dan riset terkait. Bukan hanya distribusi parametrik (Gaussian, Rayleigh, dll.), tetapi juga himpunan sampel arbitrer dimuat ke register/memori agar nilai program dapat merambat melalui operasi aritmetika sebagai distribusi nonparametrik. Berdasarkan teknologi ini, perusahaan spin-off bernama Signaloid sedang masuk ke pasar, dan saya juga sedang meneliti penerapannya pada estimasi keadaan (mis. particle filter) tautan makalah
  • Jika memahami konsep bahwa variabel dalam pemrograman dapat memuat “spesifikasi” dari variabel matematis, maka terbuka kemungkinan-kemungkinan luar biasa yang menjadi dasar AI modern. Ambil persamaan akrab y = m * x + b: ketika semuanya literal, itu hanya fungsi render sederhana; tetapi jika variabel-variabel tersebut memuat keseluruhan struktur jalur komputasi yang menurunkannya, maka tergantung arah komputasinya kita bisa memprediksi nilai untuk dirender (forward pass), atau secara otomatis memperoleh gradien/diferensial untuk melatih jaringan saraf. Dengan melakukan sampling matematis atas hasil-hasil ini, kita dapat memperoleh bobot yang membentuk model. Setiap lapisan deep learning dirancang dengan cara seperti ini, dan sistem seperti PyTorch dapat dikompilasi menjadi kode optimal hanya dengan menyatakan komposisi operasinya. Dengan kata lain, Uncertain<T> hanyalah titik awal; akan sangat menarik membayangkan semua variabel numerik dapat kapan saja didefinisikan sebagai metadata dari nilai-nilai kandidat, dan metadata ini bisa dimanipulasi semudah menjumlahkan nilai variabel.
    • Ini terdengar sangat menarik. Saya penasaran apakah ada yang bisa menjelaskannya agar mudah dipahami bahkan oleh orang seperti saya yang tidak terlalu paham machine learning atau matematika.
    • Saya penasaran apakah benar-benar ada bahasa PL (programming language) yang mendukung konsep seperti ini di tingkat bahasa.
    • Komentar ini terasa seperti mencampuradukkan variabel, fungsi, dan sistem linear; sepertinya tidak perlu disatukan seperti itu.
  • Saya penasaran apakah kovariansi antar banyak variabel juga bisa ditangani dengan pendekatan ini. Misalnya, posisi objek yang diukur itu sendiri juga bisa punya galat, dan galat posisi saya bisa berkorelasi dengannya (apalagi jika diukur oleh GPS pada saat yang sama). Jika sistem tipe hanya punya model univariat, itu tetap berguna, tetapi jika bisa menangani kovariansi juga, pemakaiannya akan jauh lebih kuat dan akurat.
    • Jika memakai pendekatan berbasis sampling, pemodelan kovariansi otomatis tercakup. Nilai leaf yang dipakai berkali-kali dalam satu evaluasi cukup di-sampling sekali saja, dan kita bisa melihat bahwa implementasi itu memang demikian pada kode di bawah ini kode Uncertain.swift
    • Sudah lama saya penasaran apakah program bisa “mempelajari” kovariansi saat dipakai sungguhan. Jika variabel dimodelkan secara independen, rasanya hasilnya akan terus melenceng dari kenyataan. Dan dalam program skala besar, mempertimbangkan korelasi semua pasangan variabel secara manual pada praktiknya mustahil. Mungkin perlu dirancang cara agar ini dipelajari secara otomatis.
    • Jika perlu pelacakan kovariansi, saya juga menyarankan mencoba pustaka gvar di python.
    • Jika ingin memodelkan mekanika kuantum dengan benar, kita perlu mengaitkan fungsi gelombang bernilai kompleks untuk setiap himpunan variabel yang saling terbelit.
  • Dalam gambar teknik mesin dan sejenisnya, saat berkomunikasi dengan operator manufaktur digunakan konsep “toleransi”, misalnya 10 cm +8 mm/-3 mm untuk menandai rentang yang diizinkan secara jelas ke arah atas dan bawah. Untuk pertanyaan berbasis GPS seperti “apakah sudah hampir sampai?”, saya juga berharap penting untuk memahami arah galat dan membedakan kasus yang lebih baik/lebih buruk berdasarkan “arah” ketidakpastian.
    • Kekurangan notasi ini adalah bahwa dalam beberapa kasus artinya “tidak akan pernah melewati batas maksimum/minimum”, sedangkan dalam kasus lain bisa ditafsirkan sebagai “hanya ada peluang 10% untuk melewati batas”.
    • Estimasi metode tiga titik (optimistis, realistis, pesimistis) yang sering dipakai dalam perencanaan pekerjaan juga mirip. Bahkan distribusi probabilitas yang sangat sederhana pun memberi kejelasan yang jauh lebih besar di semua bidang yang melibatkan ketidakpastian.
  • Konsep ini sudah beberapa kali diimplementasikan di masa lalu dengan nama “interval arithmetic”, dan juga didukung di Boost serta flint Boost Interval flint(arb). Meski terus-menerus ditemukan kembali seperti ini, saya penasaran mengapa ia tidak pernah benar-benar menjadi arus utama. Kalau ada yang pernah mencoba memakainya di lapangan lalu menyerah karena kurang bagus, saya ingin mendengar pengalamannya.
    • Artikel aslinya menjelaskan bahwa Uncertain<T> memakai distribusi Rayleigh untuk ketidakpastian GPS. Distribusi Rayleigh bukan distribusi uniform, dan memodelkan distribusi galat dunia nyata dengan lebih baik. Misalnya, jika di Boost kita hitung (-2,2)*(-2,2), hasilnya menjadi (-4,4), tetapi secara probabilistik kemungkinan kedua nilai ekstrem terjadi bersamaan jauh lebih rendah, jadi kira-kira (-2.35,2.35) lebih realistis.
    • Dalam fisika, propagasi galat biasanya dipelajari sejak awal. Jika galat diasumsikan berdistribusi Gaussian, perhitungannya menjadi sangat elegan; tetapi kenyataannya sebagian besar pengukuran tidak mengikuti distribusi Gaussian, dan galat non-probabilistik (sistematis) juga menjadi masalah. Karena sulit menanganinya dengan benar, propagasi galat otomatis sering kali hampir tidak berguna; pada kebanyakan kasus analisis manual tetap diperlukan.
    • Saya tidak begitu paham mengapa tulisan ini mendapat begitu banyak perhatian. Proyek ini mendukung bukan hanya interval arithmetic, tetapi juga berbagai distribusi ketidakpastian lain.
    • Tipe sederhana seperti Boolean bisa diinferensikan dengan mudah sehingga batasannya jelas. Sebaliknya, ketidakpastian fisik itu kompleks dan modelnya harus berbeda untuk tiap domain. Begitu kita memutuskan menangani ketidakpastian yang rumit, biasanya lebih baik memakai model khusus yang memang ditujukan untuk tujuan tersebut daripada sekadar pustaka yang dikemas rapi.
    • Interval arithmetic hanya lebih lambat dengan faktor konstanta dibanding operasi numerik biasa, jadi bedanya tidak terlalu besar, dan untuk setiap operasi ada hasil interval paling presisi yang unik. Namun presisi tidak selalu terjamin. Sebaliknya, graf komputasi berbasis sampling seperti pada artikel ini memang lebih lambat, tetapi dapat mendekati model galat nyata dengan lebih akurat, dan punya keunggulan karena tidak memerlukan domain abstrak yang mengorbankan presisi.
  • Tipe data yang ingin saya buat adalah sesuatu yang mengekspresikan seberapa jauh suatu nilai diketahui di dalam distribusi probabilitas tertentu (atau fungsi kerapatan probabilitas), dan setiap proses transformasi juga menambahkan ketidakpastian sebesar itu. Saya membayangkan alur di mana himpunan distribusi probabilitas ini terus disempurnakan seiring bertambahnya observasi (atau berubahnya klasifikasi kondisional). Pada akhirnya, tujuan saya adalah mensimulasikan kasus-kasus hasil acak berbasis distribusi seperti ini.
  • Konsep ini juga sangat berkaitan dengan Functional Pearl lama “Probability Functional Programming” tautan PDF, sangat keren. Saya memulai pertemuan pertama kelas pengantar Haskell dengan mendemonstrasikan masalah Monty Hall menggunakan monad probabilitas, lalu menunjukkan probabilitas kemenangan dua strategi sebagai pecahan bilangan bulat secara gamblang.
  • Mungkin sebaiknya Uncertain menjadi tipe dasar, dan hanya ketika benar-benar pasti kita menuliskannya terpisah sebagai certain T.
    • Itu benar jika dibatasi pada nilai pengukuran fisik, tetapi objek seperti uang harus tetap tepat sampai satuan desimalnya. Sebagai catatan, pendekatan seperti ini juga sudah diimplementasikan di beberapa pustaka Fortran modern.
    • Ini bisa berfungsi sebagai pelengkap tipe Optional.
  • Saya penasaran apakah secara asimtotik ini adalah versi pemrograman dari fuzzy logic Wikipedia Fuzzy Logic