Bau moderner EDA-Pipelines mit Pingouin

# Einführung

Jeder, der sich schon lange mit Datenwissenschaft beschäftigt hat, lernt vielleicht früher oder später etwas: die goldene Regel der nachgelagerten Modellierung maschinellen Lernens, bekannt als Müll rein, Müll raus (GIGO).

Beispielsweise ist die Fütterung eines linearen Regressionsmodells mit hochgradig kollinearen Daten oder die Durchführung von ANOVA-Exams für heteroskedastische Varianzen das perfekte Rezept … für ineffektive Modelle, die nicht richtig lernen.

Explorative Datenanalyse (EDA) hat in Bezug auf Visualisierungen wie Streudiagramme und Histogramme viel zu sagen, sie reichen jedoch nicht aus, wenn wir eine strenge Validierung von Daten anhand der mathematischen Annahmen benötigen, die in nachgelagerten Analysen oder Modellen erforderlich sind. Pingouin hilft dabei, indem es die Lücke zwischen zwei bekannten Bibliotheken in den Bereichen Datenwissenschaft und Statistik schließt: SciPy Und Pandas. Darüber hinaus kann es ein großartiger Verbündeter beim Aufbau solider, automatisierter EDA-Pipelines sein. In diesem Artikel erfahren Sie, wie Sie eine ganzheitliche Pipeline für eine strenge, statistische EDA aufbauen und dabei mehrere wichtige Dateneigenschaften validieren.

# Ersteinrichtung

Stellen wir zunächst sicher, dass wir Pingouin in unserer Python-Umgebung installieren (und in Pandas, falls Sie es noch nicht haben):

!pip set up pingouin pandas

Danach ist es an der Zeit, diese Schlüsselbibliotheken zu importieren und unsere Daten zu laden. Als Beispiel für einen offenen Datensatz verwenden wir einen, der Proben von Weineigenschaften und deren Qualität enthält.

import pandas as pd
import pingouin as pg

# Loading the wine dataset from an open dataset GitHub repository
url = "https://uncooked.githubusercontent.com/gakudo-ai/open-datasets/refs/heads/fundamental/wine-quality-white-and-red.csv"
df = pd.read_csv(url)

# Displaying the primary few rows to know our options
df.head()

# Überprüfung der univariaten Normalität

Die erste der spezifischen explorativen Analysen, die wir durchführen werden, betrifft eine Überprüfung der univariaten Normalität. Viele herkömmliche Algorithmen zum Trainieren von Modellen für maschinelles Lernen – und statistische Exams wie ANOVAs und T-Exams – erfordern die Annahme, dass kontinuierliche Variablen einer Normalverteilung, auch bekannt als Gaußsche Verteilung, folgen. Pingouins pg.normality() Die Funktion hilft bei dieser Überprüfung durch einen Shapiro-Wilk-Check im gesamten Datenrahmen:

# Choosing a subset of steady options for normality checks
options = ('fastened acidity', 'risky acidity', 'citric acid', 'pH', 'alcohol')

# Operating the normality check
normality_results = pg.normality(df(options))
print(normality_results)

Ausgabe:

                         W          pval  regular
fastened acidity     0.879789  2.437973e-57   False
risky 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, als würde keines der verfügbaren numerischen Merkmale der Normalität genügen. Das ist keineswegs etwas Falsches an den Daten; es ist einfach ein Teil seiner Eigenschaften. Wir erhalten gerade die Nachricht, dass wir in späteren Datenvorverarbeitungsschritten über unsere EDA hinaus möglicherweise die Anwendung von Datentransformationen wie Log-Transformation oder Field-Cox in Betracht ziehen sollten, die die Rohdaten „normaler“ aussehen lassen und somit besser für Modelle geeignet sind, die von Normalität ausgehen.

# Überprüfung der multivariaten Normalität

Ebenso ist die Bewertung der Normalität nicht Merkmal für Merkmal, sondern die Berücksichtigung der Interaktion zwischen Merkmalen ein weiterer interessanter zu untersuchender Aspekt. Sehen wir uns an, wie man die multivariate Normalität überprüft: eine Schlüsselanforderung beispielsweise bei Techniken wie der multivariaten ANOVA (MANOVA).

# Henze-Zirkler multivariate normality check
multivariate_normality_results = pg.multivariate_normality(df(options))
print(multivariate_normality_results)

Ausgabe:

HZResults(hz=np.float64(23.72107048442373), pval=np.float64(0.0), regular=False)

Und raten Sie mal: Vielleicht bekommen Sie so etwas HZResults(hz=np.float64(23.72107048442373), pval=np.float64(0.0), regular=False)was bedeutet, dass auch die multivariate Normalität nicht gilt. Wenn Sie ein Modell für maschinelles Lernen anhand dieses Datensatzes trainieren möchten, bedeutet dies, dass nichtparametrische, baumbasierte Modelle wie Gradient Boosting und Random Forests möglicherweise eine robustere Different sind als parametrische, gewichtsbasierte Modelle wie SVM, lineare Regression usw.

