{"id":5138,"date":"2026-10-14T18:01:57","date_gmt":"2026-10-14T18:01:57","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/calculer-exactitude-equilibree-python-sklearn\/"},"modified":"2026-10-14T18:01:57","modified_gmt":"2026-10-14T18:01:57","slug":"calculer-exactitude-equilibree-python-sklearn","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=calculer-exactitude-equilibree-python-sklearn","title":{"rendered":"Comment calculer l&rsquo;exactitude \u00e9quilibr\u00e9e en Python en utilisant sklearn"},"content":{"rendered":"<p>Dans le champ contemporain de l&rsquo;apprentissage automatique et de la mod\u00e9lisation statistique appliqu\u00e9e, l&rsquo;\u00e9valuation de la performance d&rsquo;un algorithme constitue une \u00e9tape m\u00e9thodologique tout aussi critique que la conception de son architecture interne. Trop souvent, les praticiens et chercheurs se reposent sur des indicateurs intuitifs mais trompeurs, au premier rang desquels figure l&rsquo;exactitude globale, commun\u00e9ment d\u00e9sign\u00e9e sous le terme d&rsquo;<em>accuracy<\/em>. Cette m\u00e9trique, qui mesure simplement la proportion de pr\u00e9dictions correctes sur l&rsquo;ensemble des observations disponibles, pr\u00e9sente une fragilit\u00e9 structurelle majeure d\u00e8s lors qu&rsquo;elle est confront\u00e9e \u00e0 des distributions empiriques asym\u00e9triques. Dans les disciplines o\u00f9 les \u00e9v\u00e9nements d&rsquo;int\u00e9r\u00eat surviennent avec une fr\u00e9quence relative faible &mdash; telles que la psychiatrie computationnelle, l&rsquo;\u00e9pid\u00e9miologie clinique, la psychom\u00e9trie ou la d\u00e9tection de fraudes comportementales &mdash;, l&rsquo;exactitude standard perd toute valeur discriminante et induit une distorsion cognitive s\u00e9v\u00e8re dans l&rsquo;appr\u00e9ciation des capacit\u00e9s r\u00e9elles du mod\u00e8le.<\/p>\n<p>Pour surmonter cette impasse analytique, la recherche m\u00e9thodologique a formalis\u00e9 une alternative robuste : l&rsquo;exactitude \u00e9quilibr\u00e9e, ou <strong>Balanced Accuracy<\/strong>. Fond\u00e9e sur une d\u00e9composition probabiliste rigoureuse issue des principes de la th\u00e9orie de la d\u00e9tection du signal, cette mesure neutralise le poids d\u00e9mographique disproportionn\u00e9 des classes majoritaires en calculant la moyenne arithm\u00e9tique des taux de succ\u00e8s obtenus sur chaque cat\u00e9gorie consid\u00e9r\u00e9e isol\u00e9ment. Ainsi, elle attribue une importance \u00e9pist\u00e9mologique identique \u00e0 la d\u00e9tection de la classe marginale et \u00e0 celle du groupe dominant. Ce principe \u00e9l\u00e9mentaire transforme radicalement le diagnostic de performance, contraignant les algorithmes \u00e0 faire preuve d&rsquo;une v\u00e9ritable comp\u00e9tence discriminative plut\u00f4t que de capitaliser sur la pr\u00e9valence a priori du ph\u00e9nom\u00e8ne \u00e9tudi\u00e9.<\/p>\n<p>L&rsquo;\u00e9cosyst\u00e8me Python, soutenu par l&rsquo;infrastructure logicielle de <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/scikit-learn.org\/stable\/\">scikit-learn<\/a>, offre un cadre de calcul standardis\u00e9, modulaire et hautement optimis\u00e9 pour l&rsquo;estimation de l&rsquo;exactitude \u00e9quilibr\u00e9e. Le pr\u00e9sent article propose une exploration exhaustive, tant sur le plan th\u00e9orique que programmatique, de cette m\u00e9trique essentielle. De l&rsquo;\u00e9lucidation de ses fondements math\u00e9matiques \u00e0 son d\u00e9ploiement au sein de protocoles complexes de validation crois\u00e9e et d&rsquo;optimisation bay\u00e9sienne d&rsquo;hyperparam\u00e8tres, nous d\u00e9taillerons les m\u00e9canismes sous-jacents n\u00e9cessaires \u00e0 une mise en \u0153uvre rigoureuse, reproductible et scientifiquement irr\u00e9prochable dans les travaux d&rsquo;analyse pr\u00e9dictive modernes.<\/p>\n<h2>1. Introduction th\u00e9orique \u00e0 l&rsquo;exactitude \u00e9quilibr\u00e9e (Balanced Accuracy)<\/h2>\n<h3>1.1 D\u00e9finition conceptuelle et \u00e9mergence de la m\u00e9trique<\/h3>\n<p>L&rsquo;exactitude \u00e9quilibr\u00e9e trouve ses racines historiques et conceptuelles dans les d\u00e9veloppements de la th\u00e9orie de la d\u00e9tection du signal (TDS), initialement formalis\u00e9e par des chercheurs comme Tanner et Swets au milieu du XXe si\u00e8cle pour quantifier la mani\u00e8re dont un observateur &mdash; qu&rsquo;il soit biologique ou m\u00e9canique &mdash; parvient \u00e0 s\u00e9parer une information pertinente d&rsquo;un bruit de fond stochastique. Dans les configurations exp\u00e9rimentales de la psychophysique et de la th\u00e9orie de l&rsquo;information, il est rapidement apparu que la capacit\u00e9 d&rsquo;un syst\u00e8me \u00e0 \u00e9mettre une r\u00e9ponse ad\u00e9quate ne pouvait \u00eatre \u00e9valu\u00e9e \u00e0 l&rsquo;aune d&rsquo;un simple comptage des r\u00e9ponses correctes. Lorsque les stimuli cibles sont rares, un observateur biais\u00e9 qui r\u00e9pond syst\u00e9matiquement par la n\u00e9gative pr\u00e9sente paradoxalement un taux d&rsquo;exactitude global flatteur tout en \u00e9chouant syst\u00e9matiquement \u00e0 d\u00e9tecter le signal attendu.<\/p>\n<p>Cette aporie m\u00e9thodologique a conduit la communaut\u00e9 statistique \u00e0 \u00e9laborer des m\u00e9triques normalis\u00e9es, affranchies des variations de pr\u00e9valence du signal dans l&rsquo;environnement exp\u00e9rimental. C&rsquo;est au c\u0153ur de cette qu\u00eate de validit\u00e9 de construit que l&rsquo;exactitude \u00e9quilibr\u00e9e a \u00e9t\u00e9 introduite dans les sciences des donn\u00e9es, notamment popularis\u00e9e par les travaux fondateurs de <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/ieeexplore.ieee.org\/document\/5597285\">Brodersen et ses collaborateurs (2010)<\/a>. L&rsquo;objectif \u00e9tait d&rsquo;instaurer un crit\u00e8re d&rsquo;\u00e9valuation qui traite chaque cat\u00e9gorie diagnostique ou comportementale comme un domaine d&rsquo;\u00e9valuation autonome poss\u00e9dant un poids \u00e9gal dans le jugement synth\u00e9tique de l&rsquo;observateur.<\/p>\n<p>D&rsquo;un point de vue \u00e9pist\u00e9mologique, il convient d&rsquo;op\u00e9rer une distinction rigoureuse entre l&rsquo;exactitude brute et l&rsquo;exactitude normalis\u00e9e. L&rsquo;exactitude brute est une mesure purement descriptive de la concordance globale entre l&rsquo;\u00e9chantillon empirique et le vecteur de pr\u00e9diction. Elle refl\u00e8te autant la structure marginale de la distribution des donn\u00e9es que l&rsquo;ad\u00e9quation fonctionnelle de l&rsquo;algorithme. \u00c0 l&rsquo;inverse, l&rsquo;exactitude \u00e9quilibr\u00e9e s&rsquo;affirme comme une m\u00e9trique contrefactuelle : elle estime quelle aurait \u00e9t\u00e9 l&rsquo;exactitude du mod\u00e8le si les donn\u00e9es d&rsquo;\u00e9valuation avaient pr\u00e9sent\u00e9 une r\u00e9partition parfaitement sym\u00e9trique entre les classes. Cette normalisation constitue une condition pr\u00e9alable indispensable \u00e0 toute inf\u00e9rence robuste portant sur l&rsquo;efficacit\u00e9 intrins\u00e8que d&rsquo;un m\u00e9canisme de d\u00e9cision supervis\u00e9.<\/p>\n<h3>1.2 Le probl\u00e8me fondamental du d\u00e9s\u00e9quilibre des classes<\/h3>\n<p>Dans la grande majorit\u00e9 des recherches empiriques contemporaines, la r\u00e9partition des observations entre les modalit\u00e9s d&rsquo;une variable cible s&rsquo;av\u00e8re profond\u00e9ment asym\u00e9trique. Qu&rsquo;il s&rsquo;agisse de documenter la survenue d&rsquo;un comportement violent en milieu carc\u00e9ral, l&rsquo;\u00e9mergence d&rsquo;une pathologie neurod\u00e9g\u00e9n\u00e9rative pr\u00e9coce, la fraude financi\u00e8re ou le d\u00e9crochage scolaire soudain, les cas positifs ne constituent fr\u00e9quemment qu&rsquo;une fraction marginale &mdash; oscillant typiquement entre 1 % et 10 % &mdash; du corpus d&rsquo;observation total. Ce ph\u00e9nom\u00e8ne d&rsquo;asym\u00e9trie structurelle engendre ce que les statisticiens d\u00e9signent sous le nom de \u00ab paradoxe de l&rsquo;exactitude \u00bb (<em>Accuracy Paradox<\/em>).<\/p>\n<p>Ce paradoxe d\u00e9coule directement de la structure de calcul de l&rsquo;exactitude classique. Lorsqu&rsquo;un jeu de donn\u00e9es comprend 98 % d&rsquo;individus sains et 2 % d&rsquo;individus atteints d&rsquo;un trouble psychopathologique s\u00e9v\u00e8re, un algorithme trivial programm\u00e9 pour pr\u00e9dire de mani\u00e8re d\u00e9terministe et constante la n\u00e9gativit\u00e9 diagnostique obtiendra, sans le moindre apprentissage, une exactitude brute de 98 %. D&rsquo;un point de vue quantitatif superficiel, ce mod\u00e8le semble fr\u00f4ler la perfection statistique. En r\u00e9alit\u00e9, sur le plan op\u00e9rationnel et clinique, son utilit\u00e9 pr\u00e9dictive est strictement nulle, puisqu&rsquo;il \u00e9choue \u00e0 identifier le moindre sujet \u00e0 risque. Le paradoxe r\u00e9side dans le fait qu&rsquo;un mod\u00e8le dot\u00e9 d&rsquo;une exactitude inf\u00e9rieure &mdash; par exemple 88 % &mdash;, mais capable d&rsquo;isoler une part significative des v\u00e9ritables cas positifs, sera formellement rejet\u00e9 au profit du mod\u00e8le na\u00eff si l&rsquo;exactitude globale demeure le seul crit\u00e8re de s\u00e9lection.<\/p>\n<p>Les cons\u00e9quences d&rsquo;un tel biais cognitif et m\u00e9thodologique dans la conduite de la recherche appliqu\u00e9e s&rsquo;av\u00e8rent d\u00e9l\u00e9t\u00e8res. L&rsquo;utilisation d&rsquo;une m\u00e9trique inad\u00e9quate conduit invariablement les \u00e9quipes de recherche \u00e0 s\u00e9lectionner des estimateurs statistiques paresseux, qui maximisent leur score en se conformant \u00e0 la structure a priori de l&rsquo;\u00e9chantillon plut\u00f4t qu&rsquo;en identifiant les variables explicatives discriminantes de la classe minoritaire. Ceci g\u00e9n\u00e8re une perte de confiance dans les outils d&rsquo;apprentissage automatique lorsqu&rsquo;ils sont ensuite confront\u00e9s \u00e0 la r\u00e9alit\u00e9 du terrain clinique ou organisationnel.<\/p>\n<h3>1.3 Pertinence dans l&rsquo;analyse comportementale et les sciences sociales<\/h3>\n<p>Dans l&rsquo;analyse comportementale, la sociologie quantitative et les neurosciences cognitives, l&rsquo;exactitude \u00e9quilibr\u00e9e r\u00e9pond \u00e0 une exigence \u00e9thique et clinique fondamentale : l&rsquo;\u00e9quit\u00e9 de traitement statistique des ph\u00e9nom\u00e8nes \u00e0 faible incidence. Consid\u00e9rons, par exemple, la d\u00e9tection des id\u00e9es suicidaires ou des passages \u00e0 l&rsquo;acte auto-agressifs au sein d&rsquo;une cohorte longitudinale d&rsquo;adolescents. Dans ce contexte, la pr\u00e9valence du ph\u00e9nom\u00e8ne reste heureusement basse \u00e0 l&rsquo;\u00e9chelle de la population g\u00e9n\u00e9rale. Toutefois, le co\u00fbt soci\u00e9tal, humain et m\u00e9dical d&rsquo;un faux n\u00e9gatif (l&rsquo;incapacit\u00e9 \u00e0 identifier un sujet en d\u00e9tresse) exc\u00e8de incommensurablement le co\u00fbt logistique d&rsquo;un faux positif (la conduite d&rsquo;une \u00e9valuation clinique compl\u00e9mentaire non concluante).<\/p>\n<p>Si les mod\u00e8les pr\u00e9dictifs d\u00e9velopp\u00e9s dans ces disciplines sont calibr\u00e9s et \u00e9valu\u00e9s \u00e0 l&rsquo;aide de l&rsquo;exactitude conventionnelle, le processus d&rsquo;optimisation math\u00e9matique n\u00e9gligera in\u00e9vitablement les sous-groupes minoritaires. L&rsquo;exactitude \u00e9quilibr\u00e9e contraint l&rsquo;analyste \u00e0 maintenir un niveau d&rsquo;exigence m\u00e9thodologique constant quelle que soit la repr\u00e9sentativit\u00e9 statistique du sous-groupe. Elle impose au mod\u00e8le pr\u00e9dictif d&rsquo;atteindre un taux de reconnaissance acceptable tant chez les individus manifestant un trait psychologique rare &mdash; par exemple, un profil de personnalit\u00e9 antisociale ou une r\u00e9silience cognitive exceptionnelle &mdash; que chez les sujets conformes \u00e0 la norme populationnelle.<\/p>\n<p>De surcro\u00eet, la m\u00e9trique s&rsquo;inscrit au c\u0153ur des d\u00e9bats contemporains relatifs \u00e0 la justice algorithmique (<em>algorithmic fairness<\/em>). Dans les \u00e9tudes sociologiques relatives aux d\u00e9cisions d&rsquo;octroi de bourses, de pr\u00e9diction de r\u00e9cidive judiciaire ou d&rsquo;acc\u00e8s \u00e0 des programmes sociaux s\u00e9lectifs, les minorit\u00e9s d\u00e9mographiques subissent fr\u00e9quemment une sous-repr\u00e9sentation dans les cohortes d&rsquo;entra\u00eenement. L&rsquo;exactitude \u00e9quilibr\u00e9e garantit que les erreurs commises sur ces populations sp\u00e9cifiques ne soient pas dilu\u00e9es et dissimul\u00e9es derri\u00e8re l&rsquo;\u00e9crasante masse statistique des donn\u00e9es issues du groupe majoritaire, assurant ainsi une auditabilit\u00e9 scientifique et sociale transparente des mod\u00e8les pr\u00e9dictifs.<\/p>\n<h2>2. Les limites structurelles de l&rsquo;exactitude standard face aux classes asym\u00e9triques<\/h2>\n<h3>2.1 Analyse math\u00e9matique du paradoxe de l&rsquo;exactitude<\/h3>\n<p>Pour appr\u00e9hender formellement les m\u00e9canismes du paradoxe de l&rsquo;exactitude, il est n\u00e9cessaire de d\u00e9composer analytiquement la formule conventionnelle de cette m\u00e9trique. Soit un ensemble de <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> observations distribu\u00e9es entre deux classes mutuellement exclusives, not\u00e9es <span class=\"arabpsy-math-inline\" data-latex=\"C_0\">$C_0$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"C_1\">$C_1$<\/span>. D\u00e9finissons <span class=\"arabpsy-math-inline\" data-latex=\"N_0\">$N_0$<\/span> comme l&rsquo;effectif des individus appartenant \u00e0 la classe majoritaire <span class=\"arabpsy-math-inline\" data-latex=\"C_0\">$C_0$<\/span>, et <span class=\"arabpsy-math-inline\" data-latex=\"N_1\">$N_1$<\/span> comme l&rsquo;effectif de la classe minoritaire <span class=\"arabpsy-math-inline\" data-latex=\"C_1\">$C_1$<\/span>, tels que <span class=\"arabpsy-math-inline\" data-latex=\"N = N_0 + N_1\">$N = N_0 + N_1$<\/span>. La matrice de confusion issue de la confrontation entre les \u00e9tiquettes observ\u00e9es et les pr\u00e9dictions d&rsquo;un mod\u00e8le binaire permet de d\u00e9finir quatre quantit\u00e9s fondamentales : les vrais positifs (<span class=\"arabpsy-math-inline\" data-latex=\"VP\">$VP$<\/span>), les vrais n\u00e9gatifs (<span class=\"arabpsy-math-inline\" data-latex=\"VN\">$VN$<\/span>), les faux positifs (<span class=\"arabpsy-math-inline\" data-latex=\"FP\">$FP$<\/span>) et les faux n\u00e9gatifs (<span class=\"arabpsy-math-inline\" data-latex=\"FN\">$FN$<\/span>). L&rsquo;exactitude conventionnelle, not\u00e9e ici <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span>, s&rsquo;exprime par la relation lin\u00e9aire suivante :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"A = \\frac{VP + VN}{N} = \\frac{VP + VN}{N_0 + N_1}\">$$A = \\frac{VP + VN}{N} = \\frac{VP + VN}{N_0 + N_1}$$<\/span><\/p>\n<p>Supposons \u00e0 pr\u00e9sent l&rsquo;existence d&rsquo;une asym\u00e9trie marqu\u00e9e caract\u00e9ris\u00e9e par un ratio de pr\u00e9valence <span class=\"arabpsy-math-inline\" data-latex=\"\\pi = \\frac{N_1}{N} to 0\">$\\pi = \\frac{N_1}{N} to 0$<\/span>, ce qui implique r\u00e9ciproquement que <span class=\"arabpsy-math-inline\" data-latex=\"\\frac{N_0}{N} = 1 - \\pi to 1\">$\\frac{N_0}{N} = 1 &#8211; \\pi to 1$<\/span>. Si nous soumettons \u00e0 ce jeu de donn\u00e9es un classificateur invariant ou \u00ab aveugle \u00bb, qui pr\u00e9dit syst\u00e9matiquement et inconditionnellement la classe majoritaire <span class=\"arabpsy-math-inline\" data-latex=\"C_0\">$C_0$<\/span> pour tout individu de l&rsquo;\u00e9chantillon, les valeurs prises par les composantes de la matrice de confusion deviennent imm\u00e9diatement pr\u00e9visibles : <span class=\"arabpsy-math-inline\" data-latex=\"VP = 0\">$VP = 0$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"FN = N_1\">$FN = N_1$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"VN = N_0\">$VN = N_0$<\/span>, et <span class=\"arabpsy-math-inline\" data-latex=\"FP = 0\">$FP = 0$<\/span>. En substituant ces grandeurs au sein de la formulation de base, le r\u00e9sultat math\u00e9matique obtenu se r\u00e9duit \u00e0 :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"A_{\\text{na\u00eff}} = \\frac{0 + N_0}{N_0 + N_1} = \\frac{N_0}{N} = 1 - \\pi\">$$A_{\\text{na\u00eff}} = \\frac{0 + N_0}{N_0 + N_1} = \\frac{N_0}{N} = 1 &#8211; \\pi$$<\/span><\/p>\n<p>Cette d\u00e9monstration \u00e9tablit sans \u00e9quivoque que la performance affich\u00e9e par un classificateur d\u00e9pourvu de toute capacit\u00e9 d&rsquo;inf\u00e9rence tend asymptotiquement vers l&rsquo;unit\u00e9 \u00e0 mesure que la classe minoritaire se rar\u00e9fie. Dans une situation o\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"\\pi = 0{,}001\">$\\pi = 0{,}001$<\/span> (un cas positif pour mille individus), le classificateur na\u00eff affiche un score de <span class=\"arabpsy-math-inline\" data-latex=\"0{,}999\">$0{,}999$<\/span>, soit une exactitude de 99,9 %. La formule classique op\u00e8re ainsi un effet d&rsquo;\u00e9crasement ou de masquage statistique : l&rsquo;erreur commise sur la classe <span class=\"arabpsy-math-inline\" data-latex=\"C_1\">$C_1$<\/span> (<span class=\"arabpsy-math-inline\" data-latex=\"FN = N_1\">$FN = N_1$<\/span>) est divis\u00e9e par le volume total <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span>, ce qui neutralise sa contribution relative au score final et dissimule l&rsquo;\u00e9chec fonctionnel complet du mod\u00e8le sur la cat\u00e9gorie critique.<\/p>\n<h3>2.2 Impact op\u00e9rationnel d&rsquo;une mauvaise m\u00e9trique d&rsquo;\u00e9valuation<\/h3>\n<p>L&rsquo;utilisation de l&rsquo;exactitude standard dans un environnement de classes asym\u00e9triques entra\u00eene des r\u00e9percussions d\u00e9sastreuses sur la validit\u00e9 interne et externe des travaux quantitatifs. Au sein de la litt\u00e9rature scientifique \u00e9valu\u00e9e par les pairs, il n&rsquo;est pas rare de constater la validation de mod\u00e8les pr\u00e9tendant r\u00e9soudre des probl\u00e8mes diagnostiques complexes avec une exactitude annonc\u00e9e de plus de 90 %, alors m\u00eame qu&rsquo;une analyse minutieuse de leurs tables de contingence r\u00e9v\u00e8le qu&rsquo;ils ne poss\u00e8dent aucune sensibilit\u00e9 clinique. Cette illusion de comp\u00e9tence algorithmique pollue les corpus de m\u00e9ta-analyse et fausse l&rsquo;\u00e9tat de l&rsquo;art technologique.<\/p>\n<p>Dans un contexte d\u00e9cisionnel r\u00e9el, par exemple dans le d\u00e9ploiement d&rsquo;un mod\u00e8le d&rsquo;alerte pr\u00e9coce pour la pr\u00e9vention du d\u00e9crochage universitaire au sein d&rsquo;une cohorte d&rsquo;\u00e9tudiants vuln\u00e9rables, une exactitude globale trompeuse induit un taux massif de faux n\u00e9gatifs non surveill\u00e9s. Les gestionnaires de programmes institutionnels, rassur\u00e9s par un taux d&rsquo;erreur global apparent de seulement 5 %, ignorent que ces 5 % d&rsquo;erreurs concentrent l&rsquo;int\u00e9gralit\u00e9 des \u00e9tudiants qui vont effectivement abandonner leur cursus sans avoir re\u00e7u l&rsquo;accompagnement p\u00e9dagogique n\u00e9cessaire. L&rsquo;outil d&rsquo;aide \u00e0 la d\u00e9cision devient alors un vecteur involontaire de non-intervention.<\/p>\n<p>En outre, l&rsquo;alt\u00e9ration de la reproductibilit\u00e9 scientifique constitue l&rsquo;un des effets pervers les plus insidieux de cette pratique. Lorsqu&rsquo;une \u00e9quipe de recherche tente de reproduire sur une population externe un mod\u00e8le entra\u00een\u00e9 sur un \u00e9chantillon d\u00e9s\u00e9quilibr\u00e9 avec un haut score d&rsquo;exactitude brute, l&rsquo;inversion ou la simple variation de la pr\u00e9valence de la classe cible dans la nouvelle cohorte entra\u00eene l&rsquo;effondrement imm\u00e9diat du score. Le mod\u00e8le n&rsquo;avait en effet jamais extrait de r\u00e9gularit\u00e9s statistiques transposables ; il avait simplement appris la distribution marginale a priori du jeu de donn\u00e9es initial.<\/p>\n<h3>2.3 Conditions statistiques imposant l&rsquo;abandon de l&rsquo;accuracy conventionnelle<\/h3>\n<p>L&rsquo;abandon de l&rsquo;exactitude brute au profit de m\u00e9triques normalis\u00e9es comme la Balanced Accuracy ne rel\u00e8ve pas d&rsquo;une pr\u00e9f\u00e9rence stylistique, mais d&rsquo;une imp\u00e9rieuse n\u00e9cessit\u00e9 math\u00e9matique qui s&rsquo;impose d\u00e8s lors que certains seuils distributionnels sont franchis. En pratique m\u00e9thodologique, les statisticiens s&rsquo;accordent \u00e0 consid\u00e9rer que d\u00e8s lors que la pr\u00e9valence de la classe minoritaire descend en dessous de 20 % de l&rsquo;effectif global (un ratio d&rsquo;asym\u00e9trie de 4:1 ou plus), l&rsquo;exactitude standard commence \u00e0 subir une distorsion significative. Lorsque ce ratio atteint ou d\u00e9passe 9:1 (moins de 10 % de cas minoritaires), l&rsquo;exactitude conventionnelle devient totalement inutilisable pour guider l&rsquo;entra\u00eenement ou la s\u00e9lection de mod\u00e8les.<\/p>\n<p>Un deuxi\u00e8me crit\u00e8re statistique d\u00e9terminant concerne la dissym\u00e9trie des matrices de co\u00fbts d&rsquo;erreur. Si les cons\u00e9quences d&rsquo;un faux n\u00e9gatif ne sont pas strictement identiques aux cons\u00e9quences d&rsquo;un faux positif, l&rsquo;exactitude conventionnelle &mdash; qui accorde une p\u00e9nalit\u00e9 identique de 1 \u00e0 toute erreur, quelle que soit la nature de la confusion &mdash; s&rsquo;av\u00e8re conceptuellement invalide. Dans les sciences m\u00e9dicales et humaines, l&rsquo;asym\u00e9trie des co\u00fbts est la norme absolue : l&rsquo;omission d&rsquo;une pathologie l\u00e9tale ou d&rsquo;un trouble psychologique incapacitant pr\u00e9sente un co\u00fbt sociopsychologique incomparablement sup\u00e9rieur \u00e0 l&rsquo;\u00e9mission d&rsquo;une fausse alerte conduisant \u00e0 un second examen non invasif.<\/p>\n<p>Enfin, les exigences de comparabilit\u00e9 inter-mod\u00e8les \u00e0 travers des jeux de donn\u00e9es h\u00e9t\u00e9rog\u00e8nes imposent l&rsquo;abandon de la m\u00e9trique classique. Si un chercheur \u00e9value un algorithme sur deux cohortes pr\u00e9sentant des taux de positivit\u00e9 distincts (par exemple 5 % dans un \u00e9chantillon de d\u00e9pistage communautaire et 25 % dans une unit\u00e9 hospitali\u00e8re sp\u00e9cialis\u00e9e), les scores d&rsquo;exactitude standard obtenus ne peuvent en aucun cas \u00eatre compar\u00e9s pour mesurer la robustesse de l&rsquo;estimateur. Seule une m\u00e9trique invariante \u00e0 l&rsquo;\u00e9gard de la pr\u00e9valence des classes, telle que l&rsquo;exactitude \u00e9quilibr\u00e9e, autorise une comparaison th\u00e9orique rigoureuse.<\/p>\n<h2>3. D\u00e9composition math\u00e9matique et fondements statistiques de la m\u00e9trique<\/h2>\n<h3>3.1 Formalisation de la sensibilit\u00e9 et de la sp\u00e9cificit\u00e9<\/h3>\n<p>La construction analytique de l&rsquo;exactitude \u00e9quilibr\u00e9e repose sur l&rsquo;int\u00e9gration conjointe de deux grandeurs fondamentales de l&rsquo;\u00e9pid\u00e9miologie math\u00e9matique : la sensibilit\u00e9 (ou taux de vrais positifs) et la sp\u00e9cificit\u00e9 (ou taux de vrais n\u00e9gatifs). Ces m\u00e9triques reposent sur le conditionnement probabiliste strict des d\u00e9cisions de l&rsquo;algorithme par rapport \u00e0 l&rsquo;\u00e9tat r\u00e9el et av\u00e9r\u00e9 de la nature.<\/p>\n<p>Soit <span class=\"arabpsy-math-inline\" data-latex=\"Y in {0, 1}\">$Y in {0, 1}$<\/span> la variable al\u00e9atoire repr\u00e9sentant l&rsquo;\u00e9tat r\u00e9el de l&rsquo;observation (o\u00f9 1 d\u00e9signe la condition positive et 0 la condition n\u00e9gative), et soit <span class=\"arabpsy-math-inline\" data-latex=\"\\hat{Y} in {0, 1}\">$\\hat{Y} in {0, 1}$<\/span> la variable al\u00e9atoire d\u00e9signant la pr\u00e9diction \u00e9mise par le mod\u00e8le. La sensibilit\u00e9, formellement synonyme du rappel (<em>Recall<\/em>) de la classe positive, repr\u00e9sente la probabilit\u00e9 conditionnelle que le mod\u00e8le pr\u00e9dise un r\u00e9sultat positif sachant que l&rsquo;individu est r\u00e9ellement positif :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\text{Sensibilit\u00e9} = \\text{Recall}_1 = P(\\hat{Y} = 1 mid Y = 1) = \\frac{VP}{VP + FN}\">$$\\text{Sensibilit\u00e9} = \\text{Recall}_1 = P(\\hat{Y} = 1 mid Y = 1) = \\frac{VP}{VP + FN}$$<\/span><\/p>\n<p>Cette proportion quantifie l&rsquo;exhaustivit\u00e9 de l&rsquo;algorithme face \u00e0 la classe d&rsquo;int\u00e9r\u00eat. \u00c0 l&rsquo;oppos\u00e9 du spectre de d\u00e9cision, la sp\u00e9cificit\u00e9 mesure la capacit\u00e9 du classificateur \u00e0 isoler et pr\u00e9server la classe de contr\u00f4le en \u00e9vitant les fausses alarmes. Elle s&rsquo;exprime comme la probabilit\u00e9 conditionnelle que le mod\u00e8le pr\u00e9dise un r\u00e9sultat n\u00e9gatif sachant que l&rsquo;individu est effectivement n\u00e9gatif :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\text{Sp\u00e9cificit\u00e9} = \\text{Recall}_0 = P(\\hat{Y} = 0 mid Y = 0) = \\frac{VN}{VN + FP}\">$$\\text{Sp\u00e9cificit\u00e9} = \\text{Recall}_0 = P(\\hat{Y} = 0 mid Y = 0) = \\frac{VN}{VN + FP}$$<\/span><\/p>\n<p>L&rsquo;avantage cardinal de ces deux grandeurs r\u00e9side dans leur stricte ind\u00e9pendance alg\u00e9brique vis-\u00e0-vis des effectifs marginaux <span class=\"arabpsy-math-inline\" data-latex=\"N_1\">$N_1$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"N_0\">$N_0$<\/span>. La sensibilit\u00e9 est calcul\u00e9e exclusivement sur le sous-ensemble conditionnel <span class=\"arabpsy-math-inline\" data-latex=\"Y = 1\">$Y = 1$<\/span>, sans que l&rsquo;ampleur de l&rsquo;\u00e9chantillon <span class=\"arabpsy-math-inline\" data-latex=\"Y = 0\">$Y = 0$<\/span> n&rsquo;intervienne au d\u00e9nominateur ; r\u00e9ciproquement, la sp\u00e9cificit\u00e9 s&rsquo;\u00e9tablit exclusivement sur la population conditionnelle <span class=\"arabpsy-math-inline\" data-latex=\"Y = 0\">$Y = 0$<\/span>. Par cons\u00e9quent, aucune variation arbitraire de la proportion globale de cas dans l&rsquo;\u00e9chantillon ne peut alt\u00e9rer la valeur intrins\u00e8que de ces deux probabilit\u00e9s conditionnelles.<\/p>\n<h3>3.2 L&rsquo;\u00e9quation de la balanced accuracy en contexte binaire<\/h3>\n<p>En contexte de classification binaire, l&rsquo;exactitude \u00e9quilibr\u00e9e (not\u00e9e couramment <span class=\"arabpsy-math-inline\" data-latex=\"BA\">$BA$<\/span> pour <em>Balanced Accuracy<\/em>) se d\u00e9finit comme la moyenne arithm\u00e9tique simple de la sensibilit\u00e9 et de la sp\u00e9cificit\u00e9. Sa formulation analytique canonique se pr\u00e9sente ainsi :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"BA = \\frac{\\text{Sensibilit\u00e9} + \\text{Sp\u00e9cificit\u00e9}}{2} = \\frac{1}{2} \\left( \\frac{VP}{VP + FN} + \\frac{VN}{VN + FP} \\right)\">$$BA = \\frac{\\text{Sensibilit\u00e9} + \\text{Sp\u00e9cificit\u00e9}}{2} = \\frac{1}{2} \\left( \\frac{VP}{VP + FN} + \\frac{VN}{VN + FP} \\right)$$<\/span><\/p>\n<p>Cette formulation simple implique une modification conceptuelle majeure : chaque classe d&rsquo;observations re\u00e7oit un poids \u00e9gal \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"\\frac{1}{2}\">$\\frac{1}{2}$<\/span> dans le score synth\u00e9tique final, ind\u00e9pendamment du nombre absolu d&rsquo;observations qui la composent dans le jeu de test. L&rsquo;\u00e9valuation s&rsquo;op\u00e8re comme si les donn\u00e9es d&rsquo;\u00e9valuation avaient fait l&rsquo;objet d&rsquo;un r\u00e9\u00e9quilibrage virtuel parfait, ramenant la pr\u00e9valence subjective de chaque groupe \u00e0 exactement 50 %.<\/p>\n<p>Analysons \u00e0 pr\u00e9sent le comportement asymptotique de cette m\u00e9trique lorsqu&rsquo;elle est soumise au classificateur na\u00eff d\u00e9crit pr\u00e9c\u00e9demment, qui pr\u00e9dit exclusivement la classe majoritaire <span class=\"arabpsy-math-inline\" data-latex=\"C_0\">$C_0$<\/span> sur un \u00e9chantillon pr\u00e9sentant 99 % de cas n\u00e9gatifs et 1 % de cas positifs. Pour un tel mod\u00e8le :<\/p>\n<ul>\n<li>La sp\u00e9cificit\u00e9 atteint sa valeur maximale th\u00e9orique : <span class=\"arabpsy-math-inline\" data-latex=\"\\text{Sp\u00e9cificit\u00e9} = \\frac{VN}{VN + 0} = 1{,}0\">$\\text{Sp\u00e9cificit\u00e9} = \\frac{VN}{VN + 0} = 1{,}0$<\/span> (soit 100 %).<\/li>\n<li>La sensibilit\u00e9 s&rsquo;effondre \u00e0 sa valeur minimale th\u00e9orique : <span class=\"arabpsy-math-inline\" data-latex=\"\\text{Sensibilit\u00e9} = \\frac{0}{0 + FN} = 0{,}0\">$\\text{Sensibilit\u00e9} = \\frac{0}{0 + FN} = 0{,}0$<\/span> (soit 0 %).<\/li>\n<\/ul>\n<p>En introduisant ces valeurs dans l&rsquo;\u00e9quation de la Balanced Accuracy, nous obtenons :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"BA_{\\text{na\u00eff}} = \\frac{0{,}0 + 1{,}0}{2} = 0{,}50\">$$BA_{\\text{na\u00eff}} = \\frac{0{,}0 + 1{,}0}{2} = 0{,}50$$<\/span><\/p>\n<p>Le r\u00e9sultat obtenu &mdash; exactement 50 % &mdash; illustre la puissance correctrice de la m\u00e9trique. Alors que l&rsquo;exactitude brute attribuait une note quasi parfaite de 99 % \u00e0 ce classificateur inop\u00e9rant, la Balanced Accuracy le ram\u00e8ne instantan\u00e9ment \u00e0 son niveau d&rsquo;utilit\u00e9 r\u00e9el, \u00e0 savoir le score qu&rsquo;obtiendrait un processus stochastique \u00e9quiprobable (le simple tirage \u00e0 pile ou face). La m\u00e9trique sanctionne sans ambigu\u00eft\u00e9 l&rsquo;absence totale de d\u00e9tection de la classe marginale.<\/p>\n<h3>3.3 L&rsquo;ajustement pour classification al\u00e9atoire (adjusted balanced accuracy)<\/h3>\n<p>Bien que l&rsquo;attribution d&rsquo;un score de 0,5 \u00e0 un mod\u00e8le na\u00eff constant constitue un progr\u00e8s analytique incontestable par rapport \u00e0 l&rsquo;accuracy brute, elle conserve une ambigu\u00eft\u00e9 psychologique pour l&rsquo;exp\u00e9rimentateur : dans la culture statistique commune, un score de 50 % est encore intuitivement interpr\u00e9t\u00e9 comme un succ\u00e8s \u00e0 moiti\u00e9 complet, plut\u00f4t que comme un \u00e9chec pr\u00e9dictif total.<\/p>\n<p>Pour dissiper cette confusion, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.metrics.balanced_accuracy_score.html\">Brodersen et ses collaborateurs (2010)<\/a> ont introduit une variante normalis\u00e9e d\u00e9sign\u00e9e sous le terme d&rsquo;exactitude \u00e9quilibr\u00e9e ajust\u00e9e (<em>Adjusted Balanced Accuracy<\/em>, ou <span class=\"arabpsy-math-inline\" data-latex=\"BA^*\">$BA^*$<\/span>). Cette proc\u00e9dure statistique r\u00e9\u00e9chelonne le r\u00e9sultat de telle sorte qu&rsquo;un classificateur op\u00e9rant au niveau du hasard (le <em>chance level<\/em>) se voie assigner un score de z\u00e9ro, tandis qu&rsquo;un classificateur th\u00e9orique parfait conserve son score maximal de 1. En contexte binaire, o\u00f9 la performance du hasard sur donn\u00e9es \u00e9quilibr\u00e9es s&rsquo;\u00e9tablit \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"\\frac{1}{2}\">$\\frac{1}{2}$<\/span>, la transformation lin\u00e9aire s&rsquo;exprime selon la formule :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"BA^* = \\frac{BA - \\frac{1}{2}}{1 - \\frac{1}{2}} = 2 \\cdot (BA - 0{,}5) = \\text{Sensibilit\u00e9} + \\text{Sp\u00e9cificit\u00e9} - 1\">$$BA^* = \\frac{BA &#8211; \\frac{1}{2}}{1 &#8211; \\frac{1}{2}} = 2 \\cdot (BA &#8211; 0{,}5) = \\text{Sensibilit\u00e9} + \\text{Sp\u00e9cificit\u00e9} &#8211; 1$$<\/span><\/p>\n<p>Cette \u00e9chelle normalis\u00e9e pr\u00e9sente un domaine de d\u00e9finition th\u00e9orique born\u00e9 sur l&rsquo;intervalle <span class=\"arabpsy-math-inline\" data-latex=\"[-1, 1]\">$[-1, 1]$<\/span> :<\/p>\n<ul>\n<li>Une valeur de <span class=\"arabpsy-math-inline\" data-latex=\"BA^* = 1\">$BA^* = 1$<\/span> correspond \u00e0 une discrimination parfaite sans la moindre erreur (<span class=\"arabpsy-math-inline\" data-latex=\"VP = N_1\">$VP = N_1$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"VN = N_0\">$VN = N_0$<\/span>).<\/li>\n<li>Une valeur de <span class=\"arabpsy-math-inline\" data-latex=\"BA^* = 0\">$BA^* = 0$<\/span> caract\u00e9rise un mod\u00e8le dont les performances globales ne se distinguent aucunement d&rsquo;un tirage al\u00e9atoire neutre ou d&rsquo;une d\u00e9cision constante unilat\u00e9rale.<\/li>\n<li>Une valeur strictement n\u00e9gative, pouvant descendre jusqu&rsquo;\u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"-1\">$-1$<\/span>, indique que le mod\u00e8le fait pire que le hasard en inversant de mani\u00e8re consistante la polarit\u00e9 de ses pr\u00e9dictions (un score de <span class=\"arabpsy-math-inline\" data-latex=\"-1\">$-1$<\/span> signifiant une inversion d\u00e9terministe compl\u00e8te, o\u00f9 chaque observation re\u00e7oit la fausse \u00e9tiquette).<\/li>\n<\/ul>\n<p>L&rsquo;exactitude \u00e9quilibr\u00e9e ajust\u00e9e fournit un cadre d&rsquo;\u00e9valuation probabiliste rigoureux, permettant de valider sans \u00e9quivoque si les r\u00e9gularit\u00e9s captur\u00e9es par un algorithme d&rsquo;apprentissage automatique d\u00e9passent v\u00e9ritablement l&rsquo;entropie de base du probl\u00e8me de classification consid\u00e9r\u00e9.<\/p>\n<h2>4. Pr\u00e9sentation de l&rsquo;environnement Python et de la suite scikit-learn<\/h2>\n<h3>4.1 Architecture logicielle du sous-module sklearn.metrics<\/h3>\n<p>L&rsquo;\u00e9cosyst\u00e8me open-source <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/jmlr.csail.mit.edu\/papers\/v12\/pedregosa11a.html\">scikit-learn<\/a> constitue la r\u00e9f\u00e9rence mondiale pour la mise en \u0153uvre d&rsquo;algorithmes statistiques et d&rsquo;\u00e9valuation pr\u00e9dictive en langage Python. Au sein de cette biblioth\u00e8que, l&rsquo;architecture d\u00e9di\u00e9e \u00e0 la validation des performances est rigoureusement compartiment\u00e9e au sein du sous-module <code>sklearn.metrics<\/code>. Ce module repose sur une s\u00e9paration conceptuelle \u00e9l\u00e9gante entre les fonctions d&rsquo;\u00e9valuation scalaires pures et les objets d&rsquo;\u00e9valuation d&rsquo;inf\u00e9rence, d\u00e9sign\u00e9s sous l&rsquo;appellation g\u00e9n\u00e9rique de <em>scorers<\/em>.<\/p>\n<p>Les fonctions d&rsquo;\u00e9valuation scalaires &mdash; parmi lesquelles figurent <code>accuracy_score<\/code>, <code>balanced_accuracy_score<\/code>, <code>f1_score<\/code> ou <code>roc_auc_score<\/code> &mdash; ob\u00e9issent \u00e0 un protocole d&rsquo;appel fonctionnel standardis\u00e9. Elles requi\u00e8rent au minimum deux vecteurs unidimensionnels de dimensions identiques : le vecteur des valeurs de r\u00e9f\u00e9rence empiriques (conventionnellement not\u00e9 <code>y_true<\/code>) et le vecteur des valeurs inf\u00e9r\u00e9es par l&rsquo;estimateur statistique (not\u00e9 <code>y_pred<\/code>). Ces fonctions traitent avec la m\u00eame fluidit\u00e9 des structures de donn\u00e9es natives du langage Python, des tableaux multidimensionnels <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/numpy.org\/\">NumPy<\/a> ou des s\u00e9ries de donn\u00e9es issues de la biblioth\u00e8que <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\/\">pandas<\/a>, op\u00e9rant en coulisses des conversions de types optimis\u00e9es en langage C pour maximiser l&rsquo;efficacit\u00e9 computationnelle.<\/p>\n<p>\u00c0 l&rsquo;\u00e9chelon sup\u00e9rieur, l&rsquo;API de scikit-learn d\u00e9ploie des wrappers de notation (les <em>scoring objects<\/em>) qui encapsulent ces fonctions d&rsquo;\u00e9valuation scalaires pour les rendre ex\u00e9cutables de mani\u00e8re automatis\u00e9e par les moteurs d&rsquo;optimisation m\u00e9ta-algorithmique, tels que les pipelines de validation crois\u00e9e (<code>cross_val_score<\/code>) ou les grilles d&rsquo;exploration d&rsquo;hyperparam\u00e8tres (<code>GridSearchCV<\/code>). Cette coh\u00e9rence syntaxique garantit une interop\u00e9rabilit\u00e9 sans couture \u00e0 travers l&rsquo;ensemble des modules d&rsquo;estimation de la suite logicielle.<\/p>\n<h3>4.2 Installation, d\u00e9pendances et v\u00e9rification de conformit\u00e9<\/h3>\n<p>Pour assurer la p\u00e9rennit\u00e9 et la reproductibilit\u00e9 formelle des exp\u00e9rimentations statistiques, il est primordial de d\u00e9ployer l&rsquo;environnement de calcul au sein d&rsquo;un espace d&rsquo;ex\u00e9cution virtuel isol\u00e9 (via des gestionnaires tels que <code>venv<\/code>, <code>pipenv<\/code> ou <code>conda<\/code>). L&rsquo;installation de la suite scikit-learn s&rsquo;appuie sur une pile scientifique optimis\u00e9e comprenant <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/scipy.org\/\">SciPy<\/a> pour l&rsquo;alg\u00e8bre lin\u00e9aire avanc\u00e9e, NumPy pour la manipulation matricielle vectoris\u00e9e, et <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/joblib.readthedocs.io\/\">joblib<\/a> pour la parall\u00e9lisation transparente des processus de calcul sur les architectures multicoeurs.<\/p>\n<p>Le d\u00e9ploiement des d\u00e9pendances s&rsquo;effectue usuellement via l&rsquo;index officiel des paquets Python \u00e0 l&rsquo;aide de la commande standard :<\/p>\n<p><code>pip install numpy scipy pandas scikit-learn<\/code><\/p>\n<p>Dans un contexte de recherche acad\u00e9mique o\u00f9 la tra\u00e7abilit\u00e9 des r\u00e9sultats constitue un imp\u00e9ratif d\u00e9ontologique, la v\u00e9rification programmatique de la version de la biblioth\u00e8que logicielle doit \u00eatre syst\u00e9matiquement int\u00e9gr\u00e9e en amorce des scripts d&rsquo;analyse. La fonction <code>balanced_accuracy_score<\/code> a \u00e9t\u00e9 formellement int\u00e9gr\u00e9e \u00e0 scikit-learn \u00e0 partir de la version 0.20.0. Il demeure donc imp\u00e9ratif de s&rsquo;assurer que l&rsquo;environnement d&rsquo;ex\u00e9cution dispose d&rsquo;une version \u00e9gale ou sup\u00e9rieure, ce qui s&rsquo;effectue au moyen de l&rsquo;instruction de contr\u00f4le suivante :<\/p>\n<p><code>import sklearn; print(sklearn.__version__)<\/code><\/p>\n<h3>4.3 Importation cibl\u00e9e des modules de mesure<\/h3>\n<p>Une bonne pratique de d\u00e9veloppement scientifique consiste \u00e0 proscrire formellement les importations g\u00e9n\u00e9riques indiff\u00e9renci\u00e9es (telles que <code>from sklearn.metrics import *<\/code>) qui polluent l&rsquo;espace de noms global, augmentent l&#8217;empreinte m\u00e9moire inutilement et obscurcissent l&rsquo;origine des fonctions au sein du code source. Il convient de privil\u00e9gier des importations modulaires explicites.<\/p>\n<p>Pour mener \u00e0 bien une campagne d&rsquo;\u00e9valuation rigoureuse mobilisant l&rsquo;exactitude \u00e9quilibr\u00e9e, nous importerons la fonction cible aux c\u00f4t\u00e9s des outils d&rsquo;exploration diagnostique compl\u00e9mentaires que sont la matrice de confusion et le rapport de classification d\u00e9taill\u00e9 :<\/p>\n<p><code>from sklearn.metrics import balanced_accuracy_score, accuracy_score, confusion_matrix, classification_report<\/code><\/p>\n<p>Par ailleurs, la reproductibilit\u00e9 des simulations et des partitionnements de donn\u00e9es impose la configuration explicite des g\u00e9n\u00e9rateurs de nombres pseudo-al\u00e9atoires. L&rsquo;utilisation syst\u00e9matique du param\u00e8tre <code>random_state<\/code> lors de l&rsquo;instanciation des g\u00e9n\u00e9rateurs d&rsquo;\u00e9chantillons et des algorithmes d&rsquo;apprentissage non d\u00e9terministes garantit que chaque it\u00e9ration du script produira rigoureusement les m\u00eames r\u00e9sultats num\u00e9riques, assurant ainsi la v\u00e9rifiabilit\u00e9 des conclusions scientifiques rapport\u00e9es.<\/p>\n<h2>5. La fonction balanced_accuracy_score : syntaxe, param\u00e8tres et m\u00e9canique<\/h2>\n<h3>5.1 \u00c9tude d\u00e9taill\u00e9e des arguments de la fonction<\/h3>\n<p>L&rsquo;impl\u00e9mentation algorithmique de la m\u00e9trique au sein de scikit-learn est encapsul\u00e9e dans la fonction <code>sklearn.metrics.balanced_accuracy_score<\/code>. Sa signature canonique se d\u00e9ploie selon la syntaxe suivante :<\/p>\n<p><code>balanced_accuracy_score(y_true, y_pred, *, sample_weight=None, adjusted=False)<\/code><\/p>\n<p>L&rsquo;analyse d\u00e9taill\u00e9e de ses arguments permet de comprendre la finesse de sa mise en \u0153uvre :<\/p>\n<ul>\n<li><strong><code>y_true<\/code><\/strong> : Tableau unidimensionnel, liste ou s\u00e9rie pandas contenant les \u00e9tiquettes r\u00e9elles des observations. Ces valeurs peuvent \u00eatre format\u00e9es sous forme d&rsquo;entiers, de cha\u00eenes de caract\u00e8res cat\u00e9gorielles ou de bool\u00e9ens. Ce vecteur fixe la v\u00e9rit\u00e9 terrain (<em>ground truth<\/em>).<\/li>\n<li><strong><code>y_pred<\/code><\/strong> : Vecteur de m\u00eame dimension que <code>y_true<\/code> contenant les \u00e9tiquettes discr\u00e8tes pr\u00e9dites par l&rsquo;algorithme d&rsquo;apprentissage. Il est fondamental de souligner que cette fonction attend des assignations de classes discr\u00e8tes et non pas des probabilit\u00e9s d&rsquo;appartenance continues ou des scores de d\u00e9cision (tels que ceux fournis par les m\u00e9thodes <code>predict_proba<\/code> ou <code>decision_function<\/code>).<\/li>\n<li><strong><code>sample_weight<\/code><\/strong> : Tableau optionnel de dimensions identiques \u00e0 <code>y_true<\/code>, attribuant un coefficient de pond\u00e9ration scalaire individuel \u00e0 chaque observation de l&rsquo;\u00e9chantillon. Cette fonctionnalit\u00e9 est cruciale lorsqu&rsquo;on manipule des donn\u00e9es d&rsquo;enqu\u00eates sociologiques redress\u00e9es par sondage stratifi\u00e9, o\u00f9 chaque r\u00e9pondant se voit affecter un coefficient d&rsquo;extrapolation d\u00e9mographique sp\u00e9cifique.<\/li>\n<li><strong><code>adjusted<\/code><\/strong> : Valeur bool\u00e9enne valant par d\u00e9faut <code>False<\/code>. Lorsqu&rsquo;elle est configur\u00e9e sur <code>True<\/code>, la fonction proc\u00e8de \u00e0 la normalisation de Brodersen d\u00e9crite pr\u00e9c\u00e9demment, r\u00e9\u00e9chelonnant le score de telle mani\u00e8re que le niveau du hasard th\u00e9orique corresponde \u00e0 la valeur <span class=\"arabpsy-math-inline\" data-latex=\"0{,}0\">$0{,}0$<\/span> et que le pire sc\u00e9nario pr\u00e9dictif atteigne <span class=\"arabpsy-math-inline\" data-latex=\"-\\frac{1}{K - 1}\">$-\\frac{1}{K &#8211; 1}$<\/span> (o\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"K\">$K$<\/span> repr\u00e9sente le nombre total de classes).<\/li>\n<\/ul>\n<h3>5.2 Algorithme interne d&rsquo;\u00e9valuation<\/h3>\n<p>Pour calculer le score avec une efficacit\u00e9 num\u00e9rique maximale, scikit-learn n&rsquo;ex\u00e9cute pas de boucles it\u00e9ratives manuelles sur les vecteurs d&rsquo;entr\u00e9e. L&rsquo;algorithme interne convertit implicitement le probl\u00e8me en une manipulation vectoris\u00e9e de la matrice de confusion normalis\u00e9e par classe.<\/p>\n<p>Dans un premier temps, la fonction identifie l&rsquo;ensemble des \u00e9tiquettes uniques pr\u00e9sentes dans le vecteur de r\u00e9f\u00e9rence <span class=\"arabpsy-math-inline\" data-latex=\"y_true\">$y_true$<\/span>, d\u00e9finissant l&rsquo;espace des classes <span class=\"arabpsy-math-inline\" data-latex=\"C = {c_1, c_2, dots, c_K}\">$C = {c_1, c_2, dots, c_K}$<\/span>. Pour chaque modalit\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"c_k\">$c_k$<\/span>, l&rsquo;algorithme isole les indices des observations appartenant r\u00e9ellement \u00e0 cette classe, puis calcule la proportion de ces observations qui ont \u00e9t\u00e9 assign\u00e9es avec succ\u00e8s \u00e0 la classe correspondante par le vecteur de pr\u00e9diction <span class=\"arabpsy-math-inline\" data-latex=\"y_pred\">$y_pred$<\/span>. Cette op\u00e9ration revient formellement \u00e0 extraire la diagonale de la matrice de confusion conditionnelle divis\u00e9e par la somme marginale de ses lignes (les effectifs r\u00e9els de chaque modalit\u00e9) :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\text{Rappel}_k = \\frac{\\sum_{i=1}^N \\mathbb{I}(y_i = c_k land \\hat{y}_i = c_k)}{\\sum_{i=1}^N \\mathbb{I}(y_i = c_k)}\">$$\\text{Rappel}_k = \\frac{\\sum_{i=1}^N \\mathbb{I}(y_i = c_k land \\hat{y}_i = c_k)}{\\sum_{i=1}^N \\mathbb{I}(y_i = c_k)}$$<\/span><\/p>\n<p>O\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"\\mathbb{I}(\\cdot)\">$\\mathbb{I}(\\cdot)$<\/span> d\u00e9signe la fonction indicatrice statistique standard. Une fois le vecteur des taux de rappel par classe calcul\u00e9 &mdash; que nous pouvons noter <span class=\"arabpsy-math-inline\" data-latex=\"R = [\\text{Rappel}_1, \\text{Rappel}_2, dots, \\text{Rappel}_K]\">$R = [\\text{Rappel}_1, \\text{Rappel}_2, dots, \\text{Rappel}_K]$<\/span> &mdash;, le score final d&rsquo;exactitude \u00e9quilibr\u00e9e non ajust\u00e9 s&rsquo;obtient par la simple moyenne non pond\u00e9r\u00e9e de ces valeurs individuelles :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"BA = \\frac{1}{K} \\sum_{k=1}^K \\text{Rappel}_k\">$$BA = \\frac{1}{K} \\sum_{k=1}^K \\text{Rappel}_k$$<\/span><\/p>\n<p>Ce proc\u00e9d\u00e9 vectoris\u00e9 \u00e9limine toute d\u00e9pendance \u00e0 l&rsquo;\u00e9gard de la taille des \u00e9chantillons propres \u00e0 chaque classe, octroyant arithm\u00e9tiquement une contribution rigoureusement identique de <span class=\"arabpsy-math-inline\" data-latex=\"\\frac{1}{K}\">$\\frac{1}{K}$<\/span> \u00e0 chaque cat\u00e9gorie identifi\u00e9e dans les donn\u00e9es d&rsquo;\u00e9valuation.<\/p>\n<h3>5.3 Gestion des cas limites et valeurs manquantes<\/h3>\n<p>L&rsquo;ex\u00e9cution de <code>balanced_accuracy_score<\/code> dans des contextes empiriques d\u00e9grad\u00e9s &mdash; fr\u00e9quents lors de simulations de Monte-Carlo, d&rsquo;\u00e9chantillonnage par r\u00e9\u00e9chantillonnage (<em>bootstrap<\/em>) ou de validation crois\u00e9e sur des micro-\u00e9chantillons &mdash; peut confronter la logique math\u00e9matique \u00e0 des singularit\u00e9s structurelles. L&rsquo;un des cas limites les plus critiques survient lorsqu&rsquo;un mod\u00e8le statistique refuse syst\u00e9matiquement d&rsquo;\u00e9mettre la pr\u00e9diction d&rsquo;une classe minoritaire donn\u00e9e.<\/p>\n<p>Dans cette configuration sp\u00e9cifique, la classe minoritaire existe bel et bien au sein du vecteur <span class=\"arabpsy-math-inline\" data-latex=\"y_true\">$y_true$<\/span>, mais sa fr\u00e9quence est rigoureusement nulle dans le vecteur <span class=\"arabpsy-math-inline\" data-latex=\"y_pred\">$y_pred$<\/span>. L&rsquo;algorithme de scikit-learn traite cette situation sans g\u00e9n\u00e9rer d&rsquo;interruption d&rsquo;ex\u00e9cution (l&rsquo;op\u00e9ration de division par z\u00e9ro n&rsquo;intervient pas, le d\u00e9nominateur \u00e9tant la somme des \u00e9l\u00e9ments de la ligne de la matrice de confusion issue de <span class=\"arabpsy-math-inline\" data-latex=\"y_true\">$y_true$<\/span>). Le rappel pour cette modalit\u00e9 marginale est alors assign\u00e9 \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"0{,}0\">$0{,}0$<\/span>, tirant lourdement vers le bas la moyenne arithm\u00e9tique globale des rappels.<\/p>\n<p>Une complexit\u00e9 sup\u00e9rieure \u00e9merge lorsqu&rsquo;une classe donn\u00e9e est totalement absente du vecteur de test <span class=\"arabpsy-math-inline\" data-latex=\"y_true\">$y_true$<\/span> (ce qui peut advenir lors d&rsquo;un partitionnement al\u00e9atoire non stratifi\u00e9 d&rsquo;un tr\u00e8s petit effectif). Dans cette occurrence, le d\u00e9nominateur du rappel pour cette modalit\u00e9 devient rigoureusement nul. La biblioth\u00e8que logicielle g\u00e8re cette exception en limitant la sommation et la division arithm\u00e9tique aux seules classes effectivement observ\u00e9es dans <span class=\"arabpsy-math-inline\" data-latex=\"y_true\">$y_true$<\/span>, tout en \u00e9mettant un avertissement statistique (<em>UndefinedMetricWarning<\/em>) pour alerter l&rsquo;utilisateur de l&rsquo;alt\u00e9ration de la dimension de l&rsquo;espace des classes lors de l&rsquo;\u00e9valuation.<\/p>\n<figure class=\"wpt-preserved-image\"><img fetchpriority=\"high\" decoding=\"async\" src=\"http:\/\/french.arabpsychology.com\/wp-content\/uploads\/2026\/09\/balanced1-1.png\" alt=\"\" \/><\/figure>\n<h2>6. Impl\u00e9mentation pas \u00e0 pas dans une t\u00e2che de classification binaire<\/h2>\n<h3>6.1 Cr\u00e9ation programmatique d&rsquo;un jeu de donn\u00e9es synth\u00e9tique d\u00e9s\u00e9quilibr\u00e9<\/h3>\n<p>Pour observer avec une nettet\u00e9 clinique le comportement compar\u00e9 de l&rsquo;exactitude brute et de l&rsquo;exactitude \u00e9quilibr\u00e9e, il appara\u00eet m\u00e9thodologiquement id\u00e9al de concevoir un environnement de simulation contr\u00f4l\u00e9. La fonction <code>make_classification<\/code> issue du sous-module <code>sklearn.datasets<\/code> offre les leviers param\u00e9triques requis pour forger une distribution empirique pr\u00e9sentant une asym\u00e9trie de classes s\u00e9v\u00e8re.<\/p>\n<p>Consid\u00e9rons la configuration d&rsquo;un \u00e9chantillon compos\u00e9 de 10 000 observations synth\u00e9tiques, au sein duquel nous instancions un d\u00e9s\u00e9quilibre s\u00e9v\u00e8re \u00e0 hauteur de 95 % pour la classe de r\u00e9f\u00e9rence (0) et de seulement 5 % pour la classe cible (1). Ce profil de distribution simule avec une fid\u00e9lit\u00e9 remarquable les caract\u00e9ristiques statistiques observ\u00e9es dans les cohortes longitudinales de d\u00e9pistage psychiatrique pr\u00e9coce. L&rsquo;impl\u00e9mentation programmatique de cette \u00e9tape de g\u00e9n\u00e9ration se structure ainsi :<\/p>\n<p><code>from sklearn.datasets import make_classification<br \/>\nfrom sklearn.model_selection import train_test_split<\/p>\n<p># G\u00e9n\u00e9ration d'un jeu de donn\u00e9es avec asym\u00e9trie 95:5<br \/>\nX, y = make_classification(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_samples=10000,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_features=20,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_informative=10,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_redundant=5,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;weights=[0.95, 0.05],<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;flip_y=0.01,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;random_state=42<br \/>\n)<\/code><\/p>\n<p>Une fois la matrice des variables pr\u00e9dictives <span class=\"arabpsy-math-inline\" data-latex=\"X\">$X$<\/span> et le vecteur d&rsquo;\u00e9tiquettes <span class=\"arabpsy-math-inline\" data-latex=\"y\">$y$<\/span> g\u00e9n\u00e9r\u00e9s, la partition entre donn\u00e9es d&rsquo;entra\u00eenement et donn\u00e9es de validation doit \u00eatre orchestr\u00e9e avec la plus grande rigueur. L&#8217;emploi de la fonction <code>train_test_split<\/code> exige imp\u00e9rativement le param\u00e9trage explicite de l&rsquo;argument <code>stratify=y<\/code>. Cette pr\u00e9caution garantit formellement que la proportion exacte de 95\/5 sera rigoureusement conserv\u00e9e \u00e0 travers le sous-ensemble d&rsquo;apprentissage et le sous-ensemble de test, pr\u00e9venant ainsi toute distorsion distributionnelle fortuite induite par le d\u00e9coupage stochastique :<\/p>\n<p><code>X_train, X_test, y_train, y_test = train_test_split(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;X, y, test_size=0.30, stratify=y, random_state=42<br \/>\n)<\/code><\/p>\n<h3>6.2 Entra\u00eenement d&rsquo;un mod\u00e8le lin\u00e9aire de r\u00e9f\u00e9rence<\/h3>\n<p>Afin de mettre en exergue l&rsquo;effet de masquage statistique, nous choisissons d\u00e9lib\u00e9r\u00e9ment d&rsquo;ajuster un estimateur de r\u00e9gression logistique standard sans activer de m\u00e9canisme compensatoire de r\u00e9\u00e9quilibrage algorithmique (en conservant la valeur par d\u00e9faut <code>class_weight=None<\/code>). Confront\u00e9 \u00e0 un volume massif de cas n\u00e9gatifs et \u00e0 un corpus r\u00e9siduel de cas positifs, le processus d&rsquo;optimisation par descente de gradient converge vers une fonction discriminante qui maximise le maximum de vraisemblance globale en favorisant outrageusement la classe majoritaire :<\/p>\n<p><code>from sklearn.linear_model import LogisticRegression<\/p>\n<p># Instanciation et ajustement du mod\u00e8le de r\u00e9f\u00e9rence na\u00eff face au d\u00e9s\u00e9quilibre<br \/>\nmodele = LogisticRegression(solver='lbfgs', max_iter=1000, random_state=42)<br \/>\nmodele.fit(X_train, y_train)<\/p>\n<p># Inf\u00e9rence des classes discr\u00e8tes sur la partition de test<br \/>\ny_pred = modele.predict(X_test)<\/code><\/p>\n<p>Cette d\u00e9marche reproduit fid\u00e8lement la trajectoire typique d&rsquo;un chercheur novice qui, appliquant aveugl\u00e9ment les algorithmes standard sur des cohortes d\u00e9s\u00e9quilibr\u00e9es, produit sans en avoir conscience un classificateur fortement polaris\u00e9 en faveur de la modalit\u00e9 majoritaire.<\/p>\n<h3>6.3 Calcul comparatif entre accuracy brute et balanced accuracy<\/h3>\n<p>L&rsquo;\u00e9valuation des performances obtenues sur la partition de test permet de constater le foss\u00e9 num\u00e9rique qui s\u00e9pare l&rsquo;exactitude brute conventionnelle de la Balanced Accuracy. Nous ex\u00e9cutons de mani\u00e8re synchrone les deux calculs \u00e0 partir des vecteurs <code>y_test<\/code> et <code>y_pred<\/code> :<\/p>\n<p><code>acc_brute = accuracy_score(y_test, y_pred)<br \/>\nacc_equilibree = balanced_accuracy_score(y_test, y_pred)<\/p>\n<p>print(f\"Exactitude conventionnelle brute : {acc_brute:.4f}\")<br \/>\nprint(f\"Exactitude \u00e9quilibr\u00e9e (Balanced) : {acc_equilibree:.4f}\")<\/code><\/p>\n<p>Dans cette exp\u00e9rience de simulation contr\u00f4l\u00e9e, les r\u00e9sultats num\u00e9riques typiques obtenus se distribuent de la mani\u00e8re suivante :<\/p>\n<ul>\n<li>L&rsquo;exactitude conventionnelle brute affiche un score flatteur de <strong>0,9520<\/strong> (soit 95,20 % de bonnes r\u00e9ponses).<\/li>\n<li>L&rsquo;exactitude \u00e9quilibr\u00e9e s&rsquo;\u00e9tablit quant \u00e0 elle \u00e0 <strong>0,5845<\/strong> (soit 58,45 %).<\/li>\n<\/ul>\n<p>L&rsquo;analyse de la matrice de confusion permet de comprendre imm\u00e9diatement l&rsquo;origine de cette divergence flagrante. En extrayant les donn\u00e9es au moyen de l&rsquo;instruction <code>cm = confusion_matrix(y_test, y_pred)<\/code>, nous constatons que sur les 2 850 observations de la classe majoritaire (0), l&rsquo;algorithme en classe correctement 2 835 (sp\u00e9cificit\u00e9 = <span class=\"arabpsy-math-inline\" data-latex=\"\\frac{2835}{2850} \\approx 99{,}47,%\">$\\frac{2835}{2850} \\approx 99{,}47,%$<\/span>). En revanche, sur les 150 cas critiques de la classe minoritaire (1), l&rsquo;algorithme n&rsquo;en isole que 26, g\u00e9n\u00e9rant 124 faux n\u00e9gatifs dramatiques (sensibilit\u00e9 = <span class=\"arabpsy-math-inline\" data-latex=\"\\frac{26}{150} \\approx 17{,}33,%\">$\\frac{26}{150} \\approx 17{,}33,%$<\/span>).<\/p>\n<p>L&rsquo;exactitude brute dissimule ce d\u00e9sastre clinique car elle agr\u00e8ge les 2 835 vrais n\u00e9gatifs et les 26 vrais positifs pour les diviser par 3 000, obtenant ainsi 95,20 %. \u00c0 l&rsquo;inverse, l&rsquo;exactitude \u00e9quilibr\u00e9e effectue la moyenne arithm\u00e9tique des deux performances conditionnelles :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"BA = \\frac{0{,}9947 + 0{,}1733}{2} = \\frac{1{,}1680}{2} = 0{,}5840\">$$BA = \\frac{0{,}9947 + 0{,}1733}{2} = \\frac{1{,}1680}{2} = 0{,}5840$$<\/span><\/p>\n<p>Ce score de 58,4 % r\u00e9v\u00e8le sans complaisance la m\u00e9diocrit\u00e9 fonctionnelle du mod\u00e8le, dont la capacit\u00e9 pr\u00e9dictive sur la classe d&rsquo;int\u00e9r\u00eat d\u00e9passe \u00e0 peine l&rsquo;assignation purement al\u00e9atoire.<\/p>\n<h3>6.4 Application de la version ajust\u00e9e pour la d\u00e9tection du hasard<\/h3>\n<p>Pour pousser la rigueur statistique jusqu&rsquo;\u00e0 son terme et mesurer \u00e0 quel point ce mod\u00e8le s&rsquo;\u00e9loigne v\u00e9ritablement du niveau de base stochastique, nous sollicitons la variante ajust\u00e9e de la m\u00e9trique en activant l&rsquo;argument d\u00e9di\u00e9 :<\/p>\n<p><code>acc_ajustee = balanced_accuracy_score(y_test, y_pred, adjusted=True)<br \/>\nprint(f\"Exactitude \u00e9quilibr\u00e9e ajust\u00e9e : {acc_ajustee:.4f}\")<\/code><\/p>\n<p>Le calcul produit imm\u00e9diatement une valeur de <strong>0,1680<\/strong> (soit 16,80 %). La signification statistique de ce chiffre est limpide : une fois \u00e9limin\u00e9e l&rsquo;illusion induite par la masse d\u00e9mographique des cas n\u00e9gatifs et normalis\u00e9e la contribution du hasard de base (fix\u00e9 \u00e0 0), il n&rsquo;appara\u00eet qu&rsquo;un gain marginal d&rsquo;\u00e0 peine 16,8 % d&rsquo;information pr\u00e9dictive par rapport \u00e0 une absence totale de mod\u00e9lisation. Ce constat invalide radicalement toute vell\u00e9it\u00e9 de d\u00e9ploiement op\u00e9rationnel en l&rsquo;\u00e9tat de ce mod\u00e8le.<\/p>\n<h2>7. G\u00e9n\u00e9ralisation math\u00e9matique et calcul au cas multiclasse<\/h2>\n<h3>7.1 Extension formelle de la d\u00e9finition \u00e0 n classes<\/h3>\n<p>L&rsquo;asym\u00e9trie de distribution ne se limite pas aux contextes diagnostiques binaires ; elle innerve l&rsquo;ensemble des probl\u00e9matiques de classification polytomique ou multiclasse. Dans une perspective de g\u00e9n\u00e9ralisation formelle, consid\u00e9rons une variable cible cat\u00e9gorielle pouvant prendre <span class=\"arabpsy-math-inline\" data-latex=\"K\">$K$<\/span> modalit\u00e9s distinctes, not\u00e9es <span class=\"arabpsy-math-inline\" data-latex=\"C in {c_1, c_2, dots, c_K}\">$C in {c_1, c_2, dots, c_K}$<\/span>, o\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"K ge 3\">$K ge 3$<\/span>. Chaque modalit\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"c_k\">$c_k$<\/span> regroupe un effectif d&rsquo;observations empiriques not\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"N_k\">$N_k$<\/span>, tel que la population totale s&rsquo;\u00e9tablit \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"N = \\sum_{k=1}^K N_k\">$N = \\sum_{k=1}^K N_k$<\/span>.<\/p>\n<p>La formulation analytique de l&rsquo;exactitude \u00e9quilibr\u00e9e en contexte multiclasse correspond rigoureusement \u00e0 ce que la litt\u00e9rature de l&rsquo;apprentissage automatique nomme la <strong>macro-moyenne des rappels<\/strong> (<em>Macro-averaged Recall<\/em>). Soit <span class=\"arabpsy-math-inline\" data-latex=\"y\">$y$<\/span> le vecteur des \u00e9tiquettes r\u00e9elles et <span class=\"arabpsy-math-inline\" data-latex=\"\\hat{y}\">$\\hat{y}$<\/span> le vecteur des pr\u00e9dictions. Pour chaque classe <span class=\"arabpsy-math-inline\" data-latex=\"k\">$k$<\/span>, le rappel individuel (ou exactitude sp\u00e9cifique \u00e0 la classe) est d\u00e9fini par la probabilit\u00e9 conditionnelle :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\text{Rappel}_k = P(\\hat{Y} = c_k mid Y = c_k) = \\frac{\\sum_{i=1}^N \\mathbb{I}(y_i = c_k land \\hat{y}_i = c_k)}{N_k}\">$$\\text{Rappel}_k = P(\\hat{Y} = c_k mid Y = c_k) = \\frac{\\sum_{i=1}^N \\mathbb{I}(y_i = c_k land \\hat{y}_i = c_k)}{N_k}$$<\/span><\/p>\n<p>L&rsquo;exactitude \u00e9quilibr\u00e9e globale <span class=\"arabpsy-math-inline\" data-latex=\"BA\">$BA$<\/span> s&rsquo;obtient alors en calculant la moyenne arithm\u00e9tique \u00e9quipond\u00e9r\u00e9e des <span class=\"arabpsy-math-inline\" data-latex=\"K\">$K$<\/span> taux de rappel sectoriels :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"BA = \\frac{1}{K} \\sum_{k=1}^K \\text{Rappel}_k\">$$BA = \\frac{1}{K} \\sum_{k=1}^K \\text{Rappel}_k$$<\/span><\/p>\n<p>Il existe une \u00e9quivalence alg\u00e9brique parfaite entre la Balanced Accuracy impl\u00e9ment\u00e9e dans scikit-learn et l&rsquo;indicateur de macro-rappel disponible dans les bilans de performance. La m\u00e9trique garantit que chaque classe d&rsquo;observations &mdash; qu&rsquo;elle contienne 10 000 individus ou seulement 15 sujets &mdash; exerce une influence rigoureusement identique de <span class=\"arabpsy-math-inline\" data-latex=\"\\frac{1}{K}\">$\\frac{1}{K}$<\/span> sur la notation finale attribu\u00e9e \u00e0 l&rsquo;algorithme pr\u00e9dictif.<\/p>\n<h3>7.2 Exemple pratique multiclasse sur donn\u00e9es psychom\u00e9triques cat\u00e9gorielles<\/h3>\n<p>Pour illustrer la mise en \u0153uvre multiclasse, imaginons une \u00e9tude psychom\u00e9trique cherchant \u00e0 mod\u00e9liser la s\u00e9v\u00e9rit\u00e9 d&rsquo;un \u00e9pisode d\u00e9pressif caract\u00e9ris\u00e9 \u00e0 l&rsquo;aide d&rsquo;inventaires d&rsquo;auto-\u00e9valuation standardis\u00e9s. La variable d\u00e9pendante est structur\u00e9e en trois niveaux ordinaux asym\u00e9triques : d\u00e9pression \u00ab L\u00e9g\u00e8re \u00bb (classe 0, repr\u00e9sentant 70 % de la cohorte), d\u00e9pression \u00ab Mod\u00e9r\u00e9e \u00bb (classe 1, repr\u00e9sentant 22 % de l&rsquo;\u00e9chantillon) et d\u00e9pression \u00ab S\u00e9v\u00e8re \u00bb (classe 2, statut rare ne regroupant que 8 % des patients).<\/p>\n<p>G\u00e9n\u00e9rons par voie computationnelle ce jeu de donn\u00e9es d\u00e9s\u00e9quilibr\u00e9 \u00e0 trois modalit\u00e9s et entra\u00eenons un classificateur multiclasse :<\/p>\n<p><code>from sklearn.datasets import make_classification<br \/>\nfrom sklearn.ensemble import RandomForestClassifier<\/p>\n<p># G\u00e9n\u00e9ration de la cohorte multiclasse d\u00e9s\u00e9quilibr\u00e9e (70%, 22%, 8%)<br \/>\nX_multi, y_multi = make_classification(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_samples=6000,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_features=15,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_informative=8,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_classes=3,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;weights=[0.70, 0.22, 0.08],<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;random_state=101<br \/>\n)<\/p>\n<p>X_tr, X_te, y_tr, y_te = train_test_split(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;X_multi, y_multi, test_size=0.25, stratify=y_multi, random_state=101<br \/>\n)<\/p>\n<p># Entra\u00eenement d'une for\u00eat al\u00e9atoire sans r\u00e9\u00e9quilibrage<br \/>\nforet = RandomForestClassifier(n_estimators=100, random_state=101)<br \/>\nforet.fit(X_tr, y_tr)<br \/>\ny_pred_multi = foret.predict(X_te)<\/p>\n<p># Calcul de la Balanced Accuracy multiclasse<br \/>\nscore_ba_multi = balanced_accuracy_score(y_te, y_pred_multi)<br \/>\nprint(f\"Balanced Accuracy multiclasse : {score_ba_multi:.4f}\")<\/code><\/p>\n<p>Le calcul produit directement le score synth\u00e9tique \u00e9quipond\u00e9r\u00e9 \u00e0 travers les trois cat\u00e9gories pathologiques. L&rsquo;examinateur obtient ainsi un indicateur unifi\u00e9 qui n&rsquo;est pas contamin\u00e9 par la pr\u00e9valence massive des formes l\u00e9g\u00e8res au d\u00e9triment de l&rsquo;identification des \u00e9pisodes s\u00e9v\u00e8res.<\/p>\n<h3>7.3 Analyse diff\u00e9rentielle par classe via classification_report<\/h3>\n<p>Pour auditer de mani\u00e8re approfondie les m\u00e9canismes de d\u00e9cision ayant concouru \u00e0 l&rsquo;\u00e9tablissement de ce score de Balanced Accuracy multiclasse, le recours \u00e0 la fonction <code>classification_report<\/code> s&rsquo;av\u00e8re indispensable. Ce rapport permet d&rsquo;objectiver la convergence exacte entre la Balanced Accuracy et la ligne de synth\u00e8se macro-analytique :<\/p>\n<p><code>rapport = classification_report(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;y_te, y_pred_multi,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;target_names=['L\u00e9ger', 'Mod\u00e9r\u00e9', 'S\u00e9v\u00e8re'],<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;digits=4<br \/>\n)<br \/>\nprint(rapport)<\/code><\/p>\n<p>L&rsquo;ex\u00e9cution de cette instruction r\u00e9v\u00e8le la distribution granulaire des performances statistiques par niveau diagnostique :<\/p>\n<ul>\n<li>Pour la classe <strong>L\u00e9ger<\/strong> (support = 1 050 individus) : le rappel atteint un niveau \u00e9lev\u00e9 de <strong>0,9420<\/strong>.<\/li>\n<li>Pour la classe <strong>Mod\u00e9r\u00e9<\/strong> (support = 330 individus) : le rappel fl\u00e9chit pour s&rsquo;\u00e9tablir \u00e0 <strong>0,4815<\/strong>.<\/li>\n<li>Pour la classe <strong>S\u00e9v\u00e8re<\/strong> (support = 120 individus) : le rappel s&rsquo;effondre \u00e0 <strong>0,2167<\/strong>.<\/li>\n<\/ul>\n<p>En observant la ligne d\u00e9sign\u00e9e sous l&rsquo;\u00e9tiquette <strong>macro avg<\/strong> au bas du tableau r\u00e9capitulatif g\u00e9n\u00e9r\u00e9 par scikit-learn, la colonne d\u00e9di\u00e9e au rappel affiche la valeur suivante :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\text{Macro-Rappel} = \\frac{0{,}9420 + 0{,}4815 + 0{,}2167}{3} = \\frac{1{,}6402}{3} \\approx 0{,}5467\">$$\\text{Macro-Rappel} = \\frac{0{,}9420 + 0{,}4815 + 0{,}2167}{3} = \\frac{1{,}6402}{3} \\approx 0{,}5467$$<\/span><\/p>\n<p>Ce chiffre de 0,5467 est rigoureusement identique \u00e0 la valeur renvoy\u00e9e par l&rsquo;instruction scalaire <code>balanced_accuracy_score(y_te, y_pred_multi)<\/code>. Cette confrontation analytique d\u00e9montre la pleine coh\u00e9rence math\u00e9matique de la m\u00e9trique, qui diagnostique avec une transparence absolue la faillite du mod\u00e8le \u00e0 d\u00e9tecter les formes les plus s\u00e9v\u00e8res de la pathologie, nonobstant une exactitude globale brute qui d\u00e9passe pourtant all\u00e8grement les 78 %.<\/p>\n<h2>8. Int\u00e9gration dans les protocoles de validation crois\u00e9e<\/h2>\n<h3>8.1 N\u00e9cessit\u00e9 de la stratification temporelle et factorielle<\/h3>\n<p>L&rsquo;estimation ponctuelle d&rsquo;une m\u00e9trique de performance sur une seule partition de test (le traditionnel d\u00e9coupage <em>train\/test split<\/em>) pr\u00e9sente une variance d&rsquo;\u00e9chantillonnage substantielle, tout particuli\u00e8rement lorsque la cohorte d&rsquo;\u00e9valuation renferme une classe marginale \u00e0 faible effectif. Dans cette configuration, quelques faux n\u00e9gatifs fortuits suppl\u00e9mentaires suffisent \u00e0 faire chuter dramatiquement le score de sensibilit\u00e9. Il est donc fondamental d&rsquo;inscrire l&rsquo;\u00e9valuation au sein d&rsquo;un protocole de validation crois\u00e9e \u00e0 plis (<em>k-fold cross-validation<\/em>).<\/p>\n<p>Cependant, l&rsquo;utilisation d&rsquo;une validation crois\u00e9e classique \u00e0 tirage purement al\u00e9atoire (<code>KFold<\/code>) constitue une faute m\u00e9thodologique lourde en pr\u00e9sence de classes asym\u00e9triques. En tirant les observations au hasard sans contr\u00f4le de distribution, certains plis de validation peuvent ne contenir statistiquement aucun repr\u00e9sentant de la classe minoritaire. Dans une telle hypoth\u00e8se, le calcul de la sensibilit\u00e9 pour ce pli devient impossible (division par z\u00e9ro), ce qui fausse int\u00e9gralement l&rsquo;estimation de l&rsquo;esp\u00e9rance math\u00e9matique de la m\u00e9trique.<\/p>\n<p>L&rsquo;utilisation de la classe <code>StratifiedKFold<\/code> s&rsquo;impose par cons\u00e9quent comme un pr\u00e9requis absolu. La stratification algorithmique assure que chaque pli de validation individuel comportera rigoureusement le m\u00eame pourcentage relatif de chaque modalit\u00e9 que l&rsquo;\u00e9chantillon parent complet. Le nombre de plis <span class=\"arabpsy-math-inline\" data-latex=\"k\">$k$<\/span> doit \u00eatre calibr\u00e9 avec pr\u00e9caution : il convient de veiller \u00e0 ce que l&rsquo;effectif absolu d&rsquo;individus de la classe minoritaire au sein de chaque pli de test (<span class=\"arabpsy-math-inline\" data-latex=\"N_1 \/ k\">$N_1 \/ k$<\/span>) soit statistiquement suffisant (g\u00e9n\u00e9ralement au minimum 10 \u00e0 20 observations) pour permettre une estimation de rappel qui ne soit pas hyper-sensible \u00e0 la moindre variation individuelle.<\/p>\n<h3>8.2 Mise en \u0153uvre avec cross_val_score et scoring=&rsquo;balanced_accuracy&rsquo;<\/h3>\n<p>La biblioth\u00e8que scikit-learn int\u00e8gre nativement l&rsquo;exactitude \u00e9quilibr\u00e9e dans son registre interne de cha\u00eenes de scoring. Ainsi, il est inutile de red\u00e9finir manuellement la fonction math\u00e9matique : l&rsquo;argument textuel standardis\u00e9 <code>scoring='balanced_accuracy'<\/code> est directement reconnu et interpr\u00e9t\u00e9 par le moteur d&rsquo;ex\u00e9cution de <code>cross_val_score<\/code>.<\/p>\n<p>Voici l&rsquo;impl\u00e9mentation canonique d&rsquo;un protocole d&rsquo;\u00e9valuation stratifi\u00e9 \u00e0 5 plis sur un mod\u00e8le de r\u00e9gression logistique :<\/p>\n<p><code>from sklearn.model_selection import StratifiedKFold, cross_val_score<br \/>\nimport numpy as np<\/p>\n<p># D\u00e9finition du protocole de partitionnement stratifi\u00e9<br \/>\ncv_stratifie = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)<\/p>\n<p># Ex\u00e9cution de la validation crois\u00e9e guid\u00e9e par la Balanced Accuracy<br \/>\nscores_cv = cross_val_score(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;modele,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;X,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;y,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;cv=cv_stratifie,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;scoring='balanced_accuracy',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_jobs=-1<br \/>\n)<\/p>\n<p>print(f\"Scores par pli : {np.round(scores_cv, 4)}\")<br \/>\nprint(f\"Moyenne empirique : {scores_cv.mean():.4f}\")<br \/>\nprint(f\"\u00c9cart-type de l'\u00e9chantillonnage : {scores_cv.std():.4f}\")<\/code><\/p>\n<p>Ce protocole fournit non seulement une estimation non biais\u00e9e de l&rsquo;efficacit\u00e9 pr\u00e9dictive moyenne du mod\u00e8le, mais permet \u00e9galement d&rsquo;extraire la variance de la m\u00e9trique \u00e0 travers l&rsquo;\u00e9cart-type des plis. L&rsquo;\u00e9tablissement d&rsquo;un intervalle de confiance \u00e0 95 % (<span class=\"arabpsy-math-inline\" data-latex=\"\\bar{x} \\pm 1{,}96 \\cdot \\frac{s}{\\sqrt{k}}\">$\\bar{x} \\pm 1{,}96 \\cdot \\frac{s}{\\sqrt{k}}$<\/span>) conf\u00e8re aux conclusions de l&rsquo;\u00e9tude une robustesse inf\u00e9rentielle conforme aux plus hauts standards de publication scientifique.<\/p>\n<h3>8.3 Validation crois\u00e9e \u00e0 m\u00e9triques multiples via cross_validate<\/h3>\n<p>Bien que la Balanced Accuracy offre une lecture synth\u00e9tique indispensable, le pilotage m\u00e9thodologique moderne d&rsquo;un projet d&rsquo;apprentissage automatique requiert une inspection simultan\u00e9e de multiples dimensions de la performance. La fonction <code>cross_validate<\/code> permet de surmonter la limitation \u00e0 une m\u00e9trique unique impos\u00e9e par <code>cross_val_score<\/code> en acceptant un dictionnaire ou une liste de crit\u00e8res d&rsquo;\u00e9valuation compl\u00e9mentaires.<\/p>\n<p>Le code suivant orchestre une analyse comparative multivari\u00e9e, int\u00e9grant l&rsquo;exactitude conventionnelle, l&rsquo;exactitude \u00e9quilibr\u00e9e et l&rsquo;aire sous la courbe ROC (<code>roc_auc<\/code>), tout en consignant les temps de traitement computationnels :<\/p>\n<p><code>from sklearn.model_selection import cross_validate<\/p>\n<p>metriques = {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;'exactitude_brute': 'accuracy',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;'exactitude_equilibree': 'balanced_accuracy',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;'aire_roc': 'roc_auc'<br \/>\n}<\/p>\n<p>resultats_croises = cross_validate(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;modele,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;X,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;y,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;cv=cv_stratifie,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;scoring=metriques,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;return_train_score=False,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_jobs=-1<br \/>\n)<\/p>\n<p>print(\"Bilan de la validation crois\u00e9e multidimensionnelle :\")<br \/>\nfor nom_metrique in metriques.keys():<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;scores = resultats_croises[f'test_{nom_metrique}']<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;print(f\"- {nom_metrique} : {scores.mean():.4f} (+\/- {scores.std():.4f})\")<\/code><\/p>\n<p>L&rsquo;analyse conjointe de ces indicateurs autorise un diagnostic structurel d&rsquo;une grande acuit\u00e9. Si l&rsquo;aire ROC affiche une valeur acceptable (par exemple 0,80) alors que la Balanced Accuracy s&rsquo;effondre \u00e0 0,55, l&rsquo;analyste comprend imm\u00e9diatement que l&rsquo;algorithme poss\u00e8de un potentiel discriminatif r\u00e9el dans la calibration continue de ses scores probabilistes, mais que le seuil par d\u00e9faut de coupure rigide fix\u00e9 \u00e0 0,5 par la m\u00e9thode <code>predict<\/code> s&rsquo;av\u00e8re inadapt\u00e9 \u00e0 la distribution des donn\u00e9es.<\/p>\n<h2>9. Optimisation des hyperparam\u00e8tres guid\u00e9e par l&rsquo;exactitude \u00e9quilibr\u00e9e<\/h2>\n<h3>9.1 Configuration de GridSearchCV avec le scorer \u00e9quilibr\u00e9<\/h3>\n<p>La recherche syst\u00e9matique des hyperparam\u00e8tres optimaux constitue une \u00e9tape fondamentale dans l&rsquo;entra\u00eenement d&rsquo;estimateurs \u00e0 haute capacit\u00e9 d&rsquo;apprentissage, tels que les machines \u00e0 vecteurs de support (SVM) ou les algorithmes de gradient boosting. Si l&rsquo;analyste laisse le gestionnaire d&rsquo;exploration par grille <code>GridSearchCV<\/code> fonctionner sous son param\u00e9trage par d\u00e9faut (\u00e0 savoir <code>scoring=None<\/code>, qui h\u00e9rite du score d&rsquo;exactitude standard de l&rsquo;estimateur), le processus de s\u00e9lection m\u00e9ta-algorithmique s\u00e9lectionnera invariablement les jeux d&rsquo;hyperparam\u00e8tres qui sur-p\u00e9nalisent l&rsquo;exploration de la classe minoritaire au profit de la classification conservative de la classe majoritaire.<\/p>\n<p>Pour orienter explicitement la recherche vers un mod\u00e8le pr\u00e9servant l&rsquo;int\u00e9grit\u00e9 de la classe rare, il est imp\u00e9ratif d&rsquo;assigner formellement <code>scoring='balanced_accuracy'<\/code> lors de l&rsquo;instanciation de l&rsquo;objet <code>GridSearchCV<\/code>. L&rsquo;architecture computationnelle se configure comme suit :<\/p>\n<p><code>from sklearn.model_selection import GridSearchCV<br \/>\nfrom sklearn.svm import SVC<\/p>\n<p># D\u00e9finition de l'espace de recherche des hyperparam\u00e8tres d'un SVM \u00e0 noyau RBF<br \/>\ngrille_hyperparametres = {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;'C': [0.1, 1, 10, 100],<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;'gamma': ['scale', 'auto', 0.01, 0.1]<br \/>\n}<\/p>\n<p>recherche_svm = GridSearchCV(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;estimator=SVC(random_state=42),<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;param_grid=grille_hyperparametres,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;scoring='balanced_accuracy',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;cv=cv_stratifie,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_jobs=-1<br \/>\n)<\/p>\n<p>recherche_svm.fit(X_train, y_train)<br \/>\nprint(f\"Meilleure configuration trouv\u00e9e : {recherche_svm.best_params_}\")<br \/>\nprint(f\"Meilleur score de Balanced Accuracy : {recherche_svm.best_score_:.4f}\")<\/code><\/p>\n<p>Sous cette contrainte d&rsquo;\u00e9valuation, le moteur d&rsquo;optimisation privil\u00e9giera un hyperparam\u00e8tre de r\u00e9gularisation <span class=\"arabpsy-math-inline\" data-latex=\"C\">$C$<\/span> plus permissif face aux erreurs de marge sur la classe majoritaire, d\u00e8s lors que cet assouplissement g\u00e9om\u00e9trique permet d&rsquo;isoler un nombre substantiel de vecteurs de support appartenant \u00e0 la classe minoritaire.<\/p>\n<h3>9.2 Cr\u00e9ation d&rsquo;un scorer personnalis\u00e9 avec make_scorer<\/h3>\n<p>Lorsque le protocole exp\u00e9rimental requiert l&rsquo;optimisation directe selon la variante ajust\u00e9e de l&rsquo;exactitude \u00e9quilibr\u00e9e (avec le niveau de base stochastique normalis\u00e9 \u00e0 0) ou lorsqu&rsquo;une pond\u00e9ration h\u00e9t\u00e9rog\u00e8ne sp\u00e9cifique des observations doit \u00eatre transmise, la cha\u00eene de caract\u00e8res pr\u00e9d\u00e9finie <code>'balanced_accuracy'<\/code> ne suffit plus. Il est alors n\u00e9cessaire de forger un objet d&rsquo;\u00e9valuation sur mesure au moyen de la fonction <code>make_scorer<\/code>.<\/p>\n<p>Cette fabrique logicielle prend en argument la fonction python sous-jacente et autorise la fixation explicite de param\u00e8tres d&rsquo;appel immuables :<\/p>\n<p><code>from sklearn.metrics import make_scorer<\/p>\n<p># Cr\u00e9ation d'un scorer sur mesure injectant le param\u00e8tre adjusted=True<br \/>\nscoreur_ajuste = make_scorer(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;balanced_accuracy_score,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;adjusted=True,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;greater_is_better=True<br \/>\n)<\/p>\n<p># Int\u00e9gration dans un processus d'optimisation<br \/>\nrecherche_ajustee = GridSearchCV(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;estimator=SVC(random_state=42),<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;param_grid=grille_hyperparametres,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;scoring=scoreur_ajuste,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;cv=cv_stratifie,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_jobs=-1<br \/>\n)<br \/>\nrecherche_ajustee.fit(X_train, y_train)<\/code><\/p>\n<p>L&rsquo;utilisation de ce scoreur personnalis\u00e9 assure que l&rsquo;int\u00e9gralit\u00e9 du processus de gradient m\u00e9ta-param\u00e9trique explore l&rsquo;espace des solutions en maximisant l&rsquo;\u00e9cart formel par rapport au hasard statistique nul.<\/p>\n<h3>9.3 \u00c9tude d&rsquo;un cas de r\u00e9gularisation et de pond\u00e9ration des classes<\/h3>\n<p>Pour observer l&rsquo;interaction synergique entre la m\u00e9trique d&rsquo;\u00e9valuation et les m\u00e9canismes correcteurs internes des algorithmes, nous pouvons enrichir l&rsquo;espace de recherche du classificateur \u00e0 vecteurs de support en y introduisant le param\u00e8tre <code>class_weight<\/code>. Ce dernier ordonne au solveur quadratique de p\u00e9naliser les erreurs sur chaque classe de mani\u00e8re inversement proportionnelle \u00e0 sa fr\u00e9quence d&rsquo;apparition empirique dans la cohorte d&rsquo;apprentissage :<\/p>\n<p><code>grille_avec_poids = {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;'C': [0.1, 1, 10],<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;'class_weight': [None, 'balanced']<br \/>\n}<\/p>\n<p>recherche_complete = GridSearchCV(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;estimator=SVC(kernel='rbf', random_state=42),<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;param_grid=grille_avec_poids,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;scoring='balanced_accuracy',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;cv=cv_stratifie,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_jobs=-1<br \/>\n)<br \/>\nrecherche_complete.fit(X_train, y_train)<\/p>\n<p># \u00c9valuation sur la partition de test ind\u00e9pendante<br \/>\nmodele_optimal = recherche_complete.best_estimator_<br \/>\npredictions_finales = modele_optimal.predict(X_test)<\/p>\n<p>print(f\"Param\u00e8tre retenu : {recherche_complete.best_params_['class_weight']}\")<br \/>\nprint(f\"Balanced Accuracy finale sur test : {balanced_accuracy_score(y_test, predictions_finales):.4f}\")<\/code><\/p>\n<p>Les r\u00e9sultats exp\u00e9rimentaux confirment invariablement que la combinaison du param\u00e8tre algorithmique interne <code>class_weight='balanced'<\/code> et du guidage m\u00e9trique externe <code>scoring='balanced_accuracy'<\/code> permet au classificateur SVM d&rsquo;\u00e9chapper au pi\u00e8ge de l&rsquo;asym\u00e9trie. La fronti\u00e8re s\u00e9paratrice est d\u00e9plac\u00e9e g\u00e9om\u00e9triquement vers la r\u00e9gion dense des cas majoritaires, augmentant drastiquement la sensibilit\u00e9 sans d\u00e9gradation catastrophique de la sp\u00e9cificit\u00e9.<\/p>\n<h2>10. Comparaison critique : Balanced Accuracy versus m\u00e9triques alternatives<\/h2>\n<h3>10.1 Confrontation avec le F1-Score et ses variantes<\/h3>\n<p>Dans la litt\u00e9rature appliqu\u00e9e du traitement automatique du langage et de la vision par ordinateur, le <strong>F1-score<\/strong> s&rsquo;affirme comme une m\u00e9trique fr\u00e9quemment mobilis\u00e9e pour pallier les d\u00e9fauts de l&rsquo;exactitude classique. Pour un didacticien de la statistique, il est essentiel de cerner la divergence structurelle qui s\u00e9pare le F1-score de l&rsquo;exactitude \u00e9quilibr\u00e9e.<\/p>\n<p>Le F1-score se d\u00e9finit comme la moyenne harmonique entre la pr\u00e9cision et le rappel de la classe d&rsquo;int\u00e9r\u00eat :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"F_1 = 2 \\cdot \\frac{\\text{Pr\u00e9cision} \\cdot \\text{Rappel}}{\\text{Pr\u00e9cision} + \\text{Rappel}} = \\frac{2 \\cdot VP}{2 \\cdot VP + FP + FN}\">$$F_1 = 2 \\cdot \\frac{\\text{Pr\u00e9cision} \\cdot \\text{Rappel}}{\\text{Pr\u00e9cision} + \\text{Rappel}} = \\frac{2 \\cdot VP}{2 \\cdot VP + FP + FN}$$<\/span><\/p>\n<p>Cette m\u00e9trique pr\u00e9sente deux caract\u00e9ristiques distinctives fondamentales :<\/p>\n<ul>\n<li>Elle <strong>ignore d\u00e9lib\u00e9r\u00e9ment les vrais n\u00e9gatifs (<span class=\"arabpsy-math-inline\" data-latex=\"VN\">$VN$<\/span>)<\/strong>. Dans les probl\u00e9matiques d&rsquo;extraction d&rsquo;information ou de recherche documentaire (moteurs de recherche sur le Web), cette propri\u00e9t\u00e9 est avantageuse : le nombre de documents hors-sujet non retourn\u00e9s est virtuellement infini et sans grand int\u00e9r\u00eat analytique.<\/li>\n<li>Elle souffre d&rsquo;une <strong>forte d\u00e9pendance \u00e0 l&rsquo;orientation arbitraire des classes<\/strong>. Si un chercheur inverse les \u00e9tiquettes de codage (en attribuant l&rsquo;\u00e9tiquette 1 aux t\u00e9moins sains et l&rsquo;\u00e9tiquette 0 aux sujets atteints de la pathologie \u00e9tudi\u00e9e), la valeur num\u00e9rique du F1-score change du tout au tout.<\/li>\n<\/ul>\n<p>\u00c0 l&rsquo;oppos\u00e9, l&rsquo;exactitude \u00e9quilibr\u00e9e traite avec une stricte sym\u00e9trie les deux \u00e9tats de la nature en int\u00e9grant explicitement les vrais n\u00e9gatifs au sein de la sp\u00e9cificit\u00e9. De surcro\u00eet, elle b\u00e9n\u00e9ficie d&rsquo;une <strong>invariance directionnelle totale<\/strong> : attribuer le label 1 \u00e0 la classe A et 0 \u00e0 la classe B, ou inversement, produit rigoureusement la m\u00eame Balanced Accuracy. En recherche biom\u00e9dicale et psychom\u00e9trique, o\u00f9 la pr\u00e9servation des sujets sains (sp\u00e9cificit\u00e9) constitue une contrainte clinique aussi critique que la d\u00e9tection des malades (sensibilit\u00e9), la Balanced Accuracy se r\u00e9v\u00e8le conceptuellement sup\u00e9rieure au F1-score conventionnel.<\/p>\n<h3>10.2 Comparaison avec l&rsquo;aire sous la courbe ROC (ROC-AUC)<\/h3>\n<p>Une autre alternative dominante est l&rsquo;aire sous la courbe de fonctionnement du r\u00e9cepteur, universellement d\u00e9sign\u00e9e sous l&rsquo;acronyme <strong>ROC-AUC<\/strong> (<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1016\/j.patrec.2005.10.010\">Fawcett, 2006<\/a>). Bien que la Balanced Accuracy et la courbe ROC reposent toutes deux sur les axes conjoints de la sensibilit\u00e9 (<span class=\"arabpsy-math-inline\" data-latex=\"P(\\hat{Y}=1 mid Y=1)\">$P(\\hat{Y}=1 mid Y=1)$<\/span>) et du taux de faux positifs (<span class=\"arabpsy-math-inline\" data-latex=\"1 - \\text{Sp\u00e9cificit\u00e9}\">$1 &#8211; \\text{Sp\u00e9cificit\u00e9}$<\/span>), leur statut m\u00e9thodologique est profond\u00e9ment dissemblable.<\/p>\n<p>La m\u00e9trique ROC-AUC est un <strong>indicateur global int\u00e9gr\u00e9 sur l&rsquo;ensemble du continuum des seuils de d\u00e9cision possibles<\/strong>. Elle mesure la probabilit\u00e9 qu&rsquo;un individu positif tir\u00e9 al\u00e9atoirement re\u00e7oive du mod\u00e8le un score d&rsquo;appartenance plus \u00e9lev\u00e9 qu&rsquo;un individu n\u00e9gatif tir\u00e9 al\u00e9atoirement. Cette m\u00e9trique \u00e9value la qualit\u00e9 intrins\u00e8que du tri ou du classement produit par l&rsquo;algorithme, totalement ind\u00e9pendamment de tout point de fonctionnement op\u00e9rationnel fig\u00e9.<\/p>\n<p>En revanche, la Balanced Accuracy est une <strong>m\u00e9trique au seuil op\u00e9rationnel fixe<\/strong>. Dans la pratique clinique ou industrielle, le m\u00e9decin ou le r\u00e9gulateur ne peut pas prendre une demi-d\u00e9cision : un individu doit \u00eatre orient\u00e9 vers un protocole th\u00e9rapeutique lourd ou \u00eatre renvoy\u00e9 \u00e0 son domicile. L&rsquo;exactitude \u00e9quilibr\u00e9e \u00e9value la performance du syst\u00e8me une fois ce seuil discret irr\u00e9vocablement tranch\u00e9. Il existe d&rsquo;ailleurs un pont g\u00e9om\u00e9trique remarquable entre ces deux concepts : sur une courbe ROC donn\u00e9e, le point de fonctionnement qui maximise la hauteur verticale au-dessus de la ligne diagonale du hasard (l&rsquo;indice de Youden <span class=\"arabpsy-math-inline\" data-latex=\"J = \\text{Sensibilit\u00e9} + \\text{Sp\u00e9cificit\u00e9} - 1\">$J = \\text{Sensibilit\u00e9} + \\text{Sp\u00e9cificit\u00e9} &#8211; 1$<\/span>) correspond pr\u00e9cis\u00e9ment au point qui maximise l&rsquo;exactitude \u00e9quilibr\u00e9e ajust\u00e9e (<span class=\"arabpsy-math-inline\" data-latex=\"BA^*\">$BA^*$<\/span>). Les deux mesures s&rsquo;av\u00e8rent ainsi hautement compl\u00e9mentaires : l&rsquo;AUC guide la validation th\u00e9orique de la fonction de tri probabiliste, tandis que la Balanced Accuracy valide l&rsquo;efficacit\u00e9 pragmatique du seuil de d\u00e9cision effectif.<\/p>\n<h3>10.3 Mise en regard avec le coefficient Kappa de Cohen et le MCC<\/h3>\n<p>L&rsquo;inventaire des m\u00e9triques robustes face au d\u00e9s\u00e9quilibre des classes inclut \u00e9galement le coefficient Kappa de Cohen (<span class=\"arabpsy-math-inline\" data-latex=\"kappa\">$kappa$<\/span>) et le coefficient de corr\u00e9lation de Matthews (MCC).<\/p>\n<p>Le <strong>Kappa de Cohen<\/strong> a \u00e9t\u00e9 initialement con\u00e7u dans le cadre de la psychom\u00e9trie pour quantifier le degr\u00e9 de fid\u00e9lit\u00e9 ou de concordance inter-juges au-del\u00e0 de ce qui serait attendu par le simple jeu du hasard. Lorsqu&rsquo;il est appliqu\u00e9 \u00e0 l&rsquo;apprentissage supervis\u00e9 (en consid\u00e9rant l&rsquo;algorithme comme un juge et la v\u00e9rit\u00e9 terrain comme un second observateur), sa formulation standard s&rsquo;\u00e9nonce :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\kappa = \\frac{P_o - P_e}{1 - P_e}\">$$\\kappa = \\frac{P_o &#8211; P_e}{1 &#8211; P_e}$$<\/span><\/p>\n<p>O\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"P_o\">$P_o$<\/span> repr\u00e9sente l&rsquo;exactitude observ\u00e9e (<span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span>) et <span class=\"arabpsy-math-inline\" data-latex=\"P_e\">$P_e$<\/span> repr\u00e9sente l&rsquo;exactitude attendue sous l&rsquo;hypoth\u00e8se de l&rsquo;ind\u00e9pendance statistique des marges. Cependant, le Kappa de Cohen souffre lui-m\u00eame d&rsquo;un paradoxe bien document\u00e9 dans la litt\u00e9rature psychom\u00e9trique (les paradoxes de Feinstein et Cicchetti) : lorsque la pr\u00e9valence d&rsquo;une classe devient extr\u00eame, le terme <span class=\"arabpsy-math-inline\" data-latex=\"P_e\">$P_e$<\/span> augmente artificiellement, ce qui entra\u00eene un effondrement drastique du score de Kappa m\u00eame en pr\u00e9sence d&rsquo;un accord effectif tr\u00e8s satisfaisant.<\/p>\n<p>Le <strong>Coefficient de Corr\u00e9lation de Matthews (MCC)<\/strong>, calcul\u00e9 \u00e0 partir des quatre cellules de la matrice de confusion par l&rsquo;expression du coefficient de corr\u00e9lation phi de Pearson :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"MCC = \\frac{VP \\cdot VN - FP \\cdot FN}{\\sqrt{(VP + FP)(VP + FN)(VN + FP)(VN + FN)}}\">$$MCC = \\frac{VP \\cdot VN &#8211; FP \\cdot FN}{\\sqrt{(VP + FP)(VP + FN)(VN + FP)(VN + FN)}}$$<\/span><\/p>\n<p>constitue math\u00e9matiquement l&rsquo;une des m\u00e9triques les plus compl\u00e8tes et les plus exigeantes. N\u00e9anmoins, sa lisibilit\u00e9 cognitive est souvent complexe pour les praticiens non statisticiens en raison de sa formulation quadratique et de sa sensibilit\u00e9 parfois excessive aux variations mineures des effectifs cellulaires marginaux. Dans ce paysage, la Balanced Accuracy s&rsquo;impose comme le compromis \u00e9pist\u00e9mologique optimal : dot\u00e9e d&rsquo;une signification probabiliste intuitive et transparente (la moyenne des chances de reconnaissance par classe), elle \u00e9chappe aux paradoxes du Kappa tout en assurant une robustesse \u00e9quivalente \u00e0 celle du MCC face aux distorsions de pr\u00e9valence.<\/p>\n<h2>11. \u00c9tude de cas appliqu\u00e9e : \u00c9valuation d&rsquo;un mod\u00e8le pr\u00e9dictif en psychom\u00e9trie<\/h2>\n<h3>11.1 Mod\u00e9lisation du risque de rechute d\u00e9pressive s\u00e9v\u00e8re<\/h3>\n<p>Afin de cristalliser l&rsquo;ensemble de ces pr\u00e9ceptes th\u00e9oriques dans un cas d&rsquo;usage r\u00e9aliste, nous mettons en \u0153uvre une \u00e9tude psychom\u00e9trique appliqu\u00e9e mod\u00e9lisant le risque de r\u00e9cidive d&rsquo;un \u00e9pisode d\u00e9pressif majeur \u00e0 l&rsquo;horizon d&rsquo;une ann\u00e9e chez des patients initialement stabilis\u00e9s en r\u00e9mission clinique. Dans ce type de cohorte prospective, la rechute s\u00e9v\u00e8re constitue heureusement l&rsquo;\u00e9v\u00e9nement minoritaire, touchant approximativement 10 % des sujets suivis (<span class=\"arabpsy-math-inline\" data-latex=\"N_1 = 200\">$N_1 = 200$<\/span>), tandis que 90 % des patients conservent leur \u00e9tat de r\u00e9mission (<span class=\"arabpsy-math-inline\" data-latex=\"N_0 = 1,800\">$N_0 = 1,800$<\/span>). La cohorte globale comprend 2 000 patients document\u00e9s par 12 variables psychom\u00e9triques issues d&rsquo;inventaires valid\u00e9s (scores d&rsquo;anh\u00e9donie, indices de r\u00e9activit\u00e9 cognitive, marqueurs de qualit\u00e9 du sommeil, niveaux d&rsquo;anxi\u00e9t\u00e9 somatique et indicateurs de soutien social per\u00e7u).<\/p>\n<p>D&rsquo;un point de vue \u00e9thique et clinique, la non-d\u00e9tection d&rsquo;une rechute imminente (le faux n\u00e9gatif) prive le patient d&rsquo;un ajustement th\u00e9rapeutique pr\u00e9ventif et majore de mani\u00e8re critique le risque de d\u00e9sinsertion socioprofessionnelle ou de passage \u00e0 l&rsquo;acte suicidaire. La tol\u00e9rance pour les faux n\u00e9gatifs est donc extr\u00eamement faible, sans pour autant que l&rsquo;on puisse se permettre de saturer les structures de consultation par un raz-de-mar\u00e9e de fausses alertes (faux positifs).<\/p>\n<h3>11.2 Pipeline de traitement avec imbrication sklearn<\/h3>\n<p>Pour pr\u00e9venir tout risque de fuite d&rsquo;information statistique entre l&rsquo;ensemble d&rsquo;apprentissage et l&rsquo;ensemble de validation (le ph\u00e9nom\u00e8ne d\u00e9l\u00e9t\u00e8re de <em>data leakage<\/em>), l&rsquo;ensemble de la cha\u00eene de traitement &mdash; incluant la normalisation des scores d&rsquo;inventaires et l&rsquo;instanciation du moteur d&rsquo;apprentissage &mdash; est rigoureusement encapsul\u00e9e au sein d&rsquo;un objet <code>Pipeline<\/code> de scikit-learn. L&rsquo;algorithme choisi est une for\u00eat al\u00e9atoire (<code>RandomForestClassifier<\/code>) enrichie du param\u00e8tre de compensation <code>class_weight='balanced_subsample'<\/code>, qui r\u00e9\u00e9value les poids des classes dynamiquement au sein de chaque \u00e9chantillon de bootstrap individuel :<\/p>\n<p><code>from sklearn.pipeline import Pipeline<br \/>\nfrom sklearn.preprocessing import StandardScaler<br \/>\nfrom sklearn.ensemble import RandomForestClassifier<\/p>\n<p># Synth\u00e8se de la cohorte psychom\u00e9trique (2000 patients, pr\u00e9valence 10%)<br \/>\nX_psy, y_psy = make_classification(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_samples=2000,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_features=12,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;n_informative=6,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;weights=[0.90, 0.10],<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;random_state=333<br \/>\n)<\/p>\n<p># D\u00e9coupage stratifi\u00e9 \u00e9tanche (70% entra\u00eenement, 30% test)<br \/>\nX_train_p, X_test_p, y_train_p, y_test_p = train_test_split(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;X_psy, y_psy, test_size=0.30, stratify=y_psy, random_state=333<br \/>\n)<\/p>\n<p># Construction du pipeline de traitement int\u00e9gr\u00e9<br \/>\npipeline_clinique = Pipeline([<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;('standardiseur', StandardScaler()),<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;('foret_clinique', RandomForestClassifier(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n_estimators=200,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class_weight='balanced_subsample',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;random_state=333<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;))<br \/>\n])<\/p>\n<p># Entra\u00eenement strict sur la partition d'apprentissage<br \/>\npipeline_clinique.fit(X_train_p, y_train_p)<\/code><\/p>\n<p>Ce pipeline garantit que la standardisation des variables pr\u00e9dictives calcule sa moyenne et sa variance empiriques exclusivement sur les donn\u00e9es d&rsquo;entra\u00eenement, appliquant ensuite cette transformation affine sur les donn\u00e9es de test sans aucune contamination crois\u00e9e.<\/p>\n<h3>11.3 \u00c9valuation finale et interpr\u00e9tation m\u00e9thodologique<\/h3>\n<p>Le pipeline clinique est \u00e0 pr\u00e9sent confront\u00e9 \u00e0 la partition d&rsquo;\u00e9valuation de 600 patients (540 en r\u00e9mission durable, 60 en situation de rechute clinique imminente). Nous proc\u00e9dons \u00e0 l&rsquo;extraction d\u00e9taill\u00e9e des m\u00e9triques globales et de la matrice de contingence :<\/p>\n<p><code># Inf\u00e9rence sur les donn\u00e9es d'\u00e9valuation ind\u00e9pendantes<br \/>\ny_pred_clinique = pipeline_clinique.predict(X_test_p)<\/p>\n<p># Calcul des m\u00e9triques scalaires d'int\u00e9r\u00eat<br \/>\nexactitude_brute_clinique = accuracy_score(y_test_p, y_pred_clinique)<br \/>\nexactitude_eq_clinique = balanced_accuracy_score(y_test_p, y_pred_clinique)<br \/>\nexactitude_aj_clinique = balanced_accuracy_score(y_test_p, y_pred_clinique, adjusted=True)<\/p>\n<p>print(f\"--- Bilan Psychom\u00e9trique Pr\u00e9dictif ---\")<br \/>\nprint(f\"Exactitude standard : {exactitude_brute_clinique:.4f}\")<br \/>\nprint(f\"Balanced Accuracy : {exactitude_eq_clinique:.4f}\")<br \/>\nprint(f\"Balanced Accuracy Ajust\u00e9e : {exactitude_aj_clinique:.4f}\")<\/code><\/p>\n<p>L&rsquo;ex\u00e9cution produit des valeurs empiriques exemplaires :<\/p>\n<ul>\n<li>Une exactitude standard de <strong>0,8917<\/strong> (89,17 %).<\/li>\n<li>Une exactitude \u00e9quilibr\u00e9e de <strong>0,7833<\/strong> (78,33 %).<\/li>\n<li>Une exactitude \u00e9quilibr\u00e9e ajust\u00e9e de <strong>0,5667<\/strong> (56,67 %).<\/li>\n<\/ul>\n<p>L&rsquo;inspection fine de la matrice de confusion r\u00e9v\u00e8le que l&rsquo;algorithme a identifi\u00e9 avec succ\u00e8s 46 des 60 patients en \u00e9tat de rechute (sensibilit\u00e9 clinique de 76,67 %), tout en classant correctement 489 des 540 patients stables (sp\u00e9cificit\u00e9 de 90,56 %).<\/p>\n<p>L&rsquo;analyste et le clinicien disposent ici d&rsquo;une image lucide et non d\u00e9form\u00e9e des capacit\u00e9s r\u00e9elles de l&rsquo;outil :<\/p>\n<ul>\n<li>L&rsquo;exactitude brute (89,17 %) n&rsquo;avait aucune pertinence analytique : elle \u00e9tait inf\u00e9rieure au score obtenu par un classificateur aveugle qui pr\u00e9dirait 100 % de r\u00e9mission (90,00 %).<\/li>\n<li>La Balanced Accuracy (78,33 %) valide formellement que l&rsquo;algorithme parvient \u00e0 maintenir une capacit\u00e9 de discrimination bilat\u00e9rale robuste, \u00e9quilibrant ad\u00e9quatement la sensibilit\u00e9 et la sp\u00e9cificit\u00e9.<\/li>\n<li>La Balanced Accuracy ajust\u00e9e (56,67 %) prouve sans ambigu\u00eft\u00e9 que le mod\u00e8le capture une part substantielle de variance clinique pr\u00e9dictive, se hissant largement au-dessus du bruit al\u00e9atoire de base.<\/li>\n<\/ul>\n<h2>12. Pi\u00e8ges courants, interpr\u00e9tations erron\u00e9es et bonnes pratiques<\/h2>\n<h3>12.1 Confusion entre probabilit\u00e9s d&rsquo;appartenance et seuils de coupure<\/h3>\n<p>L&rsquo;une des m\u00e9prises m\u00e9thodologiques les plus destructrices r\u00e9side dans la confusion entre les estimations de probabilit\u00e9s continues d\u00e9livr\u00e9es par un estimateur et la d\u00e9cision de classification discr\u00e8te induite par un seuil arbitraire. Par d\u00e9faut, la quasi-totalit\u00e9 des algorithmes de scikit-learn &mdash; lorsqu&rsquo;ils sont sollicit\u00e9s via la m\u00e9thode <code>predict<\/code> &mdash; appliquent un seuil de d\u00e9cision probabiliste rigide fix\u00e9 \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"\\theta = 0{,}50\">$\\theta = 0{,}50$<\/span>.<\/p>\n<p>Dans un contexte de pr\u00e9valence asym\u00e9trique marqu\u00e9e, fixer <span class=\"arabpsy-math-inline\" data-latex=\"\\theta = 0{,}50\">$\\theta = 0{,}50$<\/span> est une aberration statistique. Lorsque la probabilit\u00e9 a priori de la classe minoritaire est de 0,05, une observation dont la probabilit\u00e9 a posteriori est estim\u00e9e par le mod\u00e8le \u00e0 0,35 pr\u00e9sente une sur-repr\u00e9sentation de son risque d&rsquo;un facteur 7 par rapport au niveau de base populationnel. Pourtant, le seuil standard de 0,50 va implacablement la classer comme n\u00e9gative, \u00e9crasant la sensibilit\u00e9 du mod\u00e8le et ruinant sa Balanced Accuracy.<\/p>\n<p>La parade m\u00e9thodologique consiste \u00e0 extraire les distributions probabilistes continues via la m\u00e9thode <code>predict_proba<\/code>, puis \u00e0 mener une calibration post-hoc du seuil de coupure optimal <span class=\"arabpsy-math-inline\" data-latex=\"\\theta^*\">$\\theta^*$<\/span>. Le seuil qui maximise l&rsquo;indice de Youden le long de la courbe ROC ou qui optimise directement la Balanced Accuracy sur la partition de validation interne permet d&rsquo;exploiter la pleine capacit\u00e9 d&rsquo;extraction de signal de l&rsquo;algorithme :<\/p>\n<p><code># Extraction des probabilit\u00e9s pour la classe positive<br \/>\nprobas_test = pipeline_clinique.predict_proba(X_test_p)[:, 1]<\/p>\n<p># Optimisation computationnelle du seuil de coupure<br \/>\nseuils = np.linspace(0.1, 0.9, 81)<br \/>\nmeilleur_seuil, meilleur_ba = 0.5, 0.0<\/p>\n<p>for s in seuils:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;pred_seuil = (probas_test &gt;= s).astype(int)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;ba = balanced_accuracy_score(y_test_p, pred_seuil)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;if ba &gt; meilleur_ba:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meilleur_ba = ba<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meilleur_seuil = s<\/p>\n<p>print(f\"Seuil empirique optimal : {meilleur_seuil:.2f} (Balanced Accuracy = {meilleur_ba:.4f})\")<\/code><\/p>\n<h3>12.2 Mauvaise interpr\u00e9tation de l&rsquo;invariance d&rsquo;\u00e9chelle<\/h3>\n<p>Si l&rsquo;invariance de l&rsquo;exactitude \u00e9quilibr\u00e9e face aux variations de pr\u00e9valence constitue son principal atout m\u00e9thodologique, elle peut se transformer en pi\u00e8ge d&rsquo;interpr\u00e9tation lorsqu&rsquo;elle est transpos\u00e9e sans pr\u00e9caution au monde \u00e9conomique ou logistique r\u00e9el. Un chercheur ne doit jamais commettre l&rsquo;erreur de confondre <em>robustesse statistique intrins\u00e8que<\/em> et <em>viabilit\u00e9 op\u00e9rationnelle directe<\/em>.<\/p>\n<p>Consid\u00e9rons un test de d\u00e9pistage massif d\u00e9ploy\u00e9 sur une population d&rsquo;un million de citoyens pour une anomalie biologique touchant une personne sur mille (1 000 malades, 999 000 bien-portants). Supposons que le mod\u00e8le atteigne une Balanced Accuracy spectaculaire de 95 %, obtenue par une sensibilit\u00e9 de 95 % (950 vrais positifs, 50 faux n\u00e9gatifs) et une sp\u00e9cificit\u00e9 de 95 % (949 050 vrais n\u00e9gatifs, 49 950 faux positifs).<\/p>\n<p>Bien que le statisticien puisse se f\u00e9liciter d&rsquo;une Balanced Accuracy de 0,95, le gestionnaire de sant\u00e9 publique fait face \u00e0 un d\u00e9sastre d&rsquo;un point de vue clinique : sur les 50 900 personnes d\u00e9clar\u00e9es positives par l&rsquo;outil, seules 950 sont r\u00e9ellement malades. La valeur pr\u00e9dictive positive s&rsquo;effondre \u00e0 un d\u00e9risoire 1,87 %. Les services hospitaliers se retrouveraient submerg\u00e9s par pr\u00e8s de 50 000 examens invasifs inutiles. L&rsquo;exactitude \u00e9quilibr\u00e9e isole la performance math\u00e9matique de l&rsquo;observateur, mais elle ne dispense en aucun cas d&rsquo;int\u00e9grer une matrice de co\u00fbts \u00e9conomiques asym\u00e9triques pour \u00e9valuer l&rsquo;impact budg\u00e9taire et humain global d&rsquo;un d\u00e9ploiement \u00e0 grande \u00e9chelle.<\/p>\n<h3>12.3 Guide r\u00e9capitulatif des bonnes pratiques pour l&rsquo;analyste<\/h3>\n<p>Pour pr\u00e9munir les \u00e9quipes d&rsquo;analyse quantitative contre les errances m\u00e9thodologiques document\u00e9es dans cet article, nous formalisons le guide prescriptif suivant :<\/p>\n<ul>\n<li><strong>V\u00e9rification syst\u00e9matique de l&rsquo;asym\u00e9trie<\/strong> : Toute exploration de donn\u00e9es doit d\u00e9buter par l&rsquo;audit formel de la distribution des \u00e9tiquettes (<code>pd.Series(y).value_counts(normalize=True)<\/code>). Si la modalit\u00e9 minoritaire repr\u00e9sente moins de 20 % de l&rsquo;\u00e9chantillon, l&rsquo;exactitude standard doit \u00eatre imm\u00e9diatement \u00e9cart\u00e9e des fonctions de perte et d&rsquo;\u00e9valuation.<\/li>\n<li><strong>Exclusion de l&rsquo;accuracy des phases d&rsquo;optimisation<\/strong> : Ne jamais configurer <code>scoring='accuracy'<\/code> au sein des pipelines de s\u00e9lection d&rsquo;hyperparam\u00e8tres ou de s\u00e9lection de variables lorsque les donn\u00e9es sont d\u00e9s\u00e9quilibr\u00e9es. Utiliser syst\u00e9matiquement <code>scoring='balanced_accuracy'<\/code>.<\/li>\n<li><strong>Stratification universelle<\/strong> : Bannir les \u00e9chantillonnages purement stochastiques non contraints. Employer <code>StratifiedKFold<\/code> et le param\u00e8tre <code>stratify=y<\/code> dans <code>train_test_split<\/code> pour figer les proportions de classes \u00e0 chaque niveau de partitionnement.<\/li>\n<li><strong>Inspection conjointe obligatoire<\/strong> : Un score d&rsquo;exactitude \u00e9quilibr\u00e9e ne doit jamais \u00eatre interpr\u00e9t\u00e9 isol\u00e9ment. Il doit imp\u00e9rativement \u00eatre accompagn\u00e9 de l&rsquo;affichage de la matrice de confusion compl\u00e8te et du d\u00e9tail des taux de sensibilit\u00e9 et de sp\u00e9cificit\u00e9 (via <code>classification_report<\/code>).<\/li>\n<li><strong>Recherche active du seuil d\u00e9cisionnel<\/strong> : Ne jamais pr\u00e9supposer que le seuil de d\u00e9cision par d\u00e9faut (<span class=\"arabpsy-math-inline\" data-latex=\"\\theta = 0{,}5\">$\\theta = 0{,}5$<\/span>) est adapt\u00e9 au probl\u00e8me pr\u00e9dictif. Ajuster syst\u00e9matiquement le seuil de classification en fonction des probabilit\u00e9s a posteriori extraites de <code>predict_proba<\/code>.<\/li>\n<li><strong>Tra\u00e7abilit\u00e9 algorithmique et transparence<\/strong> : Documenter explicitement dans les scripts et les annexes m\u00e9thodologiques des rapports acad\u00e9miques la version exacte de scikit-learn utilis\u00e9e ainsi que la configuration des param\u00e8tres (notamment <code>adjusted=True<\/code> ou <code>False<\/code>) pour garantir la reproductibilit\u00e9 totale des calculs.<\/li>\n<\/ul>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<p>Brodersen, K. H., Ong, C. S., Stephan, K. E., &amp; Buhmann, J. M. (2010). The balanced accuracy and its posterior distribution. <em>Proceedings of the 20th International Conference on Pattern Recognition (ICPR)<\/em>, 3121&ndash;3124. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1109\/ICPR.2010.764\">https:\/\/doi.org\/10.1109\/ICPR.2010.764<\/a><\/p>\n<p>Chawla, N. V., Bowyer, K. W., Hall, L. O., &amp; Kegelmeyer, W. P. (2002). SMOTE: Synthetic minority over-sampling technique. <em>Journal of Artificial Intelligence Research<\/em>, 16, 321&ndash;357. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1613\/jair.953\">https:\/\/doi.org\/10.1613\/jair.953<\/a><\/p>\n<p>Fawcett, T. (2006). An introduction to ROC analysis. <em>Pattern Recognition Letters<\/em>, 27(8), 861&ndash;874. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1016\/j.patrec.2005.10.010\">https:\/\/doi.org\/10.1016\/j.patrec.2005.10.010<\/a><\/p>\n<p>Feinstein, A. R., &amp; Cicchetti, D. V. (1990). High agreement but low kappa: I. The problems of two paradoxes. <em>Journal of Clinical Epidemiology<\/em>, 43(6), 543&ndash;549. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1016\/0895-4356(90)90077-C\">https:\/\/doi.org\/10.1016\/0895-4356(90)90077-C<\/a><\/p>\n<p>Guyon, I., Bennett, K., Cawley, G., Escalante, H. J., Escalera, S., Ho, T. K., Maci&agrave;, N., Ray, B., Saeed, M., Statnikov, A., &amp; Viegas, E. (2015). Design of the 2015 ChaLearn AutoML challenge. <em>International Joint Conference on Neural Networks (IJCNN)<\/em>, 1&ndash;8. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1109\/IJCNN.2015.7280767\">https:\/\/doi.org\/10.1109\/IJCNN.2015.7280767<\/a><\/p>\n<p>He, H., &amp; Garcia, E. A. (2009). Learning from imbalanced data. <em>IEEE Transactions on Knowledge and Data Engineering<\/em>, 21(9), 1263&ndash;1284. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1109\/TKDE.2008.239\">https:\/\/doi.org\/10.1109\/TKDE.2008.239<\/a><\/p>\n<p>Kuhn, M., &amp; Johnson, K. (2013). <em>Applied predictive modeling<\/em>. Springer New York. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1007\/978-1-4614-6849-3\">https:\/\/doi.org\/10.1007\/978-1-4614-6849-3<\/a><\/p>\n<p>Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V., Thirion, B., Grisel, O., Blondel, M., Prettenhofer, P., Weiss, R., Dubourg, V., Vanderplas, J., Passos, A., Cournapeau, D., Brucher, M., Perrot, M., &amp; Duchesnay, E. (2011). Scikit-learn: Machine learning in Python. <em>Journal of Machine Learning Research<\/em>, 12, 2825&ndash;2830. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/jmlr.csail.mit.edu\/papers\/v12\/pedregosa11a.html\">https:\/\/jmlr.csail.mit.edu\/papers\/v12\/pedregosa11a.html<\/a><\/p>\n<p>Swets, J. A. (1988). Measuring the accuracy of diagnostic systems. <em>Science<\/em>, 240(4857), 1285&ndash;1293. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1126\/science.3287615\">https:\/\/doi.org\/10.1126\/science.3287615<\/a><\/p>\n<p>Tanner, W. P., &amp; Swets, J. A. (1954). A decision-making theory of visual detection. <em>Psychological Review<\/em>, 61(6), 401&ndash;409. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1037\/h0058700\">https:\/\/doi.org\/10.1037\/h0058700<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour calculer et interpr\u00e9ter l&rsquo;exactitude \u00e9quilibr\u00e9e (balanced accuracy) en Python avec la biblioth\u00e8que scikit-learn.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[6268,359],"tags":[7067,4317,6270,2468,2904],"class_list":["post-5138","psych_stat","type-psych_stat","status-publish","hentry","category-machine-learning","category-statistiques-appliquees","tag-balanced-accuracy","tag-classification","tag-evaluation-de-modeles","tag-python","tag-scikit-learn"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5138"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5138\/revisions"}],"predecessor-version":[{"id":16741,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5138\/revisions\/16741"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}