HeadlinesBriefing HeadlinesBriefing.com

なぜモジュロによるランダム選択がバイアスを生むのか

Hacker News •
×

一般的なプログラミングパターンは、モジュロを使ってランダムなアイテムを選択します:`choices[random_u64() % n]`。これは直感的に思えますが、ランダム範囲が選択肢の数で均等に割り切れないため統計的バイアスを生じます。

たとえば、[0, 9] の範囲のランダム数を使って 3 つのアイテムから選ぶと、選択肢 1 には 4 つの入力 (0, 3, 6, 9) が割り当てられますが、選択肢 2 と 3 にはそれぞれ 3 つしか入力が割り当てられません。その結果、選択肢 1 は期待される 33.3% ではなく 40% の確率で選ばれます。このモジュロバイアスは、ランダム範囲が選択肢の数の倍数でないときに発生します。

正しいアプローチは `random_between(l, h)` を使うことで、これは確率を適切に分配しますが、実装はより複雑です。より良いAPI設計では、`random_choice()` のような高レベルの関数を提供し、明示的な確率分布を受け入れるようにするべきです。これにより、開発者は欠陥のある低レベルプリミティブに頼るのではなく、分布の要件に直接向き合うようになります。

出典: Hacker News · 要約:HeadlinesBriefing