Detectando anomalias com rede neural

12

Eu tenho um grande conjunto de dados multidimensional que é gerado todos os dias.

Qual seria uma boa abordagem para detectar qualquer tipo de 'anomalia' em comparação com os dias anteriores? Esse é um problema adequado que pode ser resolvido com redes neurais?

Todas as sugestões são apreciadas.

informações adicionais: não há exemplos, portanto o método deve detectar as anomalias em si

Nickpick
fonte

Respostas:

12

A partir da formulação da pergunta, presumo que não haja "exemplos" de anomalias (ou seja, rótulos). Com essa premissa, uma abordagem viável seria usar auto - codificadores : redes neurais que recebem como entrada seus dados e são treinadas para produzir esses mesmos dados. A idéia é que o treinamento tenha permitido à rede aprender representações das distribuições de dados de entrada na forma de variáveis ​​latentes.

Existe um tipo de codificador automático chamado codificador automático denoising , treinado com versões corrompidas dos dados originais como entrada e com os dados originais não corrompidos como saída. Isso fornece uma rede que pode remover ruído (ou seja, corrupção de dados) das entradas.

Você pode treinar um codificador automático denoising com os dados diários. Em seguida, use-o em novos dados diários; Dessa forma, você tem os dados diários originais e uma versão incorreta desses mesmos dados. Você pode comparar os dois para detectar diferenças significativas .

A chave aqui é qual definição de diferença significativa você escolhe. Você pode calcular a distância euclidiana e supor que, se ela ultrapassar determinado limite arbitrário, você tem uma anomalia. Outro fator importante é o tipo de corrupção que você introduz; eles devem estar o mais próximo possível de anormalidades razoáveis.

Outra opção seria usar as redes adversas generativas . O subproduto do treinamento é uma rede discriminadora que diferencia os dados diários normais dos dados anormais.

ncasas
fonte
4

Eu acho que isso depende muito da natureza dos seus dados (categóricos / contínuos). Eu começaria com métodos simples primeiro. Aqueles vêm à minha mente:

  • Você pode comparar a distribuição de cada variável usando quantis ou qualquer teste estatístico para verificar se eles são significativamente diferentes
  • Você também pode contar a ocorrência de cada rótulo / categoria e compará-los
  • Eu também tentaria empregar qualquer tipo de medida de distância. Por exemplo, você pode calcular a distância dos mahalanobis e procurar grandes mudanças
  • Ou algo realmente simples - apenas uma diferença absoluta entre dados novos e antigos, defina um limite e tudo que exceder o limite será relatado
  • Você também pode implementar algumas técnicas multidimensionais - como matriz de correlação, componentes principais, clustering etc. e procurar mudanças

Se nenhum deles for adequado, existe um ramo inteiro de modelos de estatísticas / ML especializados para detecção de anomalias. SVM, t-SNE, florestas isolamento, pares Grupo de Análise , quebra de Análise de Pontos , séries temporais (onde você iria procurar discrepantes tendências externas).

Esses métodos têm a vantagem de serem uma espécie de caixa branca, para que você possa dizer por que alguém é extraviado. Caso isso não seja o que você deseja, outros sugeriram abordagens da RNA, que também funcionarão.

HonzaB
fonte
0

Estou tentando resolver um problema semelhante. Seu conjunto de dados contém uma combinação de texto e recursos numéricos? Nesse caso, a complexidade de detectar anomalias aumenta (não sei por qual fator). Se seu conjunto de dados for uniforme, por exemplo, contendo apenas valores numéricos, é possível usar um RNN que ainda precise de um conjunto de dados rotulado, mas ele pode detectar séries temporais como padrões (desde que você mencione a comparação com os valores do dia anterior para ex)

Pradeep Banavara
fonte
0

Uma maneira simples de fazer isso usando codificadores automáticos (sem os "codificadores automáticos" que precisam ser treinados com "dados corrompidos") é treinar um codificador automático e inspecionar o RMSE das linhas da entrada que não decodificou bem (aquelas que o autoencoder teve dificuldade em reconstruir). Por alguma definição, os dados representariam uma anomalia (certamente seria o caso de coisas como picos no tráfego).

orcaman
fonte