Detecção de anomalia de séries temporais com Python


9

Preciso implementar a detecção de anomalias em vários conjuntos de dados de séries temporais. Eu nunca fiz isso antes e estava esperando por alguns conselhos. Estou muito confortável com o python, então prefiro que a solução seja implementada (a maior parte do meu código é python para outras partes do meu trabalho).

Descrição dos dados: são dados de séries temporais mensais que apenas começaram a ser coletados nos últimos 2 anos (ou seja, apenas 24 a 36 períodos). Essencialmente, existem várias métricas sendo monitoradas mensalmente para vários clientes.

time_period    client    metric    score
01-2013        client1   metric1   100
02-2013        client1   metric1   119
01-2013        client2   metric1   50
02-2013        client2   metric2   500
...

Aqui está o que estou pensando: coloque dados em um dataframe (pandas) e calcule uma média móvel de 6 meses para cada par cliente / métrica. Se o valor do período atual exceder algum limite com base na média de 6 meses, aumente o sinalizador. O problema parece bastante simples. Eu só quero ter certeza de que estou adotando uma abordagem sólida.

Qualquer conselho para aprofundar um pouco essa idéia seria muito apreciado. Eu sei que a pergunta é um pouco abstrata, e peço desculpas por isso.


Eu não sei o caminho python, mas esta questão está cheio de ideias sobre as abordagens gerais: stats.stackexchange.com/questions/26688/...
— rapaio

pypi.org/project/anomaly-detection Isso é construído na biblioteca para detecção de anomalias em python, que é semelhante à detecção de anomalias do twitter. Como o código de detecção de anomalias do twitter está na linguagem R. Seu problema é anomalia contextual. Auto.arima model too
— saravanan saminathan

Respostas:


1

Penso que uma abordagem semelhante ao controle estatístico de processos , com gráficos de controle etc. pode ser útil aqui.


Eu vou ler isso. Esse método é bom para séries temporais com pequenas quantidades de dados (ou seja, 24 meses)?
— Eric Miller

terminou de ler a maior parte. De acordo com esse método, devo calcular o terceiro desvio padrão para as séries temporais e traçar uma linha com esses limites. Se um valor exceder esses limites, sinalize-o. Este é um método que eu havia considerado.
— Eric Miller

1

Existem muitas opções para a detecção de anomalias, desde um desvio padrão usando a função de desvio padrão do Pandas até um método bayesiano e muitos métodos de aprendizado de máquina, como: clustering, SVM, processo Gaussian, redes neurais.

Dê uma olhada neste tutorial: https://www.datascience.com/blog/python-anomaly-detection

De uma perspectiva bayesiana, recomendo o Profeta do Facebook. Dá resultados muito avançados sem a necessidade de ser um especialista em séries temporais. Possui opções para trabalhar meses, dias, etc., e "intervalos de incerteza" ajudam com anomalias.

Por fim, eu recomendo este blog do Uber sobre o uso de redes neurais (LSTM) para detecção de anomalias; ele tem informações muito úteis: https://eng.uber.com/neural-networks/


0

Se você deseja assumir que seu conjunto de dados é normalmente distribuído, é possível estimar quantis dessa distribuição e ver se ele fica fora, por exemplo, 95%, 80%, etc. Não estou muito familiarizado com as bibliotecas Python, mas tenho certeza de que já existem funções criadas para isso.


Há uma tendência de alta para a maioria dos clientes. Não sei se você poderia chamar os dados aleatoriamente.
— Eric Miller

2
Então não neste caso. Acredito que o método abaixo de mim e o seu funcionariam bem nessa situação. Eu fiz algo parecido com isso antes: faça uma média móvel do período X contínuo, subtraia o valor da métrica atual da média móvel. Encontre os limites do desvio padrão (ou use uma entrada subjetiva, se você souber neste cenário) desses resíduos e qualquer coisa acima ou abaixo desses limites pode ser considerada anomalia. Esse método funcionaria bem se um cliente subitamente visse um aumento na pontuação.
— Kevin Pei
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.