[PYTHON] Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte

Résumé de cet article

――Enquête sur la probabilité que des «valeurs aberrantes» dans la boîte de moustaches apparaissent lorsqu'une distribution normale est supposée. --Définition de «valeur aberrante»: plage du 1er quadrant-quart * inférieure à 1,5, ou plage du 1er quadrant-quart * supérieure à 1,5 (y compris les valeurs extrêmes) ――La probabilité d'apparition de «valeurs aberrantes» est d'environ 0,70%.

Motivation pour écrire cet article

――Lorsque vous dessinez un diagramme boîte-barbe lors de l'analyse statistique en entreprise, des «valeurs aberrantes» apparaissent souvent. ――Je voulais savoir dans quelle mesure il est probable que des «valeurs aberrantes» apparaissent en supposant une certaine distribution.

Introduction: moustaches et valeurs aberrantes

Veuillez consulter les sites suivants pour obtenir des explications sur les moustaches de boîte et les valeurs aberrantes dans les moustaches de boîte.

Calculer la probabilité d'apparition de valeurs aberrantes dans la distribution normale

Calculons la probabilité des valeurs aberrantes en utilisant la fonction de densité de probabilité de la distribution normale standard.

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

q1_ideal = stats.norm.ppf (q = 0.25, loc = mu, scale = sd) # 1er quadrant q3_ideal = stats.norm.ppf (q = 0.75, loc = mu, scale = sd) # 3e quadrant iqr_ideal = q3_ideal-q1_ideal # quadrant lb_ideal = q1_ideal-1.5 * iqr_ideal # Limite inférieure des valeurs aberrantes ub_ideal = q3_ideal + 1.5 * iqr_ideal # Limite supérieure des valeurs aberrantes

print('Q1:', q1_ideal)
print('Q3:', q3_ideal)
print('IQR:', iqr_ideal)
print('Lower Bound:', lb_ideal)
print('Upper Bound:', ub_ideal)

print ('Probabilité de valeur aberrante inférieure:', stats.norm.cdf (x = lb_ideal, loc = mu, scale = sd) * 100, '%') print ('Probabilité de valeur aberrante supérieure:', stats.norm.sf (x = ub_ideal, loc = mu, scale = sd) * 100, '%') print ('Probabilité de valeurs aberrantes:', (stats.norm.sf (x = ub_ideal, loc = mu, scale = sd) + stats.norm.cdf (x = lb_ideal, loc = mu, scale = sd)) * 100, '%')

>Q1: -0.674489750196
>Q3: 0.674489750196
>IQR: 1.34897950039
>Lower Bound: -2.69795900078
>Upper Bound: 2.69795900078

Probabilité de valeur aberrante inférieure: 0,348830161964% Probabilité de valeur aberrante supérieure: 0,348830161964% Probabilité de valeurs aberrantes: 0,697660323928%

Ainsi, avec une distribution normale, la probabilité d'obtenir une valeur aberrante est de 0,7%. S'il y a 1000 échantillons, environ 7 seront hors service. 0,3% est en dehors de 3σ, donc c'est plus que cela.

Vérifiez que c'est bien le cas

Utilisons des données échantillonnées au hasard à partir d'une distribution normale pour voir si cela se produit vraiment.

Génération de données

n = 1000000 # nombre d'échantillons mu = 0 # moyenne sd = 1 # écart type q1 = stats.scoreatpercentile(data, 25) q3 = stats.scoreatpercentile(data, 75) iqr = q3-q1 lb = q1-1.5iqr ub = q3+1.5iqr print('Q1:', q1) print('Q2:', med) print('Q3:', q3) print('IQR:', iqr) print('Lower Bound:', lb) print('Upper Bound:', ub) print ('Rapport du nombre d'échantillons avec des valeurs aberrantes supérieures au nombre total d'échantillons:', len (np.where (data <lb) [0]) / n * 100, '%') print ('Rapport du nombre d'échantillons avec des valeurs aberrantes inférieures au nombre total d'échantillons:', len (np.where (data> ub) [0]) / n * 100, '%') print ('Rapport du nombre de valeurs aberrantes au nombre total d'échantillons:', (len (np.where (data> ub) [0]) + len (np.where (data <lb))) / n * 100, '%')

>Q1: -0.674873830027
>Q2: -0.00106013590319
>Q3: 0.673290672641
>IQR: 1.34816450267
>Lower Bound: -2.69712058403
>Upper Bound: 2.69553742664

Pourcentage du nombre total d'échantillons avec des valeurs aberrantes supérieures: 0,3554% Pourcentage de tous les échantillons avec des valeurs aberrantes inférieures: 0,3478% Pourcentage de valeurs aberrantes dans le nombre total d'échantillons: 0,7032%

Le pourcentage d'échantillons avec des valeurs aberrantes calculées par échantillonnage aléatoire était de 0,7%, ce qui était presque le même que la valeur calculée à partir de la fonction de densité de probabilité.

Recommended Posts

Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte
Étudiez l'effet des valeurs aberrantes sur la corrélation
Comment calculer la volatilité d'une marque
Calculez la probabilité d'être une pièce de calmar avec le théorème de Bayes [python]
Parlez de la probabilité d'évasion d'une marche aléatoire sur une grille entière
Calculer le volume à partir de la structure bidimensionnelle d'un composé
Étapes pour calculer la probabilité d'une distribution normale
Une réflexion sur la visualisation du champ d'application du modèle de prédiction
Calculer le produit des matrices avec une expression de caractère?
Calculez le nombre de changements
Remarque sur le comportement par défaut de collate_fn dans PyTorch
La probabilité de précipitation est-elle correcte?
L'histoire de l'exportation d'un programme
Sous Linux, l'horodatage d'un fichier est un peu dépassé.
Trouvez le rang de la matrice dans le monde XOR (rang de la matrice sur F2)
Une commande pour vérifier facilement la vitesse du réseau sur la console
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Distance approximative entre deux points à la surface d'un ellipsoïde en rotation (à la surface de la terre)
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
Mesurer la force de l'association dans un tableau croisé
Publier le sujet de Gmail sur Twitter
J'ai essayé de mesurer le temps d'attente de la file d'attente d'exécution d'un processus sous Linux
Afficher le graphique de tensorBoard sur Jupyter
[python] [meta] Le type de python est-il un type?
Estimer la probabilité qu'une pièce apparaisse en utilisant MCMC
Changer l'ordre de PostgreSQL dans Heroku
Un mémo expliquant la spécification de l'axe de l'axe
Obtenez le nom de fichier du répertoire (glob)
L'histoire du traitement A du blackjack (python)
[Python] Une barre de progression sur le terminal
Notez l'achèvement d'une commande chronophage
Essayez de tracer la concentration environnementale des composés organiques du fluor sur une carte à l'aide de données ouvertes
Un mémo qui a fait un tutoriel pour exécuter python sur heroku
Récupérer l'appelant d'une fonction en Python
Visualisez la couche interne du réseau neuronal
Le comportement de signal () dépend de l'option de compilation
Remarques sur la personnalisation de la classe de liste de dict
Calculer le taux de partage de mémoire des processus Linux
Calculez le nombre total de combinaisons avec python
[2020July] Vérifiez l'UDID de l'iPad sous Linux
Copiez la liste en Python
Trouvez le nombre de jours dans un mois
Écrire une note sur la version python de python virtualenv
[Python] Une compréhension approximative du module de journalisation
Sortie sous la forme d'un tableau python
Au moment de la mise à jour de python avec ubuntu
Changer la résolution d'Ubuntu s'exécutant sur VirtualBox
L'histoire de la création d'un générateur d'icônes mel
Prise en compte des forces et faiblesses de Python
[AWS S3] Confirmation de l'existence de dossiers sur S3
Créez une interface graphique sur le terminal à l'aide de curses
J'ai fait un peu de recherche sur la classe
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage