
Algoritmos para detecção de outliers, adversariais e drift
Alibi Detect é uma biblioteca Python de código-fonte disponível focada na detecção de outliers, adversariais e drift. O pacote visa cobrir detectores online e offline para dados tabulares, texto, imagens e séries temporais. Ambos os backends TensorFlow e PyTorch são suportados para a detecção de drift.
Para mais contexto sobre a importância de monitorar outliers e distribuições em um ambiente de produção, confira esta palestra do workshop Challenges in Deploying and Monitoring Machine Learning Systems da ICML 2020, baseada no artigo Monitoring and explainability of models in production e referenciando o Alibi Detect.
Para uma introdução completa à detecção de drift, confira Protecting Your Machine Learning Against Drift: An Introduction. A palestra aborda o que é drift e por que vale a pena detectá-lo, os diferentes tipos de drift, como ele pode ser detectado de forma fundamentada e também descreve a anatomia de um detector de drift.
O pacote alibi-detect pode ser instalado a partir de:
pip)conda/mamba)Prophet: ```bash
pip install alibi-detect[prophet]
Para instalar a partir do conda-forge, é recomendado usar o mamba, que pode ser instalado no ambiente base do conda com:```bash conda install mamba -n base -c conda-forge
Para instalar o alibi-detect:```bash
mamba install -c conda-forge alibi-detect
Usaremos o detector de outliers VAE para ilustrar a 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)
As previsões são retornadas em um dicionário com as chaves `meta` e `data`. `meta` contém os metadados do detector, enquanto `data` é, por si só, um dicionário com as previsões reais. Ele contém os escores e limiares de outliers, adversariais ou de drift, bem como as previsões sobre se as instâncias são, por exemplo, outliers ou não. Os detalhes exatos podem variar ligeiramente de método para método, então incentivamos o leitor a se familiarizar com os [tipos de algoritmos suportados](https://docs.seldon.io/projects/alibi-detect/en/stable/overview/algorithms.html).
## Algoritmos Suportados
As tabelas a seguir mostram os casos de uso recomendados para cada algoritmo. A coluna *Nível de Feature* indica se a detecção pode ser feita no nível de feature, por exemplo, por pixel em uma imagem. Consulte a [lista de referência de algoritmos](#reference-list) para mais informações com links para a documentação e artigos originais, bem como exemplos para cada um dos detectores.
### Detecção de Outliers
| Detector | Tabular | Imagem | Séries Temporais | Texto | Features Categóricas | Online | Nível de Feature |
|:---------------------|:-------:|:-----:|:-----------:|:----:|:--------------------:|:------:|:-------------:|
| Isolation Forest | ✔ | | | | ✔ | | |
| Mahalanobis Distance | ✔ | | | | ✔ | ✔ | |
| AE | ✔ | ✔ | | | | | ✔ |
| VAE | ✔ | ✔ | | | | | ✔ |
| AEGMM | ✔ | ✔ | | | | | |
| VAEGMM | ✔ | ✔ | | | | | |
| Likelihood Ratios | ✔ | ✔ | ✔ | | ✔ | | ✔ |
| Prophet | | | ✔ | | | | |
| Spectral Residual | | | ✔ | | | ✔ | ✔ |
| Seq2Seq | | | ✔ | | | | ✔ |
### Detecção Adversarial
| Detector | Tabular | Imagem | Séries Temporais | Texto | Features Categóricas | Online | Nível de Feature |
| :--- | :---: | :---: |:-----------:|:----:|:--------------------:|:------:|:-------------:|
| Adversarial AE | ✔ | ✔ | | | | | |
| Model distillation | ✔ | ✔ | ✔ | ✔ | ✔ | | |
### Detecção de Drift
| Detector | Tabular | Imagem | Séries Temporais | Texto | Features Categóricas | Online | Nível de Feature |
|:---------------------------------| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 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 | ✔ | ✔ | ✔ | ✔ | ✔ | | |
#### Suporte a TensorFlow e PyTorch
Os detectores de drift suportam backends TensorFlow, PyTorch e (quando aplicável) [KeOps](https://www.kernel-operations.io/keops/index.html). No entanto, o Alibi Detect não os instala por padrão. Consulte as [opções de instalação](#installation-and-usage) para mais detalhes.```python
from alibi_detect.cd import MMDDrift
cd = MMDDrift(x_ref, backend='tensorflow', p_val=.05)
preds = cd.predict(x)
O mesmo detector em PyTorch:```python cd = MMDDrift(x_ref, backend='pytorch', p_val=.05) preds = cd.predict(x)
Ou no KeOps:```python
cd = MMDDrift(x_ref, backend='keops', p_val=.05)
preds = cd.predict(x)
O Alibi Detect também vem com várias etapas de pré-processamento, como codificadores inicializados aleatoriamente, embeddings de texto pré-treinados para detectar drift usando a biblioteca transformers e extração de camadas ocultas de modelos de aprendizado de máquina. Isso permite detectar diferentes tipos de drift, como mudança de covariáveis e de distribuição prevista. As etapas de pré-processamento são novamente suportadas no TensorFlow e no 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)
Consulte os notebooks de exemplo (por exemplo, [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_mmd_cifar10.html), [resenhas de filmes](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_imdb.html)) para obter mais detalhes.
### Lista de Referências
#### Detecção de Outliers
- [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))
- Exemplo: [Intrusão em Rede](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))
- Exemplo: [Intrusão em Rede](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)
- Exemplo: [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))
- Exemplos: [Intrusão em Rede](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-))
- Exemplo: [Intrusão em Rede](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)
- Exemplo: [Intrusão em Rede](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))
- Exemplos: [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/))
- Exemplo: [Previsão do Tempo](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))
- Exemplo: [Conjunto de Dados 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))
- Exemplos: [ECG](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_seq2seq_ecg.html), [Conjunto de Dados Sintético](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/od_seq2seq_synth.html)
#### Detecção 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))
- Exemplo: [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)
- Exemplo: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_distillation_cifar10.html)
#### Detecção de Drift
- [Kolmogorov-Smirnov](https://docs.seldon.io/projects/alibi-detect/en/stable/cd/methods/ksdrift.html)
- Exemplo: [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), [resenhas de filmes](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)
- Exemplo: [Pinguins](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)
- Exemplo: [Pinguins](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))
- Exemplo: [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), [resenhas de filmes](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_text_imdb.html), [resenhas da 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))
- Exemplo: [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))
- Exemplo: [ECG](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_context_ecg.html), [tópicos de notícias](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)
- Exemplo: [Predição de Renda](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)
- Exemplo: [Predição de Renda](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))
- Exemplo: [CIFAR10](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_clf_cifar10.html), [resenhas da 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) (adaptação de [Jitkrittum et al, 2016](https://arxiv.org/abs/1605.06796))
- Exemplo [MNIST and Wine quality](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)
- Exemplo: [CIFAR10 and Wine](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)
- Exemplo: [Wine Quality](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_online_wine.html), [imagens médicas 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))
- Exemplo: [Wine Quality](https://docs.seldon.io/projects/alibi-detect/en/stable/examples/cd_online_wine.html)
## Conjuntos de Dados
O pacote também contém funcionalidade em `alibi_detect.datasets` para buscar facilmente uma série de conjuntos de dados para diferentes modalidades. Para cada conjunto de dados, são retornados os dados e os rótulos ou um objeto *Bunch* com os dados, rótulos e metadados opcionais. Exemplo:```python
from alibi_detect.datasets import fetch_ecg
(X_train, y_train), (X_test, y_test) = fetch_ecg(return_X_y=True)
Conjunto de dados do genoma: 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 permite que você escolha qualquer nível de severidade ou tipo de corrupção. A lista com os tipos de corrupção disponíveis pode ser obtida com alibi_detect.datasets.corruption_types_cifar10c(). O dataset pode ser usado em pesquisas sobre robustez e drift. Os dados originais podem ser encontrados aqui. Exemplo: ```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 permite selecionar um subconjunto de intrusões de rede como alvos ou escolher apenas características específicas. Os dados originais podem ser encontrados aqui.Modelos e/ou blocos de construção que podem ser úteis fora da detecção de outliers, adversariais ou drift podem ser encontrados em alibi_detect.models. Principais implementações:
PixelCNN++: alibi_detect.models.pixelcnn.PixelCNN
Autoencoder Variacional: alibi_detect.models.autoencoder.VAE
Modelo sequência a sequência: alibi_detect.models.autoencoder.Seq2Seq
ResNet: alibi_detect.models.resnet
model = fetch_tf_model('cifar10', 'resnet32')
O Alibi-detect é integrado na plataforma de implantação de modelos de machine learning Seldon Core e no framework de serving de modelos KFServing.
Se você usar o alibi-detect em sua pesquisa, por favor, considere citá-lo.
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} }