Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Allez plus loin avec le CSS

Clustering et Machine Learning PHP : Détecter les anomalies

⏱️ Temps de lecture estimé : 8 minutes
Accueil PHP 8 Clustering et Machine Learning PHP : Détecter les anomalies

Dans le domaine du Machine Learning PHP, le mot « clustering » revient très souvent.

Derrière ce terme anglophone, il y a une idée assez simple mais extrêmement puissante : regrouper des données qui se ressemblent, sans avoir besoin de connaître à l’avance les catégories auxquelles elles appartiennent.

Cela peut paraître abstrait au premier abord, mais vous allez voir que le clustering est une approche très utile, notamment lorsqu’il s’agit de mettre en évidence des comportements inhabituels. Par exemple, si vous avez une liste de dépenses bancaires et que certaines sont largement supérieures à la moyenne, vous aimeriez peut-être les identifier automatiquement. C’est ce que l’on appelle de la détection d’anomalies.

Qu’est-ce que le clustering et le regroupement ?

Le clustering (que l’on peut traduire en français par « regroupement » ou « segmentation ») est une technique d’apprentissage non supervisé.

Contrairement à l’apprentissage supervisé, où l’on connaît déjà les catégories (par exemple, reconnaître des photos de chats et de chiens), ici l’algorithme ne sait pas ce qu’il doit trouver. Il va simplement analyser les données et créer des groupes en fonction des ressemblances qu’il détecte.

Imaginez que vous ayez une grande boîte remplie de billes de toutes les couleurs et de toutes les tailles. Si vous deviez les organiser, vous pourriez les regrouper par couleur, par taille, ou même par matière. C’est exactement ce que fait le clustering : il cherche des points communs entre les données pour créer des ensembles homogènes.

Il existe plusieurs algorithmes de clustering, chacun avec ses forces et ses limites. Les plus connus sont :

  • K-means : très populaire, il regroupe les données en « k » clusters définis à l’avance.
  • DBSCAN : il détecte les groupes en fonction de la densité et met aussi en évidence les anomalies.
  • Mean ShiftAgglomératif ou encore Spectral Clustering : d’autres méthodes adaptées à des contextes particuliers.

Dans le cadre de la détection d’anomalies, certains algorithmes comme DBSCAN ou des variantes de K-means sont particulièrement intéressants, car ils permettent de mettre en lumière les données qui ne ressemblent à aucun groupe.

À quoi sert le clustering ?

Le clustering est utilisé dans de nombreux domaines du quotidien. Il ne s’agit pas seulement d’une théorie réservée aux chercheurs. Voici quelques exemples concrets :

  • Marketing : segmenter les clients selon leurs comportements d’achat afin de proposer des publicités ciblées.
  • Santé : analyser des données médicales pour repérer des profils de patients présentant des risques similaires.
  • Finance : identifier des transactions suspectes, par exemple en mettant en évidence des dépenses « bizarres ».
  • Web et réseaux sociaux : regrouper des utilisateurs selon leurs centres d’intérêt ou leurs habitudes de navigation.
  • Sécurité informatique : détecter des connexions inhabituelles qui pourraient révéler une tentative de piratage.

Dans le contexte de ce tutoriel, nous allons nous concentrer sur un cas simple mais très utile : détecter automatiquement les dépenses qui sortent de l’ordinaire.

Les avantages du clustering

Le clustering est apprécié pour plusieurs raisons.

Premièrement, il ne demande pas d’étiquettes ou de catégories prédéfinies. Cela signifie que vous pouvez l’utiliser même lorsque vous n’avez aucune idée des groupes existants dans vos données.

Deuxièmement, il permet de découvrir des structures cachées. Parfois, les données semblent chaotiques, mais après clustering, on remarque que certains points s’organisent naturellement.

Troisièmement, il peut être utilisé comme étape intermédiaire pour enrichir d’autres analyses. Par exemple, en marketing, on peut d’abord faire du clustering pour segmenter les clients, puis appliquer des modèles prédictifs spécifiques à chaque groupe.

Enfin, pour la détection d’anomalies, le clustering est redoutablement efficace. Les données qui ne « rentrent » dans aucun groupe ou qui se trouvent isolées peuvent directement être considérées comme suspectes.

Les limites du clustering

Bien entendu, le clustering n’est pas parfait.

Un premier problème est qu’il faut souvent choisir des paramètres, comme le nombre de groupes (dans le cas de K-means). Si ce nombre est mal choisi, le résultat peut être trompeur.

Un autre défi est lié à la qualité des données. Si vos données sont bruitées, incomplètes ou mal préparées, les résultats du clustering seront faussés.

Enfin, certains algorithmes peuvent être coûteux en temps de calcul si les données sont très volumineuses. Dans ce cas, il faut parfois simplifier ou combiner les méthodes.

C’est pourquoi il est important de bien comprendre quand et comment utiliser le clustering.

Quand utiliser le clustering : cas concrets

Le clustering n’est pas une méthode à appliquer au hasard. Il est particulièrement adapté lorsque vous avez beaucoup de données et peu d’information sur leur organisation. Voici quelques situations typiques :

Dans le commerce et le marketing, vous pouvez avoir des milliers de clients avec des comportements différents. Plutôt que de les catégoriser manuellement, le clustering permet de créer automatiquement des groupes : clients réguliers, gros dépensiers, utilisateurs occasionnels, etc. Vous pouvez ensuite adapter vos promotions selon chaque segment.

En finance, le clustering est utile pour la détection de fraudes. Si la majorité des transactions suivent un certain schéma, une dépense très au-dessus de la moyenne se retrouvera isolée dans un cluster à part, ce qui alerte le système.

Dans la santé, on peut analyser des résultats médicaux pour identifier des profils de patients présentant des risques similaires. Par exemple, un groupe de patients présentant une combinaison de symptômes inhabituelle peut émerger naturellement grâce au clustering.

Dans l’informatique et la sécurité, les connexions réseau ou les logs peuvent être regroupés pour détecter des comportements anormaux. Une connexion inhabituelle dans un cluster isolé peut signaler une intrusion ou un comportement suspect.

Le clustering est utile dès que l’on veut mettre en évidence des tendances ou des anomalies dans des données complexes ou volumineuses.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Exemple pratique : Détecter des anomalies dans les dépenses avec PHP

Pour rendre cet exemple concret, nous allons utiliser une bibliothèque PHP adaptée au Machine Learning. La bibliothèque Rubix ML est une référence moderne et pratique pour le PHP. Elle permet de réaliser des clustering, classification, régression et détection d’anomalies de façon simple et performante.

Étape 1 : Installer Rubix ML

Si vous n’avez jamais utilisé Rubix ML, il faut d’abord l’installer via Composer :

composer require rubix/ml

Cette commande télécharge et installe toutes les dépendances nécessaires.

Étape 2 : Préparer les données

Pour notre exemple, imaginons que nous avons une liste de dépenses mensuelles. Certaines sont normales, d’autres sont très élevées et doivent être détectées.

<?php

require 'vendor/autoload.php';

use Rubix\ML\Datasets\Unlabeled;

$depenses = [
    [50],
    [60],
    [55],
    [70],
    [500], // dépense anormale
    [65],
    [58],
    [600], // dépense anormale
    [62],
];

$dataset = new Unlabeled($depenses);

Ici, chaque dépense est un tableau à une dimension. Même si c’est une seule valeur, Rubix ML exige que chaque point de donnée soit un tableau.

Étape 3 : Choisir un algorithme de clustering

Pour détecter les anomalies, nous allons utiliser l’algorithme DBSCAN, car il est capable de repérer les points isolés :

use Rubix\ML\Clusterers\DBSCAN;

// 2 = nombre minimum de points pour un cluster
// 50.0 = distance max pour regrouper
$clusterer = new DBSCAN(50.0, 2); 
  • Le premier paramètre est la distance maximale pour considérer que deux points sont voisins.
  • Le deuxième paramètre indique le nombre minimum de points pour former un cluster.

