Winsorisation – GeeksforGeeks

Afficher la discussion

Améliorer l’article

Enregistrer l’article

J’aime l’article

Afficher la discussion

Améliorer l’article

Enregistrer l’article

J’aime l’article

La winsorisation est le processus de remplacement des valeurs extrêmes des données statistiques afin de limiter l’effet des valeurs aberrantes sur les calculs ou les résultats obtenus en utilisant ces données. La valeur moyenne calculée après un tel remplacement des valeurs extrêmes est appelée moyenne winsorisée.

Par exemple, une winsorisation à 90 % signifie le remplacement des 5 % supérieurs et des 5 % inférieurs des données. Les 5 % supérieurs des données sont remplacés par la valeur des données au 95e centile et la valeur des 5 % inférieurs des données est remplacée par la valeur des données au 5e centile.

Saisir:

  • Un tableau numérique dont les valeurs à l’extrémité supérieure et à l’extrémité inférieure doivent être winsorisées.
  • Le premier argument du tuple est le pourcentage de valeurs à l’extrémité inférieure qui doivent être winsorisées.
  • Le deuxième argument du tuple est le pourcentage de valeurs à l’extrémité supérieure qui doivent être winsorisées.

Production:

Un tableau numérique dont les valeurs à l’extrémité supérieure et à l’extrémité inférieure sont winsorisées comme défini par l’utilisateur.

Exemple 1:

Python3

import numpy as np

import matplotlib.pyplot as plt

import random

from scipy.stats.mstats import winsorize

Voyons un exemple où des valeurs aberrantes sont présentes à la fois à l’extrémité supérieure et à l’extrémité inférieure des données.

Python3

array = [np.random.randint(100) for i in range(100)]

 

AlreadySelected = []

i = 0

 

while (i < 5):

    x = np.random.choice(array) 

    y = x - mean*3

    array = np.append(array, y)

    if (x not in already_selected):

        AlreadySelected.append(y)

 

        i += 1

 

    else:

        continue

 

i = 0

while (i < 5):

    x = np.random.choice(array) 

    y = x + mean*4

    array = np.append(array, y)

    if (x not in already_selected):

        AlreadySelected.append(y)

 

        i += 1

 

    else:

        continue

 

std = np.std(array) 

mean = np.mean(array) 

 

plt.boxplot(array)

plt.title('Array with Outliers')

plt.show()

Production:


Arraywithoutliers

Production:

Output1

Maintenant, on winsorise le tableau de 10% c’est à dire on winsorise 5% des valeurs les plus hautes et 5% de la valeur la plus basse du tableau :

Python3

WinsorizedArray = winsorize(array,(0.05,0.05))

 

plt.boxplot(WinsorizedArray)

plt.title('Winsorized array')

plt.show()

Production:


winsorizedarray

Python3

WinsorizedMean = np.mean(WinsorizedArray)

print(WinsorizedMean)

Production:


output1

Dans ce cas, il n’y a qu’un léger changement dans la valeur moyenne des données.

Voyons maintenant un exemple où les valeurs aberrantes ne sont présentes qu’à une extrémité des données.

Python3

array2 = [np.random.randint(100) for i in range(100)]

std = np.std(array2)

mean = np.mean(array2)

AlreadySelected = []

i = 0

while (i<5):

    x = np.random.choice(array2)

    y = x + mean*4

    array2 = np.append(array2,y)

    if (x not in AlreadySelected):

        AlreadySelected.append(y)

 

        i+=1

         

    else:

        continue

         

plt.boxplot(array2)

plt.title('Array with outliers')

plt.show()

Production:


Arraywithoutliers

Python3

OutlierArray2Mean = np.mean(array2)

print(OutlierArray2Mean)

Production:


output

Python3

WinsorizedArray2 = winsorize(array2,(0.1,0.1))

 

plt.boxplot(WinsorizedArray2)

plt.show()

 

WinsorizedArray2Mean = np.mean(WinsorizedArray2)

Production:


WinsorizedArray

Python3

WinsorizedArray2Mean = np.mean(WinsorizedArray2)

print(WinsorizedArray2Mean)

Production:


Output1

Dans ce cas, il y a une différence significative dans la valeur moyenne.

Laisser un commentaire

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