If a face-age tool is used to check whether someone is 18, how often does a 16- or 17-year-old still get through?
This is a black-box student audit of DeepFace — not a claim that all AI fails.
A-ISPC 2026 — International AI-Assisted Science Project Competition.
An age-estimation model does not read a passport. It looks at a photo and returns a number. This project asks what that number means when the law — or a shop, an app, a platform — relies on it to tell an adult from a minor.
Everything below uses one public dataset, one off-the-shelf model, and one counting script. The findings are the whole story.
Question
How accurately do facial age-estimation tools classify people near age 18, do their errors differ across demographic and image-quality groups, and which verification threshold best reduces the risk of mistaking a minor for an adult?
- Planned ages
- 14–22 (main analysis 16–21)
- High-risk minors
- 16–17
- Adult comparison
- 18–21
- Dataset
- UTKFace
- Models named in the proposal
- DeepFace and InsightFace
- Outcomes
- MAE; minor→adult; adult→minor; quality and demographics; thresholds 18, 20, 22, 25
Method
The audit is deliberately simple: photos in, ages out, counts compared.
- DeepFace used as a black box: photo in, age out. I did not train or fine-tune it.
- Main set: 1,395 UTKFace images with labelled ages 16–21 (405 aged 16–17; 990 aged 18–21).
- Ages 14–15 only in a small earlier pilot, not the main table.
- Image-quality check: 50 photos, one blur + low-resolution recipe.
- InsightFace was run on the same file list; almost every score was missing, so there is no two-model comparison at N=1,395.
- Counts come from
audit_deepface_1395.pyon the local DeepFace result file. - This website does not host research-subject photographs.
Findings
MAE 8.51 years, signed error +8.51 (almost always too old).
Mean predicted age 16–17: 26.84. Mean predicted age 18–21: 27.43.
| Cut-off | 16–17 called adult | 18–21 blocked |
|---|---|---|
| T=18 | 405/405 (100%) | 0/990 (0%) |
| T=20 | 405/405 (100%) | 0/990 (0%) |
| T=22 | 401/405 (99.01%) | 7/990 (0.71%) |
| T=25 | 285/405 (70.37%) | 199/990 (20.10%) |
| T=28 | 158/405 (39.01%) | 539/990 (54.44%) |
| T=30 | 83/405 (20.49%) | 730/990 (73.74%) |
Cut-offs 18 and 20 do nothing here because guesses sit near 27. T=25 is the first trade-off, not an “optimal” setting: most labelled minors still pass and one in five young adults is blocked.
Demographics: overestimate about +6 to +10 years by group. Example: Female White +9.86 (n=368, 110 minors). Male Asian +5.96 (n=28, only 4 minors — too small to rank). In every cell, 100% of that cell's 16–17-year-olds still pass T=18.
| Group | n | 16–17 minors | MAE (years) | Mean pred. | Pass T=18 |
|---|---|---|---|---|---|
| Female · Asian | 93 | 5 | 8.75 | 28.67 | 100% |
| Female · Black | 154 | 34 | 8.10 | 27.40 | 100% |
| Female · Indian | 124 | 19 | 9.49 | 28.97 | 100% |
| Female · Others | 113 | 29 | 9.26 | 28.30 | 100% |
| Female · White | 368 | 110 | 9.87 | 28.18 | 100% |
| Male · Asian | 28 | 4 | 5.96 | 25.32 | 100% |
| Male · Black | 112 | 28 | 6.47 | 25.46 | 100% |
| Male · Indian | 64 | 12 | 7.39 | 26.56 | 100% |
| Male · Others | 63 | 15 | 7.30 | 26.63 | 100% |
| Male · White | 276 | 149 | 7.72 | 25.53 | 100% |
Prior work
Five published baselines. Each row: what they measured, their figure, and how this audit differs.
-
UTKFace dataset — Zhang, Song & Qi (CVPR 2017; dataset page)
MeasuredA dataset of 20k+ faces, ages 0–116, age labels encoded in the filename.Their figureLabels are self-reported; quality and age-range vary by design.Differs: I use only the labelled 16–21 slice (1,395 photos) as test data, not for training.
-
DeepFace GitHub — Serengil
MeasuredA Python library with a pre-trained age-estimation head.Their figureREADME cites about ±4.65 MAE for the age model in general — not this 16–21 slice.Differs: on my 16–21 slice the observed MAE is 8.51 years, and 405/405 still pass at T=18.
-
NIST news, 30 May 2024 — first age-estimation evaluation results
MeasuredSix algorithms, closed box, on ~11.5 million government photos; they also ask over/under 21.Their figureVisa-set MAE fell 4.3 → 3.1 years; error varies by demographic group.Differs: my single off-the-shelf model on 1,395 UTKFace photos gives MAE 8.51; T=25 still passes 70% of minors and blocks 20% of adults.
-
UK Parliamentary Office of Science and Technology — briefing on facial age estimation
MeasuredHow services that must verify 18+ deploy age estimation.Their figureServices often use a challenge age of 25; accuracy is weakest around 16–18.Differs: at 16–17 my model averages ~27, so even T=25 catches only ~30% of labelled minors.
-
UK government guide — “Facial age estimation: Using AI to support initial age decisions” (29 May 2026)
MeasuredOperational guidance for age-assurance under a challenge age of 25.Their figureSummarises ~2.5 years error at 16–18 for top systems.Differs: my off-the-shelf result is far from top-system figures — 8.51 MAE and 405/405 at T=18.
Limits & AI
What this audit does not claim
- One dataset; UTKFace ages are not passports.
- Off-the-shelf DeepFace is not a model I trained on UTKFace, so 2–4 year published MAEs are a different test.
- Chips ~200×200; I did not re-score all 1,395 at 224×224.
- Quality test is one recipe, n=50.
- InsightFace full comparison failed.
- Not a score for every commercial age-assurance product.
Assistive AI (not the age model)
- Perplexity — planning.
- Gemini — coding help.
- Grok — checking files and drafts.
- DeepFace is the system under test. Final tables come from the counting script, not from a chat window.
About
[YOUR NAME]
ProjectSubmitted for A-ISPC 2026 (International AI-Assisted Science Project Competition).
ImageryIllustrations only; no photographs of research subjects.
Code[repo URL]