Cours
Vous avez déjà tenté de visualiser une distribution pour obtenir un histogramme qui change de forme à chaque fois que vous modifiez la taille des classes ?
Voici ce qui se passe généralement. Vous choisissez 10 classes et la courbe paraît fluide. Puis vous passez à 30 et plusieurs pics apparaissent. Les données n’ont pas changé, mais des nombres de classes différents mènent à des interprétations différentes. C’est le principal problème des histogrammes : ils ne montrent pas la distribution, mais une de ses versions. Et cette version dépend d’un paramètre que vous fixez de manière arbitraire.
La KDE adopte une autre approche. Au lieu de découper les données en classes, elle place une petite courbe lisse sur chaque point de données et les additionne. Cela fournit une estimation unique et continue de la distribution sous-jacente.
Dans cet article, vous verrez l’intuition derrière la KDE, un décryptage de la formule, une explication du rôle de la largeur de bande sur le lissage, ainsi que des exemples concrets en Python et en R.
Nouveau sur les histogrammes ? Voici un guide complet des histogrammes de fréquences pour bien démarrer.
Qu’est-ce que l’estimation de densité par noyau ?
L’estimation de densité par noyau est une méthode non paramétrique pour estimer la fonction de densité de probabilité d’un jeu de données.
La partie non paramétrique fait toute la différence.
Avec les méthodes paramétriques, vous supposez que vos données suivent une distribution donnée — normale, exponentielle — puis vous ajustez des paramètres pour la faire correspondre. Si cette hypothèse est fausse, votre modèle l’est aussi. La KDE n’impose pas ce type d’hypothèses. Elle laisse les données « parler » et construit une estimation de la distribution sous-jacente directement à partir des observations.
Le résultat est une courbe lisse qui montre où les valeurs ont le plus de chances de se situer — et avec quelle intensité. Les points hauts de la courbe indiquent des zones denses. Les points bas, des zones clairsemées.
Pourquoi utiliser l’estimation de densité par noyau ?
Par défaut, on visualise les distributions avec des histogrammes, mais ils ont un défaut : la forme observée dépend du nombre de classes choisi. Et ce paramètre vous revient. Deux personnes peuvent regarder le même jeu de données et parvenir à des conclusions opposées en choisissant des nombres de classes différents.
Avec la KDE, au lieu de forcer les données dans des classes, on obtient une courbe lisse et continue qui ne varie pas en fonction d’un paramètre arbitraire fixé au départ.
C’est utile pour plusieurs raisons :
- Visualiser la forme globale d’une distribution sans biais lié à la taille des classes
- Détecter des motifs comme des pics multiples, une asymétrie ou des queues épaisses
- Comparer des distributions entre groupes sur le même graphique
- Obtenir une vue plus claire de vos données avant le modélisation
L’intuition derrière la KDE
Vous prenez chaque point de données et vous placez dessus une petite courbe lisse. Cette courbe s’appelle un noyau. Ensuite, vous additionnez toutes ces courbes individuelles.
Vous obtenez une courbe lisse unique qui montre la densité de vos données. Là où les points se regroupent, les noyaux se chevauchent et s’additionnent, la courbe monte. Là où les données sont rares, les noyaux se recouvrent peu et la courbe reste basse. Chaque point contribue de manière égale à l’estimation finale.
Imaginez que vous ayez relevé les notes finales d’une classe. Au lieu de les regrouper dans un histogramme, la KDE place une petite courbe lisse sur chaque note. Là où les notes se concentrent — par exemple autour de 70–75 — les courbes s’empilent et l’estimation grimpe. Un seul élève à 95 n’ajoute qu’une petite bosse dans la queue.
Le visuel ci-dessous illustre exactement cela. La plupart des élèves sont autour de la moyenne, et un élève a une note nettement supérieure :

KDE visualisée
La formule de l’estimation de densité par noyau
La formule de la KDE paraît plus intimidante qu’elle ne l’est.

Formule de la KDE
Voici ce que signifie chaque terme :
-
nest le nombre de points de données -
x_isont les observations individuelles de votre jeu de données -
Kest la fonction noyau — la courbe lisse placée sur chaque point -
hest la largeur de bande — elle contrôle l’« épaisseur » de chaque noyau -
xest le point où vous évaluez la densité
En clair, la formule dit : pour tout point x, regardez à quelle distance se trouve chaque point de données x_i, pondérez cette proximité via la fonction noyau K, puis faites la moyenne sur les n points. Répétez l’opération pour chaque x de l’intervalle et vous obtenez la courbe de densité complète.
La largeur de bande h apparaît au dénominateur de la fraction à l’intérieur de K. Un h plus petit rend le noyau plus étroit : seuls les points très proches influencent l’estimation. Un h plus grand élargit l’influence. Nous y revenons plus loin dans l’article.
Qu’est-ce qu’une fonction noyau ?
Le noyau est la courbe lisse que vous placez sur chaque point de données. Il définit comment l’influence de ce point se propage vers ses voisins.
Chaque noyau est centré sur un point et attribue des poids selon la distance. Les points proches du centre sont fortement pondérés. Les points éloignés le sont faiblement, voire pas du tout. La forme exacte de cette pondération dépend du noyau choisi.
Trois choix sont courants :
- Gaussien : la courbe en cloche. Elle attribue un poids à chaque point du jeu de données, avec une influence qui décroît avec la distance. C’est le défaut dans la plupart des bibliothèques et cela fonctionne bien en pratique
- Uniforme : un rectangle plat. Tous les points dans une distance fixe reçoivent le même poids, et rien au-delà. Simple, mais produit des estimations moins lisses
- Epanechnikov : une forme parabolique, optimale au sens de l’erreur quadratique moyenne. Plus efficace que le gaussien, mais la différence est rarement visible en pratique.
Dans la plupart des cas, le choix du noyau importe peu. Deux noyaux différents appliqués aux mêmes données avec la même largeur de bande produiront des courbes presque identiques. Ce qui compte bien davantage, c’est la largeur de bande — et c’est ce que nous abordons ensuite.
Le rôle de la largeur de bande en KDE
La largeur de bande est le paramètre qui a le plus d’impact sur votre KDE, davantage même que le noyau choisi.
Elle contrôle la largeur de chaque noyau. Un noyau étroit ne fait intervenir que les points voisins. Un noyau large étale l’influence sur une zone bien plus vaste. Le résultat est soit une courbe au plus près des données, soit une courbe qui lisse fortement.
Petite largeur de bande
Une petite largeur de bande rend chaque noyau serré et étroit. L’estimation réagit vivement à chaque point, ce qui permet de capter la structure réelle, mais aussi le bruit.
En pratique, cela ressemble à une courbe hérissée avec de nombreux petits pics. Certains reflètent de vrais regroupements, d’autres ne sont que des artefacts d’un lissage insuffisant. Difficile de faire la part des choses : c’est tout le problème.

KDE avec petite largeur de bande
Grande largeur de bande
Une grande largeur de bande élargit chaque noyau. Les noyaux voisins se recouvrent et la courbe finale est très lisse.
Si le lissage est excessif, vous perdez de la structure réelle. Deux groupes distincts peuvent se fondre en une seule bosse. Une distribution à queue épaisse peut paraître symétrique. La visualisation peut vous masquer des informations.

KDE avec grande largeur de bande
Trouver la bonne largeur de bande
Il n’existe pas de largeur de bande universellement correcte. L’objectif est de trouver une valeur suffisamment lisse pour filtrer le bruit, mais pas au point d’effacer les motifs réels.
La plupart des bibliothèques proposent des méthodes automatiques de sélection de largeur de bande. La règle empirique de Silverman est la plus répandue. Elle choisit une largeur de bande selon la taille de l’échantillon et l’écart-type des données. Elle marche bien pour des distributions à peu près normales, mais peut sur‑lisser des distributions multimodales.
En cas de doute, testez quelques valeurs et comparez les courbes. Les différences vous en diront long sur vos données.
KDE vs histogramme
Histogrammes et KDE montrent tous deux la distribution de vos données — mais de manière très différente.
Histogramme
Un histogramme divise vos données en classes discrètes et compte combien de points tombent dans chaque classe. C’est rapide, intuitif et facile à expliquer à un public non technique.
Le problème, c’est la sensibilité au nombre de classes. Si vous changez ce nombre, la forme change. Il n’existe pas de nombre « objectif » de classes, ce qui veut dire que deux personnes peuvent tirer des conclusions différentes d’un même jeu de données rien qu’en variant ce choix.
Les histogrammes produisent aussi une forme en marches d’escalier, discontinue. Pratique pour un premier aperçu, mais cela peut masquer la distribution réelle.
KDE
La KDE fournit une courbe lisse et continue, sans classes. Elle révèle mieux la forme réelle d’une distribution — asymétrie, pics multiples, queues épaisses — qu’un histogramme peut rater ou déformer selon le choix des classes.
En contrepartie, la KDE introduit son propre paramètre — la largeur de bande — et demande plus de calcul. Elle est aussi moins intuitive à expliquer, car l’axe des ordonnées représente une densité de probabilité, pas des effectifs, ce qui peut dérouter un lectorat non initié.
Quand utiliser l’un ou l’autre
Utilisez un histogramme pour un résumé rapide et lisible de vos données, ou si votre audience n’est pas familière des estimations de densité. Utilisez la KDE quand la forme de la distribution compte — par exemple pour comparer des groupes ou détecter la multimodalité.

