Accueil / Factory / Algos ML / Réseaux de neurones sur graphes (GNN) — factory / algos ML / deep learning sur graphes

RÉSEAUX DE NEURONES SUR GRAPHES.

Un GNN (Graph Neural Network) apprend sur des données reliées entre elles : comptes qui partagent un appareil, molécules, réseaux logistiques. Chaque élément met à jour sa représentation à partir de celle de ses voisins. Il repère ce qu'un modèle ligne à ligne ne voit pas, comme un réseau de fraudeurs dont chaque compte, pris seul, paraît banal.

GraphesDeep learningFraudeClassificationNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceNettement mieux qu'un modèle ligne à ligne quand les liens comptent
InterprétabilitéOn voit quels voisins pèsent, pas une règle lisible
VitesseRapide sur des graphes moyens, délicat sur des milliards de liens
Facilité de réglageArchitecture, profondeur et construction du graphe à choisir
Tolérance aux données brutesLe graphe lui-même doit être construit et nettoyé
EN 30 SECONDES

Dites-moi qui vous fréquentez, je vous dirai qui vous êtes. Un compte ordinaire qui partage son téléphone avec trois comptes frauduleux mérite un second regard.

1. On construit le graphe

Chaque compte est un nœud avec ses variables. Deux comptes sont reliés s'ils partagent un appareil, une adresse ou un IBAN.

2. Chaque nœud écoute ses voisins

À chaque couche, un nœud agrège les représentations de ses voisins (moyenne pondérée dans un GCN), les combine avec la sienne et passe le tout dans un petit réseau. Deux couches, et l'information vient des voisins de ses voisins.

3. On classe chaque nœud

La représentation finale d'un compte résume ses propres variables et son entourage. Une couche de sortie donne la probabilité de fraude. L'apprentissage se fait sur les comptes au statut connu.

LE CAS MÉTIER

fraude en réseau · banque / assurance / e-commerce
EN ENTRÉE

Un graphe de 500 comptes simulé

400 comptes normaux faiblement liés, et 5 groupes de 20 fraudeurs très liés entre eux. Chaque compte a 4 variables, à peine différentes chez les fraudeurs. Seuls 30 % des comptes ont un statut vérifié. Le jeu est simulé car aucun jeu de données du site n'a de structure de graphe.

EN SORTIE

Un statut prédit pour les comptes non vérifiés

Le GNN s'appuie sur les variables du compte et sur celles de son entourage. Un compte relié à des fraudeurs connus remonte, même si ses propres variables sont banales. L'équipe fraude reçoit une liste de comptes et de groupes à examiner.

CE QU'ON MESURE

Rappel et précision sur la classe fraude

Le rappel dit quelle part des fraudeurs est retrouvée, la précision quelle part des alertes est fondée. On compare au même modèle sans le graphe : l'écart mesure ce que les liens apportent.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Fraude organisée : comptes, cartes, appareils et adresses reliés entre eux
  • Chimie et pharmacie : prédire les propriétés d'une molécule à partir de ses atomes et liaisons
  • Réseaux physiques : logistique, énergie, télécoms, où l'état d'un site dépend de ses voisins
  • Recommandation : graphe clients-produits, où les goûts se propagent par les achats communs

NON

  • Données sans liens significatifs entre les lignes : un modèle tabulaire classique suffit
  • Quelques variables de réseau suffisent (degré, nombre de voisins frauduleux) : les calculer et utiliser XGBoost, plus simple
  • Graphes géants sans infrastructure adaptée : échantillonnage de voisins et outils spécialisés nécessaires
  • Besoin d'une décision justifiable ligne à ligne auprès d'un régulateur
LES 4 RÉGLAGES QUI COMPTENT

Noms donnés pour PyTorch Geometric.

Construction du graphe

Le choix le plus important : quels liens (appareil, IBAN, transaction), orientés ou non, pondérés ou non. Un mauvais graphe donne un mauvais modèle, quelle que soit l'architecture.

Nombre de couches

Chaque couche élargit le voisinage d'un saut. 2 à 3 suffisent en général ; au-delà, les représentations des nœuds finissent par se ressembler toutes (sur-lissage).

Type de couche : GCNConv, SAGEConv, GATConv

GCN fait une moyenne pondérée des voisins. GraphSAGE échantillonne les voisins et passe mieux à l'échelle. GAT apprend un poids d'attention par voisin.

Taille cachée et régularisation

16 à 128 neurones par couche, avec dropout et weight_decay pour limiter le surapprentissage quand peu de nœuds sont étiquetés.

LE CODE MINIMAL

données simulées dans le code
# Fraude en réseau : GNN (GCN) en Python
import networkx as nx
import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
from torch_geometric.utils import to_undirected
from sklearn.metrics import classification_report

torch.manual_seed(42)
# Simulation : 400 comptes normaux et 5 réseaux de 20 fraudeurs très liés entre eux
# (un lien = un appareil, une adresse ou un IBAN partagé)
tailles = [400, 20, 20, 20, 20, 20]
probas = [[0.01 if i == j == 0 else 0.3 if i == j else 0.002 for j in range(6)] for i in range(6)]
G = nx.stochastic_block_model(tailles, probas, seed=42)
liens = to_undirected(torch.tensor(list(G.edges)).t().contiguous())
fraude = torch.tensor([int(G.nodes[n]["block"] > 0) for n in G.nodes])
X = torch.randn(len(fraude), 4) + 0.5 * fraude[:, None]  # variables du compte, peu parlantes seules
connu = torch.rand(len(fraude)) < 0.3  # 30 % des comptes ont un statut vérifié

# Deux couches de convolution sur graphe : chaque compte agrège ses voisins, puis les voisins de ses voisins
c1, c2 = GCNConv(4, 16), GCNConv(16, 2)
def predire(x):
    return c2(F.relu(c1(x, liens)), liens)
optim = torch.optim.Adam(list(c1.parameters()) + list(c2.parameters()), lr=0.01, weight_decay=5e-4)
for epoque in range(200):
    optim.zero_grad()
    perte = F.cross_entropy(predire(X)[connu], fraude[connu])
    perte.backward()
    optim.step()

# Évaluation sur les comptes au statut inconnu
prevu = predire(X).argmax(dim=1)
print(classification_report(fraude[~connu].numpy(), prevu[~connu].numpy(), target_names=["normal", "fraude"]))

Les GNN se pratiquent en Python (PyTorch Geometric, DGL) : pas d'équivalent R courant en entreprise.

QUESTIONS FRÉQUENTES

Qu'est-ce qu'un graphe en data science ?

Un ensemble de nœuds (clients, comptes, produits, atomes) reliés par des liens (transactions, partages, liaisons chimiques). Beaucoup de données d'entreprise en contiennent un sans le dire : il suffit de relier les lignes qui partagent un identifiant.

Quelle différence entre GCN, GraphSAGE et GAT ?

Ce sont trois façons d'agréger les voisins. Le GCN fait une moyenne pondérée par le nombre de liens. GraphSAGE échantillonne un nombre fixe de voisins, ce qui passe à l'échelle et s'applique à de nouveaux nœuds. GAT apprend un poids d'attention pour chaque voisin.

Faut-il une base de données graphe pour faire un GNN ?

Non. Une simple liste de liens (deux colonnes d'identifiants) suffit à PyTorch Geometric. Une base graphe comme Neo4j aide surtout à stocker, explorer et mettre à jour de grands graphes en production.

LES ALGOS VOISINS

à comparer avant de choisir
le même réseau sans les liens

Réseau de neurones (MLP)

Ne voit que les variables de chaque ligne. La comparaison avec le GNN mesure ce qu'apporte le graphe.

Voir la fiche →
l'alternative pragmatique

XGBoost

Sur des variables de réseau calculées à la main (degré, voisins frauduleux), il fait souvent une grande partie du chemin.

Voir la fiche →
sans étiquettes

Clustering spectral

Découpe le graphe en communautés denses. Utile pour repérer des groupes suspects quand aucun fraudeur n'est connu.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →