Detecção de anomalias com Isolation Forest
A detecção de anomalias é uma habilidade extremamente poderosa. Ela possui aplicações em vários domínios. Entre eles, podemos destacar a detecção de transações bancárias fraudulentas, detecção de intrusão de rede, detecção de anomalias em exames médicos, aumento/queda repentina nas vendas, mudança no comportamento do cliente, etc.
Como esses cenários envolvem geralmente a análise de dados massivos, essa é uma das áreas onde os algoritmos superam a capacidade humana facilmente. Neste post, abordaremos um desses algorimos, o Isolation Forest.
Isolation Forest é uma técnica de machine learning não supervisionada. O algoritmo foi introduzido por Fei Tony Liu em 2008 para detecção de anomalias e se popularizou como um método rápido e confiável.
Entenda o conceito de anomalia
Qualquer ponto de dados que se desvie significativamente dos demais membros do conjunto é chamado de anomalia ou outlier. É muito difícil diferenciar um outiler de uma anomalia. Em consequência, não é incomum encontrar os dois serem usados como sinônimos. Porém, esses termos não se referem ao mesmo conceito.
Um ponto de dados real significativamente fora da média ou mediana de uma distribuição é um outlier. Ou seja, outliers podem ser entendidos como pontos de dados com baixa probabilidade, mas que pertencem ao conjunto de dados. Já uma anomalia é um ponto de dado falso ou errado. Portanto, a anomalia é um dado feito por um processo diferente do restante dos dados.
Isolation Forest: a base do algoritmo
Para identificar anomalias, o Isolation Forest particiona aleatoriamente o espaço de dados. Partindo da ideia de que as anomalias são raras e diferentes, o algoritmo cria uma coleção de árvores de decisão. Esse procedimento lembra uma floresta aleatória, mas com uma abordagem diferente. As árvores usadas são chamadas de árvores de isolamento (iTree). Cada árvore é construída dividindo repetidamente os dados a partir de uma característica escolhida aleatoriamente (como tamanho ou renda) em um ponto randômico. As anomalias são mais fáceis de isolar porque diferem da maioria dos dados. Consequentemente, o número de divisões necessárias para isolar uma anomalia em uma árvore de isolamento tende a ser muito menor do que para um ponto de dados normal.
O passo a passo do algoritmo
Na prática, o Isolation Forest opera segundo os seguintes passos:
- Cria um conjunto de árvores de isolamento (iTrees) para um determinado conjunto de dados.
- A ramificação de cada iTree começa selecionando um recurso aleatório (do conjunto de todos os N recursos).
- Cada ramificação é feita a partir de um limite aleatório (qualquer valor no intervalo de valores mínimo e máximo do recurso selecionado). Se o valor de um ponto de dados for menor que o limite selecionado, ele vai para a ramificação esquerda ou para a direita. E assim um nó é dividido em ramificações.
- Este processo é aplicado recursivamente para cada iTree até que cada ponto de dados seja completamente isolado ou até que a profundidade máxima (se definida) seja atingida.
- As anomalias normalmente exigem menos divisões para isolar, resultando em caminhos mais curtos nas árvores de isolamento.
- O algoritmo mede o comprimento do caminho de isolamento para cada ponto de dados em várias árvores.
- Por fim, o algoritmo calcula uma pontuação de anomalia com base no comprimento médio do caminho na floresta. Pontos de dados com comprimentos médios de caminho mais curtos têm maior probabilidade de serem anomalias.
A base para usar Isolation Forest com Scikit-learn
Evidentemente, Isolation Forest é facilmente implementado com a excelente biblioteca Scikit-learn. A base para usá-lo é bem simples. Ele faz parte dos modelos de aprendizado em conjunto. Portanto, é importado do módulo ensemble:
from sklearn.ensemble import IsolationForest
Para usá-lo, basta definir o modelo:
isolation_forest = IsolationForest(n_estimators=100, contamination=0.1)
Neste trecho, o parâmetro n_estimators especifica o número de árvores de isolamento (iTrees) a serem criadas na floresta. Já o termo contamination é um parâmetro opcional que indica uma proporção de valores discrepantes esperados nos dados. Ele pode ser útil para definir um limite para pontuações de anomalias. Vários outros parâmetros podem ser especificados opcionalmente. Para saber mais detalhes, consulte a documentação oficial.
Após a definição do modelo, as etapas seguintes seguem os passos tradicionais de treinamento e validação.
Veja também:
O que é machine learning (aprendizado de máquina)?
Como machine learning (aprendizado de máquina) funciona?
Como machine learning (aprendizado de máquina) aprende?
Como implementar um modelo de machine learning?
Como escolher um bom modelo de machine learning?
Classificação e regressão em machine learning
O que é conjunto de dados (dataset) em machine learning?
Onde conseguir conjuntos de dados para machine learning?
Salve localmente conjuntos de dados para machine learning
Pré-processamento de dados em machine learning
Regressão Linear e Machine Learning
Conjuntos de treinamento e teste em machine learning
Função de perda em machine learning
Scikit-learn para machine learning
Matrizes de Confusão em Machine Learning
Floresta aleatória com Scikit-learn
Detecção de anomalias com Isolation Forest
Encontrou algum erro ou quer fazer uma sugestão? Por favor, entre em contato usando nosso formulário de contatos.