Estou trabalhando com uma série de pontuações de anomalias (o fundo é a detecção de anomalias em redes de computadores). A cada minuto, recebo uma pontuação de anomalia que me diz o quão "inesperado" ou anormal é o estado atual da rede. Quanto maior a pontuação, mais anormal é o estado atual. Pontuações próximas a 5 são teoricamente possíveis, mas ocorrem quase nunca.
Agora, eu quero criar um algoritmo ou uma fórmula que determine automaticamente um limite para essa série temporal de anomalias. Assim que uma pontuação de anomalia excede esse limite, um alarme é acionado.
A distribuição de frequência abaixo é um exemplo para uma série temporal de anomalia durante 1 dia. No entanto, é não seguro assumir que cada série temporal anomalia está indo olhar assim. Neste exemplo especial, um limite de anomalia como o quantil .99 faria sentido, uma vez que as poucas pontuações à direita podem ser consideradas anomalias.
E a mesma distribuição de frequência das séries temporais (varia apenas de 0 a 1, pois não há pontuações de anomalia mais altas na série temporal):
Infelizmente, a distribuição de frequência pode ter formas, em que o quantil .99 não é útil . Um exemplo está abaixo. A cauda direita é muito baixa; portanto, se o quantil .99 for usado como limite, isso poderá resultar em muitos falsos positivos. Essa distribuição de frequência parece não conter anomalias, portanto o limite deve ficar fora da distribuição em torno de 0,25.
Resumindo, a diferença entre esses dois exemplos é que o primeiro parece exibir anomalias, enquanto o segundo não.
Do meu ponto de vista ingênuo, o algoritmo deve considerar esses dois casos:
- Se a distribuição de frequência possui uma cauda direita grande (ou seja, algumas pontuações anormais), o quantil 0,99 pode ser um bom limite.
- Se a distribuição de frequência tiver uma cauda direita muito curta (ou seja, nenhuma pontuação anormal), o limite deverá estar fora da distribuição.
/ edit: Também não existe uma verdade básica, isto é, conjuntos de dados rotulados disponíveis. Portanto, o algoritmo é "cego" contra a natureza das pontuações de anomalias.
Agora não tenho certeza de como essas observações podem ser expressas em termos de um algoritmo ou fórmula. Alguém tem uma sugestão de como esse problema pode ser resolvido? Espero que minhas explicações sejam suficientes, pois meu histórico estatístico é muito limitado.
Obrigado pela ajuda!
fonte
Respostas:
Você pode encontrar este documento de seu interesse. Veja também uma apresentação mais detalhada de modelos semelhantes na West & Harrison . Existem outros exemplos desse tipo de monitoramento também, muitos mais recentes, mas essa não é exatamente a minha casa do leme :). Sem dúvida, existem implementações adequadas desses modelos, mas não sei o que eles podem ser de improviso ...
A idéia básica é que você tenha um modelo de comutação em que algumas observações / sequência de observações sejam atribuídas a estados anormais da rede enquanto o restante é considerado normal. Uma mistura como essa pode explicar a longa cauda direita em seu primeiro gráfico. Um modelo dinâmico também pode alertá-lo para saltos anormais, como às 8:00 e às 4:00 em tempo real, atribuindo alta probabilidade a novas observações pertencentes a um estado problemático. Também poderia ser facilmente estendido para incluir itens como preditores, componentes periódicos (talvez sua pontuação aumente / diminua um pouco com a atividade) e esse tipo de coisa.
Edit: Devo também acrescentar, esse tipo de modelo é "não supervisionado" no sentido de que as anomalias são detectadas, mostrando uma grande mudança média ou aumento da variação. Ao coletar dados, você pode melhorar o modelo com distribuições anteriores mais informativas. Mas talvez uma vez que você tenha dados suficientes (e exemplos de treinamento conquistados com dificuldade ao lidar com problemas de rede!), Você pode criar algumas regras simples de monitoramento (limites, etc.)
fonte
Você tem exemplos 'rotulados' do que constitui uma anomalia? ou seja, valores associados a uma falha de rede, ou algo assim?
Uma idéia que você pode considerar aplicar é uma curva ROC, que é útil para selecionar limiares que atendem a um critério específico, como maximizar verdadeiros positivos ou minimizar falsos negativos.
Obviamente, para usar uma curva ROC, você precisa rotular seus dados de alguma forma.
fonte
O gráfico da "série original" não precisa exibir nenhuma estrutura predefinida. O que é crítico é que o gráfico dos "resíduos de uma série de modelos adequada" precise exibir uma estrutura gaussiana. Essa "estrutura gaussiana" geralmente pode ser obtida incorporando uma ou mais das seguintes "transformações" 1. um MODELO de arima 2. Ajustes para mudanças de nível local ou tendências de hora local ou pulsos sazonais ou pulsos comuns 3. uma análise ponderada explorando a heterogeneidade de variância comprovada 4. uma possível transformação de potência (logs etc.) para lidar com uma heterogeneidade de variância específica. 5. a detecção de pontos no tempo em que o modelo / parâmetros pode ter mudado.
A Detecção de Intervenção produzirá uma declaração sobre a significância estatística do evento mais recente, sugerindo normalidade ou anomalia
fonte
Na resposta do OP à minha resposta anterior, ele postou seus dados na web. 60 leituras por hora, durante 24 horas, durante 6 dias . Como se trata de ferramentas transversais de séries temporais, como o DBSCAN, a relevância é limitada, pois os dados têm dependência temporal. Com dados como esse, normalmente se procura estrutura intra-hora e intra-dia. Além desses tipos de estrutura, pode-se buscar a detecção de anomalias que podem ser únicas (pulso) ou de natureza sistemática (mudança de nível), usando métodos bem documentados (veja a literatura de Tsay, Tiao, Chen et. al.) Esses procedimentos produziram as seguintes "anomalias". Observe que uma mudança de nível é essencialmente sugestiva de "agrupamentos" separados.
fonte
Depois que um amigo meu me indicou a direção dos algoritmos de agrupamento , eu tropecei no DBSCAN, que constrói clusters no espaço n-dimensional de acordo com dois parâmetros predefinidos. A idéia básica é o agrupamento baseado em densidade, ou seja, regiões densas formam agrupamentos. Os outliers são retornados separadamente pelo algoritmo. Portanto, quando aplicado ao meu histograma unidimensional, o DBSCAN pode me dizer se minhas pontuações de anomalia apresentam algum erro externo. Nota: No DBSCAN, um outlier é apenas um ponto que não pertence a nenhum cluster. Durante as operações normais, espero que o algoritmo produza apenas um único cluster (e sem discrepâncias).
Depois de conseguir identificar discrepantes, encontrar o limite se resume a regras simples, como:
De qualquer forma, obrigado por todas as respostas úteis!
fonte