Unité 10 / 11

Fuite de données et reproductibilité : catastrophes silencieuses et discipline

Gains :

  • Capacité à reconnaître les types de fuite de données (cible, heure, prétraitement, ligne groupée) et à interroger le score « trop beau pour être vrai » comme alarme
  • Capacité à prévenir les fuites grâce à une séparation précoce de l'ensemble de test, du pipeline et une division correcte (chronologique/groupée)
  • Capacité à rendre l'analyse reproductible avec des valeurs de départ fixes, un contrôle de version et la suppression des étapes manuelles

Il y a deux erreurs qui gaspillent le plus d'efforts en science des données, et elles sont toutes deux insidieuses car elles conduisent au désastre juste au moment où tout « semble aller bien ». Le premier est la fuite de données : le modèle fonctionne très bien sur l’ensemble de test mais plante en production. La seconde est l’irreproductibilité : vous effectuez une analyse six mois plus tard et obtenez un résultat complètement différent. Cette unité est dédiée à connaître et éviter ces deux pièges en profondeur. L’IA peut augmenter les deux risques (se génère rapidement, suggère des fuites cachées, facilite les étapes manuelles) mais peut également les réduire si elle est utilisée correctement. La différence réside dans la discipline.

Fuite de données : modèle clairvoyant

La fuite de données se produit lorsque le modèle voit des informations pendant l'entraînement qu'il n'aura pas au moment de la prédiction réelle. Le modèle « triche » avec ces informations, ayant fière allure sur l'ensemble de test, mais tombant en panne en production sans ces informations. Le symptôme d’une fuite est presque toujours le même : trop beau pour être vrai. Avant de vous réjouir lorsque vous voyez une précision de 99 %, vous devriez rechercher des fuites.

Les principaux types de fuites sont :

1. Fuite d’objectif : une fonctionnalité est le résultat de l’objectif. Dans la prévision « a été annulé », les colonnes « date d'annulation » ou « montant du remboursement » sont le résultat de l'objectif ; Ils ne seront remplis que lorsque le résultat sera clair.

2. Fuite temporelle : ramener des informations futures dans le passé. Lors du calcul de la « moyenne des 30 derniers jours », incluez les jours suivant le jour de prévision ou divisez la série chronologique de manière aléatoire.

3. Fuite de prétraitement : apprentissage des transformations telles que la mise à l'échelle, le remplissage et le codage de toutes les données avant la partition de formation/test. La moyenne des données de test interfère avec la formation.

4. Fuite de lignes en double/groupées : des lignes appartenant à la même personne sont présentes à la fois dans la formation et dans les tests (deux visites du même patient dans des ensembles différents). Le modèle mémorise la personne.

Type de fuite

Comment est né

Comment prévenir

fuite cible

Colonne qui est le résultat de la cible

Test "Est-ce que je l'ai au moment de la prédiction"

fuite de temps

Apporter le futur au passé

Division chronologique, contrôle des fenêtres

Fuite de prétraitement

Conversion pré-divisée

Pipeline, en forme juste après l'entraînement

Fuite de rangée groupée

Même unité en deux ensembles

Divisé par groupe (GroupKFold)

La seule discipline pour éviter les fuites

La solution commune à tous les types de fuites se résume à une phrase : isolez l'ensemble de test le plus tôt possible pour imiter le futur réel, et ne lui "apprenez" rien. En pratique, cela signifie : d'abord diviser, puis apprendre toutes les transformations uniquement à partir de la formation et les appliquer dans un pipeline (une structure qui rassemble toutes les étapes dans une seule chaîne). Pour chaque fonctionnalité, posez la question « est-ce que j'ai cette information au moment de la prédiction ? S'il y a du temps, divisez-le chronologiquement ; Si la même unité est répétitive, divisez-la en groupe.

Attention : L'aspect le plus dangereux d'une fuite est qu'elle se présente comme une réussite. Un mauvais modèle produira évidemment de mauvais résultats et sera remarqué ; Un modèle divulgué fonctionne très bien, plaît à tout le monde et est mis en production - c'est là que l'effondrement commence. C’est pourquoi un « très bon » résultat est une source d’inquiétude et non de célébration.

Reproductibilité : obtenir deux fois le même résultat

La reproductibilité est la capacité d'obtenir le même résultat lorsque vous réexécutez une analyse à un autre moment, sur une autre machine. Sans cela, votre analyse est fortuite et non scientifique. Principales causes et solutions qui nuisent à la reproductibilité :

Étapes manuelles : modification manuelle d'une cellule dans Excel, modification manuelle d'un graphique. Solution : ayez chaque étape dans le code.

Caractère aléatoire non fixé : la formation du modèle, l'échantillonnage et le fractionnement impliquent un caractère aléatoire. Solution : corrigez la graine aléatoire (la valeur initiale du générateur aléatoire) (random_state=42).

Changements de version : le résultat peut changer lorsque la version de la bibliothèque change. Solution : corriger les dépendances (requirements.txt, fichier d'environnement).

Pas de tenue de registres : il n'est pas clair quelles données, quel code, quel paramètre ont été utilisés. Solution : contrôle de version (Git — le système qui enregistre toutes les versions du code) et versionnage des données.

"Ça ne fonctionne que sur ma machine" : Solution : documenter l'environnement, utiliser des conteneurs (Docker) si possible.

trois mini-cases

Cas 1 — Fuite cible. Une analyse de santé comportait la colonne « médicaments après la sortie » pour prédire « si le patient sera réadmis ». Cette colonne n’a été remplie qu’après la sortie du patient. Le modèle a donné 96%, en production 61%. Le projet de 8 semaines était une poubelle. Leçon : demandez à chaque fonctionnalité "est-elle présente au moment de la prédiction ?"

Cas 2 — Fuite de prétraitement. Une équipe a mis à l’échelle toutes les données, puis les a divisées. La moyenne des données de test a été impliquée dans la mise à l'échelle. Score CV 89%, production réelle 76%. Le faux succès a disparu lorsque j'ai déménagé chez Pipeline et que j'ai appris les transformations uniquement grâce à la formation. Leçon : diviser d’abord, transformer ensuite.

Cas 3 — Défaut de reproduction. Un analyste souhaitait mettre à jour le graphique qu'il avait présenté à la direction trois mois plus tard, mais ne se souvenait plus de la manière dont il l'avait produit ; de nombreuses étapes ont été effectuées manuellement dans Excel. Le résultat n’a pas fonctionné et la confiance a été ébranlée. Leçon : pas d'étapes manuelles, tout est dans le code et Git.

Quatre modèles copiables

1) Contrôle des fuites :

Votre rôle : inspecteur des fuites. Cible : « churn » (0/1), date de référence prévisionnelle : record_date. Je vais vous donner cette liste de fonctionnalités. Pour CHAQUE fonctionnalité : (a) est-elle une conséquence de l'objectif, (b) est-elle disponible au moment de la prédiction, (c) la fenêtre temporelle inclut-elle le futur ? Marquez-le comme « dangereux/suspect/fuite » et écrivez une raison. Caractéristiques : [liste]

2) Pipeline sans fuite :

Configurez le pipeline sklearn : divisez d'abord le train/test (stratifié, graine = 42), PUIS placez tous les prétraitements (impute, mise à l'échelle, encodage) dans le pipeline à partir de la formation UNIQUEMENT. Expliquez pourquoi le code est sans fuite, quelle étape a été apprise et où.

3) Code de la liste de contrôle de reproductibilité :

Je souhaite rendre mon analyse reproductible. Suggérez un code/une structure qui ajoute : (1) une graine dure pour tout caractère aléatoire, (2) les versions de la bibliothèque d'impression utilisées, (3) une balise de date/version pour les données et la sortie. Donnez-moi également une liste de contrôle pour vous assurer qu'il n'y a pas d'étapes manuelles.

4) Cloison groupée (même fuite unité) :

Dans les données, le même customer_id existe sur plusieurs lignes. Effectuez une séparation (GroupKFold ouGroupShuffleSplit, group = customer_id) qui EMPÊCHE le même client de participer à la fois à la formation et aux tests. Incluez du code pour vérifier qu'aucun client ne se trouve dans les deux ensembles après le fractionnement.

Invite faible/Invite forte

Invite faible :

Mon modèle a renvoyé une précision de 98 %, n'est-ce pas génial ? Optimisez le code.

Célébrer 98% cache la fuite. Avant d'optimiser, il convient de se demander si ce score est réel ou non.

Invite puissante :

Votre rôle : inspecteur des fuites. Mon modèle renvoie une précision de 98 % sur l'ensemble de test, ce qui me semble "trop ​​beau pour être vrai". Vérifiez : (1) les caractéristiques sont-elles le résultat de la cible, (2) les conversions sont-elles effectuées avant le fractionnement, (3) sont la même unité en deux ensembles, (4) y a-t-il des fuites temporelles. Lister tous les points suspects ; Concentrez-vous sur la recherche de la fuite, pas sur la réparation du score.

Ici, un score élevé est traité comme un signe à remettre en question et non à célébrer.

Erreurs courantes

  • Célébration du « très bon » résultat. Un score trop beau pour être vrai est une alerte de fuite, pas un exploit.
  • Apprendre la transformation de toutes les données avant la division. La fuite la plus courante ; Divisez d'abord avec le pipeline.
  • Diviser la série chronologique de manière aléatoire. Le modèle voit l’avenir ; La division chronologique est indispensable.
  • Sortir de la même unité en deux sets. Le modèle mémorise la personne ; Divisez par groupe.
  • Ne pas intervenir manuellement et écrire dans le code. L'analyse devient irreproductible ; tout devrait être dans le code et Git.
Astuce : Écrivez un « serment d'honneur » de deux phrases au début de votre projet : « Je n'ai touché d'aucune façon à l'ensemble de test avant de le voir en production. Chaque étape est dans le code et la graine est corrigée. Si vous ne parvenez pas à signer honnêtement ces deux phrases, votre résultat n’est pas encore fiable.

En résumé

Les fuites de données et la non-reproductibilité sont les deux erreurs silencieuses les plus coûteuses en science des données. La fuite est la vision du modèle du futur et se présente comme un faux succès ; La solution est de diviser l'ensemble de test tôt, d'apprendre les transformations uniquement à partir de la formation (pipeline), de poser à chaque fonctionnalité la question « Est-ce que je l'ai au moment de la prédiction » et d'effectuer une répartition correcte (chronologique/groupée). La reproductibilité, c'est pouvoir obtenir deux fois le même résultat ; sa solution consiste à supprimer manuellement les étapes, à épingler la graine, à geler les versions et à tout conserver dans Git. L’IA peut augmenter ou réduire ces risques ; C'est votre discipline qui détermine.

Tâche de candidature

Prenez la liste des fonctionnalités d'un modèle que vous avez construit (ou un modèle hypothétique) et posez à chaque fonctionnalité la question « ai-je cette information au moment de la prédiction ? par écrit ; Trouvez au moins un candidat à la fuite. Remplissez ensuite une liste de contrôle pour rendre votre analyse reproductible : la graine est-elle corrigée, y a-t-il des étapes manuelles, les versions sont-elles enregistrées, sont-elles dans Git. Corrigez les lacunes.

liste de contrôle

  • [ ] Ai-je interrogé le score « trop beau pour être vrai » en guise d'alerte de fuite ?
  • [ ] Ai-je appris toutes les transformations après la séparation, juste grâce à l'entraînement ?
  • [ ] Ai-je divisé selon la structure temps/groupe (chronologique/GroupKFold) ?
  • [ ] Ai-je rendu tout le hasard reproductible avec une graine fixe ?
  • [ ] Ai-je supprimé les étapes manuelles et tout conservé dans le contrôle du code et des versions ?