Eu tenho um vetor e quero detectar outliers nele.
A figura a seguir mostra a distribuição do vetor. Pontos vermelhos são outliers. Pontos azuis são pontos normais. Pontos amarelos também são normais.
Eu preciso de um método de detecção de outlier (um método não paramétrico) que possa apenas detectar pontos vermelhos como outliers. Eu testei alguns métodos como IQR, desvio padrão, mas eles detectam pontos amarelos como outliers também.
Eu sei que é difícil detectar apenas o ponto vermelho, mas acho que deve haver uma maneira (mesmo combinação de métodos) de resolver esse problema.
Pontos são leituras de um sensor por um dia. Mas os valores do sensor mudam devido à reconfiguração do sistema (o ambiente não é estático). Os horários das reconfigurações são desconhecidos. Os pontos azuis são para o período anterior à reconfiguração. Os pontos amarelos são para após a reconfiguração, que causa desvio na distribuição das leituras (mas são normais). Pontos vermelhos são resultados da modificação ilegal dos pontos amarelos. Em outras palavras, são anomalias que devem ser detectadas.
Estou pensando se a estimativa da função de suavização do Kernel ('pdf', 'survivor', 'cdf', etc.) Pode ajudar ou não. Alguém ajudaria sobre sua principal funcionalidade (ou outros métodos de suavização) e justificativa para usar em um contexto para resolver um problema?
Respostas:
Você pode visualizar seus dados como uma série temporal em que uma medição comum produz um valor muito próximo ao valor anterior e uma recalibração produz um valor com uma grande diferença em relação ao predecessor.
Aqui estão dados de amostra simulados com base na distribuição normal com três meios diferentes semelhantes ao seu exemplo.
Ao calcular a diferença para o valor anterior (uma espécie de derivação), você obtém os seguintes dados:
Minha interpretação de sua descrição é que você tolera a recalibração (ou seja, pontos a uma distância maior de zero, vermelho no diagrama), mas eles devem alternar entre valores positivos e negativos (ou seja, correspondentes à mudança do estado azul para o amarelo e de volta).
Isso significa que você pode configurar um alarme vendo um segundo ponto vermelho no lado negativo ou positivo .
fonte
Se você usar o log, poderá usar uma média atual que será redefinida se a configuração for alterada. No entanto, isso terá a fraqueza de que você precisa de pelo menos alguns dados antes de poder detectar esses valores extremos.
Seus dados parecem "agradáveis" (sem muito barulho). Eu recomendaria tirar a média dos últimos 10 a 20 pontos na mesma configuração. Se esses valores forem algum tipo de quantidade contada, você poderá cometer um erro de poisson para pontos de dados individuais e calcular o erro em média.
Quantos dados históricos você possui? Se você tem muito, pode usá-lo para ajustar sua taxa de alarme de forma a capturar uma proporção aceitável de todos os valores extremos reais e obter um número mínimo de avisos falsos. O que é aceitável depende do problema específico. (Custo de falsos positivos ou valores não detectados e sua abundância).
fonte
Vamos ilustrar a abordagem proposta na outra resposta com um exemplo simples
Adquirir dados
Simularemos os dados com sete pedaços produzidos com distribuição normal com diferentes meios.
Isso é importante, pois nos permite distinguir claramente entre os grupos e simplesmente detectar os pontos de ruptura. Esta resposta usa uma abordagem de limite elementar; pode ser necessária uma maneira mais avançada para seus dados reais.
Derivar os pontos de ruptura
Com uma simples diferença em relação ao ponto anterior
lag(y)
, obtemos os valores extremos. Eles são classificados usando um limite.Classificação de Mudança de Comportamento
Com base nas regras que você descreveu, os pontos de ruptura são classificados como
OK
eproblem
.A regra declara que não são permitidas duas alterações na mesma direção. O segundo movimento na direção anterior é considerado um problema.
Pode ser necessário ajustar essa interpretação simples se o seu logik for mais avançado.
Apresentação
Finalmente, você projeta os valores discrepantes reconhecidos com os dados originais
fonte