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.
Respostas:
Penso que uma abordagem semelhante ao controle estatístico de processos , com gráficos de controle etc. pode ser útil aqui.
fonte
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/
fonte
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.
fonte