Transparence
Comment on audite Kalibrio contre les biais d'âge
Publié le 23 mai 2026 · Lecture 6 minutes
Pourquoi on fait cet audit
L'article L1132-1 du Code du travail interdit toute discrimination fondée sur l'âge dans l'accès à l'emploi. L'EU AI Act août 2026 va plus loin : tout système d'IA qui influence l'accès à l'emploi doit prouver son absence de biais avant mise sur le marché.
Kalibrio attribue un score 6D aux candidatures. Une de ses dimensions ajuste la pondération selon le profil détecté (par exemple : senior executive). Question légitime : est-ce que cette pondération crée un biais d'âge en pratique ?
On voulait la réponse avantd'activer la fonctionnalité en production. Pas aprèsqu'un utilisateur découvre un problème. Pas en disant « fais-nous confiance ».
0 sur 27 concurrents candidat-facing FR n'ont publié ce type d'audit avant lancement. Kalibrio le fait.
La méthode (3 critères statistiques)
On a généré un corpus reproductible de 50 CVs cadres synthétiques (seed=42). Pour chaque CV, on a tourné le scoring Kalibrio en activant le flag ENABLE_SENIOR_EXECUTIVE_WEIGHTS=true qu'on garde désactivé par défaut tant que cet audit n'est pas validé.
On a comparé les scores entre 3 tranches d'âge (jeunes / intermédiaires / seniors) avec 3 tests statistiques indépendants :
- Kruskal-Wallis H— test non-paramétrique d'égalité des distributions inter-groupes. Si p > 0.05, on ne détecte pas de différence significative.
- Cliff delta— mesure d'effect size sans hypothèse de distribution. Si delta proche de 0, l'effet pratique est négligeable.
- Bootstrap 95% CI— intervalle de confiance par ré-échantillonnage. Si l'intervalle contient 0, l'hypothèse « pas de différence » n'est pas rejetée.
Code source Python pur (numpy uniquement, pas de boîte noire) : scripts/shadow-scoring/test-age-bias-art-l1132-1.py. Si tu veux le reproduire toi-même, le seed=42 te garantit le même corpus, les mêmes scores, le même résultat.
Les résultats (DEC-318 PASS 3/3)
Verdict :PASS sur les 3 critères.
- Kruskal-Wallis : p = 1.0(pas de différence détectée)
- Cliff delta : 0.0 (effect size nul)
- Bootstrap 95% CI : [0, 0] (intervalle contient 0)
Variance nulle inter-tranches d'âge. Pourquoi ?
Structurellement, la pondération applyPersonaWeightAdjustments applique le même multiplicateur (×0.9 sur hard_requirementset ×1.2 sur leadership_signals) à tous les CV détectés senior_executive, sans jamais consommer age comme input.
La détection s'appuie sur le déclaratif seniority_level (FT-ACTIV-1 from France Travail) et sur years_experience >= 15. Pas sur l'âge direct.
Rapport complet : DEC-318 du 18 mai 2026, fichier reports/shadow-scoring-senior-exec-2026-05-18.md.
Les limites (ce qui n'est pas couvert)
Cet audit prouve l'absence de biais structurel sur un corpus synthétique. Il ne prouve pas l'absence totale de biais en production. Les limites explicites :
- Corpus synthétique seed=42, pas vrais cadres en recherche d'emploi. Les patterns réels peuvent diverger.
- Edge cases
seniority_level="senior"non director non couverts dans cette passe. - Biais indirects via parsing CV (ex : mots-clés générationnels) non testés ici. Sprint dédié prévu.
- 3 autres personas (recent_graduate / career_returner / international) doivent passer le même audit séquentiellement avant activation des flags correspondants.
Ce qu'on va faire après le launch
Activation des persona weights conditionnée à 3 conditions cumulatives :
- Re-run audit post-betasur corpus réel 50+ vrais cadres en recherche, par persona.
- Re-audit semestrielautomatisé pour monitoring runtime (drift détection).
- Re-audit obligatoiresi la pondération est modifiée en code (gate sur diff
lib/scoring/personas.ts).
Tant qu'une de ces 3 conditions n'est pas remplie pour une persona, ENABLE_*_WEIGHTS=false par défaut en production. Le scoring marche sans la pondération ; la pondération n'ajoute qu'une couche d'affinement contextuel.
La promesse Kalibrio
On ne te demande pas de nous faire confiance. On te montre le code, le corpus, les tests, les résultats, les limites, et la procédure d'activation.
Si tu trouves un trou dans la méthode, écris-nous à [email protected]. On corrige et on republie.