Cet article a été publié en tant que jour 6 du Calendrier de l'Avent Cisco 2019 entre Cisco Systems GK.
Sept ans se sont écoulés depuis que l'équipe SuperVision de l'Université de Toronto, au Canada, a remporté le Défi de reconnaissance visuelle à grande échelle Image Net (ILSVRC) 2012 en 2012. À l'heure actuelle, en utilisant un modèle utilisant l'apprentissage profond, la modélisation dans l'apprentissage automatique et l'apprentissage profond est souvent effectuée dans le troisième boom de l'IA, et de nos jours, il est de notoriété publique que l'IA est utilisée dans l'apprentissage automatique et l'apprentissage profond. Il est devenu.
Cependant, selon une enquête du ministère de l'Intérieur et de la Communication publiée en 2017, seules 14,1% des entreprises ont effectivement introduit des solutions d'IA et 22,8% envisagent de les introduire. Le nombre d'entreprises est de 36,9%, y compris la phase d'examen. (Citation: État et calendrier de l'introduction de l'IA / IoT Ministère des affaires intérieures et des communications)
Il existe de nombreux services open source liés à l'apprentissage automatique, et ils sont faciles à utiliser à petite échelle. En attendant, au cours des deux dernières années, j'ai écrit un exemple de la façon d'utiliser facilement l'apprentissage automatique. Article 2017: j'ai essayé d'apprendre automatiquement les informations de localisation obtenues à l'aide de l'API Article de 2018: collecte de données sur les enseignants en apprentissage automatique à l'aide d'outils de collaboration
Par conséquent, cette fois, je voudrais présenter un exemple qui facilite la modélisation de l'apprentissage automatique en utilisant les données chronologiques qui seront le plus acquises sous forme de données. Parmi eux, nous nous concentrerons sur la manière dont l'apprentissage automatique est appliqué dans le domaine de la détection d'anomalies.
Les données chronologiques font référence à toutes les données observées au fil du temps. Et l'ordre dans lequel ils sont observés est significatif. En ce qui concerne les données chronologiques relatives aux produits Cisco, les données Syslog sont également incluses dans les données chronologiques et Stealthwatch Il existe une grande variété de données telles que les données Flow de .html) et les données de destination de connexion de Cloudlock.
Lors de l'application de données de séries chronologiques à l'apprentissage automatique / l'apprentissage en profondeur, le flux suivant est souvent utilisé. Dans la méthode basée sur la similitude, comment extraire la quantité de fonctionnalités, définir la taille de la fenêtre des données de la série chronologique (comment diviser l'ensemble de séries temporelles où la quantité de fonctionnalités est susceptible d'apparaître) et comment modéliser dans la méthode d'apprentissage automatique ultérieure. La précision variera considérablement en fonction de votre choix.
Dans la méthode basée sur un modèle, la méthode utilisée pour l'analyse des séries chronologiques métriques est d'abord mise en correspondance. Les méthodes utilisées pour l'analyse des séries chronologiques métriques ici font référence aux modèles de Markov cachés, aux modèles ARMA, aux modèles VAR, aux modèles SARIMA, etc. C'est un modèle qui représente la transition des données en considérant la transition d'état comme un changement dans le temps. Étant donné que chaque modèle a des paramètres dans ces méthodes, les paramètres obtenus sont utilisés et appliqués à la méthode d'apprentissage automatique.
Figure 1: Données chronologiques de l'appliance de sécurité Web Cisco Figure 2: Données de séries chronologiques Cisco CloudlockCette fois, nous cherchons à "trouver des données anormales en les comparant à des données normales" pour les données de séries chronologiques obtenues sous forme de données numériques.
Je reconnais que la détection des anomalies est un domaine très difficile où s'alignent des formules mathématiques, telles que les statistiques, la théorie des probabilités et la théorie de l'optimisation, mais il existe de nombreux domaines qui peuvent être appliqués. --Trouver des signes anormaux en usine
Dans le domaine de la détection d'anomalies, de nombreuses méthodes d'apprentissage automatique ont été proposées pour leur application, mais en voici quelques-unes.
Dans le domaine de la détection des anomalies, je reconnais personnellement qu'il y a deux points importants. L'idée est de mettre l'accent sur la précision (en particulier l'idée de réduire les faux négatifs) et l'idée de mettre l'accent sur la vitesse de détection. C'est une idée importante car elle affecte également la manière dont l'opération réelle est effectuée.
L'idée de mettre l'accent sur la précision est particulièrement courante dans le domaine de la détection des pannes. C'est parce que nous voulons éviter `` '', qui est en fait cassé, mais qui est prédit "non cassé". En termes d'apprentissage automatique, l'idée est d'augmenter le rappel.
(Référence) Quel est le taux de rappel? Lors de l'examen de la précision, tenez compte de la matrice mixte suivante. Figure 3: matrice mixte
Et le `` rappel '' est la précision exprimée par la formule suivante. En d'autres termes, le taux de rappel est un indice de "combien le modèle peut juger comme anormal alors qu'il est réellement anormal".
En réalité, il est difficile de fonctionner sans implication humaine pour déterminer si des équipements tels que des usines sont en panne. Cependant, si le nombre de faux négatifs est important, il est prévu que l'opération ne changera pas avant et après l'introduction en raison de la faible confiance dans les applications d'IA, et le fardeau de l'administrateur ne sera pas réduit. Pour éviter cette situation, des applications d'IA qui réduisent le nombre de faux négatifs et réduisent le fardeau de la détection des pannes sont attendues.
Lorsque vous utilisez l'apprentissage automatique / l'apprentissage profond, vous devez également tenir compte du coût de calcul. Quelle que soit la précision du modèle, si la détection prend beaucoup de temps, il est inutile de déployer une application d'IA.
Par exemple, une application d'IA de sécurité. Peu importe la façon dont le trafic inhabituel est détecté, s'il est détecté le lendemain, cela n'a aucun sens une fois que les informations importantes ont déjà été volées. En d'autres termes, à moins que vous ne puissiez dépenser beaucoup d'argent sur une plate-forme telle qu'un serveur, vous devez prendre en compte le coût de calcul du modèle et mettre l'accent sur la vitesse de détection.
Les techniques d'apprentissage automatique à faibles coûts de calcul incluent des techniques telles que le classificateur Simple Bayes et la méthode k-means / k-medoids. Je n'expliquerai pas la méthode détaillée ici, mais il existe de nombreuses autres méthodes utilisées pour la détection d'anomalies.
Ici, je voudrais considérer un exemple d'application. Les données à utiliser sont supposées être des données de séries chronologiques bidimensionnelles telles que le nombre de flux dans Stealthwatch. Nous supposons les données parce que nous voulons être aussi généraux que possible. Figure 4: Données de séries chronologiques de Cisco Stealthwatch
À partir des données de série chronologique ci-dessus, les données pour la taille de la fenêtre sont extraites sous la forme d'un modèle et comparées au modèle à l'état normal.
Tout d'abord, en ce qui concerne l'extraction de motifs, ce qu'il faut considérer cette fois, c'est que le nombre de flux devient rarement 0, et on considère que le trafic est toujours fluide, surtout à des intervalles de plusieurs minutes à plusieurs heures, qui est la taille de la fenêtre. est. Si vous savez que le nombre sera 0, vous pouvez le séparer lorsque le nombre est 0, mais si le nombre n'est pas 0, vous devez envisager d'extraire le motif.
Si la taille de la fenêtre est petite, on s'attend à ce que le fuseau horaire et la largeur de temps lorsque le même modèle apparaît varient en fonction de la situation. Par exemple, nous savons que les employés regardent YouTube pendant les pauses déjeuner, donc même si nous savons que le nombre de flux augmentera fortement entre 12h00 et 13h00 et qu'il sera passé 13h00, nous pensons que la durée maximale variera d'un jour à l'autre. (Je ne sais pas si cela prendra le maximum à 12h31 ou le maximum à 12h36).
De cette manière, lorsque les "formes sont similaires" quelle que soit la largeur de temps, le degré de similitude est calculé par la méthode appelée Dynamic Time Warping --DTW. Avec cette méthode, il est possible de faire un jugement même si les longueurs de données ne sont pas uniformes. En d'autres termes, il est possible de juger même si la largeur de temps est différente.
En revanche, si l'écart par rapport à l'axe des temps est considéré comme important, utilisez la distance euclidienne. Par exemple, la différence du nombre de flux pendant la journée et la nuit lorsque la taille de la fenêtre est grande.
Maintenant, implémentons réellement DTW en Python. La planification dynamique est utilisée pour mettre en œuvre DTW. De plus, lors de la mesure de la distance entre deux points, il y a des cas où elle est mesurée avec une valeur absolue et des cas où elle est mesurée avec une distance euclidienne, donc elle est séparée par l'argument de `` méthode ''. Le premier et le second arguments représentent deux données de série chronologique séparées par la taille de la fenêtre. Lors de la comparaison avec des données de séries chronologiques pendant plusieurs jours, cette fonction est appelée plusieurs fois.
def dtw(wave_x, wave_y, method="abs"):
d = np.zeros([len(wave_x)+1, len(wave_y)+1])
d[:] = np.inf
d[0, 0] = 0
if method = "euclid":
for i in range(1, d.shape[0]):
for j in range(1, d.shape[1]):
cost = np.sqrt((wave_x[i-1] - wave_y[j-1])**2)
cost = (wave_x[i-1] - wave_y[j-1])
row.append(cost)
d[i, j] = cost + min(d[i-1, j], d[i, j-1], d[i-1, j-1])
else:
for i in range(1, d.shape[0]):
for j in range(1, d.shape[1]):
cost = np.abs(wave_x[i-1] - wave_y[j-1])
row.append(cost)
d[i, j] = cost + min(d[i-1, j], d[i, j-1], d[i-1, j-1])
elapsed_time = time.time() - start_time
return d[-1][-1], d, matrix
En calculant ce DTW plusieurs fois, une matrice de distance entre plusieurs données chronologiques peut être obtenue. En utilisant cette matrice de distance, considérons la classification par la méthode des k-médoïdes. Cette fois, nous fixons le nombre de clusters à 2 car nous visons à classer deux modèles de «normal / anormal».
self.n_cluster = 2
La mise en œuvre de la méthode k-medoids est la suivante. Puisque la méthode k-medoids n'est pas implémentée dans scikit-learn, implémentez-la comme suit. Remplacez la matrice de distance par la partie `` D_matrix ''.
class KMedoids():
def __init__(self, max_iter=300):
self.n_cluster = 2
self.max_iter = max_iter
def fit_predict(self, D_matrix):
m, n = D_matrix.shape
ini_medoids = np.random.choice(range(m), self.n_cluster, replace=False)
tmp_D = D_matrix[:, ini_medoids]
labels = np.argmin(tmp_D, axis=1)
results = pd.DataFrame([range(m), labels]).T
results.columns = ['id', 'label']
col_names = ['x_' + str(i + 1) for i in range(m)]
results = pd.concat([results, pd.DataFrame(D_matrix, columns=col_names)], axis=1)
old_medoids = ini_medoids
new_medoids = []
loop = 0
while ((len(set(old_medoids).intersection(set(new_medoids))) != self.n_cluster)
and (loop < self.max_iter) ):
if loop > 0:
old_medoids = new_medoids.copy()
new_medoids = []
for i in range(self.n_cluster):
tmp = results[results['label'] == i].copy()
tmp['distance'] = np.sum(tmp.loc[:, ['x_' + str(id + 1) for id in tmp['id']]].values, axis=1)
tmp = tmp.reset_index(drop=True)
new_medoids.append(tmp.loc[tmp['distance'].idxmin(), 'id'])
new_medoids = sorted(new_medoids)
tmp_D = D_matrix[:, new_medoids]
clustaling_labels = np.argmin(tmp_D, axis=1)
results['label'] = clustaling_labels
loop += 1
results = results.loc[:, ['id', 'label']]
results['flag_medoid'] = 0
for medoid in new_medoids:
results.loc[results['id'] == medoid, 'flag_medoid'] = 1
tmp_D = pd.DataFrame(tmp_D, columns=['medoid_distance'+str(i) for i in range(self.n_cluster)])
results = pd.concat([results, tmp_D], axis=1)
self.results = results
self.cluster_centers_ = new_medoids
return results['label'].values
Il est possible de classer en deux classes ci-dessus, normal et anormal. Les détails de la méthode des k-médoïdes sont omis ici, mais les caractéristiques ne sont pas si différentes de la méthode des k-moyennes, mais contrairement à la méthode des k-moyennes, les médoïdes sont calculés et classés, donc ils sont résistants aux valeurs aberrantes. De plus, il est possible de classer tant que la matrice de distance est obtenue, donc l'application est efficace. Voici comment trouver le médoïde.
Cette fois, j'ai écrit sur la méthode de détection des anomalies et la méthode d'application. Après cela, un exemple de code pour détecter des anomalies à l'aide de données chronologiques bidimensionnelles est présenté.
Puisque la méthode des k-médoïdes peut être classée tant que la matrice de distance est obtenue, même une chaîne de caractères peut être classée en trouvant la distance. La distance de la chaîne de caractères utilise la distance de Jaro Winkler et la distance de Levenstein, veuillez donc rechercher ici également.
Nous espérons que vous vous référerez à cet article et que vous essaierez de détecter les anomalies en utilisant les données dont vous disposez.
Les opinions exprimées sur ce site et les commentaires correspondants sont les opinions personnelles de l'affiche et non les opinions de Cisco. Le contenu de ce site est fourni à titre informatif uniquement et n'est pas destiné à être approuvé ou exprimé par Cisco ou toute autre partie. En publiant sur ce site Web, chaque utilisateur est seul responsable du contenu de toutes les informations publiées, liées ou autrement téléchargées, et décline Cisco de toute responsabilité relative à l'utilisation de ce site Web. Je suis d'accord.
Recommended Posts