Programmation Probabiliste avec Infer.NET

← Série Probas | Série PyMC (Python) → | ML.NET (C#) →

Programmation probabiliste avec Microsoft Infer.NET : le corpus bayésien (19 notebooks, ce README) va des fondamentaux (distributions, factor graphs) aux frontières (modèles relationnels, TrueSkill, LDA, HMM, inférence causale (do-calculus de Pearl), processus gaussiens (GP sparse, frontières non-linéaires), modèles hiérarchiques (pooling partiel, shrinkage), filtre de Kalman, détection de rupture (change-point bayésien), analyse de survie (modèles de risque, censure)). Le corpus de théorie de la décision (10 notebooks, ../DecisionTheory/DecInfer/) couvre utilité espérée, EVPI, MDPs, indice de Gittins et bandits bayésiens (Thompson Sampling), avec des preuves formelles Lean 4.

À qui s’adresse cette série : étudiants en IA, développeurs .NET souhaitant maîtriser l’inférence probabiliste par message passing, et data scientists intéressés par les graphes de facteurs. Les notebooks C# requièrent .NET 9.0 + dotnet-interactive. Aucun prérequis en probabilités avancées : les concepts sont introduits progressivement.

Pourquoi cette sous-série

Infer.NET est le seul framework d’inférence probabiliste natif dans l’écosystème .NET. Il compile un modèle probabiliste déclaratif en un algorithme d’inférence spécialisé via reflection et compilation Roslyn, offrant trois moteurs complémentaires : Expectation Propagation (EP) pour les modèles continus et mixtes (défaut, rapide mais approximatif), Variational Message Passing (VMP) pour les modèles à composantes comme LDA (stable, sous-estime l’incertitude), et Gibbs Sampling pour la validation sur petits modèles (exact asymptotiquement, lent). Cette approche compilée contraste avec l’échantillonnage MCMC générique de PyMC et permet des inférences en millisecondes plutôt qu’en minutes. Cette série couvre les 19 notebooks du corpus bayésien (réseaux bayésiens, TrueSkill, LDA, HMM) — voir la table Vue d’ensemble ci-dessous pour la liste exhaustive. Le corpus de théorie de la décision (10 notebooks) et la preuve formelle Lean 4 de l’indice de Gittins vivent dans la sous-série DecisionTheory/DecInfer/.

Algorithme Force Limite Cas d’usage
EP Rapide, bon pour gaussiennes Approximatif, peut diverger Modèles continus, facteurs mixtes
VMP Stable, bon pour discret Sous-estime l’incertitude LDA, modèles à composantes
Gibbs Exact asymptotiquement Lent, convergence difficile Validation, petits modèles
flowchart LR
    MOD["Modèle déclaratif<br/>Variables + priors +<br/>vraisemblance"] -->|"compilation Roslyn<br/>(reflection)"| SPEC["Algorithme d'inférence<br/>spécialisé"]
    SPEC --> ENG{"Moteur"}
    ENG -->|"continu / mixte<br/>(défaut)"| EP["<b>EP</b><br/>Expectation Propagation<br/>rapide · approximatif"]
    ENG -->|"composantes<br/>(LDA)"| VMP["<b>VMP</b><br/>Variational MP<br/>stable · sous-estime<br/>l'incertitude"]
    ENG -->|"validation<br/>(petits modèles)"| GIBBS["<b>Gibbs</b><br/>échantillonnage<br/>exact asymptotiquement · lent"]
    EP --> POST["Posterior<br/>(millisecondes)"]
    VMP --> POST
    GIBBS --> POST

Le trait distinctif d’Infer.NET : le modèle déclaratif est compilé (via Roslyn/reflection) en un algorithme d’inférence spécialisé, et l’on choisit l’un des trois moteurs selon la structure du modèle. C’est l’inverse d’un échantillonneur MCMC générique (PyMC) qui traite tout modèle pareil — d’où des inférences en millisecondes plutôt qu’en minutes, au prix de l’approximation (EP) ou d’une incertitude sous-estimée (VMP).

Double approche : Cette série est le versant C#/.NET de la programmation probabiliste. Le versant Python (PyMC) couvre les mêmes modèles avec un moteur d’inférence différent. Voir PyMC/ pour la comparaison.

Applications réelles couvertes : TrueSkill (Xbox Live, 100M+ joueurs), Item Response Theory (GMAT/GRE), LDA (Google News), systèmes de recommandation, diagnostic médical.

Objectifs d’apprentissage

À l’issue de cette série, vous serez capable de :

  1. Construire un modèle probabiliste en Infer.NET (définition, inférence, validation)
  2. Interpréter les distributions postérieures (moyenne, variance, intervalles de crédibilité)
  3. Lire un graphe de facteurs et comprendre le flux de messages
  4. Appliquer la théorie de la décision bayésienne (utilité espérée, EVPI, MDPs)
  5. Comparer deux familles d’algorithmes sur les mêmes modèles : le message passing sur graphe de facteurs (Infer.NET, EP par défaut) et l’échantillonnage MCMC (PyMC, NUTS par défaut)

Vue d’ensemble

# Notebook Durée Concepts
1 Infer-1-Setup 15 min Installation, premier modèle
2 Infer-2-Gaussian-Mixtures 50 min Postérieurs, mélanges, Dirichlet
2b Infer-2b-Debugging-Bonnes-Pratiques 45 min Troubleshooting, diagnostics, algorithmes
3 Infer-3-Factor-Graphs 45 min Inférence discrète, Monty Hall
4 Infer-4-Bayesian-Networks 55 min CPT, D-séparation, causalité
5 Infer-5-Causal-Inference 65 min do-calculus, backdoor/front-door, paradoxe de Simpson
7 Infer-7-Skills-IRT 60 min IRT, DINA, many-to-many — MBML Ch.2 « Assessing People’s Skills »
8 Infer-8-TrueSkill 55 min Ranking, online learning, équipes — MBML Ch.3 « Meeting Your Match »
8b Infer-8b-TrueSkill-Formules-Fermees 30 min Formes fermées V(t)/W(t) de Herbrich-Minka-Graepel 2007, vérification exacte contre le moteur EP, diagnostics de convergence EP et ordonnancement des messages
9 Infer-9-Classification 50 min BPM, régression logistique, A/B, calibration hors échantillon (Brier/AUC/fiabilité)
10 Infer-10-Model-Selection 45 min Evidence, Bayes factors, ARD
11 Infer-11-Topic-Models 60 min LDA, documents-topics-mots
12 Infer-12-Modeles-Hierarchiques 50 min Modèles hiérarchiques, pooling partiel, shrinkage, VariableArray indexé
13 Infer-13-Crowdsourcing 55 min Workers, communautés, agrégation
14 Infer-14-Sequences 65 min HMM, séries temporelles, motifs
15 Infer-15-Recommenders 60 min Factorisation, Click Model
16 Infer-16-Sparse-Gaussian-Process 55 min Processus gaussiens, noyau RBF, classification non-linéaire, sparse GP
17 Infer-17-Kalman-Filter 55 min Filtre de Kalman, système dynamique linéaire gaussien, conjugaison, EP exacte
18 Infer-18-Change-Point 50 min Détection de rupture, DiscreteUniform, ForEach + If/IfNot sur plage, EP, Poisson
19 Infer-19-Survival-Analysis 50 min Analyse de survie, Exponentielle conjugée (Gamma), Weibull par transformée, S(t) forme fermée, censure à droite exécutée (ConstrainPositive vs Kaplan–Meier)

Théorie de la décision : les notebooks de décision (utilité, EVPI, MDPs, Thompson Sampling, plus les companions Lean) forment désormais un arc autonome dans ../DecisionTheory/DecInfer/, adossé au lake decision_theory_lean.

Durée totale : ~14h50 (corpus bayésien 1-19)

Ressource complémentaire : Glossaire - Définitions des termes techniques

Prérequis

  • .NET 9.0 ou supérieur
  • .NET Interactive / Polyglot Notebooks
  • VS Code avec extension Polyglot Notebooks (recommandé)
  • Graphviz (optionnel, pour visualisation des factor graphs)

Installation

1. .NET SDK 9.0+

# Installer depuis https://dotnet.microsoft.com/download
# Vérifier l'installation
dotnet --version

2. Kernel dotnet-interactive

dotnet tool install -g Microsoft.dotnet-interactive
dotnet interactive jupyter install

3. Ou utiliser le script d’environnement (recommandé)

# Windows (PowerShell) — installe dotnet-interactive, papermill et enregistre les kernels :
cd MyIA.AI.Notebooks/Probas/Infer/scripts
.\setup_environment.ps1

# Linux / macOS (bash) — jumeau du dépôt (même périmètre : dotnet-interactive,
# papermill, kernels Jupyter) :
./scripts/environment/setup_environment.sh --auto-fix

Le script de série setup_environment.ps1 est Windows-only. Sur Linux/macOS, le jumeau setup_environment.sh couvre le même setup. Guide d’installation complet 3 OS : docs/reference/setup-linux-macos.md.

4. Extension VS Code

Installer l’extension “Polyglot Notebooks” depuis le marketplace VS Code.

5. Packages NuGet (automatique)

Chaque notebook inclut les références nécessaires :

#r "nuget: Microsoft.ML.Probabilistic"
#r "nuget: Microsoft.ML.Probabilistic.Compiler"

6. Graphviz (optionnel)

Pour les visualisations de factor graphs dans les notebooks 11, 14-19 :

# Windows (chocolatey)
choco install graphviz

# macOS (via Homebrew)
brew install graphviz

# Linux (Debian/Ubuntu)
sudo apt install graphviz

# Ou téléchargement direct depuis https://graphviz.org/download/

Vérification

jupyter kernelspec list  # doit afficher .net-csharp et python3

Tester tous les notebooks

python MyIA.AI.Notebooks/Probas/Infer/scripts/test_notebooks.py --validate-only

Progression Pédagogique

flowchart TD
    P1["<b>Fondamentaux</b> (1-3)<br/>inference · distributions · graphes de facteurs"]
    P2["<b>Modèles classiques</b> (4-13)<br/>réseaux bayésiens · causalité · IRT · TrueSkill · classification · sélection · LDA · hiérarchique · crowdsourcing"]
    P5["<b>Référence</b> · Debugging (accrétion 2b)<br/>comparaison algorithmes"]
    P8["<b>Frontières</b> (14-19)<br/>causalité · GP sparse · hiérarchique · Kalman · change-point · survie"]
    DT["<b>Théorie de la décision</b><br/>arc autonome : ../DecisionTheory/DecInfer/"]
    P1 --> P2
    P2 --> P8
    P5 -.->|"diagnostics<br/>à tout moment"| P2
    P5 -.-> P8
    P8 -.->|"décision séquentielle,<br/>Thompson, Gittins"| DT
    %% color: explicite -- sans lui, libelle clair sur fond clair en mode sombre GitHub (#15022) ; ne pas harmoniser le ton avec le stroke (libelle sinon illisible)
    classDef decision fill:#d1ecf1,stroke:#0c5460,stroke-width:2px,color:#0c5460;
    class DT decision;

Le corpus (1-19, le numéro 6 n’existe pas — le debugging vit en accrétion Infer-2b) se suit en séquence ; l’accrétion Debugging y joue un rôle transversal — elle compare aussi les trois algorithmes (EP/VMP/Gibbs) et sert de référence dès qu’une inférence dysfonctionne. Les notebooks 14-19 (Frontières) prolongent le corpus bayésien (causalité, processus gaussiens, modèles hiérarchiques, filtre de Kalman, détection de rupture, analyse de survie). La théorie de la décision — utilité espérée, EVPI, MDPs, Thompson Sampling, plus les companions Lean (indice de Gittins) — forme désormais un arc autonome dans ../DecisionTheory/DecInfer/, adossé au lake decision_theory_lean. Le détail notebook-par-notebook figure dans les sections détaillées ci-dessous.


Fondamentaux (Notebooks 1-3)

Les notebooks 1-3 introduisent les concepts fondamentaux de la programmation probabiliste avec Infer.NET.

Infer-1 : Configuration et Premier Modèle

Durée : 45 min | Prérequis : Notions de probabilités

Objectifs :

  • Installer et configurer Infer.NET dans .NET Interactive
  • Comprendre le workflow en 3 étapes : Modèle → Moteur → Inférence
  • Implémenter un premier modèle bayésien (Two Coins)
  • Maîtriser les priors conjugués Beta-Bernoulli

Sections :

  1. Configuration de l’environnement (.NET Interactive, CompilerChoice.Roslyn)
  2. Introduction à la programmation probabiliste
  3. Exemple : Problème des deux pièces (Two Coins)
  4. Exemple avancé : Estimation de pièce biaisée avec prior Beta
  5. Apprentissage en ligne : mise à jour séquentielle

Concepts clés :

Concept Description
Variable<T> Représentation des quantités incertaines
Prior conjugué Beta-Bernoulli pour inférence analytique
ExpectationPropagation Algorithme d’inférence par défaut

Applications : Estimation de pièce biaisée, apprentissage en ligne


Infer-2 : Distributions Continues et Mélanges

Durée : 50 min | Prérequis : Notebook 1

Objectifs :

  • Modéliser des données continues avec distributions gaussiennes
  • Maîtriser les priors conjugués Gaussian-Gaussian et Gamma-Gamma
  • Implémenter l’apprentissage en ligne
  • Découvrir les modèles de mélange avec Variable.Switch

Sections :

  1. Modélisation de temps de trajet de cycliste
  2. Priors conjugués et apprentissage en ligne
  3. Mélanges gaussiens pour données multimodales
  4. Visualisation des factor graphs

Concepts clés :

Distribution Usage Paramètres
Gaussian Quantités continues mean, precision
Gamma Prior sur precision shape, scale
Variable.Switch Sélection de composante index, values

Applications : Temps de trajet cycliste, détection de modes multiples, clustering


Infer-3 : Graphes de Facteurs et Inférence Discrète

Durée : 55 min | Prérequis : Notebooks 1-2

Objectifs :

  • Comprendre la représentation en graphes de facteurs
  • Maîtriser Variable.If/IfNot et Variable.Case pour branchements
  • Observer le phénomène d’explaining away
  • Implémenter le paradoxe de Monty Hall

Sections :

  1. Introduction aux graphes de facteurs
  2. Exemple Murder Mystery (MBML Ch.1)
  3. Paradoxe de Monty Hall avec Variable.Case
  4. Phénomène Explaining Away
  5. Visualisation Graphviz

Concepts clés :

Structure Usage Exemple
Variable.If Conditionnement binaire P(Y|X=true)
Variable.Case Conditionnement multi-value Switch sur enum
Explaining away Causes alternatives P(A|B,C) < P(A|C)

Applications : Murder Mystery, Monty Hall (2/3 vs 1/3), systèmes experts


Modèles Classiques (Notebooks 4-6)

Les notebooks 4-6 couvrent les modèles bayésiens classiques : réseaux, compétences et classement.

Infer-4 : Réseaux Bayésiens

Durée : 60 min | Prérequis : Notebook 3

Objectifs :

  • Construire des réseaux bayésiens avec tables de probabilité conditionnelle (CPT)
  • Comprendre D-séparation et indépendance conditionnelle
  • Distinguer inférence causale (do) vs observationnelle
  • Implémenter des modèles hiérarchiques

Sections :

  1. Réseau Wet Grass/Sprinkler/Rain
  2. Construction de CPTs avec Variable.Case
  3. D-séparation et indépendance
  4. Inférence causale vs observationnelle
  5. Modèle hiérarchique Rats (BUGS)

Concepts clés :

Concept Formule Description
CPT P(X | Parents(X)) Table de probabilité conditionnelle
D-séparation - Critère graphique d’indépendance
do-calculus P(Y | do(X)) ≠ P(Y | X) Intervention vs observation
Hiérarchique θᵢ ~ F(λ) Pooling partiel entre groupes

Applications : Wet Grass, diagnostic médical, modèle Rats (8 laboratoires)


Infer-7 : Théorie de la Réponse à l’Item (IRT)

Durée : 65 min | Prérequis : Notebook 4

Objectifs :

  • Implémenter IRT (Item Response Theory) Difficulty-Ability
  • Découvrir DINA pour compétences discrètes
  • Modéliser les paramètres slip et guess
  • Gérer les relations many-to-many avec Q-matrix
  • Évaluer avec courbes ROC

Sections :

  1. Modèle IRT Difficulty-Ability (continu)
  2. Modèle DINA avec compétences binaires
  3. Paramètres slip et guess
  4. Q-matrix pour compétences multiples
  5. Évaluation ROC

Concepts clés :

Modèle Formule Usage
IRT P(correct) = σ(ability - difficulty) Compétence continue
DINA ηᵢⱼ = Πₖ αⱼₖ^qᵢₖ Compétences binaires
Slip P(erreur | maîtrise) Erreur d’inattention
Guess P(succès | non-maîtrise) Réponse au hasard

Applications : Tests éducatifs, diagnostic de compétences, adaptive testing


Infer-8 : TrueSkill

Durée : 50 min | Prérequis : Notebook 2

Objectifs :

  • Comprendre le système TrueSkill (Xbox Live)
  • Modéliser le skill comme Gaussian(μ, σ²)
  • Gérer les matchs avec ConstrainBetween
  • Implémenter l’apprentissage en ligne
  • Étendre au 2v2 et free-for-all

Sections :

  1. Modèle TrueSkill de base (1v1)
  2. Représentation du skill : N(μ, σ²)
  3. Modeling matches avec performance = skill + bruit
  4. Gestion des ex-aequo
  5. Extensions : Teams (2v2), Multi-player

Concepts clés :

Composant Formule Description
Skill N(μ, σ²) Niveau + incertitude
Performance pᵢ = skillᵢ + N(0, β²) Skill + bruit de match
Team skill Σ skills individuels Somme des membres
Update μ_new ∝ surprise Plus grande si upset

Applications : Classement Xbox Live, tournois esports, matchmaking équilibré


Infer-8b : TrueSkill — Formules Fermées

Durée : 30 min | Prérequis : Infer-8-TrueSkill

Objectifs :

  • Dériver les fonctions de troncature V(t) et W(t) (cas à 2 joueurs)
  • Implémenter la mise à jour closed-form — O(1) par match, sans inférence compilée
  • Vérifier numériquement la cohérence exacte avec le moteur EP d’Infer.NET
  • Comprendre le terme de dynamique τ² (équilibre contraction / regrowth)

Concepts clés :

Composant Formule Description
Troncature V(t) = φ(t)/Φ(t) Ratio densité/CDF de la Gaussienne réduite
Troncature W(t) = V(t)(V(t)+t) Contraction de la variance
Mise à jour μ’ = μ ± (σ²/c)·V(t) Déplacement du skill, signé gagnant/perdant
Variance σ’² = σ²(1 − (σ²/c²)·W(t)) Contraction bornée par le ratio σ²/c²
Dynamique σ² ← σ² + τ² Régrowth entre matchs : l’incertitude d’un inactif remonte

Applications : Vélocité de production Xbox Live — la lettre isole la contribution algorithmique du papier (Herbrich, Minka & Graepel, NeurIPS 2007) que le moteur EP d’Infer-8 calcule sous le capot.

Contenus ajoutés (croissance #17981) :

  • Diagnostics de convergence EP sur matchs couplés — trajectoire, point fixe, et écart mesuré au postérieur exact (quadrature 1D) : l’approximation factorisée est surconfiante, le schéma online O(1) reste plus fidèle
  • Ordonnancement des messages — séquentiel (Gauss-Seidel) vs parallèle (Jacobi) : même point fixe, vitesse de convergence mesurée (~2× moins de balayages en séquentiel)

Classification et Sélection (Notebooks 7-8)

Les notebooks 7-8 couvrent la classification bayésienne et la sélection de modèles.

Infer-9 : Classification Bayésienne

Durée : 55 min | Prérequis : Notebook 4

Objectifs :

  • Implémenter la régression logistique bayésienne (probit model)
  • Découvrir le Bayes Point Machine (BPM)
  • Modéliser les tests A/B cliniques avec Beta-Binomial
  • Propager l’incertitude dans les prédictions

Sections :

  1. Régression logistique bayésienne (probit)
  2. Bayes Point Machine (BPM) multi-features
  3. Test A/B clinique avec Beta-Binomial
  4. Propagation d’incertitude
  5. Exercice : Classification de spam

Concepts clés :

Modèle Formule Description
Probit P(y=1|x) = Φ(w·x) CDF gaussienne
BPM Moyenne du posterior sur w Classification robuste
Beta-Binomial Hiérarchique pour proportions Test A/B

Applications : Classification spam/ham, test A/B clinique, détection d’anomalies


Infer-10 : Sélection de Modèles

Durée : 50 min | Prérequis : Notebook 7

Objectifs :

  • Calculer l’evidence (marginal likelihood)
  • Comparer modèles avec Bayes Factor
  • Comprendre Occam’s Razor automatique
  • Implémenter ARD (Automatic Relevance Determination)

Sections :

  1. Evidence et marginal likelihood
  2. Bayes Factor pour comparaison de modèles
  3. Occam’s Razor : pénalisation automatique
  4. ARD pour sélection de features
  5. LOO-CV bayésien vs fréquentiste

Concepts clés :

Concept Formule Interprétation
Evidence P(D|M) = ∫ P(D|θ)P(θ|M)dθ Vraisemblance marginale
Bayes Factor BF₁₂ = P(D|M₁) / P(D|M₂) >10 = forte evidence
ARD wᵢ ~ N(0, λᵢ⁻¹) λᵢ → ∞ si non pertinent

Applications : Comparaison polynômes, feature selection, model averaging


Modèles Avancés (Notebooks 9-12)

Les notebooks 9-12 couvrent les modèles avancés : topics, crowdsourcing, séquences et recommandation.

Infer-11 : Topic Models (LDA)

Durée : 60 min | Prérequis : Notebook 4

Objectifs :

  • Implémenter LDA (Latent Dirichlet Allocation)
  • Maîtriser les priors Dirichlet
  • Résoudre la convergence VMP vers solutions dégénérées
  • Utiliser des priors asymétriques

Sections :

  1. Introduction à LDA et bag-of-words
  2. Priors Dirichlet conjugués
  3. Problème : VMP + priors symétriques → modes dégénérés
  4. Solution : Priors asymétriques
  5. Prédiction sur nouveaux documents

Concepts clés :

Composant Distribution Rôle
θ_d Dirichlet(α) Proportions topics/document
z_dn Categorical(θ_d) Topic du mot n
φ_k Dirichlet(β) Distribution mots/topic

Note : Utilise VMP au lieu d’EP pour les modèles LDA.

Applications : Analyse de corpus, détection de thèmes, recommandation de contenu


Infer-13 : Crowdsourcing

Durée : 55 min | Prérequis : Notebook 4

Objectifs :

  • Agréger des annotations de multiples annotateurs
  • Modéliser Honest Worker (capacité unique)
  • Implémenter Biased Worker (matrice de confusion)
  • Découvrir le modèle Community
  • Appliquer l’apprentissage actif

Sections :

  1. Modèle Honest Worker
  2. Modèle Biased Worker (matrice de confusion)
  3. Modèle Community (groupes hiérarchiques)
  4. Active learning : sélection d’items
  5. Gold standard pour calibration

Concepts clés :

Modèle Formule Description
Honest P(label|true, worker) = α_worker Capacité unique
Biased C_worker[true, observed] Matrice de confusion
Uncertainty H(c | y₁:ₙ) Entropie pour active learning

Applications : Amazon Mechanical Turk, contrôle qualité, optimisation budget annotation


Infer-14 : Séquences (HMM)

Durée : 65 min | Prérequis : Notebook 10

Objectifs :

  • Comprendre les Hidden Markov Models (HMM)
  • Implémenter les émissions gaussiennes
  • Décoder les séquences d’états cachés
  • Appliquer au motif finding (bioinformatique)

Sections :

  1. Introduction aux HMM
  2. HMM avec émissions gaussiennes
  3. Approche simplifiée : classification indépendante
  4. HMM complet avec Forward-Backward
  5. Détection de régimes météo
  6. Motif finding ADN
  7. Exercice : Détection de promotions

Concepts clés :

Algorithme Formule Usage
Forward αₜ(k) = P(x₁:ₜ, zₜ=k) Probabilité jointe
Backward βₜ(k) = P(xₜ₊₁:T | zₜ=k) Complément
Posterior γₜ(k) ∝ αₜ(k)·βₜ(k) État à chaque t

Note : Infer.NET ne supporte pas nativement les HMM complets. Implémentation manuelle Forward-Backward recommandée.

Applications : Détection d’anomalies capteur, prévision météo, motif finding ADN


Infer-15 : Systèmes de Recommandation

Durée : 70 min | Prérequis : Notebook 7

Objectifs :

  • Implémenter la factorisation matricielle probabiliste
  • Gérer le cold-start avec features
  • Découvrir le Click Model pour sources multiples
  • Classer des documents par pertinence

Sections :

  1. Introduction aux systèmes de recommandation
  2. Factorisation matricielle (User × Item traits)
  3. Problème de sous-détermination avec peu de données
  4. Cold-start : régression avec features
  5. Click Model : agrégation de sources
  6. Classement de documents
  7. Exercice : Recommandation de films

Concepts clés :

Modèle Formule Description
Factorisation R_ui ≈ U_u · I_i Traits latents
Cold-start R ~ w·features Features utilisateur/item
Click Model P(click) = P(examine) × P(relevant) Sources multiples

Applications : Netflix/Amazon, moteurs de recherche, e-commerce


Référence (Infer-2b)

Infer-2b : Debugging et Bonnes Pratiques

Durée : 60 min | Prérequis : Tous les notebooks précédents

Objectifs :

  • Diagnostiquer les erreurs courantes
  • Comparer EP vs VMP
  • Maîtriser les outils de debug Infer.NET
  • Appliquer les bonnes pratiques

Sections :

  1. Erreurs courantes et solutions
  2. Comparaison EP vs VMP
  3. Outils de debug (ShowFactorGraph, BrowserMode)
  4. Bonnes pratiques de modélisation
  5. Checklist de debugging
  6. Fonctions de diagnostic
  7. Exercice : Debugger un modèle bugué

Problèmes courants :

Problème Symptôme Solution
Observed + Inferred PointMass Ne pas ObservedValue sur variable inférée
Label switching Modes symétriques Priors asymétriques
Variance nulle IsPointMass = true Vérifier prior, observations
Convergence lente Iterations > 50 Vérifier graphe, utiliser VMP

Comparaison EP vs VMP :

Critère EP VMP
Exactitude Exact (gaussiennes) Approximation
Vitesse Plus lent Rapide
Convergence Garantie Peut diverger

Bonnes pratiques :

  1. Nommer toutes les variables : .Named("theta")
  2. Vérifier le factor graph systématiquement
  3. Tester avec données simulées
  4. Choisir priors informatifs (Beta(2,2) > Beta(1,1))
  5. Valider posteriors (variance > 0, IsProper = true)

Théorie de la Décision (arc autonome)

Les notebooks de théorie de la décision — fondements de l’utilité (axiomes vNM, aversion au risque), utilité multi-attributs, réseaux de décision, valeur de l’information (EVPI/EVSI), systèmes experts (Minimax/regret), décisions séquentielles (MDPs), Thompson Sampling bayésien, plus les companions Lean (preuve formelle du théorème vNM, cohérence de de Finetti et indice de Gittins) — constituent désormais un arc autonome dans ../DecisionTheory/DecInfer/, adossé au lake decision_theory_lean.

Cette extraction clarifie les deux fils du corpus Probas : la modélisation bayésienne (ce README, notebooks 1-19) et la théorie de la décision (DecisionTheory/). Voir le README de DecisionTheory pour la vue d’ensemble, la progression pédagogique et le détail notebook-par-notebook.


Inférence Causale (Notebook 5)

Infer-5 : Inférence Causale et do-calculus

Durée : 65 min | Prérequis : Notebook 4 (réseaux bayésiens, CPT, D-séparation)

Objectifs :

  • Distinguer observation P(Y|X) et intervention P(Y|do(X)) (Pearl, 2000)
  • Implémenter le do-opérateur par mutilation de graphe (Variable.Bernoulli(1.0) coupe l’arc parent)
  • Calculer l’effet causal via backdoor et front-door adjustment
  • Reconnaître et résoudre causalement le paradoxe de Simpson
  • Aborder le contrefactuel (Niveau 3 de l’échelle de Pearl)

Concepts clés :

Concept Formule Description
do-opérateur P(Y\|do(X)) Intervention : coupe les arcs entrants de X
Backdoor Σ_u P(Y\|X,u)P(u) Ajustement quand le confondeur U est observé
Front-door Σ_m P(M\|X)Σ_{x'} P(Y\|M,x')P(x') Ajustement par médiateur quand U est inobservable
Simpson agrégé ≠ conditionnel Renversement : la conclusion s’inverse

Positionnement : le notebook Infer-4 n’abordait la causalité qu’en deux cellules isolées. Infer-5 en fait un traitement dédié et distributionnel : les effets causaux sont calculés par le moteur d’inférence Infer.NET via mutilation de graphe, là où le jumeau symbolique Tweety-11-Causal raisonne en Java propositionnel, et où PyMC-4 démontre P(Cloudy|do(Rain)) en MCMC.

Ponts causaux : Infer-5 est le maillon distributionnel par message passing (Infer.NET, EP/VMP) d’un pont à quatre paradigmes autour du do(·) de Pearl — le jumeau symbolique Tweety-11-Causal (Java propositionnel), le jumeau MCMC PyMC-5, et la lecture par l’émergence causale ICT-5, où la distribution d’intervention p(C) uniforme est do(X_t = x). Vue d’ensemble : le README IIT, section « Ponts causaux : le do-calculus de Pearl à travers les paradigmes ».

Applications : baromètre (confondeur), diagnostic médical (paradoxe de Simpson), tabac-cancer (front-door), requêtes contrefactuelles.


Modèles Non-Linéaires (Notebook 16)

Infer-16 : Processus Gaussiens et frontières non-linéaires

Prolongement naturel de la classification bayésienne : là où Infer-9 (Bayes Point Machine) trace un hyperplan, le processus gaussien place un prior sur des fonctions (noyau RBF) et infère une frontière courbe et incertaine.

Durée : 55 min | Prérequis : Infer-9-Classification (BPM, modèle probit), Infer-2-Gaussian-Mixtures, Infer-12-Modeles-Hierarchiques (prior partagé = plus robuste qu’un prior isolé)

Objectifs :

  • Comprendre le processus gaussien comme une distribution sur des fonctions (moyenne + noyau de covariance)
  • Construire un prior via le noyau squared-exponential (RBF) et sa longueur de corrélation
  • Implémenter la classification GP (modèle probit y = [f(x) > 0]) sur des données non-linéairement séparables
  • Mesurer le rôle du basis set (points inducteurs) dans l’approximation sparse vs full
  • Contraster avec le Bayes Point Machine : frontière linéaire vs courbe, coût \(O(nm^2)\) vs linéaire

Concepts clés :

Concept Formule / API Description
Prior sur fonctions Variable<IFunction>.Random(prior) Distribution sur \(f\), pas sur un vecteur de poids
Noyau RBF \(k(x,x') = \exp(-\lVert x-x'\rVert^2 / 2\ell^2)\) Covariance décroissant avec la distance
Modèle probit \(y_j = [f(x_j) + \varepsilon_j > 0]\) Score = fonction (non-linéaire), bruit gaussien
Sparse GP SparseGPFixed(gp, basis) Approximation sur \(m\) points inducteurs, coût \(O(nm^2)\)
Full GP basis = inputs (\(m = n\)) Équivalent au GP non-sparse, coût \(O(n^3)\)

Positionnement : Infer-9 introduisait le Bayes Point Machine (hyperplan séparateur, marginalisation sur les poids). Infer-16 en est le complément non-linéaire : le GP infère une fonction \(f\) tirée d’un processus gaussien, capable de frontières courbes. La démonstration sur un dataset « donut » (disque intérieur + anneau extérieur, non-séparable linéairement) prouve que le GP résout ce que le BPM ne peut pas — 16/16 sur le training, avec une incertitude calibrée (P ≈ 0.5 à mi-rayon, la zone d’indécision). La comparaison sparse (4 inducteurs) vs full (16) illustre le continuum coût-exactitude.

Applications : classification non-linéaire, régression avec incertitude calibrée, géostatistique (krigeage), optimisation bayésienne (l’acquisition exploite le posterior GP).


Modèles Hiérarchiques (Notebook 15)

Infer-12 : Modèles Hiérarchiques Bayésiens

Cas d’école du pooling partiel : quand les données sont structurées en groupes (élèves dans des classes, patients dans des hôpitaux, mesures répétées), ni le complete pooling (un seul paramètre global qui gomme la variabilité entre groupes) ni le no pooling (un paramètre indépendant par groupe qui surajuste les groupes clairsemés) ne sont satisfaisants. La solution bayésienne donne à chaque groupe son propre paramètre theta[c], mais tous tirés d’une loi de population commune (mu, tau) — les groupes mal informés rétractent (shrinkage) vers la moyenne globale.

Durée : 50 min | Prérequis : Infer-2-Gaussian-Mixtures (prior gaussien, précision), Infer-4-Bayesian-Networks (modèle Rats hiérarchique en deux cellules)

Objectifs :

  • Comprendre le dilemme complete-pool / no-pool / partial-pool sur des groupes inégalement informés
  • Construire un modèle hiérarchique natif Infer.NET : theta[c] ~ Gaussian(mu, tau) via VariableArray indexé par theta[classOfI[i]]
  • Observer le shrinkage sur données synthétiques à vrais effets connus : les groupes clairsemés (effectif 1-2) rétractent vers mu
  • Mesurer le gain de récupération (MSE hiérarchique vs no-pooling) et le rôle auto-calibré de la précision de population tau
  • Prédire pour un nouveau groupe non observé (posterior prédictif = loi de population)

Concepts clés :

Concept Formule / API Description
Prior de population mu ~ Gaussian(0, grand), tau ~ Gamma Loi commune dont chaque groupe est tiré
Effet de groupe theta[c] = GaussianFromMeanAndPrecision(mu, tau).ForEach(c) Un paramètre par groupe, partagé
Indexation y[i] ~ Gaussian(theta[classOfI[i]], obsPrec) Rattachement observation → groupe
Shrinkage theta[c] ↔︎ compromis données/moyenne Plus fort pour les groupes clairsemés

Positionnement : le notebook Infer-4 effleurait le modèle Rats (8 laboratoires) en deux cellules ; Infer-12 en fait un traitement dédié et démonstratif — données synthétiques avec vrais effets connus, comparaison no-pool vs partial-pool mesurée en MSE de récupération. Le gain net (hierarchique bat le no-pooling) et la rétraction visible sur les groupes clairsemés prouvent que le prior de population partagé emprunte de la force statistique aux voisins — exactement le paradigme pour lequel Infer.NET (EP analytique sur gaussiennes, VariableArray + indexation) est un moteur natif, sans recours au MCMC.

Applications : estimations par établissement/classe, essais multi-centres, mesures répétées par sujet, modèles de recommandation (cf Infer-15), régressions à coefficients variables par groupe.


Filtrage et séquences continues (Notebook 17)

Infer-17 : Filtre de Kalman (système dynamique linéaire gaussien)

Le filtre de Kalman (Kalman, 1960) est l’analogue à état continu du HMM d’Infer-14 : l’état caché \(x_t\) (position, température, prix) évolue linéairement avec un bruit gaussien (la dynamique, variance \(Q\)), et on l’observe à travers un autre bruit gaussien (le capteur, variance \(R\)). Parce que tout est linéaire et gaussien, l’inférence est exactement conjugée : le postérieur reste gaussien à chaque pas, calculable en temps fermé — c’est le cas d’école où Infer.NET (EP) résout l’inférence de manière exacte, sans MCMC ni approximation variationnelle.

Durée : 55 min | Prérequis : Infer-14-Sequences (HMM, structure markovienne), Infer-2-Gaussian-Mixtures (conjugaison gaussienne)

Objectifs :

  • Comprendre le filtre de Kalman comme le pendant continu du HMM discret
  • Formuler un système dynamique linéaire gaussien (équations de transition et d’observation)
  • Implémenter la récursion de filtrage bayésien (prédiction + mise à jour) via Infer.NET, en compilant le mini-modèle une fois et en le réutilisant via ObservedValue
  • Mesurer l’apport du filtre : MSE filtrée vs MSE brute, variance postérieure bornée (équation de Riccati)

Concepts clés :

Concept Formule / API Description
Transition x[t] ~ N(x[t-1] + drift, Q) Dynamique : l’état évolue avec du bruit
Observation y[t] ~ N(x[t], R) Capteur bruité de l’état caché
Prédiction propager le postérieur (variance += Q) L’incertitude croît entre deux observations
Mise à jour engine.Infer<Gaussian>(x) (EP) Conjugaison : postérieur gaussien exact
Borne de variance équation de Riccati discrète L’incertitude résiduelle plafonne (filtre fiable)

Positionnement : Infer-14 couvrait le HMM à état discret (météo, mots) ; Infer-17 franchit le pas vers l’état continu — le filtre le plus utilisé au monde (navigation GPS, fusion de capteurs, contrôle, finance). La récursion pas-à-pas compile le mini-modèle linéaire-gaussien une fois (Variable.New<double> + ObservedValue), et EP retourne le postérieur exact qui sert d’a priori au pas suivant. Sur une trajectoire dérivante fortement bruitée (\(R = 4 \gg Q = 0{,}5\)), le filtre réduit l’erreur de ~74 % (MSE brute 4,88 → filtrée 1,28) et borne la variance postérieure vers 1,2 (vs \(R = 4\)) — la signature d’un filtre qui aide.

Applications : suivi de mobiles, navigation inertielle et GPS, fusion multi-capteurs, filtrage de signaux, tracking financier, estimation d’état en robotique et contrôle.

Infer-18 : Détection de rupture (change-point bayésien)

Le point de rupture (change-point) modélise une série qui suit un régime stable, puis bascule une seule fois vers un autre régime à un instant cp inconnu. Contrairement au HMM d’Infer-14 (état discret récurrent) et au filtre de Kalman d’Infer-17 (état continu récurrent), l’inconnue n’est pas une trajectoire d’états mais un unique entier — l’indice de la rupture. L’idiome Infer.NET : un a priori Variable.DiscreteUniform(N) sur cp, une sélection de vraisemblance Variable.If(block.Index <= cp) / IfNot à l’intérieur d’un Variable.ForEach sur la plage temporelle, et le moteur EP qui retourne un postérieur Discrete sur la localisation de la rupture.

Durée : 50 min | Prérequis : Infer-14-Sequences (Variable.ForEach), Infer-2-Gaussian-Mixtures (conjugaison), Infer-10-Model-Selection (Bayes factors)

Objectifs :

  • Comprendre le change-point comme le quatrième membre de la famille « séquences dans le temps » (HMM, Kalman, GP, rupture)
  • Maîtriser l’idiome DiscreteUniform + ForEach + If(block.Index <= cp) couplé à une plage
  • Construire le modèle gaussien (saut de moyenne) et le modèle de Poisson (saut de taux — cas canonique des catastrophes minières)
  • Mesurer la concentration du postérieur (entropie) et comprendre le piège du surajustement — pourquoi un Bayes factor est nécessaire pour distinguer une vraie rupture d’un caprice du bruit

Concepts clés :

Concept API Description
Localisation de rupture Variable.DiscreteUniform(N) A priori uniforme sur l’indice entier cp
Sélection de régime Variable.If(block.Index <= cp) / IfNot Branche la vraisemblance avant/après la rupture
Postérieur discret ie.Infer<Discrete>(cp) Vecteur de probabilités sur les \(N\) positions
Initialisation EP taux.InitialiseTo(...) EP déterministe : amorcer les taux évite les optima locaux
Concentration entropie \(H(\text{cp})\) \(H \to 0\) = rupture certaine ; le Bayes factor teste sa réalite (cf. Infer-8)

Positionnement : Infer-14 et Infer-17 infèrent un état récurrent (un par pas) ; Infer-18 infère un indice structurel unique couplé à toute la plage — un usage du If sur une plage qu’aucun autre notebook n’exploite. Sur le cas gaussien, EP récupère le vrai point caché exactement (mode = 50, masse 0,998) ; sur les catastrophes minières (1851–1962), la rupture est datée à 1890–1891 (taux 3,1 → 0,9, rapport 3,3×), soit le résultat canonique de la littérature. Le notebook pointe aussi vers Infer-5 (Causal) : un point de rupture est un changement de mécanisme générateur.

Applications : contrôle qualité (dérive de production), finance (changement de régime de marché), épidémiologie, surveillance de capteurs, datation d’événements structurels en sciences sociales et climatiques.


Concepts Clés Infer.NET

Types de Variables

Type Description Exemple
Variable<bool> Variable booléenne Variable.Bernoulli(0.5)
Variable<double> Variable continue Variable.GaussianFromMeanAndVariance(0, 1)
Variable<int> Variable discrète Variable.DiscreteUniform(5)
VariableArray<T> Tableau 1D Variable.Array<double>(range)
VariableArray2D<T> Tableau 2D Variable.Array<double>(range1, range2)

Distributions

Distribution Usage Paramètres
Bernoulli Bool prob
Gaussian Continue mean, variance/precision
Gamma Precision shape, scale
Beta Probabilité alpha, beta
Dirichlet Proportions concentrations
Discrete Catégorique probs

Structures de Contrôle

// Conditionnement
using (Variable.If(condition)) { ... }
using (Variable.IfNot(condition)) { ... }

// Sélection (switch)
using (Variable.Switch(variable)) { ... }
using (Variable.Case(variable, value)) { ... }

// Boucles
using (Variable.ForEach(range)) { ... }

Inférence

InferenceEngine moteur = new InferenceEngine();
moteur.Compiler.CompilerChoice = CompilerChoice.Roslyn;  // Important pour notebooks
moteur.Algorithm = new ExpectationPropagation();         // ou VariationalMessagePassing

var posterior = moteur.Infer<DistributionType>(variable);

Structure des Fichiers

Infer/
+-- Infer-1-Setup.ipynb ... Infer-19-Survival-Analysis.ipynb   # 19 notebooks (Infer-11 = Topic-Models)
+-- Infer-Glossary.md
+-- FactorGraphHelper.cs          # Helper pour visualisation Graphviz
+-- README.md
+-- data/                         # Datasets (murder_mystery.json, matches.csv, skills_quiz.csv, ...)
+-- scripts/                      # Scripts de maintenance

Le companion Lean 4 (preuves formelles de l’indice de Gittins) vit dans l’arc théorie de la décision : ../DecisionTheory/DecInfer/DecInfer-08b-Lean-Gittins.ipynb (post-renumérotation #5200).

Domaines d’Application

Domaine Modèles Notebooks
Jeux vidéo TrueSkill, ranking 8
Éducation IRT, DINA, compétences 7
NLP LDA, topics 11
Médecine Diagnostic bayésien, test A/B, analyse de survie 4, 9, 19
Crowdsourcing Agrégation d’annotations 13
Finance Détection de régimes (rupture) 18
E-commerce Recommandation, factorisation 15
Bioinformatique Motif finding (HMM, ADN) 14
Suivi, fusion de capteurs Filtre de Kalman 17
Contrôle qualité Détection de rupture (dérive de production) 18

Les applications de théorie de la décision — MDPs, valeur de l’information (EVPI/EVSI), aversion au risque, Thompson Sampling, indice de Gittins — vivent dans l’arc autonome ../DecisionTheory/DecInfer/.

Sources et Références

Documentation Officielle

Livre de Référence

Références Théorie de la Décision

  • von Neumann & Morgenstern (1944) : Theory of Games and Economic Behavior
  • Arrow (1965) : Aspects of the Theory of Risk Bearing
  • Keeney & Raiffa (1976) : Decisions with Multiple Objectives
  • Howard (1966) : Information Value Theory
  • Bellman (1957) : Dynamic Programming

Exemples Utilisés

  • WetGrassSprinklerRain (Bayesian Networks)
  • Murder Mystery (Factor Graphs, MBML Ch1)
  • TrueSkill (Ranking, MBML Ch3)
  • StudentSkills (IRT/DINA, MBML Ch2)
  • ClinicalTrial (A/B Testing)
  • LDA (Topic Models)
  • Crowdsourcing (MBML Ch7)
  • RecommenderSystem (Factorisation)
  • ClickModel (Multi-vues)
  • St-Petersburg Paradox (Decision Theory)
  • Investment Portfolio (Decision Networks)
  • Medical Diagnosis (Expert Systems)
  • Inventory Management (MDPs)

Algorithmes d’Inférence

Algorithme Avantage Utilisation
EP (Expectation Propagation) Rapide, approximatif Par défaut
VMP (Variational Message Passing) Converge toujours Modèles complexes
Gibbs Sampling Exact (asymptotique) Petits modèles

FAQ / Troubleshooting

Pour un guide complet, voir Infer-2b-Debugging-Bonnes-Pratiques.

Problème Solution
The type 'Variable' does not contain a definition for... Vérifier que le namespace MicrosoftResearch.Infer est importé. Le notebook 1 (Setup) couvre la configuration
Inference exception: Improper distribution Le modèle contient une boucle causale ou une observation contradictoire. Le notebook 6 (Debugging) détaille les stratégies de diagnostic
Algorithm compilation failed Infer.NET compile un algorithme d’inférence par reflection. Vérifier que le modèle est dans une famille supportée (conjugué). Modèles non-conjugués nécessitent EP ou VMP
Performance lente sur les grands modèles Utiliser InferenceEngine.Compiler.ShowGeneratedSource = true pour inspecter le code généré. Le notebook 6 compare les algorithmes EP/VMP/Gibbs
.NET kernel non disponible Installer .NET Interactive : dotnet tool install --global Microsoft.dotnet-interactive

Erreur de compilation

moteur.Compiler.CompilerChoice = CompilerChoice.Roslyn;

Cette ligne est obligatoire pour les notebooks .NET Interactive.

Convergence lente

  • Réduire le nombre d’itérations : moteur.NumberOfIterations = 50
  • Simplifier le modèle
  • Utiliser VMP au lieu d’EP

Mémoire insuffisante

  • Réduire la taille des tableaux
  • Utiliser des boucles ForEach au lieu de développements explicites

Factor Graph non affiché

  • Vérifier que Graphviz est installé et dans le PATH
  • Vérifier que FactorGraphHelper.cs est présent dans le répertoire
  • Essayer engine.ShowFactorGraph = true avant l’inférence

Erreurs Infer.NET connues

Documentées lors du développement des notebooks de décision (désormais dans ../DecisionTheory/DecInfer/), ces pièges s’appliquent à tout le corpus.

  • Beta.GetQuantile n’existe pas : utiliser l’approximation normale pour les intervalles de crédibilité
  • ShowFactorGraph peut causer un crash du kernel : utiliser avec précaution

Glossaire

Consultez le Glossaire pour les définitions des termes techniques (EP, VMP, Factor Graph, EVPI, MDP, etc.)

Ponts inter-series

Série Lien Relation
PyMC Même 19 modèles en Python/NUTS Message passing (EP) vs MCMC (NUTS)
Probas (parent) Vue d’ensemble Probas Contexte et parcours
ML.NET TP prévision de ventes Combine ML.NET + Infer.NET
Search/CSP CSP-5 (Optimization) Programmation par contraintes et probabilités
SymbolicAI/Lean Infer-11 (Gittins, DecisionTheory) Preuves formelles Lean 4

Conclusion / Prochaines étapes

Ce que vous avez appris

Cette série vous a fait parcourir l’arc complet de la programmation probabiliste en .NET : des fondamentaux (variables Variable<T>, InferenceEngine, compilation Roslyn — Infer-1-Setup à Infer-3-Factor-Graphs) aux modèles relationnels avancés (réseaux bayésiens, IRT, TrueSkill, LDA, HMM, recommandation — notebooks 4 à 12), jusqu’aux frontières (causalité, processus gaussiens, modèles hiérarchiques, filtre de Kalman — notebooks 14 à 17). La théorie de la décision (utilité espérée, EVPI/EVSI, MDPs, bandits) forme un arc autonome dans ../DecisionTheory/DecInfer/, dont le capstone formel Lean 4 (DecInfer-08b-Lean-Gittins) démontre l’indice de Gittins. Trois acquis clés :

  • Penser en factor graphs et message passing — Infer.NET propose trois moteurs sur le graphe de facteurs : EP (message passing déterministe, rapide, par défaut, approximatif), VMP (déterministe, converge sur les modèles complexes) et Gibbs (échantillonnage, exact asymptotiquement). Les factor graphs (rendus via FactorGraphHelper et Graphviz) exposent la structure du modèle, pas seulement ses posteriors.
  • Lire et choisir son algorithme d’inférence — contrairement à un échantillonneur générique, Infer.NET compile un algorithme dédié par modèle (reflection + Roslyn). Vous savez désormais quand le message passing déterministe (EP/VMP) sur modèles conjugués et structurés est avantageux, et quand il faut céder la place à MCMC.
  • Relier inference et décision, jusqu’à la preuve — l’arc ../DecisionTheory/DecInfer/ ferme la boucle (un posterior est l’input d’une politique optimale sous incertitude), et le companion Lean DecInfer-08b-Lean-Gittins pousse la rigueur jusqu’à la preuve formelle Lean 4 de l’indice de Gittins.

Prochaines étapes

  • Le double regard MCMC — le port PyMC reprend les 19 mêmes modèles en NUTS : alterner chaque jumeau pour comparer le message passing sur graphe de facteurs (Infer.NET, EP par défaut) et l’échantillonnage MCMC (PyMC, NUTS) sur des modèles identiques.
  • Le capstone ML.NET — ML.NET combine ML.NET et Infer.NET (TP de prévision de ventes) : une mise en pratique où l’incertitude bayésienne complète une pipeline ML classique.
  • Les ponts latéraux — Search/Part2-CSP (CSP-5, optimisation sous contraintes) et le glossaire prolongent la modélisation déclarative.

Le fil rouge

Le fil rouge de cette série est la compilation d’un algorithme d’inférence dédié : à partir du modèle déclaratif, Infer.NET génère (via Roslyn) un solveur spécialisé qui propage des messages sur le graphe de facteurs. Ses moteurs par défaut — EP et VMP — exploitent la conjugaison des distributions pour des mises à jour déterministes en forme close, rapides et sans diagnostics de convergence ; un moteur de Gibbs (échantillonnage) prend le relais quand la conjugaison fait défaut. Là où PyMC fait tourner un échantillonneur MCMC générique sur une densité compilée, Infer.NET compile l’algorithme lui-même. Le capstone Lean 4 (DecInfer-08b-Lean-Gittins, dans l’arc DecisionTheory) élève ce fil rouge jusqu’à la preuve formelle : l’indice de Gittins n’est plus seulement calculé, il est démontré. Maîtriser Infer.NET, c’est savoir quand la structure d’un modèle se prête au message passing sur graphe de facteurs plutôt qu’à l’échantillonnage MCMC de PyMC.

Bonne exploration de la programmation probabiliste et de la théorie de la décision !

Retour au sommet