Histogramme comparé à la KDE
En pratique, on les combine souvent : un histogramme pour les effectifs, une courbe KDE superposée pour la forme.
Estimation de densité par noyau en Python
En Python, plusieurs options s’offrent à vous pour calculer et tracer une KDE, selon que vous voulez un graphique rapide ou un contrôle fin de l’estimation.
Visualiser une KDE avec seaborn
La voie la plus rapide pour un tracé KDE est seaborn.kdeplot(). Voici tout ce qu’il faut :
import seaborn as sns
import numpy as np
np.random.seed(42)
scores = np.concatenate([
np.random.normal(65, 4, 60),
np.random.normal(80, 3, 40)
])
sns.kdeplot(scores, bw_adjust=1)

KDE avec seaborn
Le paramètre bw_adjust met à l’échelle la largeur de bande choisie automatiquement. Des valeurs inférieures à 1 resserrent la courbe, des valeurs supérieures la lissent. C’est un multiplicateur appliqué à la largeur de bande interne de seaborn, vous n’avez donc pas besoin de définir vous‑même une valeur brute.
L’axe des ordonnées affiche une densité de probabilité, pas des comptes. La courbe indique la probabilité relative des valeurs. Plus haut signifie plus de données concentrées à cet endroit.
Calculer une KDE avec scipy
Si vous avez besoin des valeurs de densité — pas seulement d’un tracé — utilisez scipy.stats.gaussian_kde. Vous obtenez un objet appelable que vous pouvez évaluer en tout point.
from scipy.stats import gaussian_kde
import numpy as np
import matplotlib.pyplot as plt
kde = gaussian_kde(scores, bw_method="scott")
x = np.linspace(45, 100, 500)
density = kde(x)
plt.plot(x, density)
bw_method="scott" applique la règle de Scott pour sélectionner automatiquement la largeur de bande. C’est un bon défaut dans la plupart des cas. Vous pouvez aussi passer un scalaire pour la fixer manuellement.

KDE avec scipy et matplotlib
Estimation de densité par noyau en R
En R, la KDE est disponible en base. Aucun package supplémentaire n’est requis.
Calculer une KDE avec density()
La fonction density() prend un vecteur numérique et renvoie un objet KDE.
set.seed(42)
scores <- c(rnorm(60, mean = 65, sd = 4),
rnorm(40, mean = 80, sd = 3))
kde <- density(scores, bw = "SJ")
L’argument bw contrôle la sélection de la largeur de bande. "SJ" utilise la méthode de Sheather–Jones, plus adaptée aux distributions multimodales que le défaut. Vous pouvez aussi passer une valeur numérique pour définir la largeur de bande manuellement.
Le résultat est une liste avec deux composants clés :
kde$x: la suite de points où la densité a été évaluéekde$y: les valeurs de densité correspondantes
Tracer la courbe
Passez simplement le résultat à plot().
plot(kde,
main = "Exam Score Distribution",
xlab = "Score",
ylab = "Density")

KDE tracée dans R
Pour superposer la KDE sur un histogramme, utilisez d’abord hist() avec freq = FALSE, puis ajoutez la courbe avec lines().
hist(scores, freq = FALSE, main = "Histogram + KDE", xlab = "Score")
lines(kde, col = "blue", lwd = 2)

Histogramme avec KDE dans R
freq = FALSE met l’histogramme à l’échelle en densité afin que les barres et la courbe partagent le même axe des ordonnées.
Avantages et limites de la KDE
La KDE est un outil visuel vraiment utile, mais comme tout, elle comporte des compromis à connaître avant d’en faire un substitut des histogrammes.
Avantages
Son atout majeur : la KDE ne fait aucune hypothèse sur la distribution de vos données. Pas besoin de décider à l’avance si vos données sont normales, exponentielles, etc. La forme vient des données elles‑mêmes, ce qui rend la KDE assez flexible pour gérer les distributions multimodales et tout ce qui ne rentre pas dans un moule paramétrique standard.
Le résultat est aussi une courbe lisse et continue plutôt qu’une approximation en paliers. Cela facilite l’identification de motifs — pics multiples, longues queues — qu’un histogramme pourrait masquer selon le nombre de classes.
Et parce que la KDE opère directement sur les données, sans ajuster de modèle au préalable, c’est une excellente première étape en analyse exploratoire.
Limites
Le choix de la largeur de bande est sa principale faiblesse. S’il est mal choisi, l’estimation suit le bruit ou, à l’inverse, gomme des motifs réels. Les méthodes automatiques comme la règle de Silverman fonctionnent bien pour des données à peu près normales, mais peuvent induire en erreur avec des distributions complexes. Il est souvent nécessaire de tester manuellement quelques valeurs avant de se fier au résultat.
Les performances peuvent devenir un enjeu à l’échelle. La KDE évalue une fonction noyau pour chaque point de données et pour chaque point d’évaluation, ce qui fait rapidement exploser le coût de calcul quand le jeu de données grossit. Pour la plupart des analyses exploratoires ce n’est pas un problème, mais cela peut devenir lent avec des centaines de milliers de points.
Les effets de bord sont un problème plus subtil. La KDE standard suppose des données pouvant s’étendre à l’infini dans les deux sens. Si votre variable a une borne dure — comme des valeurs qui ne peuvent pas être négatives — l’estimation « fuit » de la masse de probabilité au‑delà de la borne, produisant une courbe artificiellement basse près du bord. Il existe des variantes corrigées des bords, mais elles sont moins répandues dans les bibliothèques standards.
Conclusion
La KDE offre une lecture plus claire de la distribution de vos données que les histogrammes. Pas de choix de classes ni d’hypothèses paramétriques — juste une courbe lisse qui reflète réellement votre jeu de données.
La largeur de bande est le seul paramètre qui compte vraiment. Testez quelques valeurs, comparez les courbes, utilisez les options automatiques, et assurez‑vous que l’estimation est cohérente avec votre connaissance du terrain avant d’en tirer des conclusions.
Le meilleur moyen d’affiner votre intuition sur la KDE est de l’appliquer à des données réelles. Choisissez un jeu de données que vous connaissez déjà, appliquez la KDE et comparez avec un histogramme pour voir ce qui vous échappait.
Vous vous intéressez à la visualisation de données ? Découvrez notre cours Data Visualization with Seaborn si vous utilisez Python, ou Data Visualization with ggplot2 si vous utilisez R.
FAQs
À quoi sert l’estimation de densité par noyau ?
La KDE sert à estimer la distribution de probabilité d’un jeu de données sans supposer une forme spécifique comme la normale ou l’exponentielle. Elle est couramment utilisée en analyse exploratoire, lorsque vous souhaitez visualiser la répartition des données avant de modéliser. On l’utilise aussi pour la détection d’anomalies, la comparaison de distributions entre groupes et comme étape de lissage dans des pipelines statistiques.
En quoi la KDE diffère-t-elle d’un histogramme ?
Un histogramme découpe les données en classes discrètes et compte combien de points tombent dans chaque classe. La forme obtenue dépend du nombre de classes, ce qui la rend sensible à un paramètre arbitraire. La KDE évite cela en plaçant une courbe lisse sur chaque point puis en les additionnant, ce qui fournit une estimation continue qui ne change pas avec le nombre de classes.
Faut-il un grand jeu de données pour utiliser la KDE ?
La KDE fonctionne sur de petits jeux de données, mais les estimations sont moins fiables avec très peu de points. Avec des données limitées, chaque observation pèse lourd dans la courbe finale, ce qui complique la distinction entre structure réelle et bruit. À mesure que l’échantillon grandit, l’estimation se stabilise et reflète mieux la distribution réelle.
Que se passe‑t‑il si vous choisissez une mauvaise largeur de bande ?
Une largeur de bande trop petite produit une courbe hérissée qui réagit à chaque point, rendant la forme globale difficile à lire. Une largeur de bande trop grande sur‑lisse l’estimation et peut fusionner des pics distincts en une seule bosse, masquant la structure réelle. La plupart des bibliothèques proposent des sélections automatiques comme la règle de Silverman pour démarrer, mais il est recommandé de tester manuellement quelques valeurs avant de conclure.
La KDE fonctionne‑t‑elle bien près des bornes de vos données ?
La KDE standard suppose des données s’étendant à l’infini dans les deux sens, ce qui pose problème quand votre variable a une borne inférieure ou supérieure — comme l’âge, le revenu, ou tout décompte ne pouvant être négatif. Près de ces bornes, l’estimation « débordera » du domaine valide, rendant la courbe artificiellement basse aux extrémités. Des méthodes de KDE corrigées aux bords existent, mais elles ne sont pas présentes dans toutes les bibliothèques et demandent une configuration supplémentaire.
