algorithme machine learning

Dans un précédent article, nous avons abordé l’utilisation du machine learning dans le cadre du traitement de données textuelles techniques, en l’occurrence du code applicatif. Je vais ici vous présenter les algorithmes de machine learning et d’autres méthodes permettant de résoudre un problème de type classification de lignes de codes.

Arbres de décision des algorithmes du machine learning

La discrimination par arbre binaire ou arbre de décision peut être utilisée pour classifier nos lignes de codes.

Le principe est de diviser un ensemble de données en sous-groupes remarquables (partitionnement) à l’aide de variables permettant de placer telle ou telle donnée dans une catégorie selon qu’elle respecte ou non le critère choisi.

Toutes ces variables sont communes à une variable à expliquer par rapport à notre échantillon (exemple : état de santé (sain/malade)). Dans l’exemple de la médecine, nous pouvons faciliter le diagnostic de maladies via cette méthode très intuitive. Ici, nous pouvons éventuellement détecter des anomalies dans le code source avec une variable explicative « code suspect » (Oui/Non). On pourrait prédire cette anomalie à l’aide des features citées dans l’article précédent. Comme par exemple l’indentation du code, les commentaires, la factorisation du code, le format et nommage des variables et fonctions.

L’intérêt est d’avoir le moins de divisions possible avec le moins d’individus « mal classés ». Comme par exemple une minorité d’individus respectant un critère ou variable explicative. La méthode CART (1984) nous permet dans un premier temps de créer un arbre ayant le plus de divisions possibles puis dans un second temps de successivement éliminer les branches qui n’améliorent pas le nombre de « mal classés » de l’arbre -> Elagage.

Cependant, le seuil choisi pour chaque variable explicative peut entraîner d’importantes modifications sur la structure de l’arbre. Et donc du modèle de données. De plus, l’arbitrage/analyse des données varie en efficacité selon la taille de l’échantillon. Elle peut aussi varier en fonction du nombre de variables à prendre en compte.

Les règles d’association des algorithmes du machine learning

Une autre approche intéressante pour notre problème est la mise en œuvre de règles d’associations.

Définir des règles d’association sur un volume de données est une méthode permettant de faire essentiellement de la prévision sur des relations statistiques entre différentes observations. Cette méthode est utilisée globalement dans le marketing, la détection des fraudes ou encore des pannes.

Il existe 3 concepts centraux qui sont :

  • Le support

Celui-ci indique le pourcentage de présence ou le nombre d’occurrences d’une donnée quelconque dans un modèle. Typiquement dans notre problème nous pouvons considérer le nombre de caractères par ligne. Mais également le nombre de termes respectant les normes de nommage (Camel case, etc…). Ou encore le nombre d’espaces entre les variables/fonctions

  • La confiance

Elle implique une relation entre 2 observations possédant chacune un support quelconque. On parlera de probabilité d’observer un certain comportement par rapport à un échantillon donné. Par exemple, on peut trouver que sur une majorité de lignes de code trop longues en nombre de caractères. De plus, si le code est mal indenté, on aura une règle de ce type :

    • nombre de caractères > seuil => Code mal indenté
  • La pertinence

Pertinence d’une règle qui va juger de l’utilité de se servir de cette dernière.

Un support élevé nous conduira à des observations très générales/fréquentes dans les données que l’on étudie. Typiquement sur un code source, la présence du caractère ‘=’ d’affectation de variable, tandis qu’un support bas nous conduira à des données plus rares et donc plus ciblées. On peut penser dans notre use case à des noms de variables plus longs qu’un seuil que l’on aura défini.

On cherchera à choisir un indice de confiance suffisamment élevé pour en dégager des patterns intéressants. Un grand nombre de règles ne nous apprendra rien d’utilisable au niveau MACRO.

Pour générer des règles d’associations sur des observations ou itemsets, le premier algorithme à avoir été proposé est l’algorithme Apriori (1993) en 2 étapes :

  1. Recherche des sous-ensembles fréquents (support)
  2. Recherche des règles d’association (confiance)

[Support]Détection de sous-ensembles fréquents

Plusieurs algorithmes de machine learning permettent d’optimiser la première étape consistant à rechercher les sous-ensembles fréquents :

  • Tout d’abord, l’algorithme DIC (Dynamic Itemset Counting) -> Comptage dynamique des itemsets fréquents 
  • Puis, l’algorithme Partition -> Partitionnement de la base et à partir des itemsets locaux on arrive à des itemsets globaux qui nous donnent leur support global
  • Ensuite, l’algorithme Eclat -> Parallélisation du traitement des itemsets
  • Enfin, l’algorithme FP-Growth -> Structure en arbre

 [Confiance]Détection de règles d’association

Pour l’étape de génération des règles, pour tous les ensembles fréquents à analyser, on définit seuil de confiance minimum et on calcule la confiance pour les règles à partir d’ensembles fréquents sur des observations ou conséquents de taille 1. On sélectionne ensuite les règles de confiance suffisantes puis on passe à des règles qui ont des conséquents de taille 2. Si les règles pour les conséquents d’une certaine taille ne satisfont pas au seuil de confiance, les règles pour conséquents de taille supérieure ne respecteront pas non plus ce critère.

[Pertinence]Validation de règles des algorithmes de machine learning

Pour réduire le nombre de règles et ne conserver que les plus efficaces pour notre modèle prédictif, nous avons, entre autres, les indices statistiques suivants :

  • Courbe de Lift : mesure du gain que l’on peut avoir en appliquant un algorithme sur un sous-ensemble d’une population à analyser (on peut penser qu’un algorithme de qualité de code source pourrait détecter plus d’anomalies sur un code non commenté que l’inverse).
  • Jaccard : analyse la similarité et la diversité d’une population

Nous pouvons également faire une classification de variables en sélectionnant des groupes de variables corrélées. Pour ce faire, nous avons des méthodes hiérarchiques (algorithme agglomératif) qui introduisent la notion de distance entre variables (critère de Ward). On regroupe les variables autour de la composante principale la plus corrélée à ces dernières à l’aide d’Analyses en Composantes Principales (ACP) successives.

De bonnes règles d’associations peuvent ainsi permettre de détecter efficacement dans du code source l’application de bonnes pratiques de développement. Ou encore la présence de lignes de codes suspectes issues d’un piratage.

 

Merci à Jérémie pour avoir coécrit cet article !

 


AlexisDepuis plus de 15 ans maintenant, je travaille sur des sujets liés à la BI et à l’amélioration des processus. J’ai participé à un grand nombre de projets en tant que leader technique sur de nombreuses technologies. De nature pédagogue, je donne également des cours de langage de programmation.

N’hésitez pas à me faire un retour sur cet article ou à me contacter sur LinkedIn pour échanger sur ces sujets!

Alexis

 

 

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.

Abonnez-vous à notre newsletter

Saisissez votre adresse e-mail pour vous abonner à ce blog et recevoir les derniers articles publiés!