楊本顥筆記・知識・作品

首頁 / 筆記

NOTE · · 應用於 家教出卷助手

測一個「壞掉不會噴錯」的東西

洗牌寫錯不會當機,只會讓某些題長期抽不到。用一萬次抽樣的卡方檢定釘住,並留舊寫法當對照組。

看這篇筆記應用的作品
症狀
抽題洗牌寫成 sort(() => 0.5 - Math.random())。這是常見寫法,但分佈不均勻:sort 的比較函式被假設為一致的,隨機比較違反了這個前提。
為什麼難
不會噴錯、不會當機,只會讓某些題目長期抽不到。功能測試(回 200 嗎?有五題嗎?)永遠測不出來。
做法
改成 Fisher-Yates,用一萬次抽樣的卡方檢定釘住每個位置上每個元素的出現次數。注入固定種子的 PRNG:若直接用 Math.random,均勻分佈本身也有極小機率超過臨界值而讓 CI 隨機轉紅。並且刻意保留舊寫法當對照組,證明同一套檢定確實會把它判為不均勻。
結果
10,000 次抽樣,臨界值取自由度 4 的 18.467(p=0.001)。該檔 11 項測試全過。
心得
三句話:隨機性錯了不會噴錯,所以只有統計檢定釘得住;一個永遠會過的測試等於沒有測試,所以我留了對照組;CI 不該因為運氣而紅,所以我固定了種子。

這篇筆記的實際應用

數學試卷與寫有「2 小時 → 數分鐘」的便條紙,家教出卷助手概念封面

家教出卷助手

把散落在考卷裡的題目,變成能依學生需求組卷的題庫。

看個案研究 →