###### 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)**