Personnaliser les préférences

Nous utilisons des cookies pour vous aider à naviguer efficacement et à exécuter certaines fonctions. Vous trouverez ci-dessous des informations détaillées sur tous les cookies sous chaque catégorie de consentement.

Les cookies classés comme « Nécessaires » sont stockés sur votre navigateur car ils sont essentiels pour activer les fonctionnalités de base du site.... 

Toujours actif

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Aucun cookie à afficher.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Aucun cookie à afficher.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Aucun cookie à afficher.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Aucun cookie à afficher.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

Aucun cookie à afficher.

Comment effectuer une transformation Box-Cox en Python



Une transformation box-cox est une méthode couramment utilisée pour transformer un ensemble de données non normalement distribué en un ensemble plusnormalement distribué .

L’idée de base derrière cette méthode est de trouver une valeur pour λ telle que les données transformées soient aussi proches que possible de la distribution normale, en utilisant la formule suivante :

  • y(λ) = (y λ – 1) / λ si y ≠ 0
  • y(λ) = log(y) si y = 0

Nous pouvons effectuer une transformation box-cox en Python en utilisant la fonction scipy.stats.boxcox() .

L’exemple suivant montre comment utiliser cette fonction dans la pratique.

Exemple : transformation Box-Cox en Python

Supposons que nous générions un ensemble aléatoire de 1 000 valeurs provenant d’une distribution exponentielle :

#load necessary packages
import numpy as np 
from scipy.stats import boxcox 
import seaborn as sns 

#make this example reproducible
np.random.seed(0)

#generate dataset
data = np.random.exponential(size=1000)

#plot the distribution of data values
sns.distplot(data, hist=False, kde=True) 

Nous pouvons constater que la distribution ne semble pas normale.

Nous pouvons utiliser la fonction boxcox() pour trouver une valeur optimale de lambda qui produit une distribution plus normale :

#perform Box-Cox transformation on original data
transformed_data, best_lambda = boxcox(data) 

#plot the distribution of the transformed data values
sns.distplot(transformed_data, hist=False, kde=True) 

Transformation box-cox en Python

Nous pouvons voir que les données transformées suivent une distribution beaucoup plus normale.

On peut également retrouver la valeur lambda exacte utilisée pour effectuer la transformation Box-Cox :

#display optimal lambda value
print(best_lambda)

0.2420131978174143

Le lambda optimal s’est avéré être d’environ 0,242 .

Ainsi, chaque valeur de données a été transformée à l’aide de l’équation suivante :

Nouveau = (ancien 0,242 – 1) / 0,242

Nous pouvons le confirmer en examinant les valeurs des données originales par rapport aux données transformées :

#view first five values of original dataset
data[0:5]

array([0.79587451, 1.25593076, 0.92322315, 0.78720115, 0.55104849])

#view first five values of transformed dataset
transformed_data[0:5]

array([-0.22212062,  0.23427768, -0.07911706, -0.23247555, -0.55495228])

La première valeur de l’ensemble de données d’origine était 0,79587 . Ainsi, nous avons appliqué la formule suivante pour transformer cette valeur :

Nouveau = (.79587 0,242 – 1) / 0,242 = -0,222

Nous pouvons confirmer que la première valeur de l’ensemble de données transformé est bien -0,222 .

Ressources additionnelles

Comment créer et interpréter un tracé QQ en Python
Comment effectuer un test de normalité Shapiro-Wilk en Python

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *