When two LLMs score the same essay and disagree by over 2 points on a 32-point rubric, students graded by the stricter model face a structural disadvantage β this study measures exactly that.
β Open the scrollytelling report
Charts, scroll-driven narrative, and all findings in one interactive page. Works on mobile and desktop.
The deployment of Large Language Models (LLMs) in Automated Essay Scoring (AES) for academic evaluation poses algorithmic bias risks if implemented without human oversight. This study evaluates the Mixture of Experts (GPT OSS 120B) and Dense (Qwen3-32B) architectures using a multiple run scoring approach on 150 IELTS like essays. These specific models were selected to contrast the evaluative capabilities of a high parameter sparse architecture against a more compact dense network. The evaluation encompasses severity bias detection, topic bias through unimodal stress testing, and a Human in the Loop (HITL) routing simulation. Results indicate a fundamental architectural trade off: Qwen3-32B achieved perfect format compliance but demonstrated score instability (ICC 0.84) and excessive leniency, whereas GPT OSS 120B was highly reliable (ICC 0.94) with precise discriminative power but suffered a 25.4 percent parsing failure rate due to format hallucination. Furthermore, both models exhibit conservatism bias on visual description tasks lacking image context. The variability based HITL simulation (CV < 15%, Range
| Item | Detail |
|---|---|
| Dataset | 50 respondents Γ 3 essay prompts (150 theoretical max) |
| Evaluation runs | 5 runs per essay per model |
| Rubric | 4 criteria: Grammar, Lexical, Coherence, Task (max 32 pts) |
| GPT submitted / valid | 130 submitted / 97 valid scored (33 JSON parse failures, 25.4%) |
| Qwen submitted / valid | 128 submitted / 128 valid scored (0 failures) |
| Valid pairs for comparison | 95 essays scored validly by both models |
| Metric | GPT-oss-120b | Qwen3-32b | Advantage |
|---|---|---|---|
| ICC (reliability) | 0.943 β Excellent | 0.844 β Good | GPT |
| Mean score / 32 | 25.47 | 28.32 | Qwen |
| Consistency (mean CV) | 0.047 | 0.092 | GPT |
| Mean within-essay range | 2.4 pts | 5.56 pts | GPT |
| Auto-approve rate | 55.4% | 7.8% | GPT |
| JSON parse failure rate | 25.4% (33/130) | 0% | Qwen |
- GPT is the more reliable scorer. ICC 0.943 (excellent) vs 0.844 (good). Score the same essay five times with GPT and the results stay within a 2.4-point range on average β less than half of Qwen's 5.56-point spread.
- Qwen scores higher but far less consistently. Mean score 28.32 vs 25.47, but 92.2% of its essays were flagged for human review due to high variance. GPT required review for only 44.6%.
- The scoring gap is a fairness risk. In 74 out of 95 paired essays, Qwen scored higher than GPT. The ~2-point systematic gap means a student graded by GPT is structurally disadvantaged compared to one graded by Qwen on the same essay.
- Qwen never fails to return a usable score. GPT failed to produce parseable JSON on 25.4% of essays under zero-shot conditions β a significant deployment blocker.
- Both models score data-report essays most strictly. Without visual context, neither model hallucinates chart content; both apply conservative scoring instead (GPT: 24.20, Qwen: 27.37).
Computed on 95 valid paired essays (essays scored by both models with no parse failure).
| Statistic | Value |
|---|---|
| t-statistic | β7.43 |
| p-value | 5.03 Γ 10β»ΒΉΒΉ |
| GPT mean total | 25.47 (SD = 7.02) |
| Qwen mean total | 28.32 (SD = 6.00) |
The gap is not random β it is systematic. With p = 5.03 Γ 10β»ΒΉΒΉ, the probability this difference occurred by chance is effectively zero. GPT applies a consistently stricter standard than Qwen across all essays.
Computed on 95 valid paired essays.
| Metric | Value |
|---|---|
| Mean difference (GPT β Qwen) | β2.07 |
| Lower limit of agreement | β7.38 |
| Upper limit of agreement | +3.25 |
The limits of agreement span 10.6 points, indicating wide individual-level disagreement beyond the systematic gap. The asymmetric bounds (wider on the negative side) reflect GPT's tendency toward occasional extreme strictness rather than symmetric noise.
5 runs per essay, two-way mixed consistency model. ICC measures how much of the score variation is signal (real essay quality) vs. noise (model inconsistency). A score above 0.9 is considered excellent.
| Model | ICC | n essays | n balanced |
|---|---|---|---|
| GPT-oss-120b | 0.943 | 97 | 81 |
| Qwen3-32b | 0.844 | 128 | 123 |
Threshold: CV < 0.15 AND score range β€ 2 β Auto-Approve; else Flagged for human Review.
| Model | Auto-Approve | Flagged for Review |
|---|---|---|
| GPT-oss-120b | 72 / 130 (55.4%) | 58 / 130 (44.6%) |
| Qwen3-32b | 10 / 128 (7.8%) | 118 / 128 (92.2%) |
Qwen's inconsistency effectively eliminates it from any pipeline that uses automated approval β 9 in 10 of its essays must go to a human reviewer, making it operationally equivalent to manual grading.
| Prompt Category | GPT mean | Qwen mean | Gap |
|---|---|---|---|
| data_report | 24.20 | 27.37 | 3.17 |
| social_policy_opinion | 26.22 | 28.97 | 2.75 |
| tech_society_opinion | 27.18 | 28.85 | 1.67 |
The severity gap is widest on data_report tasks (3.17 pts) and narrowest on tech_society_opinion (1.67 pts), suggesting topic framing and visual context affect model scoring behavior differently.
- Sample size: 150 essays from 50 respondents β moderate for an exploratory study, but findings should be replicated on a larger, more diverse corpus before drawing strong policy conclusions.
- Essay type: All prompts are IELTS/TOEFL-style academic writing. Results may not generalize to other writing contexts (creative writing, business reports, school essays).
- Effective GPT sample: GPT's 25.4% JSON failure rate reduces its usable sample from 130 to 97 essays, potentially introducing selection bias in ICC calculations.
- Zero-shot prompting only: Both models were tested without examples or fine-tuning. Providing few-shot examples or task-specific prompting may significantly change reliability and consistency results.
- Models tested: GPT-oss-120b and Qwen3-32b at time of study. Model behavior evolves with version updates.
To independently verify the reported numbers:
pip install pandas numpy
python scripts/extract_metrics.pyThis reads directly from the evaluation JSONL files and prints total observations, paired intersection, and Bland-Altman metrics β matching data/processed/analysis/report.json.
- Python 3.10+
- See
requirements.txtfor dependencies
pip install -r requirements.txtThree stages: preprocess β evaluate β analyze
| Stage | Command |
|---|---|
| Preprocess | python src/preprocess.py --input data/raw/essays.xlsx --out-dir data/processed |
| Evaluate | python src/evaluate.py --inputs data/processed --models qwen3-32b gpt-oss-120b |
| Analyze | python src/analyze.py --inputs data/processed --out-dir data/processed/analysis |
Run all three in sequence to generate reports.
Located in --out-dir (default: data/processed/analysis):
| File | Description |
|---|---|
report.html |
Interactive dashboard with KPI cards and embedded charts |
report.md |
Markdown summary with all tables |
report.json |
Machine-readable metrics |
metrics_summary.csv |
Per-model aggregated metrics |
hitl_routing.csv |
Per-essay HITL routing decisions |
image/*.png |
Static chart exports (Bland-Altman, heatmaps, boxplot, HITL) |
Edit constants in src/analyze.py:
HITL_CV_THRESHOLD = 0.15β auto-approve if CV below thisHITL_RANGE_THRESHOLD = 2β auto-approve if score range β€ this
The analyze stage caches results. To force recompute:
python src/analyze.py --inputs data/processed --out-dir data/processed/analysis --forcellm-awe-reliability-fairness/
βββ data/
β βββ processed/
β βββ analysis/ # Generated reports and charts
β βββ eval/ # Per-question model evaluation outputs
β βββ samples/ # Preprocessed essay samples (JSONL)
βββ dataset/ # Source dataset (Excel)
βββ notebook/ # Exploratory analysis notebook
βββ scripts/
β βββ extract_metrics.py # Standalone metric extraction for reproducibility
β βββ diag_checkpoint.py
β βββ inspect_icc.py
β βββ inspect_xlsx.py
βββ src/
β βββ analyze.py # Main analysis pipeline
β βββ evaluate.py # Model evaluation runner
β βββ preprocess.py # Data preprocessing
β βββ cli.py
βββ scrolly-report.html # Interactive scrollytelling report (live at GitHub Pages)
βββ requirements.txt
βββ LICENSE
Muhammad Abdiel Al Hafiz GitHub: dlzcods
If you use this data or methodology in your work:
Al Hafiz, M. A. (2025). LLM Reliability & Fairness in Automated Essay Scoring:
Comparing GPT-oss-120b and Qwen3-32b on IELTS-style Writing Evaluation.
https://github.com/dlzcods/llm-awe-reliability-fairness
See LICENSE for details.