Comment calculer et tracer le score standard statistique ou le score Z en utilisant Python ?

Published: 20 février 2024

Tags: Python; Scipy;

DMCA.com Protection Status

Introduction

Le Z-score, également appelé score standard, est une mesure statistique qui quantifie la relation entre un point de données et la moyenne d'un ensemble de données en termes d'écarts-types. C'est un outil précieux en statistique pour comparer différents ensembles de données et déterminer la position relative d'un point de données au sein d'une distribution.

Dans cet article, nous explorerons comment calculer et tracer des Z-scores en utilisant Python, en exploitant des bibliothèques telles que NumPy, Scipy et Matplotlib.

Création d'un ensemble de données synthétiques

Pour illustrer le calcul du Z-score, nous allons générer des nombres aléatoires suivant une distribution normale avec une moyenne de 10 et un écart-type de 4 à titre d'exemple :

import numpy as np
import matplotlib.pyplot as plt

mu = 10.0
sigma = 4.0

X = np.random.randn(100000) * sigma + mu

Pour visualiser vos données, envisagez de créer un simple histogramme à l'aide de matplotlib :

import numpy as np
import matplotlib.pyplot as plt

hx, hy, _ = plt.hist(X, bins=50, density=1, color="coral")

plt.ylim(0.0,max(hx)+0.01)

plt.title('How can the statistical standard score or Z-score \n be calculated and plotted using Python ?')
plt.grid(linestyle='--')

plt.savefig("zscore_python_01.png", bbox_inches='tight')
plt.show()

Comment calculer et tracer le score standard statistique ou le score Z en utilisant Python ?
Comment calculer et tracer le score standard statistique ou le score Z en utilisant Python ?

Méthode 1 : Calcul des Z-scores

Après avoir généré les nombres aléatoires, nous pouvons calculer le Z-score pour une valeur choisie en utilisant la formule :

$$ Z = \frac{(X - \mu)}{\sigma} $$

où $\mu$ représente la moyenne et $\sigma$ désigne l'écart-type de l'ensemble de données..

Cette formule est utilisée pour standardiser toute distribution normale en une distribution normale standard avec une moyenne de 0 et un écart-type de 1.

Le Z-score est une mesure du nombre d'écarts-types dont un point de données individuel est éloigné de la moyenne d'une distribution. Il nous aide à comprendre la position relative d'un point de données au sein d'une distribution et est utilisé pour comparer différentes distributions entre elles.

Pour calculer le Z-score, nous commençons par soustraire la moyenne au point de données individuel, puis le diviser par l'écart-type. Cette valeur standardisée nous donne une idée de la distance du point de données par rapport à la moyenne en termes d'écarts-types. Si le Z-score résultant est positif, cela signifie que le point de données est supérieur à la moyenne, et s'il est négatif, cela indique que le point de données est inférieur à la moyenne.

Le Z-score a diverses applications en statistique. Il peut être utilisé pour identifier les valeurs aberrantes dans un ensemble de données et comprendre leur impact sur la distribution globale. Il nous permet également de comparer des valeurs provenant de différentes distributions en les standardisant. De plus, le Z-score est un élément essentiel des tests d'hypothèse, car il nous aide à calculer la probabilité d'obtenir une valeur particulière ou supérieure/inférieure à partir d'une distribution.

Calcul de la moyenne

Calcul de la moyenne:

X.mean()

donne:

10.001437829008042

Calcul de l'écart-type

Calcul de l'écart-type

X.std()

donne:

3.9926317707090115

Calcul du Z-score

En appliquant la formule établie pour le Z-score, nous sommes en mesure de le calculer pour tous les éléments de la matrice X :

    (X - mu) / sigma

Produit une matrice de Z-scores :

array([-2.12145637, -0.41107867, -0.08816355, ..., 1.08737079, 0.44585831, -1.67382599])

Pour la visualiser vos résultats, vous pouvez tracer les données originales avec leurs scores Z pour voir comment chaque point de données se rapporte à la moyenne en termes d'écart type:

import numpy as np
import matplotlib.pyplot as plt

hx, hy, _ = plt.hist(X, bins=50, density=1,color="coral")

plt.ylim(0.0,max(hx)+0.01)

x_tick_positions = [i for i in np.arange(-10,31,4.0)]
x_tick_labels = [(i - mu) / sigma for i in x_tick_positions ]

plt.xticks(x_tick_positions, x_tick_labels, rotation=0, fontsize=10)
plt.yticks(fontsize=10)

plt.title('How can the statistical standard score or Z-score \n be calculated and plotted using Python ?')

plt.xlabel('Z-Score')

plt.grid(linestyle='--')

plt.savefig("zscore_python_02.png", bbox_inches='tight')
plt.show()

Comment calculer et tracer le score standard statistique ou le score Z en utilisant Python ?
Comment calculer et tracer le score standard statistique ou le score Z en utilisant Python ?

Un autre exemple

import numpy as np
import matplotlib.pyplot as plt

hx, hy, _ = plt.hist(X, bins=50, density=1,color="coral")

plt.ylim(0.0,max(hx)+0.01)

x_tick_positions = [i for i in np.arange(-10,31,4.0)]
x_tick_labels = [(i - mu) / sigma for i in x_tick_positions ]

x_tick_labels = [r'{} $\sigma$'.format((i - mu) / sigma) for i in x_tick_positions ]

plt.xticks(x_tick_positions, x_tick_labels, rotation=90, fontsize=10)
plt.yticks(fontsize=10)

plt.title('How can the statistical standard score or Z-score \n be calculated and plotted using Python ?')

plt.xlabel('Z-Score')

plt.grid(linestyle='--')

plt.savefig("zscore_python_03.png", bbox_inches='tight')
plt.show()

Comment calculer et tracer le score standard statistique ou le score Z en utilisant Python ?
Comment calculer et tracer le score standard statistique ou le score Z en utilisant Python ?

Méthode 2 : Utilisation de la fonction zscore de Scipy

Une autre approche pour calculer le score Z consiste à utiliser la bibliothèque scipy.stats, offrant une manière simple de calculer les scores Z.

from scipy import stats

stats.zscore(X)

C'est l'expression utilisée pour calculer les valeurs de score Z pour un tableau X. Cette fonction nous permet également de spécifier l'axe que nous voulons utiliser lors du calcul des scores Z. Par défaut, cette valeur est définie sur axe=0, ce qui signifie que le calcul sera effectué sur les lignes.

La fonction zscore() prend en entrée un tableau ou une liste de données en tant qu'argument et renvoie un nouveau tableau avec les valeurs de score Z calculées pour chaque élément:

array([-2.12573155, -0.41219742, -0.08868638, ...,  1.08901737,
    0.446321  , -1.67727508])

Veuillez noter que nous obtenons des résultats identiques à ceux de la méthode 1.

Références

Liens Site
scipy.stats.zscore docs.scipy.org
Standard score en.wikipedia.org
numpy.mean numpy.org
numpy.org numpy.org
Image

of