AutoEncodeur sur un événement rare

Qu’est-ce qu’un événement rare, extrêmement rare ?

Dans un problème d’événement rare, nous avons un ensemble de données déséquilibré. Cela signifie que nous avons moins d’échantillons étiquetés positivement que d’échantillons étiquetés négativement. Dans un problème typique d’événement rare, les données étiquetées positivement représentent environ 5 à 10 % du total. Dans un problème d’événement rare extrême, nous avons moins de 1% de données étiquetées positivement. Par exemple, dans l’ensemble de données utilisé ici, ce pourcentage est d’environ 6 %.

Ces problèmes d’événements rares sont assez courants dans le monde réel, par exemple, les ruptures de tôle et les pannes de machine dans la fabrication, les clics ou les achats dans une industrie en ligne.

La classification de ces événements rares est un véritable défi. Récemment, l’apprentissage profond a été largement utilisé pour la classification. Cependant, le petit nombre d’échantillons étiquetés positivement empêche l’application de l’apprentissage profond. Quelle que soit la taille des données, l’utilisation du Deep Learning est limitée par le nombre d’échantillons étiquetés positivement.

Pourquoi se donner la peine d’utiliser l’apprentissage profond ?

Il s’agit d’une question légitime. Pourquoi ne pas envisager d’utiliser une autre approche d’apprentissage automatique ? La réponse est subjective. Nous pouvons toujours opter pour une approche d’apprentissage automatique. Pour que cela fonctionne, nous pouvons sous-échantillonner les données étiquetées négativement afin d’obtenir un ensemble de données presque équilibré. Comme nous avons environ 6 % de données étiquetées positivement, le sous-échantillonnage donnera un ensemble de données qui représente environ 10 % de la taille des données d’origine. Une approche d’apprentissage automatique, par exemple SVM ou Random Forest, fonctionnera toujours sur un ensemble de données de cette taille. Toutefois, sa précision sera limitée. Et nous n’utiliserons pas les informations présentes dans les ~90% restants des données.

Si les données sont suffisantes, les méthodes d’apprentissage profond sont potentiellement plus performantes. Elles permettent également une certaine flexibilité pour l’amélioration des modèles en utilisant différentes architectures. Nous allons donc essayer d’utiliser des méthodes d’apprentissage profond.

Dans cet article, nous allons apprendre comment utiliser un simple autoencodeur à couches denses pour construire un classificateur d’événements rares. L’objectif de ce post est de démontrer la mise en œuvre d’un autoencodeur pour la classification d’événements rares. Nous laissons à l’utilisateur le soin d’explorer les différentes architectures et configurations de l’Autoencodeur. Veuillez partager dans les commentaires si vous trouvez quelque chose d’intéressant.

Quelles sont les données hippiques utilisées?

Ce fichier plat concerne les courses de trot attelé de plus de 9 partants. Je vais prendre les 10 premiers chevaux d’une liste de 50 pronos créé à partir de ma base. On a a des classements en fonction de la denrières place du cheval, de la réussite en fonction de l’hippodrome, de la distance etc. Pour chaque place du classement on a donc le n° du cheval, le pourcentage de réussite, le nombre de fois ou cette caracteristique a été présente. Pour ce dernier point c’est important il plus fiable d’avoir 40 % de reussite sur 2300 courses et 60 % sur 10 courses.

Autoencodeur pour la classification

L’approche de l’autoencodeur pour la classification est similaire à la détection d’anomalies. Dans la détection des anomalies, nous apprenons le modèle d’un processus normal. Tout ce qui ne suit pas ce modèle est classé comme une anomalie. Pour une classification binaire d’événements rares, nous pouvons utiliser une approche similaire en utilisant des autoencodeurs.

Révision rapide : Qu’est-ce qu’un auto-codeur ?

Un auto-codeur est composé de deux modules : l’encodeur et le décodeur. L’encodeur apprend les caractéristiques sous-jacentes d’un processus. Ces caractéristiques sont généralement dans une dimension réduite. Le décodeur peut recréer les données originales à partir de ces caractéristiques sous-jacentes.

Autoencoder

Comment utiliser un Autoencodeur pour la classification des événements rares ?

Nous allons diviser les données en deux parties : celles qui sont étiquetées positivement et celles qui sont étiquetées négativement.

Les données étiquetées négativement sont traitées comme l’état normal du processus. Un état normal est celui où le processus est sans événement.

Nous allons ignorer les données étiquetées positivement et entraîner un auto-codeur sur les seules données étiquetées négativement.

Cet auto-codeur a maintenant appris les caractéristiques du processus normal.

Un auto-codeur bien entraîné prédit toutes les nouvelles données qui proviennent de l’état normal du processus (car elles ont le même modèle ou la même distribution).

Par conséquent, l’erreur de reconstruction sera faible.

Cependant, si nous essayons de reconstruire une donnée provenant d’un événement rare, l’Autoencodeur aura du mal. Cela rendra l’erreur de reconstruction élevée pendant l’événement rare. Nous pouvons détecter ces erreurs de reconstruction élevées et les étiqueter comme une prédiction d’événement rare.

Cette procédure est similaire aux méthodes de détection des anomalies.

Mise en œuvre

Données et problème

Les données dont nous disposons contiennent environ 34 830 lignes collectées. La colonne y contient les étiquettes binaires, 1 indiquant un gagnant. Il y a 1502 colonnes dans ce fichier. On sélectionne les courses depuis janvier 2016.

Code

Importez les bibliothèques souhaitées.

Notez que nous fixons les graines aléatoires pour la reproductibilité du résultat.

Prétraitement des données

Maintenant, nous lisons et préparons les données.

Avant d’aller plus loin, nous allons laisser tomber la colonne idCourse pour plus de simplicité.

Maintenant, nous divisons les données en ensembles de formation, de validation et de test. Nous prenons ensuite le sous-ensemble de données contenant uniquement des 0 pour entraîner l’auto-codeur.

Normalisation

Il est généralement préférable d’utiliser des données normalisées (transformées en gaussiennes, moyenne 0 et variance 1) pour les auto-codeurs.

Classificateur auto-codeur

Initialisation

Tout d’abord, nous allons initialiser l’architecture de l’Autoencodeur. Nous construisons un autoencodeur simple. Des architectures plus complexes et d’autres configurations devraient être explorées.

tensorflow

Entraînement

Nous allons entraîner le modèle et le sauvegarder dans un fichier. Sauvegarder un modèle entraîné est une bonne pratique pour gagner du temps pour une analyse future.

Classification

Dans ce qui suit, nous montrons comment nous pouvons utiliser l’erreur de reconstruction d’un auto-codeur pour la classification des événements rares.

Comme mentionné précédemment, si l’erreur de reconstruction est élevée, nous la classerons comme gain potentiel. Nous devrons déterminer le seuil pour cela. Nous utiliserons l’ensemble de validation pour identifier le seuil.

tensorflow 2

On peut voir que vu la tête de la courbe c’est quand même mal partie pour avoir des résultats probants.

Maintenant, nous allons effectuer la classification sur les données de test.

Nous ne devons pas estimer le seuil de classification à partir des données de test. Cela entraînerait un surajustement.

On affect un seuil de 1,15 qui correspond à ce que l’on voit sur le graph.

tensorflow 3

Dans la figure ci dessus, le point orange et le point bleu au-dessus de la ligne de seuil représentent respectivement le vrai positif et le faux positif. Comme nous pouvons le voir, nous avons un bon nombre de faux positifs. Pour avoir un meilleur aperçu, nous pouvons voir une matrice de confusion.

tensorflow 4

Nous avons pu prédire 8 gagnant sur 267. soit un taux de réussite de 3%. Ce qui est deux fois moins que le taux initiale. En prenant les chevaux prédit comme faux notre taux est de 6,83 soit une légère augmentation.

En faisant varier le threshold on peut monter jusqu’à 7,56% de réussite.

Nous allons examiner l’AUC ci-dessous et ensuite parler de la prochaine approche pour l’amélioration.

ROC et AUC

tensorflow 5

Ce qui est interessant avec cette étude c’est que l’on peut voir que nous sommes passés de 1500 variables en entrée à 600. Et néanmoins, nous pouvons avoir un % de réussite équivalent voir plus.

Dans le prochain article nous allons continué dans cette voie avec un autre autoencodeur

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.