###### tags: `math` `rng` `Public` # 隨機偏誤與偏差研究 ## 名詞定義 ### Bias 偏誤 * 硬幣若正反出現機率不一致,意味著有**Bias偏誤** * 一個骰子若1~6點出現機率不一致,意味著有**Bias偏誤** * 可以用統計方法評斷一個亂數產生器是否有**Bias偏誤** ### Deviation 偏差 * 一個骰子骰60次,出現的次數與理想值10次之間的差距,每輪之間的會有**Deviation 偏差** * 常以標準差作為參考指標 * 可以用統計方法計算出結果的統計量值 ## 亂數產生器原理 ### 簡單產生器 假設我們有一個絕對公正的[0,9]亂數產生器 #### 隨機骰1000次共3輪後 hitIdx| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| ---|---|---|---|---|---|---|---|---|---|---| 第一輪| 93| 91|102|126| 83| 84| 95|102|114|110| 第二輪|108| 95|102|110|102|104|101|102| 98| 78| 第三輪| 93|104| 99| 94| 96| 89|117|113|106| 89| 平均|98.00|96.67|101.00|110.00|93.67|92.33|104.33|105.67|106.00|92.33| 標準差|8.66|6.66|1.73|16.00|9.71|10.41|11.37|6.35|8.00|16.26| 平均-標準差|89.34|90.01|99.27|94.00|83.95|81.93|92.96|99.32|98.00|76.08| 平均+標準差|106.66|103.32|102.73|126.00|103.38|102.74|115.71|112.02|114.00|108.59| 可以驗證每個索引出現的一倍標準差範圍有涵蓋**理論值100** 故可以排除產生器**Bias偏誤** ### 餘數產生器 假設我們有一個絕對公正的[0,9]亂數產生器 我想產生[0,1]亂數產生器 可以使用取餘方式 hitIdx| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| ---|---|---|---|---|---|---|---|---|---|---| 取餘| 0| 1|0|1| 0| 1| 0|1|0|1| #### 取餘Bias偏誤 * 顯而易見的出現0的概率會大於出現1的概率   #### 小結 有些程式語言的預設取亂數函式使用此方式, 只是因為使用較大的[0,2147483648]基礎亂數產生器, 去減少那其中的差異值。 * 若想取得隨機範圍與2147483648的數量級接近,就會有**取餘Bias偏誤** ### dependency Bias 相依性偏誤 #### 假設情境 ``` 一特殊骰子骰出1之後,下次骰2的機率會上升 一特殊骰子骰出2之後,下次骰3的機率會上升 一特殊骰子骰出3之後,下次骰4的機率會上升 一特殊骰子骰出4之後,下次骰5的機率會上升 一特殊骰子骰出5之後,下次骰6的機率會上升 一特殊骰子骰出6之後,下次骰1的機率會上升 ``` #### 一般檢驗無法辨識 此特殊骰子做產生器**Bias偏誤**測試會通過 因為其特殊相依性有對稱性使得無法檢驗出此種**Bias偏誤** #### 檢驗方式 要檢驗此**dependency Bias偏誤** 只能統計所有骰出1後面接骰出的值的分布是否正確 #### Bias檢驗邏輯 1. 通過某種Bias檢驗只能說明,此情況沒有存有Bias 2. 相依性情況有無數種,故目前尚無有效的方法確認**百分百無偏誤(unBias)**