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.