Les experts dans mon domaine sont capables de prédire la probabilité d'un événement (pic binaire en jaune) 30 minutes avant qu'il ne se produise . La fréquence est ici de 1 seconde, cette vue représente quelques heures de données, j'ai encerclé en noir où devrait se trouver un motif "malveillant" . Les interactions entre les dimensions existent, donc les dimensions ne peuvent pas être étudiées individuellement (ou le peuvent-elles?)
J'essaie de construire un modèle ML supervisé en utilisant Scikit Learn qui apprend un rythme normal et détecte quand les symptômes peuvent conduire à un pic . Je suis perdu pour quelle direction prendre. J'ai essayé la détection d'anomalies, mais cela ne fonctionne que pour la détection sur place, pas avant.
Comment pourrais-je détecter des modèles «malveillants» avant ces événements (en les prenant comme variables cibles)?
Je me réjouis de tout conseil sur les algorithmes ou le pipeline de traitement de données qui pourraient vous aider, merci :)
Réponses:
C'est un problème amusant. Il s'agit d'une série chronologique et à partir de cette série chronologique, vous souhaitez identifier le déclencheur d'un certain événement. C'est donc un problème de classification binaire. Sur la base des informations de la fenêtre spécifiée, un pic se produira-t-il? Oui ou non.
La première étape consiste à configurer votre base de données. Ce que vous aurez, c'est un ensemble d'instances (qui peuvent avoir un certain chevauchement, mais pour éviter les biais, il est préférable qu'elles soient dessinées indépendamment), puis pour chaque instance, un humain doit étiqueter s'il y a eu un pic ou s'il n'y en avait pas pointe.
Ensuite, vous devez identifier la fenêtre temporelle que vous souhaitez utiliser pour votre analyse de séries chronologiques. Vous avez fait cela et décidé que 30 minutes sont un bon début.
Maintenant, vous avez 6 formes d'onde dans une fenêtre de 30 minutes à partir desquelles vous pouvez extraire des données pour obtenir des informations sur votre classification. Vous pouvez utiliser les échantillons de données brutes en tant que fonctionnalités, mais cela est beaucoup trop de fonctionnalités et conduira à de mauvais résultats. Ainsi, vous avez besoin d'extraction de fonctionnalités , de réduction de dimensionnalité , de techniques.
Il existe un million de façons d'extraire des données de ces formes d'onde. Tout d'abord, demandez-vous, en tant qu'humain, quels sont les signes révélateurs que ces autres formes d'onde devraient avoir, ce qui signifierait un pic. Par exemple, dans les données sismiques, si vous voyez de l'agitation dans une forme d'onde provenant d'une ville voisine, vous devriez vous attendre à voir bientôt de l'agitation dans votre ville.
En général, j'aime extraire toutes les statistiques de base de mes formes d'onde. Obtenez la moyenne, l'écart-type, l'indice de fluctuation, etc. Obtenez tout ce que vous pensez pourrait aider. Vérifiez la corrélation de ces statistiques avec vos étiquettes. Plus il y a de corrélation, mieux c'est. Ensuite, il existe de très bonnes techniques pour extraire des informations de temps et de fréquence de votre série chronologique. Examinez la décomposition en mode enveloppe et la décomposition en mode empirique . J'ai utilisé la décomposition en mode empirique avec succès sur certaines données de séries chronologiques et obtenu des résultats bien meilleurs que ce à quoi je m'attendais.
Maintenant, même si votre espace de fonctionnalités est réduit, vous pouvez faire mieux! Vous pouvez appliquer certaines techniques de réduction de dimensionnalité telles que PCA ou LDA pour obtenir un espace de dimension inférieure qui peut mieux représenter vos données. Cela pourrait aider, aucune garantie.
Vous avez maintenant un petit ensemble de données avec des instances qui sont une concoction de Frankenstein qui représente vos 6 formes d'onde sur la fenêtre de 30 minutes. Vous êtes maintenant prêt à sélectionner votre classificateur. Vous voudrez un algorithme de classification binaire, heureusement, c'est le plus courant. Il y en a beaucoup à choisir. Comment choisir?
Combien d'instances avez-vous?
Ensuite, vous êtes prêt à utiliser une technique d'apprentissage en profondeur comme les réseaux de neurones , les réseaux de neurones à convolution 1D , les encodeurs automatiques empilés , etc.
Moins que ça !!!! Vous devez vous en tenir aux méthodes peu profondes. Découvrez les machines à vecteurs de support du noyau , les forêts aléatoires , les voisins les plus proches, etc.
Idée reçue courante: une méthode superficielle PEUT et VA mieux fonctionner qu'une technique d'apprentissage en profondeur si vous avez correctement sélectionné vos fonctionnalités. l'extraction de fonctionnalités est l'aspect le plus important d'une architecture d'apprentissage automatique.
Je souhaite utiliser la détection d'anomalies!
Cela fonctionnerait également et il existe de bonnes techniques pour ce faire. Cependant, la nature de la détection d'anomalies est d'apprendre la distribution du cas nominal. Vous alimenteriez donc votre algorithme toutes les instances de votre jeu de données qui n'ont pas entraîné de pic. À partir de cela, votre algorithme serait en mesure d'identifier quand une nouvelle instance est significativement différente de cette distribution nominale et il la signalera comme une anomalie. Cela signifierait qu'un pic surviendra dans votre contexte.
Check-out:
Apprentissage des ensembles de volume minimum http://www.stat.rice.edu/~cscott/pubs/minvol06jmlr.pdf
Détection d'anomalies avec fonctions de score basées sur les graphiques de voisin le plus proche https://arxiv.org/abs/0910.5461
Nouvelle statistique dans l'estimation de la valeur P pour la détection d'anomalies http://ieeexplore.ieee.org/document/6319713/
Vous pouvez également utiliser des techniques de détection d'anomalies plus rudimentaires, comme un test de rapport de vraisemblance généralisé. Mais c'est une sorte de vieille école.
la source
Vous devez effectuer l'extraction des fonctionnalités ou l'ingénierie des fonctionnalités pour créer des variables dans vos données d'entraînement qui "interceptent" les modèles que vous avez saisis, puis ont une variable cible disant "malveillance trouvée" ou "malveillance introuvable"
Prenons un exemple très simple: prédire s'il va pleuvoir. Vous pourriez trouver un bon prédicteur de pluie dans les 30 prochaines minutes qui vérifiait toutes les 30 minutes si 1. il devenait soudainement nuageux et 2. la pression barométrique chutait.
la source