[PYTHON] Introduction à la détection des anomalies 1 principes de base

Aidemy 2020/11/10

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! Ceci est le premier article de l'introduction à la détection. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ À propos de la détection d'anomalies ・ À propos de la méthode hôtelière et de la distance Maharanobis ・ À propos de la méthode simple de Bayes

À propos de la détection d'anomalies

Qu'est-ce que la détection d'anomalies?

-__ Détection d'anomalies ___ est, comme son nom l'indique, __ des données anormales sont capturées __. Plus précisément, il est largement utilisé pour détecter des anomalies chez des patients dans le domaine médical et pour détecter des défaillances du système. ・ Dans cette unité, nous visons à __ "Comprendre la théorie de la détection d'anomalies" __ et __ "Implémentation d'un système simple de détection d'anomalies" __.

Modèle anormal

・ Regardons les modèles d '«anomalies» à détecter.

Outlier

-Le premier est __ "valeur aberrante" __. Bien que cela soit apparu à plusieurs reprises dans le passé, les valeurs aberrantes sont __ "des valeurs très éloignées des autres ensembles" __. Il est facile de comprendre s'il est illustré.

・ Figure![Capture d'écran 2020-11-02 17.27.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/2755124d-bcd2-2987- 4a35-ccbd77acea87.png)

-Le problème de la détection des valeurs aberrantes est appelé __ "détection des valeurs aberrantes" __. Les détails seront traités au chapitre 2.

Point de changement

-Le second est __ "point de changement" __. Le point de changement est __ "les choses dont les valeurs se comportent différemment" __. Comme le montre la figure ci-dessous, si la valeur __ augmente brusquement à partir d'un certain point, ce point est le point de changement.

・ Figure スクリーンショット 2020-11-02 17.31.12.png

-Le problème de détection d'un point de changement est appelé __ "détection de changement (point)" __ ou __ "détection de pièce anormale" __. Les détails seront traités au chapitre 3.

Indicateurs de détection d'anomalies

-__ "Anormalité" __ est une indication quantitative de la façon dont la valeur __ est anormale. Fondamentalement, on peut dire que plus le degré d'anomalie est élevé, plus la valeur est anormale. -Aussi, le point __ qui est la frontière entre __ anormal et normal est appelé __ "seuil" __. -Tout ce qui doit être fait dans la détection d'anomalie ultérieure est le flux de __ "définition du degré d'anomalie → détermination du seuil" __. Lors de la détermination de ce seuil, __ "quelle probabilité est considérée comme anormale" __ est souvent définie, et cette probabilité est appelée __ "taux d'erreur de déclaration" __.

・ __ "(Nombre d'échantillons qui sont réellement normaux) / (Nombre d'échantillons qui sont réellement normaux)" __ "Taux de réponse correct (précision d'échantillonnage normale) ) »__, et ce qui est représenté par « taux normal 1 » est __ taux de faux rapport __. En d'autres termes, le taux de fausses alarmes est __ "le rapport entre ceux qui sont réellement normaux et ceux qui ont été jugés anormaux" __. -Ces valeurs sont également utilisées pour l'évaluation de l'exactitude du détecteur.

・ Code pour calculer le taux de fausses alarmes スクリーンショット 2020-11-02 18.29.37.png

Méthode hôtelière

Quelle est la méthode hôtelière?

-__ La méthode hôtelière__ est l'une des méthodes de détection des valeurs aberrantes __. Comme mentionné ci-dessus, le degré d'anomalie et le seuil sont définis. -Les données à traiter ne sont effectivement appliquées que lorsque les conditions de __ "généré à partir d'une seule distribution normale" et "presque aucune valeur anormale" __ sont satisfaites.

・ Le flux de la méthode hôtelière est le suivant. ① Définissez vous-même le taux de faux rapport .__ __ et calculez le __ seuil __ en fonction de celui-ci. ② Calculez la __ valeur moyenne __ et la __ matrice de variation __ des valeurs que l'on peut qualifier de normales. ③. Calculez la __ anomalie __ des données de test, et si elle dépasse le __ seuil, jugez-la comme anormale __.

・ Ce qui précède est le flux, mais __ les données sont considérées comme presque normales __. En outre, on peut dire que la méthode hôtelière est __ l'apprentissage sans enseignant __.

Distance de Maharanobis

・ Dans le flux de la méthode hôtelière ③, le degré d'anomalie est calculé, mais l'indice utilisé à ce moment est __ "Maharanobis distance" __. Cette distance est __ "distance entre une certaine donnée et la moyenne de l'ensemble des données" __. -Lors du calcul de la distance normale, __ "Distance euclidienne" __ est utilisé, mais pour le degré d'anomalie __ "La valeur change fortement en fonction de la taille de la dispersion (échelle)" "La corrélation entre les variables ne peut pas être reflétée" _ __ Ne peut pas être utilisé à cause de _. -D'autre part, la distance de Maharanobis permet de considérer la variance __ en __normalisant __ avec la __ matrice de covariance inverse __. Plus précisément, la dispersion est considérée en renforçant l'influence de la petite dispersion et en affaiblissant l'influence de la grande dispersion. -En outre, vous pouvez corriger la corrélation entre chaque quantité de caractéristiques par normalisation __.

-Le code est le suivant (les détails seront décrits plus loin pour faire la même chose en ②).

スクリーンショット 2020-11-02 21.01.39.png

① Définissez vous-même le taux de fausse alarme et calculez le seuil en fonction de celui-ci.

・ À partir de là, nous mettrons en œuvre la méthode hôtelière. __ La détection des valeurs aberrantes par la méthode hôtelière __ est appelée __ "méthode du carré en T" __. ・ Dans un premier temps, __le seuil est calculé __, mais il est nécessaire de définir le __ "taux d'erreurs de déclaration" requis pour le calcul. Si le taux de fausses alarmes est réglé à un niveau élevé, davantage d'anomalies peuvent être détectées, et s'il est réglé à un niveau bas, plus de données normales peuvent être laissées. De cette façon, il y a un compromis entre l'élimination de __ données anormales et la conservation de données normales __, il est donc important de définir la valeur en fonction du cas. En général, des valeurs telles que 0,05 et 0,01 sont utilisées.

-Lorsque des informations incorrectes sont définies et que la quantité de données est suffisante, le seuil est défini à l'aide de la méthode __ "χ (chi) square test" __. -En particulier, lorsque le taux de fausses alarmes est réglé à 0,05, ce test teste comme __ "C'est anormal car c'est une valeur rare qui se produit à moins de 0,05% dans des conditions normales" __.

-L'implémentation se fait avec __ "st.chi2.ppf ()" __. Passez __ "1-False rate" __ comme premier argument et __ numéro de dimension (nombre de variables) __ comme deuxième argument.

・ Code (l'anomalie a est calculée par la distance Maharanobis, mais omise cette fois) スクリーンショット 2020-11-02 21.35.27.png

②. Calculez la valeur moyenne et la matrice de covariance des valeurs normales

・ Afin de calculer __outlier __ en ③, il est nécessaire d'obtenir la distance Maharanobis mentionnée ci-dessus, donc __ "valeur moyenne" __ et __ "matrice de covariance" nécessaires pour ce calcul. Demander __. ・ La moyenne est calculée par __np.mean (données, axe = 0) __. (Calculé pour chaque colonne avec axe = 0) -La matrice de co-distribution des données est calculée par __np.cov (data.T) __.

・ Code![Capture d'écran 2020-11-02 21.51.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/42a59e29-060e-420e- f9bf-a79bd4ffdcdf.png)

③ Calculez le degré d'anomalie des données de test, et jugez qu'il est anormal s'il dépasse le seuil.

-Enfin, mettez __data __ (x), mean __ (moyenne) et __ matrice de covariance inverse __ ( np.linalg.pinv (cov) __) dans __distance.mahalanobis () __ Il peut être calculé en le passant. ・ Comparez ce résultat avec le __seuil calculé en ① pour détecter les anomalies.

・ Code![Capture d'écran 2020-11-02 22.07.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/4fec9fec-1ca8-52cb- 0fa2-01002f1a9729.png)

Pratique de la méthode hôtelière

・ Exécutez les étapes ① à ③ ci-dessus. Le code est comme suit.

スクリーンショット 2020-11-02 23.20.46.png

・ Résultat (le rouge est en panne (anormal), le bleu est normal) スクリーンショット 2020-11-02 23.21.25.png

Méthode simple de Bayes

Quelle est la méthode simple de Bayes?

-Les méthodes de détection d'anomalies dont la méthode hôtelière présentent l'inconvénient de __ "Lorsque le nombre de variables augmente (le nombre de dimensions augmente), la quantité de calcul augmente et cela devient trop compliqué" __. Pour résoudre ce problème, __ "Méthode de Bayes simple" __, qui est une méthode __ qui transforme le problème de plusieurs variables en un problème d'une variable (une dimension). -L'idée de base de la méthode simple de Bayes est __ "Comme il n'y a pas de corrélation entre les variables, la probabilité que plusieurs événements se produisent est exprimée par le produit de chaque probabilité" __. Par exemple, dans le problème de lancer des pièces deux fois, la probabilité que la table apparaisse les deux fois est exprimée par "1/2 * 1/2". En appliquant cela, la probabilité de savoir si les données sont anormales ou normales peut être obtenue par le produit de la probabilité d'anomalie (pondérée) de chaque variable. -C'est-à-dire que, dans la méthode simple de Bayes, une anomalie peut être calculée par le produit interne des données et du poids (en définissant la dimension sur 1). De plus, le __threshold n'est pas calculé comme la méthode __hotelling, mais est calculé en __optimizing à l'aide des données de vérification. -La condition d'utilisation de la méthode Bayes simple est __ "La variable de données doit être un entier de 0 ou plus" __. ・ Le flux est le suivant. ① Calculez le poids à partir des données d'entraînement par la méthode Bayes __ ② Optimiser le __seuil à partir des données d'évaluation __ ③ Calculez le degré d'anomalie et comparez-le au seuil

-Pour le flux ci-dessus, au chapitre 2 et plus tard, nous examinerons le problème que la méthode simple de Bayes est utilisée __ "Détection de valeurs anormales dans les documents" __.

Connaissance préalable de la méthode simple de Bayes

-Non limité à la détection d'anomalies, dans le traitement des données, il y a une idée que __ "Lorsque l'on considère les données comme un vecteur, si le produit interne avec un vecteur approprié est pris, une valeur numérique représentant les caractéristiques des données peut être obtenue" __ .. Le "vecteur approprié" à ce moment est appelé __ "vecteur de poids" __. -Même avec la méthode simple de Bayes, lors de la recherche d'une valeur aberrante dans (3), on peut dire que la valeur aberrante peut être facilement trouvée en connaissant le vecteur de poids, puis en prenant le produit interne du vecteur de poids. Par conséquent, __① calcule ce vecteur de poids __.

・ En ce qui concerne la "détection de valeurs anormales des documents" effectuée cette fois, en considérant quelque chose comme le jugement de spam du courrier, une analyse morphologique du courrier (document) est effectuée, le nombre d'apparitions de données pouvant être utilisées pour l'identification comme la nomenclature est étudié, et cela et le spam Passez l'étiquette indiquant s'il faut ou non créer le poids. (C'est __ l'apprentissage enseigné __) -Après cela, le document nouvellement passé est analysé morphologiquement de la même manière, et la valeur anormale est calculée en multipliant le nombre d'occurrences et le poids créé.

-De plus, les données de détection des valeurs anormales dans un document indiquent la fréquence d'apparition comme __ "expression d'ensachage de mots" __. Plus précisément, consultez le code ci-dessous. Cela signifie que «hoge» et «foo» ne sont pas apparus, et «bar», «po» et «do» sont apparus respectivement 3, 4 et 1 fois.

スクリーンショット 2020-11-03 14.19.17.png

① Calculez le poids à partir des données d'entraînement par la méthode Bayes

-__ Calcul du poids __ est __ "np" lorsque le poids des données normales (X0) est "w0" et le poids des données anormales (X1) est "w1" dans les données d'entraînement "X_train". Il peut être obtenu par ".log (w1 / w0)" __. -Par conséquent, il est nécessaire de trouver respectivement __w0 et w1. __ "(Nombre total d'apparitions de chaque mot dans toutes les données normales) ÷ (Nombre total de mots d'apparence dans toutes les données normales)" __, mais en prenant le logarithme dans np.log, le poids ne doit pas être 0 , __ Ajoutez "alpha = 1" __. Cela s'appelle __ "monter" __. -Le nombre total d'occurrences de chaque mot est calculé par __ "np.sum (X0, axis = 0)" __ (pour les données normales). Le nombre total de mots est calculé par __ "np.sum (X0)" __.

・ Code![Capture d'écran 2020-11-03 15.00.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/aaae2407-1169-6915- 8c1d-5e475662ef9e.png)

・ Résultat (seulement une partie)![Capture d'écran 2020-11-03 15.01.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/d12ccefe -4b34-d290-260d-60cc82c2744f.png)

② Optimiser le seuil à partir des données d'évaluation

・ Le calcul du poids de ① a été effectué à l'aide des données d'apprentissage (X_train), mais l'optimisation du seuil est réalisée à l'aide des données d'évaluation __ "X_valid" __. -Optimiser le seuil avec __ "metrics.roc_curve ()" __. L'étiquette des données d'évaluation __ "y_valid" __ peut être passée au premier argument, et le degré d'anomalie des données d'évaluation __ peut être passé au deuxième argument. -Le degré d'anomalie des données d'évaluation sera décrit dans la section suivante, mais il peut être calculé par __ "np.dot ()" __ car le produit intérieur des données et le poids peuvent être pris comme décrit ci-dessus. -De plus, "metrics.roc_curve ()" renvoie trois variables, __ "faux taux positif", "vrai taux positif" et "seuil candidat" __, donc les variables __ "fpr" "tpr" "thr_arr" _ Stocker dans _. -Pour ces trois variables, le seuil peut être calculé en définissant __ "thr_arr [(tpr-fpr) .argmax ()]" __.

・ Code![Capture d'écran 2020-11-03 16.14.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/83c470ec-7235-3cd6- a7f0-97573bd33d21.png)

③ Calculez le degré d'anomalie et comparez-le au seuil

-Enfin, comme mentionné dans la section précédente, le degré d'anomalie est calculé par __ "np.dot ()" __ et comparé au seuil. (Code omis)

Sommaire

-Les modèles anormaux incluent __ "valeurs aberrantes" et "points de changement" . Détecter ceci est une __ détection d'anomalie. -Une des méthodes pour détecter les valeurs aberrantes est __ "méthode hotelling" __. Dans la méthode hôtelière, le __seuil __, qui est la limite entre «anormal ou normal», est d'abord déterminé, puis le degré d'anomalie est calculé à partir de la __moyenne des données et de la matrice de covariance (inverse) __. En comparant ce seuil au degré d'anomalie, on détermine s'il est anormal ou normal. -De plus, comme cette méthode ne peut pas être utilisée lorsque les données sont multidimensionnelles, la détection d'anomalies est rendue possible en les traitant comme des données unidimensionnelles en utilisant __ "méthode simple Bayes" __. -Dans la méthode simple de Bayes, le degré d'anomalie est calculé en calculant le vecteur __weight __, et en calculant le produit interne de ces données et __, et en déterminant la valeur seuil et en comparant les deux, il est anormal. Déterminez si c'est normal ou normal.

Cette fois, c'est fini. Merci d'avoir lu jusqu'à la fin.

Recommended Posts

Introduction à la détection des anomalies 1 principes de base
Détection d'anomalies Introduction 2 Détection des valeurs aberrantes
Introduction à la détection des anomalies 3 Détection des points de changement
Une introduction légère à la détection d'objets
Introduction à la détection des anomalies et résumé des méthodes
Introduction à MQTT (Introduction)
Introduction à Scrapy (3)
Premiers pas avec Supervisor
Introduction à Tkinter 1: Introduction
Introduction à PyQt
Introduction à Scrapy (2)
[Linux] Introduction à Linux
Introduction à Scrapy (4)
Introduction à discord.py (2)
[Introduction au Data Scientist] Bases de Python ♬
[Cx_Oracle Primer] (Partie 3) Bases de la navigation dans les tableaux
Introduction à Lightning Pytorch
Premiers pas avec le Web Scraping
Introduction aux baies non paramétriques
Introduction à EV3 / MicroPython
Introduction au langage Python
Introduction à la reconnaissance d'image TensorFlow
Introduction à OpenCV (python) - (2)
Introduction à PyQt4 Partie 1
Introduction à l'injection de dépendances
Introduction à Private Chainer
PyTorch Super Introduction Principes de base de PyTorch
Introduction à l'apprentissage automatique
[Introduction à cx_Oracle] (Partie 11) Bases de l'exécution PL / SQL
AOJ Introduction à la programmation Sujet 1, Sujet 2, Sujet 3, Sujet 4
Introduction au module de papier électronique
Introduction à la méthode Monte Carlo
[Mémorandum d'apprentissage] Introduction à vim
Introduction à PyTorch (1) Différenciation automatique
opencv-python Introduction au traitement d'image
Introduction à Python Django (2) Win
Introduction à l'écriture de Cython [Notes]
Introduction à Private TensorFlow
J'ai essayé d'implémenter la détection d'anomalies par apprentissage de structure clairsemée
Une introduction à l'apprentissage automatique
[Introduction à cx_Oracle] Présentation de cx_Oracle
XPath Basics (2) - Comment écrire XPath
Une super introduction à Linux
AOJ Introduction à la programmation Sujet n ° 7, Sujet n ° 8
Introduction à RDB avec sqlalchemy Ⅰ
[Introduction au système] Retracement de Fibonacci ♬
Introduction à l'optimisation non linéaire (I)
Introduction à la communication série [Python]
Flux de base de détection d'anomalies
AOJ Introduction à la programmation Sujet n ° 5, Sujet n ° 6
[Introduction to Data Scientists] Bases de Python ♬ Fonctions et classes
Introduction au Deep Learning ~ Règles d'apprentissage ~
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Une introduction à la programmation Python
[Introduction à cx_Oracle] (8e) version de cx_Oracle 8.0
Introduction à discord.py (3) Utilisation de la voix