Étape 4 : Entraîner le modèle

$clusters = $clusterer->predict($dataset);

Cette étape consiste à analyser les données et former les clusters. DBSCAN va regarder quelles dépenses sont proches les unes des autres et créer des groupes. Les dépenses très éloignées des autres seront marquées comme anomalies.

Étape 5 : Identifier les anomalies

foreach ($clusters as $index => $cluster) {
    if ($cluster === -1) {
        echo "Dépense anormale détectée : " . $depenses[$index][0] . " euros\n";
    }
}

Dans DBSCAN, les points isolés qui ne rentrent dans aucun cluster se voient attribuer l’ID -1. C’est exactement ce qui nous permet de détecter les valeurs « bizarres » ou anormales.

Résultat attendu :

Dépense anormale détectée : 500 euros
Dépense anormale détectée : 600 euros

Étape 6 : Enrichir les données

Pour rendre le modèle plus précis, vous pouvez nourrir le modèle avec plus de données :

  • Ajouter des dépenses sur plusieurs mois ou plusieurs clients.
  • Ajouter d’autres variables, comme le type de dépense (loyer, nourriture, loisirs).
  • Normaliser les valeurs si certaines échelles sont très différentes (par exemple, si certaines dépenses sont en euros et d’autres en milliers).

Rubix ML peut facilement s’adapter à ces nouveaux jeux de données. Plus votre dataset est représentatif, plus la détection d’anomalies sera fiable.

Code complet

<?php

require 'vendor/autoload.php';

use Rubix\ML\Datasets\Unlabeled;
use Rubix\ML\Clusterers\DBSCAN;

$depenses = [
    [50],
    [60],
    [55],
    [70],
    [500], // dépense anormale
    [65],
    [58],
    [600], // dépense anormale
    [62],
];

$dataset = new Unlabeled($depenses);

// 2 = nombre minimum de points pour un cluster
// 50.0 = distance max pour regrouper
$clusterer = new DBSCAN(50.0, 2); 

// L'algorithme de clustering s'exécute directement sur le jeu de données
// lors de l'appel à la méthode predict(). Il n'y a pas de méthode fit() ou train().
$clusters = $clusterer->predict($dataset);

foreach ($clusters as $index => $cluster) {
    if ($cluster === -1) {
        echo "Dépense anormale détectée : " . $depenses[$index][0] . " euros\n<br>";
    }
}

Pour aller plus loin :

  • Vous pouvez tester d’autres algorithmes de clustering comme K-means ou Agglomératif, surtout si vous avez beaucoup de données.
  • Ajuster les paramètres de l’algorithme pour mieux correspondre à votre domaine. Par exemple, modifier la distance maximale dans DBSCAN pour détecter plus ou moins de points comme anomalies.
  • Combiner le clustering avec d’autres techniques de Machine Learning supervisé pour prédire les anomalies avant qu’elles ne se produisent.

Interprétation des résultats du clustering

Une fois que votre algorithme de clustering a analysé vos données, il est important de comprendre ce qu’il vous indique.

Dans notre exemple avec DBSCAN :

  • Les points appartenant à un cluster identifié par un numéro (0, 1, 2…) correspondent aux valeurs « normales » qui se ressemblent.
  • Les points isolés (ID -1) sont considérés comme des anomalies, c’est-à-dire des dépenses très différentes des autres.

Il ne suffit pas de récupérer ces anomalies, il faut aussi les interpréter dans le contexte réel. Par exemple, une dépense de 500 euros peut sembler anormale par rapport aux dépenses précédentes, mais elle peut correspondre à un événement ponctuel (un achat exceptionnel, des vacances…).

Pour rendre vos résultats plus exploitables :

  • Affichez-les dans un tableau ou un graphique pour mieux visualiser les clusters et anomalies.
  • Ajoutez des métadonnées aux points de données, comme la date, le type de dépense ou le client, pour comprendre pourquoi certains points sont isolés.
  • Réalisez des statistiques complémentaires, comme la moyenne et l’écart-type, pour quantifier à quel point une anomalie s’écarte du reste des données.

Techniques avancées pour améliorer la détection d’anomalies

Si vous souhaitez aller plus loin dans la détection d’anomalies avec le clustering, voici quelques pistes :

  1. Normalisation et mise à l’échelle des données :
    Les algorithmes de clustering sont sensibles aux différences d’échelle. Par exemple, si certaines dépenses sont en euros et d’autres en milliers, vous devrez normaliser vos données pour que toutes les valeurs soient comparables. Rubix ML propose des scalers pour transformer les données automatiquement.
  2. Multidimensionnalité :
    Vous pouvez ajouter plusieurs variables à votre dataset, comme le type de dépense, le canal d’achat, ou la localisation. Plus votre dataset est riche, plus les clusters seront précis et les anomalies pertinentes.
  3. Tests avec différents algorithmes :
    K-means est simple et rapide, mais il nécessite de définir le nombre de clusters. DBSCAN est plus flexible et met en évidence les anomalies, mais peut être sensible aux paramètres. N’hésitez pas à tester plusieurs méthodes et comparer les résultats.
  4. Automatisation et mises à jour :
    En pratique, vous pouvez intégrer votre modèle dans un système qui surveille les transactions en temps réel. Chaque nouvelle dépense peut être analysée automatiquement pour vérifier si elle appartient à un cluster existant ou si elle constitue une anomalie.

Bonnes pratiques pour le clustering et la détection d’anomalies

Pour que votre approche de clustering soit efficace, voici quelques bonnes pratiques à respecter :

  • Commencez avec un jeu de données propre et bien structuré. Les erreurs, valeurs manquantes ou doublons peuvent fausser vos clusters.
  • Comprenez vos paramètres d’algorithme. Ajuster la distance maximale, le nombre de clusters ou le minimum de points peut avoir un impact énorme sur vos résultats.
  • Visualisez vos clusters. Même avec des données à une dimension, un simple graphique peut aider à comprendre la répartition et les anomalies.
  • Combinez le clustering avec d’autres analyses. Par exemple, le clustering peut être la première étape pour filtrer les anomalies avant d’appliquer un modèle prédictif supervisé.

Pourquoi le clustering est essentiel pour le Machine Learning

Le clustering est une technique incontournable du Machine Learning lorsqu’il s’agit de mettre en évidence des tendances et détecter des anomalies. Il ne nécessite pas d’étiquettes préalables et permet de découvrir des structures cachées dans les données.

Dans ce chapitre du long tutoriel sur le machine learning en PHP, nous avons exploré pas à pas :

  • Ce qu’est le clustering et son principe de regroupement de données similaires.
  • Les avantages et les limites de cette approche, ainsi que les cas où elle est pertinente.
  • Un exemple concret en PHP pour détecter automatiquement des dépenses anormales grâce à la bibliothèque Rubix ML.
  • Des techniques pour enrichir et améliorer vos datasets afin d’obtenir des résultats plus précis.

En pratique, le clustering ne se limite pas à détecter des anomalies financières. Il peut être appliqué à la segmentation de clients, la surveillance de systèmes, l’analyse de données médicales, et bien d’autres domaines.

La clé pour réussir vos projets de Machine Learning avec clustering est de comprendre vos données, choisir le bon algorithme et ajuster les paramètres. Avec ces bonnes pratiques, vous pouvez transformer un ensemble de chiffres bruts en informations exploitables et prendre des décisions éclairées.

Enfin, n’oubliez pas que le clustering est souvent le premier pas vers des analyses plus complexes. Une fois que vous maîtrisez cette technique, vous pouvez combiner vos clusters avec des modèles prédictifs, de la régression, ou même des réseaux neuronaux pour créer des systèmes d’analyse puissants et intelligents.

Chapitre 6 : Fréquence passée →