In der Welt der Datenwissenschaft gibt es eine grundlegende Erkenntnis: Die Qualität der Eingabedaten bestimmt die Qualität der Ergebnisse, bekannt als das Prinzip „Garbage In, Garbage Out“ (GIGO).
Beispielsweise kann die Verwendung von stark kollinearen Daten in einem linearen Regressionsmodell oder das Durchführen von ANOVA-Tests bei heteroskedastischen Varianzen zu ineffektiven Modellen führen, die nicht korrekt lernen.
Die explorative Datenanalyse (EDA) bietet zwar wertvolle Visualisierungen wie Streudiagramme und Histogramme, reicht jedoch oft nicht aus, um die mathematischen Annahmen für nachfolgende Analysen oder Modelle rigoros zu validieren. Hier kommt Pingouin ins Spiel, indem es eine Brücke zwischen den bekannten Bibliotheken SciPy und pandas schlägt. Darüber hinaus kann es eine wertvolle Unterstützung beim Aufbau robuster, automatisierter EDA-Pipelines sein. In diesem Artikel erfahren Sie, wie Sie eine umfassende Pipeline für eine gründliche, statistische EDA erstellen, die mehrere wichtige Datenmerkmale validiert.
Erste Schritte
Beginnen wir damit, sicherzustellen, dass Pingouin in Ihrer Python-Umgebung installiert ist (und pandas, falls Sie es noch nicht haben):
!pip install pingouin pandas
Im Anschluss daran importieren wir diese wichtigen Bibliotheken und laden unsere Daten. Als Beispiel verwenden wir einen offenen Datensatz, der Proben von Weineigenschaften und deren Qualität enthält.
import pandas as pd
import pingouin as pg
# Laden des Weindatensatzes aus einem offenen GitHub-Repository
url = "https://raw.githubusercontent.com/gakudo-ai/open-datasets/refs/heads/main/wine-quality-white-and-red.csv"
df = pd.read_csv(url)
# Anzeigen der ersten Zeilen, um unsere Merkmale zu verstehen
df.head()
Überprüfung der univariaten Normalität
Die erste spezifische explorative Analyse, die wir durchführen werden, bezieht sich auf die Überprüfung der univariaten Normalität. Viele traditionelle Algorithmen zum Trainieren von Maschinenlernmodellen – sowie statistische Tests wie ANOVAs und t-Tests – setzen voraus, dass kontinuierliche Variablen einer Normalverteilung, auch bekannt als Gaußsche Verteilung, folgen. Die Funktion pg.normality() von Pingouin hilft dabei, diese Überprüfung mittels eines Shapiro-Wilk-Tests über das gesamte DataFrame durchzuführen:
# Auswahl eines Teilsets kontinuierlicher Merkmale für Normalitätsprüfungen
features = ['fixed acidity', 'volatile acidity', 'citric acid', 'pH', 'alcohol']
# Durchführung des Normalitätstests
normality_results = pg.normality(df[features])
print(normality_results)
Die Ausgabe zeigt:
W pval normal
fixed acidity 0.879789 2.437973e-57 False
volatile acidity 0.875867 6.255995e-58 False
citric acid 0.964977 5.262332e-37 False
pH 0.991448 2.204049e-19 False
alcohol 0.953532 2.918847e-41 False
Es scheint, dass keine der numerischen Merkmale die Normalitätsannahme erfüllt. Dies ist jedoch kein Fehler im Datensatz, sondern spiegelt lediglich dessen Eigenschaften wider. Wir erhalten die Information, dass wir in späteren Schritten der Datenvorverarbeitung möglicherweise Datenumwandlungen wie Log-Transformationen oder Box-Cox-Transformationen in Betracht ziehen sollten, um die Rohdaten „normaler“ erscheinen zu lassen und somit besser für Modelle geeignet zu machen, die Normalität voraussetzen. Für eine tiefere Einsicht in die Automatisierung solcher Prozesse können Sie effiziente Python-Skripte zur Automatisierung der explorativen Datenanalyse nutzen.
Überprüfung der multivariaten Normalität
Ebenso ist die Bewertung der Normalität nicht nur von Merkmal zu Merkmal, sondern unter Berücksichtigung der Wechselwirkungen zwischen den Merkmalen ein weiterer interessanter Aspekt. Lassen Sie uns sehen, wie wir die multivariate Normalität überprüfen können: eine wichtige Voraussetzung für Techniken wie die multivariate ANOVA (MANOVA).
# Henze-Zirkler-Test auf multivariate Normalität
multivariate_normality_results = pg.multivariate_normality(df[features])
print(multivariate_normality_results)
Die Ausgabe könnte wie folgt aussehen:
HZResults(hz=np.float64(23.72107048442373), pval=np.float64(0.0), normal=False)
Das bedeutet, dass auch die multivariate Normalität nicht gegeben ist. Wenn Sie ein Maschinenlernmodell auf diesem Datensatz trainieren möchten, könnte dies bedeuten, dass nichtparametrische, baumbasierte Modelle wie Gradient Boosting und Random Forests eine robustere Alternative zu parametrischen, gewichtsbasierenden Modellen wie SVM oder linearer Regression darstellen. Um die Leistung solcher Modelle zu verbessern, können Sie 5 leistungsstarke Python-Dekoratoren für Hochleistungsdatenpipelines in Betracht ziehen.
Überprüfung der Homoskedastizität
Als Nächstes betrachten wir ein komplexes Wort für ein relativ einfaches Konzept: Homoskedastizität. Dies bezieht sich auf gleiche oder konstante Varianz über die Fehler in den Vorhersagen und wird als Maß für die Zuverlässigkeit interpretiert. Wir testen diese Eigenschaft mit der Implementierung von Levene’s Test in Pingouin:
# Levene-Test auf gleiche Varianzen über Gruppen
# 'dv' ist die Zielvariable, 'group' ist die kategoriale Variable
homoscedasticity_results = pg.homoscedasticity(data=df, dv='alcohol', group='quality')
print(homoscedasticity_results)
Das Ergebnis lautet:
W pval equal_var
levene 66.338684 2.317649e-80 False
Da wir erneut False erhalten haben, haben wir ein Problem mit Heteroskedastizität, das in nachfolgenden Analysen berücksichtigt werden sollte. Eine mögliche Lösung könnte die Verwendung robuster Standardfehler beim Trainieren von Regressionsmodellen sein.
Überprüfung der Sphärizität
Eine weitere statistische Eigenschaft, die analysiert werden sollte, ist die Sphärizität, die feststellt, ob die Varianzen der Unterschiede zwischen möglichen paarweisen Kombinationen von Bedingungen gleich sind. Die Überprüfung dieser Eigenschaft ist in der Regel wünschenswert, bevor eine Hauptkomponentenanalyse (PCA) zur Dimensionsreduktion durchgeführt wird, da sie uns hilft zu verstehen, ob es Korrelationen zwischen den Variablen gibt. PCA wird weitgehend nutzlos, wenn dies nicht der Fall ist:
# Mauchly-Test auf Sphärizität
sphericity_results = pg.sphericity(df[features])
print(sphericity_results)
Das Ergebnis lautet:
SpherResults(spher=False, W=np.float64(0.004437706589942777), chi2=np.float64(35184.26583883276), dof=9, pval=np.float64(0.0))
Es scheint, als hätten wir einen ziemlich unnachgiebigen, trockenen Datensatz gewählt! Aber keine Sorge – dieser Artikel ist absichtlich darauf ausgelegt, den EDA-Prozess zu fokussieren und Ihnen zu helfen, zahlreiche Datenprobleme wie diese zu identifizieren. Letztendlich ist es besser, diese Probleme zu erkennen und zu wissen, wie man damit umgeht, bevor man mit der Analyse von Maschinenlernen beginnt, als ein potenziell fehlerhaftes Modell zu erstellen. In diesem Fall gibt es einen Haken: Wir haben einen p-Wert von 0.0, was bedeutet, dass die Nullhypothese einer identischen Korrelationsmatrix abgelehnt wird, d.h. es existieren bedeutende Korrelationen zwischen den Variablen. Wenn wir also viele Merkmale hätten und die Dimensionen reduzieren wollten, könnte die Anwendung von PCA eine gute Idee sein.
Überprüfung der Multikollinearität
Zuletzt werden wir die Multikollinearität überprüfen: eine Eigenschaft, die anzeigt, ob es hochgradig korrelierte Prädiktoren gibt. Dies könnte in interpretierten Modellen wie linearen Regressoren unerwünscht sein. Lassen Sie uns dies überprüfen:
# Berechnung einer robusten Korrelationsmatrix mit p-Werten
correlation_matrix = pg.rcorr(df[features], method='pearson')
print(correlation_matrix)
Die Ausgabe könnte wie folgt aussehen:
fixed acidity volatile acidity citric acid pH alcohol
fixed acidity - *** *** *** ***
volatile acidity 0.219 - *** *** **
citric acid 0.324 -0.378 - ***
pH -0.253 0.261 -0.33 - ***
alcohol -0.095 -0.038 -0.01 0.121 -
Während die Funktion pandas.corr() ebenfalls verwendet werden kann, nutzt Pingouins Pendant Sterne, um das statistische Signifikanzniveau jeder Korrelation anzuzeigen (* für p < 0.05, ** für p < 0.01 und *** für p < 0.001). Eine Korrelation kann statistisch signifikant sein, aber dennoch gering in ihrer Größe – Multikollinearität wird dann problematisch, wenn der absolute Wert der Korrelation hoch ist (typischerweise über 0.8). In unserem Fall sind keine der paarweisen Korrelationen gefährlich hoch, da alle fünf bewerteten Merkmale weitgehend nicht überlappende, einzigartige Informationen für weitere Analysen liefern.
Fazit
Durch eine Reihe von Beispielen, die nacheinander angewendet und erklärt wurden, haben wir gesehen, wie man das Potenzial von Pingouin, einer Open-Source-Python-Bibliothek, ausschöpfen kann, um robuste, moderne EDA-Pipelines zu erstellen. Diese helfen Ihnen, bessere Entscheidungen in der Datenvorverarbeitung und bei nachfolgenden Analysen basierend auf fortgeschrittenen statistischen Tests oder Maschinenlernmodellen zu treffen, und unterstützen Sie dabei, die richtigen Maßnahmen zu ergreifen und die passenden Modelle auszuwählen. Wenn Sie mehr über die Herausforderungen bei der Erkennung von Ausreißern erfahren möchten, lesen Sie unsere Analyse zu Ausreißermethoden.
Iván Palomares Carrascosa ist ein führender Experte, Autor, Redner und Berater im Bereich KI, Maschinenlernen, Deep Learning und LLMs. Er schult und leitet andere an, wie sie KI in der realen Welt nutzen können.
Erhalten Sie das kostenlose E-Book „KDnuggets Artificial Intelligence Pocket Dictionary“ zusammen mit dem führenden Newsletter zu Datenwissenschaft, Maschinenlernen, KI und Analytik direkt in Ihr Postfach.
„`
Quellen: kdnuggets
Bildquelle: KI generiert