<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog post &#8211; Smals Research</title>
	<atom:link href="https://staging.smalsresearch.be/category/blog-post/feed/" rel="self" type="application/rss+xml" />
	<link>https://staging.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Mon, 08 Jun 2026 06:17:00 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://staging.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>Blog post &#8211; Smals Research</title>
	<link>https://staging.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>IA et sécurité du code – Une mise à jour</title>
		<link>https://staging.smalsresearch.be/ia-et-securite-du-code-une-mise-a-jour/</link>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[vulnerability detection]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=29536</guid>

					<description><![CDATA[Il y a presque un an nous avons publié deux articles sur l’IA générative (IAGén) et la sécurité du code et avions conclu en soulignant que la plupart des études que nous avions rencontrées montraient des performances incohérentes et une tendance générale à des taux élevés de faux-positifs dans la détection des failles de sécurité. Mais l’évolution des outils est rapide dans ce domaine. Les agents d’IA ont commencé à découvrir des vulnérabilités dans des logiciels que des décennies de tests automatisés et de revues humaines n’avaient pas détectées.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Il y a presque un an nous avons publié deux articles sur l’IA générative (IAGén) et la sécurité du code [<a href="#_ref1">1</a>], [<a href="#_ref2">2</a>] et nous avions conclu en soulignant que la plupart des études que nous avions rencontrées montraient des performances incohérentes et une tendance générale à des taux élevés de faux-positifs, dans la détection des failles de sécurité. Mais l’évolution des outils est rapide dans ce domaine. Les agents d’IA combinant un modèle de langage avec des outils d’analyse statique, une mémoire, et une forme de «&nbsp;raisonnement&nbsp;» structuré, ont commencé à découvrir des vulnérabilités dans des logiciels que des décennies de tests automatisés et de revues humaines n’avaient pas détectées.</p>



<h1 class="wp-block-heading">Une évolution extrêmement rapide</h1>



<p class="wp-block-paragraph">Dès novembre 2024&nbsp;[<a href="#_ref3">3</a>], puis à nouveau en juillet&nbsp; 2025&nbsp;[<a href="#_ref4">4</a>] le système «&nbsp;Big Sleep&nbsp;» de Google a découvert deux vulnérabilité importantes dans le logiciel SQLite, pourtant très testé et utilisé. En début d’année 2026, la jeune pousse <a href="https://aisle.com/about-us">AISLE</a> est allée plus loin : en utilisant des modèles d’IAGén avec sa propre infrastructure d’analyse, elle a trouvé 12 vulnérabilités «&nbsp;<a href="https://fr.wikipedia.org/wiki/Vuln%C3%A9rabilit%C3%A9_zero-day">zero-day</a>&nbsp;» – dont une faille critique&nbsp;[<a href="#_ref5">5</a>], ainsi que des bogues remontant à des codes des années 1990&nbsp;– dans &nbsp;la librairie OpenSSL pourtant largement auditée&nbsp;[<a href="#_ref6">6</a>]. AISLE a signalé aussi un grand nombre de vulnérabilités dans plus d’une dizaine de projets établis, notamment Apache, Chromium, Firefox, le noyau Linux, OpenVPN, et Samba. En mars 2025, l’outils «&nbsp;Security Copilot&nbsp;» de Microsoft a découvert des vulnérabilités dans GRUB2 et U-Boot (des chargeurs d’amorçage utilisés par la plupart des systèmes Linux). En août 2025, lors de la compétition «&nbsp;<a href="https://aicyberchallenge.com/">AI Cyber Challenge</a>&nbsp;» organisée par l’agence étatsunienne pour les projets de recherche avancée de défense (DARPA), sept systèmes d’IA y ont travaillé de manière autonome sur 54 millions de lignes de code, ont trouvé la majorité des vulnérabilités synthétiques insérées, et ont révélé 18 bogues jusqu’alors inconnus [<a href="#_ref7">7</a>], [<a href="#_ref8">8</a>].</p>



<p class="wp-block-paragraph">Ces démonstrations, certes impressionnantes, tiennes plus à l’infrastructure mise en place autour de l’IAGén (les intégrations d’outils, les connexions aux logiciels d’analyse statique existants, les boucles de planification itératives) qu’aux performances brutes des modèles&nbsp;[<a href="#_ref2">2</a>]&nbsp;: ce qui est donc déterminant ici, est la conception du système, plutôt que la capacité du modèle en soi.</p>



<p class="wp-block-paragraph">À la conférence « <a href="https://www.cyberseceurope.com/">CyberSec Europe 2026</a> », en plus du mot « souveraineté » qui continuait d’être répété de puis la conférence précédente, le mot « Mythos » a fait son apparition après le coup de marketing magistral de la société Anthropic [<a href="#_ref9">9</a>], [<a href="#_ref10">10</a>], qui n&#8217;en est d&#8217;ailleurs pas à son premier [<a href="#_ref11">11</a>]. En effet, en  7 avril 2026, dans son annonce de la mise à disposition de « Claude Mythos Preview » réservée à quelques entreprises triées sur le volet, la société Anthropic affirmait que Mythos avait identifié de manière autonome des milliers de vulnérabilités « zero-day » dans des infrastructures logicielles critiques, découvert un vieux bogue OpenBSD, et été capable d’enchaîner quatre vulnérabilités pour créer une exploitation de navigateur fonctionnelle. Les études indépendantes sont pour le moment quasiment inexistante et seul l’Institut britannique de sécurité de l’IA (AISI) – un organisme gouvernemental chargé d’évaluer les systèmes d’IA avant et après leur déploiement – a pu évaluer Mythos Preview et a confirmé qu’il pouvait, dans 3 cas sur 10, mener à bien une simulation d’attaque en plusieurs étapes sur un réseau d’entreprise – un scénario estimé à 20 heures de travail pour un professionnel humain qualifié [<a href="#_ref12">12</a>], [<a href="#_ref13">13</a>].</p>



<p class="wp-block-paragraph">Mais ces découvertes ne sont pas uniques à Mythos. Les vulnérabilités découvertes par Mythos, ont pu aussi être trouvées par la société AISLE en utilisant des modèles moins couteux et de plus petite taille, dont les poids sont publics et pouvant être exécutés sur du matériel grand public [<a href="#_ref10">10</a>], [<a href="#_ref14">14</a>]. Indépendamment, l’AISI a constaté que le modèle GPT-5.5, était lui-aussi capable de mener à bien une simulation d’attaque sur un réseau d’entreprise [<a href="#_ref15">15</a>]. Lors de son évaluation, l’AISI a également identifié une technique « universelle » pour contourner les restrictions de sécurité du modèle rappelant que des garde-fous imposant un  comportement au modèle [<a href="#_ref16">16</a>] ne sont probablement pas aussi efficaces que des contraintes architecturales.</p>



<h1 class="wp-block-heading">Suivre la cadence</h1>



<p class="wp-block-paragraph">Face à l’accélération de la découverte de nouvelle vulnérabilité, il devient impératif d’accélérer les pipelines de remédiation logicielle, notamment dans les  composant comportant des dépendances externe critiques [<a href="#_ref17">17</a>]. L’exemple d’OpenSSL en janvier 2026, démontre que l’audit automatisé est désormais un outil à double usage accessible simultanément tant aux chercheurs qu’aux opérateurs criminels et aux acteurs étatiques [<a href="#_ref18">18</a>].</p>



<p class="wp-block-paragraph">Alors que le volume de CVE explose – avec une augmentation de 263 % entre 2020 et 2025 – il risque de saturer les capacité de correction traditionnelles dans la plupart des organisations [<a href="#_ref19">19</a>], [<a href="#_ref20">20</a>]. Dans son annonce Anthropic admettait que moins de 1 % des vulnérabilités trouvées par Mythos avaient été corrigées. Découvrir des vulnérabilités à grande échelle sans les corriger à la même échelle ne fait qu’allonger la liste des expositions, sans améliorer la sécurité. Dans ce contexte, seules les organisations ayant prépositionné une infrastructure de correction autonome et agile parviendront à réduire leurs fenêtre d’exposition, là où les méthodes manuelles ne peuvent plus suivre la cadence imposée par l’IA [<a href="#_ref21">20</a>], [<a href="#_ref21">21</a>].</p>



<p class="wp-block-paragraph">Heureusement, même si les outils d’IA, malgré leurs « hallucinations » [<a href="#_ref22">22</a>], offrent de nombreuses nouvelles possibilité à l’attaque, l’impression qui ressort de conférences comme <a href="https://www.cyberseceurope.com/">CyberSec Europe 2026</a> ou <a href="https://blackhat.com/eu-25/">Black Hat Europe 2025</a> est que la défense semble, pour le moment, conserver l’avantage [<a href="#_ref23">23</a>], [<a href="#_ref24">24</a>]. Le marché des outils de sécurité pour les entreprises murit rapidement et ces outils tentent de faciliter le travail des analystes. Par exemple, l’outil « Security Copilot » de Microsoft, couvre le triage des alertes, l’optimisation des politiques d’accès et les enquêtes sur la sécurité des données et permettrait de réduire de manière important le nombre d’alertes par incident et de résoudre plus rapidement des conflits de politiques de sécurité. Le triage automatisé des alertes issues de la gestion des événement et des informations de sécurité (<a href="https://fr.wikipedia.org/wiki/Security_information_and_event_management">SIEM</a>) via des outils agentique d’orchestration, d’automatisation et de réponse pour la sécurité (<a href="https://fr.wikipedia.org/wiki/SOAR_(s%C3%A9curit%C3%A9_informatique)">SOAR</a>) permettrait de réduire le temps d&#8217;effort par incident de manière significative [<a href="#_ref25">25</a>]. Plus généralement, des études de recherche rapportent des réductions substantielles des faux positifs sur les alertes lorsque l’IAGén est utilisée comme couche de triage contextuel par-dessus les outils traditionnels d’analyse statique [<a href="#_ref26">26</a>].</p>



<p class="wp-block-paragraph">La détection et correction de vulnérabilité, c’est n’est pas le seul impact de l’IA sur la sécurité. L&#8217;automatisation des cyber-attaques par l&#8217;IA permet aux attaquants d&#8217;opérer avec une célérité sans précédent — jusqu&#8217;à 3 600 fois plus vite que les humains — tout en ciblant simultanément un volume bien plus important d&#8217;actifs [<a href="#_ref20">20</a>]. Face à un « rythme opérationnel » où le délai médian d&#8217;exploitation après publication est tombé à seulement 5 jours [<a href="#_ref27">27</a>], les modèles de réponse manuels ou linéaires sont désormais obsolètes et incapables de contenir ces incursions à haute fréquence [<a href="#_ref20">20</a>]. Cette évolution impose une refonte des livrets de réponse aux incidents (« playbooks »).</p>



<p class="wp-block-paragraph">Enfin, l’utilisation de l’IA à des fins (plus ou moins) productives apporte elle aussi son lot de problèmes de sécurité dans les entreprises. Il est important d&#8217;identifier précisément où l’IA opère au sein d’une infrastructure afin de garantir la sécurité des données. Le phénomène de l&#8217;« IA fantôme » (« <a href="https://fr.wikipedia.org/wiki/Shadow_AI">shadow AI</a> ») — défini comme l&#8217;utilisation d&#8217;outils d&#8217;IA sans l&#8217;approbation ou la supervision du service informatique – représente un risque important. Cette exposition inclut des modèles accessibles via des comptes personnels, des fonctionnalités IA intégrées dans des logiciels tiers en tant que service (SaaS) sans achat explicite, ou encore des modèles « open-source » utilisés par des programmeurs en dehors de tout processus de gouvernance [<a href="#_ref28">28</a>]. Une organisation ne peut pas défendre un périmètre qu’elle n’a pas défini, et l&#8217;absence de visibilité actuelle crée des vulnérabilités critiques : environ 91 % des outils d&#8217;IA en entreprise fonctionneraient en dehors du contrôle de la direction du service informatique [<a href="#_ref29">29</a>]. Or, sans un inventaire centralisé et une politique de surveillance continue, les entreprises s&#8217;exposent à des coûts de violation de données nettement plus élevés [<a href="#_ref30">30</a>].</p>



<h1 class="wp-block-heading">Conclusion</h1>



<p class="wp-block-paragraph">Très rapidement les outils de sécurité par IA sont passés de la phase de démonstration de recherche à la pertinence opérationnelle, des deux côtés de la barrière&nbsp;: tandis que les capacités offensives de l’IA ont abaissé la barre pour les acteurs criminels de niveau intermédiaire et permis des campagnes d’intrusion plus évolutives, les applications défensives – triage des alertes, découverte de vulnérabilités, filtrage des faux positifs, tests d’intrusion autonomes – intègrent des fonctionnalités d’IA et apportent des améliorations par rapport aux générations précédentes. La mise en œuvre de flux de travail défensifs augmentés par l’IA marque une transition importante dans l’ingénierie de sécurité.</p>



<p class="wp-block-paragraph">Le défi n’est plus la détection, mais la correction.</p>



<h1 class="wp-block-heading">Références</h1>



<p class="wp-block-paragraph" id="_ref1">[1]          F. A. P. Petitcolas, « L’IA pour améliorer la sécurité du code ? (Partie 1 : sécurité du code généré) », Smals Research, 30 juill. 2025. Disponible sur: <a href="https://staging.smalsresearch.be/ia-pour-ameliorer-securite-du-code-1/">https://staging.smalsresearch.be/ia-pour-ameliorer-securite-du-code-1/</a></p>



<p class="wp-block-paragraph" id="_ref2">[2]          F. A. P. Petitcolas, « L’IA pour améliorer la sécurité du code ? (Partie 2 : détection de vulnérabilités) », Smals Research, 26 août 2025. Disponible sur: <a href="https://staging.smalsresearch.be/ia-pour-ameliorer-securite-du-code-2/">https://staging.smalsresearch.be/ia-pour-ameliorer-securite-du-code-2/</a></p>



<p class="wp-block-paragraph" id="_ref3">[3]          R. Lakshmanan, « Google’s AI Tool Big Sleep Finds Zero-Day Vulnerability in SQLite Database Engine », The Hacker News, 11 nov. 2024. Disponible sur: <a href="https://thehackernews.com/2024/11/googles-ai-tool-big-sleep-finds-zero.html">https://thehackernews.com/2024/11/googles-ai-tool-big-sleep-finds-zero.html</a></p>



<p class="wp-block-paragraph" id="_ref4">[4]          « NVD &#8211; CVE-2025-6965 », NIST &#8211; National Institute of Standards and Technology, juill. 2025. Disponible sur: <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-6965">https://nvd.nist.gov/vuln/detail/CVE-2025-6965</a></p>



<p class="wp-block-paragraph" id="_ref5">[5]          « NVD &#8211; CVE-2025-15467 », CVE-2025-15467, janv. 2026. Disponible sur: <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-15467">https://nvd.nist.gov/vuln/detail/CVE-2025-15467</a></p>



<p class="wp-block-paragraph" id="_ref6">[6]          A. Muanza, « Douze failles de sécurité découvertes dans OpenSSL par une analyse basée sur l’IA », 29 jan. 2026. Disponible sur: <a href="https://www.ictjournal.ch/news/2026-01-29/douze-failles-de-securite-decouvertes-dans-openssl-par-une-analyse-basee-sur-lia">https://www.ictjournal.ch/news/2026-01-29/douze-failles-de-securite-decouvertes-dans-openssl-par-une-analyse-basee-sur-lia</a></p>



<p class="wp-block-paragraph" id="_ref7">[7]          D. DiMolfetta, « DARPA unveils winners of AI challenge to boost critical infrastructure cybersecurity », <em>Nextgov.com</em>, 8 août 2025. Disponible sur: <a href="https://www.nextgov.com/cybersecurity/2025/08/darpa-unveils-winners-ai-challenge-boost-critical-infrastructure-cybersecurity/407337/">https://www.nextgov.com/cybersecurity/2025/08/darpa-unveils-winners-ai-challenge-boost-critical-infrastructure-cybersecurity/407337/</a></p>



<p class="wp-block-paragraph" id="_ref8">[8]          J. Greig, « DARPA announces $4 million winner of AI code review competition at DEF CON », <em>The Record</em>, 9 août 2025. Disponible sur: <a href="https://therecord.media/darpa-ai-code-competition-winner-def-con">https://therecord.media/darpa-ai-code-competition-winner-def-con</a></p>



<p class="wp-block-paragraph" id="_ref9">[9]          B. Vigliarolo, « Anthropic’s bug-hunting Mythos was greatest marketing stunt ever, says cURL creator », The Register, 11 mai 2026. Disponible sur: <a href="https://www.theregister.com/security/2026/05/11/anthropics-bug-hunting-mythos-was-greatest-marketing-stunt-ever-says-curl-creator/5238111">https://www.theregister.com/security/2026/05/11/anthropics-bug-hunting-mythos-was-greatest-marketing-stunt-ever-says-curl-creator/5238111</a></p>



<p class="wp-block-paragraph" id="_ref10">[10]       B. Schneier, « Claude Mythos is mostly “marketing hype” », Schneier on Security, 26 avr. 2026. Disponible sur: <a href="https://www.schneier.com/news/archives/2026/04/claude-mythos-is-mostly-marketing-hype.html">https://www.schneier.com/news/archives/2026/04/claude-mythos-is-mostly-marketing-hype.html</a></p>



<p class="wp-block-paragraph" id="_ref11">[11]       F. Tréguer, « La bonne conscience de la Silicon Valley », Le Monde diplomatique, 1 mai 2026. Disponible sur: <a href="https://www.monde-diplomatique.fr/2026/05/TREGUER/69543">https://www.monde-diplomatique.fr/2026/05/TREGUER/69543</a></p>



<p class="wp-block-paragraph" id="_ref12">[12]       « Our evaluation of Claude Mythos Preview’s cyber capabilities | AISI Work », AI Securty Institute (AISI), avr. 2026. Disponible sur: <a href="https://www.aisi.gov.uk/blog/our-evaluation-of-claude-mythos-previews-cyber-capabilities">https://www.aisi.gov.uk/blog/our-evaluation-of-claude-mythos-previews-cyber-capabilities</a></p>



<p class="wp-block-paragraph" id="_ref13">[13]       L. Folkerts <em>et al.</em>, « Measuring AI agents’ progress on multi-step cyber-attack scenarios », 17 mars 2026, <em>arXiv</em>: arXiv:2603.11214. doi: <a href="https://arxiv.org/abs/2603.11214">10.48550/arXiv.2603.11214</a>.</p>



<p class="wp-block-paragraph" id="_ref14">[14]       « Smaller and cheaper models also managed to discover the same security bugs as Claude Mythos, says AISLE analysis », OfficeChai, 9 avr. 2026. Disponible sur: <a href="https://officechai.com/ai/smaller-and-cheaper-models-also-managed-to-discover-the-same-security-bugs-as-claude-mythos-says-aisle-analysis/">https://officechai.com/ai/smaller-and-cheaper-models-also-managed-to-discover-the-same-security-bugs-as-claude-mythos-says-aisle-analysis/</a></p>



<p class="wp-block-paragraph" id="_ref15">[15]       « Our evaluation of OpenAI’s GPT-5.5 cyber capabilities », AI Security Institute, 30 avr 2026. Disponible sur: <a href="https://www.aisi.gov.uk/blog/our-evaluation-of-openais-gpt-5-5-cyber-capabilities">https://www.aisi.gov.uk/blog/our-evaluation-of-openais-gpt-5-5-cyber-capabilities</a></p>



<p class="wp-block-paragraph" id="_ref16">[16]       B. Vanhalst, « Garde-fous : délimitez votre IA », Smals Research, 27 nov. 2025. Disponible sur: <a href="https://staging.smalsresearch.be/garde-fous-delimitez-votre-ai/">https://staging.smalsresearch.be/garde-fous-delimitez-votre-ai/</a></p>



<p class="wp-block-paragraph" id="_ref17">[17]       « 4th annual software supply chain security report 2026 &#8211; How sophisticated malware, AI, and broken trust are reshaping software security », Reversing Labs, 2026.</p>



<p class="wp-block-paragraph" id="_ref18">[18]       B. Schneier, « AI found twelve new vulnerabilities in OpenSSL », Schneier on Security, 18 fév. 2026. Disponible sur: <a href="https://www.schneier.com/blog/archives/2026/02/ai-found-twelve-new-vulnerabilities-in-openssl.html">https://www.schneier.com/blog/archives/2026/02/ai-found-twelve-new-vulnerabilities-in-openssl.html</a></p>



<p class="wp-block-paragraph" id="_ref19">[19]       « NIST updates NVD operations to address record CVE Growth », NIST, 15 avr. 2026. Disponible sur: <a href="https://www.nist.gov/news-events/news/2026/04/nist-updates-nvd-operations-address-record-cve-growth">https://www.nist.gov/news-events/news/2026/04/nist-updates-nvd-operations-address-record-cve-growth</a></p>



<p class="wp-block-paragraph" id="_ref20">[20]       « The NVD infrastructure crisis: AI discovery overwhelms tracking », CSAI Foundation | Cloud Security Alliance, mai 2026. Disponible sur: <a href="https://labs.cloudsecurityalliance.org/wp-content/uploads/2026/05/CSA_whitepaper_NVD_infrastructure_crisis_AI_vulnerability_discovery_20260504-csa-styled.pdf">https://labs.cloudsecurityalliance.org/wp-content/uploads/2026/05/CSA_whitepaper_NVD_infrastructure_crisis_AI_vulnerability_discovery_20260504-csa-styled.pdf</a></p>



<p class="wp-block-paragraph" id="_ref21">[21]       « Reddit taps Fleet’s autonomous patching to slash vulnerability exposure », MarketChameleon.com. Consulté le: 27 mai 2026. Disponible sur: <a href="https://marketchameleon.com/articles/b/2026/5/15/reddit-autonomous-patch-fleet-ai-cybersecurity">https://marketchameleon.com/articles/b/2026/5/15/reddit-autonomous-patch-fleet-ai-cybersecurity</a></p>



<p class="wp-block-paragraph" id="_ref22">[22]       « Disrupting the first reported AI-orchestrated cyber espionage campaign », Anthropic, nov. 2025. Disponible sur: <a href="https://www-cdn.anthropic.com/d7dd50dd1185f59be051b307150d877f2b82bd2c.pdf">https://www-cdn.anthropic.com/d7dd50dd1185f59be051b307150d877f2b82bd2c.pdf</a></p>



<p class="wp-block-paragraph" id="_ref23">[23]       D. O’Brien et P. Miller, « Black Hat Europe 2025: Inside the defender’s AI advantage », Security.com, 15 jan. 2026. Disponible sur: <a href="https://www.security.com/expert-perspectives/inside-defenders-ai-advantage">https://www.security.com/expert-perspectives/inside-defenders-ai-advantage</a></p>



<p class="wp-block-paragraph" id="_ref24">[24]       Discussions privées à CyberSec Europe 2026, mai 2026.</p>



<p class="wp-block-paragraph" id="_ref25">[25]       TrendAI, « Experience the AI security revolution », 22 mai 2026.</p>



<p class="wp-block-paragraph" id="_ref26">[26]       X. Du <em>et al.</em>, « Reducing False Positives in Static Bug Detection with LLMs: An Empirical Study in Industry », 26 janvier 2026, <em>arXiv</em>: arXiv:2601.18844. doi: <a href="https://arxiv.org/abs/2601.18844">10.48550/arXiv.2601.18844</a>.</p>



<p class="wp-block-paragraph" id="_ref27">[27]       Rapid7, « Rapid7 2026 global threat landscape rReport shows exploited high and critical-severity vulnerabilities surged 105% as attack timelines collapsed », Rapid7, 18 mars 2026. Disponible sur: <a href="https://www.rapid7.com/about/press-releases/rapid7-2026-global-threat-landscape-report-shows-exploited-high-and-critical-severity-vulnerabilities-surged-105-as-attack-timelines-collapsed/">https://www.rapid7.com/about/press-releases/rapid7-2026-global-threat-landscape-report-shows-exploited-high-and-critical-severity-vulnerabilities-surged-105-as-attack-timelines-collapsed/</a></p>



<p class="wp-block-paragraph" id="_ref28">[28]       J. Kisielius, « Shadow AI in IBM’s 2025 cost of a data breach report », 8 oct. 2025. Disponible sur: <a href="https://www.nudgesecurity.com/post/shadow-ai-the-emerging-security-threat-in-ibms-2025-cost-of-a-data-breach-report">https://www.nudgesecurity.com/post/shadow-ai-the-emerging-security-threat-in-ibms-2025-cost-of-a-data-breach-report</a></p>



<p class="wp-block-paragraph" id="_ref29">[29]       « The invisible enterprise: shadow AI and the ungoverned frontier », Lab Space, 2 avr. 2026. Disponible sur: <a href="https://labs.cloudsecurityalliance.org/research/csa-whitepaper-shadow-ai-asset-blindness-systemic-risk-20260/">https://labs.cloudsecurityalliance.org/research/csa-whitepaper-shadow-ai-asset-blindness-systemic-risk-20260/</a></p>



<p class="wp-block-paragraph" id="_ref30">[30]       L. Kornutick, S. Agarwal, A. Litan, S. Sicular, P. Sundararaman, et S. Palit, « Market guide for AI governance platforms », Gartner, G00837249, nov. 2025. Disponible sur: <a href="https://www.gartner.com/document-reader/document/7145930">https://www.gartner.com/document-reader/document/7145930</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Les jumeaux numériques dans un contexte administratif</title>
		<link>https://staging.smalsresearch.be/jumeaux-numeriques-dans-contexte-administratif/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Fri, 29 May 2026 07:12:26 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Digital Twin]]></category>
		<category><![CDATA[Digitalisation]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[rules]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=29569</guid>

					<description><![CDATA[Le "jumeau numérique" est un concept qui fait le buzz. Mais peut-il également avoir un sens dans un environnement administratif ?]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Dit artikel is ook beschikbaar&nbsp;</em><a href="https://staging.smalsresearch.be/digital-twins-in-administratieve-context/" data-type="post" data-id="24294">in het Nederlands</a><em>.</em></p>



<p class="wp-block-paragraph"><a href="https://ntrs.nasa.gov/citations/20210023699">La NASA</a> affirme avoir été la première à appliquer le concept de <a href="https://www.ibm.com/think/topics/digital-twin">jumeau numérique</a> <em>(&#8220;Digital Twin&#8221;)</em>. Afin de mieux prédire le comportement des objets qu&#8217;elle envoyait dans l&#8217;espace, elle avait besoin d&#8217;une copie sur Terre – non seulement physique, mais aussi numérique. Certains scénarios sont tout simplement difficiles à reproduire sur Terre, mais doivent pouvoir être simulés de manière aussi détaillée que possible.&nbsp; Cette approche s&#8217;est répandue dans d&#8217;autres secteurs, comme l&#8217;aéronautique, où des erreurs de conception pourraient avoir des conséquences catastrophiques, ou encore là où une méthode par essais et erreurs serait trop coûteuse ou pratiquement impossible.&nbsp;&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Le jumeau numérique n&#8217;est toutefois apparu sur le <a href="https://www.forbes.com/sites/gartnergroup/2016/10/26/gartners-top-10-strategic-technology-trends-for-2017/">radar de Gartner</a> qu&#8217;à la fin de l&#8217;année 2016. <a href="https://fr.wikipedia.org/wiki/Jumeau_num%C3%A9rique">La page Wikipédia consacrée à ce sujet</a> est aussi relativement récente, puisqu’elle a été créée en 2015, bien plus tard que celles dédiées à la <a href="https://fr.wikipedia.org/wiki/R%C3%A9alit%C3%A9_virtuelle">réalité virtuelle</a> (2001) et à <a href="https://fr.wikipedia.org/wiki/Internet_des_objets">l’Internet des objets</a> (2007). L&#8217;idée des jumeaux numériques a toutefois rapidement gagné en popularité, aidée en cela par le programme européen Horizon 2020 qui y a vu un potentiel et a financé divers projets sur ce thème à hauteur de plusieurs millions d&#8217;euros (<a href="https://www.horizon-europe.gouv.fr/supporting-development-digital-twin-improve-management-operations-and-resilience-eu-electricity">[1]</a>, <a href="https://www.digitalurbantwins.com/">[2]</a>, <a href="https://www.imec.be/nl/vlaamse-innovatiemotor/impactdomeinen/smart-cities/precinct">[3]</a>, <a href="https://sphere-project.eu/">[4]</a>). En Flandre, cette opportunité a été saisie avec empressement, avec l’<a href="https://www.imec.be/nl/vlaamse-innovatiemotor/samenwerking/vlaamse-onderzoeksprogrammas/city-of-things">IMEC dans un rôle central</a>, soutenu par un <a href="https://www.vlaanderen.be/digitaal-vlaanderen/digitaal-vlaanderen-zet-vaart-achter-europese-digital-twins-en-baant-zo-de-weg-naar-een-citiverse">Digitaal Vlaanderen</a> enthousiaste, sans oublier <a href="https://vito.be/en/research/digital-twins-in-health">VITO</a>, qui est également convaincu.</p>



<p class="wp-block-paragraph">D&#8217;un point de vue marketing, le jumeau numérique a donc déjà fait ses preuves. Mais peut-il apporter une valeur ajoutée concrète aux administrations publiques ? Dans ce domaine également, les flux opérationnels deviennent rapidement complexes, les modifications peuvent s’avérer coûteuses, et l’on souhaite peut-être pouvoir simuler certaines choses avant de les mettre en œuvre. Dans cet article, nous examinerons ce que le jumeau numérique peut apporter dans un contexte administratif.</p>



<h2 class="wp-block-heading">Définitions</h2>



<p class="wp-block-paragraph">Il existe de nombreuses interprétations du jumeau numérique. L&#8217;essence même du concept n&#8217;est en tout cas pas nouvelle : un système est représenté numériquement afin de pouvoir être observé, testé et amélioré sans impact direct sur son fonctionnement réel. La principale caractéristique distinctive est la <strong>synchronisation</strong> continue (ou du moins régulière) entre le système réel (l&#8217;entité cible ou <em>target entity</em>) et son homologue numérique. Le Centre commun de recherche de l’UE adopte un <a href="https://interoperable-europe.ec.europa.eu/sites/default/files/document/2020-06/ELISEWebinar_9_DigitalTwins.pdf">modèle de maturité</a> qui distingue différents niveaux d’intégration ; ce n’est que dans le cas d’un échange bidirectionnel de données entre l’entité cible et le jumeau que l’on parle véritablement de jumeau. À l&#8217;échelle internationale, des efforts sont entrepris pour <a href="https://www.iso.org/standard/81442.html">standardiser la terminologie</a>.</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model.png"><img fetchpriority="high" decoding="async" width="1024" height="643" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model-1024x643.png" alt="" class="wp-image-29555" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model-1024x643.png 1024w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model-300x189.png 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model-768x483.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model.png 1071w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">&#8220;Digital Twin Maturity Spectrum&#8221;. Source: IET &amp; Atkins, &#8220;Digital Twins for the Built Environment&#8221;, 2019.</figcaption></figure>



<p class="wp-block-paragraph">Pour être utile, un jumeau numérique doit être développé avec suffisamment de détails. Le niveau de granularité ou de résolution variera en fonction de l’application. Le jumeau doit pouvoir représenter fidèlement l’entité cible tout au long de son cycle de vie, mais cela ne signifie pas que chaque détail doive être simulé dans les moindres détails. Dans le <a href="https://www.nature.com/articles/s41746-024-01073-0">secteur médical</a>, on voit apparaître des jumeaux numériques au niveau de la <a href="https://www.rfi.ac.uk/focus/projects/digital-twin-cell/">cellule</a>, de l’<a href="https://www.turing.ac.uk/science-innovation/health/cardiac-digital-twins">organe</a>, d’un <a href="https://digital-strategy.ec.europa.eu/en/policies/virtual-human-twins">individu</a> ou de la <a href="https://pubmed.ncbi.nlm.nih.gov/40762974/">population</a>. Rien n’empêche non plus qu’un jumeau numérique ne constitue qu’une partie d’un système plus vaste&nbsp;; il peut, par exemple, n’être élaboré que pour un seul composant critique.</p>



<p class="wp-block-paragraph">On distingue deux courants de jumeaux numériques&nbsp;:</p>



<ul class="wp-block-list">
<li>Les jumeaux technologiques de haut niveau (aéronautique, industrie, infrastructure), où le jumeau est utilisé pour le diagnostic, la maintenance prédictive ou la conception itérative sur la base de données opérationnelles – à la <a href="https://ntrs.nasa.gov/api/citations/20210023699/downloads/ASME%20Digital%20Twin%20Summit%20Keynote_final.pdf">NASA</a>, pour la <a href="https://initiatives.weforum.org/future-power-system/case-study-details/digital-twin-grid/aJYTG00000010pB4AQ">distribution d’électricité</a>&#8230;</li>



<li>Les jumeaux de systèmes d&#8217;information ou sociotechniques (villes, organisations, services), dans lesquels l&#8217;entité cible n&#8217;est pas tant une machine qu&#8217;un système complexe impliquant plusieurs parties prenantes, composé de processus, de règles, de personnes et de flux de données. C&#8217;est dans ce deuxième courant que s&#8217;inscrit le secteur public, mais c&#8217;est aussi là que les <a href="https://interoperable-europe.ec.europa.eu/collection/elise-european-location-interoperability-solutions-e-government/glossary/term/digital-twin-government">définitions deviennent floues</a> et que le &#8220;jumeau numérique&#8221; est parfois utilisé comme <a href="https://eprintspublications.npl.co.uk/9880/">terme marketing pour désigner une structure &#8220;tableau de bord + modèle</a>&#8220;.</li>
</ul>



<p class="wp-block-paragraph">Alors que le flou est peut-être inévitable sur le plan politique, nous souhaitons néanmoins une interprétation plus opérationnelle dans la pratique. Nous pourrions définir un jumeau numérique administratif comme une <strong>représentation numérique de la réalité de la prestation de services, continuellement actualisée et testable</strong>. Cela inclut les processus, les dossiers et leur état d&#8217;avancement, un système applicable des règles en vigueur, ainsi que l&#8217;ensemble des flux de données nécessaires au bon fonctionnement de l&#8217;ensemble. Cela doit permettre de suivre de près la situation actuelle et de simuler à l&#8217;avance les modifications éventuelles avant leur application.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/2026-05-28_15h43_49.png"><img decoding="async" width="603" height="211" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/2026-05-28_15h43_49.png" alt="" class="wp-image-29558" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/2026-05-28_15h43_49.png 603w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/2026-05-28_15h43_49-300x105.png 300w" sizes="(max-width: 603px) 100vw, 603px" /></a><figcaption class="wp-element-caption">Les jumeaux numériques (DT) conceptuellement : données du système cible + moteurs de calcul (= enabler) + applications (= usage). Source: Oakes, Parsai, Van Mierlo, Demeyer, Denil, De Meulenaere, Vangheluwe, &#8220;Improving digital twin experience reports&#8221;, <a href="https://doi.org/10.5220/0010236101790190">DOI: 10.5220/0010236101790190</a></figcaption></figure>



<p class="wp-block-paragraph">Pour un processus industriel piloté par des données de capteurs et les lois immuables de la physique, cela s’avère plus facile que pour le secteur public, où l’on traite souvent des données sensibles et où l’on dépend de règles changeant régulièrement qui laissent place à l’interprétation (voir également nos articles précédemment publiés sur les <a href="https://staging.smalsresearch.be/rules-as-code-fr/">Rules As Code</a>). Les préoccupations liées à la gouvernance des données (<a href="https://eur-lex.europa.eu/eli/reg/2016/679/oj">RGPD</a>, etc.) peuvent compliquer la mise en place d’une synchronisation avec les données en temps réel. La logique décisionnelle est souvent étroitement liée au code des applications, ce qui complique les ajustements et les contrôles de conformité. C&#8217;est pourquoi, dans le contexte public, la mise en place d&#8217;un <a href="https://en.wikipedia.org/wiki/Digital_twin_integration_level"><em>Digital Shadow</em></a>, que l&#8217;on peut situer quelque part entre un &#8220;bête&#8221; modèle et un véritable jumeau synchronisé, constitue souvent déjà un exploit en soi.</p>



<h2 class="wp-block-heading">Projets phares</h2>



<p class="wp-block-paragraph">En Europe, les projets de jumeaux numériques les plus marquants concernent principalement le climat et la science&nbsp;:</p>



<ul class="wp-block-list">
<li><a href="https://destination-earth.eu/">Destination Earth ou DestinE</a> combine des données à grande échelle provenant de <a href="https://www.eumetsat.int/">satellites (météorologiques)</a> et de <a href="https://www.copernicus.eu/">Copernicus</a> dans un <a href="https://destination-earth.eu/destination-earth/destines-components/destination-earth-data-lake/">lac de données</a>. Sur cette base, deux jumeaux numériques ont vu le jour : <a href="https://destine.ecmwf.int/climate-change-adaptation-digital-twin-climate-dt/">Climate Change Adaptation</a> (long terme) et <a href="https://destine.ecmwf.int/weather-induced-extremes-digital-twin/">Weather-induced Extremes</a> (court terme). Pour ce faire, ils ont développé leur propre <a href="https://stories.ecmwf.int/the-digital-twin-engine/">Digital Twin Engine</a>. Le projet se <a href="https://destination-earth.eu/news/destination-earth-moves-into-phase-three/">poursuit</a>, l’objectif étant de faciliter davantage les &#8220;applications en aval&#8221; d’utilisateurs externes qui peuvent approfondir certains aspects ou des questions de recherche spécifiques. Tout cela doit être partagé via <a href="https://platform.destine.eu/">une plateforme</a> unique coordonnée par l’<a href="https://www.esa.int/Applications/Observing_the_Earth/Destination_Earth">ESA</a>.</li>



<li>Le projet <a href="https://www.edito.eu/">EDITO</a> vise à atteindre des objectifs similaires, mais dans le domaine des océans.<br>À cette fin, les données d’<a href="https://emodnet.ec.europa.eu/en">EMODnet</a> et de <a href="https://marine.copernicus.eu/">Copernicus</a> sont mises en commun. L’accès passe par un <a href="https://datalab.dive.edito.eu/">Datalab</a> qui propose également une série d’autres modules et services, et les applications qui y sont développées peuvent être hébergées sur la <a href="https://dive.edito.eu/">plateforme numérique</a> de l’initiative.</li>



<li><a href="https://www.intertwin.eu/use-cases">Plusieurs use cases</a> sont également répertoriés dans le cadre du projet de recherche interTwin, <a href="https://www.intertwin.eu/article/intertwin-has-ended-whats-next">récemment achevé</a> (et <a href="https://cordis.europa.eu/project/id/101058386">financé</a> par l’Union européenne), qui visait à développer une <a href="https://zenodo.org/records/10650440">architecture quelque peu standardisée</a> avec des <a href="https://www.intertwin.eu/intertwin-digital-twin-engine">composants réutilisables</a> pour les jumeaux numériques. Ils ont abordé le sujet plutôt sous l’angle du <a href="https://openlab.cern/intertwin/">CERN</a>, et indépendamment des deux initiatives mentionnées précédemment. Au fil du temps, ils ont toutefois pris conscience de l’existence les uns des autres et une <a href="https://zenodo.org/records/16966835">interopérabilité potentielle</a> avec le projet <a href="https://www.esa.int/Applications/Observing_the_Earth/Destination_Earth">DestinE, lié à l’ESA</a>, a déjà été étudiée.</li>
</ul>



<figure class="wp-block-image aligncenter size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/digital-twin-monitoring.jpg"><img decoding="async" width="621" height="511" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/digital-twin-monitoring.jpg" alt="" class="wp-image-29560" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/digital-twin-monitoring.jpg 621w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/digital-twin-monitoring-300x247.jpg 300w" sizes="(max-width: 621px) 100vw, 621px" /></a><figcaption class="wp-element-caption">Utilisation d&#8217;un jumeau numérique pour la surveillance. Source: Davila Delgada &amp; Oyedele, &#8220;Digital Twins for the built environment: learning from conceptual and process models in manufacturing&#8221;, <a href="https://doi.org/10.1016/j.aei.2021.101332">DOI: 10.1016/j.aei.2021.101332</a></figcaption></figure>



<p class="wp-block-paragraph">Dans un contexte administratif, les données issues de satellites ou d’accélérateurs de particules nous sont moins utiles. En raison des exigences en matière de gouvernance, l’accent est plutôt mis sur une interopérabilité et un échange de données corrects, conformément à tous les cadres juridiques en vigueur. À cet égard, les initiatives européennes les plus utiles sont peut-être encore les <a href="https://digital-strategy.ec.europa.eu/en/policies/data-spaces">Espaces européens des données</a> – pour un &#8220;jumeau politique&#8221;, par exemple, l&#8217;<a href="https://data.europa.eu/en/ELDS">Espace européen des données juridique</a>. Il existe également des points communs avec le concept de bacs à sable réglementaires tel qu’il apparaît notamment dans le <a href="https://eur-lex.europa.eu/EN/legal-content/summary/interoperable-europe-act.html">Règlement pour une Europe interopérable</a> ou, plus récemment, dans la <a href="https://www.europarl.europa.eu/RegData/etudes/BRIE/2022/733544/EPRS_BRI(2022)733544_EN.pdf">législation sur l’intelligence artificielle</a> : un jumeau numérique administratif peut remplir le rôle d’un tel bac à sable s’il existe de bons mécanismes de développement et d’évaluation de scénarios.</p>



<h2 class="wp-block-heading">Use Cases administratifs</h2>



<p class="wp-block-paragraph">Avant de nous lancer dans des secteurs complexes tels que les soins de santé et la sécurité sociale, nous devons tout de même nous demander si les jumeaux numériques peuvent apporter une réelle valeur ajoutée à ce qui existe déjà aujourd’hui – car l&#8217;engouement en soi n’apporte rien.</p>



<h3 class="wp-block-heading">Use Case 1 : Simulation des politiques et de leur impact opérationnel</h3>



<p class="wp-block-paragraph">En matière de modélisation de politiques pour la sécurité sociale, il existe par exemple déjà une base solide avec le modèle de microsimulation <a href="https://joint-research-centre.ec.europa.eu/euromod_en">EUROMOD</a>, dont la variante belge s&#8217;appelle <a href="https://socialsecurity.belgium.be/fr/elaboration-de-la-politique-sociale/impact-assessment-research/belmod">BELMOD</a>. Il s&#8217;agit de microsimulations statiques dans lesquelles des données très détaillées sont combinées à des règles codifiées, permettant de simuler des réformes des paramètres de la sécurité sociale (cotisations, allocations&#8230;). Ces études sont généralement menées dans les <a href="https://cape-saintlouis.be/">universités</a>. On peut se faire une idée de ce que cela implique via <a href="https://euromod-web.jrc.ec.europa.eu/euromod-online/">EUROMOD Online</a>.</p>



<p class="wp-block-paragraph">D&#8217;une certaine manière, ce type de modèle s&#8217;apparente déjà à un jumeau numérique pour la politique sociale, mais il lui manque encore deux éléments essentiels&nbsp;:</p>



<ul class="wp-block-list">
<li>des liens en temps réel avec les données administratives&nbsp;: cela permettrait de simuler les effets budgétaires et distributifs sur la situation actuelle, plutôt que sur des données obsolètes datant de plusieurs années.</li>



<li>des informations sur les processus de prestation de services (délais de traitement des dossiers, capacité de traitement&#8230;)&nbsp;: cela permettrait également d&#8217;évaluer l&#8217;impact opérationnel des réformes sur les services exécutifs.</li>
</ul>



<p class="wp-block-paragraph">Il ne serait pas du tout simple d&#8217;ajouter cela : les données en question sont de nature très sensible. L&#8217;utilisation des données réelles comme source de données en temps réel pour les simulations nécessiterait certainement une anonymisation poussée (conformément au RGPD), en plus d&#8217;une série d&#8217;autres <a href="https://www.ksz-bcss.fgov.be/fr/page/csi-en-bref">mesures de sécurité</a>. Il s&#8217;agit là d&#8217;un exercice complexe en soi, qui pourrait également entraîner la perte d&#8217;informations utiles.</p>



<p class="wp-block-paragraph">Le statut d&#8217;une personne au sein de la sécurité sociale est en outre déterminé par une succession d&#8217;événements susceptibles d&#8217;avoir des répercussions à long terme et d&#8217;interagir entre eux (emploi, licenciement, maladie, accident, pension, naissance d&#8217;un enfant&#8230;). Pour être vraiment utile, un jumeau devrait pouvoir modéliser l’ensemble du parcours d’un individu au sein du système. Non seulement le statut individuel, mais aussi celui des dossiers (les délais sont-ils respectés&nbsp;?) et de l’administration (y a-t-il un retard dans le traitement&nbsp;?) évoluent au fil du temps.</p>



<p class="wp-block-paragraph">Si, aujourd’hui, une bonne ombre numérique (<em>digital shadow</em>) d’un service est déjà disponible, l’ajout de données évolutives relatives à la répartition de la charge de travail, aux capacités, à l’avancement des dossiers&#8230; permettrait de franchir une nouvelle étape, comme une simulation du flux de dossiers. De telles simulations sélectives peuvent servir à des analyses contrefactuelles (&#8220;et si&#8221;) qui permettent de mieux évaluer l&#8217;impact d&#8217;un changement (au niveau organisationnel ou réglementaire). À l&#8217;inverse, on peut également y voir un cadre pour des tests de régression&nbsp;: les calculs effectués sur des échantillons représentatifs peuvent être répétés chaque fois qu&#8217;un élément change, afin de localiser l&#8217;impact le plus important.</p>



<h3 class="wp-block-heading">Use Case 2 : Planification organisationnelle dans les soins de santé</h3>



<p class="wp-block-paragraph">L&#8217;administration des soins de santé a d&#8217;autres priorités : le suivi des patients et des consultations est urgent, l&#8217;affectation du personnel et des ressources est un casse-tête de planification complexe, sans parler des divers remboursements et assurances&#8230; Pour évoluer vers le jumeau numérique, les <a href="https://www.ehealth.fgov.be/fr/page/ehds-european-health-data-space---le-reglement-europeen-relatif-a-l-espace-europeen-des-donnees-de-sante">espaces européens des données de santé</a> pourraient jouer un rôle important, tout comme les nouvelles solutions que l&#8217;on s&#8217;efforce actuellement de mettre au point pour <a href="https://tehdas.eu/">l&#8217;utilisation secondaire des données de santé</a>.</p>



<p class="wp-block-paragraph">Nous sommes encore loin du rêve des soins de santé optimisés individuellement sur la base d&#8217;un <a href="https://digital-strategy.ec.europa.eu/en/policies/virtual-human-twins">jumeau numérique personnel du patient</a>, une idée qui s&#8217;accompagne d&#8217;ailleurs de <a href="https://zenodo.org/records/14516807">nombreux risques non négligeables</a> sur les plans <a href="https://www.frontiersin.org/journals/genetics/articles/10.3389/fgene.2018.00031/full">de l&#8217;éthique et de la confidentialité</a>. À plus court terme, les possibilités se situent plutôt au niveau de l&#8217;organisation. En ajoutant à une ombre numérique existante des données relatives aux admissions, aux listes d’attente, à l’affectation du personnel et à l’activité, il devient possible de mieux absorber les évolutions stratégiques et opérationnelles.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks.jpg"><img loading="lazy" decoding="async" width="800" height="383" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks.jpg" alt="" class="wp-image-29564" style="width:800px;height:auto" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks.jpg 800w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks-300x144.jpg 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks-768x368.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></a><figcaption class="wp-element-caption">Les nombreux aspects d&#8217;un jumeau numérique, ici pour l&#8217;immunologie. Source: Niarakis et.al., &#8220;Immune digital twins for complex human pathologies: applications, limitations, and challenges&#8221;, <a href="https://doi.org/10.1038/s41540-024-00450-5" target="_blank" rel="noreferrer noopener">DOI: 10.1038/s41540-024-00450-5</a></figcaption></figure>



<h2 class="wp-block-heading">La mise en œuvre: une opération couteuse ?</h2>



<p class="wp-block-paragraph">Pour rester concentrées sur ce qui est possible aujourd&#8217;hui ou à court terme, les administrations peuvent s&#8217;inspirer des &#8220;piles de référence&#8221; de composants technologiques, développées dans le cadre de jumeaux numériques existants. Nous en avons déjà mentionné quelques-unes précédemment et ne les répéterons pas ici.</p>



<p class="wp-block-paragraph">Un jumeau numérique doit pouvoir contenir une représentation de l&#8217;état actuel d&#8217;un système et traiter les événements qui ont un impact sur celui-ci. À cette fin, dans le cadre des initiatives européennes <a href="https://www.fiware.org/">FIWARE</a> (Future Internet), le groupe de travail Context Information Management au sein de l’ETSI (l&#8217;Institut européen des normes de télécommunications) a développé le standard et l&#8217;<a href="https://www.etsi.org/deliver/etsi_gs/CIM/001_099/009/01.09.01_60/gs_CIM009v010901p.pdf">API</a> <a href="https://ngsi-ld.org/">NSGI-LD</a>.  Il semble toutefois que ce standard <a href="https://fr.wikipedia.org/wiki/NGSI-LD#Uses">ne soit pas encore très répandu</a> en dehors de son <a href="https://www.fiware.org/about-us/smart-industry/">propre réseau</a> composé principalement des initiatives Smart City et IoT.</p>



<p class="wp-block-paragraph">Les systèmes administratifs ne se résument pas à de simples décisions. Les processus impliquent des interactions, des documents et, parfois, une certaine marge d&#8217;appréciation. Les standards ouverts issus du <em>business process management</em> s’avèrent ici utiles. <a href="https://www.omg.org/dmn/">DMN (decision modeling)</a>, <a href="https://www.omg.org/bpmn/">BPMN (business processes)</a> et <a href="https://www.omg.org/cmmn/">CMMN (case management)</a> sont complémentaires et permettent de modéliser ces aspects. Des extensions voient également le jour à partir de ces initiatives, comme <a href="https://cdmn.readthedocs.io/">Constraint DMN (cDMN)</a>, développé à la KULeuven, qui permet une logique plus complexe. Nous pouvons alors composer un jumeau numérique à partir d’un moteur de décision DMN qui calcule &#8220;ce que disent les règles&#8221; (c’est là que l&#8217;approche Rules As Code peut éventuellement trouver sa place), enrichi de couches qui prennent en charge les processus et le flux de dossiers (statut, délais, documents de support), et enfin d’une synchronisation régulière pour pouvoir mettre à jour l&#8217;état opérationnel (ou le contexte). Cette approche est compatible avec le <a href="https://interoperable-europe.ec.europa.eu/sites/default/files/document/2020-06/ELISEWebinar_9_DigitalTwins.pdf">modèle de maturité du CCR</a> (model -> shadow -> twin).</p>



<p class="wp-block-paragraph">Les jumeaux numériques ne sont pas coûteux parce qu’ils intègrent beaucoup de visualisation ou des capacités de reporting. Ils sont coûteux parce qu&#8217;ils constituent une réplique du système cible qui, tout comme l&#8217;original, doit continuer à fonctionner correctement au fil du temps. Pour <a href="https://eprintspublications.npl.co.uk/9880/">aller au-delà de l&#8217;engouement</a>, ils nécessitent un investissement constant en maintenance. Ces coûts récurrents comprennent au moins les éléments suivants :</p>



<ul class="wp-block-list">
<li>surveillance et validation : un jumeau numérique doit suivre chaque modification apportée au système cible avec la plus grande précision possible, ce qui nécessite des mises à jour régulières ;</li>



<li>maintenance des règles et traçabilité&nbsp;: cela représente un coût important, surtout lorsque les règles changent fréquemment. C&#8217;est là que la gestion des versions, les suites de tests et la gestion des changements jouent un rôle&nbsp;;</li>



<li>fonctionnement des pipelines de données et interopérabilité&nbsp;: cela englobe également la sémantique, le contrôle des accès, <a href="https://www.intertwin.eu/ker-4-quality-framework">la qualité des données, la précision</a> et la sécurité.</li>



<li>confidentialité et conformité&nbsp;: indispensables, certainement pour les systèmes qui traitent des données à caractère personnel (santé, revenus, famille).</li>
</ul>



<p class="wp-block-paragraph">Pour un cas d&#8217;utilisation administratif, la meilleure première étape consiste donc à mettre en place de manière systématique ce que l&#8217;on pourrait appeler une &#8220;ombre numérique respectueuse de la vie privée&#8221; : initialement limitée à des fonctionnalités de surveillance et de répétition, avec un contrôle d&#8217;accès strict et une <a href="https://www.edpb.europa.eu/sme-data-protection-guide/data-protection-basics_nl">minimisation des données</a>. On peut ensuite envisager une extension à des simulations sur des jeux de données anonymisées ou synthétiques. Une éventuelle synchronisation en temps quasi réel avec les données du système cible réel, afin de créer un véritable jumeau numérique, ne peut intervenir qu&#8217;à la fin du processus et s&#8217;avère souvent assez complexe à mettre en œuvre.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Un jumeau numérique est-il la solution adéquate, ou existe-t-il une alternative plus simple&nbsp;?<br>En résumé, les jumeaux numériques ne doivent être envisagés que si toutes les conditions suivantes sont remplies (sinon, une autre approche peut s&#8217;avérer plus efficace et mieux adaptée)&nbsp;:</p>



<ul class="wp-block-list">
<li>Le système cible modélisé est dynamique&nbsp;: les résultats dépendent de situations en constante évolution (flux de dossiers, files d&#8217;attente, cycle de vie des événements), et pas uniquement de contrôles d&#8217;éligibilité ou de formulaires.</li>



<li>Il est possible d&#8217;identifier des sources de données de référence et de maintenir une synchronisation continue. Sans mises à jour régulières avec des données opérationnelles, on construit un modèle et non un jumeau.</li>



<li>Les simulations mènent à de vraies décisions. Si l&#8217;organisation ne dispose pas d&#8217;une liberté suffisante pour intervenir (modification des politiques, adaptation du flux de dossiers, priorisation, tâches du personnel&#8230;), une série de tableaux de bord suffira probablement.</li>



<li>Il existe un plan crédible d&#8217;audit et de contrôle qualité permanent. Cela ne doit pas être une considération a posteriori, mais un critère d&#8217;acceptation. Il est inutile de construire un jumeau qui se détériore plus vite que le système cible.</li>



<li>L&#8217;environnement juridique et de conformité est compatible. Si des données à caractère personnel sont impliquées, le RGPD et l&#8217;AI Act peuvent entraîner des obligations qui influencent fortement la faisabilité et le coût. Cela peut limiter un jumeau à un simple système de test amélioré au lieu d&#8217;apporter une véritable contribution à l&#8217;automatisation opérationnelle.</li>
</ul>



<p class="wp-block-paragraph">Un système non jumeau peut également s&#8217;avérer utile : avec des règles codifiées, un <a href="https://en.wikipedia.org/wiki/Test_harness">harnais de test</a> et une surveillance, on dispose déjà d&#8217;une configuration transparente permettant d&#8217;obtenir toutes sortes d&#8217;informations, sans la complexité ni le coût d&#8217;une synchronisation complète ou d&#8217;une infrastructure de simulation. Dans un environnement administratif, un tel modèle de politique peut déjà répondre à de nombreux besoins sans jumeau numérique opérationnel, même si cela risque d&#8217;être décevant pour ceux qui aiment s’appuyer sur des mots à la mode.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Détection d’anomalies : quand le machine learning repère l’inhabituel</title>
		<link>https://staging.smalsresearch.be/detection-anomalies-machine-learning/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Tue, 26 May 2026 08:05:41 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=29522</guid>

					<description><![CDATA[Cet article de blog s’intéresse au problème de la détection d’anomalies dans des données, et a pour objectif de présenter les solutions basées sur une approche machine learning.]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Introduction</h1>



<p class="wp-block-paragraph">La détection d’anomalies (aussi souvent appelées «&nbsp;outliers&nbsp;», ou encore «&nbsp;valeurs aberrantes&nbsp;») est un problème récurrent en data science/machine learning. Cette détection est bien souvent considérée comme une simple tâche préliminaire, mais peut parfaitement être la finalité de l’application&nbsp;:</p>



<ul class="wp-block-list">
<li>En tant que <strong>tâche préliminaire</strong>, la détection a lieu durant l’analyse exploratoire, afin de limiter les soucis de « garbage in, garbage out ». L’objectif est donc ici de corriger ou d’enlever ces anomalies pour éviter qu’elles ne soient utilisées durant la phase d’entrainement du modèle prédictif, car cela risquerait d’affecter négativement ses performances.</li>



<li>En tant que <strong>tâche principale,</strong> la détection d’observations présentant des profils anormaux peut par exemple servir à détecter des activités frauduleuses, des erreurs, ou encore des intrusions (IDS: Intrusion Detection System) [<a href="#footnote-1">1</a>].</li>
</ul>



<p class="wp-block-paragraph">La détection d’anomalies est donc une tâche très importante qui trouve un grand nombre d’applications dans de nombreux domaines [<a href="#footnote-1">1</a>], visant à trouver des observations qui ne se conforment pas au reste des données [<a href="#footnote-2">2</a>].</p>



<p class="wp-block-paragraph">Cet article de blog s’intéresse au problème de la détection d’anomalies dans des données, et a pour objectif de présenter les solutions basées sur une approche machine learning.</p>



<h1 class="wp-block-heading">Les différents types d’anomalies</h1>



<p class="wp-block-paragraph">Avant de discuter des outils permettant la détection d’anomalies, commençons dans un premier temps par définir les différents types d’anomalies qui peuvent être détectés. Dans la littérature, on considère souvent qu’il y a 3 types d’anomalies [<a href="#footnote-3">3</a>]&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>L&#8217;anomalie ponctuelle</strong></li>
</ul>



<p class="wp-block-paragraph">Il s’agit de la forme la plus simple d’anomalies&nbsp;: une instance individuelle considérée comme anormale vis-à-vis du reste des données.</p>



<p class="wp-block-paragraph">Ces anomalies sont encore parfois divisées en 2 sous-catégories, les anomalies <strong>globales</strong> (significativement différentes du reste des données) et les anomalies <strong>locales</strong> (différentes du voisinage local). Exemple illustratif&nbsp;:</p>



<figure class="wp-block-image aligncenter size-full" id="fig1"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/LOF_Anomaly_Example.png"><img loading="lazy" decoding="async" width="380" height="341" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/LOF_Anomaly_Example.png" alt="" class="wp-image-29458" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/LOF_Anomaly_Example.png 380w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/LOF_Anomaly_Example-300x269.png 300w" sizes="auto, (max-width: 380px) 100vw, 380px" /></a></figure>



<p class="is-style-text-annotation is-style-text-annotation--1 wp-block-paragraph">Figure 1 : Exemple d’anomalies locale et globale (image extraite de [<a href="#footnote-4"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-accent-3-color">4</mark></a>])</p>



<p class="wp-block-paragraph">Dans la Figure 1, on peut voir deux anomalies : o<sub>1</sub>, une anomalie globale fortement différente des autres observations, et o<sub>2</sub>, une anomalie locale par rapport à son voisinage (le groupe C<sub>2</sub>).</p>



<ul class="wp-block-list">
<li><strong>L&#8217;anomalie contextuelle</strong></li>
</ul>



<p class="wp-block-paragraph">Une anomalie est dite «&nbsp;contextuelle&nbsp;» si, dans un contexte différent, elle peut être considérée comme normale. Par exemple, si l’on s’intéresse aux précipitations&nbsp;: un certain niveau de précipitations, qui est anormal à un endroit donné, pourrait parfaitement être considéré comme normal à un autre endroit. On a donc ici deux types d’attributs&nbsp;: des <strong>attributs contextuels</strong> qui définissent le contexte (souvent des attributs temporels ou spatiaux) et des <strong>attributs comportementaux</strong> dans lesquelles on va chercher les anomalies (dans notre exemple&nbsp;: les précipitations).</p>



<ul class="wp-block-list">
<li><strong>L&#8217;anomalie collective/anomalie de groupe</strong></li>
</ul>



<p class="wp-block-paragraph">Dans cette dernière catégorie, il ne s’agit plus d’une anomalie individuelle mais d’un ensemble d’anomalies, formant un groupe dont les caractéristiques sont inhabituelles.</p>



<h1 class="wp-block-heading">Les méthodes de détection</h1>



<p class="wp-block-paragraph">Souvent (et particulièrement lorsqu’il s’agit d’une simple tâche préliminaire de data cleansing), la détection d’anomalies dans les données se fait simplement via des outils statistiques (par exemple, en utilisant les écarts-types, les quantiles, ou via des tests statistiques). Dans le cadre de cet article, nous n’allons pas explorer ces approches statistiques et nous concentrer sur les approches <em>machine learning</em> de la détection d’anomalies.</p>



<h2 class="wp-block-heading">Quel type d’apprentissage ?</h2>



<p class="wp-block-paragraph">Il existe principalement deux approches pour détecter des anomalies, les méthodes basées sur l’apprentissage supervisé et celles basées sur l’apprentissage non-supervisé. Pour rappel, l’apprentissage supervisé utilise des données labélisées&nbsp;: cela nécessite d’avoir, en plus des données, des exemples d’anomalies préalablement identifiées afin que le modèle de détection puisse apprendre à les différencier des données normales. A l’inverse, l’apprentissage non-supervisé se base entièrement sur les données et ne requiert pas de disposer d’un ensemble d’anomalies pré-identifiées.</p>



<p class="wp-block-paragraph">Dans le cadre de cet article, nous allons explorer les <strong>approches non-supervisées</strong>. Ces dernières ont en effet une spécificité intéressante par rapport aux modèles supervisés (outre le fait de ne pas nécessiter de données labélisées)&nbsp;: la découverte de nouvelles formes d’anomalies.</p>



<p class="wp-block-paragraph">En effet, un modèle supervisé aura tendance à identifier des anomalies présentant des caractéristiques similaires à celles des anomalies labélisées. Par conséquent, même dans les cas où des données labélisées existent, il sera souvent intéressant de coupler un modèle supervisé, entrainé pour détecter plus finement certains profils prédéfinis d’anomalies, avec un modèle non-supervisé, qui pourra potentiellement trouver des anomalies présentant des profils complètement différents.</p>



<h2 class="wp-block-heading">Quelques algorithmes classiques de détection d’anomalies</h2>



<p class="wp-block-paragraph">Avant de commencer, nous allons séparer les algorithmes de détection d’anomalies en 2 catégories&nbsp;: les <strong>détecteurs</strong> et les <strong>modèles de détection</strong>. Un modèle de détection va, comme son nom l’indique, construire un modèle qui peut être utilisé de façon isolée&nbsp;: par exemple si l’on dispose d’une nouvelle observation, on peut simplement l’entrer dans le modèle pour estimer s’il s’agit d’une anomalie. A l’inverse, un détecteur n’aura pas de modèle entrainé pouvant être utilisé par la suite&nbsp;: si une nouvelle observation arrive, il faudra la recontextualiser en la plaçant parmi les autres données, voire éventuellement entièrement relancer le processus de détection d’anomalies.</p>



<h3 class="wp-block-heading">Les détecteurs sans modèles</h3>



<p class="wp-block-paragraph">Une première approche intuitive pour identifier si une observation est une anomalie ou non se base sur l’idée qu’une anomalie a tendance à être éloignée de ses voisins. Ainsi, en mesurant la <strong>distance</strong> moyenne (distance euclidienne par exemple) entre une observation et ses <em>k</em> plus proches voisins (<em>k</em>-NN), ou simplement la distance entre une observation et son <em>k</em><sup>ième</sup> plus proche voisin (<em>k</em>th-NN) [<a href="#footnote-5">5</a>], on peut estimer le risque qu’une observation soit une anomalie&nbsp;: si l’observation est loin des autres, on peut supposer qu’il s’agit d’une anomalie.</p>



<p class="wp-block-paragraph">Cette approche basée sur la distance a l’avantage d’être intuitive, facile à implémenter et à interpréter, mais elle est rapidement limitée. Si on reprend l’exemple de la Figure 1,&nbsp;on observe toutes les observations du cluster C1 sont plus éloignées les unes des autres que o<sub>2</sub> ne l’est des observations de C2. Résultat&nbsp;: un algorithme basé sur la distance retrouvera facilement l’anomalie o<sub>1</sub>, mais pas o<sub>2</sub>. Une approche alternative très connue, le Local Outlier Factor (LOF) [<a href="#footnote-4">4</a>] se base sur la <strong>densité</strong> plutôt que sur la <strong>distance</strong>. Cela permet de gérer les cas où les données contiennent des clusters (C1 et C2 dans la <a href="#fig1">Figure 1</a>) qui n’ont pas la même densité.</p>



<p class="wp-block-paragraph">L’idée est la suivante&nbsp;: observer si la densité autour d’une observation est cohérente avec la densité de ses <em>k</em> plus proches voisins. Ainsi, si l’on prend une observation faisant partie du groupe C1, la densité autour de cette observation est cohérente par rapport à la densité autour de ses voisins proches, là où, pour l’observation o<sub>2</sub>, la densité autour de o<sub>2</sub> est différente de la densité autour de ses plus proches voisines au sein de C2. L’algorithme LOF consiste donc à détecter des anomalies en regardant si leur densité est cohérente avec la densité de leur environnement local.</p>



<p class="wp-block-paragraph">Un dernier type de détecteur que nous allons voir se base sur le <strong>partitionnement de données</strong> (clustering). L’objectif bien connu du clustering va être de détecter des groupes d’observations ayant des caractéristiques similaires. Cela permet notamment de&nbsp;:</p>



<ul class="wp-block-list">
<li>Chercher une observation se trouvant loin du centroïde de son cluster, ou se trouvant dans un micro-cluster qui ne contient qu’une observation (anomalie ponctuelle).</li>



<li>Chercher des clusters anormaux (anomalies collectives).</li>
</ul>



<p class="wp-block-paragraph">Par exemple, Jiang et al. [<a href="#footnote-6">6</a>] proposent de partitionner les données, puis de calculer «&nbsp;l’outlier factor&nbsp;» de chaque cluster (basé sur la distance entre ce cluster et les autres), afin de trouver des clusters d’anomalies. De leur côté, He et al.&nbsp;[<a href="#footnote-7">7</a>] proposent l’algorithme FindCBLOF (CBLOF&nbsp;: <em>cluster-based local outlier factor</em>) qui partitionne les données, puis cherche les anomalies en utilisant à la fois la taille des clusters (les clusters trop petits pouvant représenter des anomalies collectives) et les distances entre les observations et les centroïdes des clusters.</p>



<h3 class="wp-block-heading">Les modèles de détection</h3>



<p class="wp-block-paragraph">Maintenant que nous avons vu des approches sans modèle, nous allons encore rapidement passer à des approches basées sur des modèles de détection d’anomalies. Cette section sera relativement courte et ne présentera que deux modèles parmi les plus connus&nbsp;: «&nbsp;l’<em>isolation forest&nbsp;</em>» et le «&nbsp;<em>one-class SVM</em>&nbsp;».</p>



<p class="wp-block-paragraph"><strong>L’<em>isolation forest</em> </strong>[<a href="#footnote-8">8</a>] se base sur le principe qu’une anomalie, puisqu’elle présente des caractéristiques inhabituelles, devrait être plus facile à isoler qu’une observation normale.</p>



<p class="wp-block-paragraph">L’idée est simple&nbsp;: on va piocher au hasard une variable et une valeur (par exemple&nbsp;: âge (variable) et 21.3 (valeur)), et les utiliser pour séparer les données en deux sous-groupes (branches). Chacun de ces groupes sera ensuite lui-même divisé de façon aléatoire en sous-groupes, qui seront à leur tour divisés, et ainsi de suite de manière récursive, formant un <strong>arbre de décision </strong>(decision tree), construit de manière aléatoire, que l’on appelle un <strong><em>isolation tree</em></strong>.</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IsolationTreeFull.png"><img loading="lazy" decoding="async" width="1024" height="654" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IsolationTreeFull-1024x654.png" alt="" class="wp-image-29457" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IsolationTreeFull-1024x654.png 1024w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IsolationTreeFull-300x192.png 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IsolationTreeFull-768x491.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IsolationTreeFull.png 1075w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="is-style-text-annotation is-style-text-annotation--2 wp-block-paragraph">Figure 2 : Exemple illustratif d’isolation tree</p>



<p class="wp-block-paragraph">Durant le développement de l’arbre, aussitôt qu’un groupe ne contient plus qu’une seule observation, ce groupe n’est plus divisé en sous-groupes. Une <em>Isolation Forest</em> est donc composée d’un grand nombre de ces arbres aléatoires, avec l’idée qu’une observation normale devrait être plus difficile à isoler (et donc, demander en moyenne plus de divisions aléatoires de l’espace) qu’une anomalie (voir Figure 3).</p>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-3a88641f wp-block-group-is-layout-flex">
<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/Isolating_a_Non-Anomalous_Point.png"><img loading="lazy" decoding="async" width="602" height="400" data-id="29455" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/Isolating_a_Non-Anomalous_Point.png" alt="" class="wp-image-29455" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/Isolating_a_Non-Anomalous_Point.png 602w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/Isolating_a_Non-Anomalous_Point-300x199.png 300w" sizes="auto, (max-width: 602px) 100vw, 602px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/Isolating_an_Anomalous_Point.png"><img loading="lazy" decoding="async" width="602" height="400" data-id="29456" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/Isolating_an_Anomalous_Point.png" alt="" class="wp-image-29456" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/Isolating_an_Anomalous_Point.png 602w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/Isolating_an_Anomalous_Point-300x199.png 300w" sizes="auto, (max-width: 602px) 100vw, 602px" /></a></figure>
</figure>
</div>



<p class="is-style-text-annotation is-style-text-annotation--4 wp-block-paragraph">Figure 3 : Exemple d’isolation d’une observation normale (x<sub>i</sub>) et anormale (x<sub>j</sub>) (image extraite de [<a href="#footnote-9">9</a>])</p>



<p class="has-text-align-left wp-block-paragraph">Pour identifier si une observation est une potentielle anomalie, il suffit simplement de regarder à quelle profondeur elle se trouve isolée dans les différents arbres. Les anomalies devraient en moyenne se retrouver isolées peu profondément dans les arbres, car elles sont plus faciles à isoler.</p>



<p class="wp-block-paragraph"><strong>Le <em>one-class SVM</em></strong> (OCSVM) [<a href="#footnote-10">10</a>] est le second modèle de détection auquel nous allons nous intéresser dans cet article. Notez que l’algorithme sous-jacent à l’OCSVM est nettement moins intuitif et facile à expliquer que l’isolation forest, nous n’allons donc pas nous attarder sur son fonctionnement. Cependant, nous allons tout de même le présenter rapidement, car il s’agit d’un modèle classique bien connu en détection d’anomalies.</p>



<p class="wp-block-paragraph">L’OCSVM essaie de trouver la région où les données sont densément situées, et de considérer les points en dehors de cette région comme anormaux. L’objectif pour l’OCSVM est d’apprendre la forme de la «&nbsp;normalité&nbsp;», afin de déterminer une frontière qui séparerait les observations normales des anomalies. La spécificité de l’algorithme OCSVM est que, plutôt que d’utiliser directement les caractéristiques (features) des observations pour déterminer la frontière entre observations normales et anormales, il va projeter les observations dans un espace transformé, permettant de dessiner des frontières complexes entre données normales et anormales.</p>



<h1 class="wp-block-heading">Exemple illustratif</h1>



<p class="wp-block-paragraph">Pour illustrer la détection d’anomalies, nous avons généré des données artificielles en 2 dimensions, contenant&nbsp;:</p>



<ul class="wp-block-list">
<li>Des données «&nbsp;normales&nbsp;»&nbsp;: générées suivant une distribution normale.</li>



<li>Des anomalies&nbsp;: générées au hasard suivant une distribution uniforme.</li>
</ul>



<p class="wp-block-paragraph">Les données normales et les anomalies ont été mélangées et nous avons appliqué 3 algorithmes de détection d’anomalies dessus (OCSVM, <em>Isolation Forest</em> et LOF). Les résultats sont visibles dans les Figures 4 – 6&nbsp;:</p>



<ul class="wp-block-list">
<li>Figure 4&nbsp;: Un seul groupe d’observations normales&nbsp;;</li>



<li>Figure 5&nbsp;: Deux groupes d’observations normales légèrement séparés&nbsp;;</li>



<li>Figure 6&nbsp;: Deux groupes d’observations normales bien séparés.</li>
</ul>



<p class="wp-block-paragraph">Pour chacune de ces figures, les observations normales sont affichées en blanc et les anomalies en noir, afin de pouvoir facilement les distinguer visuellement. Ces labels (normal vs. anomalie) n’ont évidemment pas été fournis aux algorithmes, qui tournent de façon non-supervisés.</p>



<p class="wp-block-paragraph">Pour chacun de ces 3 algorithmes, nous avons mis en évidence en rouge la frontière utilisée par l’algorithme pour différencier les données normales des anomalies. Les observations dans la zone orange (à l’intérieur de la frontière) sont considérées par l’algorithme comme normales, et les observations dans la zone bleue sont considérées comme des anomalies (bleu clair&nbsp;: légèrement anormal&nbsp;; bleu foncé&nbsp;: fortement anormal).</p>



<div class="wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-82936891 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup.png" alt="" class="wp-image-29399" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">Données originales</p></figcaption></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_SVM.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_SVM.png" alt="" class="wp-image-29398" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_SVM.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_SVM-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">OCSVM</p></figcaption></figure>
</div>



<div class="wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-82936891 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_IF.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_IF.png" alt="" class="wp-image-29400" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_IF.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_IF-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">Isolation Forest</p></figcaption></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_LOF.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_LOF.png" alt="" class="wp-image-29397" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_LOF.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/OneGroup_LOF-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">LOF</p></figcaption></figure>
</div>



<p class="has-text-align-center is-style-text-annotation is-style-text-annotation--5 wp-block-paragraph">Figure&nbsp;4&nbsp;: Détection d’anomalies avec un groupe de données normales</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-82936891 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup.png" alt="" class="wp-image-29475" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">Données originales</p></figcaption></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_SVM.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_SVM.png" alt="" class="wp-image-29478" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_SVM.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_SVM-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">OCSVM</p></figcaption></figure>
</div>



<div class="wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-82936891 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_IF.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_IF.png" alt="" class="wp-image-29476" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_IF.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_IF-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">Isolation Forest</p></figcaption></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_LOF.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_LOF.png" alt="" class="wp-image-29477" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_LOF.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/SplitGroup_LOF-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">LOF</p></figcaption></figure>
</div>



<p class="is-style-text-annotation is-style-text-annotation--6 wp-block-paragraph">Figure&nbsp;5&nbsp;: Détection d’anomalies avec deux groupes légèrement séparés de données normales</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-82936891 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups.png" alt="" class="wp-image-29479" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">Données originales</p></figcaption></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_SVM.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_SVM.png" alt="" class="wp-image-29482" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_SVM.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_SVM-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">OCSVM</p></figcaption></figure>
</div>



<div class="wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-82936891 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_IF.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_IF.png" alt="" class="wp-image-29480" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_IF.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_IF-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">Isolation Forest</p></figcaption></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_LOF.png"><img loading="lazy" decoding="async" width="437" height="428" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_LOF.png" alt="" class="wp-image-29481" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_LOF.png 437w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/TwoGroups_LOF-300x294.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></a><figcaption class="wp-element-caption"><p class="has-text-align-center">LOF</p></figcaption></figure>
</div>



<p class="is-style-text-annotation is-style-text-annotation--7 wp-block-paragraph">Figure 6 : Détection d’anomalies avec deux groupes fortement séparés de données normales</p>



<h1 class="wp-block-heading">Evaluer la détection</h1>



<p class="wp-block-paragraph">Réussir à quantifier la qualité de la détection d’anomalies n’est pas une tâche aisée. Commençons par le cas le plus facile&nbsp;: si nous disposons d’anomalies pré-identifiées (labels). Dans ces cas, un algorithme de détection d’anomalies pourra être validé en vérifiant si celui-ci parvient à retrouver les anomalies déjà connues, en utilisant des mesures classiques (<em>recall</em>, <em>precision</em>, <em>F1-measure</em>, etc.)</p>



<p class="wp-block-paragraph">En l’absence de label, c’est là que ça se complique. Dans ce cas, il faudra vérifier manuellement les observations identifiées par l’algorithme, afin de confirmer si celles-ci sont effectivement anormales. Cela demande non seulement d’avoir des bonnes connaissances du domaine d’où sont issues les données, mais aussi de <strong>comprendre pourquoi l’observation a été identifiée par l’algorithme comme anomalie</strong>. En effet, puisqu’il y a souvent un grand nombre de variables dans les données, et que la frontière (entre données normales et anormales) utilisée par l’algorithme est généralement complexe, il est parfois difficile de comprendre pourquoi certaines observations ont été identifiées comme des anomalies par un algorithme. Il peut alors être utile d’utiliser des outils d’explicabilité (par exemple&nbsp;: SHAP, LIME) pour comprendre les décisions de l’algorithme.</p>



<h1 class="wp-block-heading">Conclusion</h1>



<p class="wp-block-paragraph">Nous avons choisi, dans cet article de blog, de présenter une sélection d’algorithmes (non-supervisés) basés sur des approches variées (distance, densité, isolation, etc.), afin d’illustrer la grande diversité d’algorithmes qui existent. Cependant, rappelons que nous n’avons pas exploré les méthodes supervisées (souvent plus précises car spécialisées dans la détection de patterns prédéfinis) et les approches statistiques. La détection d’anomalies est donc un domaine vaste offrant de nombreux outils. Les algorithmes non-supervisés offrent une grande flexibilité, car ils ne requièrent pas de labels et peuvent détecter des nouvelles formes d’anomalies. Dans la pratique, puisque chaque algorithme de détection est différent, il est parfois utile de combiner plusieurs algorithmes de détection d’anomalies afin d’avoir une plus grande variété dans les formes d’anomalies détectées.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph" id="footnote-1">[1] : Chandola, V., Banerjee, A., &amp; Kumar, V. (2009). Anomaly detection: A survey.&nbsp;<em>ACM computing surveys (CSUR)</em>,&nbsp;<em>41</em>(3), 1-58.</p>



<p class="wp-block-paragraph" id="footnote-2">[2]&nbsp;: Samariya, D., &amp; Thakkar, A. (2023). A comprehensive survey of anomaly detection algorithms.&nbsp;<em>Annals of Data Science</em>,&nbsp;<em>10</em>(3), 829-850.</p>



<p class="wp-block-paragraph" id="footnote-3">[3]&nbsp;: Nassif, A. B., Talib, M. A., Nasir, Q., &amp; Dakalbab, F. M. (2021). Machine learning for anomaly detection: A systematic review.&nbsp;<em>Ieee Access</em>,&nbsp;<em>9</em>, 78658-78700.</p>



<p class="wp-block-paragraph" id="footnote-4">[4]: Breunig, M. M., Kriegel, H. P., Ng, R. T., &amp; Sander, J. (2000). LOF: identifying density-based local outliers. In&nbsp;<em>Proceedings of the 2000 ACM SIGMOD international conference on Management of data</em>&nbsp;(pp. 93-104).</p>



<p class="wp-block-paragraph" id="footnote-5">[5] : Ramaswamy, S., Rastogi, R., &amp; Shim, K. (2000). Efficient algorithms for mining outliers from large data sets. In&nbsp;<em>Proceedings of the 2000 ACM SIGMOD international conference on Management of data</em>&nbsp;(pp. 427-438).</p>



<p class="wp-block-paragraph" id="footnote-6">[6] : Jiang, S. Y., &amp; An, Q. B. (2008). Clustering-based outlier detection method. In&nbsp;<em>2008 Fifth international conference on fuzzy systems and knowledge discovery</em>&nbsp;(Vol. 2, pp. 429-433). IEEE.</p>



<p class="wp-block-paragraph" id="footnote-7">[7] : He, Z., Xu, X., &amp; Deng, S. (2003). Discovering cluster-based local outliers.&nbsp;<em>Pattern recognition letters</em>,&nbsp;<em>24</em>(9-10), 1641-1650.</p>



<p class="wp-block-paragraph" id="footnote-8">[8] : Liu, F. T., Ting, K. M., &amp; Zhou, Z. H. (2008). Isolation forest. In&nbsp;<em>2008 eighth ieee international conference on data mining</em>&nbsp;(pp. 413-422). IEEE.</p>



<p class="wp-block-paragraph" id="footnote-9">[9] : <a href="https://en.wikipedia.org/wiki/Isolation_forest">Isolation forest &#8211; Wikipedia</a></p>



<p class="wp-block-paragraph" id="footnote-10">[10]&nbsp;: Schölkopf, B., Platt, J. C., Shawe-Taylor, J., Smola, A. J., &amp; Williamson, R. C. (2001). Estimating the support of a high-dimensional distribution.&nbsp;<em>Neural computation</em>,&nbsp;<em>13</em>(7), 1443-1471.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>&#8220;Talk to your data&#8221; met ChatGPT</title>
		<link>https://staging.smalsresearch.be/talk-to-your-data-met-chatgpt/</link>
					<comments>https://staging.smalsresearch.be/talk-to-your-data-met-chatgpt/#respond</comments>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Fri, 22 May 2026 09:08:08 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=29352</guid>

					<description><![CDATA[De recente opkomst van GenAI heeft tal van sectoren op hun kop gezet, waaronder de IT-sector zelf. Het domein van de data-analyse, of data science, vormt hierop geen uitzondering.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>Cet article est aussi disponible en <a href="https://staging.smalsresearch.be/talk-to-your-data-avec-chatgpt/">français</a>.</em></p>



<p class="wp-block-paragraph">De recente opkomst van generatieve artificiële intelligentie (GenAI) heeft tal van sectoren op hun kop gezet, waaronder de IT-sector zelf (<a href="https://staging.smalsresearch.be/opensource-coding-assistants/">coding</a> <a href="https://staging.smalsresearch.be/vibe-coding-met-agentic-ides/">assistants</a>, geautomatiseerd testen, vertaling van programmeertalen…). Het domein van de data-analyse, of <em>data science</em>, vormt hierop geen uitzondering. Vaak wordt gezegd dat 80% van de tijd van een <em>data scientist</em> wordt besteed aan het pre-processing van data (ingestion, transformatie, opschoning, verrijking…), wat vaak arbeidsintensief en repetitief is, en dat slechts 20% een beroep doet op zijn meest geavanceerde vaardigheden. Kan GenAI worden ingezet om deze 80% te versnellen? Aan de hand van dit inleidende artikel zullen we aantonen dat het antwoord grotendeels positief is, maar dat bovendien ook de resterende 20% al in belangrijke mate is aangepakt. We bekijken in hoeverre een tool als ChatGPT kan helpen bij het analyseren van data: begrijpen wat ze bevatten, statistische indicatoren extraheren, afwijkingen identificeren, specifieke fenomenen verklaren….</p>



<p class="wp-block-paragraph">Om dit te illustreren, baseren we ons op de dataset <a href="https://www.kaggle.com/datasets/nadianassiri/urgences-data">“urgences data”, beschikbaar op Kaggle</a>.<br>&nbsp;Het betreft een CSV-bestand van ~430 MB, bestaande uit 336.253 rijen en 39 kolommen, zonder bijbehorende metadata. Elke rij komt overeen met een bezoek van een patiënt aan de spoeddienst van een (niet nader genoemd) ziekenhuis in Noord-Frankrijk, tussen 6 januari 2016 en 6 december 2020. Het bevat een schat aan informatie: datum en tijdstip van aankomst en vertrek, vervoermiddel, oorzaak, leeftijd, een aantal medische parameters, zoals hartslag, bloeddruk, temperatuur, zuurstofsaturatie, evenals booleaanse waarden die lijken aan te geven of aanvullende onderzoeken zijn voorgeschreven (bloedonderzoek, röntgenfoto, echografie, CT-scan, MRI…)</p>



<p class="wp-block-paragraph">We gaan gebruikmaken van “Data Analyst”, een van de “GPT’s” die in ChatGPT worden aangeboden. Aangezien de gratis versie beperkt is tot een zeer klein aantal vragen, hebben we een betaalde versie (“Personal Plus”) gebruikt. Voor deze oefening hebben we in het Engels gecommuniceerd, maar vergelijkbare resultaten zouden waarschijnlijk ook in het Frans of Nederlands zijn verkregen.</p>



<h1 class="wp-block-heading">Voorafgaande analyse</h1>



<p class="wp-block-paragraph">Een eerste stap kan bestaan uit het simpelweg indienen van het te analyseren bestand bij “Data Analyst” en hem te vragen wat hij daarin kan vinden. Meer formeel levert een vraag als “<em>What useful insight can you extract from those data?</em>” ons het onderstaande resultaat op.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1.png"><img loading="lazy" decoding="async" width="874" height="1433" data-id="26614" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1.png" alt="" class="wp-image-26614" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1.png 874w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1-183x300.png 183w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1-625x1024.png 625w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1-768x1259.png 768w" sizes="auto, (max-width: 874px) 100vw, 874px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2.png"><img loading="lazy" decoding="async" width="823" height="1492" data-id="26616" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2.png" alt="" class="wp-image-26616" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2.png 823w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2-165x300.png 165w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2-565x1024.png 565w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2-768x1392.png 768w" sizes="auto, (max-width: 823px) 100vw, 823px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3.png"><img loading="lazy" decoding="async" width="853" height="882" data-id="26615" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3.png" alt="" class="wp-image-26615" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3.png 853w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3-290x300.png 290w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3-768x794.png 768w" sizes="auto, (max-width: 853px) 100vw, 853px" /></a></figure>
<figcaption class="blocks-gallery-caption wp-element-caption">&#8220;What useful insight can you extract from those data?&#8221;</figcaption></figure>



<p class="wp-block-paragraph">We verkrijgen een resultaat dat een structuur volgt die in bijna alle antwoorden terug te vinden is:</p>



<ol class="wp-block-list">
<li>Een reeks grafieken. Hier zien we een leeftijdsverdeling van de patiënten, de gemiddelde verdeling per tijdstip van de dag, evenals de verdeling van de bestemming (terug naar huis, interne overplaatsing…). Merk op dat ChatGPT, zonder dat wij daar iets over hebben gezegd, begrepen heeft dat het om patiënten van een spoeddienst ging;</li>



<li>Een gestructureerde tekstanalyse van wat het uit de gegevens heeft kunnen opmaken. De demografische gegevens van de patiënten, de piekuren, waar de patiënten na vertrek naartoe gaan en hoe ze zijn aangekomen;</li>



<li>Strategische voorstellen;</li>



<li>Voorstellen voor de volgende stappen. “<em>If you’d like, I can next:</em>”, gevolgd door een reeks relevante prompts om de analyse voort te zetten (die je helaas moet kopiëren en plakken).</li>
</ol>



<figure class="wp-block-image alignright size-full is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/image.png"><img loading="lazy" decoding="async" width="671" height="681" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/image.png" alt="" class="wp-image-26618" style="aspect-ratio:1;object-fit:cover;width:320px;height:auto" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/image.png 671w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/image-296x300.png 296w" sizes="auto, (max-width: 671px) 100vw, 671px" /></a></figure>



<p class="wp-block-paragraph">Bovendien eindigt de tekst altijd met een link “&lt;/&gt;”, die niet voorkomt in een “standaard” ChatGPT-chat en waarop je kan klikken om de Python-code te verkrijgen waarop deze analyse is gebaseerd. Deze code, die is gemaakt met behulp van de Python-library “Pandas” (een van de meest gebruikte open-source tools voor data-analyse en data science), maakt het mogelijk om de voorgestelde grafieken te genereren, evenals alle cijfers die in de beschrijvingen worden gebruikt. Het is dus volkomen mogelijk om deze code niet alleen direct te gebruiken, maar ook om er zeker van te zijn dat de cijfers niet volledig verzonnen zijn, maar gebaseerd zijn op algemene statistische modellen en zorgvuldig berekend zijn op basis van de verstrekte gegevens.</p>



<p class="wp-block-paragraph">Zo konden we met één enkele zin en na amper een minuut wachten drie grafieken, Python-code en een beschrijvende tekst verkrijgen, waar een data scientist normaal gesproken meerdere uren over zou hebben gedaan. Dit is natuurlijk een zeer beknopte eerste benadering. Maar we kunnen nog verder gaan.</p>



<p class="wp-block-paragraph">We kunnen bijvoorbeeld vragen naar een statistische beschrijving voor elke kolom. Het resultaat is hier een lange, zeer gestructureerde beschrijving, per type variabele (numeriek of categorisch), met een reeks indicatoren: gemiddelde, minimum/maximum, aantal ontbrekende waarden… evenals een opmerking (<em>“Not usable for analysis”, “Vital signs moderately complete”, “Excellent for resource utilization analysis”, “Likely categorical indicator”…</em>). De tool biedt ons ook enkele opmerkingen met betrekking tot de kwaliteit van de gegevens (bijvoorbeeld: <em>“Outliers: Age max = 218 (likely error)”</em>).</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-9 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1.png"><img loading="lazy" decoding="async" width="567" height="1024" data-id="26621" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-567x1024.png" alt="" class="wp-image-26621" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-567x1024.png 567w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-166x300.png 166w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-768x1388.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-850x1536.png 850w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1.png 860w" sizes="auto, (max-width: 567px) 100vw, 567px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2.png"><img loading="lazy" decoding="async" width="509" height="1024" data-id="26619" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-509x1024.png" alt="" class="wp-image-26619" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-509x1024.png 509w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-149x300.png 149w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-768x1546.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-763x1536.png 763w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2.png 828w" sizes="auto, (max-width: 509px) 100vw, 509px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3.png"><img loading="lazy" decoding="async" width="831" height="914" data-id="26620" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3.png" alt="" class="wp-image-26620" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3.png 831w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3-273x300.png 273w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3-768x845.png 768w" sizes="auto, (max-width: 831px) 100vw, 831px" /></a></figure>
<figcaption class="blocks-gallery-caption wp-element-caption">&#8220;Perform descriptive statistics on each column&#8221;</figcaption></figure>



<p class="wp-block-paragraph">Op dezelfde manier kunnen we een “EDA” (Exploratory Data Analysis) aanvragen, die een vergelijkbare analyse oplevert, die deels overlapt maar ook andere aspecten behandelt.</p>



<figure class="wp-block-gallery has-nested-images columns-4 is-cropped wp-block-gallery-10 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1.png"><img loading="lazy" decoding="async" width="532" height="1024" data-id="26622" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-532x1024.png" alt="" class="wp-image-26622" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-532x1024.png 532w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-156x300.png 156w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-768x1478.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-798x1536.png 798w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1.png 827w" sizes="auto, (max-width: 532px) 100vw, 532px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2.png"><img loading="lazy" decoding="async" width="546" height="1024" data-id="26624" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-546x1024.png" alt="" class="wp-image-26624" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-546x1024.png 546w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-160x300.png 160w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-768x1441.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-818x1536.png 818w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2.png 820w" sizes="auto, (max-width: 546px) 100vw, 546px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3.png"><img loading="lazy" decoding="async" width="560" height="1024" data-id="26625" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3-560x1024.png" alt="" class="wp-image-26625" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3-560x1024.png 560w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3-164x300.png 164w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3-768x1403.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3.png 827w" sizes="auto, (max-width: 560px) 100vw, 560px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4.png"><img loading="lazy" decoding="async" width="567" height="1024" data-id="26623" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4-567x1024.png" alt="" class="wp-image-26623" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4-567x1024.png 567w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4-166x300.png 166w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4-768x1388.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4.png 830w" sizes="auto, (max-width: 567px) 100vw, 567px" /></a></figure>
<figcaption class="blocks-gallery-caption wp-element-caption">&#8220;Provide an EDA for this dataset&#8221;</figcaption></figure>



<p class="wp-block-paragraph">Met dit soort “prompt” hebben we dus binnen enkele minuten een eerste gedetailleerd, cijfermatig maar duidelijk en begrijpelijk overzicht van een redelijk omvangrijke dataset. ChatGPT begrijpt, of gedraagt zich in ieder geval alsof het de inhoud van de gegevens begrijpt:</p>



<figure class="wp-block-image alignright size-medium"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30.png"><img loading="lazy" decoding="async" width="300" height="190" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30-300x190.png" alt="" class="wp-image-26626" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30-300x190.png 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30-768x485.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30.png 845w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></figure>



<ul class="wp-block-list">
<li>De tool berekent een “<em>length of stay</em>” en interpreteert dus duidelijk twee kolommen (DH_arrivee en DH_sortie). Er is echter een klein probleempje: in de gegevens bevat het aankomsttijdstip een datum en een uur, maar de “DH_sortie” bevat alleen de datum (met 00:00 als uur), waardoor de berekening weinig relevant is, vooral voor korte verblijven. Maar als we hem vragen hoe hij deze &#8220;<em>length of stay</em>&#8221; heeft berekend, wijst hij op het probleem;</li>



<li>Hij ‘begrijpt’ dat de kolom ‘Code_CCMU’ (met de codes 1, 2, 3, 4, 5, P of D) verwijst naar de Franse nomenclatuur van de ‘<a href="https://fr.wikipedia.org/wiki/Classification_clinique_des_malades_aux_urgences">Classification Clinique des Malades aux Urgences</a>’ en de ernst aangeeft. Hij stelt voor om een “severity analysis (CCMU code distribution)” uit te voeren, waarin hij de codes correct interpreteert;</li>



<li>Hij komt met voorstellen die weliswaar enigszins naïef zijn, maar relevant in deze context. Hier volgen twee voorbeelden:</li>
</ul>



<figure class="wp-block-gallery has-nested-images columns-default wp-block-gallery-11 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h14_41.png"><img loading="lazy" decoding="async" width="627" height="418" data-id="26627" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h14_41.png" alt="" class="wp-image-26627" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h14_41.png 627w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h14_41-300x200.png 300w" sizes="auto, (max-width: 627px) 100vw, 627px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h18_59.png"><img loading="lazy" decoding="async" width="530" height="294" data-id="26628" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h18_59.png" alt="" class="wp-image-26628" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h18_59.png 530w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h18_59-300x166.png 300w" sizes="auto, (max-width: 530px) 100vw, 530px" /></a></figure>
</figure>



<h1 class="wp-block-heading">Analyse per categorie</h1>



<p class="wp-block-paragraph">Bij het bekijken van de gegevens viel ons op dat er twee kolommen zijn die betrekking hebben op de reden van opname van de patiënt: een kolom “motif_entree”, die zeer weinig gestructureerd is ( “Trauma cheville G”, “A avalé une LED avec une pile”…) en een andere “semi-gestructureerde” kolom: “Cardiologie: Douleur thoracique atypique”, “Pneumologie: Dyspnée sans détresse”, “Toxicologie: Alcoolisation/Ivresse aigue”… Het zou interessant zijn om bepaalde elementen te kunnen analyseren op basis van een “categorie”: “Cardiologie”, “Pneumologie”, “Toxicologie”…</p>



<p class="wp-block-paragraph">We kunnen ChatGPT eenvoudigweg vragen “extract categories from motif_venue”, zonder het enige informatie te geven over hoe dit moet gebeuren. Als antwoord krijgen we dan een overzicht van deze nieuwe attributen, met uitleg over hoe dit tot stand is gekomen, evenals enkele relevante opmerkingen over de kwaliteit van de gegevens:</p>



<figure class="wp-block-gallery has-nested-images columns-default wp-block-gallery-12 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h52_55.png"><img loading="lazy" decoding="async" width="725" height="746" data-id="26632" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h52_55.png" alt="" class="wp-image-26632" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h52_55.png 725w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h52_55-292x300.png 292w" sizes="auto, (max-width: 725px) 100vw, 725px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h53_20.png"><img loading="lazy" decoding="async" width="572" height="314" data-id="26633" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h53_20.png" alt="" class="wp-image-26633" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h53_20.png 572w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h53_20-300x165.png 300w" sizes="auto, (max-width: 572px) 100vw, 572px" /></a></figure>
</figure>



<p class="wp-block-paragraph">Een vraag die dan natuurlijk in ons opkomt, is hoe deze zich in de loop van de tijd gedragen. We kunnen ons bijvoorbeeld voorstellen dat longproblemen vooral in de winter voorkomen, in de periode waarin griep en andere virussen heersen. Maar hoe zit het met de andere aandoeningen?</p>



<figure class="wp-block-image alignleft size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart.png"><img loading="lazy" decoding="async" width="592" height="491" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart.png" alt="" class="wp-image-26634" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart.png 592w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart-300x249.png 300w" sizes="auto, (max-width: 592px) 100vw, 592px" /></a></figure>



<p class="wp-block-paragraph">Laten we ChatGPT vragen: “<em>Plot occurrence line charts grouped by cleansed categories, for the top 10</em>“. We krijgen dan de grafiek tegenover deze tekst te zien, samen met een reeks opmerkingen. Men kan verrast zijn door de duizelingwekkende daling van de cijfers, over alle categorieën heen, die zich begin 2020 voordeed. Maar iedereen die in deze periode niet onder een steen heeft geleefd, zal de reden hiervoor snel hebben begrepen… wat ChatGPT ook niet is ontgaan, zoals blijkt uit een van zijn opmerkingen:</p>



<p class="wp-block-paragraph">&#8220;<em>The sharp drop in early 2020 is visible across all categories — a clear COVID shock to ED visit</em>&#8220;</p>



<p class="wp-block-paragraph">Om seizoensgebonden trends te verkrijgen, kunnen we vragen om de drie jaren waarvoor we volledige gegevens hebben bij elkaar op te tellen en de gegevens af te vlakken, waarbij we uitgaan van een voortschrijdend gemiddelde over 7 dagen: &#8220;<em>For the top 10 cleansed categories, plot the number of visits per date in year (summing up values for 2017, 2018 and 2019, excluding 2016 and 2020), with a moving average of 7 days</em>&#8220;.</p>



<p class="wp-block-paragraph">Na wat vallen en opstaan met prompts om de grafieklegende weer te geven of diverse aspecten aan te passen, verkrijgen we het volgende resultaat:</p>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg.png"><img loading="lazy" decoding="async" width="1024" height="504" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg-1024x504.png" alt="" class="wp-image-26637" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg-1024x504.png 1024w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg-300x148.png 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg-768x378.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg.png 1186w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Zoals verwacht merken we dat longziekten (in het bruin) in de winter vaker voorkomen dan in de zomer, maar wat verrassend is, is die enorme piek in de stomatologie helemaal aan het einde van het jaar. Nadat we ons ervan hadden verzekerd dat de piek zich inderdaad elk jaar voordeed, met enkele uitschieters die we hier buiten beschouwing laten, stelden we de vraag: “<em>how to explain the peak of total visits for stomatology for the last week?</em>”.We waren duidelijk onder de indruk van de relevantie van het antwoord.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-13 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1.png"><img loading="lazy" decoding="async" width="609" height="1024" data-id="26638" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1-609x1024.png" alt="" class="wp-image-26638" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1-609x1024.png 609w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1-179x300.png 179w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1-768x1291.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1.png 833w" sizes="auto, (max-width: 609px) 100vw, 609px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2.png"><img loading="lazy" decoding="async" width="654" height="1024" data-id="26639" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2-654x1024.png" alt="" class="wp-image-26639" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2-654x1024.png 654w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2-192x300.png 192w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2-768x1202.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2.png 815w" sizes="auto, (max-width: 654px) 100vw, 654px" /></a></figure>
</figure>



<p class="wp-block-paragraph">Twee verklaringen, die ChatGPT niet in de dataset heeft kunnen vinden, maar alleen door een verband te leggen met zijn “algemene kennis”, lijken ons zeer aannemelijk:</p>



<ul class="wp-block-list">
<li>Tandartspraktijken zijn tijdens de feestdagen grotendeels gesloten (of meer in het algemeen tijdens de vakantie, gezien de twee kleinere pieken);</li>



<li>Veel mensen willen hun vergoedingsmogelijkheden vóór het einde van het jaar ‘volledig benutten’.</li>
</ul>



<p class="wp-block-paragraph">Het spreekt voor zich dat nader onderzoek nodig is alvorens hieruit operationele beslissingen te trekken, maar we hebben hier al tegen zeer lage kosten een reeks hypothesen om te onderzoeken.</p>



<h1 class="wp-block-heading">Beperkingen</h1>



<p class="wp-block-paragraph">Hoewel een eerste overzicht indrukwekkend kan lijken, is voorzichtigheid geboden. Het is duidelijk dat een dergelijk hulpmiddel een waardevolle bondgenoot kan zijn voor een <em>data scientist</em>, en zelfs professionals met beperkte technische vaardigheden in staat kan stellen toegang te krijgen tot een eerste analyse. Hier volgen enkele aandachtspunten uit onze ervaring met deze dataset.</p>



<ul class="wp-block-list">
<li>Je wordt geen “data scientist” alleen omdat je mooie grafieken kunt maken of cijfers kunt leveren. Je moet ze ook kunnen interpreteren en ervoor zorgen dat je niet in een van de vele valkuilen van de statistiek trapt;</li>



<li>In ons voorbeeld hebben we onze volledige dataset naar ChatGPT gestuurd. We hebben geen enkele controle over wat ermee gebeurt. In dit geval ging het om openbare gegevens, maar hoe zit het met vertrouwelijke gegevens? Het is altijd mogelijk om een LLM on-premise te installeren, maar de kosten zijn aanzienlijk hoger en de prestaties lager;</li>



<li>We hebben slechts één voorbeeld met één tabel getest. De literatuur lijkt aan te geven dat dit ook geldt voor een complexere database, maar we zullen dit nog moeten uitproberen;</li>



<li>De modus “vraag-antwoord” maakt alleen een lange, lineaire dialoog mogelijk. Al snel ontstaat er een lange, zeer rommelige discussie, met meerdere pogingen om de tool duidelijk te maken wat we willen. Als we bijvoorbeeld een criterium willen aanpassen voorafgaand aan een reeds uitgevoerde analyse (bijvoorbeeld door deze te beperken tot een bepaalde periode of bepaalde soorten gegevens te verwijderen), kunnen we niet teruggaan. Je moet dan een nieuwe chat starten of alle vragen opnieuw stellen;</li>



<li>In dezelfde lijn: als de invoergegevens worden bijgewerkt, moet het hele gesprek opnieuw worden gevoerd;</li>



<li>Naast het weinig gestructureerde karakter valt ook een gebrek aan consistentie op:
<ul class="wp-block-list">
<li>Bij het extraheren van de “categorie” hebben we gevraagd om, naast de scheiding op basis van de “:”, ook bepaalde kwaliteitsproblemen te corrigeren (bijvoorbeeld door “Cardiovasculaire” te vervangen door “Cardiologie” of “Intoxications” door “Toxicologie”). De vragen die kort na deze opschoning volgden, hielden rekening met de meest uitgebreide versie. Maar enkele dagen later, toen we het hadden over “cleansed categories”, hield ChatGPT het bij splitsen op basis van de “:”,</li>



<li>We hebben precies dezelfde vraag met een onderbreking van een maand gesteld. De numerieke waarden in het antwoord bleven consistent, maar de tekst was qua vorm radicaal anders (hoewel qua inhoud vergelijkbaar);</li>
</ul>
</li>



<li>De Python-code die bij elke vraag wordt voorgesteld, wordt daadwerkelijk uitgevoerd op de servers van ChatGPT, dat het resultaat gebruikt om zijn antwoord te genereren. Maar de beschikbare uitvoeringstijd is vrij beperkt. Het trainen van een eenvoudig machine learning-model (bijvoorbeeld “<em>Compute feature importance using Random Forest, with ‘scanner’ as target</em>”) leidt vaak tot een <em>time-out</em>. ChatGPT doet dan echter een reeks voorstellen om de benodigde rekentijd te verminderen (stratificatie, vermindering van het aantal bomen, vermindering van de cardinaliteit van bepaalde variabelen…).</li>
</ul>



<h2 class="wp-block-heading is-style-text-subtitle is-style-text-subtitle--14">Besluit</h2>



<p class="wp-block-paragraph">Een relevante aanpak zou waarschijnlijk zijn om ChatGPT of een van zijn concurrenten te gebruiken om de gegevens te verkennen, snel afwijkingen of kwaliteitsproblemen te identificeren, mogelijke benaderingen te vinden, geschikte voorspellingsmodellen te selecteren&#8230; Je zou ook kunnen vragen om grafieken, tabellen en cijfers te genereren&#8230; Vervolgens kunnen de voorgestelde stukjes code worden opgehaald en geïntegreerd in een script of een geconsolideerd notebook. Merk op dat er ook kan worden geïnterageerd met de API&#8217;s van ChatGPT en anderen, zoals Gemini. We zullen deze aanpak in een volgend artikel bespreken.</p>



<p class="wp-block-paragraph">Als we naar de toekomst kijken, zijn we niet bang dat GenAI data scientists zal vervangen. Het is duidelijk dat de onvermijdelijke toename van steeds grotere en complexere datavolumes de behoefte aan personeel dat deze analyse kan uitvoeren alleen maar zal vergroten. Maar GenAI zal hun beroep ongetwijfeld veranderen. En GenAI zal zeker de data scientists die het niet gebruiken, vervangen door data scientists die er effectief mee kunnen omgaan.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://staging.smalsresearch.be/talk-to-your-data-met-chatgpt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Digital Twins in administratieve context</title>
		<link>https://staging.smalsresearch.be/digital-twins-in-administratieve-context/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Tue, 19 May 2026 06:31:50 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Digital Twin]]></category>
		<category><![CDATA[Digitalisation]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[rules]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=26822</guid>

					<description><![CDATA[Digital Twin is een trendy buzzword. Maar kan het ook iets betekenen in een administratieve omgeving?]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Cet article est aussi disponible&nbsp;<a href="https://staging.smalsresearch.be/jumeaux-numeriques-dans-contexte-administratif/" data-type="link" data-id="https://staging.smalsresearch.be/jumeaux-numeriques-dans-contexte-administratif/">en français</a>.</em></p>



<p class="wp-block-paragraph">Van het concept <em><a href="https://www.ibm.com/think/topics/digital-twin">Digital Twin</a></em> claimt <a href="https://ntrs.nasa.gov/citations/20210023699">de NASA</a> dat zij het als eersten toepasten. Om beter het gedrag te kunnen voorspellen van wat ze de ruimte in schoten, had men nood aan een kopie op aarde &#8211; niet alleen fysiek, maar ook digitaal. Sommige scenario&#8217;s zijn nu eenmaal moeilijk na te bootsen op aarde, maar moeten wel zo gedetailleerd mogelijk doorgerekend kunnen worden. Deze aanpak vond navolging in andere industrieën, zoals de luchtvaart, waar ontwerpfouten catastrofale gevolgen zouden kunnen hebben, of waar een <em>trial-and-error</em> methodiek te duur of praktisch onmogelijk zou zijn.</p>



<p class="wp-block-paragraph"><em>Digital Twin</em> verschijnt echter pas als onderwerp op de <a href="https://www.forbes.com/sites/gartnergroup/2016/10/26/gartners-top-10-strategic-technology-trends-for-2017/">radar van Gartner</a> eind 2016. Ook de <a href="https://en.wikipedia.org/wiki/Digital_twin">Wikipedia-pagina over het onderwerp</a> is een relatief recent gegeven, aangemaakt in 2015, veel later dan die over <a href="https://en.wikipedia.org/wiki/Virtual_reality">Virtual Reality</a> (2001) en <a href="https://en.wikipedia.org/wiki/Internet_of_things">Internet of Things</a> (2007). Het idee van <em>Digital Twin</em>s werd echter snel populair, daarbij geholpen door het Europese Horizon-2020 programma dat er brood in zag en verschillende projecten rond het thema financierde voor miljoenen euro&#8217;s (<a href="https://www.horizon-europe.gouv.fr/supporting-development-digital-twin-improve-management-operations-and-resilience-eu-electricity">[1]</a>, <a href="https://www.digitalurbantwins.com/">[2]</a>, <a href="https://www.imec.be/nl/vlaamse-innovatiemotor/impactdomeinen/smart-cities/precinct">[3]</a>, <a href="https://sphere-project.eu/">[4]</a>). Alvast in Vlaanderen heeft men die kans gretig gegrepen, met <a href="https://www.imec.be/nl/vlaamse-innovatiemotor/samenwerking/vlaamse-onderzoeksprogrammas/city-of-things">IMEC in een centrale rol</a>, bijgestaan door een enthousiast <a href="https://www.vlaanderen.be/digitaal-vlaanderen/digitaal-vlaanderen-zet-vaart-achter-europese-digital-twins-en-baant-zo-de-weg-naar-een-citiverse">Digitaal Vlaanderen</a>, en ook <a href="https://vito.be/en/research/digital-twins-in-health">VITO</a> is overtuigd.</p>



<p class="wp-block-paragraph">Marketinggewijs heeft de <em>Digital Twin</em> zijn waarde dus alvast bewezen. Maar kan het een concrete meerwaarde zijn voor publieke administraties? Ook daar worden workflows snel complex, kunnen wijzigingen duur zijn, en wil men misschien éen en ander kunnen simuleren alvorens het effectief te implementeren. In dit artikel onderzoeken we wat de <em>Digital Twin</em> kan betekenen in een administratieve context.  </p>



<h2 class="wp-block-heading">Definities</h2>



<p class="wp-block-paragraph">Er bestaan nogal wat verschillende interpretaties van <em>Digital Twin</em>. De essentie is alleszins niet nieuw: een systeem wordt digitaal weergegeven zodat het kan worden geobserveerd, getest en verbeterd zonder de daadwerkelijke werking direct aan te tasten. Het belangrijkste onderscheidende kenmerk is de continue (of in ieder geval regelmatige) <strong>synchronisatie </strong>tussen het reële systeem (de &#8216;doelentiteit&#8217; of <em>&#8216;target entity&#8217;</em>), en zijn digitale tegenhanger. De EU JRC adopteert een <a href="https://interoperable-europe.ec.europa.eu/sites/default/files/document/2020-06/ELISEWebinar_9_DigitalTwins.pdf">maturiteitsmodel</a> dat verschillende niveau&#8217;s van integratie onderscheidt; enkel in het geval van tweerichtings-datauitwisseling tussen target en twin wordt echt van een twin gesproken. Op internationaal vlak worden pogingen ondernomen tot <a href="https://www.iso.org/standard/81442.html">standaardisering van terminologie</a>.</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model.png"><img loading="lazy" decoding="async" width="1024" height="643" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model-1024x643.png" alt="" class="wp-image-29555" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model-1024x643.png 1024w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model-300x189.png 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model-768x483.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/IET-Atkins-maturity-model.png 1071w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Digital Twin Maturity Spectrum. Bron: IET &amp; Atkins, &#8220;Digital Twins for the Built Environment&#8221;, 2019.</figcaption></figure>



<p class="wp-block-paragraph">Om nuttig te kunnen zijn moet een Digital Twin uitgewerkt zijn in voldoende detail. Al naargelang de toepassing zal het niveau van granulariteit of resolutie variëren. De twin moet de doelentiteit gedurende diens volledige <em>life cycle</em> getrouw kunnen weergeven, maar dat betekent niet dat elk detail tot in de puntjes gesimuleerd moet zijn. In de <a href="https://www.nature.com/articles/s41746-024-01073-0">medische sector</a> zien we digital twins opduiken op het niveau van de <a href="https://www.rfi.ac.uk/focus/projects/digital-twin-cell/">cel</a>, van het <a href="https://www.turing.ac.uk/science-innovation/health/cardiac-digital-twins">orgaan</a>, van een <a href="https://digital-strategy.ec.europa.eu/en/policies/virtual-human-twins">persoon</a> of van de <a href="https://pubmed.ncbi.nlm.nih.gov/40762974/">populatie</a>. Niets belet ook dat een Digital Twin slechts een onderdeeltje vormt van een groter systeem &#8211; het kan bijvoorbeeld alleen maar uitgewerkt zijn voor 1 kritische component. </p>



<p class="wp-block-paragraph">We kunnen twee stromingen van Digital Twins onderscheiden:</p>



<ul class="wp-block-list">
<li>Hoogwaardige technologische twins (luchtvaart, industrie, infrastructuur), waarbij de twin wordt gebruikt voor diagnostiek, voorspellend onderhoud of iteratief ontwerp op basis van operationele gegevens &#8211; bij <a href="https://ntrs.nasa.gov/api/citations/20210023699/downloads/ASME%20Digital%20Twin%20Summit%20Keynote_final.pdf">NASA</a>, voor <a href="https://initiatives.weforum.org/future-power-system/case-study-details/digital-twin-grid/aJYTG00000010pB4AQ">elektriciteitsdistributie</a>, &#8230; </li>



<li>Informatiesysteem- of socio-technische twins (steden, organisaties, dienstverlening), waarbij de doelentiteit niet zozeer een machine is maar eerder een complex systeem met meerdere belanghebbenden, bestaande uit processen, regels, mensen en gegevensstromen. Deze tweede stroom is waar de publieke sector in past, maar het is ook waar de <a href="https://interoperable-europe.ec.europa.eu/collection/elise-european-location-interoperability-solutions-e-government/glossary/term/digital-twin-government">definities vaag worden</a> en <em>Digital Twin</em> soms wordt gebruikt als <a href="https://eprintspublications.npl.co.uk/9880/">marketingterm voor &#8216;dashboard+model&#8217;</a>.</li>
</ul>



<p class="wp-block-paragraph">Waar beleidsmatig enige vaagheid misschien onvermijdelijk is, willen we in de praktijk toch een meer operationele interpretatie. We zouden een administratieve digital twin kunnen definiëren als: <strong>een continu geüpdatete, testbare, digitale representatie van de realiteit van de dienstverlening</strong>. Dit omvat processen, dossiers en de status waarin die zich bevinden, een uitvoerbaar systeem van de regels die van toepassing zijn, en alle dataverkeer dat nodig is om het geheel te doen werken. Dat moet toelaten de huidige realiteit van nabij te monitoren, en eventuele wijzigingen vooraf te simuleren voordat ze worden toegepast.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/2026-05-28_15h43_49.png"><img loading="lazy" decoding="async" width="603" height="211" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/2026-05-28_15h43_49.png" alt="" class="wp-image-29558" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/2026-05-28_15h43_49.png 603w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/2026-05-28_15h43_49-300x105.png 300w" sizes="auto, (max-width: 603px) 100vw, 603px" /></a><figcaption class="wp-element-caption">Concept van een Digital Twin (DT): data uit het doelsysteem + engine (= enabler) + applicaties (= usage). Bron: Oakes, Parsai, Van Mierlo, Demeyer, Denil, De Meulenaere, Vangheluwe, &#8220;Improving digital twin experience reports&#8221;, <a href="https://doi.org/10.5220/0010236101790190">DOI: 10.5220/0010236101790190</a></figcaption></figure>



<p class="wp-block-paragraph">Voor een industrieel proces gedreven door sensordata en de onveranderlijke wetten van de fysica, ligt dat gemakkelijker dan voor het overheidswezen, waar men vaak gevoelige gegevens verwerkt en afhangt van regelmatig wijzigende regels die ruimte laten voor interpretatie (zie ook onze eerder gepubliceerde artikels over <a href="https://staging.smalsresearch.be/rules-as-code-nl/">Rules As Code</a>). Bezorgdheden rond <em>data governance</em> (<a href="https://eur-lex.europa.eu/eli/reg/2016/679/oj">GDPR</a> etc.) kunnen het moeilijk maken om synchronisatie met real-time gegevens op te zetten. Beslissingslogica is vaak nauw verweven met de code van applicaties, wat aanpassingen en  compliance checking bemoeilijkt. Het is daarom vaak al een hele prestatie als men in overheidscontext tot een <a href="https://en.wikipedia.org/wiki/Digital_twin_integration_level"><em>Digital Shadow</em></a> komt, die we ergens kunnen situeren tussen een &#8220;dom&#8221; model en een echte gesynchroniseerde twin.</p>



<h2 class="wp-block-heading">Toonaangevende projecten</h2>



<p class="wp-block-paragraph">In Europa gaan de opvallendste Digital Twin projecten overwegend over klimaat en wetenschap:</p>



<ul class="wp-block-list">
<li><a href="https://destination-earth.eu/">Destination Earth of DestinE</a> combineert grootschalige gegevens van <a href="https://www.eumetsat.int/">(weer)satellieten</a> en <a href="https://www.copernicus.eu/">Copernicus</a> in een <a href="https://destination-earth.eu/destination-earth/destines-components/destination-earth-data-lake/">data lake</a>. Op basis daarvan zagen 2 Digital Twins het licht: <a href="https://destine.ecmwf.int/climate-change-adaptation-digital-twin-climate-dt/">Climate Change Adaptation</a> (langetermijn) en <a href="https://destine.ecmwf.int/weather-induced-extremes-digital-twin/">Weather-induced Extremes</a> (kortetermijn). Daarvoor ontwikkelden ze hun eigen <a href="https://stories.ecmwf.int/the-digital-twin-engine/">Digital Twin Engine</a>. Het project wordt <a href="https://destination-earth.eu/news/destination-earth-moves-into-phase-three/">voortgezet</a>, waarbij men gemakkelijker &#8220;downstream applicaties&#8221; van externe gebruikers wil faciliteren die deelaspecten of specifieke onderzoeksvragen verder kunnen uitdiepen. Dat alles moet gedeeld worden via <a href="https://platform.destine.eu/">1 platform</a> gecoördineerd door <a href="https://www.esa.int/Applications/Observing_the_Earth/Destination_Earth">ESA</a>.</li>



<li>Het <a href="https://www.edito.eu/">EDITO</a> project probeert gelijkaardige doelstellingen te bereiken maar dan voor oceanen. Hiervoor wordt data van <a href="https://emodnet.ec.europa.eu/en">EMODnet</a> en <a href="https://marine.copernicus.eu/">Copernicus</a> samengebracht. Toegang verloopt via een <a href="https://datalab.dive.edito.eu/">Datalab</a> dat ook een reeks andere bouwblokken en services aanbiedt, en de applicaties die erop gebouwd worden kunnen een plaats krijgen op het <a href="https://dive.edito.eu/">digitaal platform</a> van het initiatief.</li>



<li><a href="https://www.intertwin.eu/use-cases">Verschillende use cases</a> worden ook opgelijst in het kader van het <a href="https://www.intertwin.eu/article/intertwin-has-ended-whats-next">recent afgelopen</a> (en Europees <a href="https://cordis.europa.eu/project/id/101058386">gefinancierde</a>) interTwin onderzoeksproject, dat een enigszins <a href="https://zenodo.org/records/10650440">gestandaardiseerde architectuur</a> met <a href="https://www.intertwin.eu/intertwin-digital-twin-engine">herbruikbare componenten</a> voor Digital Twins trachtte ontwikkelen. Zij benaderden het onderwerp eerder vanuit de wereld van het <a href="https://openlab.cern/intertwin/">CERN</a>, en onafhankelijk van de twee eerder vermelde initiatieven. Onderweg leerden ze wel van elkaars bestaan en werd een <a href="https://zenodo.org/records/16966835">mogelijke interoperabiliteit</a> met het <a href="https://www.esa.int/Applications/Observing_the_Earth/Destination_Earth">ESA-gelinkte DestinE</a> alvast onderzocht.</li>
</ul>



<figure class="wp-block-image aligncenter size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/digital-twin-monitoring.jpg"><img loading="lazy" decoding="async" width="621" height="511" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/digital-twin-monitoring.jpg" alt="" class="wp-image-29560" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/digital-twin-monitoring.jpg 621w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/digital-twin-monitoring-300x247.jpg 300w" sizes="auto, (max-width: 621px) 100vw, 621px" /></a><figcaption class="wp-element-caption">Gebruik van een digital twin voor monitoring. Bron: Davila Delgada &amp; Oyedele, &#8220;Digital Twins for the built environment: learning from conceptual and process models in manufacturing&#8221;, <a href="https://doi.org/10.1016/j.aei.2021.101332">DOI: 10.1016/j.aei.2021.101332</a></figcaption></figure>



<p class="wp-block-paragraph">In een administratieve context hebben we minder boodschap aan gegevens van satellieten of deeltjesversnellers. Omwille van de <em>governance</em>-vereisten komt de nadruk veeleer te liggen op correcte interoperabiliteit en data-uitwisseling, conform alle geldende wettelijke kaders. In dat opzicht zijn de nuttigste Europese initiatieven misschien nog de <a href="https://digital-strategy.ec.europa.eu/en/policies/data-spaces">Data Spaces</a> &#8211; voor een &#8220;policy twin&#8221; bijvoorbeeld de <a href="https://data.europa.eu/en/ELDS">Legal Data Space</a>. Er zijn ook raakvlakken met het idee van Regulatory Sandboxes zoals dat opduikt in o.a. de <a href="https://eur-lex.europa.eu/EN/legal-content/summary/interoperable-europe-act.html">Interoperable Europe Act</a> of recenter de <a href="https://www.europarl.europa.eu/RegData/etudes/BRIE/2022/733544/EPRS_BRI(2022)733544_EN.pdf">AI Act</a>: een administratieve digital twin kan de rol van zo&#8217;n sandbox vervullen als er goede mechanismen voor scenario-ontwikkeling en -evaluatie zijn.</p>



<h2 class="wp-block-heading">Administratieve Use Cases</h2>



<p class="wp-block-paragraph">Voordat we zelf aan de slag zouden gaan in complexe sectoren zoals gezondheidszorg en sociale zekerheid, moeten we ons toch afvragen of Digital Twins echt iets kunnen toevoegen aan wat vandaag al bestaat &#8211; want hype op zich draagt niets bij.</p>



<h3 class="wp-block-heading">Use Case 1 : Simulatie van beleid en uitvoeringsimpact</h3>



<p class="wp-block-paragraph">Inzake policy modeling voor sociale zekerheid, is er bijvoorbeeld al een sterke basis met het <a href="https://joint-research-centre.ec.europa.eu/euromod_en">EUROMOD</a> microsimulatie model, waarvan de Belgische variant <a href="https://socialsecurity.belgium.be/nl/sociaal-beleid-mee-vorm-geven/impact-assessment-research/belmod">BELMOD</a> heet. Dit zijn statische microsimulaties waarbij gegevens op fijnmazig niveau worden gecombineerd met gecodeerde regels zodat het mogelijk wordt om hervormingen aan de parameters van de sociale zekerheid te simuleren (bijdragen, uitkeringen, etc.). Zulke studies worden typisch uitgevoerd aan <a href="https://cape-saintlouis.be/">universiteiten</a>, men kan een idee krijgen van wat dat inhoudt via <a href="https://euromod-web.jrc.ec.europa.eu/euromod-online/">EUROMOD Online</a>.</p>



<p class="wp-block-paragraph">In zekere zin komt dit type model al in de buurt van een digital twin voor sociaal beleid, maar het mist nog twee cruciale lagen: </p>



<ul class="wp-block-list">
<li>actuele/live koppelingen met administratieve gegevens: hiermee kan men dan budgettaire en verdelingseffecten simuleren op de situatie van vandaag, in plaats van op verouderde data van enkele jaren geleden. </li>



<li>procesinformatie over de dienstverlening (doorlooptijden van dossiers, behandelingscapaciteit etc): dit zou toelaten ook de operationele impact van hervormingen op de uitvoerende diensten in te schatten.</li>
</ul>



<p class="wp-block-paragraph">Het zou allerminst eenvoudig zijn om dat toe te voegen: de gegevens in kwestie zijn zeer gevoelig van aard. De echte data gebruiken als real-time databron voor simulaties zou al zeker verregaande anonymisering vereisen (voortvloeiend uit de GDPR), naast een resem andere <a href="https://www.ksz-bcss.fgov.be/nl/page/ivc-in-het-kort">veiligheidsmaatregelen</a>. Dat is een complexe oefening op zich, waarbij mogelijk ook nuttige informatie verloren gaat.</p>



<p class="wp-block-paragraph">De status van een persoon binnen de sociale zekerheid wordt daarenboven bepaald door een opeenvolging van gebeurtenissen die lang kunnen doorwerken en met elkaar interageren (werk, ontslag, ziekte, ongeval, pensioen, geboorte van een kind, &#8230;). Om echt waardevol te kunnen zijn zou een twin de hele weg moeten kunnen modelleren die een individu aflegt in het systeem. Niet alleen de individuele status, maar ook die van dossiers (worden er deadlines gemist) en administratie (is er behandelingsachterstand) evolueert doorheen de tijd. </p>



<p class="wp-block-paragraph">Als er vandaag al een goede <em>digital shadow</em> beschikbaar is van een dienst, dan kan met de toevoeging van evolutieve gegevens over werklastverdeling, capaciteit, dossiervoortgang, &#8230; een volgende stap gezet worden, zoals de simulatie van dossierdoorstroming. Zulke selectieve simulaties kunnen dienen voor tegenfeitelijke (&#8220;wat-als&#8221;) analyses die de impact van verandering (organisatorisch, of in de regelgeving) beter in te schatten maakt. Andersom kan men zoiets ook zien als een framework voor regressietesten: berekeningen op representatieve steekproeven kunnen herhaald worden telkens iets wijzigt, om na te gaan waar de grootste impact ligt.</p>



<h3 class="wp-block-heading">Use Case 2 : Organisatorische planning in de gezondheidszorg</h3>



<p class="wp-block-paragraph">De administratie van de gezondheidszorg kent andere prioriteiten: opvolging van patiënten en consultaties is tijdskritisch, de toekenning van mensen en middelen is een complexe planningspuzzel, allerlei terugbetalingen en verzekeringen, &#8230; Om daarin richting Digital Twin te evolueren kan er een grote rol weggelegd zijn voor de <a href="https://www.ehealth.fgov.be/nl/page/ehds-european-health-data-space---de-europese-verordening-betreffende-de-europese-ruimte-voor-gezondheidsgegevens">European Health Data Spaces</a>, en voor nieuwe oplossingen die men momenteel tracht uit te denken voor <a href="https://tehdas.eu/">secundair gebruik van gezondheidsdata</a>. </p>



<p class="wp-block-paragraph">We staan nog ver van de droom van individueel geoptimaliseerde gezondheidszorg op basis van een <a href="https://digital-strategy.ec.europa.eu/en/policies/virtual-human-twins">persoonlijke digital twin van een patiënt</a> &#8211; idee dat trouwens ook gepaard gaat met heel wat <a href="https://zenodo.org/records/14516807">niet triviale</a> <a href="https://www.frontiersin.org/journals/genetics/articles/10.3389/fgene.2018.00031/full">risico&#8217;s inzake ethiek en privacy</a>. Op kortere termijn liggen de mogelijkheden eerder op niveau van de organisatie. Met gegevens over opnames, wachtlijsten, personeelsinzet en activiteit, toegevoegd aan een bestaande <em>digital shadow</em>, kunnen strategische en operationele wijzigingen mogelijk beter opgevangen worden.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks.jpg"><img loading="lazy" decoding="async" width="800" height="383" src="https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks.jpg" alt="" class="wp-image-29564" style="width:800px;height:auto" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks.jpg 800w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks-300x144.jpg 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/05/immunology-digital-twin-building-blocks-768x368.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></a><figcaption class="wp-element-caption">De talrijke aspecten van een digital twin, hier voor immunologie. Bron: Niarakis et.al., &#8220;Immune digital twins for complex human pathologies: applications, limitations, and challenges&#8221;, <a href="https://doi.org/10.1038/s41540-024-00450-5" target="_blank" rel="noreferrer noopener">DOI: 10.1038/s41540-024-00450-5</a></figcaption></figure>



<h2 class="wp-block-heading">Implementatie: een kostelijke affaire?</h2>



<p class="wp-block-paragraph">Om de focus te behouden op wat vandaag of op korte termijn mogelijk is, kunnen administraties zich inspireren op &#8220;reference stacks&#8221; van technologische componenten, die uitgebouwd zijn in het kader van bestaande digital twins. Enkele daarvan haalden we reeds eerder aan en herhalen we hier niet. </p>



<p class="wp-block-paragraph">Een Digital Twin moet een representatie kunnen bevatten van de huidige staat van een systeem, en moet gebeurtenissen kunnen verwerken die daarop een impact hebben. In het kader van de Europese <a href="https://www.fiware.org/">FIWARE</a> initiatieven (Future Internet) werd daarvoor door een werkgroep Context Information Management bij ETSI de <a href="https://ngsi-ld.org/">NSGI-LD</a> standaard en <a href="https://www.etsi.org/deliver/etsi_gs/CIM/001_099/009/01.09.01_60/gs_CIM009v010901p.pdf">API</a> ontwikkeld. Het lijkt er echter op dat er <a href="https://en.wikipedia.org/wiki/NGSI-LD#Uses">nog niet veel adoptie</a> is van deze standaard buiten het <a href="https://www.fiware.org/about-us/smart-industry/">eigen netwerk</a> van voornamelijk Smart City en IoT-initiatieven.</p>



<p class="wp-block-paragraph">Administratieve systemen bestaan niet louter uit beslissingen. De processen omvatten interactie, documenten, en soms ook enige beoordelingsvrijheid. Open standaarden uit de business process management wereld komen hier van pas. <a href="https://www.omg.org/dmn/">DMN (decision modeling)</a>, <a href="https://www.omg.org/bpmn/">BPMN (business processes)</a> en <a href="https://www.omg.org/cmmn/">CMMN (case management)</a> zijn complementair aan elkaar en laten het modelleren van deze aspecten toe. Op deze initiatieven verschijnen ook uitbreidingen, zoals het aan de KULeuven ontwikkelde <a href="https://cdmn.readthedocs.io/">Constraint DMN (cDMN)</a> dat complexere logica toelaat. Een Digital Twin kunnen we dan samenstellen uit een DMN beslissingsmotor die berekent &#8220;wat de regels zeggen&#8221; (hier kan Rules As Code eventueel een plaats krijgen), verrijkt met lagen die de processen en caseflow voor hun rekening nemen (status, deadlines, ondersteunende documenten), en tot slot een regelmatige synchronisatie om de operationele status (of context) te kunnen updaten. Dit is compatibel met het <a href="https://interoperable-europe.ec.europa.eu/sites/default/files/document/2020-06/ELISEWebinar_9_DigitalTwins.pdf">JRC maturiteitsmodel</a> (model -&gt; schaduw -&gt; twin).</p>



<p class="wp-block-paragraph">Digital Twins zijn niet duur omdat ze veel visualisatie bevatten of rapporteringsmogelijkheden ingebouwd hebben. Ze zijn duur omdat ze een duplicaat vormen van het doelsysteem, dat net zoals het origineel, doorheen de tijd correct moet blijven werken. Om <a href="https://eprintspublications.npl.co.uk/9880/">meer te zijn dan enkel hype</a>, is constante investering in onderhoud nodig. Die recurrente kosten omvatten ten minste het volgende:</p>



<ul class="wp-block-list">
<li>monitoring en validatie: een digital twin moet elke verandering aan het doelsysteem zo accuraat mogelijk volgen, dit vraagt regelmatige updates,</li>



<li>onderhoud van de regels en traceerbaarheid: zeker wanneer regels vaak wijzigen is dit een grote kost. Hier spelen versionering, test suites en veranderingsmanagement een rol, </li>



<li>functioneren van data pipelines en interoperabiliteit: omvat ook semantiek, toegangscontrole, <a href="https://www.intertwin.eu/ker-4-quality-framework">datakwaliteit, accuraatheid</a> en beveiliging,</li>



<li>privacy en compliance: onontbeerlijk, zeker voor systemen die persoonsgegevens verwerken (gezondheid, inkomen, familie)</li>
</ul>



<p class="wp-block-paragraph">Voor een administratieve use case is de beste eerste stap daarom een stelselmatige uitbouw van wat we een <em>privacy-aware digital shadow </em>zouden kunnen noemen: initieel beperkt tot monitoring + replay functionaliteit, met strikte toegangscontrole en <a href="https://www.edpb.europa.eu/sme-data-protection-guide/data-protection-basics_nl">dataminimalisatie</a>. Daarna kan gedacht worden aan uitbreiding met simulaties op geanonimiseerde of synthetische datasets. Eventuele near-real-time synchronisatie met gegevens uit het echte doelsysteem, om een echte Digital Twin te vormen, kan pas op het einde volgen, en heeft vaak nogal wat voeten in de aarde.</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p class="wp-block-paragraph">Is een Digital Twin het juiste type oplossing, of kan het ook eenvoudiger? Samengevat zijn Digital Twins pas te overwegen als al het volgende waar is (anders kan een andere aanpak efficiënter zijn en beter aansluiten):</p>



<ul class="wp-block-list">
<li>Het doelsysteem dat gemodelleerd wordt is dynamisch: uitkomsten hangen af van evoluerende situaties (caseflow, wachtrijen, levenscyclus van gebeurtenissen), niet enkel van <em>eligibility checks</em> of formulieren.</li>



<li>Je kan referentiedatabronnen identificeren en doorlopende synchronisatie volhouden. Zonder regelmatige updates met operationele data, bouw je een model en geen twin.</li>



<li>Simulaties leiden tot echte beslissingen. Als de organisatie niet voldoende vrijheid heeft om in te grijpen (beleid veranderen, caseflow wijzigen, prioritisering, personeelstaken, &#8230;), zal een reeks dashboards waarschijnlijk volstaan.</li>



<li>Er is een geloofwaardig plan voor audit en permanente kwaliteitsbewaking. Dit mag niet achteraf komen maar moet een acceptatiecriterium zijn. Het heeft geen zin een twin te bouwen die sneller rot dan het doelsysteem.</li>



<li>De wettelijke/compliance omgeving is compatibel. Als er persoonsgegevens aan te pas komen kunnen GDPR en AI Act verplichtingen met zich meebrengen die de haalbaarheid en de kostprijs erg beïnvloeden. Dat kan een Twin limiteren tot een veredeld testsysteem in plaats van een echte bijdrage tot operationele automatisering te leveren.</li>
</ul>



<p class="wp-block-paragraph">Een niet-Twin kan ook waardevol zijn &#8211; met gecodeerde regels + <a href="https://en.wikipedia.org/wiki/Test_harness">testharnas</a> + monitoring heb je ook al een transparante setup waarmee allerlei inzichten verworven kunnen worden, zonder de complexiteit en kost van volledige synchronisatie of simulatie-infrastructuur. In een administratieve omgeving kan zulk <em>policy model </em>al veel noden lenigen zonder operationele digital twin, al zal dat misschien teleurstellend zijn voor wie graag uitpakt met trendy buzzwords.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>&#8220;Talk to your data&#8221; avec ChatGPT</title>
		<link>https://staging.smalsresearch.be/talk-to-your-data-avec-chatgpt/</link>
					<comments>https://staging.smalsresearch.be/talk-to-your-data-avec-chatgpt/#respond</comments>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 07:08:41 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=26535</guid>

					<description><![CDATA[L'avènement récent du GenAI a bouleversé de nombreux secteurs, y compris directement en informatique. Le domaine de l'analyse de données n'y fait pas exception. Peut-on utiliser ces outils pour accélérer le travail des data scientists ?]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Dit artikel is ook beschikbaar&nbsp;in het&nbsp;<a href="https://staging.smalsresearch.be/talk-to-your-data-met-chatgpt/">Nederlands</a>.</em></p>



<p class="wp-block-paragraph">L&#8217;avènement récent de l&#8217;intelligence artificielle générative (GenAI) a bouleversé de nombreux secteurs, y compris directement en informatique (<a href="https://staging.smalsresearch.be/vibe-coding-avec-les-ides-agentique/">assistants</a> de <a href="https://staging.smalsresearch.be/opensource-coding-assistants-fr/">codage</a>, tests automatiques, traduction de langages de programmation&#8230;). Le domaine de l&#8217;analyse de données, ou <em>data science</em>, n&#8217;y fait pas exception. On dit souvent que 80 % du temps d&#8217;un <em>data scientist</em> est consacré à la préparation des données (ingestion, transformation, nettoyage, enrichissement&#8230;), qui est souvent laborieuse et répétitive, et que seulement 20 % fait appel à ses compétences les plus pointues. Peut-on utiliser le GenAI pour accélérer ces 80 % ? Nous allons voir dans cet article préliminaire que la réponse est largement positive, mais qu&#8217;en plus les 20 % restants sont également fameusement entamés. Nous verrons dans quelle mesure un outil comme ChatGPT peut aider à analyser des données : comprendre ce qu&#8217;elles contiennent, en extraire des indicateurs statistiques, identifier des anomalies, expliquer des phénomènes particuliers&#8230;</p>



<p class="wp-block-paragraph">Pour illustrer ces propos, nous allons nous baser sur le jeu de données <a href="https://www.kaggle.com/datasets/nadianassiri/urgences-data">&#8220;urgences data&#8221;, disponible sur Kaggle</a>. Il s&#8217;agit d&#8217;un fichier CSV de ~430 MB, comprenant 336 253 lignes et 39 colonnes, sans aucune métadonnée associée. Chaque ligne correspond à la visite d&#8217;un patient dans le service d&#8217;urgences d&#8217;un hôpital (non identifié) du nord de la France, entre le 6 janvier 2016 et le 6 décembre 2020. On y trouve une multitude d&#8217;informations : date et heure d&#8217;arrivée et de sortie, moyen d&#8217;arrivée, motif, âge, un certain nombre de paramètres médicaux, tels que fréquence cardiaque, tension, température, saturation, ainsi que des booléens semblant indiquer si des examens complémentaires ont été prescrits (biologie, radio, échographie, scanner, IRM&#8230;)</p>



<p class="wp-block-paragraph">Nous allons utiliser &#8220;Data Analyst&#8221;, un des &#8220;GPTs&#8221; proposé dans ChatGPT. La version gratuite étant limitée à un très petit nombre de questions, nous avons utilisé une version payante (&#8220;Personal Plus&#8221;). Nous avons interagi en anglais pour cet exercice, mais des résultats semblables auraient probablement été obtenus en français ou en néerlandais.</p>



<h1 class="wp-block-heading">Analyse préliminaire</h1>



<p class="wp-block-paragraph">Une première étape peut consister à simplement soumettre le fichier à analyser à &#8220;Data Analyst&#8221;, et lui demander de dire ce qu&#8217;il peut y trouver. Plus formellement, une question telle que &#8220;<em>What useful insight can you extract from those data?</em>&#8221; nous fournit le résultat ci-dessous.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-15 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1.png"><img loading="lazy" decoding="async" width="874" height="1433" data-id="26614" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1.png" alt="" class="wp-image-26614" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1.png 874w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1-183x300.png 183w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1-625x1024.png 625w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_1-768x1259.png 768w" sizes="auto, (max-width: 874px) 100vw, 874px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2.png"><img loading="lazy" decoding="async" width="823" height="1492" data-id="26616" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2.png" alt="" class="wp-image-26616" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2.png 823w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2-165x300.png 165w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2-565x1024.png 565w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_2-768x1392.png 768w" sizes="auto, (max-width: 823px) 100vw, 823px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3.png"><img loading="lazy" decoding="async" width="853" height="882" data-id="26615" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3.png" alt="" class="wp-image-26615" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3.png 853w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3-290x300.png 290w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_insight_3-768x794.png 768w" sizes="auto, (max-width: 853px) 100vw, 853px" /></a></figure>
<figcaption class="blocks-gallery-caption wp-element-caption">&#8220;What useful insight can you extract from those data?&#8221;</figcaption></figure>



<p class="wp-block-paragraph">Nous obtenons un résultat qui va suivre une structure que l&#8217;on retrouvera dans presque toutes les réponses : </p>



<ol class="wp-block-list">
<li>Une série de graphiques. Ici, une distribution de l&#8217;âge des patients, la répartition moyenne suivant l&#8217;heure de la journée, ainsi que la répartition de l&#8217;orientation (retour domicile, transfert interne&#8230;). Notons que sans qu&#8217;on n&#8217;ait rien eu à dire, ChatGPT a compris qu&#8217;il s&#8217;agissait de patients d&#8217;un service d&#8217;urgences ;</li>



<li>Une analyse textuelle structurée de ce qu&#8217;il a pu comprendre des données. La démographie des patients, quelles sont les heures de pointe, où vont les patients à la sortie et comment sont-ils arrivés ;</li>



<li>Des propositions stratégiques ;</li>



<li>Des propositions d&#8217;étapes suivantes. &#8220;<em>If you&#8217;d like, I can next:</em>&#8220;, suivi d&#8217;une série de prompts pertinents pour continuer l&#8217;analyse (qu&#8217;il faut malheureusement copier-coller).</li>
</ol>



<figure class="wp-block-image alignright size-full is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/image.png"><img loading="lazy" decoding="async" width="671" height="681" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/image.png" alt="" class="wp-image-26618" style="aspect-ratio:1;object-fit:cover;width:320px;height:auto" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/image.png 671w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/image-296x300.png 296w" sizes="auto, (max-width: 671px) 100vw, 671px" /></a></figure>



<p class="wp-block-paragraph">Par ailleurs, le texte termine toujours par un lien &#8220;&lt;/&gt;&#8221;, que l&#8217;on ne retrouve pas dans un chat ChatGPT &#8220;de base&#8221; et sur lequel on peut cliquer pour obtenir le code Python sur lequel est basé cette analyse. Celui-ci, réalisé en utilisant la bibliothèque &#8220;Pandas&#8221; de Python (un des outils open source le plus répandu d&#8217;analyse de données/data science), permet de générer les graphiques proposés, ainsi que tous les chiffres utilisés dans les descriptions. Il est donc tout à fait possible non seulement d&#8217;utiliser ce code directement, mais aussi de s&#8217;assurer que les chiffres ne sont pas totalement inventés sur la base de modèles statistiques généraux et bien calculés à partir des données fournies.</p>



<p class="wp-block-paragraph">On a donc pu, en une seule phrase et à peine une minute d&#8217;attente, obtenir trois graphiques, du code Python et un texte descriptif qu&#8217;un data scientist aurait typiquement mis plusieurs heures à obtenir. Il s&#8217;agit, bien sûr, d&#8217;une première approche très sommaire. Mais on peut aller plus loin.</p>



<p class="wp-block-paragraph">On peut par exemple demande de fournir une description statistique pour chaque colonne. On obtient ici en résultat une longue description très structurée, par type de variable (numérique ou catégorique) avec une série d&#8217;indicateurs : moyenne, minimum/maximum, nombre de valeurs manquantes&#8230; ainsi qu&#8217;un commentaire (&#8220;<em>Not usable for analysis</em>&#8220;, &#8220;<em>Vital signs moderately complete</em>&#8220;, &#8220;<em>Excellent for resource utilization analysis</em>&#8220;, &#8220;<em>Likely categorical indicator&#8221;</em>&#8230;). L&#8217;outil nous propose également quelques observations liées à la qualité des données (Exemple : &#8220;<em>Outliers: Age max = 218 (likely error)</em>&#8220;).</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-16 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1.png"><img loading="lazy" decoding="async" width="567" height="1024" data-id="26621" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-567x1024.png" alt="" class="wp-image-26621" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-567x1024.png 567w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-166x300.png 166w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-768x1388.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1-850x1536.png 850w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_1-1.png 860w" sizes="auto, (max-width: 567px) 100vw, 567px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2.png"><img loading="lazy" decoding="async" width="509" height="1024" data-id="26619" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-509x1024.png" alt="" class="wp-image-26619" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-509x1024.png 509w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-149x300.png 149w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-768x1546.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2-763x1536.png 763w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_2.png 828w" sizes="auto, (max-width: 509px) 100vw, 509px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3.png"><img loading="lazy" decoding="async" width="831" height="914" data-id="26620" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3.png" alt="" class="wp-image-26620" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3.png 831w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3-273x300.png 273w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_descr_stats_3-768x845.png 768w" sizes="auto, (max-width: 831px) 100vw, 831px" /></a></figure>
<figcaption class="blocks-gallery-caption wp-element-caption">&#8220;Perform descriptive statistics on each column&#8221;</figcaption></figure>



<p class="wp-block-paragraph">De façon similaire, on pourrait demander une &#8220;EDA&#8221; (Exploratory Data Analysis), qui fournira une analyse semblable, en partie redondante mais couvrant d&#8217;autres aspects.</p>



<figure class="wp-block-gallery has-nested-images columns-4 is-cropped wp-block-gallery-17 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1.png"><img loading="lazy" decoding="async" width="532" height="1024" data-id="26622" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-532x1024.png" alt="" class="wp-image-26622" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-532x1024.png 532w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-156x300.png 156w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-768x1478.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1-798x1536.png 798w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_1.png 827w" sizes="auto, (max-width: 532px) 100vw, 532px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2.png"><img loading="lazy" decoding="async" width="546" height="1024" data-id="26624" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-546x1024.png" alt="" class="wp-image-26624" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-546x1024.png 546w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-160x300.png 160w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-768x1441.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2-818x1536.png 818w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_2.png 820w" sizes="auto, (max-width: 546px) 100vw, 546px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3.png"><img loading="lazy" decoding="async" width="560" height="1024" data-id="26625" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3-560x1024.png" alt="" class="wp-image-26625" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3-560x1024.png 560w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3-164x300.png 164w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3-768x1403.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_3.png 827w" sizes="auto, (max-width: 560px) 100vw, 560px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4.png"><img loading="lazy" decoding="async" width="567" height="1024" data-id="26623" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4-567x1024.png" alt="" class="wp-image-26623" style="aspect-ratio:1" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4-567x1024.png 567w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4-166x300.png 166w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4-768x1388.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_eda_4.png 830w" sizes="auto, (max-width: 567px) 100vw, 567px" /></a></figure>
<figcaption class="blocks-gallery-caption wp-element-caption">&#8220;Provide an EDA for this dataset&#8221;</figcaption></figure>



<p class="wp-block-paragraph">Avec ce type de &#8220;prompt&#8221;, on a donc, en quelques minutes seulement, un premier aperçu détaillé, chiffré mais clair et facile à comprendre d&#8217;un jeu de données raisonnablement volumineux. ChatGPT comprend, ou à tout le moins se comporte comme s&#8217;il comprenait le contenu des données :</p>



<figure class="wp-block-image alignright size-medium"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30.png"><img loading="lazy" decoding="async" width="300" height="190" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30-300x190.png" alt="" class="wp-image-26626" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30-300x190.png 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30-768x485.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h10_30.png 845w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></figure>



<ul class="wp-block-list">
<li>Il calcule un &#8220;<em>length of stay</em>&#8220;, interprétant donc bien deux colonnes (DH_arrivee et DH_sortie). Petit bémol cependant : dans les données, l&#8217;heure d&#8217;arrivée contient une date et une heure, mais le &#8220;DH_sortie&#8221; uniquement la date (avec 00:00 comme heure), rendant le calcul peu pertinent, surtout pour les courts séjours. Mais si on lui demande comment il a calculé ce &#8220;<em>length of stay</em>&#8220;, il fait remarquer le problème ;</li>



<li>Il &#8220;comprend&#8221; que la colonne &#8220;Code_CCMU&#8221; (avec les codes 1, 2, 3, 4, 5, P ou D) fait référence à la nomenclature française de la &#8220;<a href="https://fr.wikipedia.org/wiki/Classification_clinique_des_malades_aux_urgences">Classification Clinique des Malades aux Urgences</a>&#8221; et dénote la gravité. Il propose de faire une &#8220;severity analysis (CCMU code distribution)&#8221;, dans laquelle il interprète correctement les codes ;</li>



<li>Il fait des propositions, certes un peu naïves, mais pertinentes dans le contexte, dont voici deux exemples :</li>
</ul>



<figure class="wp-block-gallery has-nested-images columns-default wp-block-gallery-18 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h14_41.png"><img loading="lazy" decoding="async" width="627" height="418" data-id="26627" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h14_41.png" alt="" class="wp-image-26627" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h14_41.png 627w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h14_41-300x200.png 300w" sizes="auto, (max-width: 627px) 100vw, 627px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h18_59.png"><img loading="lazy" decoding="async" width="530" height="294" data-id="26628" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h18_59.png" alt="" class="wp-image-26628" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h18_59.png 530w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h18_59-300x166.png 300w" sizes="auto, (max-width: 530px) 100vw, 530px" /></a></figure>
</figure>



<h1 class="wp-block-heading">Analyse par catégorie</h1>



<p class="wp-block-paragraph">En observant les données, nous avons remarqué deux colonnes concernant la raison d&#8217;arrivée du patient : une colonne &#8220;motif_entree&#8221;, très peu structurée (&#8220;Trauma cheville G&#8221;, &#8220;A avalé une LED avec une pile&#8221;&#8230;) et une autre &#8220;semi-structurée&#8221; : &#8220;Cardiologie: Douleur thoracique atypique&#8221;, &#8220;Pneumologie: Dyspnée sans détresse&#8221;, &#8220;Toxicologie: Alcoolisation/Ivresse aigue&#8221;&#8230; Il serait intéressant de pouvoir analyser certains éléments en fonction d&#8217;une &#8220;catégorie&#8221; : &#8220;Cardiologie&#8221;, &#8220;Pneumologie&#8221;, &#8220;Toxicologie&#8221;&#8230;</p>



<p class="wp-block-paragraph">On peut tout simplement demander à ChatGPT &#8220;<em>extract categories from motif_venue</em>&#8220;, sans lui donner aucune information sur la façon de procéder. On reçoit alors en réponse une distribution de ce nouvel attribut, expliquant comment il l&#8217;a réalisé, ainsi que quelques commentaires pertinents sur la qualité des données : </p>



<figure class="wp-block-gallery has-nested-images columns-default wp-block-gallery-19 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h52_55.png"><img loading="lazy" decoding="async" width="725" height="746" data-id="26632" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h52_55.png" alt="" class="wp-image-26632" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h52_55.png 725w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h52_55-292x300.png 292w" sizes="auto, (max-width: 725px) 100vw, 725px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h53_20.png"><img loading="lazy" decoding="async" width="572" height="314" data-id="26633" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h53_20.png" alt="" class="wp-image-26633" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h53_20.png 572w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/2026-03-06_15h53_20-300x165.png 300w" sizes="auto, (max-width: 572px) 100vw, 572px" /></a></figure>
</figure>



<p class="wp-block-paragraph">Une question qui viendrait naturellement à l&#8217;esprit serait de voir comment celles-ci se comportent dans le temps. On peut par exemple imaginer que les problèmes pulmonaires surviennent surtout en hiver à l&#8217;époque des grippes et autres virus. Mais qu&#8217;en est-il des autres pathologies ?</p>



<figure class="wp-block-image alignleft size-full"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart.png"><img loading="lazy" decoding="async" width="592" height="491" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart.png" alt="" class="wp-image-26634" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart.png 592w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart-300x249.png 300w" sizes="auto, (max-width: 592px) 100vw, 592px" /></a></figure>



<p class="wp-block-paragraph">Demandons à ChatGPT &#8220;<em>Plot occurrence line charts grouped by cleansed categories, for the top 10</em>&#8220;. Nous obtiendrons alors le graphique ci-contre, ainsi qu&#8217;une série de commentaires. On peut être surpris par la chute vertigineuse des chiffres, toutes catégories confondues, survenue début 2020. Mais toute personne n&#8217;ayant pas vécu dans une grotte à cette période en aura rapidement compris la raison&#8230; qui n&#8217;a pas échappé à ChatGPT, comme en témoigne un de ses commentaires :</p>



<p class="wp-block-paragraph">&#8220;<em>The sharp drop in early 2020 is visible across all categories — a clear COVID shock to ED visit</em>&#8220;</p>



<p class="wp-block-paragraph">Pour obtenir des tendances saisonnières, on peut demander de sommer les trois années pour lesquelles on a des données entières et de lisser les données, en considérant une moyenne glissante sur 7 jours : &#8220;<em>For the top 10 cleansed categories, plot the number of visits per date in year (summing up values for 2017, 2018 and 2019, excluding 2016 and 2020), with a moving average of 7 days</em>&#8220;.</p>



<p class="wp-block-paragraph">Après quelques essais-erreurs de prompts pour sortir la légende du graphique ou adapter divers aspects, on obtient le résultat suivant :</p>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg.png"><img loading="lazy" decoding="async" width="1024" height="504" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg-1024x504.png" alt="" class="wp-image-26637" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg-1024x504.png 1024w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg-300x148.png 300w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg-768x378.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/category_linechart_movavg.png 1186w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Comme on s&#8217;y attendait, on peut observer que les pathologies pulmonaires (en brun) sont plus élevées en hiver qu&#8217;en été, mais ce qui est surprenant, c&#8217;est cet énorme pic à la toute fin de l&#8217;année de la stomatologie. Après s&#8217;être assuré que le pic se reproduisait bien tous les ans avec quelques prompts que nous passerons sous silence, nous avons demandé &#8220;<em>how to explain the peak of total visits for stomatology for the last week?</em>&#8220;<em>. </em>Nous avons été clairement bluffés par la pertinence de la réponse. </p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-20 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1.png"><img loading="lazy" decoding="async" width="609" height="1024" data-id="26638" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1-609x1024.png" alt="" class="wp-image-26638" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1-609x1024.png 609w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1-179x300.png 179w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1-768x1291.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_1.png 833w" sizes="auto, (max-width: 609px) 100vw, 609px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2.png"><img loading="lazy" decoding="async" width="654" height="1024" data-id="26639" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2-654x1024.png" alt="" class="wp-image-26639" srcset="https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2-654x1024.png 654w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2-192x300.png 192w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2-768x1202.png 768w, https://staging.smalsresearch.be/wp-content/uploads/2026/03/chatgpt_urgences_stomato_2.png 815w" sizes="auto, (max-width: 654px) 100vw, 654px" /></a></figure>
</figure>



<p class="wp-block-paragraph">Deux explications, que ChatGPT n&#8217;a pas pu trouver dans le jeu de données, mais uniquement en faisant le lien avec son &#8220;savoir général&#8221;, nous paraissent très plausibles :</p>



<ul class="wp-block-list">
<li>Les cabinets de dentisteries sont majoritairement fermés pendant les fêtes (ou plus généralement pendant les congés, vu les deux plus petits pics) ;</li>



<li>Beaucoup de monde veut &#8220;épuiser&#8221; ses possibilités de remboursement avant la fin de l&#8217;année. </li>
</ul>



<p class="wp-block-paragraph">Il va sans dire qu&#8217;un approfondissement serait nécessaire avant d&#8217;en tirer des décisions opérationnelles, mais on a déjà ici à très petits frais une série d&#8217;hypothèses à explorer.</p>



<h1 class="wp-block-heading">Limitations</h1>



<p class="wp-block-paragraph">Si un premier aperçu peut sembler impressionnant, il faut cependant rester prudent. De toute évidence, un tel outil peut être un allié précieux pour un <em>data scientist</em>, et peut même permettre à des profils &#8220;métiers&#8221; aux compétences techniques limitées d&#8217;accéder à une première analyse. Voici quelques points d&#8217;attention issus de notre expérience sur ce jeu de données.</p>



<ul class="wp-block-list">
<li>On ne devient pas &#8220;data scientist&#8221; simplement parce qu&#8217;on est capable de produire des beaux graphiques ou livrer des chiffres. Encore faut-il être capable de les interpréter, de s&#8217;assurer qu&#8217;on n&#8217;est pas tombé dans un des nombreux pièges que les statistiques nous tendent ;</li>



<li>Dans notre exemple, nous avons envoyé tout notre jeu de données à ChatGPT. Nous n&#8217;avons aucun contrôle sur ce qu&#8217;il en fait. Il s&#8217;agissait en l&#8217;occurrence de données publiques, mais qu&#8217;en sera-t-il avec des données confidentielles ? Il est toujours possible d&#8217;installer un LLM on-premise, mais les coûts sont autrement plus élevés et les performances moindres ;</li>



<li>Nous n&#8217;avons testé qu&#8217;un exemple avec une seule table. La littérature semble montrer que ça reste valable avec une base de données plus complexe, il nous faudra encore l&#8217;expérimenter ;</li>



<li>Le mode &#8220;question-réponse&#8221; permet uniquement un long dialogue linéaire. On se retrouve vite avec une longue discussion très désordonnée, plusieurs tentatives pour arriver à faire comprendre à l&#8217;outil ce que l&#8217;on veut. Si l&#8217;on veut par exemple corriger un critère en amont d&#8217;une analyse déjà faite (par exemple, la limiter à une période dans le temps, ou éliminer certains types de données), on ne peut pas revenir en arrière. Il sera nécessaire de recommencer un nouveau chat, ou de reposer toutes les questions ;</li>



<li>Dans le même ordre d&#8217;idée, si les données d&#8217;entrée sont mises à jour, il sera nécessaire de recommencer toute la conversation ;</li>



<li>À côté de l&#8217;aspect peu structuré, on note aussi un manque de cohérence :
<ul class="wp-block-list">
<li>Lors de l&#8217;extraction de la &#8220;catégorie&#8221;, nous avons demandé, outre la séparation sur la base du &#8220;:&#8221;, de corriger également certains problèmes de qualité (pour par exemple remplacer &#8220;Cardiovasculaire&#8221; par &#8220;Cardiologie&#8221; ou &#8220;Intoxications&#8221; par &#8220;Toxicologie&#8221;). Les questions qui suivaient de près ce nettoyage considéraient la version la plus élaborée. Mais quelques jours après, quand nous évoquions &#8220;cleansed categories&#8221;, ChatGPT se contentait de la séparation sur la base du &#8220;:&#8221;,</li>



<li>Nous avons posé exactement la même question à un mois d&#8217;intervalle. Les valeurs numériques fournies dans la réponse restaient cohérentes, mais le texte était radicalement différent sur la forme (bien que semblable sur le fond) ;</li>
</ul>
</li>



<li>Le code Python proposé à chaque question est réellement exécuté sur les serveurs de ChatGPT qui se sert du résultat pour générer sa réponse. Mais le temps d&#8217;exécution disponible est assez limité. Entraîner un modèle de Machine Learning simple (par exemple &#8220;<em>Compute feature importance using Random Forest, with &#8216;scanner&#8217; as target</em>&#8220;) provoque souvent un <em>timeout</em>. Cependant, ChatGPT fait alors une série de propositions, visant à réduire le temps de calcul nécessaire (stratification, réduction du nombre d&#8217;arbres, diminution de la cardinalité de certaines variables&#8230;).</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Une approche pertinente serait probablement d&#8217;utiliser ChatGPT ou un de ses concurrents pour découvrir les données, identifier rapidement des anomalies ou des problèmes de qualité, les approches possibles, les modèles de prédiction adaptés&#8230; On pourrait aussi demander de générer des graphiques, des tableaux, des chiffres&#8230; On pourra ensuite récupérer les morceaux de codes proposés qui pourront être intégrés dans un script ou un notebook consolidé. Notons que l&#8217;on peut également interagir avec les API de ChatGPT et autres Gemini. Nous aborderons cette approche dans un prochain article.</p>



<p class="wp-block-paragraph">En regardant vers l&#8217;avenir, nous ne craignons pas que le GenAI remplace les data scientists. De toute évidence, l&#8217;augmentation inévitable des volumes de données de plus en plus importants et complexes ne va faire qu&#8217;accroître la nécessité de personnel capable de mener leur analyse. Mais le GenAI va indiscutablement changer leur métier. Et le GenAI va certainement remplacer les data scientists qui ne l&#8217;utilisent pas par les data scientists qui sauront s&#8217;en servir efficacement.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://staging.smalsresearch.be/talk-to-your-data-avec-chatgpt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Een &#8220;on-premise&#8221; Trusted Execution Environment gebruiken</title>
		<link>https://staging.smalsresearch.be/een-betrouwbare-runtime-omgeving-on-premise-gebruiken/</link>
					<comments>https://staging.smalsresearch.be/een-betrouwbare-runtime-omgeving-on-premise-gebruiken/#respond</comments>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 06:30:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[confidential computing]]></category>
		<category><![CDATA[confidential containers]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[TEE]]></category>
		<category><![CDATA[Trusted Execution Environment]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=26524</guid>

					<description><![CDATA[In deze blogpost gaan we in op het onderwerp door bepaalde aspecten van "CoCo" confidential containers in detail te beschrijven en onze installatie op onze eigen hardware toe te lichten.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Cet article est aussi disponible en <a href="https://staging.smalsresearch.be/utiliser-un-environnement-dexecution-de-confiance-on-premise/">français</a>.</em></p>



<p class="wp-block-paragraph">In een <a href="/je-data-beschermen-tegen-beheerders-on-premise-vertrouwelijke-it/">vorige blogpost</a> hebben we de voordelen besproken van confidential containers en hun architectuur in het CoCo-project.&nbsp;In deze blogpost gaan we dieper in op het onderwerp door bepaalde aspecten van CoCo in detail te beschrijven en onze installatie op onze eigen hardware toe te lichten.</p>



<h1 class="wp-block-heading">Containercertificering</h1>



<p class="wp-block-paragraph">Het gebruik van Kubernetes-pods als abstractielaag voor vertrouwelijke container-workloads introduceert diverse uitdagingen. Door hun dynamische karakter – het maken, verwijderen, updaten van de containers – en de invloed van de Kubernetesomgeving (omgevingsvariabelen, toelatingscontrollers, enz.) valt het moeilijk te garanderen dat enkel de door de gebruiker bedoelde code wordt uitgevoerd. Zo kan het injecteren van kwaadaardige variabelen of het wijzigen van de specificatie van een pod voordat deze wordt gestart, de vertrouwelijkheid in gevaar brengen.</p>



<p class="wp-block-paragraph">Het CoCo-project stelt een elegante oplossing voor, namelijk het gebruik van een engine voor beveiligingsbeleid, geïntegreerd in de containerruntime-omgeving binnen de trusted execution environment (TEE), die de door de gebruiker gedefinieerde regels toepast. Deze engine kan bijvoorbeeld alleen bepaalde images of commando’s toestaan en problematische verzoeken (zoals het uitvoeren van ongeoorloofde processen) afwijzen. <a href="#Figuur-1">Figuur 1</a> toont een voorbeeld van zo’n beleid.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package agent_policy

# Seules certaines images de conteneurs peuvent être exécutées
default CreateContainerRequest := false
CreateContainerRequest if {
    every storage in input.storages {
    some allowed_image in policy_data.allowed_images
    storage.source == allowed_image
  }
}

# Seules certaines commandes peuvent être exécutées
# via ‘kubectl exec’ dans les images de conteneurs
default ExecProcessRequest := false
ExecProcessRequest if {
  input_command = concat(" ", input.process.Args)
      some allowed_command in policy_data.allowed_commands
      input_command == allowed_command
}

policy_data := {
    "allowed_commands": &#91;
        "ls",
        "cat",
    &#93;,
    "allowed_images": &#91;
        "pause",
        "my-registry.be/,my-app@sha256:5ed86f469bbc40026a0235dd92e2b0b0c7ce54e3b254132e271a9b9e85d5f220
",
    &#93;,
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">package agent_policy</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"># Seules certaines images de conteneurs peuvent être exécutées</span></span>
<span class="line"><span style="color: #D4D4D4">default CreateContainerRequest := </span><span style="color: #569CD6">false</span></span>
<span class="line"><span style="color: #D4D4D4">CreateContainerRequest</span><span style="color: #C586C0"> if</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">every</span><span style="color: #D4D4D4"> storage</span><span style="color: #569CD6"> in</span><span style="color: #D4D4D4"> input.storages {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">some</span><span style="color: #D4D4D4"> allowed_image</span><span style="color: #569CD6"> in</span><span style="color: #D4D4D4"> policy_data.allowed_images</span></span>
<span class="line"><span style="color: #D4D4D4">    storage</span><span style="color: #D7BA7D">.source</span><span style="color: #D4D4D4"> == allowed_image</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"># Seules certaines commandes peuvent être exécutées</span></span>
<span class="line"><span style="color: #D4D4D4"># via ‘kubectl exec’ dans les images de conteneurs</span></span>
<span class="line"><span style="color: #D4D4D4">default ExecProcessRequest := </span><span style="color: #569CD6">false</span></span>
<span class="line"><span style="color: #D4D4D4">ExecProcessRequest</span><span style="color: #C586C0"> if</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">input_command</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">concat</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot; &quot;</span><span style="color: #D4D4D4">, input.process.Args)</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #DCDCAA">some</span><span style="color: #D4D4D4"> allowed_command</span><span style="color: #569CD6"> in</span><span style="color: #D4D4D4"> policy_data.allowed_commands</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">input_command</span><span style="color: #D4D4D4"> == allowed_command</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">policy_data</span><span style="color: #D4D4D4"> := {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">&quot;allowed_commands&quot;</span><span style="color: #D4D4D4">: &#91;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;ls&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;cat&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">    &#93;,</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">&quot;allowed_images&quot;</span><span style="color: #D4D4D4">: &#91;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;pause&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;my-registry.be/,my-app@sha256:5ed86f469bbc40026a0235dd92e2b0b0c7ce54e3b254132e271a9b9e85d5f220</span></span>
<span class="line"><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">    &#93;,</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<p class="has-text-align-center wp-element-caption wp-block-paragraph" id="Figuur-1">Figuur 1 – Voorbeeld van een beperkend beveiligingsbeleid voor images die kunnen worden uitgevoerd en de commando’s die in de image kunnen worden aangeroepen. Dit beleid wordt toegepast door een agent die in de vertrouwelijke VM zit.</p>



<p class="wp-block-paragraph">Vier componenten van de vertrouwelijke virtuele guestmachine worden altijd gecontroleerd om te bepalen of ze nog goed werken: de firmware (bijvoorbeeld OVMF), de kernel van het besturingssysteem, de kernel commandoregel en het rootbestandssysteem (<a href="#Figuur-2">Figuur 2</a>). Een vertrouwelijke externe entiteit, vaak Trustee genoemd, zorgt ervoor dat de vertrouwensketen versterkt wordt.</p>



<figure class="wp-block-image aligncenter size-full is-resized" id="Figuur-2"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/Picture2-Measurement.svg"><img decoding="async" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/Picture2-Measurement.svg" alt="" class="wp-image-26527" style="width:500px"/></a><figcaption class="wp-element-caption">Figuur 2 &#8211; Samenstelling van de “meting” (measurement) die door het <a href="https://staging.smalsresearch.be/tools-voor-confidential-computing/">SEV-systeem</a> van de AMD-microprocessor wordt berekend tijdens de certificering. De meting is de cryptografische hashwaarde van een versleuteld geheugengebied waarin zich de firmware bevindt (bijv. OVMF). In deze firmware zijn de cryptografische hashwaarden geïnjecteerd van de OS-kernel van de geattesteerde virtuele machine, de command-line waarmee deze kernel is opgestart en, tot slot, het root-bestandssysteem. </figcaption></figure>



<p class="wp-block-paragraph">Vertrouwelijke containers hebben echter meestal initialisatiedata nodig die niet direct in de image van de virtuele machine of de toepassingscontainer kunnen worden opgenomen, zoals certificaten, adressen van certificeringsdiensten of toe te passen beveiligingsbeleidsregels. Deze data zijn weliswaar niet geheim, maar moeten wel worden beschermd tegen wijzigingen.</p>



<p class="wp-block-paragraph">Deze initialisatiedata, ook wel <code>init-data</code> genoemd, kunnen worden opgegeven in de vorm van een woordenboek (bijv. JSON-bestanden, TOML, YAML), gecodeerd in base64 en doorgegeven aan de Kubernetes-pod via een Kubernetes annotation (<a href="#Figuur-3">Figuur 3</a>). Om de integriteit ervan te garanderen, wordt hun cryptografische hashwaarde door de certificeringsagent (die in de vertrouwelijke virtuele machine draait) als data voor de berekening van de certificering verstrekt (dit kan worden gedaan met behulp van het veld “<em>HostData</em>” van SEV-SNP). Het is dan mogelijk om de initialisatiedata die naar de hostmachine zijn gestuurd voor het starten van de container te vergelijken met de hashwaarde die op het moment van de certificering is ontvangen, zodat elke wijziging tijdens de certificering op afstand kan worden gedetecteerd.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>version = "0.1.0"
algorithm = "sha256"

&#91;data&#93;

# Configuration de l’agent d’attestation
"aa.toml" = '''
&#91;token_configs&#93;
&#91;token_configs.kbs&#93;
url = "${KBS_ADDRESS}"
'''

# Configuration du gestionnaire de données secrètes
"cdh.toml" = '''
&#91;kbc&#93;
name = "cc_kbc"
url = "${KBS_ADDRESS}"

&#91;image&#93;
authenticated_registry_credentials_uri = "kbs:///${REGISTRY_AUTH_KBS_PATH}"
image_security_policy_uri = "${SECURITY_POLICY_KBS_URI}"
'''

# Politique de sécurité restreignant l’environnement du conteneur
"policy.rego"= '''
&#91;Voir Figure 1 ci-dessus&#93;
'''</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">version</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;0.1.0&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">algorithm</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;sha256&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">&#91;data&#93;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Configuration de l’agent d’attestation</span></span>
<span class="line"><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4">aa.toml</span><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"><span style="color: #CE9178">&#91;token_configs&#93;</span></span>
<span class="line"><span style="color: #CE9178">&#91;token_configs.kbs&#93;</span></span>
<span class="line"><span style="color: #CE9178">url = &quot;${KBS_ADDRESS}&quot;</span></span>
<span class="line"><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Configuration du gestionnaire de données secrètes</span></span>
<span class="line"><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4">cdh.toml</span><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"><span style="color: #CE9178">&#91;kbc&#93;</span></span>
<span class="line"><span style="color: #CE9178">name = &quot;cc_kbc&quot;</span></span>
<span class="line"><span style="color: #CE9178">url = &quot;${KBS_ADDRESS}&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #CE9178">&#91;image&#93;</span></span>
<span class="line"><span style="color: #CE9178">authenticated_registry_credentials_uri = &quot;kbs:///${REGISTRY_AUTH_KBS_PATH}&quot;</span></span>
<span class="line"><span style="color: #CE9178">image_security_policy_uri = &quot;${SECURITY_POLICY_KBS_URI}&quot;</span></span>
<span class="line"><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Politique de sécurité restreignant l’environnement du conteneur</span></span>
<span class="line"><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4">policy.rego</span><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4">= </span><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"><span style="color: #CE9178">&#91;Voir Figure 1 ci-dessus&#93;</span></span>
<span class="line"><span style="color: #CE9178">&#39;&#39;&#39;</span></span></code></pre></div>



<p class="has-text-align-center wp-element-caption wp-block-paragraph" id="Figuur-3">Figuur 3 &#8211; Voorbeeld van initialisatiedata die (in gecodeerde vorm) via een Kubernetes-annotatie aan de CoCo-guestagent in de vertrouwelijke virtuele machine worden geleverd.</p>



<h1 class="wp-block-heading">Sleutelbeheer</h1>



<p class="wp-block-paragraph">Een externe sleutelbemiddelingsdienst (key broker service), die kan worden gekoppeld aan een transactionele &#8216;black box&#8217;, stelt de container in staat om dynamisch de resources op te halen die nodig zijn voor de werking ervan. Indien de client nog niet in het bezit is van een eerder verkregen authenticatietoken van de sleutelbemiddelingsdienst, moet hij zich eerst authenticeren, waarna de sleutelbemiddelingsdienst hem <a href="https://github.com/confidential-containers/trustee/blob/main/kbs/docs/kbs_attestation_protocol.md">een challenge stuurt</a> die hij moet beantwoorden (<a href="#Figuur-4">Figuur 4</a>).</p>



<p class="wp-block-paragraph">De client genereert een paar cryptografische sleutels en vraagt de processor om een certificaat te verstrekken met daarin de hashwaarde van zijn openbare sleutel en een unieke willekeurige waarde die door de dienst in zijn challenge is verzonden. Het certificaat dat de openbare sleutel van de client, de unieke willekeurige waarde die door de service is gestuurd en de meting van de vertrouwelijke VM die de client bevat aan elkaar koppelt, wordt door de processor ondertekend. De service gebruikt een certificeringsagent die het certificaat controleert door de handtekening te verifiëren en de meting te vergelijken met een referentiewaarde.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/03/Picture4-Authantication-protocol.svg"><img decoding="async" src="https://staging.smalsresearch.be/wp-content/uploads/2026/03/Picture4-Authantication-protocol.svg" alt="" class="wp-image-26528" style="width:600px"/></a><figcaption class="wp-element-caption"><a>Figuur </a>4 &#8211; Protocol voor authenticatie van de vertrouwelijke virtuele machine bij de externe “Trustee”-service, bestaande uit een sleutelbemiddelingsservice en een certificeringsservice: om een opgeslagen waarde (geheim, sleutel, enz.) van de bemiddelingsservice te kunnen verkrijgen, moet de client eerst zijn authenticiteit bewijzen via de certificering. Dit protocol volgt het <a href="https://www.ietf.org/rfc/rfc9334.html">RATS-model (RFC9334)</a>.</figcaption></figure>



<h1 class="wp-block-heading">Installatie en testen</h1>



<p class="wp-block-paragraph">Om de CoCo-omgeving te testen, hebben we gekozen voor een EPYC <a href="https://www.amd.com/en/products/processors/server/epyc/9005-series/amd-epyc-9335.html">9335-microprocessor</a> van AMD. Deze maakt gebruik van SEV-SNP-technologie voor versleuteling en bescherming van de integriteit van het RAM-geheugen. We hebben een machine geassembleerd met een moederbord dat deze microprocessor ondersteunt (Supermicro MBD-H13SSL-NT-O) en 128 GB RAM-geheugen. Vervolgens moesten we het BIOS configureren om ervoor te zorgen dat de gewenste beveiligingsfuncties van de microprocessor goed waren geactiveerd. We hebben ook gekozen voor de Ubuntu 24.04.3 LTS-distributie van het Linux-besturingssysteem. Voordat we de beveiligingsfuncties van de processor konden testen, moesten we ten slotte de kernel van het besturingssysteem opnieuw compileren. Dit is eigenlijk vrij simpel dankzij de <a href="https://github.com/AMDESE/AMDSEV">scripts die AMD heeft meegegeven</a>.</p>



<p class="wp-block-paragraph">Eenmaal het systeem is ingesteld, kun je het Docker-platform installeren (om containerimages te maken), de containeruitvoeringsinterface <em>containerd </em>(inbegrepen in de Docker-distributie) en het Kubernetes-beheersysteem. Het instellen van deze tools is best lastig en afhankelijk van de versie. Er zijn <a href="https://gitlab.smalsrech.be/fape/coco-with-snp">verschillende scripts</a> beschikbaar om deze installatie te vergemakkelijken.</p>



<p class="wp-block-paragraph">Nadat het systeem was geïnstalleerd, konden we een bestaande toepassing in vertrouwelijke containers zetten: je hoeft alleen maar de naam van de runtimeklasse die Kubernetes gebruikt (<code>runtimeClassName</code>) in het YAML-configuratiebestand van Kubernetes te veranderen in een van de CoCo-klassen (bijvoorbeeld <code>kata-qemu-snp</code>). Natuurlijk is deze simpele wijziging niet genoeg om te profiteren van de beveiligingsfuncties van CoCo. Je moet de productiecyclus aanpassen om de volgende stappen toe te voegen:</p>



<ul class="wp-block-list">
<li>Versleuteling van de containerimage</li>



<li>Ondertekening van de containerimage</li>



<li>Beschikbaar stellen van versleutelings- en ondertekeningssleutels</li>
</ul>



<p class="wp-block-paragraph">Zodra de containerimage op de gebruikelijke manier is gemaakt, bijvoorbeeld met docker build, kan deze worden versleuteld met de tool <a href="https://github.com/containers/skopeo">skopeo</a>, die verschillende algoritmen ondersteunt: <a href="https://www.ietf.org/rfc/rfc7516.html">JWE (RFC7516)</a>, <a href="https://www.ietf.org/rfc/rfc4880.html">PGP (RFC4880)</a> en <a href="https://www.ietf.org/rfc/rfc2315.html">PKCS7 (RFC2315)</a>. Deze versleutelde image kan vervolgens worden ondertekend met de tool <a href="https://github.com/sigstore/cosign">cosign</a> en ten slotte worden geüpload naar een imageregister.</p>



<p class="wp-block-paragraph">Bij het opstarten van de container moeten de CoCo-componenten in de vertrouwelijke virtuele machine de handtekening kunnen verifiëren en de image kunnen ontsleutelen. Hiervoor moeten de benodigde sleutels beschikbaar worden gesteld. Hier komt het sleutelbemiddelingssysteem om de hoek kijken. Zoals we eerder hebben gezien, voert dit systeem een certificeringsprotocol uit voordat het de sleutels verstrekt.</p>



<p class="wp-block-paragraph">De implementatie van confidential ccontainers is transparant voor de gebruiker van Kubernetes. Zodra het gebruikelijke commando <code>kubectl apply</code> wordt aangeroepen, wordt een lichte Kata-virtuele machine aangemaakt. Deze moet bij de sleutelbemiddelaar de toegangssleutel tot het imageregister (als dit niet openbaar is), het toe te passen beveiligingsbeleid, de sleutel voor handtekeningverificatie en de sleutel voor het ontsleutelen van de image ophalen. Deze informatie wordt pas verstrekt nadat de virtuele machine is geverifieerd (zie hierboven). De agents in de virtuele machine kunnen dan het beveiligingsbeleid toepassen, de image downloaden, de handtekening controleren en deze decoderen voordat de toepassingscontainer in de virtuele machine wordt gestart.</p>



<p class="wp-block-paragraph">Wat betreft de communicatie van de gecontaineriseerde toepassing met externe diensten, moeten wederzijds erkende versleutelingssleutels worden ingesteld. Een eerste mogelijkheid is dat de vertrouwde container bij het opstarten een cryptografisch sleutelpaar aanmaakt en de cryptografische hashwaarde van deze openbare sleutel bij de certificering verstrekt. Dit wordt gebruikt binnen het authenticatieprotocol dat in Figuur 4 wordt beschreven. Een andere optie is om de openbare sleutel van een certificeringsinstantie in de versleutelde en vervolgens ondertekende image te verstrekken. De container kan dan de certificaten checken die deze autoriteit heeft ondertekend en de encryptiesleutels aanvaarden. Een derde optie bestaat erin om te steunen op de sleutelbemiddelingsdienst: hiermee kan de container op een veilige manier geheimen ophalen. Afhankelijk van de gekozen optie moet de code van de toepassing al dan niet worden aangepast.</p>



<h1 class="wp-block-heading">Bescherming tegen een beheerder</h1>



<p class="wp-block-paragraph">Wat kan een beheerder van de hostmachine doen?&nbsp; In principe niet veel, behalve de container opstarten.</p>



<p class="wp-block-paragraph">Het certificeringsmechanisme zorgt er namelijk voor dat hij niets kan vervangen of simuleren wat betreft de onderdelen van de virtuele machine die wordt gebruikt om de containers te starten. Door de versleuteling van het geheugen dat aan de virtuele machine is toegewezen, heeft hij geen toegang tot de data die in de virtuele machine en de container worden verwerkt. Door de versleuteling en ondertekening van de containerimage kan hij geen andere container vervangen of de aard van de container achterhalen. In de veronderstelling dat de toepassing geconfigureerd is om versleuteld te communiceren met externe diensten waarmee ze moet interageren, kan de beheerder ook geen toegang krijgen tot gevoelige data door het netwerkverkeer te observeren, tenzij hij ook bevoorrechte toegang heeft tot het systeem voor het aanmaken van sleutels. Ten slotte kan hij de container ook niet ondervragen via het commando <code>kubectl exec</code>, omdat het kan worden beperkt door een beveiligingsbeleid (zie <a href="#Figure-1">Figuur 1</a>).</p>



<p class="wp-block-paragraph">De beheerder kan daarentegen de toepassingslogboeken lezen die door Kubernetes op de host zijn opgeslagen. Daarom is het belangrijk dat de workload provider ervoor zorgt dat zijn code geen gevoelige informatie onthult in de gelogde berichten van de toepassing.</p>



<p class="wp-block-paragraph">Tot slot, zoals we in de vorige blogpost al stelden, zijn vertrouwde uitvoeringsomgevingen niet perfect en houdt hun beveiligingsmodel meestal geen rekening met fysieke aanvallen. In een omgeving zoals de G-Cloud biedt de toevoeging ervan tal van mogelijkheden. In een omgeving waar echter noch SMALS, noch haar klanten, noch zelfs de Belgische Staat enige technische of juridische controle hebben over de infrastructuur, zijn er aanzienlijke risico’s die serieus moeten worden geëvalueerd.</p>



<h1 class="wp-block-heading">Conclusie</h1>



<p class="wp-block-paragraph">In deze blogpost en de <a href="https://staging.smalsresearch.be/je-data-beschermen-tegen-beheerders-on-premise-vertrouwelijke-it/">vorige </a>hebben we de echte voordelen belicht op het gebied van beveiliging die microprocessors kunnen bieden om &#8220;vertrouwde uitvoeringsomgevingen&#8221; binnen een IT-infrastructuur te creëren. Vooral het “on-premise” gebruik ervan&nbsp; maakt het mogelijk om gecontaineriseerde toepassingen beter te beschermen tegen kwaadwillige beheerders of indringers en zo onze leden nog meer garanties te bieden.</p>



<p class="wp-block-paragraph">Omdat ze eenvoudiger in gebruik zijn dan geavanceerde cryptografische methoden, kunnen dergelijke systemen ons ook helpen om meer generieke problemen op te lossen dan met cryptografie alleen, of problemen die we tot nu toe simpelweg niet konden oplossen.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://staging.smalsresearch.be/een-betrouwbare-runtime-omgeving-on-premise-gebruiken/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Utiliser un environnement d’exécution de confiance « on-premise »</title>
		<link>https://staging.smalsresearch.be/utiliser-un-environnement-dexecution-de-confiance-on-premise/</link>
					<comments>https://staging.smalsresearch.be/utiliser-un-environnement-dexecution-de-confiance-on-premise/#respond</comments>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 06:30:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[confidential computing]]></category>
		<category><![CDATA[confidential containers]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[TEE]]></category>
		<category><![CDATA[Trusted Execution Environment]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=26503</guid>

					<description><![CDATA[Dans cet article, nous détaillons le fonctionnement de certains aspects des conteneurs confidentiels "CoCo" et décrivons notre installation sur notre propre matériel.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Dit artikel is ook beschikbaar in het <a href="https://staging.smalsresearch.be/een-betrouwbare-runtime-omgeving-on-premise-gebruiken/">Nederlands</a>.</em></p>



<p class="wp-block-paragraph">Dans un <a href="/proteger-ses-donnees-des-administrateurs-linformatique-confidentielle-on-premise/">précédent article</a>, nous avons exposé les avantages des conteneurs confidentiels et leur architecture dans le projet «&nbsp;CoCo.&nbsp;» Dans cet article, nous approfondissons notre propos en détaillant le fonctionnement de certains aspects de CoCo et en décrivant notre installation sur notre propre matériel.</p>



<h1 class="wp-block-heading">Attestation de conteneurs</h1>



<p class="wp-block-paragraph">Les capsules Kubernetes, utilisées comme abstraction pour les charges de travail conteneurisées confidentielles, introduisent plusieurs défis. Leur nature dynamique — création, suppression, mise à jour de conteneurs — et l’influence de l’environnement Kubernetes (variables d’environnement, contrôleurs d’admission, etc.) rendent difficile la garantie que seul le code prévu par l’utilisateur sera exécuté. Par exemple, l’injection de variables malveillantes ou la modification de la spécification d’une capsule avant son lancement peuvent compromettre la confidentialité.</p>



<p class="wp-block-paragraph">Le projet CoCo propose une solution élégante qui consiste à utiliser un moteur de politiques de sécurité, intégré à l’environnement d’exécution du conteneur dans l’environnement d’exécution de confiance (EEC), qui applique des règles définies par l’utilisateur. Ce moteur peut, par exemple, autoriser uniquement certaines images ou commandes, et rejeter les appels problématiques (comme l’exécution de processus non autorisés). La <a href="#Figure-1">Figure 1</a> montre un exemple d’une telle politique.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package agent_policy

# Seules certaines images de conteneurs peuvent être exécutées
default CreateContainerRequest := false
CreateContainerRequest if {
    every storage in input.storages {
    some allowed_image in policy_data.allowed_images
    storage.source == allowed_image
  }
}

# Seules certaines commandes peuvent être exécutées
# via ‘kubectl exec’ dans les images de conteneurs
default ExecProcessRequest := false
ExecProcessRequest if {
  input_command = concat(" ", input.process.Args)
      some allowed_command in policy_data.allowed_commands
      input_command == allowed_command
}

policy_data := {
    "allowed_commands": &#91;
        "ls",
        "cat",
    &#93;,
    "allowed_images": &#91;
        "pause",
        "my-registry.be/,my-app@sha256:5ed86f469bbc40026a0235dd92e2b0b0c7ce54e3b254132e271a9b9e85d5f220
",
    &#93;,
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">package agent_policy</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"># Seules certaines images de conteneurs peuvent être exécutées</span></span>
<span class="line"><span style="color: #D4D4D4">default CreateContainerRequest := </span><span style="color: #569CD6">false</span></span>
<span class="line"><span style="color: #D4D4D4">CreateContainerRequest</span><span style="color: #C586C0"> if</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">every</span><span style="color: #D4D4D4"> storage</span><span style="color: #569CD6"> in</span><span style="color: #D4D4D4"> input.storages {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">some</span><span style="color: #D4D4D4"> allowed_image</span><span style="color: #569CD6"> in</span><span style="color: #D4D4D4"> policy_data.allowed_images</span></span>
<span class="line"><span style="color: #D4D4D4">    storage</span><span style="color: #D7BA7D">.source</span><span style="color: #D4D4D4"> == allowed_image</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"># Seules certaines commandes peuvent être exécutées</span></span>
<span class="line"><span style="color: #D4D4D4"># via ‘kubectl exec’ dans les images de conteneurs</span></span>
<span class="line"><span style="color: #D4D4D4">default ExecProcessRequest := </span><span style="color: #569CD6">false</span></span>
<span class="line"><span style="color: #D4D4D4">ExecProcessRequest</span><span style="color: #C586C0"> if</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">input_command</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">concat</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot; &quot;</span><span style="color: #D4D4D4">, input.process.Args)</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #DCDCAA">some</span><span style="color: #D4D4D4"> allowed_command</span><span style="color: #569CD6"> in</span><span style="color: #D4D4D4"> policy_data.allowed_commands</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">input_command</span><span style="color: #D4D4D4"> == allowed_command</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">policy_data</span><span style="color: #D4D4D4"> := {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">&quot;allowed_commands&quot;</span><span style="color: #D4D4D4">: &#91;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;ls&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;cat&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">    &#93;,</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">&quot;allowed_images&quot;</span><span style="color: #D4D4D4">: &#91;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;pause&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;my-registry.be/,my-app@sha256:5ed86f469bbc40026a0235dd92e2b0b0c7ce54e3b254132e271a9b9e85d5f220</span></span>
<span class="line"><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">    &#93;,</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<p class="has-text-align-center wp-element-caption wp-block-paragraph" id="Figure-1">Figure 1 – Exemple de politique de sécurité (langage <a href="https://www.openpolicyagent.org/docs/policy-language">REGO</a>) restreignant les images pouvant être exécutées et les commandes pouvant être invoquées dans l’image. Cette politique est appliquée par un agent inclus dans la machine virtuelle confidentielle.</p>



<p class="wp-block-paragraph">Quatre composants de la machine virtuelle confidentielle invitée sont systématiquement mesurés pour assurer leur intégrité : le micrologiciel (e.g., OVMF), le noyau du système d’exploitation, la ligne de commande du noyau et le système de fichiers racine (<a href="#Figure-2">Figure 2</a>). Une entité externe de confiance, généralement appelée Trustee, atteste de l’intégrité de l’invité, renforçant ainsi la chaîne de confiance.</p>



<figure class="wp-block-image aligncenter size-full is-resized" id="Figure-2"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Picture2-Composition-mesure.svg"><img decoding="async" src="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Picture2-Composition-mesure.svg" alt="" class="wp-image-26665" style="width:500px"/></a><figcaption class="wp-element-caption">Figure 2 – Composition de la «&nbsp;mesure&nbsp;» calculée par le <a href="/outils-pour-linformatique-confidentielle/#AMD_SEV-SNP">système SEV</a> du microprocesseur AMD lors de l’attestation. La mesure est la valeur de hachage cryptographique d’une zone de la mémoire chiffrée où se trouve le micrologiciel (e.g., OVMF) dans lequel ont été injectées les valeurs de hachage cryptographique du noyau du système d’exploitation de la machine virtuelle attestée, de la ligne de commande utilisée pour lancer ce noyau et enfin du système de fichier racine.</figcaption></figure>



<p class="wp-block-paragraph">Cependant, les conteneurs confidentiels nécessitent généralement des données d’initialisation qui ne peuvent pas être intégrées directement dans l’image de la machine virtuelle ou du conteneur applicatif, comme les certificats, les adresses des services d’attestation ou les politiques de sécurité à appliquer. Ces données, bien que non secrètes, doivent être protégées contre toute altération.</p>



<p class="wp-block-paragraph">Ces données d’initialisation appelées <a href="https://github.com/confidential-containers/trustee/blob/main/kbs/docs/initdata.md"><code>init-data</code></a> peuvent être spécifiées sous forme de dictionnaire (e.g., fichiers JSON, TOML, YAML), encodé en base64 et passé à la capsule Kubernetes via une annotation Kubernetes (<a href="#Figure-3">Figure 3</a>). Afin de garantir leur intégrité, leur valeur de hachage cryptographique est fournie par l’agent d’attestation (fonctionnant dans la machine virtuelle confidentielle) en donnée d’entrée pour le calcul de l’attestation (cela peut se faire en utilisant le champ «&nbsp;<em>HostData&nbsp;</em>» de SEV-SNP). Il est alors possible de comparer les données d’initialisation envoyées à la machine hôte pour le lancement du conteneur avec la valeur de hachage reçue au moment de l’attestation, assurant ainsi que toute modification sera détectée lors de l’attestation à distance.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>version = "0.1.0"
algorithm = "sha256"

&#91;data&#93;

# Configuration de l’agent d’attestation
"aa.toml" = '''
&#91;token_configs&#93;
&#91;token_configs.kbs&#93;
url = "${KBS_ADDRESS}"
'''

# Configuration du gestionnaire de données secrètes
"cdh.toml" = '''
&#91;kbc&#93;
name = "cc_kbc"
url = "${KBS_ADDRESS}"

&#91;image&#93;
authenticated_registry_credentials_uri = "kbs:///${REGISTRY_AUTH_KBS_PATH}"
image_security_policy_uri = "${SECURITY_POLICY_KBS_URI}"
'''

# Politique de sécurité restreignant l’environnement du conteneur
"policy.rego"= '''
&#91;Voir Figure 1 ci-dessus&#93;
'''
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">version</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;0.1.0&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">algorithm</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;sha256&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">&#91;data&#93;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Configuration de l’agent d’attestation</span></span>
<span class="line"><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4">aa.toml</span><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"><span style="color: #CE9178">&#91;token_configs&#93;</span></span>
<span class="line"><span style="color: #CE9178">&#91;token_configs.kbs&#93;</span></span>
<span class="line"><span style="color: #CE9178">url = &quot;${KBS_ADDRESS}&quot;</span></span>
<span class="line"><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Configuration du gestionnaire de données secrètes</span></span>
<span class="line"><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4">cdh.toml</span><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"><span style="color: #CE9178">&#91;kbc&#93;</span></span>
<span class="line"><span style="color: #CE9178">name = &quot;cc_kbc&quot;</span></span>
<span class="line"><span style="color: #CE9178">url = &quot;${KBS_ADDRESS}&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #CE9178">&#91;image&#93;</span></span>
<span class="line"><span style="color: #CE9178">authenticated_registry_credentials_uri = &quot;kbs:///${REGISTRY_AUTH_KBS_PATH}&quot;</span></span>
<span class="line"><span style="color: #CE9178">image_security_policy_uri = &quot;${SECURITY_POLICY_KBS_URI}&quot;</span></span>
<span class="line"><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Politique de sécurité restreignant l’environnement du conteneur</span></span>
<span class="line"><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4">policy.rego</span><span style="color: #9CDCFE">&quot;</span><span style="color: #D4D4D4">= </span><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"><span style="color: #CE9178">&#91;Voir Figure 1 ci-dessus&#93;</span></span>
<span class="line"><span style="color: #CE9178">&#39;&#39;&#39;</span></span>
<span class="line"></span></code></pre></div>



<p class="has-text-align-center wp-element-caption wp-block-paragraph" id="Figure-3">Figure 3 – Exemple de données d’initialisation fournies (sous forme encodée) via une annotation Kubernetes à l’agent invité CoCo dans la machine virtuelle confidentielle.</p>



<h1 class="wp-block-heading">Gestion de clés</h1>



<p class="wp-block-paragraph">Un service extérieur de médiation de clés, qui peut être connecté à une boîte noire transactionnelle, permet au conteneur d’obtenir dynamiquement des ressources nécessaires à son fonctionnement. Si le client n’est pas déjà en possession d’un témoin de connexion précédemment obtenu du service de médiation de clés, il doit d’abord s’authentifier et le service de médiation de clés lui <a href="https://github.com/confidential-containers/trustee/blob/main/kbs/docs/kbs_attestation_protocol.md">répond avec un défi</a> auquel il doit répondre (<a href="#Figure-4">Figure 4</a>).</p>



<p class="wp-block-paragraph">Le client génère une paire de clés cryptographiques et demande au processeur de lui fournir une attestation en incluant la valeur de hachage de sa clé publique et une valeur aléatoire unique envoyée par le service dans son défi. L’attestation qui lie clé publique du client, valeur aléatoire unique envoyée par le service et mesure de la VM confidentielle contenant le client est signée par le processeur. Le service fait appel à un agent d’attestation qui vérifie l’attestation en vérifiant la signature et en comparant la mesure à une valeur de référence.</p>



<figure class="wp-block-image aligncenter size-full is-resized" id="Figure-4"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Picture4-Protocol-authentification.svg"><img decoding="async" src="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Picture4-Protocol-authentification.svg" alt="" class="wp-image-26664" style="width:600px"/></a><figcaption class="wp-element-caption">Figure 4 – Protocole d’authentification de la machine virtuelle confidentielle auprès du service extérieur «&nbsp;Trustee&nbsp;» composé d’un service de médiation de clés et d’un service d’attestation&nbsp;: afin de pouvoir obtenir une valeur stockée (secret, clé, etc.) par le service de médiation, le client doit d’abord prouver son authenticité via l’attestation. Ce protocole suit le modèle <a href="https://www.ietf.org/rfc/rfc9334.html">RATS (RFC9334)</a>.</figcaption></figure>



<h1 class="wp-block-heading">Installation et tests</h1>



<p class="wp-block-paragraph">Afin de tester l’environnement CoCo, nous avons choisi d’utiliser un microprocesseur <a href="https://www.amd.com/fr/products/processors/server/epyc/9005-series/amd-epyc-9335.html">EPYC 9335</a> de la société AMD. Il met en œuvre la technologie SEV-SNP de chiffrement et de protection de l’intégrité de la mémoire vive. Nous avons assemblé une machine avec une carte mère prenant en charge ce microprocesseur (Supermicro MBD-H13SSL-NT-O) et 128 Go de mémoire vive. Il a ensuite fallu configurer le BIOS afin que les fonctionnalités souhaitées de sécurité du microprocesseur soient bien activées. Nous avons aussi opté pour la distribution Ubuntu 24.04.3 LTS du système d’exploitation Linux. Avant de pouvoir tester les fonctionnalités de sécurité du processeur, nous avons enfin dû recompiler le noyau du système d’exploitation. L’opération est en fait relativement simple grâce aux <a href="https://github.com/AMDESE/AMDSEV">scripts fournis par AMD</a>.</p>



<p class="wp-block-paragraph">Une fois le système configuré, il est alors possible d’y installer la plateforme Docker (afin de pouvoir créer des images de conteneurs), l’interface d’exécution de conteneur <code>containerd </code>(incluse dans la distribution de Docker) et le système de gestion Kubernetes. La configuration de ces outils est assez délicate et sensible aux version. Plusieurs scripts permettant de faciliter cette installation sont <a href="https://gitlab.smalsrech.be/fape/coco-with-snp">fournis ici</a>.</p>



<p class="wp-block-paragraph">Une fois le système installé, il nous a été possible de déployer une application existante dans des conteneurs confidentiels&nbsp;: il suffit en fait de changer le nom de classe d’exécution utilisé par Kubernetes (<code>runtimeClassName</code>) dans le fichier YAML de configuration de Kubernetes pour l’une des classes de CoCo (e.g., <code>kata-qemu-snp</code>). Bien sûr ce changement simple ne suffit pas à bénéficier des fonctionnalités de sécurité de CoCo. Il est nécessaire de modifier le cycle de production afin d’ajouter les étapes suivantes&nbsp;:</p>



<ul class="wp-block-list">
<li>Chiffrement de l’image du conteneur</li>



<li>Signature de l’image du conteneur</li>



<li>Mise à disposition des clés de chiffrement et de signature</li>
</ul>



<p class="wp-block-paragraph">Une fois l’image du conteneur créée de la manière habituelle, par exemple avec docker build, celle-ci peut être chiffrée avec l’outil <a href="https://github.com/containers/skopeo">skopeo</a> qui prend en charge différents algorithmes&nbsp;: <a href="https://www.ietf.org/rfc/rfc7516.html">JWE (RFC7516)</a>, <a href="https://www.ietf.org/rfc/rfc4880.html">PGP (RFC4880)</a>, et <a href="https://www.ietf.org/rfc/rfc2315.html">PKCS7 (RFC2315)</a>. Cette image chiffrée peut ensuite être signée avec l’outil <a href="https://github.com/sigstore/cosign">cosign</a> et enfin chargée sur un registre d’images.</p>



<p class="wp-block-paragraph">Au moment du lancement du conteneur, les composants CoCo inclus dans la machine virtuelle confidentielle devront pouvoir vérifier la signature et déchiffrer son image. Pour cela, il est nécessaire de mettre à disposition les clé requises. C’est là que le système de médiation de clés intervient. Comme nous l’avons vu précédemment, celui effectue un protocole d’attestation avant de fournir les clés.</p>



<p class="wp-block-paragraph">Le déploiement des conteneurs confidentiels est transparent vis-à-vis de l’utilisateur de Kubernetes. Une fois l’invocation de la commande habituelle <code>kubectl apply</code>, une machine virtuelle légère Kata est créée. Celle-ci doit récupérer auprès du médiateur de clés, la clé d’accès au registre d’image (si celui-ci n’est pas public), la politique de sécurité à appliquer, la clé de vérification de signature et la clé de déchiffrement de l’image. Ces informations ne sont fournies qu’après l’attestation de la machine virtuelle (voir plus haut). Les agents inclus dans la machine virtuelle peuvent alors appliquer la politique de sécurité, télécharger l’image, vérifier sa signature et la déchiffrer avant de lancer le conteneur applicatif dans la machine virtuelle.</p>



<p class="wp-block-paragraph">En ce qui concerne la communication de l’application conteneurisée avec des services extérieurs, il convient d’établir des clés de chiffrement mutuellement reconnues. Une première possibilité est que le conteneur confidentiel crée une paire de clé cryptographiques à son lancement et fournisse la valeur de hachage cryptographique de cette clé publique lors de l’attestation. C’est ce qui est utilisé dans le protocole d’authentification présenté dans la <a href="#Figure-4">Figure 4</a>. Une autre option est de fournir la clé publique d’une autorité de certification dans l’image chiffrée-puis-signée. Le conteneur pourra alors vérifier les certificats signés par cette autorité et accepter des clés de chiffrement. Une troisième option consiste à s’appuyer sur le service de médiation de clés&nbsp;: celui-ci permet au conteneur de récupérer des secrets de manière sécurisée. En fonction de l’option choisie, il conviendra de modifier plus ou moins le code de l’application.</p>



<h1 class="wp-block-heading">Protection vis-à-vis d’un administrateur</h1>



<p class="wp-block-paragraph">Que peut faire un administrateur de la machine hôte&nbsp;? A priori, pas grand-chose, à part lancer le conteneur.</p>



<p class="wp-block-paragraph">En effet, le mécanisme d’attestation l’empêche de substituer ou de simuler les composants de la machine virtuelle utilisée pour le lancement des conteneurs. Le chiffrement de la mémoire allouée à la machine virtuelle le bloque dans l’observation des données traitées dans la machine virtuelle et le conteneur. Le chiffrement et la signature de l’image du conteneur ne lui permettent ni de substituer un autre conteneur, ni de connaître la nature du conteneur. En supposant que l’application soit configurée pour communiquer de manière chiffrée avec les services extérieurs avec lesquelles elle doit interagir, l’administrateur ne peut pas non plus accéder aux données sensibles en observant le trafic réseau, sauf s’il a également un accès privilégié au système de création des clés. Enfin, il ne peut pas non plus interroger le conteneur via la commande <code>kubectl exec</code> car celle-ci peut être restreinte via une politique de sécurité (voir <a href="#Figure-1">Figure 1</a>).</p>



<p class="wp-block-paragraph">En revanche, l’administrateur peut lire les journaux applicatifs enregistrés par Kubernetes sur l’hôte. Par conséquent, il est important que le fournisseur de la charge de travail prenne soin que son code ne divulgue pas des informations sensibles dans les messages journalisés de l’application.</p>



<p class="wp-block-paragraph">Enfin, comme nous l’avons rappelé dans l’<a href="/proteger-ses-donnees-des-administrateurs-linformatique-confidentielle-on-premise/">article précédent</a>, les environnements d’exécution de confiance ne sont pas parfaits et leur modèle de sécurité ne tient généralement pas compte des attaques physiques. Dans un environnement comme le G-Cloud, leur ajout offre de nombreuses possibilités. En revanche, dans un environnement où ni SMALS, ni ses clients, ni même l’État belge n’ont le moindre contrôle technique ou juridique sur l’infrastructure, il existe des risques importants qu’il convient d’évaluer sérieusement.</p>



<h1 class="wp-block-heading">Conclusion</h1>



<p class="wp-block-paragraph">À travers cet article et <a href="/proteger-ses-donnees-des-administrateurs-linformatique-confidentielle-on-premise/">le précédent</a>, nous avons mis en avant les avantages réels en termes de sécurité que pourraient apporter des microprocesseurs permettant de créer des environnements d’exécution de confiance au sein d’une infrastructure informatique. En particulier, leur utilisation «&nbsp;on-premise&nbsp;» permet de mieux protéger des applications conteneurisées d’administrateurs malveillants ou d’intrus et donc d’offrir des garanties encore plus fortes à nos Membres.</p>



<p class="wp-block-paragraph">Plus simples d’utilisation que les méthodes cryptographiques avancées, de tels systèmes pourraient aussi nous permettre de résoudre des problèmes plus génériques que la cryptographie ou des problèmes que nous ne pouvions pas résoudre jusqu’à présent.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://staging.smalsresearch.be/utiliser-un-environnement-dexecution-de-confiance-on-premise/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Legacy &#038; IA : Voyagez dans le Temps depuis votre Terminal</title>
		<link>https://staging.smalsresearch.be/legacy-ai-voyagez-temps-terminal/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 14 Apr 2026 09:48:59 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=28963</guid>

					<description><![CDATA[Depuis l'essor de l'engouement pour les grands modèles de langage, la plupart des développeurs ont sans doute déjà pu constater le gain de productivité que ces outils peuvent offrir, à condition de les utiliser correctement. Dans cet article de blog, nous explorons la possibilité d'aller plus loin : l'IA offre-t-elle une aide suffisante afin de maîtriser le legacy code ?]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignleft size-large is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-1024x1024.png" alt="" class="wp-image-27693" style="width:274px;height:auto"/></a></figure>



<p class="justify-text no-top-margin wp-block-paragraph"><em>Dit artikel is ook beschikbaar in het <a href="https://staging.smalsresearch.be/legacy-ai-tijdreizen-in-je-terminal/" data-type="post" data-id="27622">Nederlands</a>.</em></p>



<p class="justify-text wp-block-paragraph" style="padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">Depuis l&#8217;essor de l&#8217;engouement pour les grands modèles de langage, la plupart des développeurs ont sans doute déjà pu constater le gain de productivité que ces outils peuvent offrir, à condition de les utiliser correctement. Dans cet article de blogue, nous explorons la possibilité d&#8217;aller plus loin&nbsp;: l&#8217;IA offre-t-elle une aide suffisante afin de maîtriser le <em>legacy code</em>&nbsp;?</p>



<span id="more-28963"></span>



<p class="justify-text wp-block-paragraph">Le recours aux grands modèles de langage <a href="https://staging.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/">(Large Language Model &#8211; LLM)</a> en programmation est en effet bien connu à présent&nbsp;: cela va de la formulation de questions à un <em>chatbot</em> (&#8220;comment écrire un algorithme en Java qui&#8230;&#8221;), à un <a href="https://staging.smalsresearch.be/llms-pour-code/"><em>code completion</em> de plus en plus intelligent et étendu</a> (saisie automatique de ce que vous souhaitez taper dans l&#8217;éditeur), jusqu&#8217;au <a href="https://staging.smalsresearch.be/vibe-coding-avec-les-ides-agentique/"><em>vibe coding</em> complet </a>(dans l&#8217;IDE, ou même simplement dans un terminal)&nbsp;: des agents d&#8217;IA rédigent, à l&#8217;aide de <em>prompts</em>, des pans entiers de code sur votre machine &#8211; oui, même des applications fonctionnelles.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-794e3cfa wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:30%">
<p class="justify-text wp-block-paragraph">Cette méthode de travail a déjà été décrite <a href="https://staging.smalsresearch.be/vibe-coding-avec-les-ides-agentique/">dans un article de blog précédent</a>, et les mises en garde et les points auxquels il faut prêter attention, restent d&#8217;actualité : surveiller en permanence, remettre les choses en question, vérifier, et fournir à l&#8217;IA la bonne quantité de contexte utile (un art en soi). Cependant, le traitement du <strong>code <em>legacy</em></strong> pose encore un certain nombre de problèmes supplémentaires&nbsp;:</p>



<ul class="wp-block-list">
<li class="justify-text">Il ne s&#8217;agit pas d&#8217;une nouvelle construction (ou <em>greenfield</em>)&nbsp;: les décisions du passé, souvent obscures, ont un impact considérable.</li>



<li class="justify-text">Dans de nombreux cas, il existe déjà une masse de code.</li>



<li class="justify-text">Souvent, la compilation, l’exécution et le test du code nécessitent une technologie spécifique, qui est elle-même obsolète et parfois difficile à installer ou à simuler.</li>



<li class="justify-text">En tant qu’humain, on n’est souvent plus au courant du comment et du pourquoi de la base de code existante, ce qui rend plus difficile l’évaluation critique des résultats de l’IA.</li>
</ul>
</div>



<div class="wp-block-column is-style-section-1 has-accent-5-background-color has-background is-layout-flow wp-container-core-column-is-layout-3b5b8ca1 wp-block-column-is-layout-flow is-style-section-1--21" style="border-width:2px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;flex-basis:70%">
<h3 class="wp-block-heading is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-right:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);margin-left:var(--wp--preset--spacing--20)"><span style="text-decoration: underline;"><em>Vibe coding</em> : quelques conseils</span></h3>



<p class="justify-text has-small-font-size wp-block-paragraph" style="padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)"><em>Nous avons déjà découvert ces astuces simples dans le cadre de notre travail sur le code </em>legacy<em> et l&#8217;IA, mais elles s&#8217;appliquent plus largement à tous les projets de </em>Vibe Coding<em>.</em></p>



<ul class="wp-block-list">
<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Nettoyage en profondeur&nbsp;: avant de laisser une IA se pencher sur une base de code, vous devez vous assurer qu&#8217;elle ne contient aucune donnée privée, aucun mot de passe ni aucune autre information sensible&nbsp;!</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Planification&nbsp;: demandez des options et reportez l&#8217;exécution. En effet, lorsqu&#8217;on maîtrise soi-même ce que l&#8217;on souhaite réaliser, on a certainement déjà une idée précise de l&#8217;objectif à atteindre. Il peut toutefois s&#8217;avérer utile de commencer une conversation avec l&#8217;IA en gardant l&#8217;esprit ouvert et de lui demander des idées et des options (par exemple en matière d&#8217;architecture ou de technologie utilisée) pour concrétiser sa vision générale (tout en précisant à l&#8217;IA, parfois trop zélée, qu&#8217;il ne s&#8217;agit encore que de planification). Demandez spécifiquement plusieurs suggestions ! Cela peut aider à réfléchir ensemble et à enrichir vos propres idées avec davantage d’inspiration. Au fil de la conversation, explorez plus en profondeur les options qui vous plaisent le plus, puis n’ajoutez votre expertise personnelle que pour affiner les idées de l’IA, jusqu’à ce qu’un plan d’action concret et aussi optimal que possible ait vu le jour. Ce n’est qu’ensuite que nous passerons à une mise en œuvre effective..</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Indirection et outils. En particulier lorsque vous travaillez via une CLI (Command Line Interface), ni vous ni l’IA n’avez immédiatement conscience de tous les outils existants qui pourraient être exploités pour atteindre vos objectifs. Laissez l’IA rechercher les outils susceptibles de vous aider, et aidez-la à les installer. Plus vous pouvez accomplir de tâches à l&#8217;aide d&#8217;outils, moins le contexte est encombré par un travail &#8220;manuel&#8221; inutile effectué par l&#8217;IA elle-même (sans parler des économies réalisées en termes de consommation de <em>tokens</em>). Il existe par exemple toutes sortes d&#8217;outils d&#8217;analyse statique de code permettant d&#8217;évaluer et de maintenir la qualité des lignes de code que vous écrivez. L&#8217;IA n&#8217;a souvent aucun mal à mettre en œuvre bon nombre des suggestions fournies après l&#8217;analyse.</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Mode Expert&nbsp;: parfois, les outils standard ne suffisent pas pour aider suffisamment l&#8217;IA à accomplir ce que vous souhaitez qu&#8217;elle fasse. Dans ce cas, vous pouvez d&#8217;abord laisser l&#8217;IA écrire ses propres outils. De cette manière, il est possible de s&#8217;assurer que le résultat, ou l&#8217;<em>output</em> de l&#8217;outil, soit concis et synthétique pour les tâches suivantes, afin de ne pas surcharger le contexte. Les <em>context windows</em> des LLM s&#8217;agrandissent certes de plus en plus, mais il faut tout de même veiller à ce qu&#8217;elles ne contiennent que les éléments les plus utiles (attention au <a href="https://redis.io/blog/context-rot/"><em>context rot</em></a>).</li>
</ul>
</div>
</div>



<p class="wp-block-paragraph">Nous avons donné une définition très large du code <em>legacy</em> dans un <a href="https://staging.smalsresearch.be/code-herite-meilleures-pratiques-ia/">précédent article de blog</a>. Commençons donc par préciser ce que nous entendons par &#8220;<em>legacy</em>&#8221; et par mieux illustrer le &#8220;degré de difficulté&#8221; des projets legacy.</p>



<h2 class="wp-block-heading">&#8220;Ancien&#8221; code&nbsp;: une multitude de possibilités</h2>



<p class="justify-text wp-block-paragraph">Il n’existe pas vraiment de définition officielle du code <em>legacy</em>&nbsp;; généralement, on parle de l’utilisation d’une technologie qui n’est plus prise en charge, difficile à maintenir, ou simplement de &#8220;code dont on hérite de quelqu’un d’autre&#8221;. Il s’agit évidemment toujours de code encore en service, et donc important. Ironiquement, les applications les plus critiques sont souvent celles qui existent depuis des années et auxquelles on &#8220;fait confiance&#8221; depuis longtemps, mais sans les entretenir correctement.</p>



<p class="justify-text wp-block-paragraph">L&#8217;IA peut nous aider à entretenir n&#8217;importe quel code ; nous allons donc présenter un spectre allant du code <em>legacy</em> le plus ancien et le plus problématique au code de projets ne nécessitant qu&#8217;une petite mise à jour. À une extrémité du spectre, on trouve des programmes écrits dans des langages de programmation obsolètes, selon une architecture dépassée, utilisant des bases de données qui ne sont plus d’actualité et fonctionnant sur des serveurs équipés de systèmes d’exploitation qui ne sont plus pris en charge&nbsp;: avec ces géants, on doit souvent craindre une défaillance critique à la moindre modification erronée. À l’autre extrémité, on trouve des logiciels assez bien entretenus, mais qui utilisent une bibliothèque logicielle qui n’est plus la version la plus récente&nbsp;: il est généralement très facile de les remettre entièrement à jour. Enfin, quelque part entre les deux, on trouve des applications pour lesquelles la plupart des développeurs n’utiliseraient pas encore le terme <em>legacy</em>, mais qui nécessitent néanmoins des migrations complexes, avec par exemple un ou deux <em>frameworks</em> obsolètes à remplacer.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-scaled.png"><img loading="lazy" decoding="async" width="1024" height="506" src="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-1024x506.png" alt="" class="wp-image-27634" style="width:1301px;height:auto"/></a></figure>



<p class="justify-text wp-block-paragraph">Que pouvons-nous en faire&nbsp;? Les LLM offrent-ils d&#8217;autres possibilités en fonction de la position du projet sur ce spectre&nbsp;? Jusqu&#8217;à présent, nos recherches se sont concentrées sur la partie gauche de ce spectre&nbsp;; la suite de cet article portera donc davantage sur les possibilités d&#8217;aborder le &#8220;véritable&#8221; legacy. Plus tard dans l&#8217;année, nous approfondirons également ce que nous pouvons faire en matière de migrations et d&#8217;updates.</p>



<h1 class="wp-block-heading">Utilisation des LLM sur des bases de code <em>legacy</em></h1>



<p class="justify-text wp-block-paragraph">Il est clair qu&#8217;un simple prompt &#8220;réécris ce programme selon les normes modernes&#8221; ne fonctionnera pas (même si certains fournisseurs affirment que cela sera bientôt possible). Nous devrons poser des questions un peu plus concrètes et décomposer le travail en plusieurs étapes. Il y a en fait deux choses que nous pouvons faire avec notre code <em>legacy&nbsp;</em>: le réécrire et le documenter.</p>



<h2 class="wp-block-heading">Réécriture du code <em>legacy</em></h2>



<p class="justify-text wp-block-paragraph">Lorsque nous commençons à réécrire du code, nous devons souvent tenir compte du fait que la reconstruction complète d’un très grand projet est une tâche trop difficile. Il est possible d’obtenir des &#8220;quick wins&#8221; en réécrivant stratégiquement certaines parties d’un projet, qui seront ensuite réutilisées dans un contexte plus large, où une équipe humaine et l’IA reconstruiront l’application dans les règles de l’art. Nos expériences nous ont montré qu’il était trop ambitieux d’attendre de l’IA qu’elle utilise une architecture entièrement nouvelle tout en traduisant l’ancien code vers le nouveau. En revanche, il est possible de &#8220;vibe coder&#8221; une grande partie de la charpente typique d’un nouveau projet, puis d’y injecter de manière ciblée un certain nombre de morceaux de code qui sont des traductions de parties d’un projet <em>legacy</em>. En tant qu’êtres humains, notre tâche consiste à indiquer clairement quelle architecture nous attendons et quelles sont les règles de qualité du code nouveau.</p>



<p class="justify-text wp-block-paragraph">L&#8217;un des principaux défis liés à la réécriture de code à l&#8217;aide de l&#8217;IA consiste à tester l&#8217;exactitude de la traduction&nbsp;: le code fait-il toujours ce qu&#8217;il faisait auparavant (indépendamment du fait que cela soit souhaitable, car même le <em>business case</em> peut parfois être trop obsolète dans le cas d&#8217;un projet <em>legacy</em>)&nbsp;? Pour les projets relativement récents, il existe déjà de nombreux tests que nous pouvons effectuer pour vérifier l&#8217;exactitude, mais avec les anciens systèmes <em>legacy</em>, nous sommes souvent confrontés au problème que l&#8217;application est simplement testée en production, ou du moins avec des données de production&nbsp;: il n&#8217;y a pas de tests spécifiques ni même de données de test pouvant être utilisées en toute sécurité. Dans ce cas, il s&#8217;agit de créer un environnement dans lequel nous pouvons tester le nouveau code en toute sécurité, ce qui est généralement un travail ad hoc et demande une certaine créativité. Nous ne pouvons pas envoyer de données de production vers le <em>cloud</em>, nous devons donc nous assurer que le LLM ne puisse pas les lire. Ce serait plus simple si nous pouvions utiliser des LLM fonctionnant en local, mais pour l&#8217;instant, ceux-ci ne sont pas encore assez puissants (quand ils sont disponibles) pour effectuer des tâches aussi complexes avec du code <em>legacy</em>.</p>



<p class="justify-text wp-block-paragraph">L&#8217;interface utilisateur constitue un autre défi&nbsp;: dans les projets plus anciens, celle-ci est souvent obsolète et il faut construire une nouvelle GUI à partir de zéro. Cela pose toutefois le problème de ne plus disposer d&#8217;une base de référence dans l&#8217;ancien projet&nbsp;: la nouvelle interface devra généralement être testée manuellement par des personnes. J&#8217;espère toutefois que nous verrons des progrès dans ce domaine dans un avenir proche, en ce qui concerne les possibilités de l&#8217;IA. En effet, nous voyons déjà apparaître des systèmes capables de contrôler l&#8217;intégralité de votre ordinateur (comme OpenClawd), et l&#8217;intégration avec des frameworks plus traditionnels pour le test d&#8217;une interface graphique fait également partie des possibilités.</p>



<p class="justify-text wp-block-paragraph">Enfin, les petits projets <em>legacy</em> constituent également un domaine où nous pouvons obtenir des résultats rapides. Si nous utilisons un programme <em>legacy </em>petit à moyen, doté de fonctionnalités limitées et d’une GUI simple, ou présentant un <em>input </em>et un <em>output </em>clairs en cas de traitement par lots, et qu’il n’existe aucun <em>business case</em> justifiant son intégration dans une autre méthode de travail, nous pouvons alors tenter une approche directe pour construire une version moderne dans un nouveau langage de programmation à l’aide de l’IA. Dans ce cas, il faudra tout de même bien tester et adopter une approche structurée avec un accompagnement des développeurs humains, mais il est possible d&#8217;essayer cette méthode pour des applications non critiques. Une application à usage interne, par exemple, constitue généralement un bon premier candidat.</p>



<h2 class="wp-block-heading">Documentation du code <em>legacy</em></h2>



<p class="justify-text wp-block-paragraph">Parfois, la réécriture du code <em>legacy </em>avec l&#8217;IA est un peu trop ambitieuse, ou nous avons besoin de plus d&#8217;informations avant de nous y risquer. Il peut être intéressant de se tourner d’abord vers la documentation : l’IA peut également nous aider à faire en sorte que l’exploration d’une base de code <em>legacy </em>ressemble un peu moins à de l’archéologie de haut niveau.</p>



<p class="justify-text wp-block-paragraph">Expliquer un morceau de code de petite à moyenne taille et en extraire la logique business, ou analyser un morceau plus important et en expliquer la structure et l’architecture, tout cela est tout à fait possible avec les grands modèles de langage actuels. Il est toutefois possible d’aller plus loin&nbsp;: il est possible de créer des outils d’IA pour l&#8217;aider à explorer la base de code et, par exemple, à générer des diagrammes illustrant les dépendances entre les segments de code. Ou bien on peut lui faire écrire des scripts afin de structurer soigneusement ses conclusions après chaque analyse dans un fichier texte pour elle-même et un PDF destiné à l’utilisateur humain.</p>



<p class="justify-text wp-block-paragraph">Il est également possible d&#8217;adopter une approche hiérarchique : commencer par explorer la base de code, puis approfondir progressivement l&#8217;analyse des différents modules afin d&#8217;obtenir de plus en plus de détails et de compléter l&#8217;analyse. Il s&#8217;agit là de l&#8217;approche descendante, que nous pouvons toutefois compléter par une version ascendante&nbsp;: une fois que nous sommes allés en profondeur, nous pouvons à nouveau demander un résumé afin de construire une présentation mieux documentée de la situation dans son ensemble.</p>



<p class="justify-text wp-block-paragraph">Il est toutefois important ici de savoir à l&#8217;avance ce que nous souhaitons exactement atteindre. Une analyse générale d’une base de code par l’IA peut s’avérer intéressante lorsque les utilisateurs humains ne connaissent pas du tout le système et souhaitent disposer de points de repère pour se familiariser avec celui-ci.</p>



<p class="justify-text wp-block-paragraph">Cependant, lorsque l&#8217;objectif est de pouvoir assurer la maintenance de la base de code, il est préférable de mettre en place un système proposant un <em>chatbot</em> qui connaît le contexte spécifique et les particularités du projet <em>legacy</em>, et qui peut répondre à des questions très ciblées à ce sujet. Cela est possible, par exemple, dans CoPilot Studio. Si cela ne fonctionne pas correctement, il est possible d&#8217;envisager de construire manuellement une base de connaissances en utilisant l&#8217;IA qui pourra ensuite être utilisée par l&#8217;IA pour répondre aux questions.</p>



<p class="justify-text wp-block-paragraph">Une autre option consiste à extraire des informations spécifiques de la base de code, telles que la logique business par module individuel, ou du pseudocode pouvant aider les développeurs humains à réimplémenter cette logique dans un autre projet. (Et bien sûr, une IA peut également être mise à contribution lors de cette deuxième étape).</p>



<p class="justify-text wp-block-paragraph">Avec une touche de créativité, nous pouvons concevoir une meilleure approche pour la plupart des analyses ad hoc que celle consistant à &#8220;se contenter d’analyser à tout va&#8221;. Et la documentation d’un système <em>legacy </em>peut tout simplement constituer une première étape vers sa réécriture.</p>



<h1 class="wp-block-heading" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)">Conclusion : professionnels recherchés</h1>



<figure class="wp-block-image alignright size-large is-resized is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-scaled.png"><img loading="lazy" decoding="async" width="1024" height="559" src="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-1024x559.png" alt="" class="wp-image-27699" style="aspect-ratio:1.8333516399024625;object-fit:contain;width:546px;height:auto"/></a></figure>



<p class="justify-text no-top-margin wp-block-paragraph">Comme mentionné précédemment, les LLM nous offrent progressivement des possibilités très puissantes pour traiter nos bases de code <em>legacy</em>, surtout lorsque nous avons accès aux modèles volumineux et puissants disponibles aujourd’hui. Nous constatons toutefois qu’il s’agit en réalité d’une boîte à outils très bien fournie, comprenant plusieurs outils puissants, et que nous devons savoir ce que nous voulons en faire et comment les utiliser au mieux.</p>



<p class="justify-text wp-block-paragraph">Tout n’est pas encore entièrement automatisé&nbsp;: nous aurons donc toujours besoin de bons professionnels pour tirer le meilleur parti de ces outils. Notre conseil aux développeurs est de ne surtout pas avoir peur de l’IA et de l’utiliser régulièrement lors de l’analyse et du développement de logiciels&nbsp;: l’expérience est la meilleure école pour former les bons professionnels dont nous avons besoin dans ce domaine.</p>



<p class="justify-text wp-block-paragraph">Pour l’instant, la conclusion est donc la suivante : pour le code <em>legacy</em>, l’IA n’est pas une panacée, mais une boîte à outils pratique qu’il vaut mieux essayer dans le cadre d’une approche plus large. Comme indiqué, nous nous pencherons plus tard dans l&#8217;année sur le milieu et la partie droite du spectre du code <em>legacy</em>. Nous pensons qu&#8217;il existe ici davantage de possibilités d&#8217;automatisation de certains workflows, surtout si nous exploitons davantage les agents. Il est donc possible que, pour des projets un peu plus simples et répétitifs, nous puissions évoluer du &#8220;professionnel&#8221; vers &#8220;l&#8217;usine&#8221;.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Legacy &#038; AI: Tijdreizen in je Terminal</title>
		<link>https://staging.smalsresearch.be/legacy-ai-tijdreizen-in-je-terminal/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 07:56:17 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">https://staging.smalsresearch.be/?p=27622</guid>

					<description><![CDATA[Sinds de hype van grote taalmodellen is losgebarsten, zullen de meeste ontwikkelaars ondertussen al wel geproefd hebben van de productiviteitswinst die deze tools, mits correct gebruik, kunnen bieden. In deze blog onderzoeken we of we verder kunnen gaan dan dat: biedt het AI ook voldoende hulp bij het beheersen van Legacy Code?]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignleft size-large is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj.png"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_6jrj5n6jrj5n6jrj-1024x1024.png" alt="" class="wp-image-27693" style="width:274px;height:auto"/></a></figure>



<p class="no-top-margin justify-text wp-block-paragraph"><em>Cet article est aussi disponible en <a href="https://staging.smalsresearch.be/legacy-ai-voyagez-temps-terminal/" data-type="post" data-id="28963">français</a>.</em></p>



<p class="justify-text wp-block-paragraph" style="padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">Sinds de hype van grote taalmodellen is losgebarsten, zullen de meeste ontwikkelaars ondertussen al wel geproefd hebben van de productiviteitswinst die deze tools, mits correct gebruik, kunnen bieden. In deze blog onderzoeken we of we verder kunnen gaan dan dat: biedt AI ook voldoende hulp bij het beheersen van Legacy Code?</p>



<span id="more-27622"></span>



<p class="justify-text wp-block-paragraph">Het inzetten van <a href="https://staging.smalsresearch.be/zin-onzin-en-nut-van-llms-zijn-ze-de-hype-waard/" data-type="post" data-id="24386">Large Language Models (LLM)</a> bij het programmeren is inderdaad ondertussen stilaan goed gekend: het gaat van vragen stellen aan een chatbot (&#8220;hoe schrijf ik in Java een algoritme dat &#8230; &#8220;), overheen steeds <a href="https://staging.smalsresearch.be/llms-voor-code/" data-type="post" data-id="18875">slimmere en langer wordende <em>code completion</em></a> (automatisch aanvullen wat je wil typen in de editor), tot <a href="https://staging.smalsresearch.be/vibe-coding-met-agentic-ides/" data-type="post" data-id="22499">volledige <em>vibe coding</em></a> (in de IDE, of zelfs gewoon in een terminal): AI agenten, via prompts, hele stukken code &#8211; ja, zelfs werkende toepassingen &#8211; laten schrijven op je machine.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-794e3cfa wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:30%">
<p class="justify-text wp-block-paragraph">Deze manier van werken beschreven we reeds <a href="https://staging.smalsresearch.be/vibe-coding-met-agentic-ides/" data-type="post" data-id="22499">in een vorige blogpost</a>, en de caveats, zaken waarop men moet letten, gelden nog steeds: blijf continu opvolgen, stel zaken in vraag, controleer, en geef de juiste hoeveelheid nuttige context mee aan het AI (een kunst op zich). Voor het behandelen van <strong><em>legacy code</em></strong>, stellen er zich echter nog een aantal verdere problemen:</p>



<ul class="wp-block-list">
<li class="justify-text">Het is geen nieuwbouw (of <em>greenfield</em>): er is erg veel impact van &#8211; vaak obscure &#8211; beslissingen uit het verleden.</li>



<li class="justify-text">In veel gevallen is er reeds een massa code aanwezig.</li>



<li class="justify-text">Vaak vraagt het com- pileren, uitvoeren en testen van de code specifieke technologie, die zelf verouderd is en soms moeilijk te in-stalleren of simuleren.</li>



<li class="justify-text">Je bent als mens vaak niet meer onderwezen in het hoe en waarom van de bestaande codebase, waardoor het moeilijker wordt de resultaten van het AI kritisch te be-oordelen.</li>
</ul>
</div>



<div class="wp-block-column is-style-section-1 has-accent-5-background-color has-background is-layout-flow wp-container-core-column-is-layout-3b5b8ca1 wp-block-column-is-layout-flow is-style-section-1--22" style="border-width:2px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;flex-basis:70%">
<h3 class="wp-block-heading is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-right:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);margin-left:var(--wp--preset--spacing--20)"><span style="text-decoration: underline;">Vibe Coding: Een aantal Tips</span></h3>



<p class="justify-text has-small-font-size wp-block-paragraph" style="padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)"><em>Deze eenvoudige truukjes ondervonden we reeds bij ons werk rond Legacy Code &amp; AI, maar zijn breder toepasbaar naar alle Vibe Coding projecten.</em></p>



<ul class="wp-block-list">
<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Grote Schoonmaak: vóór je een AI loslaat op een codebase, moet je ervoor zorgen dat er geen privégegevens, paswoorden, of andere gevoelige informatie in te vinden zijn!</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Planning: vraag om opties en stel executie uit. Als je zelf bedreven bent in wat je wil doen, heb je vast en zeker al een idee van waar je precies naartoe wilt. Het kan echter soms lonen om je gesprek met het AI heel open van geest te beginnen en te vragen naar ideeën en opties (b.v. qua architectuur of gebruikte technologie) om je algemene visie te bewaarlijken (waarbij je het soms overijverige AI ook duidelijk maakt dat er alleen nog maar wordt gepland). Vraag specifiek naar meerdere suggesties! Dit kan helpen bij het brainstormen, en om je eigen ideeën aan te vullen met meer inspiratie. In het vervolg van het geprek ga je dan dieper in op de opties die je het meeste aanstaan, en dan pas vul je aan met je eigen expertise om de ideeën van het AI bij te sturen, tot er een concreet plan van actie is ontstaan dat zo optimaal mogelijk is. Pas daarna gaan we over tot effectieve implementatie.</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Indirectie en Tools. Zeker als je via een CLI (Command Line Interface) werkt, zijn zowel jij als het AI zich niet meteen bewust van alle mogelijke reeds bestaande tools die zouden kunnen worden geëxploiteerd om je doelen te bereiken. Laat het AI zoeken naar tools die zouden kunnen helpen, en helpen bij de installatie ervan. Hoe meer zaken je via tools kan doen, hoe minder de context wordt vervuild met nodeloos &#8220;manueel&#8221; werk door het AI zelf (om nog maar te zwijgen van de besparing qua token gebruik). Zo bestaan er b.v. allerlei <a href="https://en.wikipedia.org/wiki/Static_program_analysis">static code analysis tools</a> die je kan gebruiken om de kwaliteit van je geschreven code te evalueren en hoog te houden. Het is vaak een koud kunstje voor het AI om heel wat van de gegeven suggesties na de analyse uit te voeren.</li>



<li class="justify-text" style="padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20);font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.196), 16px);">Expert Mode: soms volstaan standaard tools niet om het AI voldoende te helpen bij wat je wil dat het doet. In dat geval kan je het AI eerst diens eigen tools laten schrijven. Daarbij kan je er voor zorgen dat het resultaat, of de output van de tool, iets is wat kort en samenvattend is voor de verdere taken, om de context niet teveel te belasten. Context windows van LLMs worden weliswaar steeds groter, maar dan nog moet je ervoor zorgen dat enkel de nuttigste zaken erin zitten (pas op voor <a href="https://redis.io/blog/context-rot/">context rot</a>).</li>
</ul>
</div>
</div>



<p class="wp-block-paragraph">In een vorige <a href="https://staging.smalsresearch.be/legacy-code-trotseren-best-practices-ai/" data-type="post" data-id="21131">post rond legacy code</a>, gaven we een erg brede definitie. Laten we dus vooreerst iets duidelijker stellen wat we met Legacy bedoelen, en de &#8220;moeilijkheidsgraad&#8221; van Legacy projecten beter illustreren.</p>



<h2 class="wp-block-heading">&#8220;Oude&#8221; code: een spectrum aan mogelijkheden</h2>



<p class="justify-text wp-block-paragraph">Er is niet echt een officiële definitie van legacy code; meestal spreekt men van het gebruik van niet langer ondersteunde technologie, moeilijk te onderhouden, of simpelweg &#8220;code die je van iemand anders erft&#8221;. Het gaat uiteraard altijd wel om code die nog in gebruik, en dus belangrijk is. Ironisch genoeg, zijn het vaak de meest kritische toepassingen, die al jaren meegaan en waar men al jaren &#8220;op vertrouwt&#8221;, maar dan zonder ze goed te onderhouden.</p>



<p class="justify-text wp-block-paragraph">AI kan ons helpen bij het onderhoud van eender welke code, dus we zullen een spectrum demonstreren dat van de oudste, ergste legacy code gaat, tot code van projecten die slechts een kleine update nodig heeft. Aan de ene kant van het spectrum heb je programma&#8217;s, geschreven in ouderwetse programmeertalen, volgens een achterhaalde architectuur, gebruik makend van databases die niet meer van deze tijd zijn, en draaiende op servers met niet langer ondersteunde besturingssystemen: bij deze mastodonten moet men vaak bang zijn dat ze kritisch zullen falen bij de kleinste verkeerde wijziging. Helemaal aan de andere kant heb je vrij goed onderhouden software, waarin een softwarebibliotheek wordt gebruikt die niet meer de meest recente versie is: meestal een koud kunstje om ze weer helemaal up-to-date te krijgen. Ergens in het midden vind je, ten slotte, toepassingen terug waarbij de meeste developers nog niet meteen het woord Legacy in de mond zullen nemen, maar waar wel moeilijke migraties dienen te gebeuren, met b.v. een verouderd framework of twee dat zou moeten worden vervangen.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-scaled.png"><img loading="lazy" decoding="async" width="1024" height="506" src="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_307h9q307h9q307h-1024x506.png" alt="" class="wp-image-27634" style="width:1301px;height:auto"/></a></figure>



<p class="justify-text wp-block-paragraph">Wat kunnen we hier nu mee? Bieden LLMs ons andere mogelijkheden naargelang de plaats van het project op dit spectrum? Ons onderzoek heeft zich tot nu toe op de linkerkant van dit spectrum gefocust, dus het vervolg van deze blogpost zal veeleer over de mogelijkheden gaan om &#8220;échte&#8221; Legacy aan te pakken. Later dit jaar gaan we ook verder uitdiepen wat we met migraties en updates kunnen doen.</p>



<h2 class="wp-block-heading">Gebruik van LLMs op Legacy Codebases</h2>



<p class="justify-text wp-block-paragraph">Het is duidelijk dat de eenvoudige prompt &#8220;herschrijf mij dit programma volgens moderne standaarden&#8221; niet zal werken (al beweren sommige vendors dat dit eraan zit te komen). We zullen iets concretere zaken gaan vragen, en het werk ook enigszins in stukjes moeten kappen. Verder zijn er eigenlijk twee zaken die we kunnen gaan doen met onze legacy code: ze herschrijven en ze documenteren.</p>



<h3 class="wp-block-heading">Herschrijven van Legacy Code</h3>



<p class="justify-text wp-block-paragraph">Als we beginnen met code herschrijven, zullen we er vaak rekening mee moeten houden dat een heel groot project voldoende goed herbouwen een te moeilijke opgave is. We kunnen &#8220;quick wins&#8221; behalen door strategisch een aantal zaken te gaan herschrijven van een project, en die stukken dan te gebruiken in een ruimere context, waarbij een team van mensen en AI de toepassing opnieuw bouwen volgens de regels van de kunst. Bij onze experimenten stelden we vast dat het een brug te ver was om van het AI te verwachten een volledig nieuwe architectuur te gebruiken, tegelijk met het vertalen van oude code naar nieuwe. Wat wel mogelijk is, is om heel wat van de typische scaffolding (de standaardcode om tot iets werkend te komen) van een nieuw project te vibe coden, en daar dan gericht een aantal stukken code in te injecteren die vertalingen zijn van stukjes van een legacy project. Als mens is het onze taak om duidelijk aan te geven welke architectuur we verwachten, en wat de kwaliteitsregels zijn van de nieuw geschreven code.</p>



<p class="justify-text wp-block-paragraph">Eén van de grotere uitdagingen bij het herschrijven van code met behulp van AI, is het testen van de correctheid van de vertaling: doet de code nog wat ze vroeger deed (los van het feit of dit wenselijk is, want zelfs de business case kan soms te verouderd zijn in geval van Legacy)? Bij redelijk nieuwe projecten zullen er reeds heel wat testen bestaan die we kunnen uitvoeren om de correctheid na te gaan, maar bij legacy hebben we vaak het probleem dat de toepassing eenvoudigweg wordt getest in productie, of op zijn minst met productiedata: er zijn geen specifieke tests of zelfs maar veilig bruikbare testdata. In dat geval komt het erop neer een omgeving te creëren waarin we de nieuwe code op een veilige manier kunnen testen, wat meestal ad hoc werk is en enige creativiteit vraagt. We mogen namelijk geen productiedata naar de Cloud sturen, dus we moeten ervoor zorgen dat het LLM deze niet kan lezen. Het zou eenvoudiger zijn als we lokaal draaiende LLMs zouden kunnen gebruiken, maar voorlopig zijn deze nog niet krachtig genoeg (als ze al beschikbaar zijn) om dergelijke complexe taken uit te voeren met legacy code.</p>



<p class="justify-text wp-block-paragraph">Een andere uitdaging is de gebruikersinterface: bij oudere projecten is deze vaak achterhaald en moet er, vanaf de grond, een nieuwe GUI (Graphical User Interface) worden opgebouwd. Dat geeft echter het probleem dat je geen basis meer hebt in het oude project om mee te vergelijken: de nieuwe interface zal doorgaans manueel door mensen moeten worden getest. Ik verwacht echter dat we op dit vlak nog vorderingen zullen zien in de nabije toekomst, wat de mogelijkheden van het AI betreft. We zien namelijk al systemen opduiken die je volledige computer kunnen besturen (zoals <a href="https://openclawd.ai/">OpenClaw</a> of het <a href="https://www.anthropic.com/news/3-5-models-and-computer-use">&#8220;Computer Use&#8221; van Anthropic</a>), en ook integratie met meer traditionele raamwerken voor het testen van een GUI behoort tot de mogelijkheden.</p>



<p class="justify-text wp-block-paragraph">Waar we, ten slotte, ook quick wins mee kunnen halen, zijn kleinere Legacy projecten. Als we een klein tot matig groot legacy programma gebruiken, met beperkte functionaliteit en een eenvoudige GUI of een duidelijke input en output in geval van batch processing, en geen business case om deze te integreren in een andere manier van werken, dan kunnen we een rechttoe rechtaan aanpak proberen om een moderne versie in een nieuwe programmeertaal te bouwen met AI. We moeten dan nog altijd goed testen en een gestructureerde aanpak hebben met bijsturingen door menselijke developers, maar het wordt wel feasible om dit voor niet-kritische toepassingen te gaan uitproberen. Een intern gebruikte toepassing is bijvoorbeeld een typische goede eerste kandidaat.</p>



<h3 class="wp-block-heading">Documenteren van Legacy Code</h3>



<p class="justify-text wp-block-paragraph">Soms is herschrijven van Legacy met AI net iets te ambitieus, óf we hebben meer informatie nodig voor we er ons aan wagen. In dat geval kan het interessant zijn om eerst richting documentatie te kijken: het AI kan ons ook helpen om het verkennen van een legacy codebase net iets minder op archeologie voor gevorderden te doen lijken.</p>



<p class="justify-text wp-block-paragraph">Van een klein tot matig stuk code uitleggen en er de business logica uithalen, of een groter stuk analyseren en de opbouw en architectuur uitleggen: dat kan met de huidige grote taalmodellen zonder meer. We kunnen echter verder gaan: we kunnen het AI tools laten bouwen om zichzelf te helpen de codebase te verkennen, en b.v. diagrammen te voorzien van de afhankelijkheden tussen de stukken code. Of we kunnen het scripts laten maken om de bevindingen na elk stuk analyse netjes te structureren in een tekstbestand voor zichzelf en een pdf voor de menselijke gebruiker.</p>



<p class="justify-text wp-block-paragraph">We kunnen ook hiërarchisch werken: eerst een verkenning van de codebase doen, en dan telkens dieper duiken in de verschillende modules, om meer en meer detail te verkrijgen en de analyse aan te vullen. Dat is de top-down aanpak, die we echter kunnen aanvullen met een bottom-up versie: eens we tot in de diepte zijn gegaan, kunnen we weer zaken laten samenvatten om van het grotere plaatje een beter geïnformeerde uiteenzetting op te bouwen.</p>



<p class="justify-text wp-block-paragraph">Hier is het wel van belang dat we van tevoren weten wat we precies willen bereiken. Een algemene analyse van een codebase door het AI kan interessant zijn wanneer de menselijke gebruikers het systeem nog totaal niet kennen en aanknopingspunten willen hebben om zaken te leren, maar biedt meestal weinig extra aan mensen die de codebase reeds beheersen.</p>



<p class="justify-text wp-block-paragraph">Maar wanneer het doel is om de codebase te kunnen onderhouden, kunnen we eventueel een systeem opbouwen waarbij we een chatbot aanbieden die de specifieke context en bijzonderheden van het legacy project kent, en daar heel gerichte vragen over kan beantwoorden. Dit kan b.v. in <a href="https://adoption.microsoft.com/en-us/ai-agents/copilot-studio/">CoPilot Studio</a>. Wanneer dat niet goed genoeg werkt, kunnen we nog overwegen om manueel een knowledge base op te bouwen, gebruik makend van het AI, die dan weer door het AI kan worden gebruikt om vragen te beantwoorden.</p>



<p class="justify-text wp-block-paragraph">Nog een andere optie bestaat eruit dat we specifieke informatie uit de codebase willen extraheren, zoals de business logica per afzonderlijke module, of pseudocode die menselijke developers kan helpen om de logica in een ander project te herimplementeren. (En uiteraard kan bij die tweede stap ook weer een AI worden ingezet.)</p>



<p class="justify-text wp-block-paragraph">Kortom, met een beetje creativiteit kunnen we voor de meeste ad hoc analyses een betere aanpak verzinnen dan &#8220;analyseer er maar gewoon op los&#8221;. En het documenteren van een legacy systeem kan ook gewoon een eerste opstap zijn naar het herschrijven.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)">Besluit: vakmannen gevraagd</h2>



<figure class="wp-block-image alignright size-large is-resized is-style-default" style="margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)"><a href="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-scaled.png"><img loading="lazy" decoding="async" width="1024" height="559" src="https://staging.smalsresearch.be/wp-content/uploads/2026/04/Gemini_Generated_Image_98eus398eus398eu-1024x559.png" alt="" class="wp-image-27699" style="aspect-ratio:1.8333516399024625;object-fit:contain;width:546px;height:auto"/></a></figure>



<p class="justify-text no-top-margin wp-block-paragraph">Zoals we hebben aangekaart, bieden LLMs ons stilaan erg krachtige mogelijkheden om onze Legacy Codebases aan te pakken, zéker wanneer we toegang hebben tot de grote en krachtige modellen die vandaag beschikbaar zijn. We zien echter ook dat het eigenlijk een heel goed gevulde gereedschapskoffer is, met een aantal krachtige &#8220;power tools&#8221;, en dat we moeten weten <em>wat </em>we ermee willen bereiken en <em>hoe </em>we deze best kunnen gebruiken.</p>



<p class="justify-text wp-block-paragraph">We zitten nog niet op het punt dat alles automatisch gaat: we zullen dus nog steeds goede <em>vakmannen </em>nodig hebben om optimaal van dit gereedschap gebruik te maken. Onze raad aan developers is om zeker niet bang te zijn van AI en er geregeld gebruik van te maken bij de analyse en ontwikkeling van software: ervaring is de beste leerschool om de goede vakmannen die we hiervoor nodig hebben, op te leiden.</p>



<p class="justify-text wp-block-paragraph">Voorlopig is dus het besluit: voor legacy code is AI geen wondermiddel, maar een handige gereedschapskist die je best kan uitproberen als deel van een bredere aanpak. Zoals gezegd kijken we later dit jaar eerder naar het midden en de rechterkant van het spectrum van legacy. Wij vermoeden dat hier meer mogelijkheden zijn tot automatisering van een aantal workflows, zeker als we ook dieper gebruik gaan maken van agents. Mogelijks kunnen we, voor iets eenvoudigere en repetitievere projecten, dus toch van &#8220;vakman&#8221; naar &#8220;fabriek&#8221; evolueren.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
