feat(ml): replace logistic regression with MLP fusion and KS drift with ADWIN online learning

Replace the LogisticRegression meta-learner with a PyTorch MetaFusionMLP
(Linear(3,16)->BN->ReLU->Dropout->Linear(16,1)->Sigmoid) for non-linear
fusion of EIF, NF, and XGBoost scores. Replace KS-test + quantile digest
drift detection with ADWIN (adaptive sliding window, Hoeffding bound).
Replace weekly XGBoost batch retraining with River HoeffdingAdaptiveTree
for incremental online learning (learn_one per cycle). Update all thesis
documentation sections (2.4.2c, 2.4.3, 3.8, discussion, conclusion).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jacquin Antoine
2026-04-13 16:32:34 +02:00
parent c6cb12981c
commit 7894d39f1c
12 changed files with 502 additions and 306 deletions

View File

@ -690,18 +690,15 @@ Clustering des anomalies pour identifier les campagnes coordonnées :
Résultat : colonne `campaign_id` (-1 = isolé, 0 = membre d'un cluster).
#### `_compute_drift_score(baseline_stats, current_baseline, features)`
#### `ADWINDriftMonitor(features, delta=0.002)`
Détection de dérive conceptuelle entre la baseline d'entraînement et la baseline
courante. Deux méthodes :
Détection de dérive conceptuelle par ADWIN (fenêtre glissante adaptative).
Maintient un détecteur ADWIN par feature, mis à jour à chaque cycle avec la
moyenne de la feature sur le trafic baseline.
1. **Méthode principale** : Comparaison par quantiles interpolés (KS-like). Fraction
de features avec p < 0.05.
2. **Fallback z-score** (`_compute_drift_score_zscore`) :
`z = |mean_current - mean_trained| / std_trained`. Fraction de features avec z > 2.0.
Si la fraction dépasse `DRIFT_THRESHOLD` (0.30), le modèle est ré-entraîné et
l'événement `DRIFT_DETECTED` est journalisé.
Si la fraction de features en dérive dépasse `DRIFT_THRESHOLD` (0.30), le
modèle EIF/NF est ré-entraîné. Si > 50% des features dérivent, une alerte
`ADVERSARIAL_DRIFT` est générée.
---