――Wenn Sie bei der statistischen Analyse in Unternehmen ein Box-Bart-Diagramm zeichnen, werden häufig "Ausreißer" angezeigt. ――Ich wollte wissen, wie wahrscheinlich es ist, dass "Ausreißer" auftreten, wenn eine bestimmte Verteilung angenommen wird.
Auf den folgenden Websites finden Sie Erläuterungen zu Box-Whiskern und Ausreißern in Box-Whiskern.
Berechnen wir die Wahrscheinlichkeit von Ausreißern anhand der Wahrscheinlichkeitsdichtefunktion der Standardnormalverteilung.
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) # 1. Quadrant q3_ideal = stats.norm.ppf (q = 0,75, loc = mu, scale = sd) # 3. Quadrant iqr_ideal = q3_ideal-q1_ideal # Quadrant lb_ideal = q1_ideal-1.5 * iqr_ideal # Untere Ausreißergrenze ub_ideal = q3_ideal + 1.5 * iqr_ideal # Obere Ausreißergrenze
print('Q1:', q1_ideal)
print('Q3:', q3_ideal)
print('IQR:', iqr_ideal)
print('Lower Bound:', lb_ideal)
print('Upper Bound:', ub_ideal)
print ('Wahrscheinlichkeit eines niedrigeren Ausreißers:', stats.norm.cdf (x = lb_ideal, loc = mu, scale = sd) * 100, '%') print ('Wahrscheinlichkeit des oberen Ausreißers:', stats.norm.sf (x = ub_ideal, loc = mu, scale = sd) * 100, '%') print ('Wahrscheinlichkeit von Ausreißern:', (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
Wahrscheinlichkeit eines niedrigeren Ausreißers: 0,348830161964% Wahrscheinlichkeit eines oberen Ausreißers: 0,348830161964% Wahrscheinlichkeit von Ausreißern: 0,697660323928%
Bei einer Normalverteilung beträgt die Wahrscheinlichkeit, einen Ausreißer zu bekommen, 0,7%. Wenn es 1000 Proben gibt, sind ungefähr 7 außer Betrieb. 0,3% liegen außerhalb von 3σ, also ist es mehr als das.
Verwenden wir Daten, die zufällig aus einer Normalverteilung entnommen wurden, um festzustellen, ob dies wirklich geschieht.
#Datengenerierung n = 1000000 # Anzahl der Proben mu = 0 # Durchschnitt sd = 1 # Standardabweichung 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 ('Verhältnis der Anzahl der Proben mit oberen Ausreißern zur Gesamtzahl der Proben:', len (np.where (Daten <lb) [0]) / n * 100, '%') print ('Verhältnis der Anzahl der Proben mit niedrigeren Ausreißern zur Gesamtzahl der Proben:', len (np.where (data> ub) [0]) / n * 100, '%') print ('Verhältnis der Anzahl der Ausreißer zur Gesamtzahl der Stichproben:', (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
Prozentsatz der Gesamtzahl der Proben mit oberen Ausreißern: 0,3554% Prozentsatz aller Proben mit niedrigeren Ausreißern: 0,3478% Prozentsatz der Ausreißer an der Gesamtzahl der Stichproben: 0,7032%
Der Prozentsatz der Stichproben mit Ausreißern, die durch Zufallsstichproben berechnet wurden, betrug 0,7%, was fast dem Wert entspricht, der aus der Wahrscheinlichkeitsdichtefunktion berechnet wurde.