# Überprüfung der Homoskedastizität

Als nächstes kommt ein kniffliges Wort für ein ziemlich einfaches Konzept: Homoskedastizität. Dies bezieht sich auf die gleiche oder konstante Varianz zwischen Fehlern in Vorhersagen und wird als Maß für die Zuverlässigkeit interpretiert. Wir werden diese Eigenschaft (leider ist es zu schwierig, ihren Namen noch einmal zu schreiben!) mit Pingouins Implementierung von Levenes Check wie folgt testen:

# Levene's check for equal variances throughout teams
# 'dv' is the goal, dependent variable, 'group' is the specific variable
homoscedasticity_results = pg.homoscedasticity(knowledge=df, dv='alcohol', group='high quality')
print(homoscedasticity_results)

Ergebnis:

                W          pval  equal_var
levene  66.338684  2.317649e-80      False

Seit wir es bekommen haben False Wieder einmal haben wir ein sogenanntes Heteroskedastizitätsproblem, das in nachgelagerten Analysen berücksichtigt werden sollte. Ein möglicher Weg könnte darin bestehen, beim Coaching von Regressionsmodellen robuste Standardfehler zu verwenden.

# Sphärizität prüfen

Eine weitere zu analysierende statistische Eigenschaft ist die Sphärizität, die angibt, ob die Varianzen der Unterschiede zwischen möglichen paarweisen Kombinationen von Bedingungen gleich sind. Das Testen dieser Eigenschaft ist in der Regel wünschenswert, bevor die Hauptkomponentenanalyse (PCA) zur Dimensionsreduktion durchgeführt wird, da sie uns hilft zu verstehen, ob Korrelationen zwischen Variablen bestehen. PCA wird ziemlich nutzlos, falls es keine gibt:

# Mauchly's sphericity check
sphericity_results = pg.sphericity(df(options))
print(sphericity_results)

Ergebnis:

SpherResults(spher=False, W=np.float64(0.004437706589942777), chi2=np.float64(35184.26583883276), dof=9, pval=np.float64(0.0))

Sieht so aus, als hätten wir uns für einen ziemlich unbezwingbaren, trockenen Datensatz entschieden! Aber keine Angst – dieser Artikel konzentriert sich bewusst auf den EDA-Prozess und hilft Ihnen dabei, viele Datenprobleme wie diese zu identifizieren. Letztendlich ist es weitaus besser, sie zu erkennen und zu wissen, was dagegen zu tun ist, bevor eine nachgelagerte Analyse durch maschinelles Lernen erfolgt, 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 Identitätskorrelationsmatrix abgelehnt wird, dh zwischen den Variablen bestehen sinnvolle Korrelationen. Wenn wir additionally viele Funktionen hätten und die Dimensionalität reduzieren wollten, könnte die Anwendung von PCA eine gute Idee sein.

# Überprüfung der Multikollinearität

Zuletzt prüfen wir die Multikollinearität: eine Eigenschaft, die angibt, ob es stark korrelierte Prädiktoren gibt. Dies könnte irgendwann zu einer unerwünschten Eigenschaft in interpretierbaren Modellen wie linearen Regressoren werden. Lass es uns überprüfen:

# Calculating a sturdy correlation matrix with p-values
correlation_matrix = pg.rcorr(df(options), technique='pearson')
print(correlation_matrix)

Ausgabematrix:

                 fastened acidity risky acidity citric acid     pH alcohol
fastened acidity                -              ***         ***    ***     ***
risky 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 Pandas corr() kann ebenfalls verwendet werden, Pingouins Gegenstück verwendet Sternchen, 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, aber dennoch klein sein – Multikollinearität wird zu einem Downside, wenn der Absolutwert der Korrelation hoch ist (typischerweise über 0,8). In unserem Fall ist keine der paarweisen Korrelationen gefährlich groß, da alle fünf bewerteten Merkmale weitgehend überlappungsfreie, eindeutige eigene Informationen für weitere Analysen liefern.

# Zusammenfassung

Anhand einer Reihe von Beispielen, die einzeln angewendet und erklärt wurden, haben wir gesehen, wie wir das Potenzial von Pingouin, einer Open-Supply-Python-Bibliothek, freisetzen können, um robuste, moderne EDA-Pipelines auszuführen, die Ihnen dabei helfen, bessere Entscheidungen bei der Datenvorverarbeitung und nachgelagerten Analysen auf der Grundlage fortgeschrittener statistischer Exams oder Modelle für maschinelles Lernen zu treffen und Ihnen dabei zu helfen, die richtigen Aktionen auszuwählen und die richtigen Modelle zu verwenden.

Iván Palomares Carrascosa ist ein führender Autor, Redner und Berater in den Bereichen KI, maschinelles Lernen, Deep Studying und LLMs. Er schult und leitet andere darin, KI in der realen Welt zu nutzen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert