Detecção média pico em movimento no Brasil


Precisamos de um sistema de alerta precoce. Estou lidando com um servidor que é conhecido por ter problemas de desempenho sob carga. Os erros são gravados em um banco de dados, juntamente com um timestamp. Existem algumas etapas de intervenção manual que podem ser tomadas para diminuir a carga do servidor, mas apenas se alguém estiver ciente do problema. Dado um conjunto de vezes que os erros ocorreram, como posso identificar o início de um spike em erros (em tempo real). Podemos calcular periodicamente ou em cada ocorrência de erro. Não nos preocupamos com erros ocasionais, mas não temos um limite específico. Eu poderia notificar alguém a qualquer momento, digamos, três erros em cinco minutos, mas tenho certeza de que existe uma maneira melhor. Eu gosto de ajustar a sensibilidade do algoritmo com base no feedback dos sysadmins. Por enquanto, eles gostariam que fosse bastante sensível, mesmo sabendo que podemos esperar alguns falsos positivos. Eu não sou um estatístico, o que eu tenho certeza é óbvio, e implementar isso precisa ser relativamente simples com nossas ferramentas existentes: SQL Server e JSP ASP antigo. Não estou à procura de uma resposta no código, mas se requer um software adicional, provavelmente não funcionará para nós (embora eu saiba soluções impraticáveis, mas ideais, como um comentário, por minha própria curiosidade). Perguntou 24 de outubro às 21:44 Faz 5 meses que você fez essa pergunta, e espero que você tenha descoberto algo. Eu vou fazer algumas sugestões diferentes aqui, esperando que você ache algum uso para eles em outros cenários. Para o seu caso de uso, não acho que você precise olhar para algoritmos de detecção de espiga. Então, aqui: vamos começar com uma imagem dos erros que ocorrem em uma linha de tempo: o que você quer é um indicador numérico, uma medida de quão rápido os erros estão chegando. E esta medida deve ser passível de limiar - seus administradores de sistemas devem ser capazes de estabelecer limites que controlam com quais erros de sensibilidade se transformam em avisos. Você mencionou picos, a maneira mais fácil de obter um pico é desenhar um histograma em cada intervalo de 20 minutos: seus administradores de sistema definem a sensibilidade com base nas alturas das barras, ou seja, a maioria dos erros é tolerável em um intervalo de 20 minutos. (Neste ponto, você pode estar se perguntando se esse tempo de janela de 20 minutos não pode ser ajustado. Ele pode, e você pode pensar no comprimento da janela como a definição da palavra em conjunto na frase de erros que aparecem juntos.) Qual é o problema com este método para Seu cenário particular Bem, sua variável é um número inteiro, provavelmente inferior a 3. Você não definiu seu limite para 1, pois isso significa que todos os erros são um aviso que não requer um algoritmo. Então, suas escolhas para o limite serão 2 e 3. Isso não dá aos seus administradores de sistemas um monte de controle fino. Em vez de contar erros em uma janela de tempo, acompanhe o número de minutos entre os erros atuais e os últimos. Quando esse valor é muito pequeno, significa que seus erros estão ficando freqüentes e você precisa levantar um aviso. Seus administradores de sistemas provavelmente definirão o limite em 10 (ou seja, se os erros estiverem ocorrendo a menos de 10 minutos de distância, seja um problema) ou 20 minutos. Talvez 30 minutos para um sistema menos crítico. Esta medida proporciona mais flexibilidade. Ao contrário da Medida 1, para a qual havia um pequeno conjunto de valores com os quais você poderia trabalhar, agora você tem uma medida que fornece bons valores de 20-30. Os seus administradores de sistemas terão, portanto, mais possibilidades de afinação. Há outra maneira de abordar esse problema. Ao invés de olhar para as frequências de erro, pode ser possível prever os erros antes de ocorrerem. Você mencionou que esse comportamento estava ocorrendo em um único servidor, que é conhecido por problemas de desempenho. Você pode monitorar certos indicadores de desempenho chave naquela máquina, e mandá-los dizer quando um erro acontecerá. Especificamente, você examinaria o uso da CPU, o uso da memória e os KPIs relacionados ao Disk IO. Se o seu uso de CPU atravessar 80, os sistemas vão diminuir a velocidade. (Eu sei que você disse que não queria instalar nenhum software, e é verdade que você poderia fazer isso usando PerfMon. Mas há ferramentas gratuitas lá que farão isso por você, como Nagios e Zenoss.) E para pessoas que vieram aqui Na esperança de encontrar algo sobre a detecção de espiga em uma série de tempos: Detecção de espiga em uma série de tempos A coisa mais simples que você deve começar por fazer é calcular uma média móvel de seus valores de entrada. Se a sua série for x1, x2. , Então você calcularia uma média móvel após cada observação como: Mk (1 - alfa) M alfa xk, onde o alfa determinaria quanto peso dá o valor mais recente de xk. Se o seu novo valor se afastou muito da média móvel, por exemplo, você levanta um aviso. As médias móveis são boas quando se trabalha com dados em tempo real. Mas suponha que você já tenha um monte de dados em uma tabela, e você quer apenas executar consultas SQL contra ela para encontrar as espinhas. Eu sugeriria: Calcule o valor médio da sua série temporal. Calcule o desvio padrão sigma. Isolete os valores que são mais de 2sigma acima da média (você pode precisar ajustar esse fator de 2) Mais coisas divertidas sobre séries temporais Muitos mundo real As séries temporais exibem um comportamento cíclico. Existe um modelo chamado ARIMA que ajuda você a extrair esses ciclos das suas séries temporais. Médias móveis que levam em consideração o comportamento cíclico: Holt e Winters Eu procurei algoritmos de detecção online. E principalmente artigos acadêmicos que estão sobre minha cabeça. Eles podem aguentar a resposta, mas não passe meu teste pessoal de quotimplequot. Corrija-me se eu estou errado, mas não acho que estou procurando por um algoritmo de detecção de pico. Uma vez que os erros atingiram o pico, parece que, por definição, perdi a minha oportunidade de melhorar o pior dos problemas. Desculpe se o meu uso de quotspikequot fosse confuso. Eu acho que preciso prever um aumento contínuo de erros ou identificar um grande passo. Ndash dbenton 25 de outubro 12 às 15:26 1 para controle de processo estatístico, há algumas informações úteis aqui em Detecção de etapas. Para o SPC, não é muito difícil escrever uma implementação das Regras Elétricas Ocidentais ou das Regras de Nelson. Basta fazer um USP no servidor SQL que irá iterar através de um conjunto de dados e ping cada ponto contra as regras usando seus pontos vizinhos. Talvez seja o número de erros por hora (dependendo das suas necessidades). Esse tipo de relação com uma pergunta que eu postei no Stack Overflow por um tempo atrás (acabei de escrever uma resposta rápida se isso ajudar): Gráficos de Controle Estatístico de Processos no SQL Server 2008 R2Que são os algoritmos de detecção de pico existentes Existem dados ruidosos e eu Gostaria de implementar a detecção de pico para esses dados. Os dados estão no sentido inverso, na verdade eu estou tentando determinar o fundo. Aqui está um instantâneo dos dados no Excel. Eu gosto de detectar ambos os fundos. Eu pensei em passar os dados através de um filtro de passagem baixa e, posteriormente, fazer uma média móvel onde eu determine os picos e dentro da média móvel eu faço outra pesquisa. Tenho zero conhecimento DSP, isso é apenas uma abordagem de senso comum. Gostaria de saber o que os especialistas recomendam. Perguntou 1 de fevereiro 12 às 6:17 Ktuncer, há uma série de métodos que você pode usar aqui. Um método que eu recomendaria é usar uma Transformada de Ondas Discretas (DWT) e, em particular, olhar para o Daubechies Wavelet. Eu escolheria, digamos, Daub-14 Daub-Tetra. Basicamente, o que você realmente precisa fazer é mostrar seu sinal e, a partir daí, fazer uma seleção mínima ou máxima. Isso eliminará seus valores anormais. Uma transformada da daub-14daub-tetra wavelet pode ajudá-lo a fazer isso, e isso ajuda especialmente porque você não conhece a natureza do seu sinal. (Usando o daub-14, você pode representar com precisão os sinais polinomiais do grau 142 7, e parece que você não precisará mais do que isso). O cálculo dessa transformada wavelet essencialmente comprime sua energia em poucas indícios. Esses indicadores representam pesos em vetores de base. O resto dos pesos será (idealmente) próximo de zero. Quando você tem ruído em seu sinal (como você faz), aqueles pesos que normalmente eram zero têm alguns pesos agora, mas você pode simplesmente desligá-los e anular seu sinal. Uma vez que está completo, você pode fazer uma detecção máxima de maxmin. Há mais detalhes envolvidos, você pode me enviar um e-mail se quiser discutir como implementá-lo. Eu fiz um trabalho semelhante sobre isso antes. EDIT: Aqui estão algumas imagens que ilustram Daub-Tetra Denoiser: Estou longe de ser um especialista, mas aqui é o que eu faria: Você parece ter um sinal que varia lentamente sobreposto com as flutuações. Os picos que você procura são algumas flutuações mais fortes, então eu detectá-los usando isso. Seja X (T) seu sinal bruto. Pegue uma média móvel sobre um número adequado de amostras para criar Y (t) um transportador suave. Se você tiver sucesso X-Y deve ter uma média zero. Calcule o sigma de desvio padrão de X-Y. Você pode detectar seus picos quando (X-Y) (t) gt alfa vezes sigma, sendo o alfa tipicamente 2, 3, 4. Um overshoot ou um outhoot pode ser detectado especificamente removendo o valor absoluto e usando o teste apropriado. É isso que você está procurando user4749: Nome interessante: Ok. Então sim, sigma é o desvio padrão. Usamos isso como uma medida da amplitude de flutuação. Em seus dados, parece bastante constante ao longo do tempo, por isso indica que é a abordagem certa. A lógica é dizer que um pico é detectado quando é maior do que essas flutuações, de modo que somos robustos na detecção. Você faz MATLAB iw, nós teríamos seu sinal, poderíamos, pelo menos, marcar os picos com muita facilidade. Ndash Jean-Yves 2 de fevereiro 12 às 19:19 user4749 Basicamente, o que está acontecendo aqui, seu Y (t) será o sinal 39trend only39. Também significa média. Então, agora você está subtraindo a média do seu sinal, do sinal. Essa é a parte X (t) - Y (t). Então, agora, o que sobra é o seu barulho. Agora (supondo que seu barulho é Gaussiano), você toma seu std, ampsigmaamp. Agora, veja todos os valores de abs (X (t) - Y (t)) gt 4sigma. Por que isso basicamente significa em inglês, quisco 99.99 de todos os valores que provavelmente serão o ruído e deixará apenas valores não devido ao ruído. Ndash Mohammad Feb 3 12 às 5:21 A detecção de pico tem algumas aplicações, para sinais 1D ou multidimensionais. Aqui estão alguns exemplos que mostram a variação entre esses sinais e suas interpretações de um pico: Os cartazes originais Dados 1D Transformação de Hough de uma imagem, cada pico corresponde a uma linha na autocorrelação de imagem original de uma imagem, cada pico corresponde a uma Freqüência que revela uma correlação cruzada generalizada padrão padrão de uma imagem e um modelo, cada pico corresponde a uma ocorrência do modelo na imagem (podemos estar interessados ​​em detectar apenas o melhor pico ou vários picos) resultado da filtragem de uma imagem para Harris Cantos, cada pico corresponde a um canto na imagem original. Estas são definições e técnicas de detecção de picos que encontrei - certamente há outros que eu esqueci ou não sei, e espero que outras respostas os cubram. As técnicas de pré-processamento incluem alisamento e denoising. A resposta de Mohammads é sobre wavelets, e você pode ver vários usos deles na documentação do Mathematicas WaveletThreshold (de onde também tirei meus exemplos). Então você procura por maxima. Dependendo do seu aplicativo, você precisa apenas dos máximos globais (por exemplo, registro de imagem), alguns máximos locais (por exemplo, detecção de linha) ou muitos máximos locais (detecção de pontos-chave): isso pode ser feito iterativamente, procurando o valor mais alto nos dados, então Apagando uma região ao redor do pico selecionado, etc. até o valor restante mais alto estar abaixo de um limite. Alternativamente, você pode procurar os máximos locais dentro de um determinado tamanho de vizinhança e manter apenas os máximos locais cujos valores estão acima de um limite - alguns recomendam manter os máximos locais com base na distância ao resto dos máximos locais (o mais importante). o melhor). O arsenal também possui operações morfológicas: os máximos estendidos e a transformada de chapéu alto podem ser adequados. Veja os resultados de três dessas técnicas em uma imagem filtrada para os cantos Harris. Além disso, algumas aplicações tentam encontrar picos na resolução de subpíxeles. A interpolação, que pode ser específica da aplicação, é útil. Tanto quanto eu sei, não há bala de prata, e os dados dirão quais técnicas funcionam melhor. Será muito bom ter mais respostas, especialmente. Provenientes de outras disciplinas.

Comments

Popular Posts