Especialistas da minha área são capazes de prever a probabilidade de um evento (pico binário em amarelo) 30 minutos antes da ocorrência . A frequência aqui é de 1 segundo; essa visão representa algumas horas de dados; circulei em preto onde deveria estar o padrão "malicioso" . Existem interações entre as dimensões; portanto, as dimensões não podem ser estudadas individualmente (ou podem?)
Estou tentando criar um modelo de ML supervisionado usando o Scikit Learn, que aprende um ritmo normal e detecta quando os sintomas podem levar a um pico . Estou perdido para qual direção tomar. Eu tentei a detecção de anomalias, mas funciona apenas para a detecção no local, não antes.
Como eu pude detectar padrões "maliciosos" antes desses eventos (tomando-os como variáveis de destino)?
Congratulo-me com qualquer conselho sobre quais algoritmos ou pipeline de processamento de dados podem ajudar, obrigado :)
Respostas:
Este é um problema divertido. Essa é uma série temporal e, a partir dessa série, você deseja identificar o gatilho de um determinado evento. Portanto, é um problema de classificação binária. Com base nas informações da janela especificada, ocorrerá um pico? Sim ou não.
O primeiro passo é configurar seu banco de dados. O que você terá é um conjunto de instâncias (que podem ter alguma sobreposição, mas para evitar distorções, é melhor que elas sejam desenhadas independentemente) e, em seguida, para cada instância, um humano precisa rotular se houve um pico ou se não houve um Espinho.
Então você precisa identificar a janela de tempo que deseja usar para a análise de séries temporais. Você fez isso e decidiu que 30 minutos é um bom começo.
Agora, você tem 6 formas de onda em uma janela de 30 minutos a partir da qual é possível extrair dados para obter informações sobre sua classificação. Você pode usar as amostras de dados brutos como seus recursos, mas isso é MUITO MUITO característico e levará a resultados ruins. Assim, você precisa de alguma extração de recursos , redução de dimensionalidade , técnicas.
Existem milhões de maneiras de extrair dados dessas formas de onda. Primeiro, pergunte-se, como humano, quais são os sinais reveladores que essas outras formas de onda deveriam ter, o que significaria um pico. Por exemplo, em dados sísmicos, se você vê agitação em uma forma de onda de uma cidade vizinha, deve esperar ver agitação em sua cidade em breve.
Em geral, eu gosto de extrair todas as estatísticas básicas das minhas formas de onda. Obtenha a média, desvio padrão, índice de flutuação, etc. Obtenha o que você acha que pode ajudar. Verifique como essas estatísticas se correlacionam com seus marcadores. Quanto mais correlação, melhor elas podem ser. Depois, existem algumas técnicas muito boas para extrair informações de tempo e frequência de suas séries temporais. Observe a decomposição no modo envelope e a decomposição no modo empírico . Usei a decomposição do modo empírico com êxito em alguns dados de séries temporais e obtive resultados muito melhores do que eu esperava.
Agora, mesmo que você tenha seu espaço reduzido, você pode fazer melhor! Você pode aplicar algumas técnicas de redução de dimensionalidade, como PCA ou LDA, para obter um espaço dimensional menor que possa representar melhor seus dados. Isso pode ajudar, sem garantias.
Agora você tem um pequeno conjunto de dados com instâncias que são uma mistura de Frankenstein que representa suas 6 formas de onda na janela de 30 minutos. Agora você está pronto para selecionar seu classificador. Você desejará um algoritmo de classificação binária, felizmente esse é o mais comum. Há muitos por onde escolher. Como escolher?
Quantas instâncias você possui?
Então está tudo pronto para usar uma técnica de aprendizagem profunda tais como redes neurais , 1D redes neurais convolucionais , autoencodders empilhados , etc ...
Menos que isso !!!! Você deve ficar com métodos rasos. Confira as máquinas de vetores de suporte ao kernel , florestas aleatórias , k-vizinhos mais próximos etc.
Equívoco comum: um método superficial PODE e TERÁ um desempenho melhor do que uma técnica de aprendizado profundo se você tiver selecionado corretamente seus recursos. a extração de recursos é o aspecto mais importante de uma arquitetura de aprendizado de máquina.
Eu quero usar a detecção de anomalias!
Isso também funcionaria e existem algumas boas técnicas que fazem isso. No entanto, a natureza da detecção de anomalias é aprender a distribuição do caso nominal. Portanto, você alimentaria seu algoritmo em todas as instâncias do conjunto de dados que não resultaram em um pico. A partir disso, seu algoritmo seria capaz de identificar quando uma instância nova é significativamente diferente dessa distribuição nominal e a sinalizará como uma anomalia. Isso significa que um pico ocorrerá no seu contexto.
Verificação de saída:
Aprendendo conjuntos de volumes mínimos http://www.stat.rice.edu/~cscott/pubs/minvol06jmlr.pdf
Detecção de anomalias com funções de pontuação baseadas em gráficos de vizinhos mais próximos https://arxiv.org/abs/0910.5461
Nova estatística na estimativa do valor-P para detecção de anomalias http://ieeexplore.ieee.org/document/6319713/
Você também pode usar técnicas de detecção de anomalias mais rudimentares, como um teste de razão de verossimilhança generalizada. Mas isso é meio que antiquado.
fonte
Você precisa fazer extração de recursos ou engenharia de recursos para criar variáveis em seus dados de treinamento que "capturem" os padrões em que você inseriu e, em seguida, tenha uma variável de destino dizendo "malícia encontrada" ou "malícia encontrada não encontrada"
Tome um exemplo muito simples: prever se vai chover. Nos próximos 30 minutos, é possível prever um bom indicador de chuva razoavelmente bom, que verifica a cada 30 minutos se 1. de repente ficou nublado e 2. a pressão barométrica caiu.
fonte