Handling Dirty Data - Wie lassen sich auch ohne einwandfreie Daten effektiv KI-Projekte umsetzen?
Die Datenqualität spielt eine entscheidende Rolle für die Zuverlässigkeit der darauf trainierten Machine Learning Modelle. Ganz nach dem Prinzip "Garbage in - Garbage out" führen unvollständige, inkonsistente oder fehlerhafte Daten zu schlechten Modellen. Der Versuch auf solchen Daten verlässliche Modelle zu trainieren raubt Zeit, Geld und Nerven und führt selten zum Erfolg. Wie mit Dirty Data umzugehen ist, wird in diesem Tutorial erklärt.
Wenn man sich mit Maschinellem Lernen (Machine Learning, ML) beschäftigt fängt fast jeder mit Einsteigertutorials und Beispieldatensätzen an zu lernen. Man versucht den gesamten Machine Learning Prozess zu verstehen und nachbilden zu können. Aber irgendwann kommt der Punkt, an dem man von der Tutorialwelt in die echte Welt übergehen und sein erlerntes Wissen auf „echten“ Daten anwenden will. Die meisten merken dann schnell: Das klappt irgendwie nicht so wie im Tutorial. Ehe man sich versieht, wird man z.B. mit einem "ValueError" und "InvalidArgumentError" konfrontiert, weil im Datensatz Werte fehlen, oder das Datenformat nicht stimmt. Bevor man sich also darum kümmern kann, welches Modell man trainieren will und wie man die Leistung optimieren kann, muss man sich um die Qualität der Daten kümmern. In den Tutorials werden fast immer Datensätze verwendet, welche bereits bereinigt und vorverarbeitet worden sind. Solche Daten entsprechen aber nicht der Realität. Denn reale Daten sind nie perfekt. In realen Datensätzen gibt es immer Unsauberheiten und damit verbundene Probleme im Maschine Learning Prozess. Und in diesem Zusammenhang wird dann von Dirty Data gesprochen, also Daten, die inkonsistent, fehlerhaft, unvollständig oder auf andere Weise verunreingt sind. Diese Unsauberheiten müssen bereinignt werden, um das volle Potenzial der Daten ausschöpfen zu können.
Was ist eigentlich das Problem an Dirty Data?
Aber warum ist es so wichtig, dass die Datensätze für den Einsatz von Künstlicher Intelligenz (KI) und MMachine Learning möglichst sauber sind? Sind die Algorithmen nicht "schlau" genug, um damit selbst klar zu kommen? Um diese Frage zu beantworten, muss man sich die grundsätzliche Funktionsweise ansehen, die hinter KI steckt. In der KI müssen nicht mehr wie in der klassischen Programmierung die Modelle hart programmiert werden, sondern sie werden iterativ trainiert. Dabei lernt das Modell eine immer bessere Abbildung der Daten auf das gewünschte Ergebnis z.B. welcher Klasse etwas zugehört. Das wichtige ist dabei, dass das Modell sich so weit wie möglich auf die Daten anpasst, aber so allgemein wie nötig bleiben kann, damit es auch für neue nicht im Datensatz enthaltene, aber gleichwertige Daten funktioniert. Um also die in den Daten enthaltenen Muster so gut es geht abbilden zu können. ist es notwendig, dass diese Muster so klar wie möglich sind und nicht durch Unsauberheiten, die auf irgendiwe geartete Fehler oder Unregelmäßigkeiten zurückzuführen sind, verwaschen werden. Denn gerade während dem Training ist ein KI Modell noch "unwissend" und kann nicht identifizieren, welche Muster in den Daten nun relevant sind und welche eigentlich Fehler sind. Dirty Data kann dafür sorgen, dass eigentlich vorhandene Muster nicht erkannt werden oder das Muster erkannt werden, wo eigentlich keine sind Man muss also mit den Trainingsdaten eine möglichst vollständige und korrekte Abbildung der Realität ermöglichen.
Tut man das nicht, kommt es im Laufe des Machine Learning Prozesses zu Schwierigkeiten, deren Ursache sich zum Teil schwer im Nachhinein identifizieren und auf die Daten zurückführen lässt. Da der Entscheidungsprozess der Machine Learning-Methoden in vielen Fällen eine Black-Box ist, die nicht genau nachvollziehbar ist, kann sich das Erkennen und Zurückverfolgen von Problemen als sehr Zeit intensiv und kompliziert erweisen.
Effekte von Dirty Data:
-
Inakkurate Vorhersagen und Entscheidungen
-
Verfälschte Entscheidungen (biased) durch das Modell was zu Diskriminierung führen kann
-
Vertrauen in das Modell wird geschwächt
-
Kosten steigen, da Daten bereinigt werden müssen oder falsche Entscheidungen gefällt werden
-
Ansehensverlust
-
Trends und Muster sind schwerer zu erkennen
Mangelnde Datenqualität führt zu inakkuraten Vorhersagen und Entscheidungen. Das Modell ist nicht in der Lage Vorhersagen mit der eigentlich möglichen Zuverlässigkeit und Genauigkeit zu treffen. Die Daten führen dazu, dass Trends und Muster nicht richitg erkannt und genutzt werden können. Es kann auch dazu führen, dass das Modell durch den unabsichtlich eingebauten Bias diskriminierende Entscheidungen trifft. All das kann zudem zu einem erheblichen Vertrauensverlust führen, da man sich nicht auf das Modell verlassen kann. Und schlechte Entscheidungen sind teuer. Sie können zu strategischen Fehlentscheidungen führen und selbst wenn die Ursache in den Daten im Nachhinein gefunden wird, entstehen nicht unerhebliche Aufwände und Kosten für die Behebung und die Korrektur.
Auch von Menschen getroffene qualifizierte Entscheidungen beruhen auf einer guten Datenbasis und das gilt ebenso für das Machine Learning.
Allgemeine Kriterien für Datenqualität
Worauf ist bei der Beurteilung der Datenqualität zu achten, ist eine Frage die im Umgang mit Dirty Data naheliegt. In der Literatur werden dazu einige allgemeine Qualitätskriterien beschrieben, anhand derer man sich orientieren kann, wenn es darum geht einen Datensatz für ein bestimmtes Ziel zu evaluieren. Einige der am Häufigsten referenzierten Qualitätskriterien sind folgende:
- Genauigkeit (Accuracy): Damit ist gemeint, dass bei der Messung der Daten so gut wie möglich die Realität abgebildet werden sollte. Um dieses Ziel zu erreichen sollten die Daten fehlerfrei und korrekt erfassen, was sie angeben zu erfassen. Soll beispielsweise die durchschnittliche Raumtemperatur erfasst werden, sollte die Messung an einer Stelle durchgeführt werden, an der dies auch möglich ist, also nicht direkt an einer Türe, Fenster oder einer Heizung.
- Relevanz (Relevance): Bezieht sich darauf, wie wichtig und nützlich die Daten für die spezifische Problemstellung und damit das Modell sind. Werden zu viele eigentlich irrelevante Daten einbezogen verlängert sich dadurch die Trainingszeit und die Genauigkeit des Modells kann reduziert werden. Das Ziel ist es nicht einfach alles an Daten zu sammeln was einem einfällt und diese alle in ein Modell zu werfen und auf das beste zu hoffen. Bei Unsicherheit bezüglich der Relevanz der Daten bietet es sich an, diese anhand einer Feature Importance Analyse zu bewerten.
- Aktualität (Timeliness): Bezieht sich darauf, wie aktuell und zeitnah die Daten sind. Veraltete Daten können irrelevante oder falsche Vorhersagen verursachen. Gerade bei Daten denen sich verändernde Gegebenheiten zugrunde liegen, muss auf die Aktualität geachtet werden. Soll beispielsweise eine vorausschauende Wartung umgesetzt werden, macht es keinen Sinn ausschließlich mit Maschienendaten zu arbeiten, die vor 5 Jahren gemessen wurden. Da die Maschinen verschleißen und sich auch die Beriebsumstände geändert haben können, könnte damit keine zuverlässige Vorhersage umgesetzt werden.
- Konsistenz (Consistency): Hierbei wird Bewertet, ob Daten in verschiedenen Datenbanken oder Datensätzen übereinstimmen. Auch über mehrere Datenbanken und Datensätze hinweg darf es nicht zu Widersprüchen in den Daten kommen. Das ist ein häufiges Problem, wenn Daten über verschiedene Datenbanken verteilt bearbeitet werden und dezentral verwaltet werden.
- Vollständigkeit (Completeness): Hierbei geht es darum, ob alle Daten im Datensatz enthalten sind, die notwendig sind, um das Problem möglichst genau zu lösen. Denn sind die Daten unvollständig, wird das Modell verzerrt und es kann zu falschen Ergebnissen führen. Bei der Planung der Datensammlung ist es somit äußerst relevant sich Gedanken zu machen, welche Variablen Einfluss auf die Problemstellung haben können. Ist der Problemfall, den man lösen möchte beispielsweise saisonabhängig, müssen auf jedenfall Daten von mindestens zwei Jahren vorhanden sein, damit ausreichend Wissen über das Verhalten in den einzelnen Jahreszeiten verfügbar ist.
- Einheitlichkeit (Uniformity): Bezieht sich darauf, dass die Daten in einem konsistenten Format vorliegen. Uneinheitliche Formate, wie unterschiedliche Datumsformate oder Maßeinheiten, können die Datenverarbeitung und Analyse erschweren. Ein häufiges Problem ist das Sammeln von Daten über verschiedene Steuergeräte hinweg. Oftmals erfassen diese die Daten in unterschiedlichen Formaten oder unterschiedlich genormt.
- Einzigartigkeit (Uniqueness): Bei der Einzigartigkeit der Daten geht es darum, dass es nicht zu Dopplungen im Gesamtdatensatz kommen darf. Kommen Einträge mehrfach vor, wird das Modell dadurch verzerrt und die Genauigkeit nimmt ab.
Wichtig zu berücksichtigen ist, dass eine umfassende Qualitätsberuteilung nur im Kontext der zu lösenden Problemstellung möglich ist. Einige Qualitätsaspekte lassen sich nicht beurteilen, wenn unklar ist, welches Ziel erreicht werden soll.
Datensatz
Für dieses Tutorial kann jeder beliebige Datensatz mit nummerischen Werten verwendet werden. Es wurde zur Erstellung der im KIlab verfübare Photovoltaik Datensatz verwendet, dabei handelt es sich um einen Zeitreihendatensatz.
Datensatz hochladen
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import seaborn as sns
from sklearn.utils import resample
from scipy import stats
# Datensatz einlesen
# data = pd.read_csv('photovoltaik.csv')
# Für die Demonstration, kann auch wie hier mit einem Dummy-Datensatz gearbeitet werden.
data = pd.DataFrame({
'feature1': np.random.randn(100),
'feature2': np.random.randn(100),
'quality_class': np.random.choice(['A', 'B', 'C'], 100),
'date1': pd.date_range(start='1/1/2020', periods=100),
'date2': pd.date_range(start='1/1/2020', periods=100, freq='M')
})
Datenverständnis
Ein zentral wichtiger Punkt für den richitgen Umgang mit Daten ist es den Datensatz zu beschreibung und wichtige Aspekte zu visualisieren. Deskriptive Statistiken und Visualisierungen sind entscheidend, um die Datenqualität im Machine-Learning-Prozess sicherzustellen. Sie helfen, Fehler wie fehlende Werte, Ausreißer oder doppelte Einträge frühzeitig zu erkennen und die Verteilung sowie Zusammenhänge der Daten besser zu verstehen. Visualisierungen wie Scatterplots oder Korrelationsmatrizen decken Muster, Anomalien und Beziehungen zwischen Variablen auf, während statistische Kennzahlen wie Mittelwert oder Standardabweichung wichtige Hinweise auf Datenprobleme liefern. Diese Analysen ermöglichen es, potenzielle Verzerrungen zu vermeiden und eine solide Grundlage für Feature Engineering und Modelltraining zu schaffen. Sie sind ein unverzichtbarer erster Schritt für hochwertige Ergebnisse.
Im KIlab ist dieser Schritt nur eingeschränkt integriert, da die Datenbereinigung automatisiert ist. Die Datensatzbeschreibungen dienen dementsprechend vor allem dazu, zu kontrollieren, ob es sich um den richtigen Datensatz handelt.
# Schritt 1: Beschreibende Statistiken und Visualisierungen
def beschreiben_und_visualisieren(data):
print(data.head())
# Beschreibende Statistiken
print(data.describe())
# Visualisierungen
plt.figure(figsize=(12, 6))
# Histogramm für jede numerische Eigenschaft
data.hist(bins=20, figsize=(12, 10), layout=(4, 4))
plt.show()
# Heatmap für Korrelationen
plt.figure(figsize=(10, 8))
sns.heatmap(data.corr(), annot=True, cmap='coolwarm')
plt.show()
# Heatmap für fehlende Werte
plt.figure(figsize=(10, 8))
sns.heatmap(data.isnull(), cbar=False, cmap='viridis')
plt.show()
beschreiben_und_visualisieren(data)
Arten von Dirty Data
Aber was meine ich mit unsauberen Daten? Woher kommen sie und wie gehe ich damit um? Erst mal. Es ist völlig normal, dass Datensätze nicht perfekt sind Der erste Schritt bei der Arbeit mit unvollkommenen Daten besteht darin, zu verstehen, wo und wie die Daten fehlerhaft sind
Beim Sammeln der Daten ist es äußerst relevant sich im Vorfeld Gedanken zu machen, wo Fehler auftreten können und ob es Möglichkeiten gibt diese direkt zu verhindern. Beispielsweise kann man bei bestimmten Sensordaten kritische Grenzen implementieren, wenn diese beim Datensammeln unter oder überschritten werden,
Natürlich ist es wichtig und gut zu versuchen, Fehlerquellen zu reduzieren, aber es können i.d.R. nie alle Fehler ausgemerzt werden und wir beschäftigen uns heute damit, wie man mit den verbleibenden Unsauberkeiten in den Daten umgehen kann.
Was vielen nicht klar ist, ist die Wichtigkeit von Fachwissen aus dem relevanten Fachgebiet des Datensatzes. Ohne das Wissen der Facharbeiter, sind manche Arten von Dirty Data schwer oder gar nicht identifizierbar. Aber dazu später mehr.
Fehlende Werte
Fehlende Werte bedeutet, dass einzelne Datenpunkte im Datensatz fehlen oder verloren gegeangen sind. Die Ursachen dafür sind vielfältig. Fehlende Werte treten auf, wenn einzelne Datenpunkte in einem Datensatz fehlen oder verloren gegangen sind. Die Ursachen dafür sind vielfältig, beispielsweise fehlerhafte Datenerfassung, Übertragungsprobleme oder systembedingte Lücken.
Das Problem Fehlende Werte können zu einem verzerrten oder falschen Gesamtbild in den Daten führen und somit Analysen oder Modelle negativ beeinflussen.
Mögliche Lösungsansätze
- Entfernen der fehlenden Werte Geeignet, wenn nur ein kleiner Prozentsatz der Daten betroffen ist.
-
Imputation: Die Imputation beschreibt Verfahren, um fehlende Werte in einem Datensatz zu ersetzen. Dies ist sinnvoll, weil sie den Informationsverlust minimiert und ermöglicht, dass Algorithmen und Modelle weiterhin mit vollständigen Daten arbeiten können. Hier sind die gängigen Methoden zur Imputation und ihre jeweiligen Vorteile:
-
Mittelwert- und Median-Imputation
-
Mittelwert-Imputation: Fehlende Werte werden durch den Durchschnitt der vorhandenen Werte einer Variable ersetzt. Vorteile: Einfach und schnell anwendbar; verringert Verzerrungen in symmetrisch verteilten Daten. Einschränkung: Kann bei schiefen Verteilungen falsche Trends erzeugen.
-
Median-Imputation: Fehlende Werte werden durch den Median der Variable ersetzt. Vorteile: Robust gegenüber Ausreißern; gut geeignet für schiefe Verteilungen. Einschränkung: Wie der Mittelwert eine einfache Schätzung, die komplexe Zusammenhänge nicht berücksichtigt.
-
-
Zeitreihenmethoden (Nachbarschaftsbasierte Imputation)
Fehlende Werte werden basierend auf den vorangegangenen und nachfolgenden Datenpunkten geschätzt (z. B. lineare Interpolation oder gleitender Durchschnitt). Vorteile: Bewahrt den zeitlichen Zusammenhang der Daten; besonders geeignet für kontinuierliche Prozesse. Einschränkung: Kann ungenau sein, wenn die Zeitreihe stark schwankend oder von saisonalen Mustern geprägt ist.
-
Klassifikation und Regression:
- Klassifikation: Fehlende Werte in kategorischen Variablen werden durch ein Modell vorhergesagt, das aus den vorhandenen Daten trainiert wurde.
- Regression: Für numerische Variablen werden fehlende Werte mithilfe eines Regressionsmodells berechnet, das andere Merkmale des Datensatzes berücksichtigt. Vorteile: Nutzt vorhandene Datenpunkte und berücksichtigt komplexe Beziehungen zwischen Variablen. Einschränkung: Sehr aufwendig; kann Fehler enthalten, wenn das zugrunde liegende Modell ungenau ist.
-
Warum ist Imputation sinnvoll?
Die Imputation verhindert, dass Datenlücken zu einem kompletten Ausschluss betroffener Datensätze führen, was den Informationsverlust reduziert. Zudem ermöglicht sie es, die statistische Aussagekraft zu erhalten und Verzerrungen in Modellen zu minimieren. Dennoch muss sorgfältig darauf geachtet werden, dass die gewählte Methode zur Art der Daten passt, um zusätzliche Fehlerquellen zu vermeiden.
# Schritt 2: Umgang mit fehlenden Werten
def umgang_mit_fehlenden_werten(data):
# Zähle fehlende Werte
fehlende_werte = data.isnull().sum()
print("Fehlende Werte:\n", fehlende_werte)
# Option 1: Fehlende Werte durch den Mittelwert ersetzen
data.fillna(data.mean(), inplace=True)
# Option 2: Fehlende Werte durch den Median ersetzen
# data.fillna(data.median())
# Option 3: Fehlende Werte durch den Modus ersetzen
#data.fillna(data.mode().iloc[0])
umgang_mit_fehlenden_werten(data)
Doppelte Werte
Doppelte Werte, auch als Duplikate bezeichnet, entstehen, wenn identische oder nahezu identische Einträge mehrfach im Datensatz vorhanden sind. Dies kann verschiedene Ursachen haben, z. B. doppelte Datenerfassung, fehlerhafte Datenintegration aus mehreren Quellen oder unbeabsichtigte Wiederholungen bei Datenbankoperationen.
Probleme von doppelten Werten:
- Verzerrung von Analysen: Doppelte Werte führen dazu, dass bestimmte Beobachtungen überrepräsentiert werden, was statistische Analysen oder maschinelle Lernmodelle verzerrt.
- Leistungsprobleme: In großen Datensätzen erhöhen Duplikate die Datenmenge unnötig, was zu längeren Verarbeitungszeiten und erhöhtem Speicherbedarf führt.
- Fehlerhafte Entscheidungen: Doppelte Werte können falsche Einblicke liefern und damit Entscheidungen negativ beeinflussen, insbesondere in Bereichen wie Kundenanalysen oder Berichten.
Mögliche Lösungsansätze:
Um die negativen Auswirkungen von Duplikaten zu vermeiden, können verschiedene Maßnahmen ergriffen werden:
-
Identifikation von Duplikaten
- Exakte Duplikate: Identische Zeilen im Datensatz können leicht mit einfachen Funktionen (z. B. drop_duplicates() in Pandas) identifiziert werden.
- Nahezu doppelte Werte: Erfordert erweiterte Methoden wie Fuzzy-Matching, z. B. durch String-Similarity-Algorithmen (z. B. Levenshtein-Distanz), um ähnliche, aber nicht identische Einträge zu finden (z. B. "Max Mustermann" vs. "Max. Mustermann").
-
Bereinigung von Duplikaten
-
Löschen doppelter Werte: Entfernen aller exakten Duplikate, sofern sie keine zusätzliche Information enthalten. Vorsicht: Manchmal können scheinbare Duplikate valide sein (z. B. eine Person, die mehrere Bestellungen aufgegeben hat).
-
Zusammenführen ähnlicher Werte: Kombinieren von Duplikaten, indem relevante Informationen zusammengefasst werden. Beispiel: Bei Kunden-IDs könnten mehrere Einträge zu einem einzigen Kunden konsolidiert werden.
-
-
Vermeidung von Duplikaten
Datenvalidierung: Sicherstellen, dass bereits bei der Datenerfassung oder Integration Mechanismen vorhanden sind, die doppelte Einträge verhindern (z. B. eindeutige Schlüssel in Datenbanken). Datenbereinigung automatisieren: Regelmäßige Überprüfungen und Algorithmen zur Duplikaterkennung in den Datenverarbeitungsprozessen implementieren.
Fehlerhafte Daten
Fehlerhafte Werte entstehen, wenn Datenpunkte falsch oder unplausibel sind. Sie können durch menschliche Fehler oder technische Probleme verursacht werden. Fehler können beispielsweise durch Fehler bei der Eingabe entstehen, wie bei einer Umfrage in der ein Teilnehmer versehentlich ein Alter von 200 Jahren eingibt. Oder aber durch technische Defekte von Sensoren, die zum Beispiel eine Außentemperaturen von über 70°C aufzeichnen, obwohl die höchste jemals gemessene Temperatur weltweit bei 57°C liegt.
Probleme fehlerhafter Werte:
- Verzerrte Analysen: Fehlerhafte Werte können Durchschnittswerte, Trends oder Modelle stark beeinflussen.
- Reduzierte Datenqualität: Daten verlieren ihre Glaubwürdigkeit, wenn sie unrealistische oder inkonsistente Werte enthalten.
- Fehlerhafte Modellvorhersagen: Machine Learning Modelle können falsche Zusammenhänge lernen, wenn fehlerhafte Werte unentdeckt bleiben.
Umgang mit fehlerhaften Werten
-
Identifikation fehlerhafter Werte
- Regelbasierte Ansätze: Überprüfen, ob Werte in einem sinnvollen Bereich liegen (z. B. Alter zwischen 0 und 120 Jahren, Außentemperaturen zwischen -50°C und 60°C).
- Statistische Ansätze: Identifikation von Ausreißern mithilfe von Interquartilsabstand (IQR) oder Standardabweichung (z. B. Werte, die mehr als 3 Standardabweichungen vom Mittelwert entfernt liegen).
- Machine Learning: Anomalieerkennung, bei der Algorithmen ungewöhnliche Datenpunkte identifizieren (z. B. Clustering oder Isolation Forest).
-
Bereinigung fehlerhafter Werte (Die Vorgehensweise hängt davon ab, wie viele Werte betroffen sind und welche Art von Fehler vorliegt)
- Ersetzen fehlerhafter Werte (Imputation): Bei geringer Anzahl fehlerhafter Werte können diese wie fehlende Werte behandelt werden.
- Entfernen fehlerhafter Datenpunkte: Wenn ein Datenpunkt zahlreiche fehlerhafte Werte enthält oder die Fehler nicht zuverlässig korrigiert werden können, sollte er vollständig entfernt werden. Vorsicht: Entfernen sollte nur erfolgen, wenn dies keine signifikante Verzerrung im Datensatz verursacht.
Ersetzen oder Entfernen?
Die Entscheidung, ob fehlerhafte Werte ersetzt oder entfernt werden, hängt von der Anzahl der betroffenen Werte ab. Sind nur wenige Datenpunkte betroffen, ist das Entfernen meist unproblematisch. Bei vielen betroffenen Werten ist Ersetzen sinnvoller, um den Datenverlust zu minimieren. Auch die Art des Fehlers spielt eine Rolle. Sind die Fehler systematisch (z. B. defekter Sensor), sollten sie gezielt korrigiert werden. Bei unsystematischen Fehlern (z. B. Tippfehler) kann eine einfache Ersetzung ausreichen.
# Altersspalte hinzufügen mit zufälligen Werten, inklusive fehlerhafter Alterswerten
np.random.seed(42) # wichtig für die Reproduzierbarkeit
data['age'] = np.random.choice(range(-5, 120), 100)
# Funktion zur Identifikation und Korrektur fehlerhafter Alterswerte
def correct_age_outliers(df, age_column, min_age=5, max_age=100):
# Fehlerhafte Werte identifizieren
invalid_age = (df[age_column] < min_age) | (df[age_column] > max_age)
# Anzahl der Fehler ausgeben
print(f"Anzahl fehlerhafter Werte: {invalid_age.sum()}")
# Fehlerhafte Werte durch den Median der gültigen Alterswerte ersetzen
median_age = df.loc[~invalid_age, age_column].median()
print(f"Median der gültigen Alterswerte: {median_age}")
df.loc[invalid_age, age_column] = median_age
return df
# Vor der Korrektur fehlerhafte Alterswerte anzeigen
print("Fehlerhafte Alterswerte vor der Korrektur:")
print(data[data['age'] < 5].append(data[data['age'] > 100]))
# Alterswerte korrigieren
data = correct_age_outliers(data, 'age')
# Nach der Korrektur fehlerhafte Alterswerte anzeigen
print("\nFehlerhafte Alterswerte nach der Korrektur:")
print(data[data['age'] < 5].append(data[data['age'] > 100]))
Unausgeglichene Datensets
Ungleichgewicht in den Daten
Ein unausgeglichener Datensatz liegt vor, wenn bestimmte Klassen überrepräsentiert sind, während andere nur unzureichend vertreten sind. Das führt dazu, dass Machine Learning Modelle bevorzugt die Mehrheitsklasse vorhersagen und die Minderheitsklassen vernachlässigen.
Probleme unausgeglichener Datensätze: Wenn beispielsweise bei medizinischen Daten ein Großteil der Probanden männlich sind, führt dies zu einer Verzerrung in Richtung der männlichen Testgruppe. Auch in der Produktion kann dies zu großen Schwierigkeiten führen. Sollen beispielsweise bei einer Maschine mögliche Fehlerfälle frühzeitig vorhergesagt werden, ist es wichtig, dass auch alle relevanten Fehlerfälle in den Daten enthalten sind. Dominiert ein Fehlerfall stark, wird das Modell überwiegend diesen Fall vorhersagen.
Lösungen für unausgeglichene Datensätze
Um das Ungleichgewicht zu beheben und Modelle zu verbessern, gibt es mehrere Ansätze:
-
Resampling-Methoden
- Random Undersampling: Diese Methode reduziert die Mehrheitsklasse, indem zufällig Datenpunkte entfernt werden, um ein Gleichgewicht herzustellen. Sie ist einfach und spart Speicherplatz, birgt jedoch das Risiko von Informationsverlust, da wichtige Muster der Mehrheitsklasse verloren gehen können.
- Random Oversampling: Hier wird die Minderheitsklasse durch Duplizieren bestehender Datenpunkte vergrößert. Dies verhindert Datenverlust und ist leicht umzusetzen, erhöht jedoch das Risiko von Overfitting, da das Modell die duplizierten Daten "überlernen" könnte.
- Synthetische Daten: Synthetische Daten werden als neue Datenpunkte in der Minderheitsklasse erzeugt. Beispielsweise indem Werte zwischen vorhandenen Punkten interpoliert werden. Es gibt auch die Möglichkeit mit aufwändigeren Machine Learning Methoden (Generative KI) verwendet werden können, um synthetische Daten zu erzeugen.
-
Gewichtung der Klassen
Bei der Modellierung werden Klassen unterschiedlich gewichtet, sodass Fehler bei der Minderheitsklasse stärker bestraft werden als bei der Mehrheitsklasse. Diese Methode ist leicht anzuwenden und riecht in vielen Fällen bereits aus, um die Unausgewogenheit in den Daten zu kompensieren. Aber die Gewichte müssen sorgfältig gewählt werden, um ein Gleichgewicht zu finden, was einiges an Erfahrung erfordert und gerade Anfängern schwer fällt.
Verzerrung nicht immer leicht erkennbar
Nicht immer ist es so, dass ein Ungleichgewicht in den Daten sofort erkennbar ist. Deswegen ist es umso wichtiger sich bewusst zu machen, anhand welcher Kriterien der Datensatz bewertet werden sollte.
Die Ausgewogenheit kann in der Visualisierung der Datenqualität im Kilab einfach betrachtet werden. Die Behandlung muss aber außerhalb des KIlab durchgeführt werden.
def unausgeglichene_daten_beheben(data, ziel_feature, methode='upsample'):
# Identifiziere Klassenverteilung
klassen_verteilung = data[ziel_feature].value_counts()
print(klassen_verteilung)
# Visualisierung der Klassenverteilung vor dem Resampling
klassen_verteilung_df = klassen_verteilung.reset_index()
klassen_verteilung_df.columns = ['Klasse', 'Anzahl']
fig = px.bar(klassen_verteilung_df, x='Klasse', y='Anzahl',
title=f'Klassenverteilung vor dem Resampling ({methode})',
labels={'Klasse': 'Klasse', 'Anzahl': 'Anzahl'},
text='Anzahl')
fig.show()
# Bestimme die Größe der Mehrheits- und Minderheitsklasse
groesste_klasse_anzahl = klassen_verteilung.max()
kleinste_klasse_anzahl = klassen_verteilung.min()
# Leere Liste für die resampleten Klassen
resampled_klassen = []
# Iteriere über alle Klassen und gleiche sie entsprechend der Methode aus
for klasse, anzahl in klassen_verteilung.items():
klasse_daten = data[data[ziel_feature] == klasse]
if methode == 'upsample' and anzahl < groesste_klasse_anzahl:
# Hochsampeln der Minderheitsklassen
klasse_daten = resample(klasse_daten,
replace=True,
n_samples=groesste_klasse_anzahl,
random_state=42)
elif methode == 'downsample' and anzahl > kleinste_klasse_anzahl:
# Heruntersampeln der Mehrheitsklassen
klasse_daten = resample(klasse_daten,
replace=False,
n_samples=kleinste_klasse_anzahl,
random_state=42)
resampled_klassen.append(klasse_daten)
# Kombiniere alle Klassen
data_ausgeglichen = pd.concat(resampled_klassen)
# Ausgabe der neuen Klassenverteilung
print(data_ausgeglichen[ziel_feature].value_counts())
return data_ausgeglichen
# Beispielaufruf der Funktion
data = unausgeglichene_daten_beheben(data, 'quality_class', methode='upsample')
Inkonsistenzen
Inkonsistenzen treten auf, wenn gleiche Informationen in unterschiedlichen Formaten erfasst werden. Ein Beispiel hierfür ist die Darstellung von Daten im Format Tag-Monat-Jahr und Monat-Tag-Jahr. Solche Abweichungen können dazu führen, dass identische Merkmale als unterschiedlich behandelt werden oder – wie im Fall der Datumsformate – Fehler in den Daten entstehen.
Die Konsistenz der Spalten des Datensatzes muss zu Beginn beim Hochladen des Datensatzes kontrolliert werden. Bei Unstimmigkeiten wird ein erneutes Hochladen mit einem korrigierten Datensatz notwendig.
# Schritt 5: Standardisierung von Datumsformaten
def standardisiere_datumsformate(data):
# Identifiziere Datums-Spalten
datums_spalten = [col for col in data.columns if pd.api.types.is_datetime64_any_dtype(data[col])]
print("Datums-Spalten:", datums_spalten)
# Konvertiere alle Datums-Spalten in ein Standardformat (z.B. YYYY-MM-DD)
for col in datums_spalten:
data[col] = pd.to_datetime(data[col], errors='coerce').dt.strftime('%Y-%m-%d')
standardisiere_datumsformate(data)
Ausreißer
Hin und wieder kommt es vor, dass in einem Datensatz Werte vorkommen, die auffällig stark von den anderen Werten im Datensatz abweichen. In diesem Fall wird von Ausreißern gesprochen. Diese Ausreißer kommen oft durch Fehlerhafte Sensoren oder Übertragungsfehler zustande und entsprechen keinen tatsächlichen Ereignissen. Das große Problem ist, dass Machine Learning Modelle teilweise empfindlich auf solche Ausreißer reagieren und sich das ganze Modell in Richtung des Ausreißers verzerrt. Das führt natürlich zu einer Abnahme der Qualität, da das Modell versucht ein Ereignis abzubilden, dass nicht wirklich existiert und dabei die tatsächlich vorkommenen Muster in den Daten weniger gut abbilden kann. Das Modell ist dann weniger gut in der Lage die real vorkommenen Strukturen in den Daten zu erfassen.
Deswegen ist es sinnvoll Ausreißer aus den Daten zu entfernen und wie bei fehlenden Werten durch einen berechneten Wert zu ersetzen. Dabei ist wichtig zu beachten, dass nur echte Ausreißer entfernt werden sollten. Also nur Werte, die aufgrund von Fehlern zustande gekommen sind und denen keine tatsächlichen Ereignisse zugrundeliegen.
Echte Ausreißer
sind Datenpunkte, die Fehler im Datensatz darstellen. Also Werte, die so in der Realität nicht zustande kommen und deswegen entfernt werden müssen, da sie die Daten verzerren. Davon zu unterscheiden sind Datenpunkte, die zwar stark von anderen Werten abweichen, aber denen tatsächliche Effekte und Ereignisse zugrunde liegen. Diese sollten im Datensatz behalten werden. Um zu beurteilen, ob ein Ausreißer auf einem Fehler beruht, sollten Domänenexperten hinzugezogen werden. Diese können besser beurteilen, ob einem vermeindlichen Ausreißer ein selten vorkommendes aber realistisches Ereignis zugrunde liegt.
Um mit Ausreißern umgehen zu können gibt es verschiedene Strategien, die einzeln oder auch in Kombination angewendet werden können. Die am häufigsten verwendete Methode ist das Entfernen der Ausreißer aus den Daten. In einigen Fällen ist es aber so, dass man nicht genau sagen kann, ob die Ausreißer nun auf Fehler zurückzuführen sind oder nicht. Werden die Ausreißer nicht entfernt, sollte allerdings ihr Einfluss minimiert werden, um eine möglichst gute Modellqualität erreichen zu können. Durch die Normalisierung der Daten können die Ausreißer abgemildert werden. Dabei ist wichtig zu beachten, dass für die Nomralisierung nicht der Mittelwert oder die Standardabweichung verwendet werden sollten, sondern Median oder Modus. Da Mittelwert und Standardabweichung ebenfalls stark von Ausreißern beeinflusst werden können, ist es wichtig, bei der Normalisierung nicht auf diese Werte zurückzugreifen. Weicht der Mittelwert stark vom Median und Modus ab, ist das außerdem ein erster Hinweis darauf, dass in den Daten ein oder mehrere Ausreßer enthalten sind. Eine Weitere Transformation der Daten, die den Einfluss der Ausreißer minimiert ist die Log-Transformation. Bei dieser werden die Daten in eine normalverteilte Form gebracht.
Ein weiterer Ansatz ist der bei der Modellwahl darauf zu achten jene auszuwählen, welche gegenüber Ausreißern unempfindlich sind. Darunter fallen unter anderem die Random Forest Methode und der Naive Bayes Classifier. Methoden die sehr sensibel auf Ausreißer reagieren sind K-Means Clustering, die Prinzipal Component Analysis und im Allgemeinen Regressionen. Will man eine dieser Methoden verwenden, sollte auf jedenfall eine Strategie zum Umgang mit Ausreißern angewendet werden.
Ausreißer werden je nachdem wie ausgeprägt sie sind im KIlab als Warnungen oder Schwerwiegende Fehler in der Datenqualität angezeigt.
def ausreißer_entfernen(data, column, threshold_z=2):
# Überprüfen, ob die Spalte im DataFrame vorhanden ist
if column not in data.columns:
raise ValueError(f"Spalte '{column}' existiert nicht im DataFrame.")
# Visualisiere die Ausreißer
sns.boxplot(data[column])
# Berechnung der Z Scores
z = np.abs(stats.zscore(data[column])) # Z Scores
print("Z Score: ", z)
# Ermitteln der Ausreißer-Indizes
ausreißer_indizes = np.where(z > threshold_z)[0]
print("Ausreißer-Indizes (relativ zum DataFrame): ", ausreißer_indizes)
# Ermitteln der tatsächlichen Indizes im DataFrame
tatsächliche_ausreißer_indizes = data.index[ausreißer_indizes]
print("Tatsächliche Ausreißer-Indizes (aus dem DataFrame): ", tatsächliche_ausreißer_indizes)
# Entfernen der Ausreißer-Reihen
data_gesäubert = data.drop(index=tatsächliche_ausreißer_indizes)
print("Daten vor der Ausreißerentfernung:", data.shape)
print("Daten nach der Ausreißerentfernung:", data_gesäubert.shape)
return data_gesäubert
data = ausreißer_entfernen(data, "feature1")
Allgemeine Tipps
Damit haben wir einige der Dirty Data Probleme behandelt, mit denen man am Häufigsten konfrontiert wird. Zum Abschluss noch generelle Tipps im Umgang mit Dirty Data:
Neben der konkreten Behandlung einzelner Dirty Data Fälle gibt es auch allgmeine Tipps, die dabei helfen Modelle mit hoher Datenqualität zu erhalten.
Ein Punkt der naheliegend ist, aber dennoch oft nicht beachtet wird, ist die richtige Vorbereitung bei der Datensammlung. Es zahlt sich langfristig immer aus, wenn im Vorfeld an das Thema Datenqualität gedacht wird. Das bedeutet konkret, dass bereits bei der Planung der Datensammlung Konrollmechanismen und Standardierungen der Prozesse eingebunden werden. Durch das Aufbauen einer standardisierten Datenpipeline und die einheitliche Datenspeicherung sind ein wichitger Faktor, um zu verhindern, dass Daten komprimitiert werden oder es zu Inkonsistenzen in den Daten kommt. Innerhalb dieser Pipeline können bereits Kontrollen eingebaut werden, um auffällige Abweichungen in den Daten zeitnah zu erkennenn und zu beheben. Das hilft nicht nur dabei Dirty Data zu verhindern, sondern auch fehlerhafte Sensoren oder Maschinen zu identifizieren. Es sollte auch immer hinterfragt werden, was das eigentliche Ziel ist, warum die Daten gesammelt werden. Nur wenn klar ist, welche Problemstellungen behandelt werden sollen, können alle relevanten Datenquellen identifiziert und abgedeckt werden.
Auch das Datenverständnis ist unersetzlich im Machine Learning. Es ist sowohl für die Modellauswahl als auch die Datenbereinigung essenziell zu verstehen mit welchen Daten man es zu tun hat. Wie sind die Daten verteilt, welche Extremwerte kommen vor, welche Daten korrelieren miteinender usw.. Durch den Aufbau des Datenverständnisses können nicht nur Probleme identifiziert werden, es können auch neue Erkenntnisse aus den Daten gewonnen werden.
Auch wenn der Kontext der Daten für eine vollständige Vorverarbeitung der Daten wichtig ist, gibt es viele Schritte der Vorverarbeitung, die durch vordefinierte Methoden, Tools und Automatisierungen zeiteffizienter durchgeführt werden können. Gerade dann wenn Schritte häufig durchgeführt werden lässt sich durch das Anwenden von Automatisierungen und spezialisierten Tools viel Zeit sparen. Durch das Automatisieren und die Verwendung von Tools bietet auch eine Erleichterung für unerfahrene Anwender, da diese nicht alles von Hand alleine umsetzen müssen.
Ein letzter Tipp ist Mut zum Rückschritt. Auch wenn bereits ein standardisierter Datensammlungsprozess eingeführt und eine Bereinigung der Daten durchgeführt wurde, kann es passieren, dass einzelne Asekte übersehen wurden und im Modelltraining zu Schwierigkeiten führen. Man neigt jedoch ab einem bestimmten Fortschittt dazu, nicht mehr ganz an den Anfang zurückzugehen. Es wird dann versucht Probleme durch Modellanpassungen im Training zu beheben. Das kann in vielen Fällen auch zum gewünschten Ergebnis führen, aber eben nicht immer. Deswegen sollte immer kritisch hinterfragt werden, ob man es mit einem Modellproblem oder einem Datenproblem zu tun hat und im Zweifel muss man nocheinmal ein paar Schritte zurück gehen und in den Daten graben, ob sich dort nicht doch noch etwas finden lässt, was dort nichts zu suchen hat.
Ansprechpartner
Bei weiteren Fragen zu Datenqualität, dem KIlab.EE oder die Umsetzung von KI-Projekten im Allgemeinen schreiben Sie uns gerne eine Mail unter kilab-ee@zsw-bw.de
FAQ
Wer steckt eigentlich hinter dem KIlab.EE?
Das KI Team am Zentrum für Sonnenenergie- und Wasserstoff-Forschung Baden-Württemberg bringt seine jahrzehntelange Erfahrung im Bereich des Machine Learnings im Sektor der Erneuerbaren Energien ein, um das KIlab.EE zum Leben zu erwecken. Informier die einfach hier über uns.
Wo kann ich das KIlab.EE selbst ausprobieren?
Wer das KIlab.EE gern selbst ausprobieren will, kann sich gerne hier anmelden.
Wo finde ich ausführlichere Tutorials zur Umsetzung von eigenen KI-Anwendungen im KIlab.EE?
Ganz einfach besuche das KIlab.EE und probiere alles an erklärten Beispieldatensätzen durch oder schau bei unseren Tutorials vorbei.
Ich will selbst ein Projekt mit KI starten, aber habe noch Fragen. Wo kann ich Hilfe bekommen?
Bei Fragen rund um KI, ob nun am Anfang eines Projektes oder bei Schwierigkeiten auf dem Weg, helfen wir gerne. Melde dich einfach hier für eine KI Sprechstunde an.
Ähnliche Themen
[Anderes Tutorial]