逆向破解 GMAT :我如何用 Python 復現官方計分演算法
經過深入研究,我成功用 Python 實作了 GMAT 計分演算法 Python,並藉此模擬出 GMAT 考試的分數趨勢,特別是針對 GMAT Focus Edition 的變化。
GMAT 計分演算法 Python 實作與核心原理
不確定自己現在幾分?
12 題免費測出分數區間 →
GMAT自適應計分的運作核心
簡單來說,GMAT 自適應計分系統(包括 GMAT Focus Edition)GMAT的計分機制主要基於以下理論與步驟:
- 項目反應理論 (IRT – Item Response Theory): 採用3參數模型(3PL Model)。題庫中的每一道題目,都預先標定了三個核心參數:
- a (鑒別度): 題目區分高能力與低能力考生的效率。
- b (難度): 題目本身的難度值。
- c (猜測參數): 考生猜對這道題的機率。
- 這三種參數,共同繪製出每道題獨一無二的「項目特徵曲線」(ICC)。
- 最大概率估計 (MLE – Maximum Likelihood Estimation): 每當你做完一道題,系統會根據你的作答結果,使用MLE來估計你當前的能力值(Theta, θ)。
- 最大化資訊量 (Maximum Information): 在估計出你當前的能力值後,系統會立刻掃描整個題庫,找出下一道題在統計學上能夠提供「最大信息量」的題目給你作答。這個過程旨在用最有效率的方式,將你的能力值定位得更精準。
- 分數轉換 (Score Conversion): 以上步驟會不斷重複,直到考試結束。你最終的$theta$值會被轉換成我們熟悉的量尺分數(Scale Score, 60-90分),並參照過去5年所有考生的數據,附上百分位排名(Percentile)作為對照。
基於此,我使用Python寫出完整算法,只要輸入官方成績單上各科做錯題目的題號,即可復現分數變化的趨勢,以及該道題目可能的相對難度。



理想與現實:我的算法與真實考試的7大差異
儘管我寫出的 GMAT 計分演算法在趨勢上能夠作為極佳的參考,但在數值上跟真實 GMAT 考試仍存在一定差距。以下是我整理的幾點核心限制與未知變數(Concerns & Limitations):
- 不計分測試題 (Pretest Unscored Item): 真實考試中混雜著不計分的測試題,其具體數量和出現位置皆為未知。我的算法中預設沒有此類題目。
- 能力值的起點 (θ):: 真實考試中,你每一科的初始能力值 θ 不一定是從中間值開始,很可能會隨著你前面科目的表現而動態調整。具體的調整算法,官方維持保密。
- 題庫的真實大小與結構: 真實考試的題庫大小不明(論文曾以500題為例,但不代表真實數量)。更重要的是,題庫會按照題型、考察的核心能力等進行「分層」,以確保考試的內容效度。抽題是完全隨機,還是有固定比例,亦或是為了平衡效率與資訊量而有更複雜的抽題機制,目前皆未知。此外,曝光度過高的題目也會被暫時「屏蔽」。
- 題目的a, b, c參數值: 題庫中每一道題目的a, b, c參數,是經過海量考生作答後擬合出的商業機密,我們永遠無法得知確切數值。在我的算法中,只能在合理的範圍內預設隨機生成。
- 做題時間的影響: 官方雖宣稱「不會用做題時間直接決定分數」,但又明確表示「會去偵測做題時間異常的考生」。這背後是否存在一個「隱性排除機制」(例如:作答時間異常的題θ時會被排除或降低權重),目前尚不清楚。
- Theta到量尺分數的轉換公式: θ值與最終60-90分的量尺分數之間的轉換是線性還是非線性,其具體的轉換公式未知。
即便有限制,為何這項研究依然重要?
儘管存在上述限制,但透過這個復現的算法,我們至少已經可以從基本的框架中,窺見分數變化的整體趨勢。
更重要的是,透過這項 GMAT 計分演算法的研究,我們可以更仔細地觀察到 GMAT 考生每一道做錯的題目,其可能的相對難度落點,並藉此反思、回推當時的答題狀態,最終制定出更精準、更具策略性的備考與應考計畫。
想知道更多關於GMAT的硬核數據研究,以及在現實中,該如何謹慎地運用這些資訊來解讀你的成績單嗎?
請關注Dustin,加入終結者課程,為你的 GMAT 考試做好萬全準備,實際參與以數據為本的客製化GMAT備考規劃。

