
Algorithmes de détection des valeurs aberrantes, des échantillons adverses et de la dérive
Alibi Detect est une bibliothèque Python disponible en code source, axée sur la détection de points aberrants, d'exemples adverses et de dérive (drift). Le package vise à couvrir à la fois les détecteurs en ligne et hors ligne pour les données tabulaires, le texte, les images et les séries temporelles. Les backends TensorFlow et PyTorch sont tous deux pris en charge pour la détection de dérive.
Pour plus de contexte sur l'importance de surveiller les points aberrants et les distributions dans un environnement de production, consultez cette présentation de l'atelier Challenges in Deploying and Monitoring Machine Learning Systems lors de l'ICML 2020, basée sur l'article Monitoring and explainability of models in production et faisant référence à Alibi Detect.
Pour une introduction approfondie à la détection de dérive, consultez Protecting Your Machine Learning Against Drift: An Introduction. La présentation couvre ce qu'est la dérive, pourquoi il est utile de la détecter, les différents types de dérive, comment la détecter de manière rigoureuse, et décrit également l'anatomie d'un détecteur de dérive.
Le package alibi-detect peut être installé depuis :
pip)conda/mamba)Prophet : ```bash
pip install alibi-detect[prophet]
Pour installer depuis conda-forge, il est recommandé d’utiliser mamba, qui peut être installé dans l’environnement conda base avec :```bash conda install mamba -n base -c conda-forge
Pour installer alibi-detect:```bash
mamba install -c conda-forge alibi-detect
Nous utiliserons le détecteur d'anomalies VAE pour illustrer l'API.```python from alibi_detect.od import OutlierVAE from alibi_detect.saving import save_detector, load_detector
od = OutlierVAE(threshold=0.1, encoder_net=encoder_net, decoder_net=decoder_net, latent_dim=1024) od.fit(x_train)
preds = od.predict(x_test)
filepath = './my_detector/' save_detector(od, filepath) od = load_detector(filepath)
Les prédictions sont renvoyées dans un dictionnaire dont les clés sont `meta` et `data`. `meta` contient les métadonnées du détecteur tandis que `data` est lui-même un dictionnaire contenant les prédictions réelles. Il contient les scores et seuils d'anomalies, d'attaques adverses ou de dérive, ainsi que les prédictions indiquant si les instances sont, par exemple, des anomalies ou non. Les détails exacts peuvent varier légèrement d'une méthode à l'autre, c'est pourquoi nous encourageons le lecteur à se familiariser avec les [types d'algorithmes pris en charge](https://docs.seldon.io/projects/alibi-detect/en/stable/overview/algorithms.html).
## Algorithmes pris en charge
Les tableaux suivants présentent les cas d'utilisation recommandés pour chaque algorithme. La colonne *Niveau de caractéristique* indique si la détection peut être effectuée au niveau des caractéristiques, par exemple par pixel pour une image. Consultez la [liste de référence des algorithmes](#reference-list) pour plus d'informations, avec des liens vers la documentation et les articles originaux ainsi que des exemples pour chacun des détecteurs.
### Détection d'anomalies
| Détecteur | Tabulaire | Image | Séries temporelles | Texte | Caractéristiques catégorielles | En ligne | Niveau de caractéristique |
|:---------------------|:-------:|:-----:|:-----------:|:----:|:--------------------:|:------:|:-------------:|
| Isolation Forest | ✔ | | | | ✔ | | |
| Mahalanobis Distance | ✔ | | | | ✔ | ✔ | |
| AE | ✔ | ✔ | | | | | ✔ |
| VAE | ✔ | ✔ | | | | | ✔ |
| AEGMM | ✔ | ✔ | | | | | |
| VAEGMM | ✔ | ✔ | | | | | |
| Likelihood Ratios | ✔ | ✔ | ✔ | | ✔ | | ✔ |
| Prophet | | | ✔ | | | | |
| Spectral Residual | | | ✔ | | | ✔ | ✔ |
| Seq2Seq | | | ✔ | | | | ✔ |
### Détection d'attaques adverses
| Détecteur | Tabulaire | Image | Séries temporelles | Texte | Caractéristiques catégorielles | En ligne | Niveau de caractéristique |
| :--- | :---: | :---: |:-----------:|:----:|:--------------------:|:------:|:-------------:|
| Adversarial AE | ✔ | ✔ | | | | | |
| Model distillation | ✔ | ✔ | ✔ | ✔ | ✔ | | |
### Détection de dérive
| Détecteur | Tabulaire | Image | Séries temporelles | Texte | Caractéristiques catégorielles | En ligne | Niveau de caractéristique |
|:---------------------------------| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| Kolmogorov-Smirnov | ✔ | ✔ | | ✔ | ✔ | | ✔ |
| Cramér-von Mises | ✔ | ✔ | | | | ✔ | ✔ |
| Fisher's Exact Test | ✔ | | | | ✔ | ✔ | ✔ |
| Maximum Mean Discrepancy (MMD) | ✔ | ✔ | | ✔ | ✔ | ✔ | |
| Learned Kernel MMD | ✔ | ✔ | | ✔ | ✔ | | |
| Context-aware MMD | ✔ | ✔ | ✔ | ✔ | ✔ | | |
| Least-Squares Density Difference | ✔ | ✔ | | ✔ | ✔ | ✔ | |
| Chi-Squared | ✔ | | | | ✔ | | ✔ |
| Mixed-type tabular data | ✔ | | | | ✔ | | ✔ |
| Classifier | ✔ | ✔ | ✔ | ✔ | ✔ | | |
| Spot-the-diff | ✔ | ✔ | ✔ | ✔ | ✔ | | ✔ |
| Classifier Uncertainty | ✔ | ✔ | ✔ | ✔ | ✔ | | |
| Regressor Uncertainty | ✔ | ✔ | ✔ | ✔ | ✔ | | |
#### Prise en charge de TensorFlow et PyTorch
Les détecteurs de dérive prennent en charge les backends TensorFlow, PyTorch et (le cas échéant) [KeOps](https://www.kernel-operations.io/keops/index.html).
Cependant, Alibi Detect ne les installe pas par défaut. Voir les [options d'installation](#installation-and-usage) pour plus de détails.```python
from alibi_detect.cd import MMDDrift
cd = MMDDrift(x_ref, backend='tensorflow', p_val=.05)
preds = cd.predict(x)
Le même détecteur dans PyTorch:```python cd = MMDDrift(x_ref, backend='pytorch', p_val=.05) preds = cd.predict(x)
Ou dans KeOps:```python
cd = MMDDrift(x_ref, backend='keops', p_val=.05)
preds = cd.predict(x)
Alibi Detect propose également diverses étapes de prétraitement, telles que des encodeurs initialisés aléatoirement, des embeddings de texte pré-entraînés pour détecter la dérive à l'aide de la bibliothèque transformers et l'extraction de couches cachées de modèles d'apprentissage automatique. Cela permet de détecter différents types de dérive, tels que changement de distribution des covariables et des prédictions. Les étapes de prétraitement sont également prises en charge dans TensorFlow et PyTorch.```python from alibi_detect.cd.tensorflow import HiddenOutput, preprocess_drift
model = # TensorFlow model; tf.keras.Model or tf.keras.Sequential preprocess_fn = partial(preprocess_drift, model=HiddenOutput(model, layer=-1), batch_size=128) cd = MMDDrift(x_ref, backend='tensorflow', p_val=.05, preprocess_fn=preprocess_fn) preds = cd.predict(x)
Consultez les notebooks d'exemples (p. ex. [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mmd_cifar10.html), [critiques de films](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_imdb.html)) pour plus de détails.
### Liste de référence
#### Détection d'anomalies
- [Isolation Forest](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/iforest.html) ([FT Liu et al., 2008](https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf))
- Exemple: [Intrusion réseau](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_if_kddcup.html)
- [Mahalanobis Distance](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/mahalanobis.html) ([Mahalanobis, 1936](https://insa.nic.in/writereaddata/UpLoadedFiles/PINSA/Vol02_1936_1_Art05.pdf))
- Exemple: [Intrusion réseau](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_mahalanobis_kddcup.html)
- [Auto-Encoder (AE)](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/ae.html)
- Exemple: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_ae_cifar10.html)
- [Variational Auto-Encoder (VAE)](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/vae.html) ([Kingma et al., 2013](https://arxiv.org/abs/1312.6114))
- Exemples: [Intrusion réseau](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_vae_kddcup.html), [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_vae_cifar10.html)
- [Auto-Encoding Gaussian Mixture Model (AEGMM)](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/aegmm.html) ([Zong et al., 2018](https://openreview.net/forum?id=BJJLHbb0-))
- Exemple: [Intrusion réseau](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_aegmm_kddcup.html)
- [Variational Auto-Encoding Gaussian Mixture Model (VAEGMM)](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/vaegmm.html)
- Exemple: [Intrusion réseau](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_aegmm_kddcup.html)
- [Rapports de vraisemblance](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/llr.html) ([Ren et al., 2019](https://arxiv.org/abs/1906.02845))
- Exemples: [Génome](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_llr_genome.html), [Fashion-MNIST vs. MNIST](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_llr_mnist.html)
- [Détecteur d'anomalies de séries temporelles Prophet](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/prophet.html) ([Taylor et al., 2018](https://peerj.com/preprints/3190/))
- Exemple: [Prévisions météo](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_prophet_weather.html)
- [Détecteur d'anomalies de séries temporelles à résidu spectral](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/sr.html) ([Ren et al., 2019](https://arxiv.org/abs/1906.03821))
- Exemple: [Jeu de données synthétique](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_sr_synth.html)
- [Détecteur d'anomalies séquence à séquence (Seq2Seq)](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/seq2seq.html) ([Sutskever et al., 2014](https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf); [Park et al., 2017](https://arxiv.org/pdf/1711.00614.pdf))
- Exemples: [ECG](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_seq2seq_ecg.html), [Jeu de données synthétique](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_seq2seq_synth.html)
#### Détection adversarial
- [Adversarial Auto-Encoder](https://docs.seldon.io/projects/alibi-detect/en/stable/ad/methods/adversarialae.html) ([Vacanti and Van Looveren, 2020](https://arxiv.org/abs/2002.09364))
- Exemple: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/ad_ae_cifar10.html)
- [Distillation de modèle](https://docs.seldon.io/projects/alibi-detect/en/stable/ad/methods/modeldistillation.html)
- Exemple: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_distillation_cifar10.html)
#### Détection de dérive
- [Kolmogorov-Smirnov](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/ksdrift.html)
- Exemple: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_ks_cifar10.html), [graphes moléculaires](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mol.html), [critiques de films](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_imdb.html)
- [Cramér-von Mises](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/cvmdrift.html)
- Exemple: [Manchots](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_supervised_penguins.html)
- [Test exact de Fisher](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/fetdrift.html)
- Exemple: [Manchots](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_supervised_penguins.html)
- [Différence de densité aux moindres carrés](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/lsdddrift.html) ([Bu et al, 2016](https://alippi.faculty.polimi.it/articoli/A%20Pdf%20free%20Change%20Detection%20Test%20Based%20on%20Density%20Difference%20Estimation.pdf))
- [Discrépance moyenne maximale](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/mmddrift.html) ([Gretton et al, 2012](http://jmlr.csail.mit.edu/papers/v13/gretton12a.html))
- Exemple: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mmd_cifar10.html), [graphes moléculaires](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mol.html), [critiques de films](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_imdb.html), [Avis Amazon](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_amazon.html)
- [MMD à noyau appris](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/learnedkerneldrift.html) ([Liu et al, 2020](https://arxiv.org/abs/2002.09116))
- Exemple: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_clf_cifar10.html)
- [MMD contextuel](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/contextmmddrift.html) ([Cobb and Van Looveren, 2022](https://arxiv.org/abs/2203.08644))
- Exemple: [ECG](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_context_ecg.html), [sujets d'actualité](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_context_20newsgroup.html)
- [Khi-carré](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/chisquaredrift.html)
- Exemple: [Prédiction de revenus](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_chi2ks_adult.html)
- [Données tabulaires de types mixtes](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/tabulardrift.html)
- Exemple: [Prédiction de revenus](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_chi2ks_adult.html)
- [Classifieur](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/classifierdrift.html) ([Lopez-Paz and Oquab, 2017](https://openreview.net/forum?id=SJkXfE5xx))
- Exemple: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_clf_cifar10.html), [Avis Amazon](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_amazon.html)
- [Spot-the-diff](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/spotthediffdrift.html) (adaptation de [Jitkrittum et al, 2016](https://arxiv.org/abs/1605.06796))
- Exemple [MNIST et qualité du vin](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/spot_the_diff_mnist_win.html)
- [Incertitude du classifieur et du régresseur](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/modeluncdrift.html)
- Exemple: [CIFAR10 et vin](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_model_unc_cifar10_wine.html), [graphes moléculaires](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mol.html)
- [Discrépance moyenne maximale en ligne](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/onlinemmddrift.html)
- Exemple: [Qualité du vin](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_online_wine.html), [imagerie médicale Camelyon](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_online_camelyon.html)
- [Différence de densité aux moindres carrés en ligne](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/onlinemmddrift.html) ([Bu et al, 2017](https://ieeexplore.ieee.org/abstract/document/7890493))
- Exemple: [Qualité du vin](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_online_wine.html)
## Jeux de données
Le package contient également des fonctionnalités dans `alibi_detect.datasets` pour récupérer facilement un certain nombre de jeux de données pour différentes modalités. Pour chaque jeu de données, soit les données et les étiquettes, soit un objet *Bunch* contenant les données, les étiquettes et des métadonnées facultatives sont renvoyés. Exemple:```python
from alibi_detect.datasets import fetch_ecg
(X_train, y_train), (X_test, y_test) = fetch_ecg(return_X_y=True)
Jeu de données génomique : fetch_genome
(X_train, y_train), (X_val, y_val), (X_test, y_test) = fetch_genome(return_X_y=True)
ECG 5000 : fetch_ecg
NAB : fetch_nab
alibi_detect.datasets.get_list_nab().CIFAR-10-C : fetch_cifar10c
fetch_cifar10c vous permet de choisir n'importe quel niveau de sévérité ou type de corruption. La liste des types de corruption disponibles peut être obtenue avec alibi_detect.datasets.corruption_types_cifar10c(). Le jeu de données peut être utilisé dans la recherche sur la robustesse et la dérive. Les données originales se trouvent ici. Exemple : ```python
from alibi_detect.datasets import fetch_cifar10ccorruption = ['gaussian_noise', 'motion_blur', 'brightness', 'pixelate'] X, y = fetch_cifar10c(corruption=corruption, severity=5, return_X_y=True)
Adversarial CIFAR-10: fetch_attack
(X_train, y_train), (X_test, y_test) = fetch_attack('cifar10', 'resnet56', 'cw', return_X_y=True)
fetch_kdd
fetch_kdd vous permet de sélectionner un sous-ensemble d'intrusions réseau comme cibles ou de ne choisir que certaines caractéristiques. Les données originales se trouvent ici.Les modèles et/ou blocs de construction pouvant être utiles en dehors de la détection d'anomalies, d'exemples adverses ou de dérive se trouvent sous alibi_detect.models. Implémentations principales:
PixelCNN++: alibi_detect.models.pixelcnn.PixelCNN
Auto-encodeur variationnel: alibi_detect.models.autoencoder.VAE
Modèle séquence à séquence: alibi_detect.models.autoencoder.Seq2Seq
ResNet: alibi_detect.models.resnet
model = fetch_tf_model('cifar10', 'resnet32')
Alibi-detect est intégré dans la plateforme de déploiement de modèles de machine learning Seldon Core et dans le framework de service de modèles KFServing.
Si vous utilisez alibi-detect dans vos recherches, pensez à le citer.
Entrée BibTeX:``` @software{alibi-detect, title = {Alibi Detect: Algorithms for outlier, adversarial and drift detection}, author = {Van Looveren, Arnaud and Klaise, Janis and Vacanti, Giovanni and Cobb, Oliver and Scillitoe, Ashley and Samoilescu, Robert and Athorne, Alex}, url = {https://github.com/SeldonIO/alibi-detect}, version = {0.13.0}, date = {2025-12-11}, year = {2019} }