Accéder au contenu principal

Tutoriel sur les lois de probabilité en Python

Dans ce tutoriel, vous découvrirez et coderez en Python les principales lois de probabilité couramment citées dans la littérature en apprentissage automatique.
Actualisé 19 sept. 2026  · 15 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Introduction

\n

Les probabilités et les statistiques constituent les fondations de la data science. En réalité, l’apprentissage automatique et l’intelligence artificielle reposent essentiellement sur les mathématiques statistiques et l’algèbre linéaire. En data science, vous serez souvent amené à lire des articles de recherche très mathématiques pour comprendre un sujet précis. Pour progresser, il est donc indispensable d’avoir de solides bases en mathématiques. Ce tutoriel présente les lois de probabilité les plus courantes dans la littérature en apprentissage automatique. Si vous débutez, vous êtes au bon endroit. Dans ce tutoriel, vous allez :

\n
    \n
  • Découvrir le vocabulaire des probabilités comme les variables aléatoires, la courbe de densité, les fonctions de probabilité, etc.
  • \n
  • Explorer différentes lois de probabilité et leurs fonctions associées, ainsi que certaines de leurs propriétés.
  • \n
  • Apprendre à créer et tracer ces distributions en Python.
  • \n
\n

Avant de commencer, il est utile de revoir quelques définitions mathématiques, ce que couvre la section suivante.

\n

Variable aléatoire

\n

Une variable aléatoire est une variable dont les valeurs possibles sont des issues numériques d’un phénomène aléatoire. On distingue deux types de variables aléatoires : discrètes et continues.

\n

Une variable aléatoire discrète ne peut prendre qu’un nombre dénombrable de valeurs distinctes et peut donc être quantifiée. Par exemple, on peut définir une variable aléatoire $X$ comme le nombre obtenu au lancer d’un dé équilibré. $X$ peut prendre les valeurs : $[1,2,3,4,5,6]$ et est donc une variable aléatoire discrète.

\n

La loi de probabilité d’une variable aléatoire discrète est la liste des probabilités associées à chacune de ses valeurs possibles. On l’appelle aussi fonction de probabilité ou fonction de masse. Formellement, supposons qu’une variable aléatoire $X$ puisse prendre $k$ valeurs différentes, la probabilité que $X = x_{i}$ étant définie par $P(X = x_{i}) = p_{i}$. Alors les probabilités $p_{i}$ doivent vérifier :

\n

1 : 0 < $p_{i}$ < 1 pour tout $i$

\n

2 : $p_{1} + p_{2} + ... + p_{k} = 1$.

\n

Parmi les exemples de lois discrètes : Bernoulli, binomiale, Poisson, etc.

\n

Une variable aléatoire continue peut prendre une infinité de valeurs possibles. Par exemple, on peut définir $X$ comme la taille des élèves d’une classe. Comme elle est définie sur un intervalle de valeurs, on la représente par l’aire sous une courbe (ou une intégrale).

\n

La loi d’une variable aléatoire continue, appelée fonction de densité de probabilité, est une fonction qui prend des valeurs continues. La probabilité d’observer une valeur précise est égale à $0$, car l’ensemble des valeurs possibles est infini. Par exemple, si une variable aléatoire $X$ peut prendre toutes les valeurs d’un intervalle de réels, la probabilité que $X$ appartienne à l’ensemble d’issues $A$, $P(A)$, est définie comme l’aire au-dessus de $A$ et sous une courbe. Cette courbe, qui représente une fonction $p(x)$, doit vérifier :

\n

1 : La courbe ne prend pas de valeurs négatives $(p(x) > 0$ pour tout $x$)

\n

2 : L’aire totale sous la courbe est égale à $1$.

\n

Une courbe respectant ces conditions est souvent appelée courbe de densité. Exemples de lois continues : normale, exponentielle, bêta, etc.

\n

Il existe un autre type de fonction très courant en littérature : la fonction de répartition (cumulative distribution function). Toutes les variables aléatoires (discrètes et continues) possèdent une fonction de répartition. Elle donne, pour chaque valeur $x$, la probabilité que la variable aléatoire $X$ soit inférieure ou égale à $x$. Pour une variable discrète, on l’obtient en cumulant les probabilités.

\n

Dans la prochaine section, vous étudierez quelques lois importantes et les manipulerez en Python. Mais avant cela, importez les bibliothèques nécessaires.

\n
# for inline plots in jupyter\n%matplotlib inline\n# import matplotlib\nimport matplotlib.pyplot as plt\n# for latex equations\nfrom IPython.display import Math, Latex\n# for displaying images\nfrom IPython.core.display import Image\n
\n
# import seaborn\nimport seaborn as sns\n# settings for seaborn plotting style\nsns.set(color_codes=True)\n# settings for seaborn plot sizes\nsns.set(rc={'figure.figsize':(5,5)})\n
\n

Exécutez et modifiez le code de ce tutoriel en ligne

Exécuter le code

Commencez à apprendre Python gratuitement

Fondamentaux des probabilités en Python

BasicSkill Level
5 h
16.1K learners
Apprenez les bases de la probabilité : variables aléatoires, moyenne, variance, distributions de probabilité et probabilités conditionnelles
See DetailsRight Arrow
Start Course

Loi uniforme continue

\n

L’une des lois les plus simples et utiles est la loi uniforme. La fonction de densité de probabilité de la loi uniforme continue est :

\n
\"Continuous
\n

Comme tout intervalle de même largeur a la même probabilité d’être observé, la courbe représentant la distribution est un rectangle, de hauteur constante sur l’intervalle et nulle ailleurs. Puisque l’aire sous la courbe doit être égale à 1, la longueur de l’intervalle détermine la hauteur. La figure suivante illustre une loi uniforme sur l’intervalle (a,b). Remarquez que, pour que l’aire vaille $1$, la hauteur est fixée à $1/(b-a)$.

\n
\"Visualize
\n

Loi uniforme en Python

\n

Vous pouvez visualiser une loi uniforme en Python à l’aide d’un générateur de nombres aléatoires sur un intervalle (a,b). Importez la fonction uniform depuis le module scipy.stats.

\n
# import uniform distribution\nfrom scipy.stats import uniform\n
\n

La fonction uniform génère une variable continue uniforme sur l’intervalle défini par ses arguments loc et scale. La distribution est constante entre loc et loc + scale. L’argument size indique le nombre de réalisations aléatoires. Pour assurer la reproductibilité, fournissez un random_state fixé à une valeur numérique.

\n
# random numbers from uniform distribution\nn = 10000\nstart = 10\nwidth = 20\ndata_uniform = uniform.rvs(size=n, loc = start, scale=width)\n
\n

Vous pouvez utiliser distplot de Seaborn pour tracer l’histogramme de la distribution créée. distplot accepte de nombreux arguments de personnalisation. Vous créez d’abord un objet de tracé ax. Vous pouvez préciser le nombre de bins de l’histogramme, la color des barres, activer la courbe de densité avec kde et régler l’épaisseur avec hist_kws. Vous pouvez aussi définir les étiquettes des axes x et y avec xlabel et ylabel.

\n
ax = sns.distplot(data_uniform,\n                  bins=100,\n                  kde=True,\n                  color='skyblue',\n                  hist_kws={\"linewidth\": 15,'alpha':1})\nax.set(xlabel='Uniform Distribution ', ylabel='Frequency')\n
\n
[Text(0,0.5,u'Frequency'), Text(0.5,0,u'Uniform Distribution ')]\n
\n
\"Graphed
\n

Loi normale

\n

La loi normale, ou loi gaussienne, est omniprésente en data science. Vous la retrouverez souvent, notamment en inférence statistique. De nombreux algorithmes de data science l’assument également.

\n

Une loi normale a une courbe en cloche décrite par sa moyenne $μ$ et son écart-type $σ$. La courbe est symétrique et centrée sur sa moyenne, l’étalement étant déterminé par l’écart-type : les données proches de la moyenne sont plus fréquentes que celles qui en sont éloignées. La fonction de densité d’une loi normale de moyenne $μ$ et d’écart-type $σ$ au point $x$ est donnée par :

\n
\"Normal
\n

Voici la forme typique de cette distribution :

\n
\"Visualization
\n

Environ 68 % des données se situent à une distance d’un écart-type de la moyenne de part et d’autre, et 95 % dans un intervalle de deux écarts-types. À noter également : une distribution de moyenne $0$ et d’écart-type $1$ s’appelle une loi normale centrée réduite.

\n

Loi normale en Python

\n

Vous pouvez générer une variable aléatoire normalement distribuée avec la méthode norm.rvs() du module scipy.stats. L’argument loc correspond à la moyenne, scale à l’écart-type et size au nombre de réalisations. Pour la reproductibilité, utilisez l’argument random_state.

\n
from scipy.stats import norm\n# generate random numbers from N(0,1)\ndata_normal = norm.rvs(size=10000,loc=0,scale=1)\n
\n

Vous pouvez visualiser la distribution comme pour l’uniforme, avec la fonction distplot de Seaborn. Les arguments ont la même signification que précédemment.

\n
ax = sns.distplot(data_normal,\n                  bins=100,\n                  kde=True,\n                  color='skyblue',\n                  hist_kws={\"linewidth\": 15,'alpha':1})\nax.set(xlabel='Normal Distribution', ylabel='Frequency')\n
\n
[Text(0,0.5,u'Frequency'), Text(0.5,0,u'Normal Distribution')]\n
\n
\"Graphed
\n

Loi gamma

\n

La loi gamma est une famille à deux paramètres de distributions de probabilité continues. Elle est rarement utilisée telle quelle, mais des lois très répandues comme les lois exponentielle, khi-deux ou Erlang en sont des cas particuliers. La loi gamma peut être paramétrée par un paramètre de forme $α = k$ et un paramètre d’échelle inverse $β = 1/θ$, appelé paramètre de taux. Le symbole $Γ(n)$ désigne la fonction gamma, définie par $(n-1)!$ :

\n
\"Gamma
\n

Voici l’allure typique d’une loi gamma :

\n
\"Visualization
\n

Loi gamma en Python

\n

Vous pouvez générer une variable aléatoire suivant une loi gamma avec la méthode gamma.rvs() du module scipy.stats, qui prend comme argument le paramètre de forme $a$. Lorsque $a$ est un entier, la gamma se réduit à la loi d’Erlang, et lorsque $a=1$ à la loi exponentielle. Utilisez loc pour décaler la distribution, scale pour la mettre à l’échelle, et size pour le nombre de réalisations. Pour la reproductibilité, utilisez random_state.

\n
from scipy.stats import gamma\ndata_gamma = gamma.rvs(a=5, size=10000)\n
\n

Vous pouvez visualiser la distribution comme pour l’uniforme, avec la fonction distplot de Seaborn. Les arguments ont la même signification que dans la section dédiée à l’uniforme.

\n
ax = sns.distplot(data_gamma,\n                  kde=True,\n                  bins=100,\n                  color='skyblue',\n                  hist_kws={\"linewidth\": 15,'alpha':1})\nax.set(xlabel='Gamma Distribution', ylabel='Frequency')\n
\n
[Text(0,0.5,u'Frequency'), Text(0.5,0,u'Gamma Distribution')]\n
\n
\"Graphed
\n

Loi exponentielle

\n

La loi exponentielle décrit le temps entre des événements d’un processus de Poisson, c’est-à-dire un processus où les événements surviennent de manière continue et indépendante à un taux moyen constant. Elle possède un paramètre $λ$, appelé paramètre de taux, et son équation s’écrit :

\n
\"Exponential
\n

Une loi exponentielle décroissante ressemble à ceci :

\n
\"Visualization
\n

Loi exponentielle en Python

\n

Vous pouvez générer une variable aléatoire exponentielle avec la méthode expon.rvs() du module scipy.stats, qui prend comme argument le paramètre scale correspondant à 1/lambda dans l’équation. Utilisez loc pour décaler, size pour le nombre de réalisations. Pour la reproductibilité, utilisez random_state.

\n
from scipy.stats import expon\ndata_expon = expon.rvs(scale=1,loc=0,size=1000)\n
\n

La visualisation avec Seaborn produit la courbe suivante :

\n
ax = sns.distplot(data_expon,\n                  kde=True,\n                  bins=100,\n                  color='skyblue',\n                  hist_kws={\"linewidth\": 15,'alpha':1})\nax.set(xlabel='Exponential Distribution', ylabel='Frequency')\n
\n
[Text(0,0.5,u'Frequency'), Text(0.5,0,u'Exponential Distribution')]\n
\n
\"Graphed
\n

Loi de Poisson

\n

La variable de Poisson sert généralement à modéliser le nombre d’occurrences d’un événement sur un intervalle de temps. Par exemple, le nombre d’utilisateurs visitant un site sur un intervalle peut être modélisé par un processus de Poisson. La loi de Poisson est décrite par le taux ($μ$) auquel les événements se produisent. Un événement peut survenir 0, 1, 2, … fois sur un intervalle. Le nombre moyen d’événements dans un intervalle est noté $λ$ (lambda). $\lambda$ est le taux d’événements, aussi appelé paramètre de taux. La probabilité d’observer $k$ événements dans un intervalle est donnée par :

\n
\"Poisson
\n

Remarque : la loi normale est un cas limite de la loi de Poisson lorsque $λ →∞$. De plus, si les temps entre événements aléatoires suivent une loi exponentielle de taux $λ$, alors le nombre total d’événements sur une durée $t$ suit une loi de Poisson de paramètre $λt$.

\n

La figure suivante illustre une distribution de Poisson typique :

\n
\"Visualization
\n

Loi de Poisson en Python

\n

Vous pouvez générer une variable aléatoire discrète de Poisson avec la méthode poisson.rvs() du module scipy.stats, qui prend $μ$ comme paramètre de forme (équivalent de $λ$ dans l’équation). Utilisez loc pour décaler la distribution. size fixe le nombre de réalisations. Pour la reproductibilité, utilisez random_state.

\n
from scipy.stats import poisson\ndata_poisson = poisson.rvs(mu=3, size=10000)\n
\n

Vous pouvez visualiser la distribution comme pour l’uniforme, avec la fonction distplot de Seaborn. Les arguments ont la même signification.

\n
ax = sns.distplot(data_poisson,\n                  bins=30,\n                  kde=False,\n                  color='skyblue',\n                  hist_kws={\"linewidth\": 15,'alpha':1})\nax.set(xlabel='Poisson Distribution', ylabel='Frequency')\n
\n
[Text(0,0.5,u'Frequency'), Text(0.5,0,u'Poisson Distribution')]\n
\n
\"Graphed
\n

Loi binomiale

\n

Une distribution où deux issues seulement sont possibles, par exemple succès/échec, gain/perte, victoire/défaite, et où la probabilité de succès et d’échec est identique pour toutes les épreuves, s’appelle une loi binomiale. Toutefois, les issues n’ont pas besoin d’être équiprobables et chaque épreuve est indépendante des autres. Les paramètres de la loi binomiale sont $n$ et $p$ où $n$ est le nombre total d’épreuves et $p$ la probabilité de succès à chaque épreuve. Sa fonction de probabilité est :

\n
\"Binomial
\n

où :

\n
\"Binomial
\n

Loi binomiale en Python

\n

Vous pouvez générer une variable aléatoire discrète binomiale avec la méthode binom.rvs() du module scipy.stats, qui prend $n$ (nombre d’épreuves) et $p$ (probabilité de succès) comme paramètres de forme. Utilisez loc pour décaler la distribution. size définit le nombre de répétitions des épreuves. Pour la reproductibilité, utilisez random_state.

\n
from scipy.stats import binom\ndata_binom = binom.rvs(n=10,p=0.8,size=10000)\n
\n

La visualisation avec distplot de Seaborn produit l’histogramme suivant :

\n
ax = sns.distplot(data_binom,\n                  kde=False,\n                  color='skyblue',\n                  hist_kws={\"linewidth\": 15,'alpha':1})\nax.set(xlabel='Binomial Distribution', ylabel='Frequency')\n
\n
[Text(0,0.5,u'Frequency'), Text(0.5,0,u'Binomial Distribution')]\n
\n
\"Graphed
\n

Remarque : puisque la probabilité de succès est supérieure à $0.5$, la distribution est asymétrique vers la droite. Par ailleurs, la loi de Poisson est un cas limite de la loi binomiale sous les conditions suivantes :

\n
    \n
  1. Le nombre d’épreuves est indéfiniment grand, $n → ∞$.
  2. \n
  3. La probabilité de succès à chaque épreuve est la même et tend vers 0, $p → 0$.
  4. \n
  5. $np = λ$ est fini.
  6. \n
\n

La loi normale est un autre cas limite de la loi binomiale lorsque :

\n
    \n
  1. Le nombre d’épreuves est indéfiniment grand, $n → ∞$.
  2. \n
  3. $p$ et $q$ ne sont pas indéfiniment petits.
  4. \n
\n

Loi de Bernoulli

\n

Une loi de Bernoulli n’a que deux issues possibles, $1$ (succès) et $0$ (échec), et une seule épreuve, par exemple un lancer de pièce. La variable aléatoire $X$ qui suit une loi de Bernoulli prend la valeur $1$ avec la probabilité de succès $p$, et la valeur $0$ avec la probabilité d’échec $q$ ou $1-p$. Les probabilités de succès et d’échec n’ont pas besoin d’être égales. La loi de Bernoulli est un cas particulier de la loi binomiale avec une seule épreuve ($n=1$). Sa fonction de masse est :

\n
\"Bernoulli
\n

Loi de Bernoulli en Python

\n

Vous pouvez générer une variable aléatoire discrète de Bernoulli avec la méthode bernoulli.rvs() du module scipy.stats, qui prend $p$ (probabilité de succès) comme paramètre de forme. Utilisez loc pour décaler la distribution. size définit le nombre de répétitions. Pour la reproductibilité, utilisez random_state.

\n
from scipy.stats import bernoulli\ndata_bern = bernoulli.rvs(size=10000,p=0.6)\n
\n

En visualisant la distribution, on observe bien qu’il n’y a que deux issues possibles :

\n
ax= sns.distplot(data_bern,\n                 kde=False,\n                 color=\"skyblue\",\n                 hist_kws={\"linewidth\": 15,'alpha':1})\nax.set(xlabel='Bernoulli Distribution', ylabel='Frequency')\n
\n
[Text(0,0.5,u'Frequency'), Text(0.5,0,u'Bernoulli Distribution')]\n
\n
\"Graphed
\n

Conclusion

\n

Félicitations, vous êtes arrivé au bout de ce tutoriel ! Vous avez passé en revue plusieurs lois de probabilité courantes et appris à les créer et les tracer en Python. Même s’il en existe bien d’autres, cela suffit pour démarrer. N’oubliez pas d’explorer la bibliothèque scipy de Python, qui propose de nombreuses fonctionnalités statistiques. Bonne exploration !

\n

Pour aller plus loin sur les probabilités en Python, suivez le cours Statistical Simulation in Python de DataCamp.

\n

Consultez aussi notre tutoriel Poker Probability and Statistics with Python.

\n

Références

\n
Sujets
Python
Analyse des données
Apprentissage automatique

Cours Python

Cours

Introduction à Python

4 h
7M
Apprenez les bases de l’analyse de données avec Python en quatre heures et explorez ses principaux packages.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow