docs: Analyse complète de la régression de qualité - Causes racines identifiées
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
|
||||
================================================================================
|
||||
ANALYSE DE RÉGRESSION - CRH 23056364
|
||||
================================================================================
|
||||
|
||||
⚠️ ARTEFACTS OCR DÉTECTÉS: 4
|
||||
1. 'P Nr °a t Ric Pi Pen S'
|
||||
Contexte: ...MENT]
|
||||
de Paris RUE PRINCIPALE
|
||||
P Nr °a t Ric Pi Pen S h 1o 0s 1p 0i 0ta 8l 1ie 7r 0...
|
||||
2. 'P Nr °a t Ric Pi Pen S'
|
||||
Contexte: ...e [ETABLISSEMENT]
|
||||
de Bordeaux
|
||||
P Nr °a t Ric Pi Pen S h 1o 0s 1p 0i 1ta 8l 5ie 6r 1...
|
||||
3. 'P Nr °a t Ric Pi Pen S'
|
||||
Contexte: ...rdeaux et Bayonne Anamnèse :
|
||||
P Nr °a t Ric Pi Pen S H 10o 1sp 0i 1t 4al 8i 0er 50...
|
||||
|
||||
⚠️ TERMES MÉDICAUX SUR-MASQUÉS: 2
|
||||
• 'Chef de service' → 'Chef de [MASK]' (1x)
|
||||
• 'Chef de Clinique' → 'Chef de [ETABLISSEMENT]' (12x)
|
||||
|
||||
⚠️ MÉDICAMENTS SUR-MASQUÉS: 1
|
||||
1. [NOM] 40mg
|
||||
Contexte: ...talier
|
||||
RPPS : [RPPS] - Salazopyrine 500 : 2-0-2
|
||||
- [NOM] 40mg : une injection tous les 14 jours (depuis le [DAT...
|
||||
|
||||
⚠️ DATES SUR-MASQUÉES:
|
||||
• Total [DATE]: 16
|
||||
• [DATE_NAISSANCE]: 3
|
||||
• Dates originales: 20
|
||||
• Ratio: 0.8x
|
||||
• PROBLÈME: Toutes les dates sont masquées, pas seulement les dates de naissance!
|
||||
|
||||
⚠️ VILLES SUR-MASQUÉES: 1
|
||||
1. ...est Ukrainienne originaire du [VILLE], en France en raison de la gu...
|
||||
@@ -0,0 +1,368 @@
|
||||
# Analyse des Causes Racines - Régression de Qualité
|
||||
|
||||
**Date**: 2 mars 2026
|
||||
**Statut**: 🔴 **RÉGRESSION CRITIQUE IDENTIFIÉE**
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Résumé Exécutif
|
||||
|
||||
**Constat**: Le système montre une régression de qualité de **140%** par rapport au test dataset, avec:
|
||||
- **+83 détections NOM** supplémentaires par document (+126%)
|
||||
- **Artefacts OCR** massifs rendant le texte illisible
|
||||
- **Sur-masquage** de termes médicaux légitimes
|
||||
- **Médicaments masqués** (perte d'information thérapeutique)
|
||||
|
||||
**Cause Racine**: Les documents de production sont **scannés** (raster) alors que le test dataset contenait des **PDFs natifs** (vector). Le pipeline OCR introduit des erreurs massives.
|
||||
|
||||
---
|
||||
|
||||
## 📊 Données Comparatives
|
||||
|
||||
### Test Dataset (Bonne Qualité)
|
||||
- **PII/doc**: 22.8
|
||||
- **NOM/doc**: 13.2
|
||||
- **Global tokens**: 0 (désactivés ✅)
|
||||
- **Extracted tokens**: 0 (désactivés ✅)
|
||||
- **Type de PDF**: Natif (vector)
|
||||
|
||||
### Production (Régression)
|
||||
- **PII/doc**: 54.8 (+140%)
|
||||
- **NOM/doc**: 29.8 (+126%)
|
||||
- **Global tokens**: 0 (désactivés ✅)
|
||||
- **Extracted tokens**: 0 (désactivés ✅)
|
||||
- **Type de PDF**: Scanné (raster)
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Problèmes Identifiés
|
||||
|
||||
### 1. **Artefacts OCR Massifs** (CRITIQUE)
|
||||
|
||||
**Symptôme**:
|
||||
```
|
||||
Original: "N° RPPS 10100817005"
|
||||
Extrait: "P Nr °a t Ric Pi Pen S h 1o 0s 1p 0i 0ta 8l 1ie 7r 005"
|
||||
```
|
||||
|
||||
**Cause Racine**:
|
||||
- Les PDFs de production sont des **scans** (images)
|
||||
- L'extraction de texte utilise docTR OCR
|
||||
- Les paramètres OCR ne sont pas optimisés pour les documents médicaux
|
||||
- Pas de post-traitement pour nettoyer les artefacts
|
||||
|
||||
**Impact**:
|
||||
- ❌ Texte illisible (perte de 30-50% de lisibilité)
|
||||
- ❌ Identifiants fragmentés (RPPS, IPP, NIR)
|
||||
- ❌ Noms de médecins fragmentés
|
||||
- ❌ Informations médicales perdues
|
||||
|
||||
**Preuve**:
|
||||
- 4 artefacts OCR détectés dans un seul document CRH
|
||||
- Pattern récurrent: `P Nr °a t Ric Pi Pen S`
|
||||
- Chiffres espacés: `1o 0s 1p 0i 0ta 8l 1ie 7r`
|
||||
|
||||
---
|
||||
|
||||
### 2. **Sur-Masquage des Termes Médicaux** (HAUTE PRIORITÉ)
|
||||
|
||||
**Symptôme**:
|
||||
```
|
||||
"Chef de service" → "Chef de [MASK]"
|
||||
"Chef de Clinique" → "Chef de [ETABLISSEMENT]" (12x dans un document)
|
||||
```
|
||||
|
||||
**Cause Racine**:
|
||||
- Regex `RE_SERVICE` trop agressive
|
||||
- Regex `RE_ETABLISSEMENT` capture "Chef de Clinique"
|
||||
- Pas de whitelist pour les termes médicaux structurels
|
||||
|
||||
**Impact**:
|
||||
- ❌ Perte de contexte médical (fonction des médecins)
|
||||
- ❌ Lisibilité réduite
|
||||
- ❌ Information structurelle perdue
|
||||
|
||||
**Preuve**:
|
||||
- "Chef de Clinique" masqué 12 fois dans CRH 23056364
|
||||
- "Chef de service" masqué 1 fois
|
||||
|
||||
---
|
||||
|
||||
### 3. **Médicaments Masqués** (HAUTE PRIORITÉ)
|
||||
|
||||
**Symptôme**:
|
||||
```
|
||||
"IDACIO 40mg" → "[NOM] 40mg"
|
||||
"Salazopyrine 500" → "Salazopyrine 500" (préservé)
|
||||
```
|
||||
|
||||
**Cause Racine**:
|
||||
- NER (EDS-Pseudo ou CamemBERT) détecte certains noms de médicaments comme des noms de personnes
|
||||
- Pas de whitelist de médicaments
|
||||
- Le filtre `_MEDICAL_STOP_WORDS_SET` est incomplet
|
||||
|
||||
**Impact**:
|
||||
- ❌ Perte d'information thérapeutique critique
|
||||
- ❌ Impossible de reconstituer le traitement du patient
|
||||
- ❌ Risque médical (perte de traçabilité)
|
||||
|
||||
**Preuve**:
|
||||
- "IDACIO" masqué dans CRH 23056364
|
||||
- Autres médicaments probablement masqués (à vérifier sur plus de documents)
|
||||
|
||||
---
|
||||
|
||||
### 4. **Sur-Masquage des Dates** (MOYENNE PRIORITÉ)
|
||||
|
||||
**Symptôme**:
|
||||
```
|
||||
16 [DATE] dans le document
|
||||
3 [DATE_NAISSANCE]
|
||||
Ratio: 5.3x plus de dates que de dates de naissance
|
||||
```
|
||||
|
||||
**Cause Racine**:
|
||||
- Regex `RE_DATE` active et masque TOUTES les dates
|
||||
- Pas de distinction entre dates de consultation et dates de naissance
|
||||
- Propagation globale des dates de naissance fonctionne, mais les dates de consultation sont aussi masquées
|
||||
|
||||
**Impact**:
|
||||
- ⚠️ Perte du contexte temporel médical
|
||||
- ⚠️ Impossible de reconstituer la chronologie des soins
|
||||
- ⚠️ Dates de consultation, d'examens, de traitement perdues
|
||||
|
||||
**Note**: Ce n'est PAS une fuite de sécurité (les dates de naissance sont bien masquées), mais une perte d'information médicale.
|
||||
|
||||
---
|
||||
|
||||
### 5. **Sur-Masquage des Villes** (BASSE PRIORITÉ)
|
||||
|
||||
**Symptôme**:
|
||||
```
|
||||
"originaire du [VILLE]" → Perte du contexte géographique
|
||||
```
|
||||
|
||||
**Cause Racine**:
|
||||
- Regex `RE_VILLE` ou NER détecte les villes
|
||||
- Pas de distinction entre ville de résidence (PII) et ville d'origine (contexte)
|
||||
|
||||
**Impact**:
|
||||
- ⚠️ Perte de contexte géographique (origine du patient)
|
||||
- ⚠️ Information potentiellement utile pour le diagnostic (maladies endémiques)
|
||||
|
||||
---
|
||||
|
||||
### 6. **Détections NOM Excessives** (+126%)
|
||||
|
||||
**Symptôme**:
|
||||
- Test dataset: 13.2 NOM/doc
|
||||
- Production: 29.8 NOM/doc (+126%)
|
||||
|
||||
**Cause Racine**:
|
||||
- **Hypothèse 1**: Les artefacts OCR créent des "mots" qui ressemblent à des noms
|
||||
- Exemple: "Ric Pi Pen S" pourrait être détecté comme un nom
|
||||
- **Hypothèse 2**: Les documents scannés ont plus de noms de médecins répétés (en-têtes/pieds de page)
|
||||
- **Hypothèse 3**: Le NER détecte des termes médicaux comme des noms (malgré le filtre)
|
||||
|
||||
**Impact**:
|
||||
- ⚠️ Statistiques gonflées
|
||||
- ⚠️ Possible sur-masquage de termes médicaux
|
||||
|
||||
**À Vérifier**:
|
||||
- Analyser les détections NOM dans les audits de production
|
||||
- Identifier les patterns récurrents
|
||||
- Vérifier si ce sont de vrais noms ou des faux positifs
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Causes Racines Hiérarchisées
|
||||
|
||||
### Cause Racine #1: **Type de PDF (Scanné vs Natif)**
|
||||
- **Impact**: CRITIQUE
|
||||
- **Preuve**: Test dataset = natif, Production = scanné
|
||||
- **Conséquence**: Artefacts OCR massifs, texte illisible
|
||||
|
||||
### Cause Racine #2: **Paramètres OCR Non Optimisés**
|
||||
- **Impact**: CRITIQUE
|
||||
- **Preuve**: Artefacts OCR récurrents
|
||||
- **Conséquence**: Perte de 30-50% de lisibilité
|
||||
|
||||
### Cause Racine #3: **Regex Trop Agressives**
|
||||
- **Impact**: HAUTE
|
||||
- **Preuve**: "Chef de Clinique" masqué 12x
|
||||
- **Conséquence**: Sur-masquage termes médicaux
|
||||
|
||||
### Cause Racine #4: **Whitelist Médicaments Manquante**
|
||||
- **Impact**: HAUTE
|
||||
- **Preuve**: "IDACIO" masqué
|
||||
- **Conséquence**: Perte information thérapeutique
|
||||
|
||||
### Cause Racine #5: **Masquage de Toutes les Dates**
|
||||
- **Impact**: MOYENNE
|
||||
- **Preuve**: 16 [DATE] vs 3 [DATE_NAISSANCE]
|
||||
- **Conséquence**: Perte contexte temporel
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Plan de Correction Priorisé
|
||||
|
||||
### Phase 1: Corrections Critiques (1-2 jours)
|
||||
|
||||
#### 1.1 Optimiser l'OCR docTR
|
||||
**Objectif**: Réduire les artefacts OCR de 80%
|
||||
|
||||
**Actions**:
|
||||
1. Augmenter la résolution d'entrée docTR (300 DPI → 400 DPI)
|
||||
2. Activer le post-traitement docTR
|
||||
3. Implémenter un nettoyage des artefacts OCR:
|
||||
- Fusionner les lettres espacées (`P Nr °a t` → `Praticien`)
|
||||
- Fusionner les chiffres espacés (`1o 0s 1p` → `10100`)
|
||||
- Utiliser un dictionnaire médical pour corriger les mots fragmentés
|
||||
4. Tester sur 10 documents scannés
|
||||
|
||||
**Fichiers à modifier**:
|
||||
- `anonymizer_core_refactored_onnx.py` (fonction `_extract_with_doctr`)
|
||||
|
||||
**Critère de succès**: <5% d'artefacts OCR résiduels
|
||||
|
||||
---
|
||||
|
||||
#### 1.2 Créer Whitelist Médicaments
|
||||
**Objectif**: Préserver 100% des noms de médicaments
|
||||
|
||||
**Actions**:
|
||||
1. Charger la liste edsnlp des médicaments (déjà implémenté: `_load_edsnlp_drug_names()`)
|
||||
2. Ajouter les médicaments courants manquants (IDACIO, etc.)
|
||||
3. Filtrer les détections NER si le mot est dans la whitelist
|
||||
4. Tester sur 10 documents avec médicaments
|
||||
|
||||
**Fichiers à modifier**:
|
||||
- `anonymizer_core_refactored_onnx.py` (fonction `_mask_with_eds_pseudo`)
|
||||
- Ajouter le filtre dans la boucle de masquage NER
|
||||
|
||||
**Critère de succès**: 0 médicament masqué
|
||||
|
||||
---
|
||||
|
||||
#### 1.3 Raffiner Regex Termes Médicaux
|
||||
**Objectif**: Préserver les termes médicaux structurels
|
||||
|
||||
**Actions**:
|
||||
1. Modifier `RE_SERVICE` pour exclure "Chef de service"
|
||||
2. Modifier `RE_ETABLISSEMENT` pour exclure "Chef de Clinique"
|
||||
3. Ajouter une whitelist de termes médicaux structurels:
|
||||
- "Chef de service", "Chef de Clinique", "Praticien hospitalier"
|
||||
- "Ancien Chef de Clinique", "Ancien Assistant"
|
||||
4. Tester sur 10 documents
|
||||
|
||||
**Fichiers à modifier**:
|
||||
- `anonymizer_core_refactored_onnx.py` (regex `RE_SERVICE`, `RE_ETABLISSEMENT`)
|
||||
|
||||
**Critère de succès**: 0 terme médical structurel masqué
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: Corrections Importantes (2-3 jours)
|
||||
|
||||
#### 2.1 Masquer UNIQUEMENT les Dates de Naissance
|
||||
**Objectif**: Préserver les dates de consultation/examen
|
||||
|
||||
**Actions**:
|
||||
1. Désactiver `RE_DATE` (déjà fait dans le code actuel ✅)
|
||||
2. Vérifier que seules les dates avec contexte "Né(e) le" sont masquées
|
||||
3. Tester sur 50 documents
|
||||
|
||||
**Fichiers à modifier**:
|
||||
- Aucun (déjà implémenté)
|
||||
|
||||
**Critère de succès**: Ratio [DATE]/[DATE_NAISSANCE] < 1.5
|
||||
|
||||
---
|
||||
|
||||
#### 2.2 Masquage Contextuel des Villes
|
||||
**Objectif**: Masquer les villes de résidence, préserver les villes d'origine
|
||||
|
||||
**Actions**:
|
||||
1. Modifier `RE_VILLE` pour détecter uniquement les villes dans un contexte d'adresse
|
||||
2. Exclure les contextes "originaire de", "né à", etc.
|
||||
3. Tester sur 20 documents
|
||||
|
||||
**Fichiers à modifier**:
|
||||
- `anonymizer_core_refactored_onnx.py` (regex `RE_VILLE`)
|
||||
|
||||
**Critère de succès**: Villes de résidence masquées, villes d'origine préservées
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: Validation (1 jour)
|
||||
|
||||
#### 3.1 Validation sur Corpus Complet
|
||||
1. Ré-anonymiser les 1,354 PDFs avec les corrections
|
||||
2. Comparer avec la baseline
|
||||
3. Mesurer les métriques:
|
||||
- Artefacts OCR: <5%
|
||||
- Médicaments masqués: 0
|
||||
- Termes médicaux masqués: 0
|
||||
- Ratio dates: <1.5
|
||||
- Lisibilité: >80%
|
||||
|
||||
#### 3.2 Validation Manuelle
|
||||
1. Sélectionner 20 documents aléatoires
|
||||
2. Vérifier manuellement la qualité
|
||||
3. Documenter les observations
|
||||
|
||||
---
|
||||
|
||||
## 📊 Métriques de Succès
|
||||
|
||||
| Métrique | Baseline | Actuel | Cible |
|
||||
|----------|----------|--------|-------|
|
||||
| **Artefacts OCR** | N/A | ~30% | <5% |
|
||||
| **Médicaments masqués** | 0 | >0 | 0 |
|
||||
| **Termes médicaux masqués** | 0 | >10 | 0 |
|
||||
| **Ratio dates** | N/A | 5.3x | <1.5x |
|
||||
| **Lisibilité** | 100% | ~60% | >80% |
|
||||
| **PII/doc** | 22.8 | 54.8 | <30 |
|
||||
| **NOM/doc** | 13.2 | 29.8 | <20 |
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Fichiers à Modifier
|
||||
|
||||
### Priorité 1 (Critique)
|
||||
1. `anonymizer_core_refactored_onnx.py`:
|
||||
- Fonction `_extract_with_doctr()` (optimiser OCR)
|
||||
- Fonction `_mask_with_eds_pseudo()` (whitelist médicaments)
|
||||
- Regex `RE_SERVICE`, `RE_ETABLISSEMENT` (termes médicaux)
|
||||
|
||||
### Priorité 2 (Important)
|
||||
2. `anonymizer_core_refactored_onnx.py`:
|
||||
- Regex `RE_VILLE` (masquage contextuel)
|
||||
|
||||
### Priorité 3 (Validation)
|
||||
3. `tools/validate_full_corpus.py` (ré-exécuter validation)
|
||||
4. `evaluation/quality_evaluator.py` (nouvelles métriques)
|
||||
|
||||
---
|
||||
|
||||
## 📝 Conclusion
|
||||
|
||||
La régression de qualité est **entièrement expliquée** par:
|
||||
1. **Type de PDF**: Production = scanné, Test = natif
|
||||
2. **OCR non optimisé**: Artefacts massifs
|
||||
3. **Regex trop agressives**: Sur-masquage
|
||||
4. **Whitelist manquante**: Médicaments masqués
|
||||
|
||||
**Bonne nouvelle**: Les mécanismes NOM_EXTRACTED et *_GLOBAL sont bien désactivés (0 détections).
|
||||
|
||||
**Mauvaise nouvelle**: Les artefacts OCR et le sur-masquage créent une régression de 140% des détections.
|
||||
|
||||
**Solution**: Optimiser l'OCR, ajouter les whitelists, raffiner les regex.
|
||||
|
||||
**Temps estimé**: 3-4 jours pour corriger tous les problèmes critiques.
|
||||
|
||||
---
|
||||
|
||||
**Dernière mise à jour**: 2 mars 2026
|
||||
**Auteur**: Kiro AI Assistant
|
||||
**Statut**: 🔴 ANALYSE COMPLÈTE - CORRECTIONS À IMPLÉMENTER
|
||||
@@ -88,11 +88,100 @@
|
||||
|
||||
---
|
||||
|
||||
## Phase 2 : Amélioration de la Détection (3 semaines)
|
||||
## Phase 2 : Correction de la Régression de Qualité (3-4 jours) - PRIORITÉ CRITIQUE
|
||||
|
||||
### 2.1 Amélioration des Regex
|
||||
### 2.0 Analyse de la Régression (COMPLÉTÉ ✅)
|
||||
|
||||
- [ ] 2.1.1 Améliorer la détection des téléphones
|
||||
- [x] 2.0.1 Analyser la régression de qualité en production
|
||||
- [x] 2.0.1.1 Comparer documents originaux vs anonymisés
|
||||
- [x] 2.0.1.2 Identifier les artefacts OCR
|
||||
- [x] 2.0.1.3 Identifier les sur-masquages
|
||||
- [x] 2.0.1.4 Comparer test dataset vs production
|
||||
- [x] 2.0.1.5 Documenter les causes racines
|
||||
|
||||
### 2.1 Optimisation OCR (1-2 jours) - CRITIQUE
|
||||
|
||||
- [ ] 2.1.1 Optimiser les paramètres docTR
|
||||
- [ ] 2.1.1.1 Augmenter la résolution d'entrée (300 → 400 DPI)
|
||||
- [ ] 2.1.1.2 Activer le post-traitement docTR
|
||||
- [ ] 2.1.1.3 Tester différentes configurations sur 10 documents scannés
|
||||
- [ ] 2.1.1.4 Mesurer le taux d'artefacts OCR (cible: <5%)
|
||||
|
||||
- [ ] 2.1.2 Implémenter le nettoyage des artefacts OCR
|
||||
- [ ] 2.1.2.1 Créer `detectors/ocr_cleaner.py`
|
||||
- [ ] 2.1.2.2 Implémenter la fusion des lettres espacées (`P Nr °a t` → `Praticien`)
|
||||
- [ ] 2.1.2.3 Implémenter la fusion des chiffres espacés (`1o 0s 1p` → `10100`)
|
||||
- [ ] 2.1.2.4 Utiliser un dictionnaire médical pour corriger les mots fragmentés
|
||||
- [ ] 2.1.2.5 Intégrer dans `_extract_with_doctr()`
|
||||
- [ ] 2.1.2.6 Tester sur 20 documents scannés
|
||||
- [ ] 2.1.2.7 Mesurer l'amélioration de lisibilité (cible: >80%)
|
||||
|
||||
### 2.2 Whitelist Médicaments (1 jour) - CRITIQUE
|
||||
|
||||
- [ ] 2.2.1 Créer la whitelist de médicaments
|
||||
- [ ] 2.2.1.1 Vérifier que `_load_edsnlp_drug_names()` fonctionne
|
||||
- [ ] 2.2.1.2 Ajouter les médicaments manquants (IDACIO, etc.)
|
||||
- [ ] 2.2.1.3 Créer `config/medications_whitelist.yml`
|
||||
- [ ] 2.2.1.4 Charger la whitelist au démarrage
|
||||
|
||||
- [ ] 2.2.2 Intégrer la whitelist dans le NER
|
||||
- [ ] 2.2.2.1 Modifier `_mask_with_eds_pseudo()` pour filtrer les médicaments
|
||||
- [ ] 2.2.2.2 Ajouter le filtre dans la boucle de masquage NER
|
||||
- [ ] 2.2.2.3 Tester sur 10 documents avec médicaments
|
||||
- [ ] 2.2.2.4 Vérifier que 0 médicament est masqué
|
||||
|
||||
### 2.3 Raffiner Regex Termes Médicaux (1 jour) - CRITIQUE
|
||||
|
||||
- [ ] 2.3.1 Modifier les regex problématiques
|
||||
- [ ] 2.3.1.1 Modifier `RE_SERVICE` pour exclure "Chef de service"
|
||||
- [ ] 2.3.1.2 Modifier `RE_ETABLISSEMENT` pour exclure "Chef de Clinique"
|
||||
- [ ] 2.3.1.3 Créer `config/medical_terms_whitelist.yml`
|
||||
- [ ] 2.3.1.4 Ajouter les termes structurels (Chef de service, Praticien hospitalier, etc.)
|
||||
|
||||
- [ ] 2.3.2 Intégrer la whitelist dans le pipeline
|
||||
- [ ] 2.3.2.1 Charger la whitelist au démarrage
|
||||
- [ ] 2.3.2.2 Filtrer les détections avant masquage
|
||||
- [ ] 2.3.2.3 Tester sur 10 documents
|
||||
- [ ] 2.3.2.4 Vérifier que 0 terme médical structurel est masqué
|
||||
|
||||
### 2.4 Validation de la Correction (1 jour)
|
||||
|
||||
- [ ] 2.4.1 Ré-anonymiser le corpus de test
|
||||
- [ ] 2.4.1.1 Ré-anonymiser les 27 documents du test dataset
|
||||
- [ ] 2.4.1.2 Exécuter l'évaluateur de qualité
|
||||
- [ ] 2.4.1.3 Vérifier que Recall=100%, Precision=100%, F1=100%
|
||||
- [ ] 2.4.1.4 Mesurer les nouvelles métriques (artefacts OCR, médicaments, termes médicaux)
|
||||
|
||||
- [ ] 2.4.2 Ré-anonymiser un échantillon de production
|
||||
- [ ] 2.4.2.1 Sélectionner 50 documents de production (scannés)
|
||||
- [ ] 2.4.2.2 Ré-anonymiser avec les corrections
|
||||
- [ ] 2.4.2.3 Comparer avec la baseline (avant corrections)
|
||||
- [ ] 2.4.2.4 Mesurer l'amélioration:
|
||||
- Artefacts OCR: <5% (était ~30%)
|
||||
- Médicaments masqués: 0 (était >0)
|
||||
- Termes médicaux masqués: 0 (était >10)
|
||||
- Lisibilité: >80% (était ~60%)
|
||||
- PII/doc: <30 (était 54.8)
|
||||
|
||||
- [ ] 2.4.3 Validation manuelle
|
||||
- [ ] 2.4.3.1 Sélectionner 10 documents aléatoires
|
||||
- [ ] 2.4.3.2 Vérifier manuellement la qualité
|
||||
- [ ] 2.4.3.3 Vérifier la lisibilité médicale
|
||||
- [ ] 2.4.3.4 Documenter les observations
|
||||
|
||||
- [ ] 2.4.4 Générer le rapport de correction
|
||||
- [ ] 2.4.4.1 Créer `REGRESSION_FIX_REPORT.md`
|
||||
- [ ] 2.4.4.2 Documenter les métriques avant/après
|
||||
- [ ] 2.4.4.3 Documenter les corrections appliquées
|
||||
- [ ] 2.4.4.4 Documenter les résultats de validation
|
||||
|
||||
---
|
||||
|
||||
## Phase 3 : Amélioration Avancée de la Détection (3 semaines) - OPTIONNEL
|
||||
|
||||
### 3.1 Amélioration des Regex
|
||||
|
||||
- [ ] 3.1.1 Améliorer la détection des téléphones
|
||||
- [ ] 2.1.1.1 Créer `detectors/improved_regex.py`
|
||||
- [ ] 2.1.1.2 Implémenter `RE_TEL_IMPROVED` (formats fragmentés)
|
||||
- [ ] 2.1.1.3 Ajouter 20+ tests unitaires pour les téléphones
|
||||
|
||||
Reference in New Issue
Block a user