<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mon Shot de Data Science</title>
    <description>Mes meilleures pratiques en Data Science et Machine Learning (avec Python)</description>
    
    <link>https://www.monshotdata.com/</link>
    <atom:link href="https://rss.beehiiv.com/feeds/cu4gwRrftO.xml" rel="self"/>
    
    <lastBuildDate>Sun, 19 Apr 2026 03:21:53 +0000</lastBuildDate>
    <pubDate>Fri, 17 Apr 2026 10:00:00 +0000</pubDate>
    <atom:published>2026-04-17T10:00:00Z</atom:published>
    <atom:updated>2026-04-19T03:21:53Z</atom:updated>
    
      <category>Data Science</category>
      <category>Machine Learning</category>
      <category>Artificial Intelligence</category>
    <copyright>Copyright 2026, Mon Shot de Data Science</copyright>
    
    <image>
      <url>https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/publication/logo/1f7580ca-bca1-4bd0-ad17-425e1778d89f/MonCoachData-10.png</url>
      <title>Mon Shot de Data Science</title>
      <link>https://www.monshotdata.com/</link>
    </image>
    
    <docs>https://www.rssboard.org/rss-specification</docs>
    <generator>beehiiv</generator>
    <language>en-us</language>
    <webMaster>support@beehiiv.com (Beehiiv Support)</webMaster>

      <item>
  <title>Le paradoxe de la Régression Logistique 🤯</title>
  <description>🎯 Shot #300 - Pourquoi elle ne pourra JAMAIS modéliser parfaitement des classes bien séparées (alors que c&#39;est censé être le plus facile).</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ee275db6-3759-4ee9-a83b-727774e65726/_300_-_Re%CC%81gression_Logistique_-_Donne%CC%81es_Synthe%CC%81tiques.png" length="102551" type="image/png"/>
  <link>https://www.monshotdata.com/p/regression-logistique-classes-bien-separees</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/regression-logistique-classes-bien-separees</guid>
  <pubDate>Fri, 17 Apr 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-04-17T10:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Machine Learning]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Récemment, je faisais des tests avec un modèle de régression logistique sur l&#39;un de mes projets. </p><p class="paragraph" style="text-align:left;">En observant sa convergence via la valeur de la <i>loss</i> (fonction de perte) époque par époque, j&#39;ai découvert une particularité de la régression logistique dont je ne m&#39;étais jamais rendu compte : </p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">Tu es surpris ?</p><p class="paragraph" style="text-align:left;">Permets-moi de te détailler mon raisonnement.</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="rappels">Rappels</h2><p class="paragraph" style="text-align:left;">Nous savons tous que la régression logistique prédit la probabilité d&#39;appartenance à une classe, donnée par la formule : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ebe976b2-8b57-4ddb-b562-79c175b0d337/_300_-_Probabilite%CC%81_d_appartenance_a%CC%80_une_classe.png.png?t=1776073051"/></div><p class="paragraph" style="text-align:left;">De plus, sa fonction de perte est l&#39;entropie croisée binaire (ou <i>log loss</i>), qui s&#39;écrit ainsi : </p><p class="paragraph" style="text-align:left;"></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/337dd12c-2b31-4f76-b920-aef95dd015ae/_300_-_Entropie_croise%CC%81e_binaire.png.png?t=1776073064"/><div class="image__source"><span class="image__source_text"><p><i>où yᵢ est l&#39;étiquette réelle, et ŷᵢ est la probabilité prédite</i></p></span></div></div><ul><li><p class="paragraph" style="text-align:left;">Quand l&#39;étiquette réelle <code>yᵢ = 1</code>, la valeur de la perte est → <code>-log(ŷᵢ)</code>.</p></li><li><p class="paragraph" style="text-align:left;">Quand l&#39;étiquette réelle <code>yᵢ = 0</code>, la valeur de la perte est → <code>-log(1-ŷᵢ)</code>.</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c5d94f76-a401-4c49-b712-12e6cec978ea/_300_-_Fonction_de_perte_-_Re%CC%81gression_Logistique.png?t=1776074858"/></div><p class="paragraph" style="text-align:left;">Et comme nous le savons tous, le modèle tente de déterminer les paramètres <code>(θ₀, θ₁)</code> en minimisant cette fonction de perte.</p><h2 class="heading" style="text-align:left;" id="dmonstration">Démonstration</h2><p class="paragraph" style="text-align:left;">La probabilité de sortie ci-dessus peut être réécrite de la façon suivante :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/be29986d-0d17-42d3-8bab-6324f1fde4fd/_300_-_Probabilite%CC%81_de_sortie_de_la_re%CC%81gression_logistique.png.png?t=1776073074"/></div><p class="paragraph" style="text-align:left;">Pour faire simple, nous avons exprimé la fonction de probabilité de sortie en fonction de deux autres paramètres. </p><p class="paragraph" style="text-align:left;">C&#39;est clair jusqu&#39;ici ?</p><p class="paragraph" style="text-align:left;">Prenons maintenant le dataset 1D suivant, avec des classes bien séparées : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/aecd3c2a-c86e-432a-a837-618e23475f68/_300_-_Donne%CC%81es_synthe%CC%81tiques_de_Classification_Binaire.png?t=1776074876"/></div><p class="paragraph" style="text-align:left;">En modélisant cela avec la régression logistique de <code>sklearn</code>, nous obtenons ceci : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ee275db6-3759-4ee9-a83b-727774e65726/_300_-_Re%CC%81gression_Logistique_-_Donne%CC%81es_Synthe%CC%81tiques.png?t=1776074922"/></div><p class="paragraph" style="text-align:left;">En affichant les valeurs <code>(m, c)</code> à partir de la formulation ci-dessous, nous obtenons <code>m = 2.21</code> et <code>c = -2.33</code>. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/be29986d-0d17-42d3-8bab-6324f1fde4fd/_300_-_Probabilite%CC%81_de_sortie_de_la_re%CC%81gression_logistique.png.png?t=1776073074"/></div><p class="paragraph" style="text-align:left;">Voyons maintenant si nous pouvons obtenir une meilleure courbe de régression. </p><p class="paragraph" style="text-align:left;">Plus précisément, nous allons essayer d&#39;ajuster notre modèle avec différentes valeurs de <code>m</code>. </p><p class="paragraph" style="text-align:left;">Les résultats sont présentés ci-dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2d9428f8-58d5-46f1-8bb2-2a7922e43822/_300_-_Ajustement_de_notre_mode%CC%80le_avec_diffe%CC%81rentes_valeurs_de_m..png?t=1776075034"/></div><p class="paragraph" style="text-align:left;">À partir du visuel ci-dessus, il est clair qu&#39;augmenter le paramètre <i>m</i> conduit systématiquement à :</p><ul><li><p class="paragraph" style="text-align:left;">Une valeur de <i>loss</i> plus faible (bien que non nulle).</p></li><li><p class="paragraph" style="text-align:left;">Un meilleur ajustement (<i>fit</i>) de la régression.</p></li></ul><p class="paragraph" style="text-align:left;">Or, pour obtenir le <b>meilleur ajustement possible</b>, la courbe sigmoïde devrait être parfaitement verticale au milieu, ce qui est mathématiquement impossible.</p><p class="paragraph" style="text-align:left;">Par conséquent, l&#39;affirmation précédente : <b><i>&quot;La régression logistique ne peut jamais ajuster parfaitement des classes bien séparées&quot;</i></b> est totalement valide.</p><p class="paragraph" style="text-align:left;">C&#39;est pourquoi de nombreuses implémentations open-source (comme <code>sklearn</code>, par exemple) s&#39;arrêtent après un certain nombre d&#39;itérations. </p><p class="paragraph" style="text-align:left;">Il est donc important de noter qu&#39;elles laissent toujours une petite marge d&#39;amélioration si nécessaire.</p><p class="paragraph" style="text-align:left;">J&#39;adorerais avoir tes avis sur cette petite expérience en commentaire ! 👇</p><hr class="content_break"><p class="paragraph" style="text-align:left;">D&#39;ailleurs, t’es-tu déjà posé les questions suivantes :</p><ol start="1"><li><p class="paragraph" style="text-align:left;">Pourquoi utilisons-nous la fonction Sigmoïde dans la régression logistique ?</p></li><li><p class="paragraph" style="text-align:left;">Pourquoi utilisons-nous la <i>log loss</i> pour entraîner une régression logistique ?</p></li></ol><p class="paragraph" style="text-align:left;">Pourquoi pas d&#39;autres fonctions ? </p><p class="paragraph" style="text-align:left;">Elles ne sortent pas de nulle part, n&#39;est-ce pas ? Il doit bien y avoir une origine mathématique derrière tout ça, non ?</p><p class="paragraph" style="text-align:left;">Jette un œil à ces deux mini-cours approfondis pour le découvrir :</p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/regression-logistique-sigmoide?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=le-paradoxe-de-la-regression-logistique" target="_blank" rel="noopener noreferrer nofollow">Pourquoi utilise-t-on la fonction Sigmoïde en Régression Logistique ?</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/regression-logistique-perte-logarithmique?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=le-paradoxe-de-la-regression-logistique" target="_blank" rel="noopener noreferrer nofollow">Pourquoi utilise-t-on la &quot;log loss&quot; pour entraîner une Régression Logistique ?</a></p></li></ul><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=e4ea4d95-9576-4303-a4b3-db0ac8bb3da0&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Calibration des modèles ML (Partie 2) : techniques et limites de l&#39;ECE</title>
  <description>👀​ Mini-cours #28 - Histogram binning, Platt Scaling, régression isotonique, Matrix &amp; Vector Scaling — et pourquoi l&#39;ECE ne suffit pas.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/37c7cd50-234a-48b8-accd-0421ff436add/Mini-cours__28_-_Probabilite%CC%81_Empirique_vs_Probabilite%CC%81_Pre%CC%81dite.png.png" length="426516" type="image/png"/>
  <link>https://www.monshotdata.com/p/calibration-modeles-machine-learning-partie-2-techniques-ece</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/calibration-modeles-machine-learning-partie-2-techniques-ece</guid>
  <pubDate>Wed, 15 Apr 2026 09:30:00 +0000</pubDate>
  <atom:published>2026-04-15T09:30:00Z</atom:published>
    <category><![CDATA[Deep Learning]]></category>
    <category><![CDATA[Machine Learning]]></category>
    <category><![CDATA[Pro]]></category>
    <category><![CDATA[Fiabilité Et Transparence Des Prédictions]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:#f2eafe;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:2.0px 2.0px 2.0px 2.0px;"><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><b>Psst... Contenu Exclusif Réservé aux Membres !</b></span><br><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Ce mini-cours fait partie de notre espace premium. Rejoins dès maintenant le </span><b>Cercle des Experts</b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> pour débloquer l’intégralité de nos ressources, analyses approfondies et guides pratiques.</span><br><b>👉 </b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Clique ici pour découvrir les avantages et t’inscrire : </span><b><a class="link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-2-techniques-et-limites-de-l-ece" target="_blank" rel="noopener noreferrer nofollow" style="color: rgb(37, 99, 235)">Page d’adhésion</a></b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">.</span></p></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><p class="paragraph" style="text-align:left;"><span style="color:rgb(34, 34, 34);font-family:Poppins, Helvetica, sans-serif, serif, EmojiFont;font-size:16px;">⏱️ </span><i><b>Temps de lecture</b></i><i> : environ 30 minutes</i></p></div><p class="paragraph" style="text-align:left;">Dans la première partie de cette analyse approfondie sur la calibration des modèles, nous avons posé les bases en détail : définition de la calibration, et techniques pour mesurer le degré de miscalibration dans les modèles de Machine Learning.</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/calibration-modeles-machine-learning?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-2-techniques-et-limites-de-l-ece" target="_blank"><div class="embed__content"><p class="embed__title"> Calibration des modèles (Partie 1) : tes réseaux de neurones sont-ils trop sûrs d&#39;eux ? </p><p class="embed__description"> Découvre pourquoi tes réseaux de neurones sont mal calibrés : comprends le paradoxe des modèles modernes et apprends à mesurer leur certitude réelle en production. </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/db4acbd6-73c1-42eb-ae80-43ee71bc6b4c/Mini-cours__27_-_Couverture_MCE.png?t=1776159664"/></a></div><p class="paragraph" style="text-align:left;">Nous avons également compris quelques éléments historiques sur l&#39;évolution des modèles et pourquoi ils sont devenus de plus en plus mal calibrés au fil du temps.</p><p class="paragraph" style="text-align:left;">Voici la partie 2, dans laquelle nous allons explorer certaines limites des méthodes vues en partie 1, et discuter des techniques courantes pour calibrer les modèles de Machine Learning.</p><p class="paragraph" style="text-align:left;"></p><div class="section" style="background-color:#F1F7EF;border-color:#222222;border-radius:3px;border-style:dotted;border-width:1px;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><h2 class="heading" style="text-align:left;">Au programme :</h2><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#rcapitulatif-rapide" rel="noopener noreferrer nofollow">Récapitulatif rapide</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#pourquoi-la-calibration-estelle-imp" rel="noopener noreferrer nofollow">Pourquoi la calibration est-elle importante ?</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#les-diagrammes-de-fiabilit" rel="noopener noreferrer nofollow">Les diagrammes de fiabilité</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#l-erreur-de-calibration-attendue-ec" rel="noopener noreferrer nofollow">L&#39;Erreur de Calibration Attendue (ECE)</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#mthodes-de-calibration" rel="noopener noreferrer nofollow">Méthodes de calibration</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#modles-de-classification-binaire" rel="noopener noreferrer nofollow">Modèles de classification binaire</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#modles-de-classification-multiclass" rel="noopener noreferrer nofollow">Modèles de classification multiclasse</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#les-limites-de-l-ece" rel="noopener noreferrer nofollow">Les limites de l&#39;ECE</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#limite-1-elle-ne-considre-pas-toute" rel="noopener noreferrer nofollow">Limite 1 — Elle ne considère pas toutes les classe …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#limite-2-distribution-biaise-des-pr" rel="noopener noreferrer nofollow">Limite 2 — Distribution biaisée des probabilités p …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#limite-3-le-binning-fixe" rel="noopener noreferrer nofollow">Limite 3 — Le binning fixe</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#alternatives-l-ece" rel="noopener noreferrer nofollow">Alternatives à l&#39;ECE</a></p></li></ul></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="rcapitulatif-rapide">Récapitulatif rapide</h2><p class="paragraph" style="text-align:left;">Pour rappel, revenons sur le graphique suivant, qui compare un LeNet (développé en 1998) avec un ResNet (développé en 2016) sur le dataset CIFAR-100.</p><div class="image"><img alt="Sur ce graphique, la confiance (confidence) moyenne est déterminée en utilisant l&#39;étiquette (label) ayant la probabilité softmax la plus élevée, sur l&#39;ensemble des échantillons du dataset." class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a50eeded-9a25-471a-82a7-f3ab20122419/Mini-cours__27_-_Comparaison_des_mode%CC%80les_LeNet_et_ResNet.png.png?t=1776159664"/><div class="image__source"><span class="image__source_text"><p><i>Sur ce graphique, la confiance (confidence) moyenne est déterminée en utilisant l&#39;étiquette (label) ayant la probabilité softmax la plus élevée, sur l&#39;ensemble des échantillons du dataset</i></p></span></div></div><p class="paragraph" style="text-align:left;">Ce graphique nous montre clairement que :</p><ul><li><p class="paragraph" style="text-align:left;">La confiance moyenne du <b>LeNet</b> (un modèle plus ancien) correspond de près à sa précision réelle.</p></li><li><p class="paragraph" style="text-align:left;">En revanche, la confiance moyenne du <b>ResNet</b> (un modèle relativement plus récent) est nettement supérieure à sa précision réelle.</p></li></ul><p class="paragraph" style="text-align:left;">Ainsi, on peut voir que le modèle LeNet est bien calibré, puisque sa confiance correspond étroitement à la précision attendue. En revanche, la précision du ResNet est meilleure (0,7 &gt; 0,5), mais cette précision ne correspond pas à sa confiance.</p><p class="paragraph" style="text-align:left;">Autrement dit, le modèle ResNet, bien qu&#39;il soit globalement plus précis, est surconfiant dans ses prédictions. Ainsi, tandis que la confiance moyenne du LeNet s&#39;aligne bien avec ses performances réelles — ce qui indique une bonne calibration — la confiance moyenne du ResNet, plus élevée que sa précision, montre qu&#39;il prédit souvent les résultats avec une certitude supérieure à ce qui est justifié.</p><p class="paragraph" style="text-align:left;"><b>Pourquoi cela arrive-t-il ?</b></p><p class="paragraph" style="text-align:left;">Dans la partie 1, nous avons également abordé certaines raisons techniques (liées à la procédure d&#39;entraînement) qui nous ont aidés à comprendre pourquoi les modèles modernes se miscalibrent davantage, etc.</p><hr class="content_break"><h3 class="heading" style="text-align:left;" id="pourquoi-la-calibration-estelle-imp">Pourquoi la calibration est-elle importante ?</h3><p class="paragraph" style="text-align:left;">Une question revient souvent à ce stade :</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">La motivation est assez similaire à ce que nous avons également abordé dans le mini-cours sur la prédiction conforme (lien ci-dessous) :</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/prediction-conforme-maitriser-incertitude-ml?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-2-techniques-et-limites-de-l-ece" target="_blank"><div class="embed__content"><p class="embed__title"> Maîtriser l&#39;incertitude en Machine Learning avec la Prédiction Conforme </p><p class="embed__description"> Maîtrise l&#39;incertitude en Machine Learning avec la Prédiction Conforme : construis des intervalles de confiance robustes et déploie tes modèles en toute sécurité. </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/4715afb7-fc90-406a-b369-fb6f2901546a/Mini-cours__26_-_Mai%CC%82triser_l_incertitude_en_Machine_Learning_avec_la_Pre%CC%81diction_Conforme.png.png?t=1775049292"/></a></div><p class="paragraph" style="text-align:left;">Faire confiance aveuglément aux prédictions d&#39;un modèle ML peut parfois être fatal, surtout dans des environnements à hauts enjeux où les décisions basées sur ces prédictions peuvent affecter des vies humaines, la stabilité financière ou des infrastructures critiques.</p><p class="paragraph" style="text-align:left;">Si une précision de &quot;95%&quot; paraît bonne sur le papier, le modèle ne te dira jamais quels sont les 5% spécifiques de ses prédictions qui sont incorrects lorsqu&#39;il est utilisé en production.</p><p class="paragraph" style="text-align:left;">Autrement dit, même si l&#39;on sait que les prédictions du modèle sont généralement correctes un certain pourcentage du temps, le modèle ne peut généralement pas nous en dire davantage sur une prédiction spécifique.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d29fda86-b18c-47f7-9848-3f70baa2798a/Mini-cours__27_-_Pre%CC%81dictions_mode%CC%80le.png.png?t=1776159664"/></div><p class="paragraph" style="text-align:left;">En conséquence, dans des situations à haut risque comme le diagnostic médical, par exemple, faire confiance aveuglément à chaque prédiction peut entraîner de graves conséquences sur la santé.</p><p class="paragraph" style="text-align:left;">Ainsi, pour atténuer ces risques, il est essentiel de ne pas se fier uniquement aux prédictions, mais aussi de comprendre et quantifier l&#39;incertitude associée à ces prédictions.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/de6a922a-01aa-4712-9c6a-db4ce7395d3f/Mini-cours__26_-_image2.png?t=1775049293"/></div><p class="paragraph" style="text-align:left;">Mais comme les modèles modernes s&#39;avèrent de plus en plus surconfiants dans leurs prédictions (comme on l&#39;a vu ci-dessus), il est important de s&#39;assurer que notre modèle n&#39;en fait pas partie.</p><p class="paragraph" style="text-align:left;">Cette surconfiance peut être problématique, surtout dans des applications où les probabilités prédites sont utilisées pour prendre des décisions critiques.</p><p class="paragraph" style="text-align:left;">Par exemple, reprenons le cas du diagnostic médical automatisé. Dans ce contexte, le contrôle devrait être transmis à des médecins humains lorsque la confiance du modèle de diagnostic de maladies est faible.</p><p class="paragraph" style="text-align:left;">Plus précisément, un réseau devrait fournir une mesure de confiance calibrée en plus de sa prédiction. En d&#39;autres termes, la probabilité associée à l&#39;étiquette de classe prédite devrait refléter sa vraisemblance de correction réelle.</p><p class="paragraph" style="text-align:left;">Et ce n&#39;est pas seulement une question de communiquer la vraie confiance. Des estimations de confiance calibrées sont également cruciales pour l&#39;interprétabilité du modèle.</p><p class="paragraph" style="text-align:left;">Les humains ont une intuition cognitive naturelle pour les probabilités. De bonnes estimations de confiance fournissent une information supplémentaire précieuse pour établir la confiance avec l&#39;utilisateur — en particulier pour les réseaux de neurones, dont les décisions de classification sont souvent difficiles à interpréter.</p><p class="paragraph" style="text-align:left;">Mais si on n&#39;a aucun moyen de vraiment comprendre la confiance du modèle, alors une prédiction correcte et une supposition peuvent sembler identiques.</p><div class="section" style="background-color:#f1e8fb;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">💡 C&#39;est d&#39;autant plus important à l&#39;ère actuelle où le ML se démocratise de plus en plus. Tout le monde ne peut pas inspecter les modèles ML — comme les médecins ou les professionnels de la finance. Fournir un moyen pratique (et accessible au grand public) de communiquer le risque associé à une prédiction est également essentiel.</p></div><p class="paragraph" style="text-align:left;">Enfin, dans de nombreux systèmes de Machine Learning complexes, les modèles dépendent les uns des autres et peuvent aussi interagir entre eux. Les classifieurs individuels sont souvent des entrées pour des systèmes plus larges qui prennent les décisions finales. </p><p class="paragraph" style="text-align:left;">Si les modèles sont calibrés, cela simplifie les interactions. La calibration permet à chaque modèle de se concentrer sur l&#39;estimation de ses probabilités particulières du mieux possible. Et puisque l&#39;interprétation est stable, les autres composants du système n&#39;ont pas besoin d&#39;ajustements lorsque les modèles changent.</p><h3 class="heading" style="text-align:left;" id="les-diagrammes-de-fiabilit">Les diagrammes de fiabilité</h3><p class="paragraph" style="text-align:left;">Les diagrammes de fiabilité (Reliability Diagrams sont un moyen visuel d&#39;inspecter à quel point le modèle est actuellement calibré. Plus précisément, ce diagramme trace la précision empirique attendue en fonction de la valeur de confiance correspondante (sortie softmax) du modèle.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/88327496-8dba-4977-bccf-02c4dec89163/Mini-cours__27_-_Diagramme_de_fiabilite%CC%81.png.png?t=1776159665"/></div><p class="paragraph" style="text-align:left;">Si le modèle est parfaitement calibré, le diagramme doit tracer la fonction identité comme représenté ci-dessus.</p><p class="paragraph" style="text-align:left;">Pour estimer la précision attendue, on regroupe les prédictions en <code>M</code> bins d&#39;intervalle, chacun de taille <code>1/M</code> (comme indiqué ci-dessus), et on calcule la précision de chaque bin.</p><p class="paragraph" style="text-align:left;">Soit <code>Bₘ</code> l&#39;ensemble des instances dont les valeurs de confiance tombent dans l&#39;intervalle correspondant. Alors, la précision du modèle pour ces prédictions est donnée par :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/53cada92-ab73-4de0-8c3d-91daf7b35517/Mini-cours__27_-_Accuracy_des_pre%CC%81dictions_du_mode%CC%80le.png.png?t=1776159664"/></div><ul><li><p class="paragraph" style="text-align:left;">où <code>ŷᵢ</code> est la classe prédite pour l&#39;échantillon <code>i</code></p></li><li><p class="paragraph" style="text-align:left;"><code>yᵢ</code> est la vraie étiquette de classe pour l&#39;échantillon <code>i</code></p></li></ul><p class="paragraph" style="text-align:left;">Ensuite, on peut définir la confiance moyenne au sein du bin <code>Bₘ</code> comme suit :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ebec329b-b193-4661-bb79-8cbfcb90b708/Mini-cours__27_-_Confiance_moyenne_du_mode%CC%80le.png.png?t=1776159664"/></div><ul><li><p class="paragraph" style="text-align:left;">où <code>p̂ᵢ</code> est la confiance donnée par le modèle pour l&#39;échantillon i</p></li></ul><p class="paragraph" style="text-align:left;">Intuitivement, pour un modèle parfaitement calibré, on aura <code>accuracy(Bₘ) = confidence(Bₘ)</code> pour tout <code>m ∈ &#123;1, 2, ..., M&#125;</code>.</p><h3 class="heading" style="text-align:left;" id="l-erreur-de-calibration-attendue-ec">L&#39;Erreur de Calibration Attendue (ECE)</h3><p class="paragraph" style="text-align:left;">Les diagrammes de fiabilité sont un outil extrêmement utile pour évaluer visuellement si un modèle est bien calibré ou non. Ils permettent même d&#39;identifier les valeurs de confiance spécifiques pour lesquelles le modèle sous-estime ou surestime, et on peut alors inspecter ces instances si nécessaire.</p><p class="paragraph" style="text-align:left;">Cela dit, il est souvent utile de calculer une valeur scalaire qui mesure l&#39;ampleur de la miscalibration.</p><p class="paragraph" style="text-align:left;">Une façon d&#39;approximer l&#39;erreur de calibration attendue est de partitionner les prédictions en <code>M</code> bins équidistants (similaire aux diagrammes de fiabilité ci-dessus) et de prendre une moyenne pondérée de la différence précision/confiance des bins. Cela est noté ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/74a2218d-b47d-4e56-b8ca-1e6530908fcc/Mini-cours__27_-_Approximation_erreur_de_calibration.png.png?t=1776159664"/></div><ul><li><p class="paragraph" style="text-align:left;">où <code>n</code> est le nombre total d&#39;échantillons</p></li><li><p class="paragraph" style="text-align:left;"><code>|Bₘ|</code> est la taille de l&#39;ensemble des instances dont la confiance tombe dans l&#39;intervalle divisé</p></li></ul><p class="paragraph" style="text-align:left;">Pour plus de détails sur l&#39;ECE, tu peux lire la partie 1 :</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/calibration-modeles-machine-learning?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-2-techniques-et-limites-de-l-ece" target="_blank"><div class="embed__content"><p class="embed__title"> Calibration des modèles (Partie 1) : tes réseaux de neurones sont-ils trop sûrs d&#39;eux ? </p><p class="embed__description"> Découvre pourquoi tes réseaux de neurones sont mal calibrés : comprends le paradoxe des modèles modernes et apprends à mesurer leur certitude réelle en production. </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/db4acbd6-73c1-42eb-ae80-43ee71bc6b4c/Mini-cours__27_-_Couverture_MCE.png?t=1776159664"/></a></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="mthodes-de-calibration">Méthodes de calibration</h2><p class="paragraph" style="text-align:left;">Dans cette section, nous allons discuter de certaines méthodes de post-traitement qui nous aident à produire des probabilités calibrées.</p><div class="section" style="background-color:#e3f1fa;border-radius:5px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">💡 Les <b>méthodes de post-traitement</b> sont des techniques appliquées à la sortie d&#39;un modèle entraîné pour ajuster ses probabilités prédites sans réentraîner le modèle.</p></div><p class="paragraph" style="text-align:left;">Pour ce faire, chaque méthode nécessite un ensemble de validation hold-out qui, en pratique, peut être le même ensemble utilisé pour le réglage des hyperparamètres lors de l&#39;entraînement du modèle.</p><h3 class="heading" style="text-align:left;" id="modles-de-classification-binaire">Modèles de classification binaire</h3><p class="paragraph" style="text-align:left;">Commençons par discuter de la calibration dans le cas binaire (<code>yᵢ ∈ &#123;0, 1&#125;</code>).</p><div class="paywall"><hr class="paywall__break"/><div class="paywall__content"><h2 class="paywall__header"> La suite de ce mini-cours est réservée aux membres du Cercle des Experts. </h2><p class="paywall__description"> Tu as déjà le début. Pour accéder à l’explication complète et à tous les contenus avancés, rejoins le Cercle des Experts dès maintenant. </p><p class="paywall__links"><a class="paywall__upgrade_link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-2-techniques-et-limites-de-l-ece">Rejoindre le Cercle des Experts</a> Translation missing: en.app.shared.conjuction.or <a class="paywall__login_link" href="https://www.monshotdata.com/login?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-2-techniques-et-limites-de-l-ece">Sign In</a></p><div class="paywall__upsell"><div class="paywall__upsell_header"><h3> En devenant membre, tu débloques </h3></div><ul class="paywall__upsell_features"><li class="paywall__upsell_feature"> L’intégralité de ce mini-cours (sans coupure) </li><li class="paywall__upsell_feature"> Tous les mini-cours archivés et les ressources associées </li><li class="paywall__upsell_feature"> 1 nouveau mini-cours chaque semaine pour progresser en continu </li></ul></div></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=fb906372-87ff-434b-9059-9a453ca8efa9&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Le plus grand mythe sur le Feature Scaling</title>
  <description>🎯 Shot #299 - Pourquoi la standardisation ne corrigera jamais tes données asymétriques (et les vraies transformations à utiliser).</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/89f9cd08-8f03-4d7f-b22a-c580ef508d6d/_299_-_Le_Feature_Scaling_n_est_PAS_toujours_ne%CC%81cessaire.png.png" length="1713524" type="image/png"/>
  <link>https://www.monshotdata.com/p/feature-scaling-standardisation-skewness</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/feature-scaling-standardisation-skewness</guid>
  <pubDate>Mon, 13 Apr 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-04-13T10:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Statistiques]]></category>
    <category><![CDATA[Machine Learning]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">La mise à l&#39;échelle des variables (<i>feature scaling</i>) et la standardisation sont deux méthodes courantes pour modifier la plage de valeurs d&#39;une variable. </p><p class="paragraph" style="text-align:left;">Par exemple :</p><ul><li><p class="paragraph" style="text-align:left;">Le <b>MinMaxScaler</b> ramène la plage de valeurs d&#39;une variable à <code>[0, 1]</code> : </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6f61abdf-1c5a-42de-84ea-a0170e913e70/_299_-_MinMaxScaler.png?t=1776024908"/></div><ul><li><p class="paragraph" style="text-align:left;">La <b>Standardisation</b> fait en sorte que la moyenne de la variable soit de <code>0</code> et son écart-type de <code>1</code> : </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/b5b750be-a2cc-4cfa-b1cc-09087d6f1612/_299_-_Standardisation.png?t=1776024928"/></div><p class="paragraph" style="text-align:left;">Comme tu le sais peut-être déjà, ces opérations sont nécessaires car :</p><ul><li><p class="paragraph" style="text-align:left;">Elles empêchent une variable spécifique d&#39;influencer de manière disproportionnée la sortie du modèle.</p></li><li><p class="paragraph" style="text-align:left;">Elles rendent le modèle plus robuste face aux grandes variations dans les données.</p></li></ul><p class="paragraph" style="text-align:left;">Par exemple, dans l&#39;image ci-dessous, l&#39;échelle de la variable &quot;revenu&quot; pourrait impacter massivement la prédiction globale.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/090178a0-0334-4e04-84c4-54d5b82f18f1/_224_-_Diff%C3%A9rentes_%C3%A9chelles_de_colonnes.png?t=1776024111"/></div><p class="paragraph" style="text-align:left;">Mettre à l&#39;échelle (ou standardiser) les données sur une plage similaire permet d&#39;atténuer ce problème et d&#39;améliorer les performances du modèle. </p><p class="paragraph" style="text-align:left;">D&#39;ailleurs, l&#39;image suivante (<a class="link" href="https://www.monshotdata.com/p/feature-scaling?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=le-plus-grand-mythe-sur-le-feature-scaling" target="_blank" rel="noopener noreferrer nofollow">tirée d&#39;un de mes précédents shots data</a>) le confirme précisément :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/89f9cd08-8f03-4d7f-b22a-c580ef508d6d/_299_-_Le_Feature_Scaling_n_est_PAS_toujours_ne%CC%81cessaire.png.png?t=1776024837"/></div><p class="paragraph" style="text-align:left;">Comme illustré ci-dessus, le <i>feature scaling</i> est nécessaire pour optimiser les performances de nombreux modèles ML. </p><p class="paragraph" style="text-align:left;">Mais bien que l&#39;importance de ces techniques soit claire et reconnue, je vois souvent des personnes les interpréter à tort comme des solutions pour éliminer l&#39;asymétrie (<i>skewness</i>).</p><p class="paragraph" style="text-align:left;"><b>Contrairement à cette croyance populaire, la mise à l’échelle (scaling) et la standardisation ne modifient JAMAIS la distribution sous-jacente. </b></p><p class="paragraph" style="text-align:left;">Ils se contentent d&#39;altérer la plage des valeurs.</p><p class="paragraph" style="text-align:left;">Ainsi, après un <i>scaling</i> (ou une standardisation) :</p><ul><li><p class="paragraph" style="text-align:left;">Une distribution normale → <b>reste normale</b></p></li><li><p class="paragraph" style="text-align:left;">Une distribution uniforme → <b>reste uniforme</b></p></li><li><p class="paragraph" style="text-align:left;">Une distribution asymétrique (<i>skewed</i>) → <b>reste asymétrique</b></p></li><li><p class="paragraph" style="text-align:left;">...et ainsi de suite.</p></li></ul><p class="paragraph" style="text-align:left;">Nous pouvons d&#39;ailleurs le vérifier avec les deux illustrations ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3e7874b2-ff0f-4df3-8db0-4f39dae4103f/_299_-_Distribution_Standardise%CC%81e.png?t=1776027888"/></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6fc9bd7a-8afc-45d2-b713-2ad5df74c6f8/_299_-_Diffe%CC%81rentes_distributions_avant___apre%CC%80s_Standardisation.png.png?t=1776027940"/></div><p class="paragraph" style="text-align:left;">Il est clair que la mise à l&#39;échelle et la standardisation n&#39;ont aucun effet sur la forme de la distribution. </p><p class="paragraph" style="text-align:left;"><b>Rappelle-toi donc toujours de ceci : si ton objectif est de corriger l&#39;asymétrie (</b><b><i>skewness</i></b><b>), le </b><b><i>scaling</i></b><b> ou la standardisation ne t’aideront jamais.</b></p><p class="paragraph" style="text-align:left;">Essaye plutôt les transformations de variables (<i>feature transformations</i>). </p><p class="paragraph" style="text-align:left;">Il en existe beaucoup, mais les plus couramment utilisées sont :</p><ul><li><p class="paragraph" style="text-align:left;">La transformation logarithmique (<i>Log transform</i>)</p></li><li><p class="paragraph" style="text-align:left;">La transformation racine carrée (<i>Sqrt transform</i>)</p></li><li><p class="paragraph" style="text-align:left;">La transformation de Box-Cox</p></li></ul><p class="paragraph" style="text-align:left;">Leur efficacité est évidente sur l&#39;image ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/43449ca4-db93-4509-8416-c97cb170dde7/_299_-_Transformation_de_variables.png?t=1776027983"/></div><p class="paragraph" style="text-align:left;">Comme on le voit ici, l&#39;application de ces opérations transforme les données asymétriques en une variable (plus ou moins) normalement distribuée.</p><p class="paragraph" style="text-align:left;">Avant de conclure, note que bien que la transformation logarithmique soit couramment utilisée pour éliminer l&#39;asymétrie, <b>ce n&#39;est pas toujours la solution idéale</b>. </p><p class="paragraph" style="text-align:left;">Nous avons couvert ce sujet en détail ici : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/transformation-logarithmique?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=le-plus-grand-mythe-sur-le-feature-scaling" target="_blank"><div class="embed__content"><p class="embed__title"> 4 mythes sur la transformation logarithmique en Data Science </p><p class="embed__description"> Découvre les limites de la transformation logarithmique : quand et pourquoi elle ne corrige pas toujours l&#39;asymétrie des données en statistiques. </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/082f43e5-8f6d-47b3-a1f3-7c081aef6abd/_208-ide%CC%81e-fausse-_transformation-logarithmique.png?t=1752275958"/></a></div><p class="paragraph" style="text-align:left;">Et si tu te demandes pourquoi nous avons converti ces données asymétriques en une distribution normale, et quel en était le but, jette un œil à ce shot data : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/tester-normalite-distribution-11-methodes?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=le-plus-grand-mythe-sur-le-feature-scaling" target="_blank"><img class="embed__image embed__image--left" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/ad2a28e2-6ec3-45d1-bedc-1c3ccbb7f28c/_273_-_11_manie%CC%80res_de_tester_la_normalite%CC%81_d_une_distribution_de_donne%CC%81es.png?t=1768494442"/><div class="embed__content"><p class="embed__title"> 11 méthodes pour tester la normalité d’une distribution </p><p class="embed__description"> Découvre les 11 méthodes essentielles pour tester la normalité d&#39;une distribution en data science, des techniques visuelles aux tests statistiques. </p></div></a></div><hr class="content_break"><p class="paragraph" style="text-align:left;"><b>👉 À toi de jouer : </b>Quelles autres méthodes connais-tu pour éliminer l&#39;asymétrie (<i>skewness</i>) ?</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=5d9fc80f-ef32-45d0-9e24-2fcc006bcce8&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Comprendre le rôle des couches cachées dans un réseau de neurones</title>
  <description>🎯 Shot #298 - Un guide intuitif pour comprendre comment le Deep Learning transforme tes données pour gérer la non-linéarité.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/4be0cb43-bc85-45f7-b695-60a008a944ca/_298_-_Que_se_passe-t-il_exactement_ici__.png" length="29032" type="image/png"/>
  <link>https://www.monshotdata.com/p/comprendre-couches-cachees-deep-learning</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/comprendre-couches-cachees-deep-learning</guid>
  <pubDate>Fri, 10 Apr 2026 09:00:00 +0000</pubDate>
  <atom:published>2026-04-10T09:00:00Z</atom:published>
    <category><![CDATA[Deep Learning]]></category>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Machine Learning]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Tout le monde connaît le rôle d&#39;une fonction d&#39;activation dans un réseau de neurones : elle permet au modèle d&#39;apprendre des relations non linéaires. </p><p class="paragraph" style="text-align:left;">Rien de nouveau jusque-là, et je suis sûr que tu le savais déjà.</p><p class="paragraph" style="text-align:left;">Cependant, j&#39;ai souvent remarqué que beaucoup de personnes ont du mal à se représenter intuitivement ce qu&#39;un réseau de neurones essaie <i>réellement</i> d&#39;accomplir lors de ses transformations, couche après couche.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/945cb999-3f40-44da-86c1-4cb77b25c2a3/_298_-_se_repre%CC%81senter_intuitivement_ce_qu_un_re%CC%81seau_de_neurones.png?t=1775254414"/></div><p class="paragraph" style="text-align:left;">Aujourd&#39;hui, laisse-moi te partager une perspective unique qui t’aidera vraiment à visualiser le fonctionnement interne d&#39;un réseau de neurones. </p><p class="paragraph" style="text-align:left;">Pour plus de clarté, nous prendrons l&#39;exemple d&#39;un cas de classification binaire.</p><p class="paragraph" style="text-align:left;">C&#39;est parti !</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="le-fonctionnement-de-base">Le fonctionnement de base</h2><p class="paragraph" style="text-align:left;">Dans un réseau de neurones, les données ne sont jamais utilisées telles quelles : elles sont progressivement transformées à chaque couche cachée.</p><p class="paragraph" style="text-align:left;">Concrètement, chaque couche applique toujours la même séquence d’opérations : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/cb5b6455-400a-4118-94cc-1b7093c2aa4b/_298_-_Chaque_couche_applique_toujours_la_me%CC%82me_se%CC%81quence_d_ope%CC%81rations.png.png?t=1775254499"/></div><ul><li><p class="paragraph" style="text-align:left;">une transformation linéaire des données issues de la couche précédente </p></li><li><p class="paragraph" style="text-align:left;">suivie d’une transformation non linéaire via une fonction d’activation (ReLU, sigmoïde, tanh, etc.)</p></li></ul><p class="paragraph" style="text-align:left;">Ces étapes sont répétées sur <i>chaque</i> couche cachée du réseau. </p><p class="paragraph" style="text-align:left;">Mais il y a un point essentiel à bien comprendre.</p><p class="paragraph" style="text-align:left;">Imaginons que les données viennent de traverser la <b>toute dernière couche cachée</b>. </p><p class="paragraph" style="text-align:left;">À partir de là, elles sont envoyées vers la couche de sortie pour une dernière transformation… qui, elle, est <b>entièrement linéaire</b>.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/7ed09937-0302-4f68-a7a0-cd454a1caa9b/_298_-_Couche_de_sortie_pour_une_dernie%CC%80re_transformation.png?t=1775254571"/></div><p class="paragraph" style="text-align:left;"><b>Cette dernière étape est 100% linéaire car toutes les sources de non-linéarité (les fonctions d&#39;activation) se trouvent </b><b><i>au niveau</i></b><b> de la dernière couche cachée, ou avant.</b></p><p class="paragraph" style="text-align:left;">Ainsi, lors de la passe avant (<i>forward pass</i>), une fois que les données quittent la dernière couche cachée, il n&#39;y a plus aucune place pour la non-linéarité.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ac9845f0-dc65-4e76-bfbf-9c5a77de82ce/_298_-_Plus_aucune_place_pour_la_non-line%CC%81arite%CC%81.png?t=1775254628"/></div><p class="paragraph" style="text-align:left;">Par conséquent, pour pouvoir générer des prédictions précises, les données reçues par la couche de sortie DOIVENT ÊTRE linéairement séparables.</p><p id="lide-cl-retenir" class="paragraph" style="text-align:left;">L’idée clé à retenir…</p><p class="paragraph" style="text-align:left;">En transformant les données à travers toutes ses couches cachées, et juste avant d&#39;atteindre la couche de sortie, <b>le but ultime d&#39;un réseau de neurones est de projeter les données dans un espace où elles deviennent linéairement séparables</b>.</p><p class="paragraph" style="text-align:left;">Si cet objectif est atteint, alors la couche de sortie peut faire son travail très facilement — un peu comme une simple régression logistique qui trace une frontière de décision.</p><p class="paragraph" style="text-align:left;">On peut même observer ce phénomène en pratique. </p><p class="paragraph" style="text-align:left;">Pour cela, on ajoute une couche cachée “factice” avec seulement deux neurones <b>juste avant la sortie</b>, puis on entraîne le réseau.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ff2d92e5-ef12-4f3f-8855-62ae0d3eb7db/_298_-_Ajouter_une_couche_cache%CC%81e_fictive_avec_deux_neurones.png?t=1775254707"/></div><p class="paragraph" style="text-align:left;">Pourquoi une couche avec seulement deux neurones ? </p><p class="paragraph" style="text-align:left;">Parce que cela nous permet de visualiser les activations en 2D ! </p><p class="paragraph" style="text-align:left;">Si tout se passe comme prévu, les activations de cette couche devraient être linéairement séparables.</p><p class="paragraph" style="text-align:left;">C&#39;est exactement ce que montre le visuel ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/379d5f7d-50cd-4426-a2d9-97be677c5128/_298_-_Les_activations_de_cette_couche_devraient_e%CC%82tre_line%CC%81airement_se%CC%81parables.png?t=1775254786"/></div><p class="paragraph" style="text-align:left;">Comme on peut le voir, bien que les données d&#39;entrée d&#39;origine n&#39;étaient <i>pas</i> linéairement séparables (à gauche), les données transformées et reçues par la couche de sortie le sont bel et bien (à droite). </p><p class="paragraph" style="text-align:left;">Le réseau a donc “remodelé” l’espace des données pour simplifier au maximum le travail de la couche finale.</p><hr class="content_break"><p class="paragraph" style="text-align:left;"><b>En résumé…</b></p><p class="paragraph" style="text-align:left;">Un réseau de neurones ne fait rien de magique : il apprend simplement à <b>tordre et transformer l’espace des données</b> jusqu’à ce qu’une séparation linéaire devienne possible juste avant la sortie.</p><hr class="content_break"><p class="paragraph" style="text-align:left;"><b>👉 À toi de jouer :</b> ici, on parlait de classification binaire. À ton avis, dans un problème de régression, que cherche à faire le réseau avec les données juste avant la couche de sortie ?</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=0317ddb5-859a-4dbb-a83e-58b632c5d655&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Calibration des modèles ML (Partie 1) : tes réseaux de neurones sont-ils trop sûrs d&#39;eux ?</title>
  <description>👀​ Mini-cours #27 - Comprendre le paradoxe des modèles modernes : plus ils sont grands, plus ils se trompent avec certitude. Découverte des métriques et des causes de la mauvaise calibration.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/db4acbd6-73c1-42eb-ae80-43ee71bc6b4c/Mini-cours__27_-_Couverture_MCE.png" length="86190" type="image/png"/>
  <link>https://www.monshotdata.com/p/calibration-modeles-machine-learning</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/calibration-modeles-machine-learning</guid>
  <pubDate>Thu, 09 Apr 2026 09:30:00 +0000</pubDate>
  <atom:published>2026-04-09T09:30:00Z</atom:published>
    <category><![CDATA[Deep Learning]]></category>
    <category><![CDATA[Machine Learning]]></category>
    <category><![CDATA[Pro]]></category>
    <category><![CDATA[Fiabilité Et Transparence Des Prédictions]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:#f2eafe;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:2.0px 2.0px 2.0px 2.0px;"><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><b>Psst... Contenu Exclusif Réservé aux Membres !</b></span><br><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Ce mini-cours fait partie de notre espace premium. Rejoins dès maintenant le </span><b>Cercle des Experts</b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> pour débloquer l’intégralité de nos ressources, analyses approfondies et guides pratiques.</span><br><b>👉 </b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Clique ici pour découvrir les avantages et t’inscrire : </span><b><a class="link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-1-tes-reseaux-de-neurones-sont-ils-trop-surs-d-eux" target="_blank" rel="noopener noreferrer nofollow" style="color: rgb(37, 99, 235)">Page d’adhésion</a></b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">.</span></p></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><p class="paragraph" style="text-align:left;"><span style="color:rgb(34, 34, 34);font-family:Poppins, Helvetica, sans-serif, serif, EmojiFont;font-size:16px;">⏱️ </span><i><b>Temps de lecture</b></i><i> : environ 20 minutes</i></p></div><div class="section" style="background-color:#F1F7EF;border-color:#222222;border-radius:5px;border-style:dotted;border-width:1px;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><h2 class="heading" style="text-align:left;">Au programme :</h2><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#le-problme" rel="noopener noreferrer nofollow">Le problème</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#pourquoi-la-calibration-estelle-imp" rel="noopener noreferrer nofollow">Pourquoi la calibration est-elle importante ?</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dfinir-la-calibration" rel="noopener noreferrer nofollow">Définir la calibration</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#les-diagrammes-de-fiabilit" rel="noopener noreferrer nofollow">Les diagrammes de fiabilité</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#l-erreur-de-calibration-attendue-ex" rel="noopener noreferrer nofollow">L&#39;Erreur de Calibration Attendue (Expected Calibra …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#l-erreur-de-calibration-maximale-ma" rel="noopener noreferrer nofollow">L&#39;Erreur de Calibration Maximale (Maximum Calibrat …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dmo-calcul-de-l-ece" rel="noopener noreferrer nofollow">Démo : Calcul de l&#39;ECE</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#comment-la-mauvaise-calibration-ate" rel="noopener noreferrer nofollow">Comment la mauvaise calibration a-t-elle évolué ?</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#1-la-taille-des-modles" rel="noopener noreferrer nofollow">#1) La taille des modèles </a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#2-la-normalisation-par-lots" rel="noopener noreferrer nofollow">#2) La normalisation par lots</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#3-la-rgularisation-l-2" rel="noopener noreferrer nofollow">#3) La régularisation L2 </a></p></li></ul></li></ul></div><h2 class="heading" style="text-align:left;" id="le-problme">Le problème</h2><p class="paragraph" style="text-align:left;">Les architectures de réseaux de neurones que nous concevons aujourd&#39;hui sont indéniablement beaucoup plus précises qu&#39;elles ne l&#39;ont jamais été dans toute leur histoire.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d52fc673-a1d1-4258-bda4-0b485ef7bebd/Mini-cours__27_-_Architecture_re%CC%81seaux_de_neurones.png.png?t=1775718154"/></div><p class="paragraph" style="text-align:left;">Cependant, de nombreuses expériences ont révélé que les réseaux de neurones modernes ne sont plus bien calibrés.</p><p class="paragraph" style="text-align:left;">Pour faire simple, un modèle est parfaitement calibré si les probabilités de prédiction correspondent étroitement aux résultats réels. Si un modèle prédit un événement avec une probabilité de 70 %, alors idéalement, sur 100 prédictions de ce type, l&#39;événement devrait se produire environ 70 fois.</p><p class="paragraph" style="text-align:left;">Par exemple, supposons que sur plusieurs jours (consécutifs ou non), un modèle ait prédit 50 % de chances de pluie. Pour mesurer si ces prédictions sont bien calibrées, il faudrait calculer à quelle fréquence il a <i>réellement</i> plu. </p><p class="paragraph" style="text-align:left;">Si, sur le long terme, il a effectivement plu environ 50 % du temps, cela signifie que les prédictions (ou prévisions) du modèle étaient bien calibrées. En revanche, s&#39;il n&#39;a plu que 25 % ou, disons, 70 % du temps, le modèle était mal calibré.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/42dd7283-a737-4628-91d3-3a8c29653fae/Mini-cours__27_-_Mode%CC%80le_de_pre%CC%81vision_me%CC%81te%CC%81o_calibre%CC%81.png.png?t=1775718182"/></div><p class="paragraph" style="text-align:left;">Bien que la calibration semble être une propriété évidente, et peut-être même triviale, que tous les réseaux devraient implicitement posséder, de nombreuses études ont montré que les réseaux de neurones modernes semblent avoir perdu cette capacité. Par conséquent, ils ont tendance à être trop confiants (sur-confiants) dans leurs prédictions.</p><p class="paragraph" style="text-align:left;">Par exemple, observons le graphique suivant, qui compare un modèle LeNet (développé en 1998) avec un modèle ResNet (développé en 2016) sur le jeu de données CIFAR-100.</p><div class="image"><img alt="Sur ce graphique, la confiance (confidence) moyenne est déterminée en utilisant l&#39;étiquette (label) ayant la probabilité softmax la plus élevée, sur l&#39;ensemble des échantillons du dataset." class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a50eeded-9a25-471a-82a7-f3ab20122419/Mini-cours__27_-_Comparaison_des_mode%CC%80les_LeNet_et_ResNet.png.png?t=1775722115"/><div class="image__source"><span class="image__source_text"><p><i>Sur ce graphique, la confiance (confidence) moyenne est déterminée en utilisant l&#39;étiquette (label) ayant la probabilité softmax la plus élevée, sur l&#39;ensemble des échantillons du dataset</i></p></span></div></div><p class="paragraph" style="text-align:left;">D&#39;après le graphique ci-dessus, il est clair que :</p><ul><li><p class="paragraph" style="text-align:left;">La confiance moyenne de LeNet (l&#39;ancien modèle) correspond étroitement à son exactitude (<i>accuracy</i>).</p></li><li><p class="paragraph" style="text-align:left;">À l&#39;inverse, la confiance moyenne du ResNet (le modèle plus moderne) est nettement supérieure à son exactitude.</p></li></ul><p class="paragraph" style="text-align:left;">Ainsi, nous pouvons constater que le modèle LeNet est bien calibré, car sa confiance s&#39;aligne presque parfaitement sur l&#39;exactitude attendue. En revanche, bien que l&#39;exactitude du ResNet soit meilleure (0,7 &gt; 0,5), celle-ci ne correspond pas du tout à son niveau de confiance.</p><p class="paragraph" style="text-align:left;">Autrement dit, cela signifie que le modèle ResNet, bien qu&#39;il soit globalement plus performant, est trop confiant dans ses prédictions. Alors que la confiance moyenne de LeNet s&#39;aligne bien sur ses performances réelles (indiquant une bonne calibration), la confiance excessive de ResNet montre qu&#39;il prédit souvent des résultats avec une certitude bien plus grande que ce qui est justifié.</p><h2 class="heading" style="text-align:left;" id="pourquoi-la-calibration-estelle-imp">Pourquoi la calibration est-elle importante ?</h2><p class="paragraph" style="text-align:left;">Une question qui revient souvent à ce stade est la suivante : </p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">La motivation est assez similaire à celle que nous avons abordée dans notre exploration approfondie sur la prédiction conforme, disponible ici : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/prediction-conforme-maitriser-incertitude-ml?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-1-tes-reseaux-de-neurones-sont-ils-trop-surs-d-eux" target="_blank"><div class="embed__content"><p class="embed__title"> Maîtriser l&#39;incertitude en Machine Learning avec la Prédiction Conforme </p><p class="embed__description"> Maîtrise l&#39;incertitude en Machine Learning avec la Prédiction Conforme : construis des intervalles de confiance robustes et déploie tes modèles en toute sécurité. </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/4715afb7-fc90-406a-b369-fb6f2901546a/Mini-cours__26_-_Mai%CC%82triser_l_incertitude_en_Machine_Learning_avec_la_Pre%CC%81diction_Conforme.png.png?t=1775049292"/></a></div><p class="paragraph" style="text-align:left;">Faire aveuglément confiance aux prédictions d&#39;un modèle ML peut parfois être fatal, surtout dans des environnements à enjeux élevés où les décisions fondées sur ces algorithmes peuvent affecter des vies humaines, la stabilité financière ou des infrastructures critiques.</p><p class="paragraph" style="text-align:left;">Bien qu&#39;une précision de &quot;95 %&quot; soit excellente sur le papier, le modèle ne te dira jamais quelles sont les 5 % de prédictions incorrectes lorsqu&#39;il sera utilisé en production sur de nouvelles tâches. </p><p class="paragraph" style="text-align:left;">En d&#39;autres termes, bien que nous sachions que les prédictions du modèle sont globalement correctes un certain pourcentage du temps, le modèle ne peut généralement pas nous dire grand-chose sur la fiabilité d&#39;une prédiction <i>spécifique</i>.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d29fda86-b18c-47f7-9848-3f70baa2798a/Mini-cours__27_-_Pre%CC%81dictions_mode%CC%80le.png.png?t=1775720248"/></div><p class="paragraph" style="text-align:left;">Par conséquent, dans des situations à haut risque comme les diagnostics médicaux, faire aveuglément confiance à chaque prédiction peut avoir de graves conséquences.</p><p class="paragraph" style="text-align:left;">Pour atténuer ces risques, il est donc essentiel de ne pas s&#39;appuyer uniquement sur la prédiction brute, mais aussi de comprendre et de quantifier l&#39;incertitude qui y est associée.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/4bd55f66-af21-4c3c-9f78-516eeef12f01/Mini-cours__27_-_Quantification_certitude.png?t=1775720312"/></div><p class="paragraph" style="text-align:left;">Mais étant donné que les modèles modernes se révèlent souvent trop confiants dans leurs prédictions (comme nous l&#39;avons vu plus haut), il est crucial de s&#39;assurer que notre modèle ne fait pas partie du lot. </p><p class="paragraph" style="text-align:left;">Une telle sur-confiance pose problème, particulièrement dans les applications où les probabilités prédites sont utilisées pour prendre des décisions critiques.</p><p class="paragraph" style="text-align:left;">Reprenons l&#39;exemple du diagnostic médical automatisé. Dans un tel cas, le contrôle devrait être transféré à des médecins humains lorsque la confiance d&#39;un réseau diagnostiquant une maladie est jugée trop faible. </p><p class="paragraph" style="text-align:left;">Plus précisément, un réseau devrait fournir une mesure de confiance calibrée en plus de sa prédiction. Autrement dit, la probabilité associée à la classe prédite devrait refléter sa probabilité réelle d&#39;être correcte.</p><p class="paragraph" style="text-align:left;">Et il ne s&#39;agit pas seulement de communiquer la véritable confiance. Des estimations de confiance calibrées sont également cruciales pour l&#39;interprétabilité du modèle. </p><p class="paragraph" style="text-align:left;">Les humains ont une intuition cognitive naturelle face aux probabilités. De bonnes estimations de confiance fournissent une information supplémentaire précieuse pour instaurer un climat de confiance avec l&#39;utilisateur – particulièrement avec les réseaux de neurones, dont les décisions de classification sont souvent difficiles à interpréter.</p><p class="paragraph" style="text-align:left;">Si nous n&#39;avons aucun moyen de véritablement comprendre la confiance d&#39;un modèle, alors une prédiction exacte et une simple supposition aléatoire peuvent sembler identiques.</p><div class="section" style="background-color:#f4e9fb;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">💡 <i>Ceci est particulièrement important à l&#39;ère actuelle où le ML se démocratise de plus en plus. Tout le monde n&#39;est pas en mesure d&#39;inspecter l&#39;intérieur des modèles ML (médecins, professionnels de la finance, etc.). Fournir un moyen clair et accessible pour les profanes de communiquer le risque lié à une prédiction est donc primordial.</i></p></div><p class="paragraph" style="text-align:left;">Enfin, dans de nombreux systèmes complexes, les modèles de machine learning dépendent les uns des autres et interagissent entre eux. Des classifieurs individuels servent souvent de données d&#39;entrée (<i>inputs</i>) à des systèmes plus vastes qui prennent les décisions finales. </p><p class="paragraph" style="text-align:left;">Si les modèles sont calibrés, cela simplifie considérablement ces interactions. La calibration permet à chaque modèle de se concentrer sur l&#39;estimation la plus précise possible de ses propres probabilités. Et comme l&#39;interprétation reste stable, les autres composants du système n&#39;ont pas besoin d&#39;être modifiés à chaque fois que les modèles changent.</p><hr class="content_break"><p class="paragraph" style="text-align:left;">En aparté, la calibration de modèle peut également fonctionner au niveau <b>conditionnel</b>. Par exemple, dans notre précédent cas de prévisions météorologiques, nous n&#39;avons mesuré la calibration qu&#39;en fonction de la probabilité prédite par le modèle et de la confirmation (ou non) de cette probabilité sur le long terme dans la réalité. C&#39;est ce qui est illustré ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/42dd7283-a737-4628-91d3-3a8c29653fae/Mini-cours__27_-_Mode%CC%80le_de_pre%CC%81vision_me%CC%81te%CC%81o_calibre%CC%81.png.png?t=1775718182"/></div><p class="paragraph" style="text-align:left;">Cependant, un modèle calibré pourrait aussi impliquer des probabilités conditionnelles.</p><p class="paragraph" style="text-align:left;">Autrement dit, alors que le modèle ci-dessus prédisait la pluie pour un jour précis de manière isolée, il est logique de s&#39;attendre à ce que la probabilité de pluie soit généralement plus élevée s&#39;il a également plu la veille. </p><p class="paragraph" style="text-align:left;">Ainsi, un modèle qui prend en compte la météo de la veille et prédit <code>Pr(Pluie|Pluie_Hier = 1 ) = 0.7</code> et <code>Pr(Pluie|Pluie_Hier = 0 ) = 0.3</code> peut être un modèle parfaitement calibré (et bien plus utile), à condition que ces probabilités correspondent aux observations réelles.</p><hr class="content_break"><p class="paragraph" style="text-align:left;">Revenons à notre sujet... </p><p class="paragraph" style="text-align:left;">L&#39;objectif de ce mini-cours en deux parties est multiple :</p><ol start="1"><li><p class="paragraph" style="text-align:left;">Comprendre pourquoi les réseaux de neurones actuels sont devenus plus mal calibrés que ceux produits il y a des années.</p></li><li><p class="paragraph" style="text-align:left;">Formuler le concept exact de la mauvaise calibration (dé-calibration) des modèles.</p></li><li><p class="paragraph" style="text-align:left;">Définir des techniques pour mesurer l&#39;étendue de cette mauvaise calibration.</p></li><li><p class="paragraph" style="text-align:left;">Découvrir les méthodes qui peuvent nous aider à la réduire, voire à l&#39;éliminer.</p></li><li><p class="paragraph" style="text-align:left;">Et bien plus encore.</p></li></ol><p class="paragraph" style="text-align:left;">En plus de cela, nous partagerons également quelques perspectives et intuitions sur les techniques d&#39;entraînement et les architectures qui peuvent être à l&#39;origine de ce défaut de calibration.</p><h2 class="heading" style="text-align:left;" id="dfinir-la-calibration">Définir la calibration</h2><p class="paragraph" style="text-align:left;">Avant toute chose, définissons la calibration en termes mathématiques simples. </p><p class="paragraph" style="text-align:left;">Pour commencer, considérons une tâche de classification multiclasse supervisée :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/4c5a8548-7b5e-4efc-8122-86269adad844/Mini-cours__27_-_Sortie_multi-classe.png.png?t=1775720438"/></div><p class="paragraph" style="text-align:left;">Ceci est modélisé à l&#39;aide d&#39;un réseau de neurones qui produit la probabilité que la sortie soit correcte (il ne s&#39;agit pas de vraies probabilités, mais de probabilités estimées par le modèle) :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c55f61f1-9601-4709-b3d8-d629411c811b/Mini-cours__27_-_Re%CC%81seau_de_neurones.png.png?t=1775720530"/></div><ul><li><p class="paragraph" style="text-align:left;"><code>Ŷ</code> est la classe prédite.</p></li><li><p class="paragraph" style="text-align:left;"><code>P̂</code> est la confiance correspondante (via la fonction softmax).</p></li></ul><p class="paragraph" style="text-align:left;">Le but, comme discuté précédemment, est de s&#39;assurer que l&#39;estimation de confiance <code>P̂</code> est calibrée, ce qui signifie que <code>P̂</code> représente une probabilité réelle de l&#39;événement.</p><p class="paragraph" style="text-align:left;">En d&#39;autres termes, si le modèle a prédit <code>P̂ = 0,75</code> sur 100 prédictions, on s&#39;attend à ce qu&#39;environ 75 de ces prédictions soient correctement classifiées. </p><p class="paragraph" style="text-align:left;">Ainsi, nous pouvons définir une calibration parfaite de la manière suivante :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/925f0f8a-18e6-4ade-99a5-b0116a056a55/Mini-cours__27_-_e%CC%81quation_calibration_parfaite.png?t=1775720586"/></div><p class="paragraph" style="text-align:left;">Cette définition signifie que pour un modèle parfaitement calibré, la probabilité que l&#39;étiquette prédite <code>Ŷ</code> corresponde à la vraie étiquette <code>Y</code>, sachant que la probabilité prédite par le modèle est <code>p</code>, doit être exactement égale à <code>p</code>.</p><p class="paragraph" style="text-align:left;">En d&#39;autres termes, la probabilité prédite <code>p</code> doit correspondre directement à la fréquence réelle des prédictions correctes. Si le modèle prédit 75 % de chances qu&#39;un événement se produise, celui-ci devrait effectivement se produire 75 % du temps sur le long terme.</p><p class="paragraph" style="text-align:left;">Ce concept peut être visualisé à l&#39;aide de <b>diagrammes de fiabilité</b> ou <b>de graphiques de calibration</b>.</p><h3 class="heading" style="text-align:left;" id="les-diagrammes-de-fiabilit">Les diagrammes de fiabilité</h3><p class="paragraph" style="text-align:left;">Les diagrammes de fiabilité sont un moyen visuel d&#39;inspecter le niveau de calibration actuel d&#39;un modèle. Plus précisément, ce diagramme trace l&#39;exactitude (<i>accuracy</i>) attendue de l&#39;échantillon en fonction de la valeur de confiance correspondante (softmax) produite par le modèle.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/88327496-8dba-4977-bccf-02c4dec89163/Mini-cours__27_-_Diagramme_de_fiabilite%CC%81.png.png?t=1775720708"/></div><p class="paragraph" style="text-align:left;">Si le modèle est parfaitement calibré, le diagramme devrait tracer la fonction identité (une diagonale parfaite), comme illustré ci-dessus. </p><p class="paragraph" style="text-align:left;">Tout écart par rapport à cette diagonale parfaite représente un défaut de calibration, comme illustré ci-dessous : </p><div class="paywall"><hr class="paywall__break"/><div class="paywall__content"><h2 class="paywall__header"> La suite de ce mini-cours est réservée aux membres du Cercle des Experts. </h2><p class="paywall__description"> Tu as déjà le début. Pour accéder à l’explication complète et à tous les contenus avancés, rejoins le Cercle des Experts dès maintenant. </p><p class="paywall__links"><a class="paywall__upgrade_link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-1-tes-reseaux-de-neurones-sont-ils-trop-surs-d-eux">Rejoindre le Cercle des Experts</a> Translation missing: en.app.shared.conjuction.or <a class="paywall__login_link" href="https://www.monshotdata.com/login?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=calibration-des-modeles-ml-partie-1-tes-reseaux-de-neurones-sont-ils-trop-surs-d-eux">Sign In</a></p><div class="paywall__upsell"><div class="paywall__upsell_header"><h3> En devenant membre, tu débloques </h3></div><ul class="paywall__upsell_features"><li class="paywall__upsell_feature"> L’intégralité de ce mini-cours (sans coupure) </li><li class="paywall__upsell_feature"> Tous les mini-cours archivés et les ressources associées </li><li class="paywall__upsell_feature"> 1 nouveau mini-cours chaque semaine pour progresser en continu </li></ul></div></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=b673dbb5-e248-4c70-9019-1c8b92cec28f&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Discrétisation des variables : Une technique sous-estimée pour améliorer tes modèles</title>
  <description>🎯 Shot #297 - Comment transformer des variables continues en catégories pour capturer des relations non linéaires ?</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/30740385-2e63-4c02-8dbd-3c3dda101aa2/_297_-_Sans_vs_Avec_Discre%CC%81tisation_de_variables.png.png" length="880318" type="image/png"/>
  <link>https://www.monshotdata.com/p/discretisation-variables-machine-learning</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/discretisation-variables-machine-learning</guid>
  <pubDate>Mon, 06 Apr 2026 09:00:00 +0000</pubDate>
  <atom:published>2026-04-06T09:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Machine Learning]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Lors du développement d&#39;un modèle, l&#39;une des techniques que beaucoup n&#39;expérimentent pas est la discrétisation des variables (ou <i>feature discretization</i>). Comme son nom l&#39;indique, l&#39;idée est de transformer une variable continue en plusieurs variables discrètes.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8a7c3f33-33db-4ac1-8775-5e490150a154/_297_-_Discre%CC%81tisation_des_variables.png?t=1775222112"/></div><p class="paragraph" style="text-align:left;">Pourquoi, quand et comment ferait-on cela ? </p><p class="paragraph" style="text-align:left;">C&#39;est ce que nous allons voir aujourd&#39;hui.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="pourquoi-utiliser-la-discrtisation">Pourquoi utiliser la discrétisation ?</h2><p class="paragraph" style="text-align:left;">Ma logique pour utiliser la discrétisation a presque toujours été très simple : <i>&quot;</i><b><i>Il est tout simplement plus logique de discrétiser cette variable.</i></b><i>&quot;</i></p><p class="paragraph" style="text-align:left;">Par exemple, supposons que ton dataset contienne une variable représentant l&#39;âge :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/279b8f7a-9b02-476c-a440-8ac2abeae6d6/_297_-_equation1.png.png?t=1775222376"/></div><p class="paragraph" style="text-align:left;">Dans de nombreux cas d&#39;usage, comme l&#39;analyse des comportements de dépense basés sur l&#39;historique des transactions, ces variables continues sont bien plus faciles à interpréter lorsqu&#39;elles sont découpées en groupes significatifs → les jeunes, les adultes et les seniors.</p><p class="paragraph" style="text-align:left;">Imaginons que nous modélisions ce jeu de données de transactions <i>sans</i> discrétisation.</p><p class="paragraph" style="text-align:left;">Cela produirait des coefficients pour chaque variable, nous indiquant l&#39;influence de chacune sur la prédiction finale.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3e19e357-822b-4d9c-a687-028dc1272b1c/_297_-_equation2.png.png?t=1775222367"/></div><p class="paragraph" style="text-align:left;">Mais en y repensant, dans notre objectif de comprendre les habitudes de dépense, <b>sommes-nous vraiment intéressés par la corrélation entre l&#39;âge </b><i><b>exact</b></i><b> et la dépense ?</b> </p><p class="paragraph" style="text-align:left;">Cela n&#39;a pas beaucoup de sens.</p><p class="paragraph" style="text-align:left;">Il est bien plus pertinent d&#39;apprendre la corrélation entre différents <i>groupes d&#39;âge</i> et les dépenses. </p><p class="paragraph" style="text-align:left;">Par conséquent, discrétiser la variable d&#39;âge peut potentiellement révéler des insights bien plus précieux que de l&#39;utiliser à l&#39;état brut.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="les-2-techniques-de-discrtisation-l">Les 2 techniques de discrétisation les plus courantes</h2><p class="paragraph" style="text-align:left;">Maintenant que nous comprenons le principe, il existe 2 techniques qui sont largement privilégiées.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8a7c3f33-33db-4ac1-8775-5e490150a154/_297_-_Discre%CC%81tisation_des_variables.png?t=1775222117"/></div><p class="paragraph" style="text-align:left;">La première méthode consiste à découper la variable en intervalles de taille égale (<i>binning</i>).</p><div class="image"><img alt="Tous les intervalles (bins) ont la même largeur." class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/02c6a841-a4dc-4ed2-9acf-8842a532cd12/_297_-_Tous_les_intervalles_ont_la_me%CC%82me_largeur.png?t=1775222209"/><div class="image__source"><span class="image__source_text"><p><i>Tous les intervalles (bins) ont la même largeur</i></p></span></div></div><p class="paragraph" style="text-align:left;">Une autre technique consiste à découper la variable <b>en intervalles à fréquence égale</b> (contenant le même nombre d&#39;observations) : </p><div class="image"><img alt="La largeur de chaque intervalle peut être différente dans ce cas." class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/bbfdf0b8-414c-4e2b-bd88-2c41ca9b50df/_297_-_La_largeur_de_chaque_intervalle_peut_e%CC%82tre_diffe%CC%81rente.png?t=1775222240"/><div class="image__source"><span class="image__source_text"><p><i>La largeur de chaque intervalle peut être différente dans ce cas</i></p></span></div></div><p class="paragraph" style="text-align:left;">Ensuite, ces valeurs discrètes sont encodées en <i>one-hot</i> (encodage disjonctif complet).</p><p class="paragraph" style="text-align:left;"><b>L&#39;un des grands avantages de la discrétisation est qu&#39;elle permet d&#39;introduire un comportement non linéaire, même si le modèle sous-jacent est linéaire. </b></p><p class="paragraph" style="text-align:left;">Cela peut potentiellement conduire à une meilleure précision, comme le montre l&#39;image ci-dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/30740385-2e63-4c02-8dbd-3c3dda101aa2/_297_-_Sans_vs_Avec_Discre%CC%81tisation_de_variables.png.png?t=1775222358"/></div><p class="paragraph" style="text-align:left;">Un modèle linéaire couplé à la discrétisation des variables produit :</p><ul><li><p class="paragraph" style="text-align:left;">une frontière de décision non linéaire.</p></li><li><p class="paragraph" style="text-align:left;">une meilleure précision (<i>accuracy</i>) sur l’ensemble de test.</p></li></ul><p class="paragraph" style="text-align:left;">Ainsi, d&#39;une certaine manière, nous conservons la simplicité d&#39;un modèle linéaire tout en capturant des relations plus complexes et non linéaires dans les données.</p><p class="paragraph" style="text-align:left;">Simple et efficace, non ?</p><p class="paragraph" style="text-align:left;">La discrétisation des variables continues présente aussi un autre avantage clé : elle améliore le <b>ratio signal/bruit</b>.</p><p class="paragraph" style="text-align:left;">Concrètement, le “signal” correspond à l’information réellement utile dans les données, celle qui permet de prendre de bonnes décisions. </p><p class="paragraph" style="text-align:left;">En regroupant une variable en intervalles, on réduit l’impact des petites variations souvent aléatoires — autrement dit, du bruit — pour mieux faire ressortir les tendances importantes.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/73cd3981-b9cd-4930-9212-33544d0057c2/_297_-_Donne%CC%81es_brutes_avec_du_bruit.png?t=1775222289"/></div><p class="paragraph" style="text-align:left;">Chaque intervalle agit comme un moyen de &quot;lisser&quot; le bruit au sein de segments de données spécifiques.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="le-mot-de-la-fin">Le mot de la fin</h2><p class="paragraph" style="text-align:left;">Avant de conclure, garde un point important en tête : la discrétisation, combinée au one-hot encoding, augmente le nombre de variables… et donc la dimensionnalité de tes données. </p><p class="paragraph" style="text-align:left;">Or, plus le nombre de dimensions est élevé, plus il devient facile pour un modèle de séparer les données de manière linéaire. Par conséquent, cela peut favoriser le surapprentissage (overfitting). </p><p class="paragraph" style="text-align:left;">La clé, c’est donc la modération. <b>Inutile de discrétiser toutes tes variables systématiquement.</b> </p><p class="paragraph" style="text-align:left;">Privilégie les cas où cela fait réellement sens, comme on l’a vu précédemment. </p><p class="paragraph" style="text-align:left;"><b>Dans la pratique, son intérêt dépend beaucoup du contexte.</b> Mais avec l’expérience, certains cas reviennent souvent : </p><ul><li><p class="paragraph" style="text-align:left;">Les données géospatiales (latitude, longitude), où regrouper par zones peut être très efficace.</p></li><li><p class="paragraph" style="text-align:left;">Les variables comme l’âge ou le poids, qui se prêtent naturellement à des catégories.</p></li><li><p class="paragraph" style="text-align:left;">Les variables bornées (revenus, épargne…), pour lesquelles raisonner par tranches est souvent plus pertinent que valeur brute.</p></li></ul><hr class="content_break"><p class="paragraph" style="text-align:left;">👉 <b>À toi de jouer :</b> selon toi, quels autres points de vigilance faut-il avoir en tête lorsqu’on utilise la discrétisation des variables ?</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=4914ea81-e8c6-4e7b-b844-a47f987e11e6&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Protège tes modèles en production : maîtrise l&#39;erreur de reconstruction</title>
  <description>🎯 Shot #296 - Comment détecter le Covariate Shift avant que nos performances ML ne s&#39;effondrent ? La conclusion de notre série.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a9887c0a-19a9-4a57-8215-9ae088c0d53f/_296_-_Mai%CC%82trise_l_erreur_de_reconstruction.png.png" length="291491" type="image/png"/>
  <link>https://www.monshotdata.com/p/detecter-covariate-shift-erreur-reconstruction</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/detecter-covariate-shift-erreur-reconstruction</guid>
  <pubDate>Fri, 03 Apr 2026 09:00:00 +0000</pubDate>
  <atom:published>2026-04-03T09:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Machine Learning]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Le shot data d&#39;aujourd&#39;hui est le dernier de notre série en trois parties sur la détection du <i>covariate shift</i> (décalage de covariables) multivarié. </p><p class="paragraph" style="text-align:left;">Lis les deux premières éditions ici si tu les as loupés :</p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/covariate-shift-multivarie-detection?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=protege-tes-modeles-en-production-maitrise-l-erreur-de-reconstruction" target="_blank" rel="noopener noreferrer nofollow">Partie 1 : Le Covariate Shift est bien plus problématique que la plupart des gens ne le pensent.</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/detecter-covariate-shift-multivarie-machine-learning?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=protege-tes-modeles-en-production-maitrise-l-erreur-de-reconstruction" target="_blank" rel="noopener noreferrer nofollow">Partie 2 : Comment détecter un Covariate Shift multivarié dans les modèles de Machine Learning ?</a></p></li></ul><hr class="content_break"><p class="paragraph" style="text-align:left;">La semaine dernière, nous avons abordé une technique intéressante pour détecter le <i>covariate shift</i> multivarié dans les modèles de ML. </p><p class="paragraph" style="text-align:left;">Pour rappel, l’approche repose sur la reconstruction des données : <b>on apprend une transformation qui projette les données d’entraînement dans un espace de dimension réduite, avant de tenter de reconstruire les données originales à partir de cette représentation compacte</b>.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/9ac2f002-1e83-46bd-a6b1-f74ec4c8805f/_293_-_Objectif_de_la_reconstruction.png?t=1774135682"/><div class="image__source"><span class="image__source_text"><p>La reconstruction de données vise à reconstituer les données d&#39;origine après projection</p></span></div></div><p class="paragraph" style="text-align:left;">Les autoencodeurs peuvent être utilisés ici : </p><div class="image"><img alt="Utilisation des Autoencodeurs pour la reconstruction de données" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8d5000b1-8f79-493b-96c1-84c6604f45e1/_293_-_Utilisation_des_Autoencodeurs.png?t=1774620695"/><div class="image__source"><span class="image__source_text"><p><i>Utilisation des Autoencodeurs pour la reconstruction de données</i></p></span></div></div><p class="paragraph" style="text-align:left;">Ce sont des réseaux de neurones qui apprennent à encoder des données dans un espace de dimension inférieure, puis à les décoder pour retrouver les données d&#39;origine.</p><h2 class="heading" style="text-align:left;" id="comment-utiliser-ce-modle-pour-dtec">Comment utiliser ce modèle pour détecter un covariate shift ?</h2><p class="paragraph" style="text-align:left;">Imaginons que nous avons déployé notre modèle et qu&#39;il génère des prédictions sur de nouvelles données. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/082dbef0-40f9-4833-92ec-32e883d6c3aa/_296_-_Pre%CC%81dictions_sur_de_nouvelles_donne%CC%81es.png?t=1774622579"/><div class="image__source"><span class="image__source_text"><p>Prédictions sur de nouvelles données</p></span></div></div><p class="paragraph" style="text-align:left;">Dans un premier temps, nous pouvons entraîner un autoencodeur (ou d&#39;autres modèles de reconstruction de données adaptés) sur les données d&#39;entraînement. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/fde2ba6c-a048-491f-9d75-45a0f4bed25c/_296_-_Utilisation_d_autoencodeurs_pour_la_reconstruction_de_donne%CC%81es.png?t=1774622620"/><div class="image__source"><span class="image__source_text"><p>Utilisation d&#39;autoencodeurs pour la reconstruction de données</p></span></div></div><p class="paragraph" style="text-align:left;">Ainsi, l&#39;autoencodeur capturera l&#39;essence de nos données d&#39;entraînement et de leur distribution. </p><p class="paragraph" style="text-align:left;">Ensuite, au fur et à mesure que de nouvelles données arrivent et que le modèle effectue des prédictions, nous pouvons évaluer périodiquement le changement de distribution des données en calculant l&#39;erreur de reconstruction (<i>reconstruction loss</i>) sur ces nouvelles données à l&#39;aide de l&#39;autoencodeur :</p><ul><li><p class="paragraph" style="text-align:left;">Si l&#39;erreur de reconstruction est élevée, cela indique que la distribution a changé.</p></li><li><p class="paragraph" style="text-align:left;">Si l&#39;erreur de reconstruction est faible, cela indique que la distribution est restée presque identique.</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ff43ab6c-a6d2-457e-ab68-278a221490f0/_293_-_Perte_de_reconstruction.png?t=1774135733"/></div><p class="paragraph" style="text-align:left;">Mais la question est : <b>« Comment interpréter cette erreur de reconstruction ? »</b></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/17802394-8a8b-4013-9c17-11822a56a49f/_293_-_Interpre%CC%81tation_de_la_perte_de_reconstruction.png?t=1774135749"/></div><p class="paragraph" style="text-align:left;">Par exemple, si la perte de reconstruction est de <code>0.4</code>, comment déterminer si c&#39;est significatif ? </p><p class="paragraph" style="text-align:left;">Nous avons besoin de plus de contexte. </p><p class="paragraph" style="text-align:left;">Voyons comment nous pouvons résoudre ce problème.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="le-contexte">Le Contexte</h2><p class="paragraph" style="text-align:left;">Contrairement à ce que beaucoup pensent, le <i>covariate shift</i> se produit de manière graduelle dans les modèles de ML. </p><p class="paragraph" style="text-align:left;">En d&#39;autres termes, il est peu probable que notre modèle soit très performant un jour, et que le lendemain, il commence soudainement à sous-performer. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/0f123188-79b0-40ae-8d4d-9eede2647aa6/_296_-_Baisse_progressive_de_la_performance.png?t=1774622647"/></div><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;"><b>En revanche, la dégradation des performances due au </b><b><i>covariate shift</i></b><b> se fait progressivement. </b></p><p class="paragraph" style="text-align:left;">Et durant cette phase de dégradation, nous devons à un moment donné décider de mettre à jour le modèle pour l&#39;ajuster à ces changements de distribution.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3d49da24-85b7-4dfd-8834-14b58959dd49/_296_-_Re%CC%81entrai%CC%82ner_le_mode%CC%80le.png?t=1774622673"/></div><p class="paragraph" style="text-align:left;">Bien que l&#39;erreur de reconstruction soit utile pour décider des mises à jour du modèle, elle n&#39;a que très peu de sens en soi. </p><p class="paragraph" style="text-align:left;">En termes simples, nous avons besoin d&#39;<b>une perte de reconstruction de base</b> pour la comparer à nos futures erreurs de reconstruction. </p><p class="paragraph" style="text-align:left;">Voici donc ce que nous pouvons faire. </p><p class="paragraph" style="text-align:left;">Disons que nous décidons d&#39;évaluer notre modèle chaque semaine. </p><p class="paragraph" style="text-align:left;">Après avoir entraîné le modèle sur les données collectées : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2dc661cc-c3e3-4134-9a0e-bc48c13bdfc7/_296_-_Donne%CC%81es_collecte%CC%81es_en_une_semaine.png?t=1774622754"/></div><ul><li><p class="paragraph" style="text-align:left;">Nous déterminons notre score de reconstruction de référence (<i>baseline</i>) à l&#39;aide des nouvelles données collectées au cours de la première semaine de la phase post-entraînement.</p></li><li><p class="paragraph" style="text-align:left;">Nous utilisons ce score de référence pour le comparer aux erreurs futures de chaque semaine suivante.</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a73682f9-588b-4846-ac91-254e45141878/_296_-_Autoencodeur.png?t=1774622776"/></div><p class="paragraph" style="text-align:left;">Une différence importante entre l&#39;erreur de reconstruction observée et le score de référence indiquera un <i>covariate shift</i>. </p><p class="paragraph" style="text-align:left;"><i>Plutôt simple et intuitif, non ?</i></p><p class="paragraph" style="text-align:left;">Cette métrique de reconstruction, couplée aux performances du modèle, devient un moyen fiable de déterminer si un <i>covariate shift</i> s&#39;est installé.</p><p class="paragraph" style="text-align:left;">Bien sûr, comme nous l&#39;avons évoqué la semaine dernière les vraies étiquettes (<i>true labels</i>) ne sont parfois pas immédiatement disponibles. </p><p class="paragraph" style="text-align:left;">Il peut donc être difficile d&#39;évaluer les performances en production. </p><p class="paragraph" style="text-align:left;">Pour pallier cela, toutes les équipes ML s&#39;efforcent de recueillir en continu les retours des utilisateurs finaux afin de savoir si le modèle a bien performé ou non.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/161fd446-251d-42d3-9ef6-39d8f9726139/_296_-_Feedback.png?t=1774622797"/></div><p class="paragraph" style="text-align:left;">On l&#39;observe particulièrement dans les systèmes de recommandation :</p><ul><li><p class="paragraph" style="text-align:left;">Cette publicité était-elle pertinente pour vous ?</p></li><li><p class="paragraph" style="text-align:left;">Cette nouvelle vidéo t’a-t-elle intéressé ?</p></li><li><p class="paragraph" style="text-align:left;">Etc.</p></li></ul><p class="paragraph" style="text-align:left;">Ces éléments font partie de la phase de logging du modèle, où nous suivons ses performances en production. </p><p class="paragraph" style="text-align:left;">Cela nous aide à décider si nous devons mettre à jour notre modèle ou non.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d7b514e3-1dde-4887-8ba9-87222553ff95/_296_-_Faut_il_mettre_a%CC%80_jour_le_mode%CC%80le__.png?t=1774622817"/></div><p class="paragraph" style="text-align:left;">Cependant, les mises à jour de modèles ne se résument pas à : <b>« Entraîner un nouveau modèle aujourd&#39;hui et supprimer le précédent. »</b> </p><p class="paragraph" style="text-align:left;">Jamais ! </p><p class="paragraph" style="text-align:left;">Au contraire, tous les déploiements sont gérés par un système rigoureux de contrôle de version. </p><p class="paragraph" style="text-align:left;">J&#39;ai écrit plusieurs mini-cours sur le contrôle de version des déploiements, que tu peux lire ensuite pour acquérir cette compétence ML cruciale dans le monde professionnel :</p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/data-version-control-dvc?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=protege-tes-modeles-en-production-maitrise-l-erreur-de-reconstruction" target="_blank" rel="noopener noreferrer nofollow">Tu ne peux pas construire de grands projets data tant que tu n’as pas appris le Data Version Control (DVC) !</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/compression-modeles-machine-learning-efficace?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=protege-tes-modeles-en-production-maitrise-l-erreur-de-reconstruction" target="_blank" rel="noopener noreferrer nofollow">Compression de modèles : une étape critique vers un Machine Learning efficace</a></p></li></ul><hr class="content_break"><p class="paragraph" style="text-align:left;">👉 <b>À toi de jouer :</b> Quelles sont les autres méthodes pour détecter un <i>covariate shift</i> dans les modèles de ML ? Dis-le-moi en commentaire :)</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=638f360d-fb38-488a-8768-6ff3be87d106&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Maîtriser l&#39;incertitude en Machine Learning avec la Prédiction Conforme</title>
  <description>👀​ Mini-cours #26 - Le guide pratique pour construire des intervalles de confiance robustes et déployer tes modèles en toute sécurité.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/4715afb7-fc90-406a-b369-fb6f2901546a/Mini-cours__26_-_Mai%CC%82triser_l_incertitude_en_Machine_Learning_avec_la_Pre%CC%81diction_Conforme.png.png" length="129586" type="image/png"/>
  <link>https://www.monshotdata.com/p/prediction-conforme-maitriser-incertitude-ml</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/prediction-conforme-maitriser-incertitude-ml</guid>
  <pubDate>Wed, 01 Apr 2026 09:00:00 +0000</pubDate>
  <atom:published>2026-04-01T09:00:00Z</atom:published>
    <category><![CDATA[Machine Learning]]></category>
    <category><![CDATA[Pro]]></category>
    <category><![CDATA[Fiabilité Et Transparence Des Prédictions]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:#f2eafe;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:2.0px 2.0px 2.0px 2.0px;"><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><b>Psst... Contenu Exclusif Réservé aux Membres !</b></span><br><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Ce mini-cours fait partie de notre espace premium. Rejoins dès maintenant le </span><b>Cercle des Experts</b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> pour débloquer l’intégralité de nos ressources, analyses approfondies et guides pratiques.</span><br><b>👉 </b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Clique ici pour découvrir les avantages et t’inscrire : </span><b><a class="link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=maitriser-l-incertitude-en-machine-learning-avec-la-prediction-conforme" target="_blank" rel="noopener noreferrer nofollow" style="color: rgb(37, 99, 235)">Page d’adhésion</a></b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">.</span></p></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><p class="paragraph" style="text-align:left;"><span style="color:rgb(34, 34, 34);font-family:Poppins, Helvetica, sans-serif, serif, EmojiFont;font-size:16px;">⏱️ </span><i><b>Temps de lecture</b></i><i> : </i>25-35 minutes</p></div><div class="section" style="background-color:#F1F7EF;border-color:#222222;border-radius:5px;border-style:dotted;border-width:1px;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><h2 class="heading" style="text-align:left;">Au programme :</h2><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#le-problme" rel="noopener noreferrer nofollow">Le problème</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#la-solution" rel="noopener noreferrer nofollow">La solution</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#prdiction-conforme" rel="noopener noreferrer nofollow">Prédiction Conforme</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#proprits-de-lensemble-de-prdictions" rel="noopener noreferrer nofollow">Propriétés de l&#39;ensemble de prédictions</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#approche-n-1" rel="noopener noreferrer nofollow">Approche n°1</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#rcapitulatif" rel="noopener noreferrer nofollow">Récapitulatif</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#approche-n-2-ensemble-de-prdictions" rel="noopener noreferrer nofollow">Approche n°2 : Ensemble de prédictions adaptatif</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#concept-global-et-conclusion" rel="noopener noreferrer nofollow">Concept global et Conclusion</a></p></li></ul></div><h2 class="heading" style="text-align:left;" id="le-problme">Le problème</h2><p class="paragraph" style="text-align:left;">Faire aveuglément confiance aux prédictions d&#39;un modèle ML peut parfois s&#39;avérer fatal, en particulier dans des environnements à forts enjeux où les décisions basées sur ces prédictions peuvent affecter des vies humaines, la stabilité financière ou des infrastructures critiques. </p><p class="paragraph" style="text-align:left;">Bien qu&#39;une précision de &quot;95%&quot; soit rassurante sur le papier, le modèle ne te dira jamais quels sont les 5% de prédictions spécifiques qui sont incorrectes lorsqu&#39;il est utilisé dans des tâches en aval. </p><p class="paragraph" style="text-align:left;">Autrement dit, même si nous savons que les prédictions du modèle sont globalement correctes un certain pourcentage du temps, le modèle est généralement incapable de nous en dire beaucoup sur une prédiction spécifique.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ddd795b3-dee7-410d-9dd5-3167acf0e36b/Mini-cours__26_-_image1.png?t=1774994406"/></div><p class="paragraph" style="text-align:left;">Par conséquent, dans des situations à haut risque comme les diagnostics médicaux, faire aveuglément confiance à chaque prédiction peut avoir des conséquences graves sur la santé du patient. </p><p class="paragraph" style="text-align:left;">De même, en finance, une seule prédiction erronée pourrait entraîner des pertes monétaires substantielles ou des stratégies d&#39;investissement malavisées. </p><p class="paragraph" style="text-align:left;">Ainsi, pour atténuer ces risques, il est essentiel de ne pas se fier uniquement aux prédictions brutes, mais aussi de comprendre et de quantifier l&#39;incertitude qui y est associée.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/de6a922a-01aa-4712-9c6a-db4ce7395d3f/Mini-cours__26_-_image2.png?t=1774994417"/></div><p class="paragraph" style="text-align:left;">Si nous n&#39;avons aucun moyen d&#39;évaluer la confiance du modèle, alors une prédiction très précise et une simple devinette peuvent sembler identiques.</p><div class="section" style="background-color:#f4e9fb;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">💡 <i>C&#39;est d&#39;autant plus important à notre époque où le ML se démocratise de plus en plus. Tout le monde n&#39;est pas en mesure d&#39;inspecter l&#39;intérieur des modèles ML, comme le font les ingénieurs. C&#39;est le cas des médecins ou des professionnels de la finance. Fournir un moyen pratique (et vulgarisé) de communiquer le risque associé à une prédiction est donc crucial.</i></p></div><p class="paragraph" style="text-align:left;">Développons un peu plus cette idée et voyons pourquoi nous avons besoin d&#39;intervalles de prédiction pour des modèles complexes comme les réseaux de neurones. </p><p class="paragraph" style="text-align:left;">Pour commencer, nous savons que ces modèles seront très probablement utilisés dans des processus de prise de décision en aval. </p><p class="paragraph" style="text-align:left;">Par exemple, si tu es médecin et que tu reçois l&#39;analyse d&#39;une IRM, une sortie du modèle suggérant que la personne est en bonne santé et n&#39;a besoin d&#39;aucun traitement ne te sera probablement pas d&#39;une grande utilité.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/431b78d4-9aab-4f75-99bc-6957657c1b8d/Mini-cours__26_-_image3.png?t=1774994438"/></div><p class="paragraph" style="text-align:left;">C&#39;est parce que le travail d&#39;un médecin consiste à poser un diagnostic différentiel. Ainsi, ce qui l&#39;intéresse vraiment, c&#39;est de savoir s&#39;il y a 10% de chances que cette personne ait un cancer, en se basant sur cette IRM. </p><p class="paragraph" style="text-align:left;">Une autre chose bien plus utile serait d&#39;obtenir un ensemble de prédictions, c&#39;est-à-dire un groupe de diagnostics garantis avec une forte probabilité. </p><p class="paragraph" style="text-align:left;">Par exemple, cet ensemble de prédictions pourrait indiquer qu&#39;il y a 90% de probabilité que le véritable diagnostic soit contenu dans cet ensemble. </p><p class="paragraph" style="text-align:left;">Si la sortie se présente sous cette forme, le médecin peut l&#39;intégrer dans son processus clinique et écarter méthodiquement certains diagnostics.</p><h2 class="heading" style="text-align:left;" id="la-solution">La solution</h2><p class="paragraph" style="text-align:left;">Les <b>prédictions conformes</b>, également connues sous le nom d&#39;inférence conforme, fournissent un cadre pour générer des intervalles ou des ensembles de prédictions assortis de solides garanties statistiques. </p><p class="paragraph" style="text-align:left;">Ce qui distingue la prédiction conforme, c&#39;est <b>sa nature indépendante de la distribution</b>, ce qui signifie qu&#39;elle ne repose sur aucune hypothèse concernant la distribution sous-jacente des données ou le modèle spécifique utilisé. </p><p class="paragraph" style="text-align:left;">De plus, elle ne nécessite aucun entraînement supplémentaire. L&#39;ensemble du modèle peut être considéré comme une boîte noire et tout de même être utilisé pour formuler des prédictions conformes.</p><p class="paragraph" style="text-align:left;">Grâce à cette caractéristique, l&#39;intégration de la prédiction conforme à n&#39;importe quel modèle de Machine Learning pré-entraîné permet aux praticiens de transformer <b>des prédictions ponctuelles en intervalles ou en ensembles</b> qui sont (presque) garantis de contenir le véritable résultat avec une probabilité définie par l&#39;utilisateur.</p><p class="paragraph" style="text-align:left;">Par exemple, dans une tâche de classification comme un diagnostic médical, l&#39;approche traditionnelle produirait une seule étiquette de classe. Cette prédiction ponctuelle ne laisse aucune place pour évaluer la confiance dans la prédiction ou pour envisager d&#39;autres diagnostics plausibles.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f5bbdfc9-62d0-4007-b222-746c87d696df/Mini-cours__26_-_image4.png?t=1774994460"/></div><p class="paragraph" style="text-align:left;">À l&#39;inverse, une approche de prédiction conforme générera un ensemble de diagnostics possibles, garantissant que le diagnostic correct est inclus dans cet ensemble avec un niveau de confiance spécifié, tel que 95%.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/9452a128-194f-4438-9b49-4874fd039d77/Mini-cours__26_-_image5.png?t=1774994483"/></div><p class="paragraph" style="text-align:left;">Par exemple, au lieu de prédire simplement la &quot;maladie A&quot; avec une probabilité de 95%, un prédicteur conforme pourrait renvoyer un ensemble incluant la &quot;maladie A&quot; et la &quot;maladie B&quot;, garantissant que le bon diagnostic se trouve dans cet ensemble 95% du temps.</p><p class="paragraph" style="text-align:left;">Ce n&#39;est pas grave si tout n&#39;est pas encore parfaitement clair pour toi, car nous allons détailler tout cela dans la section suivante. </p><p class="paragraph" style="text-align:left;">Plus spécifiquement, dans les sections suivantes :</p><ul><li><p class="paragraph" style="text-align:left;">Nous explorerons les fondements théoriques de la prédiction conforme, en détaillant comment elle obtient ses garanties indépendantes de la distribution et pourquoi elle est si efficace pour quantifier l&#39;incertitude.</p></li><li><p class="paragraph" style="text-align:left;">Nous nous plongerons également dans des applications pratiques, en démontrant comment implémenter la prédiction conforme dans diverses tâches de Machine Learning, comme la classification.</p></li></ul><p class="paragraph" style="text-align:left;">Commençons !</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="prdiction-conforme"><b>Prédiction Conforme</b></h2><p class="paragraph" style="text-align:left;">Prenons un exemple : nous avons un dataset d&#39;images classifiées en K catégories : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/e6b83a8a-ff17-4166-926b-03d244e46b5f/Mini-cours__26_-_image6.png?t=1774994516"/></div><p class="paragraph" style="text-align:left;">Dans les prédictions conformes, un nouvel ensemble, appelé &quot;ensemble de calibration&quot;, est extrait des données d&#39;entraînement. Il n&#39;est pas nécessaire qu&#39;il soit très grand. Par exemple, dans le cas d&#39;un dataset de 60 000 images, il serait tout à fait acceptable d&#39;isoler seulement 500 à 750 images pour constituer cet ensemble de calibration : </p><div class="image"><img alt="La taille relative de l&#39;ensemble de calibration par rapport à l&#39;ensemble d&#39;entraînement sur cette image ne correspond pas au ratio réel. C&#39;est uniquement à des fins de démonstration." class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/e67db713-b6ee-4502-9723-91501896a336/Mini-cours__26_-_image7.png?t=1774994550"/><div class="image__source"><span class="image__source_text"><p>La taille relative de l&#39;ensemble de calibration par rapport à l&#39;ensemble d&#39;entraînement sur cette image ne correspond pas au ratio réel. C&#39;est uniquement à des fins de démonstration.</p></span></div></div><p class="paragraph" style="text-align:left;">Pour faire simple, imagine également que nous avons déjà entraîné un modèle sur le jeu de données d&#39;entraînement ci-dessus, disons un réseau de neurones :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/1923a298-49de-44b9-8699-79373d5a95d1/Mini-cours__26_-_image8.png?t=1774994590"/></div><p class="paragraph" style="text-align:left;">Mathématiquement, ce modèle peut être noté de la manière suivante :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/211795f7-888d-42d4-85ee-fd19a782244f/Mini-cours__26_-_image9.png?t=1774994624"/></div><ul><li><p class="paragraph" style="text-align:left;">f<sub>y</sub>(x) désigne la probabilité prédite par le modèle que la variable cible <code>Y</code> prenne la valeur <code>y</code> (<code>y</code> pouvant être n&#39;importe quelle valeur parmi les étiquettes de classe ci-dessus) pour une entrée spécifique <code>X = x</code>.</p></li><li><p class="paragraph" style="text-align:left;"><code>P[Y = y|X = x]</code> représente la véritable probabilité conditionnelle de <code>Y = y</code> sachant <code>X = x</code>.</p></li></ul><p class="paragraph" style="text-align:left;">Ainsi, f<sub>y</sub>(x) est l&#39;approximation par le modèle de la véritable probabilité conditionnelle sous-jacente <code>P[Y = y|X = x]</code>. L&#39;objectif du modèle est d&#39;estimer cette probabilité avec précision, permettant ainsi des prédictions fiables et une quantification de l&#39;incertitude.</p><p class="paragraph" style="text-align:left;">Une fois le modèle entraîné, notre but est de prendre un nouvel exemple quelconque <code>X&#39;</code> (disons que le modèle est utilisé dans une application en aval, l&#39;étiquette est donc inconnue) et de générer <b>un ensemble de prédictions</b> <code>ϕ(X′)</code> de telle sorte qu&#39;il contienne la véritable classe <code>Y&#39;</code> avec une forte probabilité.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d9214b69-e848-48a9-be8b-d919986527d4/Mini-cours__26_-_image10.png?t=1774994637"/></div><div class="paywall"><hr class="paywall__break"/><div class="paywall__content"><h2 class="paywall__header"> La suite de ce mini-cours est réservée aux membres du Cercle des Experts. </h2><p class="paywall__description"> Tu as déjà le début. Pour accéder à l’explication complète et à tous les contenus avancés, rejoins le Cercle des Experts dès maintenant. </p><p class="paywall__links"><a class="paywall__upgrade_link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=maitriser-l-incertitude-en-machine-learning-avec-la-prediction-conforme">Rejoindre le Cercle des Experts</a> Translation missing: en.app.shared.conjuction.or <a class="paywall__login_link" href="https://www.monshotdata.com/login?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=maitriser-l-incertitude-en-machine-learning-avec-la-prediction-conforme">Sign In</a></p><div class="paywall__upsell"><div class="paywall__upsell_header"><h3> En devenant membre, tu débloques </h3></div><ul class="paywall__upsell_features"><li class="paywall__upsell_feature"> L’intégralité de ce mini-cours (sans coupure) </li><li class="paywall__upsell_feature"> Tous les mini-cours archivés et les ressources associées </li><li class="paywall__upsell_feature"> 1 nouveau mini-cours chaque semaine pour progresser en continu </li></ul></div></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=9854cced-b333-4ab6-8e77-0b01f8163618&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>8 alternatives aux graphiques classiques que tout Data Scientist doit maîtriser</title>
  <description>🎯 Shot #295 - Le guide ultime pour enrichir ta boîte à outils visuelle et faire parler tes données avec plus d&#39;impact.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/86eafd4a-78d5-4995-a003-07084f0aa64d/Mini-cours__25_-_raincloud_plots.png" length="112058" type="image/png"/>
  <link>https://www.monshotdata.com/p/8-alternatives-graphiques-visualisation-donnees</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/8-alternatives-graphiques-visualisation-donnees</guid>
  <pubDate>Mon, 30 Mar 2026 09:00:00 +0000</pubDate>
  <atom:published>2026-03-30T09:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Visualisation De Données]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Les nuages de points (<i>scatter plots</i>), les diagrammes en barres, les courbes, les boîtes à moustaches (<i>box plots</i>) et les cartes de chaleur (<i>heatmaps</i>) sont les graphiques les plus fréquemment utilisés pour la visualisation de données.</p><p class="paragraph" style="text-align:left;">Bien qu&#39;ils soient simples et connus de presque tout le monde, je pense qu&#39;ils ne constituent pas toujours le meilleur choix pour couvrir tous les scénarios possibles. </p><p class="paragraph" style="text-align:left;">En réalité, de nombreux autres graphiques dérivés de ces formats standards peuvent s&#39;avérer bien plus adaptés s&#39;ils sont utilisés judicieusement. </p><p class="paragraph" style="text-align:left;">C&#39;est pourquoi, aujourd&#39;hui, nous allons aborder quelques alternatives à ces graphiques populaires. </p><p class="paragraph" style="text-align:left;">J&#39;expliquerai également dans quelles situations spécifiques ils peuvent s&#39;avérer plus utiles que les graphiques standards.</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">Commençons !</p><h2 class="heading" style="text-align:left;" id="1-cartes-de-chaleur-avec-encodage-p">#1) Cartes de chaleur avec encodage par la taille</h2><p class="paragraph" style="text-align:left;">Une carte de chaleur traditionnelle représente les valeurs à l&#39;aide d&#39;une échelle de couleurs. Cependant, associer mentalement la couleur d&#39;une cellule à un nombre exact reste difficile. </p><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/astuce-heatmaps-illisibles?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">Intégrer une composante de taille aux cartes de chaleur peut s&#39;avérer extrêmement utile dans ces cas-là.</a> </p><p class="paragraph" style="text-align:left;">En résumé, plus la taille est grande, plus la valeur absolue est élevée : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/astuce-heatmaps-illisibles?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/27a311c4-8f72-4d5f-b0db-033d3ffa0d53/_289_-_Tes_Heatmaps_sont_illisibles___L_astuce_qui_change_tout.png.png?t=1772986641"/><div class="embed__content"><p class="embed__title"> Tes Heatmaps sont illisibles ? L&#39;astuce qui change tout. </p><p class="embed__description"> Découvre une astuce simple pour enrichir tes heatmaps avec une composante de taille. Rends tes analyses plus claires en filtrant visuellement le bruit. </p></div></a></div><p class="paragraph" style="text-align:left;">C&#39;est particulièrement utile pour rendre les cartes de chaleur plus lisibles, car de nombreuses valeurs proches de zéro vont visuellement rétrécir et s&#39;effacer.</p><h2 class="heading" style="text-align:left;" id="2-graphiques-en-cascade">#2) Graphiques en cascade</h2><p class="paragraph" style="text-align:left;">Pour visualiser l&#39;évolution d&#39;une valeur au fil du temps, un graphique en courbes (ou en barres) n&#39;est pas toujours le choix le plus judicieux. </p><p class="paragraph" style="text-align:left;">Cela s&#39;explique par le fait qu&#39;un graphique en courbes (ou en barres) représente les valeurs absolues. Il est donc difficile d&#39;estimer visuellement l&#39;ampleur et la direction des changements incrémentaux. </p><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/diagrammes-en-cascade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">À la place, tu peux utiliser un graphique en cascade (</a><a class="link" href="https://www.monshotdata.com/p/diagrammes-en-cascade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow"><i>waterfall chart</i></a><a class="link" href="https://www.monshotdata.com/p/diagrammes-en-cascade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">). </a></p><p class="paragraph" style="text-align:left;">Il illustre de manière élégante ces différences cumulées, comme on le voit ci-dessous : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/diagrammes-en-cascade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/cb5fb86b-3af7-4a60-bded-f768ed1f2979/_29-diagramme-waterfall.png.png?t=1774608738"/><div class="embed__content"><p class="embed__title"> Diagrammes en cascade : Une meilleure alternative au tracé linéaire </p><p class="embed__description"> Visualise tes données avec les diagrammes en cascade : une alternative élégante au tracé linéaire pour représenter les changements progressifs en Python avec waterfall_chart. </p></div></a></div><p class="paragraph" style="text-align:left;">Ici, les valeurs initiale et finale sont représentées par la première et la dernière barre.</p><p class="paragraph" style="text-align:left;">De plus, les variations consécutives sont automatiquement codées par couleur, ce qui les rend beaucoup plus faciles à interpréter.</p><h2 class="heading" style="text-align:left;" id="3-graphiques-dvolution-des-rangs">#3) Graphiques d&#39;évolution des rangs</h2><p class="paragraph" style="text-align:left;">Lorsqu&#39;il s&#39;agit de visualiser l&#39;évolution du classement de plusieurs catégories au fil du temps, l&#39;utilisation d&#39;un diagramme en barres n&#39;est pas forcément appropriée. </p><p class="paragraph" style="text-align:left;">En effet, les diagrammes en barres deviennent rapidement illisibles lorsqu&#39;il y a de nombreuses catégories. </p><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/bump-chart-visualisation-classement-python?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">Essaye plutôt les </a><a class="link" href="https://www.monshotdata.com/p/bump-chart-visualisation-classement-python?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow"><i>Bump Charts</i></a><a class="link" href="https://www.monshotdata.com/p/bump-chart-visualisation-classement-python?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">.</a> Ils sont spécifiquement conçus pour visualiser l&#39;évolution du rang de différents éléments dans le temps.</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/bump-chart-visualisation-classement-python?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/c717a8b5-8eeb-4c7c-934e-1831ee137d8f/_291_-_Graphique_en_barres_vs_Graphique_d_evolution_du_classement.png?t=1773419793"/><div class="embed__content"><p class="embed__title"> Visualiser l&#39;évolution d&#39;un classement ? Oublie les barres. </p><p class="embed__description"> Ne te limite pas aux barres ! Découvre comment créer un Bump Chart (graphique d&#39;évolution du classement) en Python pour visualiser les rangs dans le temps. </p></div></a></div><p class="paragraph" style="text-align:left;">En comparant le diagramme en barres et le <i>bump chart</i> ci-dessus, il est beaucoup plus facile d&#39;interpréter le changement de classement avec ce dernier.</p><h2 class="heading" style="text-align:left;" id="4-graphiques-en-nuage-de-pluie">#4) Graphiques en nuage de pluie</h2><p class="paragraph" style="text-align:left;">Visualiser la distribution de données à l&#39;aide de boîtes à moustaches et d&#39;histogrammes peut parfois s&#39;avérer trompeur. </p><p class="paragraph" style="text-align:left;">Cela pour deux raisons :</p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/boite-moustaches-trompeuse?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">Il est possible d&#39;obtenir la même boîte à moustaches avec des données complètement différentes</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/histogrammes-trompeurs?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">Modifier le nombre de classes (</a><a class="link" href="https://www.monshotdata.com/p/histogrammes-trompeurs?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow"><i>bins</i></a><a class="link" href="https://www.monshotdata.com/p/histogrammes-trompeurs?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">) change la forme d&#39;un histogramme</a></p></li></ul><p class="paragraph" style="text-align:left;">Ainsi, pour éviter de tirer des conclusions erronées, il est toujours recommandé de tracer la distribution des données aussi précisément que possible. </p><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/raincloud-plots?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">Les </a><a class="link" href="https://www.monshotdata.com/p/raincloud-plots?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow"><i>Raincloud plots</i></a><a class="link" href="https://www.monshotdata.com/p/raincloud-plots?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow"> offrent un moyen concis de combiner et de visualiser trois types de graphiques différents en un seul. </a></p><p class="paragraph" style="text-align:left;">Ceux-ci incluent :</p><ul><li><p class="paragraph" style="text-align:left;">Les boîtes à moustaches (<i>box plots</i>) pour les statistiques de base.</p></li><li><p class="paragraph" style="text-align:left;">Les graphiques en bandes (<i>strip plots</i>) pour un aperçu global des points de données.</p></li><li><p class="paragraph" style="text-align:left;">Les graphiques d&#39;estimation de densité (<i>KDE plots</i>) pour la distribution de probabilité des données.</p></li></ul><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/raincloud-plots?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/efc6ee9a-64f8-4d1c-9c4e-e20995645813/_209-3-graphs-diffe%CC%81rents-combine%CC%81s-en-1-seul.png?t=1752278956"/><div class="embed__content"><p class="embed__title"> Raincloud plots : une visualisation à (re)découvrir </p><p class="embed__description"> Découvre les raincloud plots, une technique de visualisation innovante qui combine trois graphiques pour une analyse de données plus claire et précise. </p></div></a></div><p class="paragraph" style="text-align:left;">Avec les <i>Raincloud plots</i>, tu peux :</p><ul><li><p class="paragraph" style="text-align:left;">Combiner plusieurs graphiques pour éviter les conclusions incorrectes ou trompeuses.</p></li><li><p class="paragraph" style="text-align:left;">Réduire l&#39;encombrement visuel et améliorer la clarté.</p></li><li><p class="paragraph" style="text-align:left;">Améliorer les comparaisons entre différents groupes.</p></li><li><p class="paragraph" style="text-align:left;">Capturer différents aspects des données à travers un seul graphique.</p></li></ul><h2 class="heading" style="text-align:left;" id="56-graphiques-bacs-hexagonaux-et-gr">#5-6) Graphiques à bacs hexagonaux et Graphiques de densité</h2><p class="paragraph" style="text-align:left;">Les nuages de points (<i>scatter plots</i>) peuvent devenir trop denses pour être interprétés lorsque tu as des milliers de points de données. </p><p class="paragraph" style="text-align:left;">Tu peux alors les remplacer par des graphiques <i>Hexbin</i>. </p><p class="paragraph" style="text-align:left;">Les graphiques hexagonaux divisent la zone du graphique en régions hexagonales. Une intensité de couleur est attribuée à chaque région en fonction de la méthode d&#39;agrégation utilisée (le nombre de points, par exemple).</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/diagrammes-a-hexagones?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/58ed1009-1bad-4a43-a593-b7f2a778aed6/_34-Hexbins.png.png?t=1774611587"/><div class="embed__content"><p class="embed__title"> Les diagrammes à hexagones, une alternative plus riche aux diagrammes de dispersion </p><p class="embed__description"> Les diagrammes à hexagones sont particulièrement utiles pour comprendre la dispersion des données. Ils divisent la zone d&#39;un graphique en régions hexagonales. </p></div></a></div><p class="paragraph" style="text-align:left;">Une autre option est le graphique de densité, qui illustre la distribution des points dans un espace bidimensionnel.</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/diagramme-de-densite?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/1db4f1c3-29aa-4168-bb3d-19daa6085ef0/_81-diagramme-de-densite.png?t=1726655996"/><div class="embed__content"><p class="embed__title"> Le diagramme de densité, une alternative plus riche aux diagrammes de dispersion </p><p class="embed__description"> Lorsqu&#39;il y a des milliers de points de données, un diagramme de densité permet d&#39;identifier les régions à forte et à faible densité. </p></div></a></div><p class="paragraph" style="text-align:left;">Un contour est créé en reliant les points de densité égale. En d&#39;autres termes, une seule ligne de contour représente une densité identique de points de données.</p><h2 class="heading" style="text-align:left;" id="78-graphiques-bulles-et-graphiques-">#7-8) Graphiques à bulles et Graphiques à points</h2><p class="paragraph" style="text-align:left;">Comme nous l&#39;avons vu précédemment, les diagrammes en barres deviennent rapidement brouillons et surchargés à mesure que le nombre de catégories augmente.</p><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/graphiques-bulles?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">Un graphique à bulles est souvent une meilleure alternative dans ces cas-là. </a></p><p class="paragraph" style="text-align:left;">Ils ressemblent aux nuages de points, mais :</p><ul><li><p class="paragraph" style="text-align:left;">avec un axe catégoriel</p></li><li><p class="paragraph" style="text-align:left;">et un axe continu</p></li></ul><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/graphiques-bulles?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/134cc080-c469-461a-b143-dc4612e1011f/_232-Graphique-a%CC%80-bulles-vs-diagrammes-en-barres.png?t=1757113507"/><div class="embed__content"><p class="embed__title"> Tes diagrammes en barres sont illisibles ? </p><p class="embed__description"> Remplace tes diagrammes en barres illisibles par des graphiques à bulles : une alternative élégante et claire pour visualiser efficacement des données catégorielles complexes. </p></div></a></div><p class="paragraph" style="text-align:left;">Comme illustré ci-dessus :</p><ul><li><p class="paragraph" style="text-align:left;">Il est difficile d&#39;interpréter le diagramme en barres car il y a trop de barres entassées dans un espace restreint</p></li><li><p class="paragraph" style="text-align:left;">En revanche, les bulles encodées par la taille permettent de visualiser assez facilement l&#39;évolution dans le temps</p></li></ul><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/diagramme-a-points?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">Une autre alternative aux diagrammes en barres dans ce genre de situation est le graphique à points (</a><a class="link" href="https://www.monshotdata.com/p/diagramme-a-points?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow"><i>dot plot</i></a><a class="link" href="https://www.monshotdata.com/p/diagramme-a-points?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank" rel="noopener noreferrer nofollow">).</a></p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/diagramme-a-points?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-alternatives-aux-graphiques-classiques-que-tout-data-scientist-doit-maitriser" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/99197111-6d69-4ba9-8e10-0462d83ef8d0/_46-dot-plots.png.png?t=1774611805"/><div class="embed__content"><p class="embed__title"> Diagramme à points : une alternative aux diagrammes à barres </p><p class="embed__description"> Un diagramme à points peut être un meilleur choix dans de tels cas. Il s&#39;agit d&#39;un diagramme de dispersion, mais avec un axe catégoriel et un axe continu. </p></div></a></div><p class="paragraph" style="text-align:left;">Les graphiques à points comme les graphiques à bulles reposent sur l&#39;idée que, parfois, face à un diagramme comportant de nombreuses barres, nous ne prêtons pas vraiment attention à la longueur individuelle de chaque barre.</p><p class="paragraph" style="text-align:left;">Nous regardons plutôt les extrémités qui indiquent la valeur totale. </p><p class="paragraph" style="text-align:left;">Ces graphiques nous aident précisément à illustrer cela, tout en éliminant les longues barres qui n&#39;ont que peu ou pas d&#39;utilité.</p><hr class="content_break"><p class="paragraph" style="text-align:left;">👉 <b>À toi de jouer :</b> Y a-t-il d&#39;autres graphiques méconnus mais précieux que je n&#39;ai pas abordés ici ? Si oui, dans quels cas les utilises-tu ?</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=7f0a1754-2880-4002-9564-a43014686631&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>L&#39;astuce visuelle (sous-cotée) pour évaluer tes modèles linéaires</title>
  <description>🎯 Shot #294 - Impossible de visualiser une régression en haute dimension ? Voici le graphique 1D qui révèle tout.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/36f555b2-a361-45d6-aa0f-14435bf885ba/_294_-_Astuce_visuelle_pour_e%CC%81valuer_tes_mode%CC%80les_line%CC%81aires.png" length="88267" type="image/png"/>
  <link>https://www.monshotdata.com/p/evaluer-regression-lineaire-graphique-residus</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/evaluer-regression-lineaire-graphique-residus</guid>
  <pubDate>Fri, 27 Mar 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-03-27T10:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Machine Learning]]></category>
    <category><![CDATA[Visualisation De Données]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">La régression linéaire part du principe mathématique que les résidus du modèle (c&#39;est-à-dire la différence entre les valeurs réelles et les valeurs prédites) suivent une distribution normale.</p><p class="paragraph" style="text-align:left;">Si ton modèle donne de mauvais résultats, c’est très souvent parce que cette hypothèse fondamentale n’est pas respectée.</p><p class="paragraph" style="text-align:left;">Dans ce cas, j’ai souvent recours à un graphique de distribution des résidus pour vérifier ce point et juger de la fiabilité du modèle. </p><p class="paragraph" style="text-align:left;">Comme son nom l’indique, ce graphique représente simplement la répartition des erreurs (Réel - Prédit), comme illustré ci-dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/fd938288-27d2-4e53-b5f0-b6023f08fb6e/_294_-_Graphique_de_re%CC%81partition_des_erreurs.png.png?t=1774222766"/></div><p class="paragraph" style="text-align:left;"><b>Un bon graphique de résidus va : </b></p><ul><li><p class="paragraph" style="text-align:left;">Se rapprocher d’une distribution normale (la fameuse forme en cloche) </p></li><li><p class="paragraph" style="text-align:left;">Ne montrer aucune tendance ni structure particulière dans les erreurs</p></li></ul><p class="paragraph" style="text-align:left;"><b>À l’inverse, un mauvais graphique de résidus va : </b></p><ul><li><p class="paragraph" style="text-align:left;">Présenter une forte asymétrie (skewness) </p></li><li><p class="paragraph" style="text-align:left;">Faire apparaître des motifs ou structures visibles dans la répartition des erreurs </p></li></ul><p class="paragraph" style="text-align:left;">Ainsi, plus la distribution des résidus se rapproche d’une loi normale, plus on peut avoir confiance dans la robustesse du modèle. </p><p class="paragraph" style="text-align:left;"><b>C’est d’autant plus utile lorsque la ligne de régression est impossible à visualiser (par exemple avec des données en haute dimension comportant de nombreuses variables).</b></p><p class="paragraph" style="text-align:left;">Pourquoi ? </p><p class="paragraph" style="text-align:left;">Parce qu’un graphique de distribution des résidus reflète l’erreur globale du modèle — il est donc <b>toujours unidimensionnel</b>.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6a3b6dd0-be56-4712-b8fb-ea95b7464681/_294_-_Graphique_de_distribution_des_re%CC%81sidus_toujours_unidimensionnel.png?t=1774277392"/></div><p class="paragraph" style="text-align:left;">Ainsi, il peut être généré et interprété très facilement d&#39;un simple coup d&#39;œil, quel que soit le niveau de complexité de tes données d&#39;entrée.</p><hr class="content_break"><p class="paragraph" style="text-align:left;">Bien sûr, nous nous sommes ici limités à la validation d’une seule hypothèse : <b>la normalité des résidus</b>. </p><p class="paragraph" style="text-align:left;">Or, la régression linéaire repose sur plusieurs autres hypothèses essentielles (linéarité, homoscédasticité, indépendance) qui doivent elles aussi être testées avec rigueur. </p><p class="paragraph" style="text-align:left;">Pour cela, la bibliothèque Python <code>statsmodels</code> propose un rapport statistique particulièrement complet :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/cede1138-059e-417c-ba23-8f585d036cfa/_294_-_Section_de_re%CC%81sume%CC%81_Statsmodels_sur_la_validation_des_hypothe%CC%80ses.png.png?t=1774222865"/></div><p class="paragraph" style="text-align:left;">Si tu souhaites apprendre à interpréter ce rapport en détail, je t’invite à lire ce précédent shot data :</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/statsmodels-summary-regression?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=l-astuce-visuelle-sous-cotee-pour-evaluer-tes-modeles-lineaires" target="_blank"><img class="embed__image embed__image--left" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/794a866d-8319-442a-8f16-7f1684e5e369/_278_-_Statsmodels.png?t=1769727053"/><div class="embed__content"><p class="embed__title"> Statsmodels : arrête de faire semblant de comprendre le summary </p><p class="embed__description"> Apprends à décoder un rapport de régression avec statsmodels : guide détaillé pour comprendre chaque section et interpréter les résultats comme un expert. </p></div></a></div><p class="paragraph" style="text-align:left;">Et si tu veux comprendre l’origine de ces hypothèses mathématiques, je t’invite à découvrir cette analyse approfondie du Cercle des Experts :</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/hypotheses-regression-lineaire?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=l-astuce-visuelle-sous-cotee-pour-evaluer-tes-modeles-lineaires" target="_blank"><div class="embed__content"><p class="embed__title"> Régression Linéaire : d&#39;où viennent vraiment ses hypothèses ? </p><p class="embed__description"> Démystifie les hypothèses cachées de la régression linéaire : comprends les conditions essentielles pour maîtriser cet algorithme fondamental en machine learning. </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/0f5e2318-5ae1-4616-92c6-d93502e6c89a/Mini-cours__1_-_Re%CC%81gression_line%CC%81aire.png?t=1772986394"/></a></div><hr class="content_break"><p class="paragraph" style="text-align:left;">👉 <b>À toi de jouer :</b> Quelles autres méthodes ou quels graphiques utilises-tu pour évaluer les performances d’un modèle linéaire ?</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=3f795e63-3a28-4d30-a542-d1170d33039b&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>8 pièges (fatals mais discrets) en Data Science – et comment les contourner</title>
  <description>👀​ Mini-cours #25 - Retour d’expérience sur des projets réels et comment éviter de ruiner tes modèles.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/7a88100d-94b5-48fe-bb4d-6b4f2bf6bedb/Mini-cours__25_-_Entrai%CC%82ner_le_mode%CC%80le_sur_les_donne%CC%81es_collecte%CC%81es-2.png" length="114221" type="image/png"/>
  <link>https://www.monshotdata.com/p/8-pieges-data-science</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/8-pieges-data-science</guid>
  <pubDate>Wed, 25 Mar 2026 15:30:00 +0000</pubDate>
  <atom:published>2026-03-25T15:30:00Z</atom:published>
    <category><![CDATA[Machine Learning]]></category>
    <category><![CDATA[Qualité &amp; Architecture]]></category>
    <category><![CDATA[Pro]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:#f2eafe;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:2.0px 2.0px 2.0px 2.0px;"><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><b>Psst... Contenu Exclusif Réservé aux Membres !</b></span><br><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Ce mini-cours fait partie de notre espace premium. Rejoins dès maintenant le </span><b>Cercle des Experts</b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> pour débloquer l’intégralité de nos ressources, analyses approfondies et guides pratiques.</span><br><b>👉 </b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Clique ici pour découvrir les avantages et t’inscrire : </span><b><a class="link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-pieges-fatals-mais-discrets-en-data-science-et-comment-les-contourner" target="_blank" rel="noopener noreferrer nofollow" style="color: rgb(37, 99, 235)">Page d’adhésion</a></b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">.</span></p></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><p class="paragraph" style="text-align:left;"><span style="color:rgb(34, 34, 34);font-family:Poppins, Helvetica, sans-serif, serif, EmojiFont;font-size:16px;">⏱️ </span><i><b>Temps de lecture</b></i><i> : </i>30 à 40 minutes</p></div><h2 class="heading" style="text-align:left;" id="introduction">Introduction</h2><p class="paragraph" style="text-align:left;">J’ai eu l’opportunité de travailler sur de nombreux projets de machine learning en conditions réelles — d’abord comme data scientist à plein temps, puis en tant qu’indépendant, où j’accompagnais des entreprises sur leurs projets data. </p><p class="paragraph" style="text-align:left;">Construire des projets de data science de bout en bout — du nettoyage des données jusqu’au déploiement des modèles — m’a confronté à une multitude de pièges, de biais et de bonnes pratiques… que je n’ai quasiment jamais vus formalisés clairement.</p><p class="paragraph" style="text-align:left;">Honnêtement, tout ce que je vais partager ici, ce sont des leçons que j’aurais aimé apprendre beaucoup plus tôt. </p><p class="paragraph" style="text-align:left;">La bonne nouvelle, c’est que tu n’as pas besoin de passer par les mêmes erreurs. </p><p class="paragraph" style="text-align:left;">Dans ce mini-cours, j’ai rassemblé 8 pièges que tu rencontreras très probablement, ainsi que les réflexes à adopter pour les éviter. </p><p class="paragraph" style="text-align:left;">D’après mon expérience, ces pièges sont presque toujours présents — mais rarement visibles au premier coup d’œil. Et c’est précisément ce qui fait dérailler un grand nombre de projets.</p><p class="paragraph" style="text-align:left;"></p><div class="section" style="background-color:#F1F7EF;border-color:#222222;border-radius:5px;border-style:dotted;border-width:1px;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><h2 class="heading" style="text-align:left;">Au programme :</h2><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#1-inspecter-ses-arbres-de-dcision" rel="noopener noreferrer nofollow">1) Inspecter ses arbres de décision</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#2-sparation-alatoire-des-donnes" rel="noopener noreferrer nofollow">2) Séparation aléatoire des données</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#scnario" rel="noopener noreferrer nofollow">Scénario</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#solution" rel="noopener noreferrer nofollow">Solution</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#implmentation" rel="noopener noreferrer nofollow">Implémentation</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#3-kernel-pca-vs-pca" rel="noopener noreferrer nofollow">3) KernelPCA vs PCA</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#le-problme-du-pca" rel="noopener noreferrer nofollow">Le problème du PCA</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#kernel-pca" rel="noopener noreferrer nofollow">KernelPCA</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#le-revers-de-la-mdaille" rel="noopener noreferrer nofollow">Le revers de la médaille</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#4-utiliser-le-pca-pour-la-visualisa" rel="noopener noreferrer nofollow">4) Utiliser le PCA pour la visualisation</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#quoi-sert-le-pca-la-base" rel="noopener noreferrer nofollow">À quoi sert le PCA, à la base ?</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#vrifier-la-variance-explique" rel="noopener noreferrer nofollow">Vérifier la variance expliquée</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#5-distance-euclidienne" rel="noopener noreferrer nofollow">5) Distance euclidienne</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#comment-a-marche" rel="noopener noreferrer nofollow">Comment ça marche ?</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#implmentation" rel="noopener noreferrer nofollow">Implémentation</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#cas-dusage" rel="noopener noreferrer nofollow">Cas d’usage</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#6-corrlation-pouvoir-prdictif" rel="noopener noreferrer nofollow">6) Corrélation ≠ pouvoir prédictif</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#le-problme-avec-la-corrlation" rel="noopener noreferrer nofollow">Le problème avec la corrélation</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#le-predictive-power-score-pps" rel="noopener noreferrer nofollow">Le Predictive Power Score (PPS)</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dmonstration" rel="noopener noreferrer nofollow">Démonstration</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#pps-vs-corrlation" rel="noopener noreferrer nofollow">PPS vs. Corrélation</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#un-autre-problme-de-la-corrlation-d" rel="noopener noreferrer nofollow">Un autre problème de la corrélation de Pearson</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#7-statistiques-de-synthse" rel="noopener noreferrer nofollow">7) Statistiques de synthèse</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#8-covariate-shift-multivari" rel="noopener noreferrer nofollow">8) Covariate shift multivarié</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#introduction" rel="noopener noreferrer nofollow">Introduction</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#limites-des-mthodes-classiques-de-d" rel="noopener noreferrer nofollow">Limites des méthodes classiques de détection</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dtecter-le-covariate-shift-multivar" rel="noopener noreferrer nofollow">Détecter le covariate shift multivarié</a></p></li></ul></li></ul></div><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">Commençons !</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="1-inspecter-ses-arbres-de-dcision">1) Inspecter ses arbres de décision</h2><p class="paragraph" style="text-align:left;">Si l’on visualise les règles de décision (les conditions évaluées à chaque nœud) de n’importe quel arbre de décision, on constate qu’elles sont toujours perpendiculaires aux axes des features, comme ci‑dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/5f6e87ed-3ca8-44a1-b2c1-e12e229ee308/Mini-cours__25_-_Visualisation_des_re%CC%80gles_de_de%CC%81cision.png?t=1774390098"/></div><p class="paragraph" style="text-align:left;">En d’autres termes, un arbre de décision segmente progressivement l’espace des features au moyen de frontières perpendiculaires pour séparer les données.</p><p class="paragraph" style="text-align:left;">En soi, ce n’est pas un “problème”.</p><p class="paragraph" style="text-align:left;">C’est même précisément cette manière de découper l’espace qui rend l’arbre de décision capable de sur‑apprendre à la perfection n’importe quel dataset (<a class="link" href="https://www.monshotdata.com/p/bagging?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-pieges-fatals-mais-discrets-en-data-science-et-comment-les-contourner#lexprience-de-surapprentissage" target="_blank" rel="noopener noreferrer nofollow">voir la section sur l’expérience d’overfitting pour plus de détails</a>).</p><p class="paragraph" style="text-align:left;">Mais cela soulève un point intéressant, souvent ignoré lorsqu’on ajuste des arbres de décision.</p><p class="paragraph" style="text-align:left;">Plus précisément : que se passe‑t‑il si notre dataset est séparé par une frontière de décision diagonale, comme ci‑dessous ?</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/bdaaa1c2-212f-48d7-b327-ce76cffb6af1/Mini-cours__25_-_Ensemble_de_donne%CC%81es_synthe%CC%81tique_avec_frontie%CC%80re_de_de%CC%81cision_diagonale.png?t=1774390206"/></div><p class="paragraph" style="text-align:left;">Il est alors assez intuitif de voir que la frontière de décision construite par un arbre prendra cette forme :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6989b55c-8753-4ffb-821e-f7eb221010e4/Mini-cours__25_-_De%CC%81coupes_re%CC%81pe%CC%81te%CC%81es_pour_cre%CC%81er_une_frontie%CC%80re_de_de%CC%81cision_diagonale.png?t=1774390286"/></div><p class="paragraph" style="text-align:left;">En visualisant cet arbre, on constate qu&#39;il est contraint de multiplier les divisions pour s&#39;adapter à un dataset pourtant très simple à séparer. À l&#39;inverse, un algorithme comme la régression logistique, un SVM (Support Vector Machine) ou un réseau de neurones basique résoudrait ce problème de façon beaucoup plus élégante : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/bb04a5ff-280d-485a-9259-fd09a5b1e4d2/Mini-cours__25_-_N%C5%93ud_de_de%CC%81cision.png?t=1774390416"/></div><p class="paragraph" style="text-align:left;">Cela devient encore plus évident si l’on zoome sur cet arbre et qu’on observe à quel point les seuils de split sont proches les uns des autres : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c04f4703-92ae-4db8-9acd-a17477ea13e1/Mini-cours__25_-_Faible_diffe%CC%81rence_entre_les_crite%CC%80res_de_division.png?t=1774390482"/></div><p class="paragraph" style="text-align:left;">Et là, c’est un peu inquiétant : on voit clairement que l’arbre essaie laborieusement de mimer une frontière diagonale, ce qui laisse penser que ce n’est peut‑être pas le meilleur modèle pour ce problème.</p><p class="paragraph" style="text-align:left;"><b>Pour vérifier cette intuition, voici une méthode de diagnostic simple que j&#39;utilise régulièrement :</b> </p><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;">Préparation :</span> On part de notre jeu d&#39;entraînement classique, avec la matrice de features <code>X</code> </p><ul><li><p class="paragraph" style="text-align:left;"><b>X</b> de dimensions <code>n × m</code>)</p></li><li><p class="paragraph" style="text-align:left;">la cible <code>y</code> (de dimension <code>n × 1</code>). </p></li></ul></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;">Rotation de l&#39;espace :</span> On applique une Analyse en Composantes Principales (PCA) sur <code>X</code>. L&#39;objectif ici n&#39;est pas de réduire la dimension, mais de projeter les données dans un nouvel espace orthogonal. On obtient ainsi <code>X_pca</code>, qui conserve les mêmes dimensions <code>(n × m)</code>. </p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;">Modélisation et visualisation :</span> On entraîne un nouvel arbre de décision sur ces données transformées (<code>X_pca</code>). Profitons du grand atout des arbres : leur interprétabilité visuelle ! On affiche donc le graphe de l&#39;arbre obtenu. </p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;">Diagnostic :</span> Si la profondeur de ce nouvel arbre est drastiquement inférieure à celle de l&#39;arbre initial, le diagnostic est confirmé : la frontière de décision était bien diagonale par rapport aux axes d&#39;origine.</p></li></ul><p class="paragraph" style="text-align:left;">Par exemple, voici les projections PCA du dataset utilisé plus haut : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6b72cbf2-42e5-43d9-bea1-1d3d5a25cf90/Mini-cours__25_-_Projections_PCA.png?t=1774390587"/></div><p class="paragraph" style="text-align:left;">Il apparaît distinctement que, suite à la projection, la frontière de décision devient quasi orthogonale à la seconde composante principale (<code>X2</code>). </p><p class="paragraph" style="text-align:left;">L&#39;ajustement d&#39;un arbre de décision sur la matrice <code>X_pca</code> s&#39;en trouve alors grandement simplifié, ce qui se traduit par une réduction drastique de sa complexité et de sa profondeur. </p><p class="paragraph" style="text-align:left;">L&#39;illustration ci-dessous en témoigne :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/bdd93ac8-557d-40fe-9c36-ca6ad46faf00/Mini-cours__25_-_Arbre_de_de%CC%81cision_sur_X_pca.png?t=1774390643"/></div><p class="paragraph" style="text-align:left;">Ce constat nous amène à une conclusion claire : face à de telles données, nous aurions tout intérêt à changer d&#39;algorithme. </p><p class="paragraph" style="text-align:left;">L&#39;alternative serait d&#39;investir du temps dans un feature engineering spécifique, afin de fournir à l&#39;arbre des variables sur lesquelles il pourra appliquer ses découpes orthogonales efficacement. </p><p class="paragraph" style="text-align:left;">Une question légitime se pose alors : pourquoi ne pas simplement déployer en production l&#39;arbre entraîné sur <code>X_pca</code> ? </p><p class="paragraph" style="text-align:left;">Si rien ne l&#39;interdit techniquement, n&#39;oublions pas le prix à payer : la perte d&#39;interprétabilité. Les composantes principales étant des combinaisons linéaires abstraites, nous sacrifions le sens métier des variables d&#39;origine, ce qui est souvent rédhibitoire en entreprise.</p><p class="paragraph" style="text-align:left;">Le mot de la fin : Ne considère jamais un arbre de décision comme une boîte noire ; prends toujours le temps d&#39;inspecter sa structure. </p><p class="paragraph" style="text-align:left;">Mon but n&#39;est évidemment pas de te dissuader de les utiliser — ils restent, après tout, les briques fondatrices des modèles ensemblistes les plus puissants du marché (Random Forest, XGBoost...). </p><p class="paragraph" style="text-align:left;">L&#39;objectif est plutôt d&#39;apprendre à &#39;penser&#39; comme l&#39;algorithme, pour maîtriser ses limites géométriques et savoir exactement quand il est le bon outil pour le bon problème.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="2-sparation-alatoire-des-donnes">2) Séparation aléatoire des données</h2><p class="paragraph" style="text-align:left;">Dans quasiment tous les cours d’introduction au machine learning, on nous explique qu’il faut séparer les données de façon <b>ALÉATOIRE</b> en un ensemble d’entraînement et un ensemble de validation : </p><div class="paywall"><hr class="paywall__break"/><div class="paywall__content"><h2 class="paywall__header"> La suite de ce mini-cours est réservée aux membres du Cercle des Experts. </h2><p class="paywall__description"> Tu as déjà le début. Pour accéder à l’explication complète et à tous les contenus avancés, rejoins le Cercle des Experts dès maintenant. </p><p class="paywall__links"><a class="paywall__upgrade_link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-pieges-fatals-mais-discrets-en-data-science-et-comment-les-contourner">Rejoindre le Cercle des Experts</a> Translation missing: en.app.shared.conjuction.or <a class="paywall__login_link" href="https://www.monshotdata.com/login?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=8-pieges-fatals-mais-discrets-en-data-science-et-comment-les-contourner">Sign In</a></p><div class="paywall__upsell"><div class="paywall__upsell_header"><h3> En devenant membre, tu débloques </h3></div><ul class="paywall__upsell_features"><li class="paywall__upsell_feature"> L’intégralité de ce mini-cours (sans coupure) </li><li class="paywall__upsell_feature"> Tous les mini-cours archivés et les ressources associées </li><li class="paywall__upsell_feature"> 1 nouveau mini-cours chaque semaine pour progresser en continu </li></ul></div></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=63676b7a-3eea-4a06-b2df-6aa5cfbe6ba8&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Le piège du Covariate Shift Multivarié dans tes modèles ML</title>
  <description>🎯 Shot #293 - Pourquoi comparer tes features une par une ne suffit plus en production (et 2 méthodes pour y remédier).</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a3b2eec6-e184-44e6-b2e6-d8a29bb32208/_293_-_Le_pie%CC%80ge_du_Covariate_Shift_Multivarie%CC%81_dans_tes_mode%CC%80les_ML.png.png" length="177582" type="image/png"/>
  <link>https://www.monshotdata.com/p/detecter-covariate-shift-multivarie-machine-learning</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/detecter-covariate-shift-multivarie-machine-learning</guid>
  <pubDate>Mon, 23 Mar 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-03-23T10:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Machine Learning]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Le shot data de vendredi sur le <i>covariate shift</i> (décalage de covariables) a été très apprécié par beaucoup d&#39;entre vous.</p><p class="paragraph" style="text-align:left;">Si tu es nouveau ici ou si tu l’as manqué, je t’invite fortement à le lire avant de continuer :</p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/covariate-shift-multivarie-detection?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=le-piege-du-covariate-shift-multivarie-dans-tes-modeles-ml" target="_blank"><div class="embed__content"><p class="embed__title"> Covariate Shift : Pourquoi tes méthodes de détection échouent ? </p><p class="embed__description"> La plupart des modèles de ML se dégradent à cause du covariate shift. Le problème ? Les méthodes classiques, feature par feature, ne capturent pas les changements conjoints. </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/995639d2-c5c2-474d-bf05-29abc391c16f/_292_-_Bleu_donne%CC%81es_d_entrai%CC%82nement_-_Rouge_donne%CC%81es_de_production.png?t=1773586477"/></a></div><p class="paragraph" style="text-align:left;">Dans ce shot data, je t’avais laissé avec une question :</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">C&#39;est le sujet que nous allons aborder aujourd&#39;hui.</p><p class="paragraph" style="text-align:left;">Pour rappel, le <i>covariate shift</i> se produit lorsque la distribution des caractéristiques des données (les <i>features</i> ou covariables) évolue au fil du temps après le déploiement du modèle : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a7514af7-dfc6-4107-b0b9-bfba4c87ea6f/_292_-_La_distribution_des_donne%CC%81es_change_au_fil_du_temps.png?t=1773586476"/><div class="image__source"><span class="image__source_text"><p><i>Évolution de la distribution des données au fil du temps</i></p></span></div></div><p class="paragraph" style="text-align:left;">C&#39;est un problème majeur, car nous déployons un modèle entraîné sur une distribution spécifique. </p><p class="paragraph" style="text-align:left;">Mais peu à peu, le <i>covariate shift</i> s&#39;installe et dégrade les performances du modèle, car l&#39;environnement de production commence à l&#39;évaluer sur une distribution différente : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/66c82f95-b6a8-4387-83c5-a9aeee64d645/_292_-_20__de_baisse_de_pre%CC%81cision.png?t=1773586478"/></div><p class="paragraph" style="text-align:left;">Les approches courantes pour identifier ce décalage entre les données d&#39;entraînement et les données de production incluent :</p><ul><li><p class="paragraph" style="text-align:left;">La comparaison de leurs statistiques descriptives (moyenne, médiane, etc.).</p></li><li><p class="paragraph" style="text-align:left;">L&#39;inspection visuelle des différences à l&#39;aide de graphiques de distribution.</p></li><li><p class="paragraph" style="text-align:left;">La réalisation de tests d&#39;hypothèse.</p></li><li><p class="paragraph" style="text-align:left;">La mesure des distances entre les distributions (<a class="link" href="https://www.monshotdata.com/p/distributions-bhattacharyya-vs-kl?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=le-piege-du-covariate-shift-multivarie-dans-tes-modeles-ml" target="_blank" rel="noopener noreferrer nofollow">distance de Bhattacharyya</a>, <a class="link" href="https://www.monshotdata.com/p/graphiques-essentiels-data-science?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=le-piege-du-covariate-shift-multivarie-dans-tes-modeles-ml" target="_blank" rel="noopener noreferrer nofollow">test KS</a>, etc.).</p></li></ul><p class="paragraph" style="text-align:left;">Mais le problème de ces approches est qu&#39;elles ne peuvent détecter qu&#39;un <b>covariate shift univarié</b> : elles ne fonctionnent que sur une seule <i>feature</i> à la fois.</p><p class="paragraph" style="text-align:left;">Or, comme nous l&#39;avons vu vendredi, les modèles en conditions réelles peuvent également subir un <i>covariate shift</i> multivarié, comme le montre clairement l&#39;image ci-dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/995639d2-c5c2-474d-bf05-29abc391c16f/_292_-_Bleu_donne%CC%81es_d_entrai%CC%82nement_-_Rouge_donne%CC%81es_de_production.png?t=1773586477"/><div class="image__source"><span class="image__source_text"><p><i>Bleu → Données d&#39;entraînement ; Rouge → Données de production.</i></p></span></div></div><ul><li><p class="paragraph" style="text-align:left;">D&#39;après les graphiques KDE (en haut et à droite), il est clair que la distribution individuelle des deux variables reste presque identique.</p></li><li><p class="paragraph" style="text-align:left;">Cependant, le nuage de points révèle que leur distribution conjointe lors de l&#39;entraînement (en bleu) diffère de celle en production (en rouge).</p></li></ul><p class="paragraph" style="text-align:left;"><b>Alors, comment détecter ce covariate shift multivarié ?</b></p><p class="paragraph" style="text-align:left;">Pour commencer, il faut comprendre qu&#39;il s&#39;agit d&#39;un problème complexe et qu&#39;il n&#39;existe pas d&#39;approche unique (ou miracle) pour le gérer. </p><p class="paragraph" style="text-align:left;">Voici quelques idées que j’utilise régulièrement et que j’ai également vues appliquées par d’autres experts.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="ide-n-1-la-faible-probabilit-dun-co">Idée n°1 : La faible probabilité d&#39;un covariate shift multivarié pur</h2><p class="paragraph" style="text-align:left;">Tant que l&#39;on vérifie deux (voire trois) <i>features</i> à la fois, l&#39;inspection visuelle peut suffire.</p><p class="paragraph" style="text-align:left;">C’est pourquoi, en pratique, la majorité passe à côté des décalages dès qu’on dépasse trois dimensions.</p><div class="image"><img alt="Sélectionner &lt;= 3 features pour détecter le covariate shift multivarié" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/457a018b-ab0b-4d7e-bb06-9db009f520aa/_293_-_Se%CC%81lectionner____3_features.png?t=1774135649"/><div class="image__source"><span class="image__source_text"><p><i>Sélectionner &lt;= 3 features pour détecter le covariate shift multivarié</i></p></span></div></div><p class="paragraph" style="text-align:left;">La logique est la suivante : au-delà de trois <i>features</i>, il est très improbable que :</p><ol start="1"><li><p class="paragraph" style="text-align:left;"><code>P(X1), P(X2), P(X3), P(X4), ...</code> → restent individuellement presque identiques.</p></li><li><p class="paragraph" style="text-align:left;">Mais que leur distribution conjointe <code>P(X1, X2, X3, X4, … )</code><span style="font-family:KaTeX_Math;"><i> </i></span>change radicalement.</p></li></ol><p class="paragraph" style="text-align:left;">Ainsi, il peut être raisonnable de limiter l&#39;analyse multivariée à des combinaisons de une, deux ou trois variables à la fois. </p><p class="paragraph" style="text-align:left;">Bien sûr, cela n&#39;est pas une vérité absolue, ce qui nous amène à une deuxième approche :</p><h2 class="heading" style="text-align:left;" id="ide-n-2-la-reconstruction-de-donnes">Idée n°2 : La reconstruction de données</h2><p class="paragraph" style="text-align:left;">Il s&#39;agit d&#39;une approche à la fois élégante et très pratique que j&#39;ai pu utiliser dans l&#39;un de mes projets.</p><p class="paragraph" style="text-align:left;"><b>La reconstruction de données consiste à apprendre une transformation qui projette les données dans un espace de dimension plus faible, puis à reconstruire les données d’origine à partir de cette représentation.</b></p><div class="image"><img alt="L&#39;objectif de la reconstruction est de recréer la donnée initiale après projection" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/9ac2f002-1e83-46bd-a6b1-f74ec4c8805f/_293_-_Objectif_de_la_reconstruction.png?t=1774135682"/><div class="image__source"><span class="image__source_text"><p><i>L&#39;objectif de la reconstruction est de recréer la donnée initiale après projection</i></p></span></div></div><p class="paragraph" style="text-align:left;">Au passage, c&#39;est exactement ce que font les Autoencodeurs. </p><p class="paragraph" style="text-align:left;">Ce sont des réseaux de neurones qui apprennent à projeter les données dans un espace latent, puis à les reconstruire pour revenir à l’espace d’origine.</p><div class="image"><img alt="Utilisation des Autoencodeurs pour la reconstruction de données" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8d5000b1-8f79-493b-96c1-84c6604f45e1/_293_-_Utilisation_des_Autoencodeurs.png?t=1774620695"/><div class="image__source"><span class="image__source_text"><p><i>Utilisation des Autoencodeurs pour la reconstruction de données</i></p></span></div></div><p class="paragraph" style="text-align:left;"><b>L&#39;objectif est de minimiser l&#39;erreur de reconstruction. </b></p><p class="paragraph" style="text-align:left;">C&#39;est comme demander au modèle d&#39;apprendre une fonction qui :</p><ul><li><p class="paragraph" style="text-align:left;">Prend des données en entrée.</p></li><li><p class="paragraph" style="text-align:left;">Les projette en basse dimension.</p></li><li><p class="paragraph" style="text-align:left;">Restitue exactement les données d&#39;entrée.</p></li></ul><p class="paragraph" style="text-align:left;"><b>Voici donc comment procéder :</b></p><ol start="1"><li><p class="paragraph" style="text-align:left;">Entraîne un autoencodeur sur le jeu de données initial afin qu’il apprenne à reconstruire au mieux cette distribution.</p></li><li><p class="paragraph" style="text-align:left;">Utilise ensuite ce modèle sur les nouvelles données pour vérifier le <i>covariate shift</i> :</p><ul><li><p class="paragraph" style="text-align:left;">Une perte de reconstruction <b>élevée</b> indique que la distribution a changé.</p></li><li><p class="paragraph" style="text-align:left;">Une perte de reconstruction <b>faible</b> indique que la distribution est globalement restée la même.</p></li></ul></li></ol><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ff43ab6c-a6d2-457e-ab68-278a221490f0/_293_-_Perte_de_reconstruction.png?t=1774135733"/></div><p class="paragraph" style="text-align:left;">Cette approche est très intuitive. </p><p class="paragraph" style="text-align:left;">Mais l&#39;un de ses plus grands avantages est <b>qu&#39;elle ne nécessite pas de données étiquetées</b>.</p><p class="paragraph" style="text-align:left;">Par nature, les autoencodeurs apprennent à reconstruire directement les données. </p><p class="paragraph" style="text-align:left;">C’est particulièrement utile en pratique, car les étiquettes des données de production ne sont généralement pas disponibles immédiatement — elles arrivent presque toujours avec un certain délai.</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">Mais grâce aux Autoencodeurs, nous pouvons tout de même calculer l&#39;erreur de reconstruction sur ces données non étiquetées.</p><p class="paragraph" style="text-align:left;">En réalité, l&#39;utilisation d&#39;Autoencodeurs n&#39;est qu&#39;un exemple. </p><p class="paragraph" style="text-align:left;">D’autres techniques de reconstruction existent, comme l’Analyse en Composantes Principales (PCA).</p><p class="paragraph" style="text-align:left;"><b>Cependant, quelle que soit la méthode choisie, un point crucial mérite toute notre attention.</b></p><p class="paragraph" style="text-align:left;">Comme nous l’avons vu :</p><ul><li><p class="paragraph" style="text-align:left;">Perte élevée → changement de distribution.</p></li><li><p class="paragraph" style="text-align:left;">Perte faible → distribution stable.</p></li></ul><p class="paragraph" style="text-align:left;">Mais attention : l’interprétation de la perte de reconstruction reste relativement subjective et dépend du contexte.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/17802394-8a8b-4013-9c17-11822a56a49f/_293_-_Interpre%CC%81tation_de_la_perte_de_reconstruction.png?t=1774135749"/></div><p class="paragraph" style="text-align:left;">Par exemple, si la perte de reconstruction est de 0,4, comment savoir si cette valeur est vraiment significative ?</p><p class="paragraph" style="text-align:left;">Étant donné l’importance de ce sujet, je ne veux pas le traiter à la légère. </p><p class="paragraph" style="text-align:left;">Nous approfondirons donc cette discussion dans un prochain shot data</p><p class="paragraph" style="text-align:left;">En attendant, c’est à toi de jouer : </p><ul><li><p class="paragraph" style="text-align:left;"><b>Comment interpréterais-tu l’erreur de reconstruction pour détecter un éventuel covariate shift ? </b></p></li><li><p class="paragraph" style="text-align:left;"><b>Quelles pourraient être les limites des approches basées sur la reconstruction pour identifier ce décalage ? </b></p></li></ul><p class="paragraph" style="text-align:left;">J’ai hâte de découvrir tes réponses ! :)</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=1ab2cad2-b4ff-487b-a288-03278e37fb0e&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>La face cachée du Covariate Shift</title>
  <description>🎯 Shot #292 - Ce que KS et Bhattacharyya ne peuvent pas voir.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/995639d2-c5c2-474d-bf05-29abc391c16f/_292_-_Bleu_donne%CC%81es_d_entrai%CC%82nement_-_Rouge_donne%CC%81es_de_production.png" length="67997" type="image/png"/>
  <link>https://www.monshotdata.com/p/covariate-shift-multivarie-detection</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/covariate-shift-multivarie-detection</guid>
  <pubDate>Fri, 20 Mar 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-03-20T10:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Machine Learning]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Presque tous les modèles de Machine Learning en production voient leurs performances se dégrader progressivement à cause du <b>Covariate Shift</b> (ou décalage de covariables).</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a7514af7-dfc6-4107-b0b9-bfba4c87ea6f/_292_-_La_distribution_des_donne%CC%81es_change_au_fil_du_temps.png?t=1773586297"/><div class="image__source"><span class="image__source_text"><p>La distribution des données change au fil du temps</p></span></div></div><p class="paragraph" style="text-align:left;">Le Covariate Shift se produit lorsque la distribution des features change au fil du temps, alors que la véritable relation entre l&#39;entrée et la sortie reste la même.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/bae812aa-360c-464e-b034-3923a9da0b08/_292_-_La_distribution_des_e%CC%81chantillons_de_test_diffe%CC%80re_de_celle_des_donne%CC%81es_d_entrai%CC%82nement.png?t=1773586318"/><div class="image__source"><span class="image__source_text"><p><i>La distribution des échantillons de test diffère de celle des données d&#39;entraînement</i></p></span></div></div><p class="paragraph" style="text-align:left;">C&#39;est un problème sérieux : nous avons entraîné le modèle sur une certaine distribution, mais il est utilisé pour faire des prédictions sur une distribution différente en production.</p><p class="paragraph" style="text-align:left;">Il est donc critique de détecter ce décalage tôt pour que les modèles continuent de bien fonctionner.</p><p class="paragraph" style="text-align:left;">L&#39;une des méthodes les plus courantes et intuitives pour détecter le Covariate Shift consiste simplement à <b>comparer la distribution des features</b> entre les données d&#39;entraînement et celles de production.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/fca760f6-8245-44ff-84f4-52b663faa3b4/_292_-_Mesurer_la_similarite%CC%81.png?t=1773586336"/></div><p class="paragraph" style="text-align:left;">Cela peut se faire de plusieurs manières, par exemple :</p><ul><li><p class="paragraph" style="text-align:left;">Comparer les statistiques sommaires (moyenne, médiane, etc.).</p></li><li><p class="paragraph" style="text-align:left;">Inspecter visuellement via des graphiques de distribution.</p></li><li><p class="paragraph" style="text-align:left;">Effectuer des tests d&#39;hypothèse.</p></li><li><p class="paragraph" style="text-align:left;">Mesurer les distances entre les distributions (entraînement vs production) en utilisant la <a class="link" href="https://www.monshotdata.com/p/distributions-bhattacharyya-vs-kl?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=la-face-cachee-du-covariate-shift" target="_blank" rel="noopener noreferrer nofollow"><b>distance de Bhattacharyya</b></a>, le <a class="link" href="https://www.monshotdata.com/p/graphiques-essentiels-data-science?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=la-face-cachee-du-covariate-shift" target="_blank" rel="noopener noreferrer nofollow"><b>test KS</b></a>, etc.</p></li></ul><p class="paragraph" style="text-align:left;">Bien que ces approches soient souvent efficaces, leur problème majeur est qu&#39;elles fonctionnent sur <b>une seule feature à la fois</b>.</p><p class="paragraph" style="text-align:left;">Or, dans la vraie vie, nous pouvons aussi observer un <b>Covariate Shift Multivarié</b>.</p><p class="paragraph" style="text-align:left;">Le Covariate Shift Multivarié se produit lorsque :</p><ol start="1"><li><p class="paragraph" style="text-align:left;">La distribution des variables individuelles reste la même :</p><ul><li><p class="paragraph" style="text-align:left;"><code>P(X1)</code> et <code>P(X2)</code> restent individuellement identiques.</p></li></ul></li><li><p class="paragraph" style="text-align:left;">Mais leur <b>distribution conjointe</b> change :</p><ul><li><p class="paragraph" style="text-align:left;"><code>P(X1, X2)</code> change.</p></li></ul></li></ol><p class="paragraph" style="text-align:left;">C&#39;est flagrant sur l&#39;image ci-dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/995639d2-c5c2-474d-bf05-29abc391c16f/_292_-_Bleu_donne%CC%81es_d_entrai%CC%82nement_-_Rouge_donne%CC%81es_de_production.png?t=1773586359"/><div class="image__source"><span class="image__source_text"><p>Bleu : données d’entraînement — Rouge : données de production</p></span></div></div><ul><li><p class="paragraph" style="text-align:left;">Les courbes KDE (en haut et à droite) montrent que les distributions marginales sont quasi identiques.</p></li><li><p class="paragraph" style="text-align:left;">Pourtant, le <b>nuage de points (scatter plot)</b> révèle que la <b>distribution conjointe</b> en entraînement (Bleu) diffère totalement de celle en production (Rouge).</p></li></ul><p class="paragraph" style="text-align:left;">Il est facile de deviner que les méthodes de détection univariées mentionnées plus haut donneront des résultats trompeurs ici.</p><p class="paragraph" style="text-align:left;">Par exemple, comme démontré ci-dessous, mesurer la <b>distance de Bhattacharyya</b> entre une feature d&#39;entraînement et de production donne une valeur très basse, indiquant une forte similarité : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/b10cc2b3-29c2-4f50-a59c-77ab5fc382d4/_292_-_Une_petite_distance_indique_une_plus_grande_similarite%CC%81.png?t=1774438511"/></div><p class="paragraph" style="text-align:left;">En réalité, même si la distribution individuelle des features est la même, nous pouvons confirmer expérimentalement que cela entraînera une chute de performance du modèle.</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/66c82f95-b6a8-4387-83c5-a9aeee64d645/_292_-_20__de_baisse_de_pre%CC%81cision.png?t=1773586398"/></div><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i>Note</i></span><i> : Dans la plupart des cas, les vraies prédictions sur les données de production ne sont pas disponibles immédiatement. Dans la démonstration ci-dessus, supposons que nous ayons réussi à obtenir les vraies valeurs).</i></p><figcaption class="blockquote__byline"></figcaption></blockquote></div><p class="paragraph" style="text-align:left;">Comme illustré ci-dessus, la performance du modèle chute de <b>20% en production</b>, ce qui est énorme.</p><p class="paragraph" style="text-align:left;">Ici, nous pourrions complètement écarter la possibilité d&#39;un Covariate Shift si nous partons du principe que ce décalage ne peut jamais être de nature multivariée.</p><p class="paragraph" style="text-align:left;">Bien sûr, dans la figure précédente, il était facile d&#39;identifier le changement multivarié car nous ne regardions que deux features.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/995639d2-c5c2-474d-bf05-29abc391c16f/_292_-_Bleu_donne%CC%81es_d_entrai%CC%82nement_-_Rouge_donne%CC%81es_de_production.png?t=1773586359"/></div><p class="paragraph" style="text-align:left;">Mais le Covariate Shift multivarié peut aussi survenir avec bien plus de deux features.</p><p class="paragraph" style="text-align:left;">Contrairement au cas bivarié ci-dessus, l&#39;inspection visuelle devient impossible dans des dimensions plus élevées.</p><p class="paragraph" style="text-align:left;">Maintenant, tu connais le problème.</p><p class="paragraph" style="text-align:left;"><b>Alors, comment pouvons-nous détecter cela ?</b></p><p class="paragraph" style="text-align:left;">Aujourd&#39;hui, au lieu de te donner la solution tout de suite, je veux te laisser réfléchir à ce problème.</p><p class="paragraph" style="text-align:left;">Plus spécifiquement, pose-toi la question :</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">Nous continuerons cette discussion semaine prochaine, mais d&#39;ici là, j&#39;aimerais avoir ton avis :)</p><p class="paragraph" style="text-align:left;">Le Covariate Shift multivarié est un problème fréquent dont souffrent de nombreux modèles ML dans le monde réel. </p><p class="paragraph" style="text-align:left;">Il est donc critique de le détecter tôt pour garantir que les modèles fonctionnent comme prévu.</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=e8330884-9a64-4158-ab1a-0277e7fe13a6&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>DBSCAN++ : Passe ton Clustering à l&#39;échelle supérieure</title>
  <description>👀​ Mini-cours #24 - L&#39;alternative haute performance pour surmonter les lenteurs du DBSCAN classique sur les grands jeux de données.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/98fbac48-c782-4ddd-8e10-c1a1a67a1fd6/Mini-cours__24_-_La_limite_du_clustering_DBSCAN.png.png" length="949972" type="image/png"/>
  <link>https://www.monshotdata.com/p/dbscan-plus-plus-clustering-scalable</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/dbscan-plus-plus-clustering-scalable</guid>
  <pubDate>Wed, 18 Mar 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-03-18T10:00:00Z</atom:published>
    <category><![CDATA[Clustering &amp; Réduction Dimensionnalité]]></category>
    <category><![CDATA[Machine Learning]]></category>
    <category><![CDATA[Pro]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:#f2eafe;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:2.0px 2.0px 2.0px 2.0px;"><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><b>Psst... Contenu Exclusif Réservé aux Membres !</b></span><br><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Ce mini-cours fait partie de notre espace premium. Rejoins dès maintenant le </span><b>Cercle des Experts</b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> pour débloquer l’intégralité de nos ressources, analyses approfondies et guides pratiques.</span><br><b>👉 </b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Clique ici pour découvrir les avantages et t’inscrire : </span><b><a class="link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=dbscan-passe-ton-clustering-a-l-echelle-superieure" target="_blank" rel="noopener noreferrer nofollow" style="color: rgb(37, 99, 235)">Page d’adhésion</a></b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">.</span></p></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><p class="paragraph" style="text-align:left;"><span style="color:rgb(34, 34, 34);font-family:Poppins, Helvetica, sans-serif, serif, EmojiFont;font-size:16px;">⏱️ </span><i><b>Temps de lecture</b></i><i> : </i>35-45 minutes</p></div><h2 class="heading" style="text-align:left;" id="introduction">Introduction</h2><p class="paragraph" style="text-align:left;">KMeans est un algorithme de clustering non supervisé qui regroupe les données en fonction des distances. Il est largement reconnu pour sa simplicité et son efficacité. Essentiellement, l&#39;idée centrale est de partitionner un jeu de données en clusters distincts, chaque point appartenant au cluster dont le centroïde est le plus proche.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/66231616-c0ee-435f-9064-061a97033bc8/Mini-cours__24_-_Donne%CC%81es_Clusterise%CC%81es.png?t=1773671678"/><div class="image__source"><span class="image__source_text"><p>Données Clusterisées</p></span></div></div><p class="paragraph" style="text-align:left;"></p><div class="section" style="background-color:#F1F7EF;border-color:#222222;border-radius:5px;border-style:dotted;border-width:1px;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><h2 class="heading" style="text-align:left;">Au programme :</h2><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#les-limites-de-k-means" rel="noopener noreferrer nofollow">Les limites de KMeans</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#1-k-means-ne-prend-pas-en-compte-la" rel="noopener noreferrer nofollow">1) KMeans ne prend pas en compte la variance et la …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#2-chaque-point-de-donnes-est-assign" rel="noopener noreferrer nofollow">2) Chaque point de données est assigné à un cluste …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#3-spcification-du-nombre-de-cluster" rel="noopener noreferrer nofollow">3) Spécification du nombre de clusters</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#questce-que-dbscan" rel="noopener noreferrer nofollow">Qu&#39;est-ce que DBSCAN ?</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#comment-a-marche" rel="noopener noreferrer nofollow">Comment ça marche ?</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#comment-trouver-la-valeur-optimale-" rel="noopener noreferrer nofollow">Comment trouver la valeur optimale d&#39;Epsilon</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#avantages-de-dbscan" rel="noopener noreferrer nofollow">Avantages de DBSCAN</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#inconvnients-de-dbscan" rel="noopener noreferrer nofollow">Inconvénients de DBSCAN</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dbscan" rel="noopener noreferrer nofollow">DBSCAN++</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#1-initialisation-uniforme" rel="noopener noreferrer nofollow">1) Initialisation Uniforme</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#2-initialisation-par-kcentres" rel="noopener noreferrer nofollow">2) Initialisation par k-centres</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#implmentation" rel="noopener noreferrer nofollow">Implémentation</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#exprimentation" rel="noopener noreferrer nofollow">Expérimentation</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#jeu-de-donnes-n-1-moons" rel="noopener noreferrer nofollow">Jeu de données n°1 : Moons</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#jeu-de-donnes-n-2-smiley-face" rel="noopener noreferrer nofollow">Jeu de données n°2 : Smiley Face </a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#pistes-damlioration" rel="noopener noreferrer nofollow">Pistes d&#39;amélioration</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#1-initialisation-par-kcentres-plus-" rel="noopener noreferrer nofollow">1) Initialisation par k‑centres plus robuste</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#2-les-problmes-typiques-avec-dbscan" rel="noopener noreferrer nofollow">2) Les problèmes typiques avec DBSCAN</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#pourquoi-ne-pas-abandonner-dbscan" rel="noopener noreferrer nofollow">Pourquoi ne pas abandonner DBSCAN ?</a></p></li></ul></li></ul></div><p class="paragraph" style="text-align:left;"></p><h2 class="heading" style="text-align:left;" id="les-limites-de-k-means">Les limites de KMeans</h2><p class="paragraph" style="text-align:left;">Bien que sa simplicité en fasse souvent l&#39;algorithme de clustering préféré, KMeans présente de nombreuses limitations qui entravent son efficacité dans plusieurs scénarios.</p><h3 class="heading" style="text-align:left;" id="1-k-means-ne-prend-pas-en-compte-la">1) KMeans ne prend pas en compte la variance et la forme des clusters</h3><p class="paragraph" style="text-align:left;">Par exemple, KMeans ne tient pas compte de la variance ni de la forme des clusters.</p><p class="paragraph" style="text-align:left;">En d&#39;autres termes, l&#39;une des principales limites de KMeans est son hypothèse de clusters sphériques.</p><p class="paragraph" style="text-align:left;">Une façon intuitive et graphique de comprendre l&#39;algorithme KMeans est de placer un <b>cercle</b> au centre de chaque cluster, qui englobe les points.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f3c5b1b6-171b-4f29-8719-559e5e8b38ec/Mini-cours__24_-_Re%CC%81sultats_de_KMeans_sur_des_clusters_circulaires.png?t=1773672043"/><div class="image__source"><span class="image__source_text"><p><i><b>Résultats de KMeans sur des clusters circulaires</b></i></p></span></div></div><div class="section" style="background-color:#e8f1fa;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">💡<i> En 3 dimensions, les cercles peuvent être remplacés par des sphères. En dimensions supérieures, on peut les imaginer comme des hyper-sphères.</i></p></div><p class="paragraph" style="text-align:left;">Comme KMeans consiste essentiellement à placer des cercles, ses résultats ne sont pas idéaux lorsque le jeu de données présente des formes irrégulières ou des tailles variables, comme indiqué ci-dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f66e9734-77fa-4df1-8a30-9b7ca987c785/Mini-cours__24_-_Forme_des_clusters_impose%CC%81e_par_KMeans_sur_des_donne%CC%81es_a%CC%80_clusters_ovales.png?t=1773672435"/><div class="image__source"><span class="image__source_text"><p>Forme des clusters imposée par KMeans sur des données à clusters ovales</p></span></div></div><p class="paragraph" style="text-align:left;">Au lieu de cela, un clustering idéal devrait regrouper les données comme suit : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ea050630-8dfc-4432-9a7f-619149a6c281/Mini-cours__24_-_Forme_ide%CC%81ale_des_clusters_pour_des_donne%CC%81es_a%CC%80_clusters_ovales.png?t=1773672699"/><div class="image__source"><span class="image__source_text"><p>Forme idéale des clusters pour des données à clusters ovales</p></span></div></div><p class="paragraph" style="text-align:left;">On peut observer la même chose dans le jeu de données suivant : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/43f17623-5525-4657-93ef-b6ecb80ce730/Mini-cours__24_-_Clustering_KMeans_vs_Clustering_ide%CC%81al.png?t=1773673151"/></div><p class="paragraph" style="text-align:left;">Cette rigidité de KMeans à ne former que des clusters globulaires conduit souvent à des erreurs de classification et à des assignations de clusters sous-optimales.</p><h3 class="heading" style="text-align:left;" id="2-chaque-point-de-donnes-est-assign">2) Chaque point de données est assigné à un cluster</h3><p class="paragraph" style="text-align:left;">Une autre limitation significative de l&#39;algorithme KMeans est son hypothèse inhérente que chaque point de données <i>doit</i> être assigné à un cluster.</p><p class="paragraph" style="text-align:left;">Plus précisément, KMeans part du principe que chaque point appartient à un et un seul cluster, ne laissant aucune place pour la représentation du bruit ou des outliers (données aberrantes).</p><p class="paragraph" style="text-align:left;">Cette caractéristique peut être problématique dans les scénarios où le jeu de données contient des irrégularités, des anomalies ou du bruit qui ne se conforment pas à des frontières de clusters claires.</p><p class="paragraph" style="text-align:left;">Par conséquent, KMeans peut assigner par inadvertance des points à des clusters même lorsqu&#39;ils n&#39;appartiennent véritablement à aucun modèle discernable.</p><p class="paragraph" style="text-align:left;">Ceci est illustré dans l&#39;image ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/729d5376-e737-4b07-81a7-d80808c1f837/Mini-cours__24_-_Outliers_affecte%CC%81s_aux_clusters.png?t=1773673357"/></div><p class="paragraph" style="text-align:left;">Cette tendance peut conduire à des résultats de clustering sous-optimaux, en particulier dans les jeux de données à densités variables, aux formes irrégulières ou en présence de données bruitées.</p><p class="paragraph" style="text-align:left;">Dans les datasets réels où la structure sous-jacente n&#39;est pas adaptée aux hypothèses de KMeans, l&#39;assignation rigide de tous les points limite son efficacité.</p><p class="paragraph" style="text-align:left;">Nous devons être conscients de cette limitation et envisager des approches alternatives, telles que les méthodes basées sur la densité ou hiérarchiques, lorsque nous traitons des données présentant beaucoup de bruit ou d&#39;outliers.</p><h3 class="heading" style="text-align:left;" id="3-spcification-du-nombre-de-cluster">3) Spécification du nombre de clusters</h3><p class="paragraph" style="text-align:left;">Une contrainte notable de l&#39;utilisation de KMeans est la nécessité d&#39;une connaissance préalable ou d&#39;hypothèses sur le nombre exact de clusters dans le jeu de données.</p><p class="paragraph" style="text-align:left;">Contrairement à d&#39;autres algorithmes capables de déterminer automatiquement le nombre optimal de clusters basé sur la structure inhérente des données, KMeans repose sur une valeur prédéfinie (souvent notée &#39;k&#39;).</p><p class="paragraph" style="text-align:left;">Bien sûr, ce n&#39;est pas un problème insurmontable, et il existe diverses méthodes pour déterminer une valeur fiable pour le paramètre k, mais cette contrainte pose des défis lorsque le vrai nombre de clusters est inconnu à l&#39;avance, menant à des inexactitudes potentielles.</p><hr class="content_break"><p class="paragraph" style="text-align:left;"><i>Note en passant :</i> Nous utilisons couramment la méthode du Coude (Elbow curve) pour déterminer le nombre de clusters (k) pour KMeans. </p><p class="paragraph" style="text-align:left;">Cependant, le problème avec la courbe du Coude est qu&#39;elle :</p><ul><li><p class="paragraph" style="text-align:left;">a une interprétation subjective</p></li><li><p class="paragraph" style="text-align:left;">implique une ambiguïté pour déterminer le point de coude avec précision</p></li><li><p class="paragraph" style="text-align:left;">ne considère que la distance intra-cluster, entre autres</p></li></ul><p class="paragraph" style="text-align:left;">Le score de Silhouette est une mesure alternative pour évaluer la qualité du clustering, et il est généralement considéré comme plus fiable que la courbe du Coude. </p><p class="paragraph" style="text-align:left;">Le mesurer à travers une plage de centroïdes (k) peut révéler quels résultats de clustering sont les plus prometteurs. </p><p class="paragraph" style="text-align:left;">Le visuel ci-dessous compare la courbe du Coude et le graphique de Silhouette :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/9bafea13-017e-41e3-9b9e-2730a9203965/_187-score-silhouette-vs-me%CC%81thode-du-coude.png?t=1748011813"/></div><p class="paragraph" style="text-align:left;">Il est clair que la courbe du Coude est très trompeuse et imprécise. Dans un dataset avec 25 clusters :</p><ul><li><p class="paragraph" style="text-align:left;">La courbe du Coude suggère que 4 est le nombre optimal de clusters.</p></li><li><p class="paragraph" style="text-align:left;">La courbe de Silhouette suggère que 25 est le nombre optimal.</p></li></ul><p class="paragraph" style="text-align:left;">Nous avons déjà couvert cela dans quelques éditions précédentes de la newsletter si tu souhaites plus de détails : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/score-de-silhouette-vs-methode-du-coude?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=dbscan-passe-ton-clustering-a-l-echelle-superieure" target="_blank"><div class="embed__content"><p class="embed__title"> Score de silhouette vs. Méthode du coude : un choix évident </p><p class="embed__description"> Découvre le score de silhouette, une méthode plus fiable que le coude pour évaluer la qualité de tes clusters et choisir le nombre optimal de k en machine learning. </p></div></a></div><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/clustering-sans-labels?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=dbscan-passe-ton-clustering-a-l-echelle-superieure" target="_blank"><div class="embed__content"><p class="embed__title"> Clustering sans labels : comment savoir si ton modèle est bon ? </p><p class="embed__description"> Découvre 3 métriques fiables pour valider ton clustering sans labels : coefficient de silhouette, indice Davies-Bouldin et index Calinski-Harabasz pour évaluer la qualité de tes résultats. </p></div></a></div><hr class="content_break"><p class="paragraph" style="text-align:left;">Revenons à nos moutons... </p><p class="paragraph" style="text-align:left;">Les limitations ci-dessus soulignent l&#39;importance extrême d&#39;apprendre d&#39;autres algorithmes plus performants pour pallier ces manques. </p><p class="paragraph" style="text-align:left;">Bien que KMeans fasse partie des algorithmes basés sur les centroïdes, il existe de nombreux types d&#39;algorithmes de clustering (montrés ci-dessous) utilisables selon la situation :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c3669961-104e-4cee-a1df-17fc7d33fb4e/_276_-_6_types_d_algorithmes_de_clustering_en_ML.png?t=1769101695"/></div><p class="paragraph" style="text-align:left;">Nous avons déjà couvert le clustering basé sur la distribution auparavant : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/modeles-melange-gaussien-gmm?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=dbscan-passe-ton-clustering-a-l-echelle-superieure" target="_blank"><div class="embed__content"><p class="embed__title"> Comprendre les Modèles de Mélange Gaussien (GMMs) </p><p class="embed__description"> Découvre les Modèles de Mélange Gaussien (GMMs), une alternative puissante à KMeans pour un clustering avancé et robuste des données en machine learning. </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/9df709d1-57f1-48b9-ac4d-0aa7f4e348b4/Mini-cours__5_-_Re%CC%81sultats_de_KMeans_vs_GMM.png?t=1772986383"/></a></div><p class="paragraph" style="text-align:left;">L&#39;objectif de ce mini-cours est donc le <b>clustering basé sur la densité</b>, et plus spécifiquement <b>DBSCAN++</b>, qui est une amélioration significative de l&#39;algorithme DBSCAN classique. </p><p class="paragraph" style="text-align:left;">Comprenons cela en détail ! </p><p class="paragraph" style="text-align:left;">Mais avant de comprendre DBSCAN++, comprenons ce qu&#39;est DBSCAN.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="questce-que-dbscan">Qu&#39;est-ce que DBSCAN ?</h2><p class="paragraph" style="text-align:left;">DBSCAN, qui signifie <i>Density-Based Spatial Clustering of Applications with Noise</i>, est un algorithme populaire en machine learning et data mining. </p><p class="paragraph" style="text-align:left;">Comme son nom l&#39;indique, l&#39;idée centrale derrière DBSCAN est de regrouper les points de données basés sur la &quot;densité&quot;, c&#39;est-à-dire les points proches les uns des autres dans une région à haute densité, séparés par des régions de plus faible densité.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/359b95ca-1b3d-4656-9f6a-05af14ce8139/Mini-cours__24_-_DBSCAN.png?t=1773701482"/></div><p class="paragraph" style="text-align:left;">Il excelle à chercher des zones dans les données avec une forte densité de points, par opposition aux zones peu denses en observations. </p><p class="paragraph" style="text-align:left;">La notion de densité dans DBSCAN lui permet de trier les données en clusters de formes variées également, ce qui est son avantage substantiel sur les algorithmes traditionnels comme KMeans. </p><p class="paragraph" style="text-align:left;">En conséquence, il résout immédiatement chacune des limitations de KMeans discutées plus haut :</p><ul><li><p class="paragraph" style="text-align:left;">Comme il clusterise basé sur la notion de &quot;densité&quot;, les clusters n&#39;ont pas nécessairement une forme globulaire. Ils peuvent avoir des formes arbitraires, comme illustré ci-dessous : </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/359b95ca-1b3d-4656-9f6a-05af14ce8139/Mini-cours__24_-_DBSCAN.png?t=1773701483"/></div><ul><li><p class="paragraph" style="text-align:left;">Contrairement à KMeans, DBSCAN n&#39;alloue pas chaque point à un cluster. C&#39;est parce que DBSCAN opère sur un principe fondamentalement différent. Les outliers sont des régions de très faible densité, et nous verrons bientôt que DBSCAN peut rapidement identifier ces régions et classifier les points s&#39;y trouvant comme des outliers.</p></li><li><p class="paragraph" style="text-align:left;">De plus, un autre avantage est qu&#39;il ne nécessite pas de spécifier le nombre de clusters à l&#39;avance. Il identifie les clusters basés sur la densité des points.</p></li></ul><h3 class="heading" style="text-align:left;" id="comment-a-marche">Comment ça marche ?</h3><p class="paragraph" style="text-align:left;">Parcourons un exemple simple pour comprendre le fonctionnement de l&#39;algorithme.</p><p class="paragraph" style="text-align:left;">Disons que nous avons un dataset de points comme suit :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c126f14d-f6c5-41f3-8bdc-68d310f96db2/Mini-cours__24_-_Jeu_de_donne%CC%81es_d_exemple.png?t=1773704509"/></div><p class="paragraph" style="text-align:left;">Clairement, nous avons deux clusters distincts et un point de bruit au centre. Notre objectif est de regrouper ces points en groupes denséments peuplés.</p><p class="paragraph" style="text-align:left;">Premièrement, nous comptons le nombre de points au voisinage de chaque point de données. Par exemple, si nous commençons avec le point vert, nous dessinons un cercle autour de lui.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3c9aed2a-06e8-47d7-8706-93dbcbf44e68/Mini-cours__24_-_Conside%CC%81rons_ce_point.png?t=1773704562"/></div><p class="paragraph" style="text-align:left;">Le rayon <b>epsilon</b> du cercle est le premier paramètre que nous devons spécifier en utilisant DBSCAN. En d&#39;autres termes, c&#39;est un hyperparamètre.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/bd0cd928-53d0-4b5a-92c7-b5168ae91d7c/Mini-cours__24_-_rayon___epsilon.png?t=1773704602"/></div><p class="paragraph" style="text-align:left;">Après avoir dessiné le cercle, nous comptons le nombre de points qui tombent dans ce cercle de rayon <code>ϵ</code>. Par exemple, pour notre point vert, il y a six points proches.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/22301623-b778-4948-b505-ecc7b9b3ae86/Mini-cours__24_-_le_point_vert_a_6_points_proches_de_lui.png?t=1773704638"/></div><p class="paragraph" style="text-align:left;">De même, nous comptons le nombre de points proches pour tous les points restants.</p><p class="paragraph" style="text-align:left;">Après avoir compté les points au voisinage de chaque donnée, nous classifions chaque point dans l&#39;une des trois catégories :</p><ul><li><p class="paragraph" style="text-align:left;"><b>Point cœur :</b> Un point qui a au moins <code>minPts</code> voisins (incluant le point lui-même) à une distance inférieure ou égale à epsilon. Par exemple, si <code>minPts=5</code>, le point vert ci-dessous est un point cœur : </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f5610743-9c2b-47bd-89e9-8405de79cbb2/Mini-cours__24_-_le_point_vert_a_7_points_proches_de_lui__y_compris_lui-me%CC%82me___c_est_donc_un_point_c%C5%93ur.png?t=1773705355"/></div><ul><li><p class="paragraph" style="text-align:left;"><b>Point frontière :</b> Un point qui n&#39;a pas au moins <code>minPts</code> voisins à distance epsilon, mais qui se trouve dans le voisinage d&#39;un point cœur. Par exemple, ci-dessous, le point vert est un point frontière.</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/7cccd0a2-3d03-4fd2-a593-95ace75b11b6/Mini-cours__24_-_le_point_vert_a_moins_de_5_points_de_donne%CC%81es_proches__mais_il_est_proche_d_un_point_c%C5%93ur.png?t=1773705372"/></div><ul><li><p class="paragraph" style="text-align:left;"><b>Point de bruit (outlier) :</b> Un point qui n&#39;est ni un point cœur ni un point frontière. Par exemple, le point violet ci-dessous est un point de bruit : </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/5bab3cfd-33a9-4dd3-bb86-275e8e939569/Mini-cours__24_-_ni_point_c%C5%93ur_ni_point_frontie%CC%80re.png?t=1773705390"/></div><p class="paragraph" style="text-align:left;">Et bien sûr, comme tu l’as deviné, <code>minPts</code> est un autre hyperparamètre de DBSCAN.</p><p class="paragraph" style="text-align:left;">Après avoir classifié tous les points, nous procédons au clustering.</p><p class="paragraph" style="text-align:left;">L&#39;idée est simple :</p><ul><li><p class="paragraph" style="text-align:left;">Commence avec n&#39;importe quel point cœur (appelons-le A) et assigne-le à un cluster avec un ID, disons 1 (pour commencer). </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/928df3d6-e41f-41d2-bcb9-b46f2a307bdc/Mini-cours__24_-_point_de_donne%CC%81es_A.png?t=1773705430"/></div><ul><li><p class="paragraph" style="text-align:left;">Tous les points dans le voisinage de ce point cœur A appartiendront au même cluster (ID 1). </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/5eefa433-a65b-451a-95fc-2a9f8f9e4f78/Mini-cours__24_-_tous_les_points_a%CC%80_proximite%CC%81_de_A_appartiennent_au_me%CC%82me_cluster.png?t=1773705448"/></div><ul><li><p class="paragraph" style="text-align:left;">Si un point dans le voisinage de A est aussi un point cœur, comme montré ci-dessous... </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/52a15bde-0c40-4eeb-b676-ea96294078de/Mini-cours__24_-_un_autre_point_c%C5%93ur.png?t=1773705468"/></div><ul><li><p class="paragraph" style="text-align:left;">...alors nous incluons les points de <i>son</i> voisinage dans le même cluster (ID 1). </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/49127502-f1f4-4f71-b16d-11de603b891f/Mini-cours__24_-_ces_deux_points_de_donne%CC%81es_sont_ajoute%CC%81s_au_me%CC%82me_cluster.png?t=1773705499"/></div><ul><li><p class="paragraph" style="text-align:left;">L&#39;étape ci-dessus est exécutée récursivement sous le même ID de cluster jusqu&#39;à ce que nous ne trouvions plus de nouveau point cœur. </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/5ea8517e-a19f-4ce9-a68c-3d228932cd37/Mini-cours__24_-_Assigne%CC%81s_au_me%CC%82me_cluster.png?t=1773705518"/></div><ul><li><p class="paragraph" style="text-align:left;">À ce stade, nous pouvons encore avoir des points cœurs dans le dataset, mais ils n&#39;appartiennent pas au cluster précédent. Nous répétons les étapes avec un nouvel ID de cluster.</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2bf4cc5e-2acb-4316-be1e-e3d44130e19e/Mini-cours__24_-_certains_points_c%C5%93ur_restent_ici.png?t=1773705543"/></div><p class="paragraph" style="text-align:left;">L&#39;algorithme termine son exécution une fois qu&#39;il ne reste plus de points cœurs non visités.</p><h3 class="heading" style="text-align:left;" id="comment-trouver-la-valeur-optimale-">Comment trouver la valeur optimale d&#39;Epsilon</h3><p class="paragraph" style="text-align:left;">Dans DBSCAN, déterminer le paramètre <code>epsilon</code> est souvent délicat. Mais la courbe du Coude est souvent utile ici. </p><p class="paragraph" style="text-align:left;">Pour commencer, DBSCAN a deux hyperparamètres :</p><ol start="1"><li><p class="paragraph" style="text-align:left;"><code>epsilon</code> : deux points sont voisins s&#39;ils sont plus proches que cette distance.</p></li><li><p class="paragraph" style="text-align:left;"><code>minPts</code> : le nombre minimum de voisins pour qu&#39;un point soit un &quot;point cœur&quot;.</p></li></ol><p class="paragraph" style="text-align:left;">Nous pouvons utiliser la courbe du Coude pour trouver <code>epsilon</code> : </p><p class="paragraph" style="text-align:left;">Pour chaque point, trace la distance vers son k-ième voisin le plus proche (en ordre croissant), où <code>k</code> est l&#39;hyperparamètre <code>minPts</code>. C&#39;est ce qu&#39;on appelle le <b>k-distance plot</b>. </p><p class="paragraph" style="text-align:left;">La valeur optimale d&#39;<code>epsilon</code> se trouve près du point de coude.</p><p class="paragraph" style="text-align:left;">Pourquoi ça marche ?</p><p class="paragraph" style="text-align:left;">Rappelle-toi que dans ce graphique, nous mesurons la distance vers un voisin spécifique (le k-ième) pour tous les points. Ainsi, le point de coude suggère une distance vers un point plus isolé ou un point dans un cluster différent. </p><p class="paragraph" style="text-align:left;">Le point où le changement est le plus prononcé suggère un epsilon optimal. L&#39;efficacité est évidente sur l&#39;image ci-dessus.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/dd8b315f-8b58-4851-9820-1eda0d3dd9c0/Mini-cours__24_-_Trouver_l_Epsilon_optimal_en_Clustering_DBSCAN.png.png?t=1773750293"/></div><p class="paragraph" style="text-align:left;">Comme illustré, choisir la valeur du coude fournit de meilleurs résultats de clustering.</p><h2 class="heading" style="text-align:left;" id="avantages-de-dbscan">Avantages de DBSCAN</h2><ul><li><p class="paragraph" style="text-align:left;"><b>Clustering basé sur la densité efficace :</b></p><ul><li><p class="paragraph" style="text-align:left;">Intuitivement, DBSCAN excelle à séparer les clusters de haute densité de ceux de faible densité.</p></li><li><p class="paragraph" style="text-align:left;">Il peut identifier des clusters de formes et tailles variées.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Gestion robuste des outliers :</b></p><ul><li><p class="paragraph" style="text-align:left;">DBSCAN est particulièrement adepte pour gérer les outliers.</p></li><li><p class="paragraph" style="text-align:left;">Comme discuté, si un point n&#39;a pas de point cœur proche de lui, il sera intuitivement considéré comme un outlier.</p></li><li><p class="paragraph" style="text-align:left;">En fait, DBSCAN est parfois utilisé principalement comme technique de détection d&#39;anomalies.</p></li><li><p class="paragraph" style="text-align:left;">Il n’est même pas nécessaire d’effectuer un clustering complet pour détecter les outliers ; il suffit de déterminer si un point est un point de bruit en utilisant les paramètres <code>epsilon</code> et <code>minPts</code>.</p></li></ul></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="inconvnients-de-dbscan">Inconvénients de DBSCAN</h2><p class="paragraph" style="text-align:left;">Les algorithmes basés sur la densité ont grandement impacté l&#39;analyse de données (vision par ordinateur, imagerie médicale, etc.). </p><p class="paragraph" style="text-align:left;">Dans de nombreuses applications pratiques, à mesure que les volumes de données augmentent, il devient difficile de collecter des labels pour l&#39;apprentissage supervisé.</p><p class="paragraph" style="text-align:left;"><b>Dans ce contexte, les algorithmes non supervisés non paramétriques deviennent particulièrement importants.</b></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/e88513c8-886f-45ad-ab8a-38f6b28b0f1c/Mini-cours__24_-_Me%CC%81thodes_non-parame%CC%81triques_d_apprentissage_non_supervise%CC%81.png?t=1773750903"/></div><p class="paragraph" style="text-align:left;">Cependant, l&#39;un des plus gros problèmes de DBSCAN est son <b>temps d&#39;exécution</b>.</p><p class="paragraph" style="text-align:left;">Jusqu&#39;à récemment, on pensait que DBSCAN avait un temps d&#39;exécution de O(nlog⁡n), jusqu&#39;à ce qu&#39;il soit prouvé qu&#39;il est de O(n<sup>2</sup> ) dans le pire des cas. </p><p class="paragraph" style="text-align:left;">Il y a donc un besoin croissant de versions plus efficaces de DBSCAN.</p><p class="paragraph" style="text-align:left;">Bien que nous n&#39;entrions pas dans les détails ici, on peut prouver que DBSCAN tourne en O(nlog⁡n) quand la dimension est au maximum de 2, ce qui est rarement le cas.</p><p class="paragraph" style="text-align:left;">Cependant, il commence rapidement à exhiber un comportement quadratique en hautes dimensions et/ou quand n devient grand. </p><p class="paragraph" style="text-align:left;">Cela peut être vérifié sur la figure ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/b9a99abf-e46e-4e6f-995a-1f0ae896a58b/Mini-cours__24_-_Temps_d_exe%CC%81cution_quadratique.png.png?t=1773768530"/></div><p class="paragraph" style="text-align:left;">Dans cette expérience (jeu de données 2D simple avec un nombre de points variable), on observe clairement que le temps d’exécution de DBSCAN croît de manière quadratique avec le nombre de points.</p><p class="paragraph" style="text-align:left;">Ce temps quadratique vient du fait que DBSCAN doit implicitement calculer des estimations de densité pour chaque point, ce qui prend un temps linéaire dans le pire des cas pour chaque requête. </p><p class="paragraph" style="text-align:left;">Comme ces requêtes sont basées sur la proximité pour chaque paire de points, cela donne une performance quadratique.</p><h2 class="heading" style="text-align:left;" id="dbscan">DBSCAN++</h2><p class="paragraph" style="text-align:left;">DBSCAN++ est un pas vers un DBSCAN rapide et scalable.</p><p class="paragraph" style="text-align:left;">Simplement dit, DBSCAN++ est basé sur l&#39;observation que...</p><p class="paragraph" style="text-align:left;">...nous n&#39;avons besoin de calculer les estimations de densité que pour un sous-ensemble <code>m</code> des <code>n</code> points du dataset, où <code>m</code><b> </b>peut être bien plus petit que <code>n</code> (typiquement autour de 10-15% seulement) pour clusteriser correctement.</p><p class="paragraph" style="text-align:left;">Pourquoi ? </p><p class="paragraph" style="text-align:left;">Comprenons cela. </p><div class="paywall"><hr class="paywall__break"/><div class="paywall__content"><h2 class="paywall__header"> La suite de ce mini-cours est réservée aux membres du Cercle des Experts. </h2><p class="paywall__description"> Tu as déjà le début. Pour accéder à l’explication complète et à tous les contenus avancés, rejoins le Cercle des Experts dès maintenant. </p><p class="paywall__links"><a class="paywall__upgrade_link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=dbscan-passe-ton-clustering-a-l-echelle-superieure">Rejoindre le Cercle des Experts</a> Translation missing: en.app.shared.conjuction.or <a class="paywall__login_link" href="https://www.monshotdata.com/login?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=dbscan-passe-ton-clustering-a-l-echelle-superieure">Sign In</a></p><div class="paywall__upsell"><div class="paywall__upsell_header"><h3> En devenant membre, tu débloques </h3></div><ul class="paywall__upsell_features"><li class="paywall__upsell_feature"> L’intégralité de ce mini-cours (sans coupure) </li><li class="paywall__upsell_feature"> Tous les mini-cours archivés et les ressources associées </li><li class="paywall__upsell_feature"> 1 nouveau mini-cours chaque semaine pour progresser en continu </li></ul></div></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=ca0ca0de-2cfd-4b55-b870-fa49f74d152f&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Visualiser l&#39;évolution d&#39;un classement ? Oublie les barres.</title>
  <description>🎯 Shot #291 - Découvre le Bump Chart : L’alternative élégante pour tes données temporelles.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c717a8b5-8eeb-4c7c-934e-1831ee137d8f/_291_-_Graphique_en_barres_vs_Graphique_d_evolution_du_classement.png" length="45292" type="image/png"/>
  <link>https://www.monshotdata.com/p/bump-chart-visualisation-classement-python</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/bump-chart-visualisation-classement-python</guid>
  <pubDate>Mon, 16 Mar 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-03-16T10:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Visualisation De Données]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="image"><img alt="Graphique en barres (bar chart) vs Graphique d&#39;evolution du classement (Bump chart)" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c717a8b5-8eeb-4c7c-934e-1831ee137d8f/_291_-_Graphique_en_barres_vs_Graphique_d_evolution_du_classement.png?t=1773419737"/></div><p class="paragraph" style="text-align:left;">Lorsque tu souhaites visualiser l&#39;évolution d&#39;un rang ou d&#39;un classement au fil du temps, l&#39;utilisation d&#39;un diagramme en barres n&#39;est pas toujours appropriée. <span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Essaye plutôt les </span><b>Graphiques d&#39;évolution du classement</b><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> (ou </span><i>Bump Charts</i><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">).</span></p><p class="paragraph" style="text-align:left;">Ce type de graphique est spécifiquement conçu pour visualiser le rang de différents éléments sur une période donnée. </p><p class="paragraph" style="text-align:left;">Contrairement aux diagrammes en barres classiques, les Bump Charts sont clairs, élégants et faciles à interpréter.</p><hr class="content_break"><p class="paragraph" style="text-align:left;">Retrouve le code Python pour créer un Graphiques d&#39;évolution du classement ici : <a class="link" href="https://github.com/moncoachdata/MonShotData/blob/main/Plotting/Bump-chart.ipynb?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=visualiser-l-evolution-d-un-classement-oublie-les-barres" target="_blank" rel="noopener noreferrer nofollow"><b>Notebook Bump chart</b></a>.</p><p class="paragraph" style="text-align:left;">👉 <b>À toi de jouer :</b> Quelles autres alternatives aux diagrammes en barres recommandes-tu pour ce type de cas ? Dis-le-moi en commentaire :)</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=32cc3206-3b2f-47ed-97e1-4e243c8cfa7d&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Le piège n°1 des fonctions Python (que même les pros oublient)</title>
  <description>🎯 Shot #290- Pourquoi def f(l=[]) ne fait jamais ce que tu penses.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d7055cd0-b06c-4602-8a02-7c3f435c6ee9/_290_-_Parame%CC%80tre_par_de%CC%81faut_mutable.png.png" length="447214" type="image/png"/>
  <link>https://www.monshotdata.com/p/python-piege-arguments-mutables</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/python-piege-arguments-mutables</guid>
  <pubDate>Fri, 13 Mar 2026 09:00:00 +0000</pubDate>
  <atom:published>2026-03-13T09:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Python]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">La <b>mutabilité</b> est probablement l&#39;un des concepts les plus mal compris et sous-estimés en Python.</p><p class="paragraph" style="text-align:left;">Ci-dessous, nous allons examiner un exemple avec lequel de nombreux développeurs Python peinent à se familiariser.</p><p class="paragraph" style="text-align:left;">Considère la fonction suivante : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d6d018e9-2a3b-4464-b45b-56e32f60e8a2/_290_-_Fonction_Python.png.png?t=1772986642"/></div><p class="paragraph" style="text-align:left;">Invoquons-la plusieurs fois : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/fe961d30-950f-4f19-b90c-f80541679913/_290_-_Invocation_de_la_fonction.png.png?t=1772986641"/></div><p class="paragraph" style="text-align:left;"><b>Que s&#39;est-il passé ?</b></p><p class="paragraph" style="text-align:left;">Pourquoi plusieurs appels successifs ajoutent-ils les arguments passés à la même liste ?</p><p class="paragraph" style="text-align:left;">As-tu une idée ?</p><p class="paragraph" style="text-align:left;">Si non, comprenons-le ensemble dès maintenant.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="le-cur-du-problme">Le cœur du problème</h2><p class="paragraph" style="text-align:left;">En Python, les <b>paramètres par défaut d&#39;une fonction sont évalués au moment où la fonction est définie</b>, et non à chaque appel.</p><p class="paragraph" style="text-align:left;">Cela contraste avec d&#39;autres langages comme C++, où les paramètres sont évalués à chaque invocation.</p><p class="paragraph" style="text-align:left;">Ainsi, dès qu&#39;une fonction est définie, l&#39;objet fonction stocke ses paramètres par défaut dans l&#39;attribut <code>__defaults__</code>.</p><p class="paragraph" style="text-align:left;">Nous pouvons le vérifier ci-dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/4ce34cd4-c544-4d06-a55d-9d00598fdef8/_290_-_Parame%CC%80tres_par_de%CC%81faut.png.png?t=1772986642"/></div><p class="paragraph" style="text-align:left;">Dans le code ci-dessus :</p><ul><li><p class="paragraph" style="text-align:left;">Nous avons défini une méthode <code>my_function</code> mais ne l&#39;avons <b>pas encore invoquée</b>.</p></li><li><p class="paragraph" style="text-align:left;">Pourtant, les paramètres par défaut sont <b>déjà accessibles</b> via l&#39;attribut <code>__defaults__</code>.</p></li></ul><p class="paragraph" style="text-align:left;">Cela prouve que les <b>paramètres par défaut d&#39;une fonction sont évalués dès sa définition</b>.</p><p class="paragraph" style="text-align:left;">Par conséquent, si tu spécifies un <b>paramètre par défaut mutable</b> dans une fonction et que tu le modifies, tu altères involontairement et inconsciemment ce paramètre pour tous les appels futurs de cette fonction.</p><p class="paragraph" style="text-align:left;">C&#39;est exactement ce que nous avons observé plus tôt, comme le démontre l&#39;exemple ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d7055cd0-b06c-4602-8a02-7c3f435c6ee9/_290_-_Parame%CC%80tre_par_de%CC%81faut_mutable.png.png?t=1772986642"/></div><p class="paragraph" style="text-align:left;">Comme illustré ci-dessus, au lieu de créer une nouvelle liste à chaque appel, Python continue d&#39;ajouter l&#39;élément à la même copie.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="comment-viter-ce-pige">Comment éviter ce piège ?</h2><p class="paragraph" style="text-align:left;">La solution est simple.</p><p class="paragraph" style="text-align:left;">Évite de spécifier des paramètres par défaut mutables dans la signature d&#39;une fonction.</p><p class="paragraph" style="text-align:left;">À la place, remplace-les par <code>None</code>.</p><p class="paragraph" style="text-align:left;">Ensuite, si la fonction ne reçoit aucune valeur correspondante lors de l&#39;appel, cela crée l&#39;objet mutable à l&#39;intérieur de la fonction.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6bce24e2-f448-45b1-b018-ce4518542486/_290_-_Remplacer_le_parame%CC%80tre_mutable.png?t=1773586756"/></div><p class="paragraph" style="text-align:left;">Comme montré ci-dessus, nous créons une nouvelle liste si la fonction n&#39;a reçu aucune valeur lors de son appel.</p><p class="paragraph" style="text-align:left;">Cela te permet d&#39;éviter le comportement inattendu de mutation du même objet :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2322f0e2-ffde-4def-8e6a-05b94df12f47/_290_-_Re%CC%81invocation_de_la_fonction.png.png?t=1772986642"/></div><hr class="content_break"><p class="paragraph" style="text-align:left;"><b>👉 À toi de jouer : </b>Quelles autres fonctionnalités sournoises de Python connais-tu et que beaucoup ignorent ?</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=a0d04fb2-cca6-4712-aa9a-5e0e75b4a365&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Apprentissage Fédéré : Entraîne l&#39;IA, Sécurise les Données</title>
  <description>👀​ Mini-cours #23 - Le guide pratique pour construire des modèles performants sans compromettre la confidentialité.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/fa20e8e5-e2aa-4906-8a6b-8da7bbef4a51/Mini-cours__23_-_Couverture_Apprentissage_Fe%CC%81de%CC%81re%CC%81.png.png" length="302173" type="image/png"/>
  <link>https://www.monshotdata.com/p/guide-pratique-apprentissage-federe</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/guide-pratique-apprentissage-federe</guid>
  <pubDate>Wed, 11 Mar 2026 10:30:00 +0000</pubDate>
  <atom:published>2026-03-11T10:30:00Z</atom:published>
    <category><![CDATA[Deep Learning]]></category>
    <category><![CDATA[Architectures Et Entraînement En Deep Learning]]></category>
    <category><![CDATA[Machine Learning]]></category>
    <category><![CDATA[Pro]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:#f2eafe;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:2.0px 2.0px 2.0px 2.0px;"><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><b>Psst... Contenu Exclusif Réservé aux Membres !</b></span><br><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Ce mini-cours fait partie de notre espace premium. Rejoins dès maintenant le </span><b>Cercle des Experts</b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> pour débloquer l’intégralité de nos ressources, analyses approfondies et guides pratiques.</span><br><b>👉 </b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Clique ici pour découvrir les avantages et t’inscrire : </span><b><a class="link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=apprentissage-federe-entraine-l-ia-securise-les-donnees" target="_blank" rel="noopener noreferrer nofollow" style="color: rgb(37, 99, 235)">Page d’adhésion</a></b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">.</span></p></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><p class="paragraph" style="text-align:left;"><span style="color:rgb(34, 34, 34);font-family:Poppins, Helvetica, sans-serif, serif, EmojiFont;font-size:16px;">⏱️ </span><i><b>Temps de lecture</b></i><i> : 40-50 minutes</i></p></div><p class="paragraph" style="text-align:left;">Dans de nombreux projets concrets d&#39;apprentissage automatique (Machine Learning - ML), il est courant de consolider les données en un lieu central.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/df4a3bbe-c5b3-44b4-975f-16d49bb05bcd/Mini-cours__23_-_Consolider_les_donne%CC%81es_en_un_lieu_central.png?t=1773153332"/></div><p class="paragraph" style="text-align:left;">Par la suite, les ingénieurs en Machine Learning exploitent ces données centralisées pour :</p><ul><li><p class="paragraph" style="text-align:left;">L&#39;analyse,</p></li><li><p class="paragraph" style="text-align:left;">La réalisation du feature engineering,</p></li><li><p class="paragraph" style="text-align:left;">Et finalement pour l&#39;entraînement du modèle, sa validation, sa mise à l&#39;échelle, son déploiement et sa surveillance continue en production.</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d2b369e4-1ad3-4d7c-9ddc-28a3464f3e90/Mini-cours__23_-_Exploitation_des_donne%CC%81es_centralise%CC%81es.png?t=1773153350"/></div><p class="paragraph" style="text-align:left;">Cette méthode traditionnelle est largement acceptée et employée dans le développement de modèles ML. </p><p class="paragraph" style="text-align:left;">Néanmoins, un défi notable associé à cette approche conventionnelle réside dans l&#39;obligation de centraliser physiquement les données avant qu&#39;aucun traitement ultérieur ne puisse avoir lieu. </p><p class="paragraph" style="text-align:left;">Comprenons les problèmes que cela implique en détail !</p><p class="paragraph" style="text-align:left;"></p><div class="section" style="background-color:#F1F7EF;border-color:#222222;border-radius:5px;border-style:dotted;border-width:1px;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><h2 class="heading" style="text-align:left;">Au programme :</h2><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#les-problmes-de-la-modlisation-ml-t" rel="noopener noreferrer nofollow">Les problèmes de la modélisation ML traditionnelle</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#comment-lapprentissage-fdr-rsout-ce" rel="noopener noreferrer nofollow">Comment l&#39;apprentissage fédéré résout ces préoccup …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#comment-les-systmes-dapprentissage-" rel="noopener noreferrer nofollow">Comment les systèmes d&#39;apprentissage fédéré assure …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#avantages-supplmentaires-de-lappren" rel="noopener noreferrer nofollow">Avantages supplémentaires de l&#39;apprentissage fédér …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#quand-lapprentissage-fdr-estil-appr" rel="noopener noreferrer nofollow">Quand l&#39;apprentissage fédéré est-il approprié ?</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#algorithmes-dapprentissage-fdr" rel="noopener noreferrer nofollow">Algorithmes d&#39;apprentissage fédéré</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#descente-de-gradient-stochastique-f" rel="noopener noreferrer nofollow">Descente de gradient stochastique fédérée (FedSGD)</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#moyenne-fdre-federated-averaging-fe" rel="noopener noreferrer nofollow">Moyenne fédérée (Federated Averaging - FedAvg)</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#implmenter-lapprentissage-fdr" rel="noopener noreferrer nofollow">Implémenter l&#39;apprentissage fédéré</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#importer-les-paquets" rel="noopener noreferrer nofollow">Importer les paquets</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#charger-et-prparer-le-dataset" rel="noopener noreferrer nofollow">Charger et préparer le dataset</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dfinir-un-rseau" rel="noopener noreferrer nofollow">Définir un réseau</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#fonction-dvaluation-du-modle" rel="noopener noreferrer nofollow">Fonction d&#39;évaluation du modèle</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#mise-jour-du-modle-client" rel="noopener noreferrer nofollow">Mise à jour du modèle client</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#agrger-les-mises-jour-des-clients" rel="noopener noreferrer nofollow">Agréger les mises à jour des clients</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#initialiser-le-modle-global-l-optim" rel="noopener noreferrer nofollow">Initialiser le modèle global, l&#39;Optimiseur et la F …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#boucle-dentranement" rel="noopener noreferrer nofollow">Boucle d&#39;entraînement</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#slection-alatoire-de-clients" rel="noopener noreferrer nofollow">Sélection aléatoire de clients</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#comparaison-avec-lentranement-tradi" rel="noopener noreferrer nofollow">Comparaison avec l&#39;entraînement traditionnel</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dfis-lis-aux-donnes-dans-lapprentis" rel="noopener noreferrer nofollow">Défis liés aux données dans l&#39;apprentissage fédéré</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#remde-aux-jeux-de-donnes-non-iid" rel="noopener noreferrer nofollow">Remède aux jeux de données Non-IID</a></p></li></ul></li></ul></div><p class="paragraph" style="text-align:left;"></p><h2 class="heading" style="text-align:left;" id="les-problmes-de-la-modlisation-ml-t">Les problèmes de la modélisation ML traditionnelle</h2><p class="paragraph" style="text-align:left;">Imaginons que notre application possède une base de millions d&#39;utilisateurs. Il est clair que le volume de données à traiter peut être très important. </p><p class="paragraph" style="text-align:left;">Ces données sont précieuses car les appareils modernes ont accès à une richesse d&#39;informations pouvant convenir aux modèles de machine learning.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/e4653d3d-43bf-4910-a9ba-def5b2ef34a7/Mini-cours__23_-_Application_moderne.png?t=1773153388"/></div><p class="paragraph" style="text-align:left;">Ces données peuvent améliorer considérablement l&#39;expérience utilisateur sur l&#39;appareil.</p><p class="paragraph" style="text-align:left;">Par exemple :</p><ul><li><p class="paragraph" style="text-align:left;">S&#39;il s&#39;agit de données textuelles, les modèles de langage peuvent améliorer la reconnaissance vocale et la saisie de texte.</p></li><li><p class="paragraph" style="text-align:left;">S&#39;il s&#39;agit de données d&#39;images, de nombreux modèles de traitement d&#39;images peuvent être améliorés, et bien plus encore.</p></li></ul><p class="paragraph" style="text-align:left;">Cependant, l&#39;approche conventionnelle du Machine Learning, qui implique l&#39;agrégation de toutes les données dans un dépôt central, présente de nombreux défis dans de telles situations. </p><p class="paragraph" style="text-align:left;">Plus spécifiquement, dans cette approche, le transfert des données depuis les appareils individuels des utilisateurs vers un emplacement central est coûteux tant en bande passante qu&#39;en temps, ce qui décourage les utilisateurs de participer.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3faf6849-122a-40b3-8a1e-010b9ee7bad4/Mini-cours__23_-_Temps_et_bande_passante.png?t=1773153404"/></div><p class="paragraph" style="text-align:left;">Même si les utilisateurs étaient incités à contribuer, la redondance d&#39;avoir les données à la fois sur l&#39;appareil de l&#39;utilisateur et sur le serveur central pourrait être logistiquement irréalisable en raison du volume de données à traiter. </p><p class="paragraph" style="text-align:left;">De plus, les données contiennent souvent des informations personnelles telles que des photos, des textes privés et des notes vocales.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d439a75a-d48a-441f-9099-bb45f38ebcdc/Mini-cours__23_-_Donne%CC%81es_prive%CC%81es.png?t=1773153834"/></div><p class="paragraph" style="text-align:left;">Demander aux utilisateurs de télécharger de telles données sensibles met non seulement en péril leur vie privée, mais soulève également des questions juridiques. Stocker ces données dans une base centralisée devient problématique, introduisant des problèmes de faisabilité et des violations de la confidentialité. </p><p class="paragraph" style="text-align:left;">Bref, cela crée des problèmes de stockage centralisé. Simplement dit, cela peut être à la fois irréalisable et source de nombreuses violations de la vie privée. </p><p class="paragraph" style="text-align:left;">Déplacer de grandes quantités de données vers un serveur central peut être coûteux en termes de bande passante utilisateur et de temps. </p><p class="paragraph" style="text-align:left;">Mais ces données nous sont toujours précieuses, n&#39;est-ce pas ? Nous voulons les utiliser d&#39;une manière ou d&#39;une autre. </p><p class="paragraph" style="text-align:left;"><b>L&#39;apprentissage fédéré</b> (<i>Federated Learning</i>) est une technique incroyable d&#39;entraînement de modèles de Machine Learning qui minimise le transfert de données, la rendant adaptée aux environnements à faible bande passante et à forte latence.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/4dcdaa7b-7360-4760-a157-3d7bd5a77905/Mini-cours__23_-_Apprentissage_Fe%CC%81de%CC%81re%CC%81.gif?t=1773221672"/></div><p class="paragraph" style="text-align:left;">Comprenons comment !</p><h3 class="heading" style="text-align:left;" id="comment-lapprentissage-fdr-rsout-ce">Comment l&#39;apprentissage fédéré résout ces préoccupations</h3><p class="paragraph" style="text-align:left;">Formellement, l&#39;apprentissage fédéré représente une approche décentralisée du Machine Learning, où les données d&#39;entraînement restent localisées sur les appareils individuels, tels que les smartphones. </p><p class="paragraph" style="text-align:left;">Au lieu de transmettre les données à un serveur central, les modèles sont envoyés vers les appareils, entraînés localement, et seules les mises à jour résultantes du modèle sont collectées et renvoyées au serveur.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/00501a7b-7bae-45e7-9c27-50d206ae0345/Mini-cours__23_-_Serveur_central.gif?t=1773223092"/></div><p class="paragraph" style="text-align:left;">En essence, cette approche consiste à laisser les données d&#39;entraînement sur les appareils individuels tout en apprenant un modèle partagé via l&#39;agrégation des mises à jour de gradients calculées localement.</p><div class="section" style="background-color:#e8f1fa;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">💡 La terminologie &quot;Apprentissage Fédéré&quot; dérive du concept selon lequel une <b>fédération</b> souple d&#39;appareils participants (appelés clients) collabore avec un serveur central pour résoudre la tâche d&#39;apprentissage.</p></div><p class="paragraph" style="text-align:left;">L&#39;un de ses principaux mérites réside dans l&#39;amélioration de la confidentialité et de la sécurité en éliminant toute dépendance à la collecte centralisée de données. </p><p class="paragraph" style="text-align:left;">Ceci car chaque client possède un dataset d&#39;entraînement local qui reste exclusivement sur l&#39;appareil et n&#39;est jamais téléchargé sur le serveur. </p><p class="paragraph" style="text-align:left;">Au lieu de cela, les clients calculent des mises à jour pour le modèle global maintenu par le serveur, ne transmettant que la &quot;mise à jour du modèle&quot; essentielle.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2c57d3f8-cab3-40ae-bd55-337e3469a1b9/Mini-cours__23_-_les_clients_calculent_des_mises_a%CC%80_jour_pour_le_mode%CC%80le_global_maintenu_par_le_serveur.png?t=1773155683"/></div><p class="paragraph" style="text-align:left;">En conséquence, tout le processus de mise à jour du modèle se déroule côté client, offrant un avantage clé en découplant l&#39;entraînement du modèle de la nécessité d&#39;un accès direct aux données d&#39;entraînement brutes. </p><p class="paragraph" style="text-align:left;">Bien qu&#39;un certain degré de confiance envers le serveur coordinateur soit requis, l&#39;apprentissage fédéré répond efficacement aux préoccupations majeures associées à l&#39;approche centralisée conventionnelle de l&#39;entraînement de modèles ML. </p><p class="paragraph" style="text-align:left;">En facilitant l&#39;entraînement sur l&#39;appareil et en minimisant le besoin de transferts de données massifs, l&#39;apprentissage fédéré présente des solutions pratiques aux défis inhérents au paradigme traditionnel d&#39;entraînement.</p><p class="paragraph" style="text-align:left;">Les motivations principales pour utiliser l&#39;apprentissage fédéré sont :</p><ul><li><p class="paragraph" style="text-align:left;"><b>Confidentialité :</b></p><ul><li><p class="paragraph" style="text-align:left;">La protection des données des utilisateurs est une priorité absolue, d&#39;autant plus que, dernièrement, de plus en plus d&#39;utilisateurs se soucient de leur vie privée.</p></li><li><p class="paragraph" style="text-align:left;">Les dépôts de données centralisés posent des risques inhérents pour la confidentialité, tandis que l&#39;apprentissage fédéré atténue ces préoccupations en permettant aux données de résider exclusivement sur les appareils des utilisateurs, minimisant ainsi l&#39;exposition.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Bande passante et Latence :</b></p><ul><li><p class="paragraph" style="text-align:left;">Comme discuté précédemment, le processus gourmand en ressources de transfert de volumes substantiels de données vers un serveur central peut être coûteux en temps et en bande passante.</p></li><li><p class="paragraph" style="text-align:left;">L&#39;apprentissage fédéré minimise stratégiquement le transfert de données, s&#39;avérant particulièrement avantageux dans les environnements caractérisés par une faible bande passante et une latence élevée.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Propriété des données :</b></p><ul><li><p class="paragraph" style="text-align:left;">Les utilisateurs conservent le contrôle et la propriété de leurs données au sein du cadre de l&#39;apprentissage fédéré.</p></li><li><p class="paragraph" style="text-align:left;">Cela répond non seulement aux préoccupations liées à la propriété des données mais assure également la préservation des droits sur les données, offrant une approche du Machine Learning centrée sur l&#39;utilisateur.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Scalabilité (Mise à l&#39;échelle) :</b></p><ul><li><p class="paragraph" style="text-align:left;">L&#39;apprentissage fédéré présente une scalabilité naturelle qui s&#39;aligne parfaitement avec le nombre croissant d&#39;appareils.</p></li><li><p class="paragraph" style="text-align:left;">Cette scalabilité inhérente le rend bien adapté aux applications à grande échelle, couvrant les appareils mobiles, les objets connectés (IoT) et les scénarios d&#39;informatique en périphérie (edge computing).</p></li></ul></li></ul><p class="paragraph" style="text-align:left;">En résumé, l&#39;apprentissage fédéré représente un changement de paradigme en amenant nos modèles là où résident les données, contrairement à l&#39;approche conventionnelle qui consiste à déplacer les données là où se trouve le modèle. </p><p class="paragraph" style="text-align:left;">Cette inversion du processus traditionnel d&#39;entraînement souligne l&#39;adaptabilité et l&#39;efficacité de l&#39;apprentissage fédéré dans les applications contemporaines pilotées par les données.</p><h3 class="heading" style="text-align:left;" id="comment-les-systmes-dapprentissage-">Comment les systèmes d&#39;apprentissage fédéré assurent-ils la confidentialité ?</h3><p class="paragraph" style="text-align:left;">Certes, à ce stade, on pourrait avancer que l&#39;anonymisation des données avant leur téléchargement sur des serveurs centraux peut répondre aux problèmes de confidentialité. </p><p class="paragraph" style="text-align:left;">Simplement dit, anonymiser signifie supprimer toute information personnellement identifiable (PII) d&#39;un dataset. </p><p class="paragraph" style="text-align:left;">Cela implique généralement de remplacer ou de chiffrer des éléments de données spécifiques pour empêcher l&#39;identification des individus associés à l&#39;information.</p><p class="paragraph" style="text-align:left;">Cependant, contrairement à la croyance populaire, même la manipulation de données anonymisées peut introduire des problèmes de confidentialité. </p><p class="paragraph" style="text-align:left;">Considère un scénario avec une base de données de titulaires de cartes bancaires — un dataset hautement sensible. </p><p class="paragraph" style="text-align:left;">Bien que le masquage des numéros de carte soit une pratique courante, des détails supplémentaires tels que les adresses des titulaires, nécessaires au traitement, peuvent toujours être présentes. </p><p class="paragraph" style="text-align:left;">Ainsi, l&#39;anonymisation du dataset ne garantit pas toujours l&#39;élimination des préoccupations liées à la vie privée.</p><p class="paragraph" style="text-align:left;">L&#39;apprentissage fédéré, en revanche, minimise la transmission d&#39;informations spécifiques aux données vers des emplacements centralisés. Comme discuté ci-dessus, l&#39;information transmise est minime, contenant généralement beaucoup moins de données brutes. </p><p class="paragraph" style="text-align:left;">Dans ce paradigme, seules <b>les mises à jour du modèle</b> sont envoyées au serveur central et, remarquablement, l&#39;algorithme d&#39;agrégation côté serveur ne nécessite pas de connaître la source de ces mises à jour. Ainsi, l&#39;information sur la source peut être entièrement ignorée.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/adf0f246-f333-4477-901f-823fdc4446ca/Mini-cours__23_-_l_anonymisation_du_jeu_de_donne%CC%81es_ne_garantit_pas_toujours_l_e%CC%81limination_des_pre%CC%81occupations_lie%CC%81es_a%CC%80_la_vie_prive%CC%81e.png?t=1773155697"/></div><p class="paragraph" style="text-align:left;">Cette absence de dépendance envers l&#39;information source garantit un véritable anonymat en assurant que les mises à jour de modèle générées localement peuvent être transmises sans révéler aucun autre détail susceptible de compromettre la vie privée de l&#39;utilisateur. </p><p class="paragraph" style="text-align:left;">Cela crée un scénario mutuellement bénéfique.</p><ul><li><p class="paragraph" style="text-align:left;">Les utilisateurs sont satisfaits car leur expérience est pilotée par des modèles ML de haute qualité sans compromettre leurs données.</p></li><li><p class="paragraph" style="text-align:left;">Simultanément, les équipes en bénéficient en résolvant avec succès divers défis, notamment :</p></li></ul><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Préoccupations liées à la confidentialité :</b> L&#39;apprentissage fédéré contourne efficacement les problèmes de confidentialité associés aux approches centralisées traditionnelles.</p></li><li><p class="paragraph" style="text-align:left;"><b>Coût d&#39;entraînement du modèle réduit :</b> L&#39;approche aide à atténuer les coûts associés à l&#39;entraînement centralisé des modèles.</p></li><li><p class="paragraph" style="text-align:left;"><b>Coût de maintenance des données minimisé :</b> L&#39;apprentissage fédéré diminue considérablement le fardeau des coûts de maintenance des données.</p></li><li><p class="paragraph" style="text-align:left;"><b>Entraînement sur de grands jeux de données :</b> Les équipes peuvent entraîner des modèles sur des jeux de données vastes sans avoir besoin de stockage centralisé.</p></li><li><p class="paragraph" style="text-align:left;"><b>Meilleure expérience utilisateur :</b> Malgré l&#39;absence de stockage centralisé des données, des modèles ML de haute qualité peuvent être développés.</p></li></ol><p class="paragraph" style="text-align:left;">En essence, l&#39;apprentissage fédéré offre une solution gagnant-gagnant pour tout le monde.</p><h3 class="heading" style="text-align:left;" id="avantages-supplmentaires-de-lappren">Avantages supplémentaires de l&#39;apprentissage fédéré</h3><h4 class="heading" style="text-align:left;" id="plus-grande-exposition-aux-donnes">Plus grande exposition aux données</h4><p class="paragraph" style="text-align:left;">Dans l&#39;apprentissage fédéré, la portée des données utilisées pour l&#39;entraînement du modèle s&#39;étend au-delà de ce que l&#39;ingénierie des données centralisée aurait pu collecter et gérer.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/e8c944cf-c59f-4af0-8015-ddcee780fd48/Mini-cours__23_-_Plus_grande_exposition_aux_donne%CC%81es.png?t=1773157235"/></div><p class="paragraph" style="text-align:left;">En exploitant tout le spectre des données résidant sur les appareils individuels des utilisateurs, l&#39;apprentissage fédéré permet aux modèles d&#39;apprendre à partir de jeux de données diversifiés et riches. </p><p class="paragraph" style="text-align:left;">Cette diversité améliore la robustesse des modèles, les rendant plus représentatifs des scénarios du monde réel.</p><h4 class="heading" style="text-align:left;" id="bnfice-mutuel">Bénéfice mutuel</h4><p class="paragraph" style="text-align:left;">L&#39;apprentissage fédéré améliore non seulement les modèles grâce à l&#39;entraînement collaboratif, mais étend également les avantages directement aux utilisateurs. </p><p class="paragraph" style="text-align:left;">Lorsque l&#39;appareil d&#39;un utilisateur participe à l&#39;entraînement du modèle, il reçoit des mises à jour basées sur la connaissance collective, améliorant ainsi l&#39;expérience utilisateur. </p><p class="paragraph" style="text-align:left;">Par exemple, dans un système de recommandation personnalisé, un utilisateur bénéficie d&#39;un modèle entraîné sur les préférences d&#39;une base d&#39;utilisateurs plus large, conduisant à des recommandations plus précises et adaptées.</p><h4 class="heading" style="text-align:left;" id="exigences-de-calcul-limites">Exigences de calcul limitées</h4><p class="paragraph" style="text-align:left;">Contrairement aux approches centralisées traditionnelles qui exigent des ressources de calcul substantielles pour le traitement des données et l&#39;entraînement du modèle sur un serveur central, l&#39;apprentissage fédéré redistribue la majeure partie du calcul vers les appareils des utilisateurs.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ea33223a-235d-4204-b77d-67c1f1cffb52/Mini-cours__23_-_L_entrai%CC%82nement_du_mode%CC%80le_ne_se_fait_pas_sur_le_serveur.png?t=1773157254"/></div><p class="paragraph" style="text-align:left;">Ce changement apporte plusieurs avantages :</p><ul><li><p class="paragraph" style="text-align:left;"><b>Charge serveur réduite :</b> Les serveurs centraux nécessitent moins de puissance de calcul car ils n&#39;ont plus besoin de traiter et d&#39;entraîner sur des quantités massives de données.</p></li><li><p class="paragraph" style="text-align:left;"><b>Latence plus faible :</b> Les utilisateurs bénéficient d&#39;une latence réduite puisque les données n&#39;ont pas besoin d&#39;être transmises à un serveur distant pour traitement, améliorant ainsi l&#39;expérience globale.</p></li><li><p class="paragraph" style="text-align:left;"><b>Efficacité énergétique :</b> Le calcul local sur les appareils des utilisateurs peut être plus efficace sur le plan énergétique.</p></li></ul><h3 class="heading" style="text-align:left;" id="quand-lapprentissage-fdr-estil-appr">Quand l&#39;apprentissage fédéré est-il approprié ?</h3><p class="paragraph" style="text-align:left;">Avant de comprendre les stratégies clés de l&#39;apprentissage fédéré, il est essentiel de comprendre que son applicabilité n&#39;est pas universelle. </p><p class="paragraph" style="text-align:left;">Plutôt que de l&#39;adopter partout, il est critique de comprendre les situations spécifiques où l&#39;apprentissage fédéré est l&#39;approche optimale.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/e19b6d39-6ff3-43b0-9139-f8a832d127b4/Mini-cours__23_-_Quand_l_apprentissage_fe%CC%81de%CC%81re%CC%81_est-il_approprie%CC%81__.png?t=1773157584"/></div><p class="paragraph" style="text-align:left;">C&#39;est parce que si tu comprends ces types spécifiques de situations et que tu les rencontres un jour, tu sauras immédiatement que l&#39;apprentissage fédéré est la solution. </p><p class="paragraph" style="text-align:left;">D&#39;après mon expérience, les problèmes idéaux pour l&#39;apprentissage fédéré possèdent les propriétés suivantes : </p><div class="paywall"><hr class="paywall__break"/><div class="paywall__content"><h2 class="paywall__header"> La suite de ce mini-cours est réservée aux membres du Cercle des Experts. </h2><p class="paywall__description"> Tu as déjà le début. Pour accéder à l’explication complète et à tous les contenus avancés, rejoins le Cercle des Experts dès maintenant. </p><p class="paywall__links"><a class="paywall__upgrade_link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=apprentissage-federe-entraine-l-ia-securise-les-donnees">Rejoindre le Cercle des Experts</a> Translation missing: en.app.shared.conjuction.or <a class="paywall__login_link" href="https://www.monshotdata.com/login?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=apprentissage-federe-entraine-l-ia-securise-les-donnees">Sign In</a></p><div class="paywall__upsell"><div class="paywall__upsell_header"><h3> En devenant membre, tu débloques </h3></div><ul class="paywall__upsell_features"><li class="paywall__upsell_feature"> L’intégralité de ce mini-cours (sans coupure) </li><li class="paywall__upsell_feature"> Tous les mini-cours archivés et les ressources associées </li><li class="paywall__upsell_feature"> 1 nouveau mini-cours chaque semaine pour progresser en continu </li></ul></div></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=d2f0de21-6b3d-4cec-9f82-e6f0d1d306e4&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Tes Heatmaps sont illisibles ? L&#39;astuce qui change tout.</title>
  <description>🎯 Shot #289 - Pourquoi la couleur ne suffit pas (et comment la taille nettoie tes graphiques).</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/27a311c4-8f72-4d5f-b0db-033d3ffa0d53/_289_-_Tes_Heatmaps_sont_illisibles___L_astuce_qui_change_tout.png.png" length="612418" type="image/png"/>
  <link>https://www.monshotdata.com/p/astuce-heatmaps-illisibles</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/astuce-heatmaps-illisibles</guid>
  <pubDate>Mon, 09 Mar 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-03-09T10:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Visualisation De Données]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/27a311c4-8f72-4d5f-b0db-033d3ffa0d53/_289_-_Tes_Heatmaps_sont_illisibles___L_astuce_qui_change_tout.png.png?t=1772986641"/></div><p class="paragraph" style="text-align:left;">Les Heatmaps facilitent grandement l&#39;analyse de données. Pourtant, une simple modification peut les rendre encore plus parlantes.</p><p class="paragraph" style="text-align:left;">Une heatmap traditionnelle représente les valeurs via une échelle de couleurs. Cependant, il reste parfois difficile pour l&#39;œil humain d&#39;associer précisément une nuance de couleur à une valeur numérique.</p><p class="paragraph" style="text-align:left;">C&#39;est là qu&#39;intervient l&#39;ajout d&#39;une <b>composante de taille</b>. Le principe est simple : plus la valeur absolue est élevée, plus la taille de la cellule est grande.</p><p class="paragraph" style="text-align:left;">Cette technique est particulièrement efficace pour <b>épurer tes graphiques</b> : les valeurs proches de zéro rétrécissent visuellement, mettant immédiatement en évidence les corrélations fortes sans bruit visuel inutile.</p><p class="paragraph" style="text-align:left;"><b>👉 </b>Consulte le notebook complet pour reproduire cette visualisation :<span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> </span><span style="color:rgb(31, 35, 40);font-family:-apple-system, "system-ui", "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";font-size:16px;"><b><a class="link" href="https://github.com/moncoachdata/MonShotData/blob/main/Plotting/Heatmap-Scatter.ipynb?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=tes-heatmaps-sont-illisibles-l-astuce-qui-change-tout" target="_blank" rel="noopener noreferrer nofollow">Heatmap-Scatter.ipynb</a></b></span></p><p class="paragraph" style="text-align:left;"><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">📚</span> Plus de détails ici : <a class="link" href="https://seaborn.pydata.org/examples/heat_scatter.html?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=tes-heatmaps-sont-illisibles-l-astuce-qui-change-tout" target="_blank" rel="noopener noreferrer nofollow">Documentation Seaborn</a>.</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=d290c5e0-97ff-424a-8ac1-d00e8452b49b&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Clustering sans labels : comment savoir si ton modèle est bon ? </title>
  <description>🎯 Shot #288 - 3 métriques fiables pour valider tes résultats quand tu navigues à l&#39;aveugle.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/9c22e19d-9305-44ad-98c3-532acd18601a/_288_-_Clustering_sans_labels.png.png" length="199283" type="image/png"/>
  <link>https://www.monshotdata.com/p/clustering-sans-labels</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/clustering-sans-labels</guid>
  <pubDate>Fri, 06 Mar 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-03-06T10:00:00Z</atom:published>
    <category><![CDATA[Shot Data]]></category>
    <category><![CDATA[Machine Learning]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Sans données étiquetées, il est impossible d’évaluer objectivement si l’algorithme de clustering a correctement regroupé les points similaires et séparé les points différents.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/87387b56-9412-4c9d-a83b-dd6c292208c1/_288_-_Comment_les_e%CC%81valuer_sans_e%CC%81tiquettes__.png.png?t=1772986642"/></div><p class="paragraph" style="text-align:left;"><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">La plupart des datasets étant multidimensionnels, tu ne peux pas simplement &quot;regarder&quot; le résultat en 2D pour juger.</span></p><p class="paragraph" style="text-align:left;"><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Tu dois t’appuyer sur des </span><b>métriques intrinsèques</b> pour déterminer la qualité du clustering dans de tels cas. </p><p class="paragraph" style="text-align:left;">La façon dont je préfère les utiliser est la suivante :</p><ul><li><p class="paragraph" style="text-align:left;">Supposons que j&#39;utilise KMeans :</p><ul><li><p class="paragraph" style="text-align:left;">Exécuter KMeans avec une plage de valeurs de <code>k</code>.</p></li><li><p class="paragraph" style="text-align:left;">Évaluer les performances.</p></li><li><p class="paragraph" style="text-align:left;">Sélectionner la valeur de <code>k</code> en fonction de la métrique de qualité des clusters la plus prometteuse.</p></li></ul></li></ul><p class="paragraph" style="text-align:left;"><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Voici les 3 méthodes les plus fiables pour ne plus naviguer à l’aveugle.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="1-coefficient-de-silhouette">#1) Coefficient de Silhouette :</h2><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a665d6c5-900a-49e9-9c3c-b040201cd9de/_288_-_Coefficient_de_Silhouette.png.png?t=1772986642"/></div><p class="paragraph" style="text-align:left;">Le Coefficient de Silhouette mesure à quel point chaque point &quot;appartient&quot; bien à son cluster.</p><p class="paragraph" style="text-align:left;"><b>L’intuition est simple :</b> Si la distance moyenne avec les points de son propre cluster est faible, mais que la distance avec le cluster voisin est grande, alors les groupes sont bien séparés.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/9a01d5dc-1747-4880-8145-e65d1ffdb768/_288_-_Se%CC%81paration_des_clusters.png?t=1772209609"/></div><p class="paragraph" style="text-align:left;">Il se mesure comme suit:</p><ul><li><p class="paragraph" style="text-align:left;">Pour chaque point de données:</p><ul><li><p class="paragraph" style="text-align:left;">trouver la distance moyenne à tous les autres points au sein de son cluster → <code>A</code></p></li><li><p class="paragraph" style="text-align:left;">trouver la distance moyenne à tous les points dans le cluster le plus proche → <code>B</code></p></li><li><p class="paragraph" style="text-align:left;">score du point = <code>(B - A) / max(B, A)</code></p></li></ul></li><li><p class="paragraph" style="text-align:left;">Calculer la moyenne de tous les scores individuels pour obtenir le score global du clustering.</p></li></ul><p class="paragraph" style="text-align:left;">Maintenant, considère ceci :</p><ul><li><p class="paragraph" style="text-align:left;">Si, pour tous les points de données, <code>B</code> est bien plus grand que <code>A</code>, cela signifie que:</p><ul><li><p class="paragraph" style="text-align:left;">La distance moyenne vers les points du cluster le plus proche est grande.</p></li><li><p class="paragraph" style="text-align:left;">La distance moyenne vers les points du même cluster est faible.</p></li><li><p class="paragraph" style="text-align:left;"><b>Ainsi, le score global sera proche de 1, indiquant que les clusters sont bien séparés.</b></p></li></ul></li></ul><p class="paragraph" style="text-align:left;">Ainsi, un Coefficient de Silhouette plus élevé signifiera que, de manière générale, tous les points de données s’intègrent dans leurs clusters idéaux. </p><p class="paragraph" style="text-align:left;"><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">C’est l’indicateur idéal pour choisir le bon nombre de clusters (</span><code>k</code><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">).</span></p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/effbed67-9d1d-4062-8a4f-b1d77119c791/_288_-_Courbe_de_coefficient_de_Silhouette.png.png?t=1772986642"/></div><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.monshotdata.com/p/score-de-silhouette-vs-methode-du-coude?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=clustering-sans-labels-comment-savoir-si-ton-modele-est-bon" target="_blank" rel="noopener noreferrer nofollow">Je l’explique ici si tu veux comprendre le Coefficient de Silhouette grâce à des diagrammes.</a></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="2-indice-calinski-harabasz">#2) Indice Calinski-Harabasz</h2><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/161774d6-9810-47d1-942a-676e4db14d70/_288_-_Indice_Calinski.png.png?t=1772986642"/></div><p class="paragraph" style="text-align:left;">L’<a class="link" href="https://scikit-learn.org/stable/modules/clustering.html?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=clustering-sans-labels-comment-savoir-si-ton-modele-est-bon#calinski-harabasz-index" target="_blank" rel="noopener noreferrer nofollow">Indice Calinski-Harabasz</a> est une autre métrique mesurée de façon assez similaire au Coefficient de Silhouette.</p><ul><li><p class="paragraph" style="text-align:left;"><code>A</code> → somme des distances au carré entre tous les centroïdes et le centre global du jeu de données.</p></li><li><p class="paragraph" style="text-align:left;"><code>B</code> → somme des distances au carré entre tous les points et leur centroïde spécifique.</p></li><li><p class="paragraph" style="text-align:left;">La métrique est calculée comme <code>A / B</code> (avec un facteur d’échelle additionnel).</p></li></ul><p class="paragraph" style="text-align:left;">Pourtant, si <code>A</code> est bien plus grand que <code>B</code> :</p><ul><li><p class="paragraph" style="text-align:left;">La distance des centroïdes par rapport au centre du jeu de données est grande.</p></li><li><p class="paragraph" style="text-align:left;">La distance des points par rapport à leur centroïde spécifique est petite.</p></li><li><p class="paragraph" style="text-align:left;"><b>Ainsi, cela aboutira à un score plus élevé, indiquant que les clusters sont bien séparés.</b></p></li></ul><p class="paragraph" style="text-align:left;">La raison pour laquelle je préfère l’Indice Calinski-Harabasz au Coefficient de Silhouette est que : </p><p class="paragraph" style="text-align:left;"><b>Pourquoi je préfère souvent l’Indice Calinski-Harabasz au Coefficient de Silhouette ?</b><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"><b> </b></span></p><p class="paragraph" style="text-align:left;"><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Il est </span><b>beaucoup plus rapide à calculer</b><span style="color:rgb(64, 64, 64);font-family:__sans_af6aac, __sans_Fallback_af6aac, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">. Le coefficient de Silhouette demande de calculer toutes les distances par paires (lourd sur de la Big Data), alors que Calinski-Harabasz est quasi instantané, tout en gardant la même logique d’interprétation.</span></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="3-dbcv">#3) DBCV</h2><p class="paragraph" style="text-align:left;">Attention : La Silhouette et Calinski-Harabasz ont un biais majeur. <b>Ils favorisent les clusters convexes (sphériques).</b></p><p class="paragraph" style="text-align:left;">Si tes données ont des formes arbitraires (comme des croissants ou des cercles concentriques traités par DBSCAN), ces métriques peuvent te donner des résultats trompeurs.</p><p class="paragraph" style="text-align:left;">Regarde cet exemple :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/99080fba-a9a5-4a5d-9dc2-4045dd095c90/_288_-_DBCV.png.png?t=1772986642"/></div><p class="paragraph" style="text-align:left;">Comme montré ci-dessus, même si le clustering par KMeans donne un résultat visuellement moins bon, son score Silhouette reste plus élevé que celui du clustering basé sur la densité.</p><p class="paragraph" style="text-align:left;">Dans ce cas, <b>DBCV</b> (Density-Based Clustering Validation) est une métrique plus pertinente. Comme son nom l’indique, elle est spécialement conçue pour évaluer les clusters basés sur la densité.</p><p class="paragraph" style="text-align:left;">En pratique, DBCV se base sur deux critères :</p><ul><li><p class="paragraph" style="text-align:left;">La densité <b>à l’intérieur</b> d’un cluster</p></li><li><p class="paragraph" style="text-align:left;">Le chevauchement de densité <b>entre</b> les clusters</p></li></ul><p class="paragraph" style="text-align:left;">Un cluster de haute densité et un faible chevauchement entre clusters indiquent un bon clustering.</p><p class="paragraph" style="text-align:left;">L’efficacité de DBCV est également visible sur l’image ci-dessous :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/347347f6-db12-4d94-a9ce-28c6a19f0f33/_288_-_Limites_du_score_de_Silhouette.png.png?t=1772986641"/></div><p class="paragraph" style="text-align:left;">Avec DBCV, KMeans obtient un score inférieur, tandis que le clustering basé sur la densité est mieux noté.</p><hr class="content_break"><p class="paragraph" style="text-align:left;">Avant de conclure, garde à l’esprit qu’il <b>existe d’autres types d’algorithmes de clustering</b>, comme le montre l’image ci-dessous : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/clustering-6-alternatives-kmeans?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=clustering-sans-labels-comment-savoir-si-ton-modele-est-bon" target="_blank"><img class="embed__image embed__image--top" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/c3669961-104e-4cee-a1df-17fc7d33fb4e/_276_-_6_types_d_algorithmes_de_clustering_en_ML.png?t=1769101695"/><div class="embed__content"><p class="embed__title"> 6 alternatives à KMeans : boîte à outils du clustering ML </p><p class="embed__description"> Découvre 6 alternatives puissantes à KMeans pour enrichir tes techniques de clustering en machine learning et optimiser tes algorithmes non supervisés. </p></div></a></div><p class="paragraph" style="text-align:left;">Dans ce shot data, on a exploré l’évaluation par centroïdes et par densité.</p><p class="paragraph" style="text-align:left;">Envie de pousser plus loin ? Découvre le clustering distributionnel et son évaluation avec les Gaussian Mixture Models (GMMs) : </p><div class="embed"><a class="embed__url" href="https://www.monshotdata.com/p/modeles-melange-gaussien-gmm?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=clustering-sans-labels-comment-savoir-si-ton-modele-est-bon" target="_blank"><div class="embed__content"><p class="embed__title"> Comprendre les Modèles de Mélange Gaussien (GMMs) </p><p class="embed__description"> Découvre les Modèles de Mélange Gaussien (GMMs), une alternative puissante à KMeans pour un clustering avancé et robuste des données en machine learning. </p><p class="embed__link"> https://www.monshotdata.com/p/modeles-melange-gaussien-gmm </p></div></a></div><hr class="content_break"><p class="paragraph" style="text-align:left;">👉 À toi: Quelles sont d’autres façons d’évaluer la performance du clustering dans de telles situations?</p><hr class="content_break"></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=6cd0dab0-fcdc-4988-897a-d12460beb453&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Data Version Control (DVC) : Arrête de traiter tes données comme des fichiers</title>
  <description>👀​ Mini-cours #22 - Traite-les comme du Code. Le guide technique pour industrialiser tes projets ML et garantir la reproductibilité de tes modèles.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/81218225-2037-4544-8791-2a99e262b013/Mini-cours__22_-_Ro%CC%82le_du_Data_Version_Control__DVC_.png.png" length="381220" type="image/png"/>
  <link>https://www.monshotdata.com/p/data-version-control-dvc</link>
  <guid isPermaLink="true">https://www.monshotdata.com/p/data-version-control-dvc</guid>
  <pubDate>Wed, 04 Mar 2026 10:00:00 +0000</pubDate>
  <atom:published>2026-03-04T10:00:00Z</atom:published>
    <category><![CDATA[Expériences &amp; Versionnement Du Code]]></category>
    <category><![CDATA[Machine Learning]]></category>
    <category><![CDATA[Pro]]></category>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#f0f7ef; }
  .bh__table_header p { color: #153c4f; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><div class="section" style="background-color:#f2eafe;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:2.0px 2.0px 2.0px 2.0px;"><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><b>Psst... Contenu Exclusif Réservé aux Membres !</b></span><br><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Ce mini-cours fait partie de notre espace premium. Rejoins dès maintenant le </span><b>Cercle des Experts</b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;"> pour débloquer l’intégralité de nos ressources, analyses approfondies et guides pratiques.</span><br><b>👉 </b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">Clique ici pour découvrir les avantages et t’inscrire : </span><b><a class="link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=data-version-control-dvc-arrete-de-traiter-tes-donnees-comme-des-fichiers" target="_blank" rel="noopener noreferrer nofollow" style="color: rgb(37, 99, 235)">Page d’adhésion</a></b><span style="color:rgb(63, 63, 70);font-family:__Figtree_2ca027, __Figtree_Fallback_2ca027, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size:16px;">.</span></p></div><div class="section" style="background-color:transparent;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><p class="paragraph" style="text-align:left;"><span style="color:rgb(34, 34, 34);font-family:Poppins, Helvetica, sans-serif, serif, EmojiFont;font-size:16px;">⏱️ </span><i><b>Temps de lecture</b></i><i> : 45-50 minutes</i></p></div><h2 class="heading" style="text-align:left;" id="introduction">Introduction</h2><h3 class="heading" style="text-align:left;" id="les-bnfices-du-versioning">Les bénéfices du versioning</h3><p class="paragraph" style="text-align:left;">Par exemple, avec le contrôle de version, on peut identifier précisément <b>ce qui a changé</b>, <b>quand cela a changé</b>, et <b>qui a effectué le changement</b>. C’est une information cruciale lorsqu’on essaie de diagnostiquer et de corriger des problèmes survenant lors du déploiement, ou si les modèles commencent à sous-performer après leur mise en production.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c6dd6d5d-7bdc-4ac8-ab2f-2464583a8d05/Mini-cours__22_-_Contro%CC%82le_de_Version.png?t=1772317523"/></div><p class="paragraph" style="text-align:left;">Un autre avantage du contrôle de version est la <b>collaboration efficace</b>. </p><p class="paragraph" style="text-align:left;">Par exemple, un membre de l&#39;équipe peut travailler sur l&#39;identification de meilleures features pour le modèle, tandis qu&#39;un autre peut être responsable du fine-tuning des hyperparamètres ou de l&#39;optimisation de l&#39;infrastructure de déploiement.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d67ac5a1-1d16-4a18-9343-a1d8f1705316/Mini-cours__22_-_Collaboration_efficace.png?t=1772317535"/></div><p class="paragraph" style="text-align:left;">Et c&#39;est bien connu : avec le contrôle de version, les équipes peuvent travailler sur la même base de code/données et améliorer les mêmes modèles sans interférer avec le travail des uns et des autres. </p><p class="paragraph" style="text-align:left;">De plus, on peut facilement suivre les modifications, revoir le travail de chacun et résoudre les conflits (s&#39;il y en a). </p><p class="paragraph" style="text-align:left;">Enfin, le contrôle de version aide aussi à la <b>reproductibilité d&#39;une expérience</b>. </p><p class="paragraph" style="text-align:left;">Il garantit que les résultats peuvent être répliqués et validés par d&#39;autres, ce qui améliore la crédibilité globale de notre travail.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/508c5225-cc11-4da9-af7e-39ac54674fe4/Mini-cours__22_-_Reproductibilite%CC%81_d_une_expe%CC%81rience.png?t=1772317554"/></div><p class="paragraph" style="text-align:left;">Le contrôle de version nous permet de suivre la version exacte du code et des configurations utilisées pour produire un résultat particulier, rendant plus facile la reproduction des résultats dans le futur. </p><p class="paragraph" style="text-align:left;">Cela devient particulièrement utile pour les projets data open-source que de nombreux programmeurs peuvent utiliser.</p><p class="paragraph" style="text-align:left;"><b>CEPENDANT !</b></p><h3 class="heading" style="text-align:left;" id="les-piliers-de-la-reproductibilit-d">Les piliers de la reproductibilité des modèles</h3><p class="paragraph" style="text-align:left;">Laisse-moi te poser une question :</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">En d&#39;autres termes, est-ce que ce sont les seules exigences pour garantir la reproductibilité d&#39;un modèle ?</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8076fd56-8a98-4bc2-aafa-de1da06aedf7/Mini-cours__22_-_Reproductibilite%CC%81_du_Mode%CC%80le.png?t=1772318954"/></div><p class="paragraph" style="text-align:left;">Quand nous voulons reproduire un modèle :</p><ul><li><p class="paragraph" style="text-align:left;">Premièrement, nous avons besoin de la <b>version exacte du code</b> qui a été utilisé pour entraîner le modèle.</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/ed1ad691-92b7-43a5-982e-0d9a8b396a3e/Mini-cours__22_-_Code.png?t=1772318967"/></div><p class="paragraph" style="text-align:left;">Nous avons accès au code via le versioning de code (Git).</p><ul><li><p class="paragraph" style="text-align:left;">Ensuite, nous avons besoin de la <b>configuration exacte</b> avec laquelle le modèle a été entraîné : </p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/21fbf910-11f4-4899-ba87-e052a6e7b8e5/Mini-cours__22_-_Config.png?t=1772319001"/></div><p class="paragraph" style="text-align:left;">Cela peut inclure la graine aléatoire (random seed), le learning rate, l&#39;optimiseur, etc.</p><p class="paragraph" style="text-align:left;">Typiquement, les configurations font partie du code, donc nous connaissons aussi la configuration via le versioning de code.</p><ul><li><p class="paragraph" style="text-align:left;">Enfin, nous avons besoin du <b>modèle entraîné</b> pour comparer sa performance avec le modèle reproduit.</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/5ccb91ac-fa95-4d38-8b41-f0ab1efcca18/Mini-cours__22_-_Mode%CC%80le_pre%CC%81-entrai%CC%82ne%CC%81.png?t=1772319024"/></div><p class="paragraph" style="text-align:left;">Nous avons accès au modèle également via le versioning de modèle (MLflow, etc.).</p><p class="paragraph" style="text-align:left;"><b>Mais comment pourrions-nous entraîner le modèle sans avoir accès au dataset exact qui a été utilisé à l&#39;origine ?</b> </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c37db91c-7eb6-43e4-a10f-87bec61ba14b/Mini-cours__22_-_Donne%CC%81es.png?t=1772319043"/></div><p class="paragraph" style="text-align:left;">En fait, au fil des mises à jour du modèle, nos données peuvent aussi largement varier. </p><p class="paragraph" style="text-align:left;">Ainsi, il devient important de suivre la <b>version exacte du dataset</b> qui a été utilisée à une étape spécifique du développement et du déploiement du modèle. </p><p class="paragraph" style="text-align:left;">C&#39;est précisément tout l&#39;objet du <b>Data Version Control</b>.</p><p class="paragraph" style="text-align:left;"></p><div class="section" style="background-color:#F1F7EF;border-color:#222222;border-radius:5px;border-style:dotted;border-width:1px;margin:0.0px 0.0px 0.0px 0.0px;padding:0.0px 0.0px 0.0px 0.0px;"><h2 class="heading" style="text-align:left;">Au programme : </h2><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#motivation-pour-le-data-version-con" rel="noopener noreferrer nofollow">Motivation pour le Data Version Control</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#1-reproductibilit" rel="noopener noreferrer nofollow">#1) Reproductibilité</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#2-traabilit" rel="noopener noreferrer nofollow">#2) Traçabilité</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#3-collaboration-et-partage-de-donne" rel="noopener noreferrer nofollow">#3) Collaboration et partage de données</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#4-efficacit" rel="noopener noreferrer nofollow">#4) Efficacité</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#5-contrle-qualit-des-donnes" rel="noopener noreferrer nofollow">#5) Contrôle qualité des données</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#6-gouvernance-des-donnes-et-conform" rel="noopener noreferrer nofollow">#6) Gouvernance des données et conformité</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#7-rollback-facile" rel="noopener noreferrer nofollow">#7) Rollback facile</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#considrations-pour-le-data-version-" rel="noopener noreferrer nofollow">Considérations pour le Data Version Control</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#pourquoi-git-nest-pas-une-solution-" rel="noopener noreferrer nofollow">Pourquoi Git n&#39;est pas une solution idéale pour le …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#exigences-idales-pour-un-systme-de-" rel="noopener noreferrer nofollow">Exigences idéales pour un système de Data Version …</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#comment-fonctionne-dvc" rel="noopener noreferrer nofollow">Comment fonctionne DVC ?</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#versionner-les-donnes-avec-dvc" rel="noopener noreferrer nofollow">Versionner les Données avec DVC</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#data-pull-avec-dvc" rel="noopener noreferrer nofollow">Data pull avec DVC</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#versionner-les-datasets" rel="noopener noreferrer nofollow">Versionner les datasets</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#pousser-vers-git-hub-push" rel="noopener noreferrer nofollow">Pousser vers GitHub (Push)</a></p></li></ul></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#astuces-dvc-et-ides-reues" rel="noopener noreferrer nofollow">Astuces DVC et idées reçues</a></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dvc-nest-pas-un-systme-de-contrle-d" rel="noopener noreferrer nofollow">DVC n&#39;est pas un système de contrôle de version</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#configurer-le-cache-dvc" rel="noopener noreferrer nofollow">Configurer le cache DVC</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#dterminer-les-fichiers-suivis-par-d" rel="noopener noreferrer nofollow">Déterminer les fichiers suivis par DVC</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#tlcharger-un-fichier-de-donnes" rel="noopener noreferrer nofollow">Télécharger un fichier de données</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="#tlcharger-un-fichier-de-donnes-avec" rel="noopener noreferrer nofollow">Télécharger un fichier de données avec les informa …</a></p></li></ul></li></ul></div><p class="paragraph" style="text-align:left;"></p><h2 class="heading" style="text-align:left;" id="motivation-pour-le-data-version-con">Motivation pour le Data Version Control</h2><p class="paragraph" style="text-align:left;">La motivation pour maintenir un système de Data Version Control en place est assez intuitive et directe. </p><p class="paragraph" style="text-align:left;">Typiquement, tous les modèles de Machine Learning du monde réel sont entraînés en utilisant de grands datasets. </p><p class="paragraph" style="text-align:left;">Avant d&#39;entraîner un modèle et même pendant son développement, de nombreuses transformations sont régulièrement appliquées au dataset.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/479e8556-18f3-41f6-a9c9-faf0354f29cf/Mini-cours__22_-_Diffe%CC%81rentes_versions_des_datasets.png?t=1772363577"/></div><p class="paragraph" style="text-align:left;">Cela peut inclure :</p><ul><li><p class="paragraph" style="text-align:left;">Le pré-traitement (Preprocessing)</p></li><li><p class="paragraph" style="text-align:left;">La transformation</p></li><li><p class="paragraph" style="text-align:left;">Le Feature Engineering</p></li><li><p class="paragraph" style="text-align:left;">La tokenisation, et bien plus encore.</p></li></ul><p class="paragraph" style="text-align:left;">À mesure que le nombre de mises à jour (ou d&#39;itérations) du modèle augmente, il peut devenir assez difficile de suivre quelle version spécifique du dataset a été utilisée pour entraîner le modèle de Machine Learning.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/7aa43bb8-78b6-4d4a-923a-bde341abf628/Mini-cours__22_-_Re%CC%81pertoire_local.png?t=1772363590"/></div><p class="paragraph" style="text-align:left;">Si cela est clair, alors la motivation pour avoir un système de Data Version Control en place devient assez intuitive et simple, car il répond à de nombreux défis spécifiques aux données :</p><h3 class="heading" style="text-align:left;" id="1-reproductibilit">#1) Reproductibilité</h3><p class="paragraph" style="text-align:left;">Avec un système de Data Version Control, nous pouvons reproduire précisément le même dataset d&#39;entraînement pour n&#39;importe quelle version donnée de notre modèle de Machine Learning. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/b0695639-ad11-4a64-ad73-905ffe82e2fe/Mini-cours__22_-_Reproductibilite%CC%81_facile__avec_toutes_les_informations.png?t=1772363608"/></div><p class="paragraph" style="text-align:left;">En suivant et en liant chaque version de dataset à une version spécifique de modèle, nous pouvons facilement recréer les conditions exactes dans lesquelles un modèle a été entraîné, rendant possible la réplication des résultats.</p><h3 class="heading" style="text-align:left;" id="2-traabilit">#2) Traçabilité</h3><p class="paragraph" style="text-align:left;">Comme la traçabilité de la base de code, le Data Version Control permet la traçabilité en documentant l&#39;historique des changements du dataset. </p><p class="paragraph" style="text-align:left;">Il offre une lignée claire de comment le dataset a évolué au fil du temps, incluant des informations sur qui a fait les changements, quand ces changements ont eu lieu, et les raisons derrière ces modifications. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d1035595-b727-4ba6-879e-d0f531833077/Mini-cours__22_-_Historique_complet_du_de%CC%81veloppement_du_mode%CC%80le.png?t=1772363648"/></div><p class="paragraph" style="text-align:left;">Cette traçabilité est cruciale pour comprendre la qualité et l&#39;histoire des données, assurant transparence et responsabilité dans notre pipeline ML.</p><h3 class="heading" style="text-align:left;" id="3-collaboration-et-partage-de-donne">#3) Collaboration et partage de données</h3><p class="paragraph" style="text-align:left;">Dans les projets collaboratifs de Machine Learning, les membres de l&#39;équipe doivent travailler sur les mêmes données, appliquer des transformations et accéder à des versions partagées du dataset. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/40fd369b-94a2-4e77-9e30-05ad52c96b50/Mini-cours__22_-_Accessible_a%CC%80_tous_les_utilisateurs.png?t=1772363670"/></div><p class="paragraph" style="text-align:left;">Le Data Version Control simplifie le partage de données et la collaboration en fournissant un dépôt centralisé pour les datasets. </p><p class="paragraph" style="text-align:left;">Les membres de l&#39;équipe peuvent facilement accéder et se synchroniser avec les dernières versions des données, assurant que tout le monde est sur la même longueur d&#39;onde.</p><h3 class="heading" style="text-align:left;" id="4-efficacit">#4) Efficacité</h3><p class="paragraph" style="text-align:left;">Comme nous le verrons plus loin dans la démo pratique, les systèmes de Data Version Control aident à optimiser le stockage et l&#39;utilisation de la bande passante en employant des techniques telles que :</p><ul><li><p class="paragraph" style="text-align:left;">la déduplication de données</p></li><li><p class="paragraph" style="text-align:left;">la mise en cache (caching) de données</p></li></ul><p class="paragraph" style="text-align:left;">Cela garantit que nous ne gaspillons pas de ressources à stocker des copies redondantes de grands datasets, rendant le stockage et le transfert de données plus efficaces.</p><h3 class="heading" style="text-align:left;" id="5-contrle-qualit-des-donnes">#5) Contrôle qualité des données</h3><p class="paragraph" style="text-align:left;">Il est courant que les datasets subissent des contrôles qualité et des transformations durant leur préparation. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/bc644f8c-c7fd-443f-87c5-1be94600aff4/Mini-cours__22_-_Contro%CC%82les_qualite%CC%81.png?t=1772363806"/></div><p class="paragraph" style="text-align:left;">Le Data Version Control peut aider à identifier des problèmes ou des divergences dans le dataset à mesure qu&#39;il évolue. </p><p class="paragraph" style="text-align:left;">En comparant différentes versions de datasets, nous pouvons repérer des changements inattendus et revenir aux versions précédentes si nécessaire.</p><h3 class="heading" style="text-align:left;" id="6-gouvernance-des-donnes-et-conform">#6) Gouvernance des données et conformité</h3><p class="paragraph" style="text-align:left;">De nombreuses industries et organisations ont des exigences strictes en matière de gouvernance des données et de conformité. </p><p class="paragraph" style="text-align:left;">Le Data Version Control soutient ces besoins en fournissant un historique bien documenté des changements de données, ce qui peut être crucial pour les audits et la conformité réglementaire.</p><h3 class="heading" style="text-align:left;" id="7-rollback-facile">#7) Rollback facile</h3><p class="paragraph" style="text-align:left;">Dans des situations où une nouvelle version de modèle performe moins bien ou rencontre des problèmes inattendus en production, avoir accès aux versions précédentes du dataset permet un rollback facile vers un dataset plus fiable. </p><p class="paragraph" style="text-align:left;">Cela peut être un sauveur dans de nombreuses situations. </p><p class="paragraph" style="text-align:left;"><b>Ici, tu pourrais te demander : </b><b><i>pourquoi un rollback de données serait pertinent pour nous alors que c&#39;est le modèle qui doit être &quot;rollbacké&quot; ?</i></b><b> </b></p><p class="paragraph" style="text-align:left;">Tu as raison. </p><p class="paragraph" style="text-align:left;">Mais il y a des situations où le rollback de données est utile. </p><p class="paragraph" style="text-align:left;">Par exemple, supposons que ton modèle de Machine Learning déployé soit un modèle k-nearest neighbor (kNN).</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d94a57e9-45ad-4ec4-9476-6149904d6036/Mini-cours__22_-_Mode%CC%80le_kNN.png?t=1772363846"/></div><p class="paragraph" style="text-align:left;"><b>Le truc, c&#39;est que nous n&#39;entraînons jamais vraiment un kNN. </b></p><p class="paragraph" style="text-align:left;">En fait, il n&#39;y a pas de poids explicitement entraînés dans le cas d&#39;un kNN. Au lieu de cela, il n&#39;y a que le dataset d&#39;entraînement qui est utilisé à des fins d&#39;inférence.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/81dad119-e6e9-4dc7-99aa-e8c10e01fbe6/Mini-cours__22_-_Dataset_d_entrai%CC%82nement.png?t=1772363860"/></div><p class="paragraph" style="text-align:left;">Il n&#39;y a pas de distinction entre le modèle et les données : le modèle, c&#39;est le jeu d&#39;entraînement. Pour prédire, l&#39;algorithme compare simplement les nouveaux points aux instances qu&#39;il a stockées. </p><p class="paragraph" style="text-align:left;">Si quelque chose tourne mal avec ce dataset durant la production, avoir un système de Data Version Control en place peut nous aider à revenir rapidement à un dataset fiable précédent. </p><p class="paragraph" style="text-align:left;">Qu&#39;est-ce qui pourrait mal tourner ?</p><ul><li><p class="paragraph" style="text-align:left;">Peut-être que l&#39;équipe de Data Engineering a arrêté de collecter une feature spécifique à cause d&#39;un problème de conformité.</p></li><li><p class="paragraph" style="text-align:left;">Peut-être qu&#39;il y a eu des erreurs humaines, comme des suppressions accidentelles de données. Cela rendra le kNN caduc.</p></li><li><p class="paragraph" style="text-align:left;">Peut-être qu&#39;il y a eu une corruption de données — Des fichiers ou enregistrements corrompus dus à une panne matérielle, des problèmes réseau ou des bugs logiciels. Cela rendra le kNN caduc.</p></li></ul><p class="paragraph" style="text-align:left;">L&#39;avantage du Data Version Control est que si quelque chose ne va pas avec ce dataset en production, nous pouvons rapidement revenir à une version fiable précédente.</p><p class="paragraph" style="text-align:left;">Pendant ce temps, nous pouvons travailler dans l&#39;environnement de développement pour enquêter sur le problème et décider des prochaines étapes.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="considrations-pour-le-data-version-">Considérations pour le Data Version Control</h2><p class="paragraph" style="text-align:left;">Maintenant que nous avons compris la motivation pour avoir un système de Data Version Control, regardons quelques considérations pour choisir un tel système.</p><h3 class="heading" style="text-align:left;" id="pourquoi-git-nest-pas-une-solution-">Pourquoi Git n&#39;est pas une solution idéale pour le Data Version Control ?</h3><p class="paragraph" style="text-align:left;">Nous savons que Git peut gérer le versioning de n&#39;importe quel type de fichier dans un dépôt Git. Cela peut être du code, des modèles, des datasets, des fichiers de config, etc. </p><p class="paragraph" style="text-align:left;">Ceux-ci peuvent être hébergés sur des dépôts distants comme GitHub avec quelques commandes. </p><p class="paragraph" style="text-align:left;">Donc pour quelqu&#39;un qui utilise GitHub pour héberger ses bases de code, il pourrait être tenté d&#39;étendre la même logique pour versionner ses datasets :</p><ul><li><p class="paragraph" style="text-align:left;">Il peut gérer différentes versions du dataset avec Git localement.</p></li><li><p class="paragraph" style="text-align:left;">Il peut héberger le dépôt sur GitHub (ou d&#39;autres services) pour la collaboration, etc.</p></li></ul><p class="paragraph" style="text-align:left;">La logique derrière cette idée pourrait être que Git peut faire du Data Version Control aussi élégamment qu&#39;il versionne les bases de code. </p><p class="paragraph" style="text-align:left;">Ça semble être une bonne chose à faire, non ? </p><p class="paragraph" style="text-align:left;">Eh bien, non ! </p><p class="paragraph" style="text-align:left;">Rappelle-toi notre objectif. </p><p class="paragraph" style="text-align:left;">Dans la section précédente, nous avons discuté de l&#39;utilisation du Data Version Control pour les systèmes de production. </p><p class="paragraph" style="text-align:left;">Comme les systèmes de production sont bien plus complexes et impliquent de la collaboration, la base de code est typiquement hébergée dans un dépôt distant, comme sur GitHub. </p><p class="paragraph" style="text-align:left;">Mais le problème est que les dépôts GitHub (ou d&#39;autres outils d&#39;hébergement similaires comme GitLab) ont toujours une limite supérieure sur la taille de fichier que nous pouvons pousser vers ces dépôts distants. </p><p class="paragraph" style="text-align:left;">En d&#39;autres termes, GitHub est conçu uniquement pour des scripts de code légers. Cependant, il n&#39;est pas particulièrement bien adapté pour versionner de grands datasets qui dépassent juste quelques Mo en taille. </p><p class="paragraph" style="text-align:left;">Typiquement, dans les projets de Machine Learning, la taille du dataset peut être de l&#39;ordre des Go. Ainsi, il est impossible d&#39;exécuter du Data Version Control avec GitHub. </p><p class="paragraph" style="text-align:left;">En fait, nous pouvons aussi vérifier cela expérimentalement. </p><p class="paragraph" style="text-align:left;">Considère que nous avons le répertoire de projet suivant :</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d3d7cee3-8916-46a5-bd71-39ec66819f5a/Mini-cours__22_-_Code1.png?t=1772460237"/></div><p class="paragraph" style="text-align:left;">Comme montré ci-dessus, le fichier <code>data.csv</code> prend environ 200 Mo d&#39;espace. </p><p class="paragraph" style="text-align:left;">Créons d&#39;abord un dépôt Git local avant de pousser les fichiers vers un dépôt distant hébergé sur GitHub. </p><p class="paragraph" style="text-align:left;">Pour créer un dépôt Git local :</p><ul><li><p class="paragraph" style="text-align:left;">D&#39;abord, nous initialiserons un dépôt git avec <code>git init</code>.</p></li><li><p class="paragraph" style="text-align:left;">Ensuite, nous ajouterons les fichiers à la zone de staging avec <code>git add</code>.</p></li><li><p class="paragraph" style="text-align:left;">Enfin, nous utiliserons <code>git commit</code> pour commiter vers le dépôt local.</p></li></ul><p class="paragraph" style="text-align:left;">Ceci est démontré ci-dessous : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/13c7b391-7b73-4b5a-8bea-a7cdae286d15/Mini-cours__22_-_Code2.png?t=1772460269"/></div><div class="section" style="background-color:#e8f1fa;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">👉 <i>Ceci n&#39;est pas montré ici mais nous ferons de même pour le fichier </i><code>project.py</code><i> également.</i></p></div><p class="paragraph" style="text-align:left;">Tout est bon jusqu&#39;ici. Les changements ont été commités avec succès vers le dépôt git local. </p><p class="paragraph" style="text-align:left;">Nous pouvons vérifier cela en revoyant l&#39;historique des commits du dépôt git local avec la commande <code>git log</code>.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/b1a512f5-13fa-4324-96cd-f4813fbc57b7/Mini-cours__22_-_Code3.png?t=1772460308"/></div><p class="paragraph" style="text-align:left;">Ensuite, essayons de pousser ces changements vers un dépôt GitHub distant. Pour faire cela, nous avons créé un nouveau dépôt sur GitHub – <code>dvc_project</code>.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/dc523de7-a591-4bb7-8fd4-1b3e0b046107/Mini-cours__22_-_Repository_Github_dvc-project.png?t=1772458354"/></div><p class="paragraph" style="text-align:left;">Avant de pousser les fichiers vers le dépôt distant, vérifions aussi si le dépôt git local a des changements non commités en utilisant la commande <code>git status</code> :</p><div class="section" style="background-color:#e8f1fa;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">💡 <i>La commande </i><code>git status</code><i> est utilisée pour vérifier le statut de ton dépôt git. Elle montre l&#39;état de ton répertoire de travail et t’aide à voir tous les fichiers qui sont non suivis par Git, stagés ou non stagés.</i></p></div><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3ca9c4bc-55ab-4697-86a7-86ac9739a84b/Mini-cours__22_-_Code4.png?t=1772460331"/></div><p class="paragraph" style="text-align:left;">La sortie dit que l&#39;arbre de travail est propre (clean). </p><p class="paragraph" style="text-align:left;">Ainsi, nous pouvons commiter ces changements vers le dépôt GitHub distant créé ci-dessus comme suit : </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c17ef8e4-4f52-45ac-98df-670b1622d9cf/Mini-cours__22_-_Code5.png?t=1772460356"/></div><p class="paragraph" style="text-align:left;">Comme discuté plus tôt, les dépôts GitHub ont toujours une limite supérieure sur la taille de fichier que nous pouvons pousser. C&#39;est précisément ce que dit le message d&#39;erreur ci-dessus. </p><p class="paragraph" style="text-align:left;">Pour cette raison, nous ne pouvons utiliser les dépôts GitHub classiques pour le Data Version Control que tant que la taille du dataset est inférieure à quelques Mo, ce qui est rarement le cas. </p><p class="paragraph" style="text-align:left;">Ainsi, nous avons besoin d&#39;un meilleur système de contrôle de version, surtout pour les gros fichiers, qui n&#39;a pas les limitations ci-dessus.</p><div class="section" style="background-color:#f4e9fb;border-radius:8px;margin:0.0px 0.0px 0.0px 0.0px;padding:10.0px 10.0px 10.0px 10.0px;"><p class="paragraph" style="text-align:left;">💡 <i>Avant de continuer, un point critique à noter ici est que tant que nous </i><i><b>travaillons uniquement localement</b></i><i> et souhaitons maintenir un Data Version Control dans nos projets ML personnels, utiliser les fonctionnalités habituelles basées sur git n&#39;est pas un gros problème. Tu peux utiliser Git si tu veux tant que tu gardes tout sur ton ordinateur local. Cependant, versionner de gros fichiers est souvent long avec Git, il est donc recommandé d&#39;utiliser des outils spécifiquement conçus pour de tels usages.</i></p></div><h3 class="heading" style="text-align:left;" id="exigences-idales-pour-un-systme-de-">Exigences idéales pour un système de Data Version Control</h3><p class="paragraph" style="text-align:left;">Un système idéal de Data Version Control doit remplir les exigences suivantes :</p><ul><li><p class="paragraph" style="text-align:left;"><b>Il devrait nous permettre de suivre tous les changements de données comme Git le fait avec les fichiers.</b></p></li></ul><p class="paragraph" style="text-align:left;">Dès que nous faisons un changement (ajout, suppression ou modification de fichiers) dans un dépôt git-initialisé, git peut toujours identifier ces changements. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6913a676-acaf-47c6-8412-82bd3d145e6c/Mini-cours__22_-_Changement_du_dataset_identifie%CC%81.png?t=1772462850"/></div><p class="paragraph" style="text-align:left;">La même chose devrait être vraie pour notre système de Data Version Control.</p><ul><li><p class="paragraph" style="text-align:left;"><b>Il ne devrait pas être limité au suivi des datasets.</b></p></li></ul><p class="paragraph" style="text-align:left;">Comme nous en avons discuté plus haut, GitHub fixe une limite supérieure sur la taille de fichier que nous pouvons pousser. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/77f17758-fb10-43fb-9c14-49dd09b9eeb9/Mini-cours__22_-_Compatibilite%CC%81.png?t=1772462872"/></div><p class="paragraph" style="text-align:left;">Mais les gros fichiers ne se limitent pas nécessairement aux datasets. En fait, les modèles peuvent aussi être volumineux, et pousser des pickles de modèles vers des dépôts GitHub peut être difficile.</p><ul><li><p class="paragraph" style="text-align:left;"><b>Il doit avoir le support pour le &quot;branching&quot; et le &quot;committing&quot;.</b></p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/e6f64a39-9946-4fa2-9d98-4d13c67e2a2a/Mini-cours__22_-_Branching.png?t=1772462912"/></div><p class="paragraph" style="text-align:left;">Comme Git, ce système de Data Version Control doit fournir un support pour créer des branches et des commits.</p><ul><li><p class="paragraph" style="text-align:left;"><b>Sa syntaxe doit être similaire à Git.</b></p><ul><li><p class="paragraph" style="text-align:left;">Bien sûr, c&#39;est optionnel mais bon à avoir.</p></li><li><p class="paragraph" style="text-align:left;">Avoir un système de Data Version Control qui a une syntaxe similaire à git peut simplifier sa courbe d&#39;apprentissage.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Il doit être compatible avec Git.</b></p></li></ul><p class="paragraph" style="text-align:left;">Dans tout projet data-driven, les données, le code et le modèle fonctionnent toujours ensemble.</p><p class="paragraph" style="text-align:left;">Après avoir utilisé le système de Data Version Control, il ne doit pas arriver que nous suivions le code avec Git et que nous gérions ensuite les modèles/datasets avec un outil entièrement non-compatible. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/014940d9-dd5a-44f8-8b62-4d2714dd54c0/Mini-cours__22_-_Git.png?t=1772462949"/></div><p class="paragraph" style="text-align:left;">Ils doivent fonctionner de manière transparente et intégrée pour éviter toute friction inutile.</p><ul><li><p class="paragraph" style="text-align:left;"><b>Il doit avoir des fonctionnalités collaboratives comme Git.</b></p><ul><li><p class="paragraph" style="text-align:left;">Tout comme git rend extrêmement simple pour les équipes de collaborer et travailler ensemble en partageant leur code, le Data Version Control doit aussi promouvoir la collaboration.</p></li></ul></li></ul><p class="paragraph" style="text-align:left;"><b>Alors, que pouvons-nous faire ici ? </b></p><div class="paywall"><hr class="paywall__break"/><div class="paywall__content"><h2 class="paywall__header"> La suite de ce mini-cours est réservée aux membres du Cercle des Experts. </h2><p class="paywall__description"> Tu as déjà le début. Pour accéder à l’explication complète et à tous les contenus avancés, rejoins le Cercle des Experts dès maintenant. </p><p class="paywall__links"><a class="paywall__upgrade_link" href="https://www.monshotdata.com/upgrade?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=data-version-control-dvc-arrete-de-traiter-tes-donnees-comme-des-fichiers">Rejoindre le Cercle des Experts</a> Translation missing: en.app.shared.conjuction.or <a class="paywall__login_link" href="https://www.monshotdata.com/login?utm_source=www.monshotdata.com&utm_medium=newsletter&utm_campaign=data-version-control-dvc-arrete-de-traiter-tes-donnees-comme-des-fichiers">Sign In</a></p><div class="paywall__upsell"><div class="paywall__upsell_header"><h3> En devenant membre, tu débloques </h3></div><ul class="paywall__upsell_features"><li class="paywall__upsell_feature"> L’intégralité de ce mini-cours (sans coupure) </li><li class="paywall__upsell_feature"> Tous les mini-cours archivés et les ressources associées </li><li class="paywall__upsell_feature"> 1 nouveau mini-cours chaque semaine pour progresser en continu </li></ul></div></div></div></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=e4c2735c-9e14-4c60-a41d-42305701df55&utm_medium=post_rss&utm_source=mon_shot_de_data_science">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

  </channel>
</rss>
