Detecção de anomalias: qual algoritmo usar?

10

Contexto: estou desenvolvendo um sistema que analisa dados clínicos para filtrar dados implausíveis que podem ser erros de digitação.

O que eu fiz até agora:

Para quantificar a plausibilidade, minha tentativa até agora foi normalizar os dados e, em seguida, calcular um valor de plausibilidade para o ponto p com base em sua distância aos pontos de dados conhecidos no conjunto D (= o conjunto de treinamento):

plausibilidade(p)=qDGauss(distância(p,q))

Com essa quantificação, posso selecionar um limite que separa os dados plausíveis dos implausíveis. Estou usando python / numpy.

Meus problemas:

  1. Este algoritmo não pode detectar dimensões independentes. Idealmente, eu poderia colocar tudo o que sei sobre o registro no algoritmo e descobrir por si mesmo que a dimensão X não influencia a plausibilidade do registro.
  2. O algoritmo realmente não funciona para valores discretos, como booleanos ou entradas selecionadas. Eles podem ser mapeados em valores contínuos, mas é contra-intuitivo que o Select 1 esteja mais próximo do Select 2 do que o Select 3.

Questão:

Em que tipo de algoritmos devo procurar essa tarefa? Parece haver várias opções, incluindo abordagens baseadas em vizinhos mais próximas, baseadas em cluster e estatísticas. Além disso, tenho problemas para encontrar trabalhos que lidam com a detecção de anomalias dessa complexidade.

Qualquer conselho é altamente apreciado.

[Editar] Exemplo:

Suponha que os dados consistam na altura de uma pessoa, peso de uma pessoa e registro de data e hora - portanto, são dados 3D. O peso e a altura estão correlacionados, mas o registro de data e hora é completamente independente. Se eu considerar apenas as distâncias euclidianas, teria que escolher um pequeno limite para ajustar a maioria dos meus dados de validação cruzada. Idealmente, o algoritmo ignoraria apenas a dimensão do registro de data e hora, porque é irrelevante determinar se um registro é plausível, porque o registro de data e hora não se correlaciona com as outras dimensões de nenhuma maneira. Qualquer registro de data e hora é plausível.

Por outro lado, pode-se criar exemplos em que o carimbo de data / hora é importante. Por exemplo, pode ser que o valor Y para o recurso X seja plausível quando medido antes de uma certa data, mas não após uma determinada data.

Georg
fonte
Por favor, veja minha resposta a stats.stackexchange.com/questions/97946/changepoints-in-r , pois trata essa questão irritante (para alguns!).
IrishStat
Seria stats.stackexchange.com/questions/213 ser o tipo de coisa que você está procurando?
whuber
Duvido que você possa fazer isso funcionar para booleanos.
Aksakal
@whuber Eu não tenho certeza, não parece cobrir como dimensões irrelevantes podem ser ignoradas.
Georg
11
A propósito, também estou lutando para encontrar uma formalização para a abordagem que descrevi. Se eu soubesse o termo formal, também me ajudaria com minha pesquisa. Talvez haja uma variação desse algoritmo que resolva pelo menos a questão da dimensão independente / irrelevante.
Georg

Respostas:

7

Uma formulação típica de Detecção de anomalias é para encontrar a média e variância para cada um de apresenta de dados não anómalas e se x é um vector de essas características que têm componentes x i , em seguida, definir a probabilidade p ( x ) de uma combinação de características tãomxxEup(x)

p(x)=Eu=1 1mp(xEu;μEu,σEu2)

xEuxEuN(μEu,σEu2)

p(x)<ϵ

xEuxEueuogeuog(xEu)xEu

q=μ

ϵ

ϵF1 1

F1 1=2PrecEusEuonRecumaeueuPrecEusEuon+Recumaeueu

Mas, para calcular F1, você precisa saber o que é anômalo e o que não é; que são verdadeiros positivos são quando o sistema prevê uma anomalia e na verdade é uma anomalia, falsos positivos são anomalias previstas que realmente não são e assim por diante. Portanto, a menos que você tenha isso, poderá ter que recorrer a suposições.

O problema dos recursos correlatos

mΣ

p(x)=1 1(2π)m2(detΣ)1 1/2e-1 12(x-μ)TΣ-1 1(x-μ)

O mesmo vale para encontrar e essa abordagem também tem uma desvantagem: você deve calcular o inverso de . Portanto, deve haver pelo menos tantas amostras quanto os recursos e, se o número de recursos for grande, o processo será intensivo em termos de computação e você deverá proteger os recursos dependentes linearmente. Lembre-se dessas advertências, mas parece que você não é um problema.ΣϵΣ

waTeim
fonte
Eu já tentei essa abordagem, incluindo a distribuição gaussiana multivariada. De fato, recursos não relacionados não apresentam muitos problemas com essa abordagem. O que descobri foi que essa abordagem não é adequada para modelos complexos. Por exemplo, se eu tivesse um conjunto de dados 2D com os recursos F1, F2, onde acontece aproximadamente F2 = F1 ^ 3, a distribuição gaussiana multivariada desenhará apenas uma elipse em torno dos dados e modelará os dados de maneira muito aproximada. Foi por isso que fui para a abordagem descrita na pergunta (onde não há um q, mas muitos qs).
Georg
Então, existe uma maneira de adotar a abordagem gaussiana multivariada e aplicá-la para capturar modelos de dados mais complexos? Por exemplo, modelos de mistura poderiam me ajudar nesse caso? Eu li um pouco sobre aqueles em minha pesquisa, mas ainda não entendi completamente como aplicá-los.
Georg
(F1 1,F2)(F1 1,F21 1/3)
Sim, underfitting é o que eu quero dizer. E sim, isso funcionaria, mas quero que o algoritmo detecte isso automaticamente. Não consigo modificar manualmente os recursos, ele deve funcionar em qualquer caso.
Georg
Aqui está um exemplo: Os dois gráficos exibem dados de altura (eixo x) e peso (eixo y) (desculpe pelas legendas em alemão;)). O primeiro gráfico mostra o resultado da abordagem gaussiana multivariada, a segunda da abordagem descrita na pergunta. Nos dois casos, o limiar foi escolhido de modo que 97% dos dados do CV sejam considerados plausíveis. A segunda abordagem é capaz de capturar melhor a complexidade dos dados. 1: dl.dropboxusercontent.com/u/26034024/anomaly/gauss.png 2: dl.dropboxusercontent.com/u/26034024/anomaly/distance.png
Georg
3

Quase terminei o projeto em que precisava resolver esses problemas e gostaria de compartilhar minha solução, caso alguém tenha os mesmos problemas.

Primeiro de tudo, a abordagem que descrevi é muito semelhante a uma Estimativa de densidade do kernel . Então, isso era bom saber para a pesquisa ...

Recursos independentes

||x1 1-x2||dEustumance(x1 1,x2)

Esteja avisado: o coeficiente de correlação só pode medir correlações lineares. Veja a página wiki vinculada para detalhes. Se a correlação nos dados puder ser aproximada linearmente, isso funcionará bem. Caso contrário, você deve dar uma olhada na última página deste documento e ver se pode usar a medida de correlação deles para obter um fator de escala.

Valores discretos

Eu usei o algoritmo descrito apenas para valores contínuos. Valores discretos foram usados ​​para filtrar o conjunto de treinamento. Portanto, se eu tenho a altura e o peso de uma pessoa e sei que ela é mulher, apenas examinarei amostras de outras mulheres para verificar se há uma anomalia.

Georg
fonte