用 Python 破解 GMAT 计分算法
本文所有信息,均来自于GMAC(GMAT官方)负责算法设计的心理测评专家(包括Dr. Han, Dr. Guo, Dr. Meng等)历年的所有公开论文、过去在研讨会上的发言,以及产品经理的公开专访。
基于这些研究,我尝试用 Python 写出了 GMAT 的自适应算法,并成功复现了分数趋势。
GMAT自适应计分的运作核心
简单来说,GMAT的计分机制 主要基于以下理论与步骤:
- 项目反应理论 (IRT – Item Response Theory): 采用3参数模型(3PL Model)。题库中的每一道题目,都预先标定了三个核心参数:
- a (鉴别度): 题目区分高能力与低能力考生的效率。
- b (难度): 题目本身的难度值。
- c (猜测参数): 考生猜对这道题的概率。
- 这三种参数,共同绘制出每道题独一无二的“项目特征曲线”(ICC)。
- 最大概率估计 (MLE – Maximum Likelihood Estimation): 每当你做完一道题,系统会根据你的作答结果,使用MLE来估计你当前的能力值(Theta, θ)。
- 最大化信息量 (Maximum Information): 在估计出你当前的能力值后,系统会立刻扫描整个题库,找出下一道题在统计学上能够提供“最大信息量”的题目给你作答。这个过程旨在用最有效率的方式,将你的能力值定位得更精准。
- 分数转换 (Score Conversion): 以上步骤会不断重复,直到考试结束。你最终的θ值会被转换成我们熟悉的量尺分数(Scale Score, 60-90分),并参照过去5年所有考生的数据,附上百分位排名(Percentile)作为对照。
基于此,我使用Python写出完整算法,只要输入官方成绩单上各科做错题目的题号,即可复现分数变化的趋势,以及该道题目可能的相对难度。



理想与现实:我的算法与真实考试的7大差异
尽管我写出的算法在趋势上能够作为极佳的参考,但在数值上跟真实考试仍存在一定差距。以下是我整理的几点核心限制与未知变量(Concerns & Limitations):
不確定自己現在幾分?
12 題免費測出分數區間 →
- 不计分测试题 (Pretest Unscored Item): 真实考试中混杂着不计分的测试题,其具体数量和出现位置皆为未知。我的算法中预设没有此类题目。
- 能力值的起点 (θ): 真实考试中,你每一科的初始能力值 θ 不一定是从中值开始,很可能会随着你前面科目的表现而动态调整。具体的调整算法,官方维持保密。
- 题库的真实大小与结构: 真实考试的题库大小不明(论文曾以500题为例,但不代表真实数量)。更重要的是,题库会按照题型、考察的核心能力等进行“分层”,以确保考试的内容效度。抽题是完全随机,还是有固定比例,亦或是为了平衡效率与信息量而有更复杂的抽题机制,目前皆未知。此外,曝光度过高的题目也会被暂时“屏蔽”。
- 题目的a, b, c参数值: 题库中每一道题目的a, b, c参数,是经过海量考生作答后拟合出的商业机密,我们永远无法得知确切数值。在我的算法中,只能在合理的范围内预设随机生成。
- 做题时间的影响: 官方虽宣称“不会用做题时间直接决定分数”,但又明确表示“会去侦测做题时间异常的考生”。这背后是否存在一个“隐性排除机制”(例如:作答时间异常的题θ时会被排除或降低权重),目前尚不清楚。
- Theta到量尺分数的转换公式: θ值与最终60-90分的量尺分数之间的转换是线性还是非线性,其具体的转换公式未知。
即便有限制,为何这项研究依然重要?
尽管存在上述限制,但通过这个复现的算法,我们至少已经可以从基本的框架中,窥见分数变化的整体趋势。
更重要的是,我们可以更仔细地观察到考生每一道做错的题目,其可能的相对难度落点,并藉此反思、回推当时的答题状态,最终制定出更精准、更具策略性的备考与应考计划。
想知道更多关于GMAT的硬核数据研究,以及在现实中,该如何谨慎地运用这些信息来解读你的成绩单吗?
请关注Dustin,加入终结者课程,实际参与以数据为本的客制化GMAT备考规划。

