Automated page. Written and translated automatically by AI and checked against the sources by software; no human editor. SI-IQ is an index built from public benchmark results, not an IQ test. How it works

How SI-IQ is calculated

Last updated Oct 18, 2026

SI-IQ is a statistical index. It puts AI models on one ability scale using results that independent evaluators have published on public benchmarks, and it expresses that scale like an IQ score: 100 is the average of a fixed reference group of AI models released in 2025, and 15 points is one standard deviation of that group (the group is listed in section 4). It is not an IQ test, it does not test models with IQ questions, and it cannot be compared with human IQ scores.

This page describes the method completely. Everything needed to recompute every published number is in /data/index.json; the worked example in section 5 shows the arithmetic for one model.

1. Which results count

A benchmark is used only if all of the following hold:

  1. Independent evaluation. The scores come from an evaluator that is not the model's developer (for example Epoch AI's own evaluation runs). Numbers that developers report about their own models are never used.
  2. Republishable data. The evaluator's licence lets us republish the numbers, so that anyone can download all inputs and recompute the index. Results whose terms forbid republishing, or that carry a non-commercial licence, are not used.
  3. Enough overlap. At calibration time at least 10 models with at least 4 results each have a result, at least 3 of them from the reference group, and the benchmark is connected to the rest of the data through shared models.
  4. It measures ability. Scores must rise with overall ability; a benchmark whose fitted loading is not positive is dropped.

Which score of a model. When an evaluator ran a model in several settings (reasoning effort, thinking budget), we take the best score it published for that model on that benchmark. Higher product tiers sold as separate offerings (for example a "Pro" mode) are not treated as a setting of the base model. For OpenRouter, which runs each model through several hosting providers, we take the providers whose runs covered on average at least 95% of the questions (total questions attempted divided by the number of runs) — only the developer's own hosting if it is among them — and use the median one; with an even number we take the lower of the two middle values, so the number we use is always one provider's result exactly as published.

Which model. Models are identified by Epoch AI's model groups. A model version is used only if it matches its group in product type (a "VL", "Mini" or "Pro" version filed under another group is left out). Names from other sources are matched exactly — after removing explicit run-setting suffixes such as "(high)" — and only when version numbers and product words agree; names we cannot match with certainty wait until they are confirmed and are never ranked meanwhile. If the results we use for a model come from versions released more than 60 days apart, the model is shown but not ranked.

The benchmarks currently in the index, with their parameters:

BenchmarkAreaEvaluated bygcnαβσ²ωModels in fit
Chess PuzzlesReasoningEpoch AI0.0501.001001.078−2.5050.1000.70777
Mystery Game PuzzlesReasoningEpoch AI0.0921.001001.155−3.0300.1000.70777
FrontierMath Tier 4MathEpoch AI0.0001.00≈412.319−4.7180.1000.50065
FrontierMath Tiers 1–3MathEpoch AI0.0001.00≈2851.498−1.9560.1000.50083
MATH Level 5MathEpoch AI0.0001.001,3241.2702.5830.1000.50043
OTIS Mock AIME 2024–2025MathEpoch AI0.0011.00451.3760.6350.1000.500136
Aider PolyglotCodingAider0.0001.002251.0580.2770.4760.70727
SWE-bench Verified (Epoch AI run)CodingEpoch AI0.0001.00≈4830.4690.4320.1000.70731
GPQA DiamondKnowledgeEpoch AI0.2501.001980.7510.6540.1000.577134
GPQA Diamond (OpenRouter run)KnowledgeOpenRouter0.2501.001980.6770.5160.1550.57793
SimpleQA VerifiedKnowledgeEpoch AI0.0001.001,0000.628−1.2110.3370.57779
Berkeley Function Calling LeaderboardAgentsUC Berkeley (Gorilla)0.0001.00100*0.4690.0790.1000.70726
τ²-bench Airline (OpenRouter run)AgentsOpenRouter0.0001.00500.4070.2900.1000.70792

n: number of questions. ≈ = effective number derived from the evaluator's standard errors; * = assumed (no count published). “Models in fit” = models whose results set the parameters at the last calibration.

Not in the index at the moment: Furniture Assembly (fewer than 3 reference-group models)

GPQA Diamond appears twice because Epoch AI and OpenRouter ran the same 198 questions independently. Results that share a question set form a family and together count as one result (section 5).

2. From a raw score to a common scale

For a score s (fraction correct) on a benchmark with chance level g, effective ceiling c and n questions:

p   = clip((s − g) / (c − g), 0, 1)
p*  = (p·n + 0.5) / (n + 1)
y   = ln(p* / (1 − p*))
s*  = g + (c − g)·p*
v   = s*(1 − s*)·n / ((n + 1)²·(c − g)²·p*²·(1 − p*)²)

p is the chance-corrected score, p* the same with a continuity correction (so it is never exactly 0 or 1), y its logit and v the sampling variance of y. v is the delta-method variance of y for a score that is a binomial proportion over n independent questions: Var(s) ≈ s*(1 − s*)/n, multiplied by the squared derivative of the whole transform, (1/(c − g))·(n/(n + 1))·1/(p*(1 − p*)). When p is clipped (a score below chance or above the ceiling) the derivative inside the range is used.

The logit stretches the top and bottom of the scale, so going from 95% to 99% counts as much more progress than going from 50% to 54%, which matches how hard those gains are. Because v grows near 0% and 100%, nearly saturated benchmarks automatically carry less weight.

What n is. n counts distinct test questions; running the same questions several times does not increase it. The table above says where each n comes from: the benchmark's definition (the number of questions), an effective number derived from the evaluator's published standard errors (n = s(1 − s)/SE², the number of independent questions that would give that standard error), or a stated assumption of 100 where neither exists. An assumption is not a safe bound: if the real number of independent questions is smaller, v and the interval are too small and the benchmark gets too much weight. Scores that average several sub-tests are treated as one binomial score, which is an approximation.

3. The model and its calibration

Each transformed score is modelled as

y = α_b · θ_m + β_b + e,      Var(e) = σ_b² + v

where e is the error, θ_m is the ability of model m, α_b is how strongly benchmark b separates stronger from weaker models (its loading), β_b sets its difficulty, and σ_b² is the variation that one ability does not explain. This is a linearised version of the two-parameter item-response model that Epoch AI's Capabilities Index also uses.

Calibration fits α, β and σ² once a month (first run on or after the 1st, 06:00 UTC) — and also, on any day, when a frozen benchmark is switched to revised values (section 8) — on models with at least four eligible results:

  1. Keep only benchmarks and models that meet section 1 and the largest group of models and benchmarks connected through shared results. Being connected is not enough: the shared models must tie every benchmark to one common scale. After fitting, a rank check of the fitted values' derivatives with respect to all θ, α and β must leave exactly the two free directions that the reference group fixes (shifting and stretching all θ together). If a group of benchmarks could be stretched against the rest — for example two groups that share only one model — the benchmark whose removal fixes this (fewest models first) is dropped and the calibration restarts; if no single benchmark fixes it, the calibration is rejected.
  2. Start: for each benchmark, z-score its y values (population standard deviation); each model's start θ is the mean of its z-scores; standardise θ on the reference group (mean 0, population standard deviation 1). Start values for every benchmark: α = 1, β = 0, σ² = 0.25.
  3. Repeat until no θ changes by more than 10⁻¹⁰ (at most 500 rounds):
    • for each benchmark, a weighted least-squares line of y on θ with weights 1/(σ² + v) gives α and β (α is not allowed below 0.05); σ² = max(Σ residual² / (number of models − 2) − mean(v), 0.10);
    • for each model, θ from the formula in section 5 (without the final map);
    • re-standardise θ on the reference group and fold the shift and scale into α and β.
  4. Refit α, β, σ² once more on the final θ. A benchmark whose α sits at 0.05 is dropped and the calibration restarts.
  5. Affine map. The section-5 formula includes a small pull λ towards zero, which slightly shrinks the scale. We therefore compute it for every reference model and publish shift (their mean) and scale (their population standard deviation); subtracting shift and dividing by scale puts the reference group at exactly mean 0 and standard deviation 1 at calibration time. Between calibrations the reference models' scores move when they get new results, so the group's mean drifts slightly from 100 until the next calibration.
  6. κ (an empirical widening factor for the intervals): models are split into 5 folds: sort the fitted models' slugs by Unicode code point, number them from 0, and fold = number mod 5. For each fold, steps 1–5 are re-run without that fold's models, with the same thresholds; the fold's reference models are the reference-group members it contains (no minimum number), and a fold whose calibration fails is skipped. For each held-out model with at least 4 results on the fold's calibrated benchmarks, its result families are split alternately (code-point order of the family names) into two halves A and B — each half needs at least 2 results — and z = (θ_A − θ_B) / √(SE_A² + SE_B²) is computed with κ = 1 in both standard errors. κ = (the 90th-percentile |z|, nearest rank) / 1.644854, and never below 1. With fewer than 3 successful folds or fewer than 30 pairs κ is undetermined and the calibration is rejected.

The calibration uses the accepted results at the moment it runs. It is rejected — and the previous one stays in force — if it does not converge, produces non-finite values, fails the rank check, or if any model of the frozen reference group (section 4) is missing from the fitted set: the reference group is never silently replaced by the members that happen to be available. A recalibration (monthly, or when a frozen benchmark switches) is also rejected if a benchmark would leave the index, the number of ranked models would change by more than 10%, or scores would move more than expected (rank correlation below 0.95 or median change above 3 points). A benchmark may join in such a recalibration only if it is already configured and was left out before solely because too few models had results. Other structural changes need a new major method version; the last index of each earlier major version stays downloadable under /data/archive/.

Between calibrations the parameters are frozen: a new model or a new score is scored with the frozen parameters, so adding a model never changes anyone else's SI-IQ. Every result is identical when the same inputs are processed again: there are no random numbers anywhere.

MetricValue
λ0.10
κ1.0000
shift0.004024
scale0.994832
Floor for σ²0.10
Models in the reference group44
Models used for calibration138
Method version1.0.0
Last calibrationOct 18, 2026

4. The reference group (what 100 means)

The reference group is a fixed list of models: those released in 2025 that had enough independent data at the first calibration. It is not every model released in 2025 — it leans towards well-known models that evaluators chose to test. The list only changes with a major method version (at most once a year, with a published conversion table). Current reference group:

Claude 3.7 Sonnet, Claude Haiku 4.5, Claude Opus 4, Claude Opus 4.1, Claude Opus 4.5, Claude Sonnet 4, Claude Sonnet 4.5, DeepSeek-R1, DeepSeek-R1 (May 2025), DeepSeek-V3.2-Exp, DeepSeek-V3 (Mar 2025), Gemini 2.5 Pro (Jun 2025), Gemini 3 Flash, Gemini 3 Pro, Gemma 3 12B, Gemma 3 27B, Gemma 3 4B, GLM-4.7, GPT-4.1, GPT-4.1 mini, GPT-4.1 nano, GPT-5, GPT-5.1, GPT-5.2, GPT-5 mini, GPT-5 nano, gpt-oss-120b, gpt-oss-20b, Grok 3, Grok-3 mini, Grok 4, Llama 4 Maverick, Llama 4 Scout, Mistral Medium 3, o3, o3-mini, o4-mini, Qwen2.5-Max, Qwen3-14B, Qwen3-235B-A22B-Thinking (Jul 2025), Qwen3-30B-A3B, Qwen3-30B-A3B-Instruct (Jul 2025), Qwen3-32B, Qwen3-Max

Human baselines exist for some benchmarks, but they use different populations and cover too few benchmarks to define a common human scale, so SI-IQ makes no claim about human IQ.

5. A model's SI-IQ — the formula you can check

With the published parameters, each model's ability is a closed-form weighted average of its results:

f_b   = 1 / F_b
w_b   = ω_b · f_b / (σ_b² + v_b)
D     = λ + Σ w_b·α_b²
θ₀    = Σ w_b·α_b·(y_b − β_b) / D
θ     = (θ₀ − shift) / scale
SE    = κ · √(Σ w_b²·α_b²·(σ_b² + v_b)) / D / scale
SI-IQ      = 100 + 15·θ
SI-IQ_low  = 100 + 15·(θ − 1.644854·SE)
SI-IQ_high = 100 + 15·(θ + 1.644854·SE)

Worked example (all numbers from the current data):

Here is the full calculation for GPT-6 Astra, the highest-ranked model right now.

Benchmarkspp*yvfww·α·(y−β)w·α²w²·α²·(σ²+v)
Chess Puzzles74.00%0.72640.72420.96530.05261.004.633317.32815.37983.8041
Mystery Game Puzzles84.00%0.82370.82051.52000.07481.004.044921.25225.39273.8132
FrontierMath Tier 497.60%0.97600.96473.30700.68191.000.639511.90113.43971.7199
FrontierMath Tiers 1–393.68%0.93680.93532.67130.05761.003.172821.99517.12173.5608
OTIS Mock AIME 2024–2025100.00%1.00000.98914.51091.98001.000.24041.28210.45510.2276
GPQA Diamond95.77%0.94360.94142.77620.12270.501.29642.06770.73210.2113
GPQA Diamond (OpenRouter run)94.73%0.92970.92752.54900.10110.501.12881.55310.51700.1493
SimpleQA Verified75.60%0.75600.75571.12950.00541.001.68452.47430.66370.3832
τ²-bench Airline (OpenRouter run)67.67%0.67670.67320.72270.08741.003.77370.66430.62360.4410
D     = 0.10 + 24.3255 = 24.4255
θ₀    = 80.5180 / 24.4255 = 3.2965
θ     = (3.2965 − 0.004024) / 0.994832 = 3.3096
SE    = 1.0000 × √14.3103 / 24.4255 / 0.994832 = 0.1557
SI-IQ = 100 + 15 × 3.3096 = 149.64 → 150
90%   = 145.8 … 153.5

6. Ability by area

Area scores (Knowledge, Math, Reasoning, Coding, Agents) use the same formula restricted to that area's benchmarks, with one unit of weight pulling them towards the model's overall unmapped ability θ₀:

θ_d,0   = (Σ_d w·α·(y − β) + 1·θ₀) / (Σ_d w·α² + 1)
θ_d     = (θ_d,0 − shift) / scale
SI-IQ_d = 100 + 15·θ_d

(d = the area; Σ_d runs over the area's results.)

Its standard error and 90% interval use the same sandwich form over the area's results, treating θ₀ as known:

SE_d = κ · √(Σ_d w²·α²·(σ² + v)) / (Σ_d w·α² + 1) / scale

An area score is shown only when the model has results from at least two different families in that area.

7. Who gets a rank

A model is ranked when its results come from at least 5 benchmark families, cover at least 3 areas, come from at least 2 different evaluators, and its versions are not more than 60 days apart. Other models are listed under "too little data" with a provisional score and no rank. Ranked models are ordered by θ (ties by slug). Each model page also shows a rank range: the best rank is 1 + the number of ranked models whose interval lies entirely above this model's interval; the worst is the number of ranked models whose upper end is at least this model's lower end. It describes which intervals overlap; it is not a probability and not a significance test — two models whose rank ranges overlap may still have intervals that do not overlap.

8. Updates and checks

9. Known limitations

10. Data sources and licences

Required attributions:

11. Versions

The method version is shown on every model page and in every data file. Patch versions fix data or parsing errors without changing parameters; minor versions are recalibrations (monthly, or when a frozen benchmark switches to revised values); major versions change the transform, the model, the areas, the benchmark set or the reference group, and come with recomputed history. Model-page history curves always re-score each day's archived inputs with the current parameters, so they never mix methods; those inputs are published in /data/history.json, so every point can be recomputed with the formula of section 5.