La distribution gaussienne est la distribution de probabilité la plus importante en statistique. Elle l’est dans le domaine de la data science. En effet, de nombreux phénomènes naturels tels que la taille d’une population, la pression artérielle, la taille des chaussures, les statistiques scolaires comme les résultats aux examens, et bien d’autres aspects importants de la nature ont tendance à suivre une distribution gaussienne. Si vous souhaitez devenir Data Scientist, Data Analyst ou Data Engineer, il est donc nécessaire de comprendre et de savoir construire une courbe de Gauss.

Je suis sûr que vous avez déjà entendu ce terme et que vous le connaissez aussi dans une certaine mesure. Si ce n’est pas le cas, ne vous inquiétez pas. Cet article vous l’expliquera clairement. Vous allez également découvrir comment utiliser la distribution normale, ses paramètres et des cas pratiques en Python.

Qu’est-ce que la courbe de Gauss

courbe de gausse
Figure : encore appelée « courbe en cloche », ceci est la représentation d’une distribution normale

La courbe de Gauss, découverte par Carl Friedrich Gauss est une distribution de probabilité continue qui est symétrique autour de sa moyenne. En d’autres termes, c’est une distribution dans laquelle la plupart des observations se concentrent autour du pic central, et les probabilités pour les valeurs plus éloignées de la moyenne diminuent également dans les deux sens. Les valeurs extrêmes dans les deux queues de la distribution sont tout aussi improbables.

Comme toute distribution de probabilité, la distribution normale décrit la manière dont les valeurs d’une variable sont distribuées. Il s’agit de la distribution de probabilité la plus importante en statistique, car elle correspond à de nombreux phénomènes naturels. Par exemple, les hauteurs, la pression sanguine, les erreurs de mesure et les scores de QI suivent la distribution normale. Elle est également connue sous le nom de distribution normale et de courbe en cloche ou de distribution gaussienne.

Il y a plusieurs parties de l’apprentissage automatique qui tirent avantage de l’utilisation d’une distribution gaussienne. Ces domaines sont les suivants :

  •     Les processus gaussiens ;
  •     Inférence variationnelle ;
  •     L’apprentissage par renforcement.

Elle est également largement utilisée dans d’autres domaines d’application tels que :

  •    Le traitement du signal, par exemple le filtre de Kalman ;
  •     Le contrôle, par exemple le régulateur linéaire quadratique ;
  •     Les statistiques, comme les tests d’hypothèse.

Importance de la courbe de Gauss

Plusieurs aspects font que savoir la construction d’une courbe de Gauss est importante à maitriser :

  • Elle est toujours présente, car un ensemble de données avec une variance finie devient gaussien tant que l’on permet à l’ensemble de données avec des probabilités de caractéristiques libres d’augmenter en taille ;
  • Il s’agit de la distribution de probabilité la plus importante en statistique, car elle est à l’origine de nombreux phénomènes naturels tels que l’âge, la taille, les résultats de tests, les scores de QI, la somme des rouleaux de deux cubes, etc.
  • Les ensembles de données avec des distributions gaussiennes sont valides pour une diversité de méthodes qui diminuent sous les statistiques paramétriques.
  •  Les approches, par exemple la propagation de l’incertitude et la droite des paramètres des moindres carrés, ne sont liées qu’aux ensembles de données avec des distributions normales ou de type normal.
  •  Les examens et les conclusions résultant de cette analyse sont intuitifs. C’est aussi facile à expliquer à un public ayant des connaissances de base en statistiques.

Paramètres de la distribution gaussienne

La moyenne et l’écart-type sont les deux principaux paramètres d’une courbe de Gauss. C’est à l’aide de ces paramètres que nous pouvons déterminer la forme et les probabilités de la distribution en fonction de l’énoncé de notre problème. La forme de la distribution change lorsque la valeur du paramètre change.

Moyenne

Les scientifiques ont utilisé la moyenne ou la valeur moyenne comme une mesure de la tendance dominante. Elle décide de l’emplacement du pic. La plupart des points de données sont rassemblés autour de la moyenne dans un graphique de distribution normale. En modifiant la valeur de la moyenne, nous pouvons déplacer la courbe de la distribution gaussienne vers la gauche ou la droite le long de l’axe des X.

Écart-type

L’écart-type indique comment les points de données sont répartis par rapport à la moyenne. Il fixe la distance entre les points de données et la moyenne et caractérise la distance entre la moyenne et les points de données. Il décrit aussi la largeur du graphique. Par conséquent, en faisant varier la valeur de l’écart-type, on resserre ou on élargit la largeur de la distribution le long de l’axe des abscisses. Un écart-type plus faible par rapport à la moyenne donne une courbe raide et un écart-type plus grand donne une courbe plus plate.

courbe de gausse moyenne-ecart-type

Dans le cas d’une variable unique x, la distribution gaussienne peut s’écrire sous la forme :

distribution-gaussienne-variable-unique

où μ est la moyenne et σ2 est la variance. Pour un vecteur x à D dimensions, la distribution gaussienne multivariée prend la forme suivante :

distribution-gaussienne-vecteur-x-d-dimension

où μ est un vecteur moyen à D dimensions,

Σ est une matrice de covariance D ×D

et |Σ|désigne le déterminant de Σ

Étude de la courbe de Gauss avec Python

Voyons maintenant un exemple réel de la distribution gaussienne et mettons-la en œuvre en Python. Si vous ne maitrisez pas ce langage, vous pouvez retrouver le tutoriel complet de la programmation Python sur notre blog.

Ici, nous utilisons un ensemble de données contenant 25000 enregistrements des tailles(inches) et des poids(pounds) humains. (Source : SOCR Data Dinov 020108 HeightsWeights.)

Distribution de la hauteur (inches)

Nous allons étudier comment la hauteur(inches) est distribuée. Et vous devriez essayer d’étudier la distribution des poids(poids). Alors, commençons.

Maintenant, chargez ces données dans Python :

import numpy as np
from scipy.stats import norm
import pandas as pd
import matplotlib.pyplot as plt

path_csv = 'height_weight.csv'
population = pd.read_csv(path_csv)
print(population.head())

Voici ce que vous allez obtenir :

distribution de la hauteur

Maintenant, extrayez toutes les hauteurs des données :

population_height = population["Height(Inches)"]
print(population_height.head())

Le résultat de ces instructions est :

extraction-hauteur

 Maintenant, traçons un histogramme à partir de population_height :

fig, ax = plt.subplots()
num_bins = 100

# Histograme(PMF) des Tailles
counts, bins = np.histogram(population_height ,
							np.linspace(min(population_height),
										max(population_height),
										num_bins)
							)
ax.hist(population_height ,
		bins[:-1],
		facecolor='orange',
		alpha=0.5,
		color="b",
		weights=(1/sum(counts))*np.ones_like(population_height),
		label="Height's distribution")
plt.xlabel("Taille(Inches)")
plt.ylabel("Proportion de la taille se situant dans une certaine fourchette")
plt.show()
histogramme

L’histogramme semble être normalement distribué. Maintenant, inspectons visuellement si nos données suivent une distribution normale.

Comment pouvons-nous vérifier visuellement que nos données sont normalement distribuées ?

On peut dire que nous devrions imposer une distribution normale avec une moyenne empirique et une variance empirique sur l’histogramme des tailles et voir si nos données suivent une distribution normale.

La hauteur de l’histogramme indique la probabilité qu’une hauteur tombe dans une certaine fourchette, mais la hauteur d’une distribution normale n’indique pas la probabilité. Nous ne pouvons donc obtenir aucune information en imposant une distribution normale à notre histogramme.

Imposons une distribution normale à notre histogramme et voyons cela par nous-mêmes :

fig, ax = plt.subplots()
num_bins = 100

# Histogram(PMF) of Height
counts, bins = np.histogram(population_height ,
							np.linspace(min(population_height),
										max(population_height),
										num_bins)
							)
ax.hist(population_height ,
		bins[:-1],
		facecolor='orange',
		alpha=0.5,
		color="b",
		weights=(1/sum(counts))*np.ones_like(population_height),
		label="Distribution de la taille")
# PDF of Normal Distribution
mean, std = np.mean(population_height), np.std(population_height)
rvs = np.linspace(mean - 3*std, mean + 3*std, 100)
pdf = norm.pdf(rvs, mean, std)
ax.plot(rvs, pdf, c="g", label="Distribution normale (PDF)") # N({'{:.2f}'.format(mean)}, {'{:.2f}'.format(std)})

plt.xlabel("Taille(Inches)")
plt.ylabel("Proportion de la taille tombant dans un certain intervalle \n PDF de la distribution normale")
leg = ax.legend()
plt.show()

Avec ce code, nous obtenons l’histogramme suivant :

histogramme distribution normale

OK, nous avons compris que nous ne pouvons pas utiliser le PDF (Probability Distribution Function) pour justifier visuellement la tendance normale de nos données. Alors, comment pouvons-nous l’utiliser pour justifier que nos données suivent une distribution normale.

 Et la réponse est la CDF (Cumulative Distribution Function), la CDF de la distribution normale et la distribution de la taille désignent toutes deux la même chose. On peut donc superposer la CDF de la distribution normale et la CDF de la distribution de la taille, et voir si les deux CDF se superposent bien.

Alors, traçons-les :

fig, ax = plt.subplots()
num_bins = 100

# CDF of Heights
counts, bins = np.histogram(population_height ,
 							np.linspace(min(population_height),
										max(population_height),
										num_bins)
 							)
pmf = counts/sum(counts)
cdf = np.cumsum(pmf)
ax.scatter(bins[:-1], cdf, c='b', marker="+", label="Distribution de la taille CDF")
# CDF of Normal Distribution
mean, std = np.mean(population_height), np.std(population_height)
rvs = np.linspace(mean - 3*std, mean + 3*std, 100)
cdf = norm.cdf(rvs, mean, std)
ax.plot(rvs, cdf, c='g', label="Distribution normale CDF")
leg = ax.legend()

plt.xlabel("Taille(Inches)")
plt.ylabel("CDF de la distribution de la hauteur \n CDF de la distribution normale")
plt.show()

Voici le résultat issu de cette fonction :

distribution CDF

Nous pouvons maintenant dire que nos données suivent une distribution normale (avec une moyenne empirique et une variance empirique).

Maintenant, répondons à quelques questions sur la courbe de Gauss

Tout d’abord, obtenons la moyenne empirique et la variance empirique, car nous en aurons besoin ci-dessous.

import numpy as np
import pandas as pd
population_height = pd.read_csv("height_weight.csv")["Height(Inches)"]
print(f"""
       Moyenne empirique: {np.mean(population_height)} \n 
       Variance empirique: {np.var(population_height)}
       """)

Nous obtenons les valeurs suivantes :

Moyenne empirique: 67.9931135968 
     Variance empirique: 3.6162374935681267

Donc μ=67.9931, σ2=3.6162 et σ =1.9016

Question #1 : quelle est la probabilité qu’un humain choisi au hasard soit plus grand que 67,12 inches (1.70 m) ?

Soit X la variable aléatoire désignant la taille, alors nous voulons trouver la probabilité de X > 67.12 ou soit |P(X > 67.12)

Calculons |P( X > 67.12) :

result = sum(population_height > 67.12)/len(population_height)
print(f"Proportion des tailles supérieures à  67.12 inches (1.70 m): {result}")

Le résultat affiché est :

Proportion des tailles supérieures à 67.12 inches (1.70 m): 0.67784

Question #2 : quelle est la probabilité qu’un humain choisi au hasard ait une taille comprise entre 59.25 et 67.12 inches (Entre 1.50 et 1.70m) ?

Disons que X est une variable aléatoire représentant la taille, alors nous voulons trouver la probabilité 59.25 < X <67.12 ou soit |P(59.25 < X  < 67.12) Calculons maintenant |P(59.25 < X  < 67.12) :

lt = sum((population_height > 59.25) & (population_height < 67.12))/len(population_height)
print(f"Proportion des tailles comprises entre 1.50 m et 1.70m : {result}")

Ici, le résultat sera :

Proportion des tailles comprises entre 1.50 m et 1.70m : 0.32216

À présent, nous allons étudier l’un des théorèmes les plus populaires en statistiques : le théorème de la limite centrale.

Le théorème de la limite centrale

Le théorème de la limite centrale stipule que, pour un ensemble de données donné dont la distribution est inconnue, les moyennes des échantillons se rapprocheront de la distribution normale.

En d’autres termes, le théorème stipule qu’à mesure que la taille de l’échantillon augmente, la distribution de la moyenne sur plusieurs échantillons se rapprochera d’une distribution gaussienne. Mais pour que ce théorème se vérifie, ces échantillons doivent être de taille suffisante. La distribution des moyennes des échantillons, calculées à partir d’un échantillonnage répété, tendra vers la normalité avec l’augmentation de la taille de ces échantillons.           

Applications du théorème de la limite centrale

Le théorème de la limite centrale est appliqué dans de nombreux domaines. Discutons rapidement de quelques-unes des applications de ce théorème dans le monde réel.

Élections – Lorsque des personnes de différentes régions votent pour leur candidat, le théorème de la limite centrale est capable de nous donner une fourchette sous la forme d’un intervalle de confiance. Cela nous indique le pourcentage de victoire de ce candidat particulier.

Recensement – Le théorème de la limite centrale est appliqué à différents champs du recensement pour calculer différents détails de la population tels que le revenu familial, la quantité d’électricité consommée, les salaires des individus, etc.

Hypothèses du théorème de la limite centrale

Le théorème de la limite centrale repose sur certaines hypothèses qui sont :

  • Les variables présentes dans l’échantillon doivent suivre une distribution aléatoire. Cela implique que les données doivent être prises sans connaissance, c’est-à-dire de manière aléatoire.
  • Les variables de l’échantillon tirées d’une population doivent être indépendantes les unes des autres. En d’autres termes, il ne doit pas exister de relation entre deux variables présentes dans les données de l’échantillon. Si les données ont été prélevées de manière aléatoire, cette condition peut être remplie sans grand effort.
  • L’échantillon tiré de la population doit représenter 10% des données de la population et doit suivre une distribution normale, indépendamment de leur caractère aléatoire.
  • La taille de l’échantillon doit être importante lorsque les données de la population sont soit asymétriques, soit non symétriques. Dans le cas de données symétriques où les données de la population sont proches de la normale, la taille de l’échantillon peut être considérée comme petite. Habituellement, les procédures statistiques suggèrent qu’une taille de 30 est suffisante pour une telle population.

Théorème en pratique

Prenons un exemple. Supposons que vous travaillez dans une université et que vous souhaitiez comprendre la distribution des revenus d’un ancien élève au cours de sa première année d’études.

Le fait est que vous ne pourrez pas collecter ce point de données pour chaque ancien étudiant. Vous allez donc échantillonner la population plusieurs fois et obtenir des moyennes d’échantillon individuel pour chaque « échantillon ». Nous traçons maintenant les moyennes d’échantillon via un histogramme et nous pouvons voir l’émergence d’une distribution normale.

Le point principal ici est que même si les variables d’entrée ne sont pas distribuées normalement, la distribution de l’échantillonnage se rapprochera de la distribution normale standard.

Code en Python

Nous créons des échantillons aléatoires de poids de femmes (en imaginant qu’ils se situent entre 50 et 80 kg), chacun de taille n=40. Ensuite, nous allons exécuter cette simulation plusieurs fois et observer si la distribution des moyennes des échantillons ressemble à une distribution normale.

from numpy.random import seed
from numpy.random import randint
from numpy import mean
import matplotlib.pyplot as plt# seed the random number generator
seed(1)# generate a sample of women's weights
weights = randint(50, 80, 40)
print(weights)
print('Le poids moyen est de {} kg'.format(mean(weights)))

Voici ce que nous obtenons :

[55 61 62 58 59 61 55 65 50 66 51 62 57 63 78 56 75 68 70 55 68 70 61 78
 60 78 79 64 68 54 73 73 59 67 73 50 72 63 59 59]
Le poids moyen est de 63.875 kg

Maintenant, nous allons répéter cette simulation d’échantillonnage 1000 fois.

means = [mean(randint(50, 80, 40)) for _i in range(1000)]# plot the distribution of sample means
plt.hist(means)
plt.show()
print('La moyenne des moyennes de l'échantillon est {}'.format(mean(means)))
moyenne-échantillon

La moyenne des moyennes de l’échantillon est de 64,547425.

Selon le Théorème Centrale limite, la moyenne des moyennes de l’échantillon (64,54) devrait être une bonne estimation du paramètre réel qui est inconnu.

Conclusion

La distribution normale, ou courbe en cloche, est large et dense au milieu, avec des queues peu profondes et effilées. Souvent, une variable aléatoire qui a tendance à se regrouper autour d’une moyenne centrale et qui présente peu de valeurs extrêmes (comme les hauteurs et les poids) est distribuée normalement. En raison du grand nombre de variables dans la nature qui présentent un comportement normal, la distribution normale est une distribution couramment utilisée dans les statistiques déductives.

Nous espérons que vous vous êtes amusé en lisant cet article et que vous ayez compris l’importance de la distribution gaussienne dans la data science. N’hésitez pas à parcourir pour découvrir d’autres articles passionnants sur le Big Data.

Nous vous offrons également cette formation sur la programmation Scala si vous souhaitez approfondir vos connaissances dans ce domaine et apprendre un nouveau langage.

Categories: Data Science

Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

  • Bernard FAYT dit :

    Que pensez-vous de cette approche:
    http://www.partagerdespratiques.be/evaluerpourapprendre/cle1/index.html
    Alors que des profs d’Univ le font

    • Juvénal JVC dit :

      Bonjour Bernard,
      hmmmh, je n’ai pas d’avis sur cette question. Moi j’adopte une approche différente et j’ai des résultats plutôt satisfaisants, car cohérents avec les objectifs que je me suis fixés.

      Cordialement,
      Juvénal

  • >