
Algoritmos para la detección de valores atípicos, adversarios y deriva
Alibi Detect es una biblioteca de Python de código disponible centrada en la detección de outliers, adversarial y deriva. El paquete tiene como objetivo cubrir detectores tanto en línea como fuera de línea para datos tabulares, texto, imágenes y series temporales. Tanto los backends de TensorFlow como los de PyTorch son compatibles con la detección de deriva.
Para obtener más información sobre la importancia de monitorear valores atípicos y distribuciones en un entorno de producción, consulta esta charla del taller Challenges in Deploying and Monitoring Machine Learning Systems de ICML 2020, basada en el artículo Monitoring and explainability of models in production y que hace referencia a Alibi Detect.
Para una introducción exhaustiva a la detección de deriva, consulta Protecting Your Machine Learning Against Drift: An Introduction. La charla cubre qué es la deriva y por qué vale la pena detectarla, los diferentes tipos de deriva, cómo se puede detectar de manera fundamentada y también describe la anatomía de un detector de deriva.
El paquete alibi-detect se puede instalar desde:
pip)conda/mamba)Prophet: ```bash
pip install alibi-detect[prophet]
Para instalar desde conda-forge se recomienda usar mamba, que se puede instalar en el entorno base de conda con:```bash conda install mamba -n base -c conda-forge
Para instalar alibi-detect:```bash
mamba install -c conda-forge alibi-detect
Usaremos el detector de valores atípicos VAE para ilustrar la 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)
Las predicciones se devuelven en un diccionario con las claves `meta` y `data`. `meta` contiene los metadatos del detector, mientras que `data` es en sí mismo un diccionario con las predicciones reales. Contiene las puntuaciones y umbrales de outliers, adversariales o deriva, así como las predicciones de si las instancias son, por ejemplo, outliers o no. Los detalles exactos pueden variar ligeramente de un método a otro, por lo que recomendamos al lector familiarizarse con los [tipos de algoritmos compatibles](https://docs.seldon.io/projects/alibi-detect/en/stable/overview/algorithms.html).
## Algoritmos Compatibles
Las siguientes tablas muestran los casos de uso recomendados para cada algoritmo. La columna *Nivel de característica* indica si la detección puede realizarse a nivel de característica, por ejemplo, por píxel en una imagen. Consulta la [lista de referencia de algoritmos](#reference-list) para obtener más información con enlaces a la documentación y los artículos originales, así como ejemplos para cada uno de los detectores.
### Detección de Outliers
| Detector | Tabular | Imagen | Series Temporales | Texto | Características Categóricas | Online | Nivel de Característica |
|:---------------------|:-------:|:-----:|:-----------:|:----:|:--------------------:|:------:|:-------------:|
| Isolation Forest | ✔ | | | | ✔ | | |
| Mahalanobis Distance | ✔ | | | | ✔ | ✔ | |
| AE | ✔ | ✔ | | | | | ✔ |
| VAE | ✔ | ✔ | | | | | ✔ |
| AEGMM | ✔ | ✔ | | | | | |
| VAEGMM | ✔ | ✔ | | | | | |
| Likelihood Ratios | ✔ | ✔ | ✔ | | ✔ | | ✔ |
| Prophet | | | ✔ | | | | |
| Spectral Residual | | | ✔ | | | ✔ | ✔ |
| Seq2Seq | | | ✔ | | | | ✔ |
### Detección Adversarial
| Detector | Tabular | Imagen | Series Temporales | Texto | Características Categóricas | Online | Nivel de Característica |
| :--- | :---: | :---: |:-----------:|:----:|:--------------------:|:------:|:-------------:|
| Adversarial AE | ✔ | ✔ | | | | | |
| Model distillation | ✔ | ✔ | ✔ | ✔ | ✔ | | |
### Detección de Deriva
| Detector | Tabular | Imagen | Series Temporales | Texto | Características Categóricas | Online | Nivel de Característica |
|:---------------------------------| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 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 | ✔ | ✔ | ✔ | ✔ | ✔ | | |
#### Soporte para TensorFlow y PyTorch
Los detectores de deriva admiten backends de TensorFlow, PyTorch y (cuando corresponda) [KeOps](https://www.kernel-operations.io/keops/index.html).
Sin embargo, Alibi Detect no los instala de manera predeterminada. Consulta las [opciones de instalación](#installation-and-usage) para obtener más detalles.```python
from alibi_detect.cd import MMDDrift
cd = MMDDrift(x_ref, backend='tensorflow', p_val=.05)
preds = cd.predict(x)
El mismo detector en PyTorch:```python cd = MMDDrift(x_ref, backend='pytorch', p_val=.05) preds = cd.predict(x)
O en KeOps:```python
cd = MMDDrift(x_ref, backend='keops', p_val=.05)
preds = cd.predict(x)
Alibi Detect también incluye varios pasos de preprocesamiento, como codificadores inicializados aleatoriamente, embeddings de texto preentrenados para detectar deriva usando la librería transformers y extracción de capas ocultas de modelos de aprendizaje automático. Esto permite detectar diferentes tipos de deriva, como deriva covariada y deriva de la distribución predicha. Los pasos de preprocesamiento también son compatibles con TensorFlow y 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)
Consulta los cuadernos de ejemplo (p. ej. [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mmd_cifar10.html), [reseñas de películas](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_imdb.html)) para obtener más detalles.
### Lista de referencias
#### Detección de valores atípicos
- [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))
- Ejemplo: [Intrusión en la red](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))
- Ejemplo: [Intrusión en la red](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)
- Ejemplo: [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))
- Ejemplos: [Intrusión en la red](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-))
- Ejemplo: [Intrusión en la red](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)
- Ejemplo: [Intrusión en la red](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_aegmm_kddcup.html)
- [Likelihood Ratios](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/llr.html) ([Ren et al., 2019](https://arxiv.org/abs/1906.02845))
- Ejemplos: [Genoma](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)
- [Prophet Time Series Outlier Detector](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/prophet.html) ([Taylor et al., 2018](https://peerj.com/preprints/3190/))
- Ejemplo: [Pronóstico del tiempo](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_prophet_weather.html)
- [Spectral Residual Time Series Outlier Detector](https://docs.seldon.io/projects/alibi-detect/en/stable/od/methods/sr.html) ([Ren et al., 2019](https://arxiv.org/abs/1906.03821))
- Ejemplo: [Conjunto de datos sintético](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_sr_synth.html)
- [Sequence-to-Sequence (Seq2Seq) Outlier Detector](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))
- Ejemplos: [ECG](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_seq2seq_ecg.html), [Conjunto de datos sintético](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_seq2seq_synth.html)
#### Detección 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))
- Ejemplo: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/ad_ae_cifar10.html)
- [Model distillation](https://docs.seldon.io/projects/alibi-detect/en/stable/ad/methods/modeldistillation.html)
- Ejemplo: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_distillation_cifar10.html)
#### Detección de deriva
- [Kolmogorov-Smirnov](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/ksdrift.html)
- Ejemplo: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_ks_cifar10.html), [grafos moleculares](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mol.html), [reseñas de películas](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)
- Ejemplo: [Pingüinos](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_supervised_penguins.html)
- [Fisher's Exact Test](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/fetdrift.html)
- Ejemplo: [Pingüinos](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_supervised_penguins.html)
- [Least-Squares Density Difference](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))
- [Maximum Mean Discrepancy](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))
- Ejemplo: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mmd_cifar10.html), [grafos moleculares](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mol.html), [reseñas de películas](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_imdb.html), [reseñas de Amazon](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_amazon.html)
- [Learned Kernel MMD](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/learnedkerneldrift.html) ([Liu et al, 2020](https://arxiv.org/abs/2002.09116))
- Ejemplo: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_clf_cifar10.html)
- [Context-aware MMD](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/contextmmddrift.html) ([Cobb and Van Looveren, 2022](https://arxiv.org/abs/2203.08644))
- Ejemplo: [ECG](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_context_ecg.html), [temas de noticias](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_context_20newsgroup.html)
- [Chi-Squared](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/chisquaredrift.html)
- Ejemplo: [Predicción de ingresos](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_chi2ks_adult.html)
- [Mixed-type tabular data](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/tabulardrift.html)
- Ejemplo: [Predicción de ingresos](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_chi2ks_adult.html)
- [Classifier](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/classifierdrift.html) ([Lopez-Paz and Oquab, 2017](https://openreview.net/forum?id=SJkXfE5xx))
- Ejemplo: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_clf_cifar10.html), [reseñas de 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) (adaptación de [Jitkrittum et al, 2016](https://arxiv.org/abs/1605.06796))
- Ejemplo [MNIST y calidad del vino](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/spot_the_diff_mnist_win.html)
- [Classifier and Regressor Uncertainty](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/modeluncdrift.html)
- Ejemplo: [CIFAR10 y vino](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_model_unc_cifar10_wine.html), [grafos moleculares](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mol.html)
- [Online Maximum Mean Discrepancy](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/onlinemmddrift.html)
- Ejemplo: [Calidad del vino](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_online_wine.html), [imágenes médicas de Camelyon](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_online_camelyon.html)
- [Online Least-Squares Density Difference](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/onlinemmddrift.html) ([Bu et al, 2017](https://ieeexplore.ieee.org/abstract/document/7890493))
- Ejemplo: [Calidad del vino](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_online_wine.html)
## Conjuntos de datos
El paquete también contiene funcionalidad en `alibi_detect.datasets` para obtener fácilmente una serie de conjuntos de datos para diferentes modalidades. Para cada conjunto de datos se devuelven o bien los datos y las etiquetas, o bien un objeto *Bunch* con los datos, las etiquetas y metadatos opcionales. Ejemplo:```python
from alibi_detect.datasets import fetch_ecg
(X_train, y_train), (X_test, y_test) = fetch_ecg(return_X_y=True)
Conjunto de datos Genome: 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 te permite elegir cualquier nivel de severidad o tipo de corrupción. La lista con los tipos de corrupción disponibles se puede obtener con alibi_detect.datasets.corruption_types_cifar10c(). El conjunto de datos se puede utilizar en la investigación sobre robustez y deriva. Los datos originales se pueden encontrar aquí. Ejemplo: ```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 te permite seleccionar un subconjunto de intrusiones de red como objetivos o elegir solo características específicas. Los datos originales se pueden encontrar aquí.Los modelos y/o componentes básicos que pueden ser útiles fuera de la detección de valores atípicos, adversarios o deriva se pueden encontrar en alibi_detect.models. Principales implementaciones:
PixelCNN++: alibi_detect.models.pixelcnn.PixelCNN
Autoencoder variacional: alibi_detect.models.autoencoder.VAE
Modelo secuencia a secuencia: alibi_detect.models.autoencoder.Seq2Seq
ResNet: alibi_detect.models.resnet
model = fetch_tf_model('cifar10', 'resnet32')
Alibi-detect está integrado en la plataforma de despliegue de modelos de aprendizaje automático Seldon Core y en el framework de servicio de modelos KFServing.
Si utilizas alibi-detect en tu investigación, considera citarlo.
Entrada 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} }