Accueil / Factory / Algos ML / Réseaux bayésiens — factory / algos ML / modèle probabiliste graphique

RÉSEAUX BAYÉSIENS.

Un graphe où chaque flèche relie une cause à un effet, et où chaque nœud porte une table de probabilités. Le modèle répond à des questions dans les deux sens : prédire l'effet à partir des causes, ou remonter aux causes probables d'un effet observé. Il combine volontiers expertise métier et données.

ModélisationGraphe probabilisteAssuranceDiagnosticNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceCorrect en prédiction, fort en raisonnement et en diagnostic
InterprétabilitéLe graphe se lit et se discute avec les experts
VitesseRapide sur quelques dizaines de nœuds, lourd au-delà
Facilité de réglageLa structure du graphe demande expertise ou recherche coûteuse
Tolérance aux données brutesVariables à découper en classes, cases vides à surveiller
EN 30 SECONDES

Un expert sinistres sait que l'âge, la zone et la puissance du véhicule influencent le risque d'accident, et que l'accident influence le coût. Il dessine ces flèches au tableau et met un chiffre sur chacune.

1. On dessine le graphe

Chaque variable est un nœud, chaque flèche une influence directe. Le graphe ne doit contenir aucune boucle. Il vient des experts, des données, ou des deux.

2. On estime une table par nœud

Chaque nœud reçoit la probabilité de ses valeurs pour chaque combinaison de ses parents, par exemple P(sinistre | âge, zone, puissance, bonus). Les tables s'estiment en comptant dans les données.

3. On interroge le réseau

On fixe ce que l'on sait (l'évidence) et le réseau calcule la probabilité de tout le reste, dans le sens des flèches comme à rebours.

LE CAS MÉTIER

assurance auto · risque et diagnostic
EN ENTRÉE

6 000 contrats

Âge du conducteur, zone, puissance du véhicule, bonus-malus, survenue d'un sinistre et niveau de coût. Les variables sont découpées en classes : moins de 25 ans, 25 à 59 ans, 60 ans et plus, par exemple.

EN SORTIE

Des réponses à des questions métier

Prédiction : un conducteur de moins de 25 ans en zone urbaine a environ 19 % de risque de sinistre sur la période, contre 7 % en moyenne. Diagnostic : selon le réseau, environ un quart des sinistres coûteux concernent des moins de 25 ans, qui ne représentent que 10 % des contrats.

CE QU'ON MESURE

La validité du graphe avant la précision

On confronte le graphe expert à la structure trouvée par les données seules (algorithme hill climbing) et on vérifie que les probabilités estimées collent aux taux observés. Pour tarifer, on garde un modèle de fréquence qui tient compte de l'exposition.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Raisonner dans les deux sens : prédire un risque et remonter aux causes d'un incident
  • Combiner avis d'experts et données, notamment quand les données sont rares
  • Diagnostic de pannes, analyse de risques opérationnels, aide à la décision médicale
  • Besoin d'un modèle transparent, dont chaque hypothèse est visible sur le graphe

NON

  • Seule la précision de prédiction compte, sur un grand tableau : un boosting fera mieux
  • Nombreuses variables continues : les découper en classes fait perdre de l'information
  • Tarification fine des sinistres : la régression de Poisson avec exposition est le standard actuariel
  • Plus de quelques dizaines de variables sans expertise pour guider le graphe : la recherche de structure devient peu fiable
LES 4 CHOIX QUI COMPTENT

Noms donnés pour bnlearn en R et pgmpy en Python.

Structure experte ou apprise (model2network / hc)

Un graphe dessiné avec les experts est plus robuste. hc() propose une structure à partir des seules données : utile pour repérer des liens oubliés, pas pour trancher le sens des flèches.

Découpage des variables

Chaque classe ajoutée multiplie la taille des tables. Des classes trop fines laissent des cases vides ; trop larges, elles effacent l'effet recherché.

Estimation : fréquences ou lissage bayésien

method = "mle" compte simplement les fréquences. method = "bayes" ajoute un a priori (paramètre iss) qui lisse les petites cases et évite les probabilités nulles.

Inférence exacte ou approchée

Sur un petit réseau, le calcul exact est instantané (élimination de variables dans pgmpy). cpquery() dans bnlearn procède par simulation : augmenter n stabilise le résultat.

LE CODE MINIMAL

jeu d'exemple : sinistres.csv ↓
# Assurance auto : réseau bayésien en R
library(bnlearn)

sin <- read.csv("sinistres.csv")
donnees <- data.frame(
  age = cut(sin$age_conducteur, c(0, 24, 59, Inf), labels = c("moins_25", "25_59", "60_plus")),
  zone = factor(sin$zone),
  puissance = factor(ifelse(sin$puissance_cv >= 8, "8cv_plus", "moins_8cv")),
  bonus = factor(ifelse(sin$bonus_malus < 1, "bonus", "malus")),
  sinistre = factor(ifelse(sin$nb_sinistres > 0, "oui", "non")),
  cout = cut(sin$cout_total, c(-1, 0, 2000, Inf), labels = c("aucun", "modere", "eleve")))

# Le graphe, fixé avec les experts métier : 4 facteurs -> sinistre -> coût
graphe <- model2network("[age][zone][puissance][bonus][sinistre|age:zone:puissance:bonus][cout|sinistre]")
reseau <- bn.fit(graphe, donnees)   # tables de probabilités estimées sur les données
print(reseau$cout)

set.seed(42)
# Prédiction : risque de sinistre d'un conducteur de moins de 25 ans en zone urbaine
cat("P(sinistre | moins de 25 ans, urbain) :",
    cpquery(reseau, event = (sinistre == "oui"), evidence = (age == "moins_25" & zone == "urbain"), n = 1e6), "\n")
# Diagnostic : part des moins de 25 ans derrière les sinistres coûteux
cat("P(moins de 25 ans | coût élevé) :",
    cpquery(reseau, event = (age == "moins_25"), evidence = (cout == "eleve"), n = 1e6), "\n")
# Structure proposée par les données seules (hill climbing), à confronter au graphe expert
print(arcs(hc(donnees)))

QUESTIONS FRÉQUENTES

Qu'est-ce qu'un réseau bayésien ?

Un modèle qui représente les dépendances entre variables par un graphe orienté sans boucle, avec une table de probabilités conditionnelles par nœud. Il calcule la probabilité de n'importe quelle variable à partir de celles qu'on observe.

Un réseau bayésien est-il un modèle causal ?

Pas automatiquement. Les flèches codent des dépendances ; les lire comme des causes suppose un graphe validé par l'expertise et l'absence de facteur caché. Les travaux de Judea Pearl précisent quand ce passage est légitime.

Quelle différence entre réseau bayésien et Naive Bayes ?

Naive Bayes est un réseau bayésien très particulier : une variable cible reliée à toutes les autres, supposées indépendantes entre elles une fois la cible connue. Un réseau bayésien général autorise n'importe quelle structure de dépendances.

LES ALGOS VOISINS

à comparer avant de choisir
la brique de base

Théorème de Bayes

Un réseau bayésien applique Bayes à de nombreuses variables à la fois, en suivant le graphe.

Voir la fiche →
le réseau le plus simple

Naive Bayes

Un graphe en étoile : la classe influence toutes les variables, supposées indépendantes entre elles.

Voir la fiche →
le standard de la tarification

Régression de Poisson

Prédit un nombre de sinistres en tenant compte de l'exposition : l'outil de référence des actuaires.

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 →