Saturday, 29 July 2017

Detecção Ambulatorial Média Em Movimento


Estou usando um filtro médio móvel para suavizar os dados para a remoção de valores anormais. Ao alterar o número de pontos médios, estou obtendo resultados diferentes. Meus dados são vetores de recursos multidimensionais. Eu apliquei a média móvel para toda a matriz e depois em variáveis ​​individuais. Eles dão resultados diferentes. Então, como escolher adivinhar o número de pontos em média e deve ser aplicado em toda a matriz ou uma por uma base, pediu 1 de novembro às 21:44 Glenb 9830 155k 9679 20 9679 257 9679 530 Uma abordagem para escolher Um parâmetro de suavização seria otimizar erros de previsão de um passo a frente (como somas de quadrados de erros de predição de um passo à frente). Se você está tentando identificar outliers, você quer uma medida diferente de erro de previsão - um razoavelmente robusto para outliers (e então as médias móveis pareceriam uma escolha estranha - por que não algo mais robusto para os outliers) ndash Glenb 9830 Nov 2 13 em 1: 11 Nem. Ambos. Todos. Desculpa. Mas acho que esta é outra tentativa (embora inteligente) para automatizar o que realmente não pode ser automatizado. É claro que diferentes métodos dão resultados diferentes, as únicas vezes que eles wouldnt é onde o outlier é tão óbvio que você não precisa de um teste. Minha sugestão é usar uma variedade de métodos para identificar possíveis outliers, depois examinar esses outliers individualmente. Estou trabalhando com uma grande quantidade de séries temporais. Essas séries temporais são, basicamente, medições de rede que vem a cada 10 minutos, e algumas delas são periódicas (ou seja, a largura de banda), enquanto algumas outras arent (ou seja, a quantidade de tráfego de roteamento). Gostaria de um algoritmo simples para fazer uma detecção atípica em linha. Basicamente, eu quero manter na memória (ou no disco) todos os dados históricos 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). Qual é a melhor maneira de alcançar esses resultados Estou atualmente usando uma média móvel para remover um pouco de ruído, mas então o que é seguinte. Simples coisas como o desvio padrão, louco. Contra todo o conjunto de dados não funciona bem (eu não posso assumir que as séries temporais estão estacionárias), e eu gostaria de algo mais preciso, idealmente uma caixa preta como: double outlierdetection (double vector, double value) onde vector é a matriz de dupla contendo Os dados históricos e o valor de retorno são a pontuação de anomalia para o novo valor da amostra. Perguntou 2 de agosto 10 às 20:37 Sim, eu assumi que 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 vou fornecer uma resposta, mas precisa de mais espaço do que eu tenho disponível em um comentário. Ndash Rob Hyndman 3 de agosto 10 às 23:40 Uma boa solução terá vários ingredientes, incluindo: Use uma janela resistente, móvel, suave para remover a não-estabilidade. Reexpresse os dados originais para que os resíduos em relação ao liso sejam distribuídos aproximadamente de forma simétrica. Dada a natureza dos seus dados, é provável que suas raízes quadradas ou logaritmos dêem resíduos simétricos. Aplique os métodos do gráfico de controle, ou pelo menos o pensamento da tabela de controle, para os resíduos. No que diz respeito ao último, o pensamento do gráfico de controle mostra que os limiares convencionais, como 2 SD ou 1,5 vezes o IQR além dos quartis, funcionam mal porque provocam muitos sinais falsos fora de controle. As pessoas costumam usar 3 SD no trabalho de tabela de controle, daí 2.5 (ou mesmo 3) vezes o IQR além dos quartis seria um bom ponto de partida. Eu esbocei mais ou menos a natureza da solução de Rob Hyndmans, ao mesmo tempo que adicionei dois pontos principais: o potencial precisa reexpressar os dados e a sabedoria de ser mais conservador na sinalização de um outlier. Não tenho a certeza de que Loess seja bom para um detector online, porém, porque não funciona bem nos pontos finais. Você pode, em vez disso, usar algo tão simples como um filtro mediano móvel (como no alisamento resistente de Tukeys). Se os outliers não vierem em rajadas, você pode usar uma janela estreita (5 pontos de dados, talvez, que serão quebrados apenas com uma explosão de 3 ou mais valores atípicos dentro de um grupo de 5). Depois de ter realizado a análise para determinar uma boa reexpressão dos dados, é improvável que você precise alterar a reexpressão. Portanto, seu detector on-line realmente precisa apenas fazer referência aos valores mais recentes (a última janela) porque não usará os dados anteriores. Se você tiver muito tempo, você poderia avançar para analisar a autocorrelação e a sazonalidade (como flutuações diárias ou semanais recorrentes) para melhorar o procedimento. Respondeu 26 de agosto às 18:02 John, 1.5 IQR é a recomendação original da Tukey39 para os bigodes mais longos em um boxplot e 3 IQR é sua recomendação para marcar pontos como quotfar outliersquot (um riff em uma frase popular de 6039s). Isso é incorporado em vários algoritmos boxplot. A recomendação é analisada teoricamente em Hoaglin, Mosteller, amp Tukey, Understanding Robust e Exploratory Data Analysis. Ndash whuber 9830 out 9 12 at 21:38 Isso confirma dados de séries temporais que tentei analisar. A média da janela e também os desvios padrão de uma janela. ((X - avg) sd) gt 3 parecem ser os pontos que eu quero marcar como outliers. Bem, pelo menos, avisar como outliers, eu sinalizador qualquer coisa superior a 10 sd como extremos extremos outliers. O problema em que eu toco é o que é um comprimento de janela ideal de I39m jogando com qualquer coisa entre 4-8 pontos de dados. Ndash NeoZenith 29 de junho às 8:00 Neo Sua melhor aposta pode ser experimentar um subconjunto de seus dados e confirmar suas conclusões com testes no restante. Você também poderia realizar uma validação cruzada mais formal (mas é necessário um cuidado especial com dados da série temporal devido à interdependência de todos os valores). Ndash whuber 9830 29 de junho às 12:10 (Esta resposta respondeu a uma pergunta duplicada (agora fechada) em Detectando eventos pendentes, que apresentaram alguns dados em forma gráfica.) A detecção de Outlier 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 valores aberrantes e, em seguida, apontar para valores individuais que não se enquadram nessa caracterização. Como essa é uma série temporal, ela acrescenta a complicação da necessidade de (re) detectar outliers de forma contínua. Se isso for feito à medida que a série se desenrola, só podemos 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 com falso muito baixo Taxa positiva. Essas considerações sugerem a execução de um teste outlier de janela móvel simples e robusto sobre os dados. Existem muitas possibilidades, mas uma simples, fácil de entender e facilmente implementada é baseada em um MAD em execução: desvio absoluto mediano 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 MAD ou mais maior que a mediana. Ainda há algum ajuste a ser feito. Quanto de um desvio da maior parte dos dados deve ser considerado periférico e em que ponto de volta no tempo deve ser um aspecto, deixe estes como parâmetros para a experimentação. Heres e uma implementação R aplicada aos dados x (1,2, ldots, n) (com n1150 para emular os dados) com valores correspondentes y: Aplicado 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 da mediana5MAD em cinza, e os outliers - que são simplesmente esses valores de dados acima da curva de cinza - em preto. (O limite só pode ser calculado começando no final da janela inicial. Para todos os dados nesta janela inicial, o primeiro limiar é usado: é por isso que a curva cinza é plana entre x0 e x30.) Os efeitos da alteração dos parâmetros são (A) o aumento do valor da janela tenderá a suavizar a curva cinza e (b) o aumento do limite aumentará 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 estes valores de parâmetros para verificar o resto 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 o pouco que esse método assume sobre os dados: eles não precisam ser normalmente distribuídos, eles não precisam exibir qualquer periodicidade, eles não precisam ser negativos. Tudo o que presume é que os dados se comportam de maneira razoavelmente similar ao longo do tempo e que os picos periféricos são visivelmente maiores do que o resto dos dados. Se alguém quiser experimentar (ou comparar alguma outra solução com a oferecida aqui), aqui está o código que eu usei para produzir dados como os que estão na pergunta. Estou adivinhando que o modelo de séries de tempo sofisticado não funcionará para você por causa do tempo necessário para detectar outliers usando essa metodologia. Portanto, aqui está uma solução alternativa: primeiro estabeleça padrões de tráfego de linha de base por um ano com base na análise manual de dados históricos, que responde por hora do dia, semana, fim de semana, 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 eu estou fazendo: até agora eu dividir manualmente o sinal em períodos, de modo que para cada um deles eu posso definir um intervalo de confiança dentro do qual o sinal deve ser parado e, portanto, eu posso usar métodos padrão, como Como desvio padrão. O problema real é que não consigo decidir o padrão esperado para todos os sinais que eu tenho que analisar, e é por isso que estou procurando por algo mais inteligente. Ndash gianluca 2 de agosto 10 às 21:37 Aqui está uma idéia: Etapa 1: Implementar e estimar um modelo genérico de séries temporais em uma base única com base em dados históricos. Isso pode ser feito offline. Etapa 2: use o modelo resultante para detectar outliers. Passo 3: com alguma frequência (talvez todos os meses), calibre novamente o modelo da série temporal (isso pode ser feito fora de linha) para que a detecção de outliers da etapa 2 não ultrapasse os padrões de tráfego atuais. Isso funcionaria para o seu contexto ndash user28 2 de agosto 10 às 22:24 Sim, isso pode funcionar. Eu estava pensando em uma abordagem semelhante (recomputando a linha de base a cada semana, o que pode ser intensivo em CPU se você tiver centenas de séries temporais univariadas para análise). Entretanto, a verdadeira questão difícil é quot qual é o melhor algoritmo de estilo blackbox para modelar um sinal completamente genérico, considerando o ruído, estimativa de tendência e sazonalidade. AFAIK, todas as abordagens na literatura exigem uma fase de tuningquot quotparameter muito difícil, e o único método automático que encontrei é um modelo ARIMA da Hyndman (previsão de software de Robjhyndman). Estou faltando algo ndash gianluca 2 de agosto 10 às 22:38 Novamente, isso funciona muito bem se o sinal for suposto ter uma sazonalidade assim, mas se eu usar uma série de tempo completamente diferente (ou seja, o tempo médio de ida e volta de TCP ao longo do tempo ), Este método não funcionará (uma vez que seria melhor lidar com aquele com uma média global simples e desvio padrão usando uma janela deslizante contendo dados históricos). Ndash gianluca 2 de agosto 10 às 22:02 A menos que você esteja disposto a implementar um modelo de série de tempo geral (que traz seus contras em termos de latência, etc.) Eu sou pessimista que você encontrará uma implementação geral que, ao mesmo tempo, é simples o suficiente Para trabalhar em todos os tipos de séries temporais. Ndash user28 2 de agosto 10 às 22:06 Outro comentário: eu sei que uma boa resposta pode ser porque você pode estimar a periodicidade do sinal e decidir o algoritmo para usar de acordo com isso, mas eu não achei uma boa solução para este. 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 temporais contêm muito barulho e esses métodos dão alguns resultados loucos dos tempos) ndash gianluca 2 de agosto 10 às 22:06 A Comente para o seu último comentário: por isso estou procurando uma abordagem mais genérica, mas eu preciso de um tipo de caixa de quotblack porque não posso fazer qualquer suposição sobre o sinal analisado e, portanto, não posso criar o conjunto de parâmetros mais velozes para o algoritmo de aprendizagem. Ndash gianluca 2 de agosto 10 às 22:09 Uma vez que é um dado da série temporal, um filtro exponencial simples en. wikipedia. org wiki Exponentialsmoothing irá suavizar os dados. É um filtro muito bom porque você não precisa acumular pontos de dados antigos. Compare cada valor de dados recentemente suavizado com seu valor não suavizado. Uma vez que o desvio excede um certo limiar predefinido (dependendo do que você acredita que um valor de seus dados é negativo), seu outlier pode ser facilmente detectado. Respondeu 30 de abril 15 às 8:50 Você poderia usar o desvio padrão das últimas N medidas (você deve escolher um N adequado). Uma boa pontuação de anomalia seria quantos desvios padrão uma medida é da média móvel. Respondeu 2 de agosto 10 às 20:48 Obrigado pela sua resposta, e se o sinal exibir uma alta sazonalidade (ou seja, muitas medidas 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 úteis) Uma abordagem baseada no desvio padrão não funcionará nesse caso. Ndash gianluca 2 de agosto 10 às 20:57 Por exemplo, se eu receber uma nova amostra a cada 10 minutos, e I39m fazendo uma detecção outlier do uso de largura de banda da rede de uma empresa, basicamente às 18h, esta medida cairá (isso é esperado Um padrão normal total), e um desvio padrão calculado sobre uma janela deslizante falhará (porque ele irá ativar um alerta com certeza). Ao mesmo tempo, se a medida cair às 16h (desviando-se da linha de base usual), este é um valor de risco real. Ndash gianluca 2 de agosto 10 às 20:58 o que eu faço é agrupar as medidas por hora e dia da semana e comparar os desvios-padrão dessa. Ainda não correto para coisas como feriados e sazonalidade do inverno de verão, mas é correto na maioria das vezes. A desvantagem é que você realmente precisa coletar um ano ou mais de dados para ter o suficiente para que o stddev comece a fazer sentido. A análise espectral detecta periodicidade em séries temporais estacionárias. A abordagem de domínio de freqüência com base na estimativa da densidade espectral é uma abordagem que eu recomendaria como seu primeiro passo. Se, por certos períodos, a irregularidade significa um pico muito maior do que o típico para esse período, a série com tais irregularidades não seria estacionária e a análise espacial espectral não seria apropriada. Mas supondo que você tenha identificado o período que tem as irregularidades, você deve determinar aproximadamente qual seria a altura normal do pico e, em seguida, pode definir um limite em algum nível acima dessa média para designar os casos irregulares. Respondeu 3 de setembro às 14:59 Sugiro o esquema abaixo, que deve ser implementável em um dia ou assim: Coletar tantas amostras quanto você pode segurar na memória Remover outliers óbvias usando o desvio padrão para cada atributo Calcular e armazenar a matriz de correlação E também a média de cada atributo Calcule e armazene as distâncias de Mahalanobis de todas as suas amostras Calculando a outlierness: Para a única amostra da qual você quer saber a sua existência: Recuperar os meios, matriz de covariância e Mahalanobis distância s do treinamento Calcule a distância de Mahalanobis d Para a sua amostra Retorne o percentil em que d cai (usando as distâncias de Mahalanobis do treino). Esse será o seu resultado outlier: 100 é um outlier extremo. PS. Ao calcular a distância Mahalanobis. Use a matriz de correlação, não a matriz de covariância. Isso é mais robusto se as medidas da amostra variarem em unidade e número.

No comments:

Post a Comment