Tuesday 31 October 2017

Moving average outlier detection


Estimador de tendências e sua aplicação em detecção de valores atípicos Este é o acompanhamento do último post sobre Visão geral de detecção de fraudes. Neste artigo, vamos nos concentrar nos dados da série de tempo e alguns métodos para encontrar outliers em dados de séries temporais Dados de séries temporais O que é dados de séries temporais A série temporal é definida como uma coleção de pontos de dados que é observada durante um intervalo de tempo contínuo. Os dados da série de tempo são usados ​​frequentemente encontrar as mudanças dos dados sobre o tempo. Por exemplo, podemos medir quantas calorias queimamos todos os dias para ver se estamos aptos e também podemos calcular o dinheiro que gastamos todos os dias para encontrar nossos comportamentos de gastos. Troca de moeda (Euro para VN). Fonte: google A figura acima se um exemplo de dados de séries temporais (ilustrado pelo gráfico de linhas à direita). Podemos também identificar muitos outros recursos no gráfico. Por exemplo, olhando para o gráfico, podemos ver que após 5 anos, o valor do Euro foi reduzido (de 30.000 VND para 25.000 VND). Além disso, houve algumas mudanças drásticas no final de 2017 (o que corresponde à sua crise). Mesmo a tendência dos dados no ano passado também poderia ser identificada. O que é um outlier em dados de séries temporais No último post, definimos um outlier como um ponto de observação que está distante de outras observações. Conforme mencionado na última seção, usando dados de séries temporais, pudemos detectar a tendência de movimento dos dados ao longo do tempo. Combinar esses dois, um outlier em dados de séries temporais é um ponto de dados que está distante da tendência geral de todo o conjunto de dados. Usando a definição acima, poderíamos criar um método geral para encontrar valores abertos em dados de séries temporais da seguinte maneira: Coletar dados de séries temporais com ruídos e outliers. Normalizar os dados do valor Localizar a tendência geral dos dados Identificar os pontos que não seguem a tendência geral (pontos que estão muito distantes dos valores estimados de acordo com a tendência geral) Detectar valores atípicos em dados de séries temporais Existem muitas maneiras de calcular a movimentação Tendência dos dados. Nesta seção, vamos falar de dois métodos: média móvel e regressão. Para ilustrar o algoritmo, vamos definir os dados de entrada. Suponha que nos são dadas: Média móvel A média móvel é um dos métodos mais simples para calcular e visualizar a tendência de dados de séries temporais. Sua idéia é simples, o valor correspondente de um timestamp é calculado como o valor médio dos pontos circunvizinhos. Por exemplo, seja 2k as janelas da média móvel. No timestamp xi podemos calcular yi como: Aplicar esta equação a todos os pontos dados atingimos os valores estimados de cada timestamp. Encontrar outlier nos dado dados agora é bastante simples. Basta predefinir um limite e, em seguida, identificar todos os dados ponto j que têm: Usando os pontos circundantes não é uma obrigação. Poderíamos também usar k pontos que são observados antes (ou depois) do ponto selecionado. Existem várias melhorias para o algoritmo de média móvel. Você pode encontrá-los aqui Mediano filtro Movendo média oferece uma maneira fácil de estimar e visualizar a tendência de dados de séries temporais. No entanto, ele tem um grande inconveniente que é: outlier muitas vezes introduz uma mudança drástica no valor médio. Por causa disso, você pode acabar detectando alguns pontos de dados que não devem ser filtrados. Felizmente, Median filtro poderia resolver este problema, estimando os valores observados como a mediana dos valores circundantes. Em outras palavras, temos: Similar à média móvel, agora temos que definir um limiar e, em seguida, encontrar o outlier de acordo com o limiar. Tanto a média móvel como o filtro mediano têm de enfrentar o mesmo problema: não podem fornecer uma forma eficaz de prever o valor no futuro porque não temos dados no futuro. Por exemplo, o valor de Euro comparado com VND está aumentando de acordo com o gráfico na última seção. Aplicando a média móvel ou mediana algoritmos de filtro para a próxima etapa resultará um valor previsto que é menor do que o último tempo medido. Assim, o valor previsto não seguirá a tendência geral dos dados. Para resolver este problema, podemos usar o método de regressão. Regressão Ao contrário da média móvel e do filtro mediano, a regressão calcula a relação entre cada par de dados observados no conjunto de dados. Entre os métodos de regressão, a regressão linear é considerada como o método mais fácil. Ele simplesmente estima uma linha reta que pode ser considerada como a tendência de movimento dos dados. Em outras palavras, tentamos estimar uma linha que é: Dado os dados, podemos calcular a taxa de erro: eo erro total é: Minimizar o erro total de produções Outlier detecção com Gaussian Process Regressão linear fornece um método para encontrar a tendência de movimento De dados. No entanto, ele é apenas uma linha reta. Em dados do mundo real, vimos muitos dados que não devem ser estimados como uma linha reta. O gráfico de moeda acima é um exemplo. Portanto, precisamos de um método de regressão melhor que capture não apenas a natureza do conjunto de dados dado, mas também robusto ao ruído (ou outlier) Gaussian Process é um método não paramétrico para descobrir a tendência dos dados. Ele também oferece um bom modelo probabilístico que é robusto para o ruído de entrada (que pode ser considerado como outlier). Vamos mover o algoritmo do próprio Processo Gaussiano. No processo gaussiano assumimos que os pontos de dados são uma coleção de variáveis ​​aleatórias, qualquer número finito de que tenha uma distribuição gaussiana conjunta Rasmussen. Semelhante à Distribuição Gaussiana, o Processo Gaussiano é definido por sua função média e função de covariância. Eles podem ser calculados como: Neste momento, um processo gaussiano é controlado pela função de covariância. Vamos considerar a função de covariância mais comum: função RBF (ou função gaussiana). Na função RBF, k (xi, xj) é calculado pela seguinte equação: Suponha que queremos prever o valor ym em xm. Precisamos nos preparar Então, podemos calcular o ym previsto por: Note que: todos os parâmetros do processo gaussiano podem ser aprendidos a partir dos dados dados utilizando o método de subida do gradiente marginal. Na estatística, temos a regra 67-95-99.7. Aplicando esta regra em nosso problema, teremos a confiança preditiva de ym. Isso também nos ajuda a identificar o outlier nos dados (os dados observados não ficar dentro do intervalo de confiança selecionado do previsto DA Exemplo Dados de entrada Permite criar uma entrada usando python Média móvel Filtro mediano Regressão linear Processo gaussiano Estou trabalhando com uma grande quantidade De séries de tempo. Essas séries de tempo são basicamente medições de rede que vem cada 10 minutos, e alguns deles são periódicos (ou seja, a largura de banda), enquanto alguns outros arent (ou seja, a quantidade de tráfego de roteamento.) Eu gostaria de um algoritmo simples para fazer um Basicamente, eu quero manter na memória (ou no disco) os dados históricos inteiros para cada série de tempo, e eu quero detectar qualquer outlier em um cenário ao vivo (cada vez que uma nova amostra é capturada). Melhor maneira de alcançar esses resultados Im atualmente usando uma média móvel, a fim de remover algum ruído, mas, em seguida, o próximo coisas simples como desvio padrão, louco contra o conjunto de dados não funciona bem (eu não posso assumir a série de tempo são estacionários) E eu gostaria de algo mais preciso, idealmente uma caixa preta como: double outlierdetection (double vector, double value) onde vector é a matriz de duplo contendo os dados históricos eo valor de retorno é a anomalia pontuação para o novo valor da amostra. Sim, eu assumi a freqüência é conhecida e especificada. Existem métodos para estimar a frequência automaticamente, mas isso complicaria consideravelmente a função. Se você precisa estimar a freqüência, tente fazer uma pergunta separada sobre isso - e provavelmente fornecer uma resposta. Mas precisa de mais espaço do que eu tenho disponível em um comentário. Ndash Rob Hyndman Aug 3 10 às 23:40 Uma boa solução terá vários ingredientes, incluindo: Use uma janela resistente e movente suave para remover a não-estacionaridade. Reexpresse os dados originais de modo que os resíduos com relação ao liso sejam distribuídos aproximadamente simetricamente. Dada a natureza de seus dados, é provável que suas raízes quadradas ou logaritmos dêem resíduos simétricos. Aplicar métodos de gráfico de controle, ou pelo menos controlar o pensamento de gráfico, para os resíduos. Na medida em que o último vai, o pensamento de gráfico de controle mostra que limiares convencionais como 2 SD ou 1,5 vezes o IQR além dos quartis funcionam mal porque eles acionam muitos falsos sinais fora de controle. As pessoas costumam usar 3 SD no trabalho de gráfico de controle, onde 2,5 (ou mesmo 3) vezes o IQR além dos quartis seria um bom ponto de partida. Eu tenho mais ou menos esboçado a natureza da solução de Rob Hyndmans ao adicionar a ela dois pontos principais: a necessidade potencial re-expressar os dados ea sabedoria de ser mais conservador em sinalizar um outlier. Eu não tenho certeza que Loess é bom para um detector on-line, no entanto, porque não funciona bem nos endpoints. Em vez disso, você pode usar algo tão simples como um filtro mediano em movimento (como no Suketik resistente a Tukeys). Se outliers não vêm em rajadas, você pode usar uma janela estreita (5 pontos de dados, talvez, que irá quebrar apenas com uma explosão de 3 ou mais outliers dentro de um grupo de 5). Depois de ter realizado a análise para determinar uma boa re-expressão dos dados, é improvável que você precise alterar a re-expressão. Portanto, o detector on-line realmente só precisa fazer referência aos valores mais recentes (a última janela) porque ele não usará os dados anteriores. Se você tiver séries de tempo muito longas, você poderia ir mais longe para analisar a autocorrelação ea sazonalidade (como flutuações diárias ou semanais recorrentes) para melhorar o procedimento. IQR é a recomendação original de Tukey para os bigodes mais longos em um boxplot e 3 IQR é sua recomendação para pontos de marcação como outliersquot quotfar (um riff em uma frase 6039 popular). Isso é construído em muitos algoritmos boxplot. A recomendação é analisada teoricamente em Hoaglin, Mosteller, amp Tukey, Understanding Robust e Exploratory Data Analysis. Isso confirma dados de séries de tempo que tenho tentado analisar. Janela média e também uma janela desvios padrão. ((X - avg) / sd) gt 3 parecem ser os pontos que eu quero sinalizar como outliers. Bem, pelo menos, alertar como outliers, eu sinalizar qualquer coisa superior a 10 sd como extrema outliers erro. O problema que eu corro em é o que é um comprimento de janela ideal I39m que joga com qualquer coisa entre 4-8 pontos de dados. Ndash NeoZenith Jun 29 at 8:00 Neo Sua melhor aposta pode ser a de experimentar com um subconjunto de seus dados e confirmar suas conclusões com testes sobre o restante. Você poderia realizar uma validação cruzada mais formal também (mas é necessário um cuidado especial com dados de séries temporais devido à interdependência de todos os valores). (Esta resposta respondeu a uma pergunta duplicada (agora fechada) na Detecção de eventos pendentes que apresentou alguns dados em forma gráfica.) A detecção de valores atípicos depende da natureza dos dados e do que você está disposto Para assumir sobre eles. Os métodos de uso geral dependem de estatísticas robustas. O espírito desta abordagem é caracterizar a maior parte dos dados de uma forma que não é influenciada por quaisquer outliers e, em seguida, apontar para quaisquer valores individuais que não se encaixam dentro dessa caracterização. Porque esta é uma série de tempo, acrescenta a complicação da necessidade de (re) detectar outliers em uma base contínua. Se isso é para ser feito como a série se desenrola, então estamos autorizados apenas a usar dados mais antigos para a detecção, não dados futuros Além disso, como proteção contra os muitos testes repetidos, gostaríamos de usar um método que tem um falso muito baixo Taxa positiva. Estas considerações sugerem a execução de um simples, robusto teste de janela em movimento sobre os dados. Existem muitas possibilidades, mas uma simples, facilmente compreensível e facilmente implementada é baseada em uma corrida MAD: mediana absoluto desvio da mediana. Esta é uma medida fortemente robusta de variação dentro dos dados, semelhante a um desvio padrão. Um pico periférico seria vários MADs ou mais maior do que a mediana. Ainda há algum ajuste a ser feito. O quanto de um desvio da maior parte dos dados deve ser considerado periférico e como voltar no tempo deve olhar Deixe vamos deixar estes como parâmetros para a experimentação. Heres uma aplicação R aplicada a dados x (1,2, ldots, n) (com n1150 para emular os dados) com valores correspondentes y: Aplicada a um conjunto de dados como a curva vermelha ilustrada na pergunta, produz esse resultado: Os dados São mostrados em vermelho, a janela de 30 dias dos limiares median5MAD em cinza e os outliers - que são simplesmente aqueles valores de dados acima da curva cinza - em preto. (O limiar só pode ser calculado começando no final da janela inicial. Para todos os dados dentro desta janela inicial, o primeiro limiar é usado: thats porque a curva cinza é plana entre x0 e x30.) Os efeitos de alterar os parâmetros são (A) o aumento do valor da janela tenderá a suavizar a curva cinza e (b) o aumento do limiar elevará a curva cinza. Sabendo disso, pode-se tomar um segmento inicial dos dados e identificar rapidamente os valores dos parâmetros que melhor segregam os picos periféricos do resto dos dados. Aplique esses valores de parâmetro para verificar o restante dos dados. Se um gráfico mostra que o método está piorando ao longo do tempo, isso significa que a natureza dos dados está mudando e os parâmetros podem precisar ser reajustados. Observe quão pouco esse método assume sobre os dados: eles não precisam ser distribuídos normalmente, eles não precisam exibir qualquer periodicidade que nem sequer precisam ser não-negativos. Tudo o que assume é que os dados se comportam de maneira razoavelmente semelhante ao longo do tempo e que os picos periféricos são visivelmente mais altos que o resto dos dados. Se alguém gostaria de experimentar (ou comparar alguma outra solução para o oferecido aqui), aqui está o código que eu usei para produzir dados como os mostrados na pergunta. Estou adivinhando modelo sofisticado série de tempo não vai funcionar para você por causa do tempo que leva para detectar outliers usando esta metodologia. Portanto, aqui está uma solução alternativa: Primeiro, estabeleça padrões de tráfego normais de linha de base para um ano, com base em análise manual de dados históricos que contabilizam a hora do dia, o dia da semana versus o fim de semana, o mês do ano etc. Use essa linha de base juntamente com algum mecanismo simples (Por exemplo, média móvel sugerida por Carlos) para detectar outliers. Você também pode querer rever a literatura de controle de processo estatístico para algumas idéias. Sim, isso é exatamente o que estou fazendo: até agora eu divido manualmente o sinal em períodos, para que, para cada um deles, eu possa definir um intervalo de confiança dentro do qual o sinal é suposto ser estacionário e, portanto, posso usar métodos padrão como Como desvio padrão. O problema real é que eu não posso decidir o padrão esperado para todos os sinais que tenho para analisar, e é por isso que procuro algo mais inteligente. Ndash gianluca Ago 2 10 em 21:37 Aqui está uma idéia: Passo 1: Implementar e estimar um modelo genérico série de tempo em uma base de tempo com base em dados históricos. Isso pode ser feito offline. Passo 2: Use o modelo resultante para detectar outliers. Etapa 3: Em alguma freqüência (talvez a cada mês), re-calibre o modelo de série de tempo (isso pode ser feito off-line) para que sua etapa 2 detecção de outliers não ir muito fora da etapa com os padrões de tráfego atual. Isso funcionaria para o seu contexto ndash user28 Aug 2 10 at 22:24 Sim, isso pode funcionar. Eu estava pensando em uma abordagem semelhante (recompactando a linha de base todas as semanas, o que pode ser intenso de CPU se você tiver centenas de séries de tempo univariadas para analisar). BTW a pergunta difícil real é quotwhat é o melhor algoritmo estilo blackbox para modelar um sinal completamente genérico, considerando ruído, estimativa de tendência e sazonalidade. AFAIK, todas as abordagens na literatura requerem uma fase de afinação quotparamétrica muito difícil, eo único método automático que encontrei é um modelo ARIMA de Hyndman (robjhyndman / software / forecast). Eu sinto falta de algo ndash gianluca Aug 2 10 at 22:38 Novamente, isso funciona muito bem se o sinal é suposto ter uma sazonalidade como essa, mas se eu usar uma série de tempo completamente diferente (ou seja, a média TCP round trip tempo ao longo do tempo ), Este método não funcionará (já que seria melhor lidar com aquele com uma média global simples e desvio padrão usando uma janela deslizante contendo dados históricos). A menos que você esteja disposto a implementar um modelo de série de tempo geral (que traz em seus contras em termos de latência, etc), eu sou pessimista que você vai encontrar uma implementação geral, que ao mesmo tempo é bastante simples Para trabalhar para todos os tipos de séries temporais. Outro comentário: Eu sei que uma boa resposta pode ser quotso você pode estimar a periodicidade do sinal, e decidir o algoritmo para usar de acordo com itquot, mas eu didn39t encontrar uma verdadeira boa solução para este outro Problema (eu joguei um pouco com análise espectral usando DFT e análise de tempo usando a função de autocorrelação, mas minhas séries de tempo contêm um monte de ruído e esses métodos dão alguns resultados loucos mosts do tempo) ndash gianluca Aug 2 10 at 22:06 A Comentar o seu último comentário: é por isso que procuro uma abordagem mais genérica, mas preciso de um tipo de caixa quadrada porque não posso fazer qualquer suposição sobre o sinal analisado e, portanto, não posso criar o conjunto de parâmetros quotbest para o algoritmo de aprendizagem. Ndash gianluca Aug 2 10 at 22:09 Uma vez que é um dados de séries temporais, um simples filtro exponencial en. wikipedia. org/wiki/Exponentialsmoothing irá suavizar os dados. É um filtro muito bom desde que você não necessita acumular pontos velhos dos dados. Compare todos os valores de dados recém-suavizados com o seu valor não alinhado. Uma vez que o desvio excede um certo limite predefinido (dependendo do que você acredita que um outlier em seus dados é), então seu outlier pode ser facilmente detectado. Você pode usar o desvio padrão das últimas medidas N (você tem que escolher um N adequado). Uma pontuação boa anomalia seria quantas desvios padrão uma medição é a partir da média móvel. Resposta Obrigado por sua resposta, mas e se o sinal exibe uma alta sazonalidade (ou seja, um monte de medições de rede são caracterizadas por um padrão diário e semanal, ao mesmo tempo, por exemplo, noite vs dia ou fim de semana Vs dias de trabalho) Uma abordagem baseada no desvio padrão não funcionará nesse caso. Por exemplo, se eu receber uma nova amostra a cada 10 minutos, e I39m fazendo uma detecção atípica do uso da largura de banda da rede de uma empresa, basicamente às 18h esta medida vai cair (este é um esperado Um padrão totalmente normal), e um desvio padrão calculado sobre uma janela deslizante falhará (porque ele irá disparar um alerta com certeza). Ao mesmo tempo, se a medida cai às 4pm (desviando da linha de base usual), este é um outlier real. Ndash gianluca Aug 2 10 at 20:58 o que eu faço é agrupar as medidas por hora e dia da semana e comparar os desvios padrão de que. Ainda doesnt corrigir para coisas como férias e verão / inverno sazonalidade mas sua correto mais. A desvantagem é que você realmente precisa coletar um ano ou assim de dados para ter o suficiente para que stddev começa a fazer sentido. A análise espectral detecta a periodicidade em séries temporais estacionárias. A abordagem do domínio da freqüência baseada na estimativa da densidade espectral é uma abordagem que eu recomendaria como seu primeiro passo. Se durante certos períodos a irregularidade significa um pico muito mais elevado do que o típico para esse período, então a série com tais irregularidades não seria estacionária e a anisise espectral não seria apropriada. Mas assumindo que você identificou o período que tem as irregularidades você deve ser capaz de determinar aproximadamente o que a altura do pico normal seria e, em seguida, pode definir um limiar em algum nível acima dessa média para designar os casos irregulares. Uma das perguntas confundidas que os Planejadores de Demanda perguntam em nossas oficinas de treinamento é por que seu software produz uma previsão plana 90 do tempo. Um software caro que levou um exército e um par de anos para implementar geralmente sugeriu um modelo constante ou modelo de média móvel. Isso resultou em uma previsão plana. Embora o olho nu possa ver graficamente (se os gráficos estiverem disponíveis ao usuário) um bom padrão sazonal, a seleção de especialistas no software produziu uma previsão constante para a eternidade. Há muitos truques subjacentes a este resultado final, alguns deles conhecidos e alguns deles escondidos. Um dos culpados é o processo de detecção de valores atípicos. O software pode detectar de forma inteligente outliers para uma determinada configuração e método de detecção de valores abertos. Normalmente, você usa um fator K para desenvolver faixas de tolerância em torno do fator ex-post para identificar outliers. O que são fatores K e como alavancar as configurações do fator K para produzir bons modelos de previsão Nós observamos em uma variedade de casos, as pessoas usam k-fatores baixos que então jogam fora todos os picos sazonais e depressões. Um fator k baixo é super vigilante. Não permite que nenhum padrão escape através do motor de modelagem. Tudo o que o motor vê é apenas um conjunto de alguns pontos de dados que estão estreitamente espalhados em torno da previsão ex-post ou apenas uma média histórica. Veja a imagem abaixo. Um fator k de 1 eliminará todos os padrões vistos no perfil de demanda. Ele apenas mantém uma fração do conjunto de dados original que todos apontam para a média histórica como uma previsão violentamente precisa. Isso não tem nada a ver com o poder do mecanismo estatístico disponível para o software. Na nossa próxima workshop de três dias, vamos discutir os perigos da detecção automática de valores abertos e fazer com que os participantes trabalhem através de um exercício prático que dará maior visibilidade a todo o processo de detecção de valores atípicos. Vamos explicar os recursos sob o capô do módulo de planejamento SAP APO Demand para navegar por este processo perigoso. Dia 3 será tudo SAP APO com hands-on de treinamento na plataforma de software. Os participantes no workshop de setembro de 2017 foram capazes de fazer diretamente alterações de modelo e parâmetro para suas previsões ao vivo na oficina. Visite o site demandplanning / workshops. htm para mais detalhes sobre o workshop. Entre em contato comigo se você tiver mais perguntas ou quiser discutir o processo de detecção de Outlier no APO DP. Dr. Mark Chockalingam é o fundador e Presidente da Demand Planning LLC, um Business Process and Strategy Consultancy ajudando clientes em todas as indústrias: Farmacêutica, Produtos de Consumo, Produtos Químicos e Vestuário de Moda. Suas áreas de consultoria de especialidade incluem previsão de vendas, análise de cadeia de suprimentos e planejamento de vendas e operações. Ele realizou vários treinamentos e oficinas de facilitação de estratégia para uma variedade de clientes nos EUA e no exterior. Mark trabalhou com uma variedade de empresas da Fortune 500, como a Wyeth, a Miller SAB, a FMC, a Teva e as pequenas e médias empresas, como Au Bon, Multy Industries, Ticona, uma divisão da Celanese AG. Com experiência significativa em previsão de negócios e modelagem, ele é um palestrante freqüente em eventos importantes da cadeia de suprimentos em temas que vão desde o gerenciamento de demanda até o planejamento de vendas e operações. Antes de estabelecer sua prática de consultoria, Mark trabalhou com empresas de manufatura em posições importantes na cadeia de suprimentos. Mark foi Diretor de Análise de Mercado e Planejamento de Demanda da Gillette Company, agora parte da Proctor and Gamble. Antes de Gillette, Mark liderou os processos de previsão Suncare, Footcare e OTC para Schering-Plough Consumer HealthCare em Memphis. Mark tem um Ph. D. em Finanças da Arizona State University, um MBA da Universidade de Toledo e é membro do Instituto de Contadores Públicos da Índia. Você também pode gostar. outlier Dada uma série de valores numéricos com carimbo de data / hora, usar o operador Outlier em uma consulta pode identificar valores em uma seqüência que parece inesperada e identificar um alerta ou violação, por exemplo, para uma pesquisa agendada. Para isso, o operador Outlier rastreia a média móvel eo desvio padrão do valor e detecta ou alerta quando a diferença entre o valor excede a média por algum múltiplo do desvio padrão, por exemplo, 3 desvio padrão. Sintaxe:. Timeslice 1m max (x) como tempo de resposta por timeslice outlier tempo de resposta. Timeslice 1m count (sourcehost) como sourcehost pela contagem outlier de timeslice Certifique-se de que sua sintaxe inclui apenas um campo chave: timeslice. Isso é necessário para tornar a opção de gráfico de linha disponível. O segundo exemplo de sintaxe usa uma cláusula adicional de ldquogroup byrdquo para encontrar outliers para múltiplos valores de sourcehost. Consulte o exemplo abaixo para obter detalhes. Esta sintaxe adiciona os seguintes campos à saída: responsetimeerror - Esta é a média de tempo de resposta. Responsetimelower - Este é o desvio padrão médio - limiar. Responsetimeupper - Este é o desvio padrão médio do limiar. Responsetimeindicator - Esta é 1 para o valor fora dos limites inferior e superior. Responsetimeviolation - Este é 1 para bater o número especificado de indicadores consecutivos. Existem padrões para todos os parâmetros, mas você pode configurar parâmetros através de argumentos de palavras-chave, como comprimento da janela ou limiar. Por exemplo, esta consulta define os seguintes parâmetros: outlier responsetime window5, threshold3, consecutive2, direction-window - Use os 5 pontos de dados à direita para calcular média e sigma. O padrão é 10. threshold - Calcular violação com base em / - 3 desvios padrão. O padrão é 3.0. Consecutiva - Apenas ajuste a resposta de tempo de resposta a 1 se 2 ou mais pontos de dados consecutivos forem observados além de 3 desvios padrão da média móvel. O padrão é 1. direção - Usa -,, ou -, para qual direção dispara violações: Use - para desvios positivos ou negativos. Esse é o padrão. Use apenas para desvios positivos (mais do que o esperado). Uso - para apenas desvios negativos (menos do que o esperado). Regras: O operador Outlier deve aparecer após um grupo por agregador, como count, min, max ou sum. O campo de destino original deve ser numérico. Exemplos Logs do IIS Execute a consulta a seguir para localizar valores atípicos nos logs do IIS nas últimas 6 horas. SourceCategoryIIS / acesso parse regex quotd-dd d: d: d (ltserveripgtS) (ltcsuristemgt / S) S d (ltusergtS) (ltclientipgt. d) quot analisar regex quotd dd (ltresponsetimegtd) quot timeslice 15m max (tempo de resposta) como Responsetime by timeslice outlier tempo de resposta window5, threshold3, consecutive2, direction - Os valores outlier são representados pelos triângulos cor-de-rosa no gráfico resultante. Logs do Apache - Sever Errors Over Time Execute a seguinte consulta para encontrar valores de valores anómalos nos logs do Apache nas últimas 3 horas. SourceCategoryApache / Access parse quotHTTP / 1.1quot como statuscode onde statuscode corresponde a quot5quot timeslice 5m count (statuscode) como statuscode por timelice outlier statuscode window5, threshold3, consecutive1, direction - Os valores outlier são representados pelos triângulos cor-de-rosa no gráfico resultante. Use uma cláusula adicional de ldquogroup byrdquo para encontrar outliers para vários valores de sourcehost. Você também pode executar uma consulta como esta: data_de_servidor_de_serviço timelice 1m count por timelice, sourcehost outlier count por sourcehost Desta forma, você pode executar a análise outlier separadamente para cada valor de sourcehost. como mostrado. Este exemplo apenas produzirá uma tabela de agregação, não um gráfico, mas os campos de indicador e violação refletirão corretamente cada processamento de sourcehost. Detecção de Outlier Multidimensional O operador Outlier suporta a detecção de séries multidimensionais ou multi-temporais. A detecção de outliers multidimensionais é útil quando você deseja monitorar o comportamento de cada usuário, servidor, recurso de aplicativo ou outro ldquoentityrdquo único, em vez de alguma agregação em todas as entidades. Por exemplo, você pode detectar logins falhados por usuário. Para fazer isso, você gostaria de saber se alguma conta de usuário, individualmente, experimentou uma quantidade estranha de logins com falha, e não se wersquove viu algum aumento na quantidade média ou total de logins com falha em todos os usuários. O último pode ser útil, mas com centenas ou milhares de usuários (entidades), um pico em logins com falha pode se perder no ruído de um ldquonormalrdquo quantidade de logins falhou total, e você poderia perder um pico em logins com falha para um usuário específico . Outros exemplos incluem: Detecção de anomalias enquanto rastreia falhas de página, operação de disco ou utilização de CPU para todos os nós de um cluster simultaneamente. Monitorando o desempenho de cada estação de trabalho simultaneamente, sem a necessidade de construir um relatório outlier para cada um. Monitoramento de uploads de imagens com falha para todos os usuários de um aplicativo (não total de uploads falhados em todos os usuários). Se você tiver usado o operador outlier, é fácil criar uma operação multidimensional outlier. Basta adicionar por ltdimensiongt ao final da consulta. Por exemplo, a consulta de exemplo a seguir determinará muitas séries de tempo, uma para cada sourcehost: data_de_base de dados de origem, timeslice 1m count por timeslice, sourcehost outlier count por sourcehost Você pode exibir os resultados brutos de uma série de tempo multidimensional em um gráfico de tabela, Opções não estão disponíveis. No gráfico de tabela a seguir, um valor de 1 na coluna countviolation indica que o ponto de dados correspondente a esse timeslice é um outlier. Alertas com base em resultados de Outlier multidimensionais Para criar um alerta com base na tabela de outliers multi-séries acima, extraia countviolation. Desta forma, você não precisará construir um alerta para cada série de dados (cada sourcehost no exemplo anterior), e você pode monitorar automaticamente uma série dinâmica para desviar o comportamento. A consulta de exemplo a seguir permite monitorar quando os usuários de aplicativos experimentam falhas. Ele monitora todas as contas de usuário por ID de usuário exclusivo e aplica-se à quantidade de mensagens ldquofailrdquo que ocorrem em todas as contas de usuário: sourceCategoryProd parse quotUserID: quot como userid parse quotResult: quot as result onde resultado quotFailquot timeslice 1h count by userid, timeslice outlier Depois de executar a consulta, você pode clicar em Salvar como para criar uma pesquisa agendada e configurá-la para enviar um alerta quando qualquer conta de usuário tiver uma quantidade incomum de falhas ou Outro evento para o qual você deseja monitorar cada série de dados. Para visualizar seus resultados, na página Pesquisar, é possível criar um gráfico de colunas. Em seguida, altere a propriedade de empilhamento para normal para exibir alertas por userid exclusivo (o aspecto multidimensional). Gráfico Resultados Outlier multidimensionais Esta seção fornece dois exemplos de como exibir resultados outlier multidimensionais em gráficos. Example 1: Outlier Distribution Across Time In this example, wersquoll extract countviolation from the multi-series outlier table and display that. This allows you to display the distribution of outliers among various time-series. error (sourceCategorymix or sourceCategorycon) timeslice 1m count by timeslice, sourcecategory outlier count by sourcecategory fields timeslice, sourcecategory, countviolation transpose row timeslice column sourcecategory When you select a line chart. this example will display something like the following: Example 2: Outlier Ranking This example query uses the counterror (distance from the expected value for that timeslice) and the value of the standard deviation for the baseline, then determines how many standard deviation a data point is from its expected value. This way, you can display outliers visually in terms of deviation from the expected value. viewcustomereventsadhocsearch timezoneamerica timeslice 1h count by timeslice, timezone outlier count by timezone where countstd gt0 if(countviolation1,abs(counterror)/countstd, 0) as deviation fields timeslice, timezone, deviation transpose row timeslice column timezone When you select a line chart. this example will display something like the following: In the line chart, you can see which series is producing the most ldquodeviatingrdquo outliers. This approach effectively displays the severity of the outlier, because the spikes represent the magnitude (how many standard deviations the value is from the mean) in one time-series compared to another time-series. Recommended articlesDo you need an offline or online algorithm Can you run your entire time series through an algorithm after the time series is generated (offline) Or do you need to have answers real-time as the time series is being generated (online) The CUSUM method is a good place to start for an quotonlinequot algorithm, but your time series needs to be bounded. If it039s not you need to transform your time series so that it is bounded. That means removing seasonality/cyclicality and trend from the series. For an online algorithm such as CUSUM one way to remove seasonality/cyclicality and trend is to compute something like an exponentially smoothed moving average, then subtract this moving average from your main time series. You then use the CUSUM method on the resulting time series of residuals. You can make some adaptations to the CUSUM algorithm to avoid some of it039s drawbacks. For example pick your threshold in a clever way to avoid false-negatives/false-pos itives, think of the threshold as setting the maximum aggregate deviation over time you allow from quotnormal behaviorquot. Another thing you can do is reset the algorithm (set the sum you store to zero) once it detects an outlier to avoid getting many notifications if there039s a shift in how the time series behaves. Here039s another online method that039s similar to CUSUM. Sequential probability ratio test An easy way to do all this for an quotofflinequot algorithm is to fit a polynomial or spline to the time series, then compute the difference between your time series and the fitted polynomial/spline. The resulting time series of residuals can then have some basic statistics computed on it to find outliers, for example any data points outside of 1.5 interquartile-range could be classified as an outlier. Neither of those are fancy or cutting edge but they work most of the time in my experience. If you039re interested in doing something fancier with time series I039d pick up a book on the subject. Time Series Analysis with Applications in R by Cryer is good. 719 Views middot View Upvotes middot Not for Reproduction middot Answer requested by 1 person

No comments:

Post a Comment