Maison  >  Article  >  développement back-end  >  Comment effectuer le test Grubbs en Python

Comment effectuer le test Grubbs en Python

WBOY
WBOYavant
2023-08-28 15:49:07866parcourir

Présentation

Le test de Grubbs est une méthode de test d'hypothèses statistiques utilisée pour détecter les valeurs aberrantes dans un ensemble de données. Les valeurs aberrantes sont des observations affectées à une distribution de données, également appelées anomalies. Les ensembles de données comportant des valeurs aberrantes ont tendance à être plus susceptibles au surapprentissage que les données présentant une distribution normale/gaussienne. Par conséquent, il est nécessaire de traiter les valeurs aberrantes avant la modélisation de l’apprentissage automatique. Avant le traitement, nous devons détecter et localiser les valeurs aberrantes dans l'ensemble de données. Les techniques de détection des valeurs aberrantes les plus populaires sont QQPlot, l'intervalle interquartile et le test statistique de Grubbs. Cependant, cet article ne discutera que du test de Grubbs pour détecter les valeurs aberrantes. Vous apprendrez : Qu'est-ce qu'un test Grubbs et comment l'implémenter en Python.

Qu'est-ce qu'une valeur aberrante ?

Les valeurs aberrantes sont des observations de données qui sont numériquement éloignées des autres valeurs de données. Ces valeurs sortent de la plage des données normalement distribuées. L'ensemble de données doit contenir 67 % des enregistrements au premier écart type, 95 % des données au deuxième écart type et 99,7 % des points au troisième écart type pour obtenir une distribution normale. En d’autres termes, les points de données doivent se situer entre le premier et le troisième quartile. Nous considérons les enregistrements inférieurs au premier quartile et supérieurs au troisième quartile comme des valeurs aberrantes ou aberrantes.

Test d'hypothèse statistique Grabbs

Comme tout autre test d'hypothèse statistique, le test de Grubbs peut également approuver ou rejeter l'hypothèse nulle (H0) ou l'hypothèse alternative (H1). Le test de Grubbs est un test qui détecte les valeurs aberrantes dans un ensemble de données.

Nous pouvons effectuer le test de Grubbs de deux manières : Test unilatéral et Test bilatéral, pour des ensembles de données univariées ou des échantillons presque normaux avec des distributions d'au moins sept variables. Ce test est également appelé test d'écart studentisé extrême ou test de résidu maximal normalisé.

Le test Grubbs utilise les hypothèses suivantes -

  • Null (H0) : l'ensemble de données n'a aucune valeur aberrante.

  • Alternative (H1) : l'ensemble de données n'a qu'une seule valeur aberrante.

Test Grabbs en Python

Python peut relever n'importe quel défi de programmation grâce à sa vaste collection de bibliothèques. Ces bibliothèques fournissent des méthodes intégrées qui peuvent être utilisées directement pour effectuer n'importe quelle opération, test statistique, etc. De même, Python dispose d'une bibliothèque qui contient des méthodes permettant d'effectuer des tests Grubbs afin de détecter les valeurs aberrantes. Cependant, nous explorerons deux manières d'implémenter les tests Grubbs en Python : les fonctions intégrées dans les bibliothèques et l'implémentation de formules à partir de zéro.

Bibliothèque Outlier et Smirnov_grubbs

Installons d'abord la bibliothèque outlier_utils à l'aide de la commande suivante.

!pip install outlier_utils

Créons maintenant un ensemble de données contenant des valeurs aberrantes et effectuons un test Grubbs.

Inspection Grubb double face

Grammaire

grubbs.test(data, alpha=.05)

Paramètres

data - Vecteur numérique de valeurs de données.

alpha - Le niveau de signification du test.

Instructions

Dans cette méthode, l'utilisateur doit utiliser la fonction smirnov_grubbs.test() du package outliers et transmettre les données nécessaires en entrée afin d'exécuter les tests de Grubb.

Exemple

import numpy as np
from outliers import smirnov_grubbs as grubbs
 
#define data
data = np.array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40])
 
#perform Grubbs' test
grubbs.test(data, alpha=.05)

Sortie

array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22,  8, 21, 28, 11,  9, 29])

Le code ci-dessus commence simplement par charger la bibliothèque et les données, et utilise enfin la méthode "test" pour effectuer un test Grubbs sur ces données. Ce test détecte les valeurs aberrantes des deux côtés (gauche et droite), ou les valeurs inférieures au premier quartile et supérieures au troisième quartile. Les données ne comportaient qu'une seule valeur aberrante (40), qui a été supprimée à l'aide du test de Grubbs.

Test de Grubbs unilatéral

Synatx

grubbs.max_test(data, alpha=.05)

Instructions

Dans cette méthode, l'utilisateur doit appeler la fonction grubbs.min_test() pour obtenir la valeur aberrante minimale de l'ensemble de données fourni, ou appeler la fonction grubbs.max_test() pour obtenir la valeur aberrante maximale de l'ensemble de données fourni. Un test de Grubb unilatéral a été obtenu.

Exemple

import numpy as np
from outliers import smirnov_grubbs as grubbs
 
#define data
data = np.array([5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40])

#perform Grubbs' test for minimum value is an outlier
print(grubbs.min_test(data, alpha=.05)) 

#perform Grubbs' test for minimum value is an outlier
grubbs.max_test(data, alpha=.05)

Sortie

[ 5 14 15 15 14 19 17 16 20 22  8 21 28 11  9 29 40]
array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22,  8, 21, 28, 11,  9, 29])

Le test Grubbs unilatéral détecte les valeurs aberrantes en dessous du premier quartile ou au-dessus du troisième quartile. Nous pouvons voir que la méthode min_test supprime les valeurs aberrantes du plus petit côté des données, tandis que la méthode max_test supprime les valeurs aberrantes du haut des données.

Mise en œuvre de la formule

Ici, nous utiliserons Python pour implémenter la formule de test Grubbs suivante. Nous utiliserons les bibliothèques Numpy et Scipy pour y parvenir.

Comment effectuer le test Grubbs en Python

Grammaire

g_calculated = numerator/sd_x
g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1)))

Algorithme

Les étapes de mise en œuvre sont les suivantes -

  • Calculez la moyenne des valeurs de l'ensemble de données.

  • Calculez l'écart type des valeurs de l'ensemble de données.

  • Pour implémenter la formule du test Grubbs, calculez le numérateur en soustrayant la valeur de chaque valeur de l'ensemble de données de sa moyenne.

  • Divisez la valeur du numérateur par l'écart type pour obtenir le score calculé.

  • Calculez les scores critiques pour la même valeur.

  • Si la valeur critique est supérieure à la valeur calculée, il n'y a pas de valeur aberrante dans l'ensemble de données, sinon il y a une valeur aberrante.

Exemple

import numpy as np
import scipy.stats as stats
## define data
x = np.array([12,13,14,19,21,23])
y = np.array([12,13,14,19,21,23,45])

## implement Grubbs test
def grubbs_test(x):
   n = len(x)
   mean_x = np.mean(x)
   sd_x = np.std(x)
   numerator = max(abs(x-mean_x))
   g_calculated = numerator/sd_x
   print("Grubbs Calculated Value:",g_calculated)
   t_value_1 = stats.t.ppf(1 - 0.05 / (2 * n), n - 2)
   g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1)))
   print("Grubbs Critical Value:",g_critical)
   if g_critical > g_calculated:
      print("We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers\n")
   else:
      print("We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers\n")
grubbs_test(x)
grubbs_test(y)

Sortie

Grubbs Calculated Value: 1.4274928542926593
Grubbs Critical Value: 1.887145117792422
We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers

Grubbs Calculated Value: 2.2765147221587774
Grubbs Critical Value: 2.019968507680656
We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers

Le résultat du test Grubb montre que le tableau x n'a aucune valeur aberrante, mais y a 1 valeur aberrante.

Conclusion

Nous avons découvert les valeurs aberrantes et les tests de Grubbs en Python dans cet article. Terminons cet article par quelques points clés.

  • Les valeurs aberrantes sont des enregistrements qui se situent en dehors de la plage interquartile.

  • Les valeurs aberrantes ne sont pas conformes à la distribution normale de l'ensemble de données.

  • Nous pouvons utiliser le test statistique d'hypothèse de Grubbs pour détecter les valeurs aberrantes.

  • Nous pouvons exécuter des tests Grubbs en utilisant les méthodes intégrées fournies dans la bibliothèque outlier_utils.

  • Le test Grubbs recto-verso détecte et supprime les valeurs aberrantes sur les côtés gauche et droit.

  • Cependant, le test unilatéral de Grubbs détectera les valeurs aberrantes de chaque côté.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer