Journalisme et machine learning : un outil pour les enquêtes

Maëlle Fouquenet
14 min readJul 7, 2021

Tout d’abord clarifions une chose, il ne sera pas question de process semi mystique ou magique, ni d’intelligence artificielle dans ce billet. Non. En revanche, il sera question d’algorithmes, d’analyses de données, de scraping, de nettoyage, etc. Tout cela dans le but d’aider les journalistes à enquêter.

Car oui le machine learning (ML) peut être utile aux journalistes dans leurs enquêtes, notamment quand il faut analyser une énorme masse de données.

Pour mieux comprendre comment, voici quatre exemples concrets (et inspirants). A leur suite, je tire des enseignements et recommandations sur l’utilisation du ML par les journalistes et j’ajoute des liens vers d’autres exemples (non détaillés ici) à découvrir.

EXEMPLES DÉTAILLÉS D’ENQUÊTES AVEC AIDE DU MACHINE LEARNING

1/ Détecter des forages illégaux

En mars 2018, le site d’investigation ukrainien Texty a enquêté sur les forages d’ambre illégaux dans le nord ouest du pays en utilisant le machine learning sur des images satellites datées de 2014 à 2016 (période de forte augmentation des forages). Le but était d’évaluer l’impact environnement de ces forages illégaux qui détruisent des hectares de forêts et des terres agricoles.

Première étape : à quoi ressemble un forage illégal sur une image satellite ? Pour répondre à cette question, les journalistes ont commencé par se documenter en regardant des images et vidéos de forages légaux d’ambre, en interrogeant des spécialistes.

Images satellites sur lesquelles apparaissent des forages

Deuxième étape : trouver des images satellites récentes de la zone déterminée (nord ouest du pays), avec un niveau de détail élevé. Celles ed Bing Maps ont été utilisées en raison d’une bonne API contenant des nombreuses métadonnées. La zone de recherche couvrait 70 000 km2, ce qui représente plusieurs centaines de milliers d’images, impossible à vérifier à la main.

La troisième étape a été de trouver les premières images contenant des traces de forages. Ce travail a été effectué avec l’aide de participants à l’Open data day de Kiev et a permis d’identifier à peu près 100 lieux de forages illégaux, puis le modèle a permis d’en identifié une centaine d’autres, vérifiés humainement.

Image satellite segmentée en superpixels

Quatrième étape, il s’agissait de créer un dataset labellisé. Cela s’est fait en deux phases : d’abord les images des lieux humainement identifiés ont d’abord été divisées en superpixels (avec SLIC). Puis ces superpixels ont été traités (avec ResNet50) pour en extraire les caractéristiques qui servent ensuite à paramétrer le modèle de classifieur (XGBoost).

Dans la cinquième étape, la création du modèle classifieur XGBoost, le dataset contenait environ 15 000 images plus petites (superpixels) pour entraîner l’algorithme de classification, “dont 80% pour l’entrainement du modèle et 20% pour le test”, explique Anatoliy Bondarenko, journaliste et développeur de l’équipe.

Après quelques ajustements pour améliorer les résultats de l’algorithme XGBoost, l’étape six était de le déployer afin de classer les 450 000 images satellites, soit avec traces de forages, soit sans traces de forages.

Le temps de calcul du modèle sur les 450 000 images satellites a été d’environ 100h.

En complément de cette analyse d’images, le retour des lecteurs de la région a été extrêmement utile : ils ont signalé un certain nombre d’erreurs liées à la déforestation, ce qui générait des faux positifs dans les résultats. Ces lieux ont été supprimés des données d’entrainement, le modèle ré-entrainé et les images retraitées.

En dernière étape, les journalistes ont créé une carte interactive des lieux présentant des traces de forages illégaux et publiée une enquête riche et détaillée.

Carte interactive des forages illégaux dans le nord ouest de l’Ukraine, produite par Texty d’après les résultats de leur enquête

Le projet en résumé :

durée : 1 mois

équipe : 5 personnes (1 journaliste, 1 directeur artistique, 2 data journalistes/dévelopeurs et 1 personne responsable de la création du modèle

quantité de données analysée : 450 000 images satellites

langage de programmation : Python

type d’algorithmes : non supervisé (SLIC) et supervisé (XGBoost)

2/ Analyser les contenus de groupes Facebook extrême droite

En 2020, l’équipe du AI+ Automation Lab de la radio allemande publique Bayerschicher Rundfunk, avec les équipes de la WDR et NDR, a analysé plusieurs millions de posts et commentaires Facebook publiés dans 138 groupes d’extrême droite (“The hate machine”). Dans ces groupes, les incitations au meurtre, les imageries nazies et le négationnisme ont pignon sur rue, en violation de la loi allemande.

Au départ de l’enquête, une source fournit aux journalistes une liste de centaines de groupes Facebook d’extrême droite dans lesquels sont publiés ces contenus illégaux. Les journalistes ont d’abord du infiltrer ces groupes pour avoir accès aux contenus échangés.

Première étape dans cette enquête une fois les groupes infiltrés : récupérer les posts et commentaires pour créer une base de données à analyser. Le scraping a été compliqué pour éviter d’être bloqué par Facebook. Il a été effectué entre septembre et novembre 2019.

Ce scraping a permis d’obtenir les textes, métadonnées mais aussi de générer des captures d’écran de tous les commentaires et posts récupérés. La base de données ainsi constituée rergoupe 2,6 millions d’éléments publiés entre 2010 et à novembre 2019.

Deuxième étape, avec une simple recherche par mots clés, les journalistes ont identifié plus de 10 000 cas de violation de la loi allemande. Ils en ont labellisés plus d’un millier à la main.

Les contenus les plus violents sont majoritairement inclus dans des images et ne ressortent pas dans une recherche par mots clés. Il a donc fallu travailler sur les images spécifiquement.

Les commentaires sont parfois plus violents que les posts sous lequels ils sont publiés.

Troisième étape. Les journalistes ont décortiqué les captures d’écran, d’abord en extrayant les images avec ImageMagick (en open source) et en les convertissant en images noir/blanc afin d’en séparer les images des textes.

L’analyse des 400 000 images obtenues a ensuite nécessité l’utilisation de deux algorithmes différents : un pour la reconnaissance faciale, l’autre pour la reconnaissance d’objets.

  • via la reconnaissance faciale : l’équipe a utilisé un outil en open source là encore pour retrouver des images, comme des photos d’Angela Merkel (souvent ciblée) ou d’Adolf Hitler par exemple
  • via la reconnaissance d’objets : cette fois c’est un outil développé par Facebook qui a été utilisé, Detectron2 (en open source). L’algorithme a été entrainé avec une cinquantaine d’objets et symboles illégaux en Allemagne (croix gammée ou runes SS par exemple) issus de la base de données précédemment constituée. Les résultats de cette analyse ont été validés à la main par les journalistes car ils nécessitaient de connaître le contexte de la publication pour déterminer si elle était légale ou illégale. Plus d’une centaine d’images illégales ont été identifiées dans la base créé pour l’enquête.

Quatrième étape, l’enquête “classique” des journalistes pour compléter et contextualiser ce travail d’analyse de données. C’est passé par des interviews et des échanges avec plusieurs experts, mais aussi une demande d’accès à certains documents officiels.

Pour Robert Schöffel, journaliste qui a travaillé sur cette enquête, pour mener à bien ce type d’enquête, il faut que des journalistes possèdent des compétences techniques avancées et qu’ils soient en mesure de discuter efficacement avec les développeurs.

Le projet en résumé :

durée : plusieurs mois

équipe : 11 personnes (3 développeurs et 8 journalistes)

quantité de données analysée : 2,6 millions de posts et commentaires

langage de programmation : Python

type d’algorithme : semi supervisés

3/ Repérer des marchés publics truqués

En 2019 au Pérou, le site d’enquêtes Ojo Público a cherché à repérer la corruption dans les marchés publics en attribuant un score de risque aux entreprises selon différents critères. C’est le projet Funes, qui se base sur deux précédentes enquêtes traitant du financement privé des partis politiques et d’un scandale de corruption à l’échelle du continent sud américain.

Le projet Funes a porté sur plus de 245 000 contrats, la plupart conclus sans concurrence, entre 2015 et 2018, que ce soit au niveau national, régional ou local. Autant dire une quantité de contrats impossible à éplucher à la main. Le score attribué par l’algorithme Funes indique aux journalistes ce qui mérite en priorité leur attention.

La première étape de ce travail qui a duré plus quinze mois a été de définir ce qu’était la corruption, faire la différence entre collusion et entente illégale, pots-de-vin, détournements de fonds, trafic d’influence, conflits d’intérêts, fraude financière… Il a également fallu convenir d’indicateurs de risques.

L’équipe d’Ojo Público s’est appuyée sur les travaux de Mihály Fazekas, à l’origine du projet Digiwhist.eu (qui identifie des indicateurs de risque de corruption dans l’attribution des marchés publics en Europe), et a retenu 22 éléments, certains spécifiques au Pérou.

Seconde étape dans l’élaboration de Funes : trouver des données. Cela a pris plusieurs chemins : l’open data, le scraping, les demandes directes aux institutions, et les données déjà récupérées lors d’une enquête précédente sur le financement privé des partis politiques. Cette phase a pris beaucoup de temps.

Troisième étape : il a fallu organiser ces données. Pour ce faire, l’équipe a créé un tableur pour répertorier, qualifier et documenter les données qui étaient disponibles et utilisables. Ensuite, il a fallu nettoyer et normaliser les données car les bases venaient de différentes sources. Les données étaient organisées différemment, parfois avec des nomenclatures différentes pour les mêmes noms (parfois un nom est écrit CCatcca, parfois Ccatca). Sans oublier les classiques données manquantes, erronées ou inexactes.

Une fois les données nettoyées, documentées et pleinement comprises, l’équipe a procédé aux premières analyses avec des filtres simples comme le top 10 des entreprises qui gagnent le plus de contrats publics. Ces premières analyses permettent de repérer des anomalies, des éléments remarquables. Cette phase peut aussi prendre la forme d’une exploration graphique des données, pour identifier rapidement les données aberrantes, c’est-à-dire qui sortent des normes du corpus analysé.

Quatrième étape, la modélisation a été effectuée à partir du modèle créé par Fazekas. Il s’agit là de créer l’algorithme qui va permettre d’attribuer à chaque entreprise un score de risque, en fonction des indicateurs décidés au début du projet. Cette phase utilisant le machine learning comporte une partie de données pour l’entrainement de l’algorithme et une partie plus petite pour le test (en général on divise le dataset en 80% pour l’entrainement / 20% pour le test). Dans le cas de Funes, c’est une apprentissage supervisé qui a été utilisé.

Les premiers résultats sont ensuite vérifiés manuellement pour s’assurer que l’algorithme remplit sa fonction correctement, identifier des erreurs et les corriger pour ajuster le code. Quand les résultats sont jugés satisfaisants, le modèle est validé et déployé sur l’ensemble des données à analyser.

Affichage d’un résultat de recherche d’après le nom d’une société

L’algorithme a-t-il rencontré des biais ? Dans cette V1, le modèle a en effet surpointé les contrats des petites communes comme étant à risque. Ces contrats font ressortir plus souvent que la moyenne des liens familiaux ou avec des partis politiques. Cela s’explique par la proximité géographique des acteurs et la taille réduite des communautés.

Dans l’analyse a posteriori du projet, Ojo Publico indique qu’il leur faudrait plus de cas avérés de corruption pour mieux entrainer puis valider leur modèle. Cela dit, le modèle tel qu’il a été finalisé met déjà en évidence certains indicateurs plus risqués, comme le fait d’avoir un répondant unique à un marché public, la récurrence et/ou l’exclusivité d’une relation entre un fonctionnaire et un dirigeant, la récurrence d’une relation entre le processus de passation de marché et un entrepreneur.

Au delà de valider et creuser des pistes déjà connues ou pressenties par les journalistes, l’algorithme a permis d’en identifier de nouvelles. En revanche,

« le modèle peut vous donner des pistes, mais l’histoire doit être construite par l’enquête », insiste Gianfranco Rossi, membre de l’équipe d’Ojo Publico qui a travaillé sur Funes.

En effet, le travail humain d’enquête, aidé par les résultats donnés par le modèle, demeure primordial et incontournable.

Le projet en résumé

durée : 15 mois

équipe : 4 personnes : 1 statisticien, 2 journalistes, 1 editeur

quantité de données analysée : 245 000 contrats (52 Go de données)

langage de programmation : R

type d’algorithme : supervisé

4 / Trouver des annonces illégales

Ce travail d’enquête mené par Jeremy B. Merrill, publié sur The MarkUp en 2020, a porté sur le ciblage des annonces d’emploi diffusées par Facebook. Le dataset étudié comportait 578 000 annonces tous sujets confondus. Humainement, il est impossible de les éplucher toutes une à une, mais avec l’aide du machine learning, il est possible d’identifier les annonces problématiques dans un corpus conséquent.

Aux Etats-Unis comme dans de nombreux pays, il est illégal de publier une offre immobilières ou d’emploi indiquant des critères d’âge, de sexe, de race… Mais Facebook le fait tout de même en paramétrant la diffusion de certaines annonces à certains publics, sur ces critères illégaux. L’enquête visait à déterminer si, malgré les alertes, Facebook diffusait toujours des annonces ciblant ces critères.

Pour ce faire, le journaliste a d’abord récupéré un corpus de 578 000 annonces publiées par Facebook via la bibliothèque publicitaire de la plateforme. Puis il a cherché par mots clés, sans résultat concluant (trop de remontées inutiles ou sans les mots clés recherchés).

Une base de données a été constituée d’environ 200 annonces labellisées “annonce d’emploi” ou “pas annonce d’emploi” et ciblées par genre. A cette base s’est ajouté un second jeux de données d’environ 1 000 annonces qui n’étaient pas ciblées par genre. Celles-ci ont été labellisées comme telle à la main.

L’étape suivante a été d’utiliser Fast.ai pour classer les annonces et identifier celles qui concernaient l’emploi — Fast.ai est un algorithme d’apprentissage profond (deep learning) basé sur PyTorch (librairie qui sert à faire du NLP, traitement de langague naturel).

Dans un premier temps, le modèle a été entrainé à traiter du texte en anglais et y reconnaître des expressions courantes comme “on sale now” et des termes moins courants. Cela s’est fait avec environ 50 000 annonces non labellisées. “Puis, nous avons entrainé le classifieur Fast.ai avec 1 200 exemples”, explique Jeremy B. Merrill. Fast.ai utilise par défaut 80% des données en entrainement et 20% pour le test de contrôle.

Le but était d’identifier les annonces d’emploi parmi les 578 000 annonces collectées. Le taux de faux positif a été assez élevé du fait que Facebook diffuse peu d’annonces d’emploi au regard de la quantité globale d’annonces. Le journaliste a ensuite vérifié à la main les 200 premiers résultats de l’algorithme.

“Le classifieur a trouvé quatre annonces comportant des mentions de race, sexe ou âge. Je ne les avais pas trouvées en cherchant par mots clés”, indique le journaliste. “J’ai écrit sur un seul cas car les autres annonces avaient des facteurs qui les rendraient plus compliquées dans le contexte de la loi américaine”.

Le projet en résumé :

durée : /

équipe : 1 datajournaliste + 1 éditeur

quantité de données analysée : 578 000 annonces

langage de programmation : Python

type d’algorithme : supervisé

LES ENSEIGNEMENTS QU’ON PEUT EN TIRER

Le machine learning est un (juste) outil

Il est important de redire encore et encore que le machine learning est un outil au service des journalistes, il ne fera pas le travail à leur place (et il prendra encore moins leur place !). Sentir qu’il y a un sujet à fouiller, prendre en compte un contexte pour interpréter des données, identifier des biais, décider ce qui vaut le coup d’enquêter, et enquêter, tout cela reste le travail des journalistes.

Il est essentiel également de se documenter en amont, rencontrer des experts du sujet sur lequel on travaille, pour être ensuite en mesure de déterminer quels seront les indicateurs/critères/éléments pertinents à utiliser lors du paramétrage du modèle qu’on utilisera ensuite.

Il rend des enquêtes possibles

On peut tout de même convenir qu’avoir un outil qui permet de “scanner” des milliers ou des millions de documents, soit pour y trouver des éléments spécifiques, soit pour les classer ou les regrouper par typologie, est un sacré gain de temps et rend un certain nombre d’enquêtes possibles.

Parmi les exemples intéressants que je n’ai pas détaillé ici, il y a notamment l’enquête du Atlanta Journal-Convention sur les médecins accusés d’agressions sexuelles mais toujours en activité (“Doctors & sex abus project”). L’enquête a nécessité l’analyse de plus de 100 000 documents. Comme dans les exemples présentés dans ce billet, la quantité de documents rend le travail d’analyse humainement impossible pour une rédaction, qu’elle soit petite ou large. Le machine learning ouvre donc le champ des possibles.

Il doit être expliquable, transparent, éthique

La méthode de machine learning utilisée par les journalistes dans une enquête doit pouvoir être expliquée clairement, décrite, être transparente (cf billet de 2018 sur l’éthique des algorithmes et la ligne éditoriale).

Expliquer quelles données sont utilisées, comment elles ont été récupérées, nettoyées, traitées, quel algorithme a été choisi, avec quoi il a été entrainé, si on a découvert des biais et comment on les a traités… C’est un pilier de la confiance avec les lecteurs qu’il convient de consolider à chaque fois que c’est possible étant donné la défiance générale.

Il convient également de prendre garde et traiter correctement les données personnelles qui seraient éventuellement présentes dans les jeux de données.

Enfin, comme le soulignait en 2019 Alex Siegman, ancien responsable du programme technique de machine learning chez Dow Jones, il ne faut pas se demander où on peut utiliser du ML, mais réfléchir à des problèmes du quotidien et évaluer si le ML peut être une solution ou pas.

Pour évaluer la faisabilité d’un projet de ML,

il faut :

  • se demander d’abord s’il n’y a pas une méthode plus simple et rapide de travailler, comme avec une alerte sur des mots clés ou une analyse statistique (^^)
  • discuter avec des experts du sujet pour bien cerner le périmètre de l’enquête, les besoins, les difficultés potentielles
  • se demander ensuite si les données nécessaires sont accessibles ou peuvent l’être (déjà en votre possession, en open data, sur Kaggle…). Sans données, point d’analyse
  • prévoir le temps de travail de nettoyage et normalisation des données, cette étape peut être très chronophage mais elle est essentielle pour que les données soient utilisables ensuite
  • choisir un algorithme (supervisé, non supervisé, avec apprentissage renforcé) selon votre objectif, la quantité de données dont vous disposez (un algorithme type KNN ou SVM n’est pas performant avec un gros dataset par exemple), leur structure (les tableurs sont des données structurées qui seront moulinés facilement par tous les algorithmes, alors que du son ou des images nécessiteront certains types d’algorithmes). En général, on en teste plusieurs pour choisir celui qui donne les meilleurs résultats. Farfouiller dans Github et d’autres ressources type Paperwithcode pour voir différentes approches peut aider à paramétrer votre algorithme.
  • structurer ses données en fonction de l’algorithme retenu et ses spécifications techniques
  • tester sur une quantité limitée, vérifier les résultats, si c’est bon, déployer sur l’ensemble des données à analyser, sinon revoir les données, leur formatage, modifier/affiner les paramétrages, re-tester et réévaluer les résultats jusqu’à trouver les bons paramètres pour déployer ensuite.

D’autres exemples de ML dans des enquêtes

--

--

Maëlle Fouquenet

Journaliste en formation/reconversion data analyst, ex responsable numérique @ESJPRO. Algo, transparence, audio, ❤#Berlin, #Nantes, #freediving et #lindyhop