Herausforderungen
Joern Ploennigs
Welche Schritte muss man beim Maschinellem Lernen durchlaufen?
Welcher Schritt ist der Zeitaufwändigste?
Datenaufbereitung ist der zeitaufwändigste (80%) und wenig herausforderndste langweiligste (76%) Schritt bei der Datenanalyse.1
Die digitale Transformation besteht zu 80 % aus Menschen, zu 20 % aus Technologie: Domänenwissen ist von entscheidender Bedeutung, und daher der Bedarf an Experten, die das Geschäft verstehen und über das notwendige Wissen verfügen, um die richtigen Fragen zu stellen und Antworten zu kontextualisieren.2
Die Datenanalyse in der Praxis geschieht meist nicht sequentiell, sondern man iteriert meist agil zu der richtigen Lösung. Das umfasst mehrmaliges Bereinigen der Daten, Überdenken der Modellauswahl und mehrmaliges Modell-Training und Modellvalidierung bevor das richtige Modell gefunden wird.
Big Data: Es werden mehr Daten erzeugt als gespeichert kann (z.B. Telekommunikation), bzw. bewegt werden kann (z.B. Satelliten).
Big Model: Modelle (z.B. LLM) sind zu groß, um sie zu bewegen bzw. die Berechnung zu aufwändig für einzelne Rechner.
Many Models: Es werden sehr viele spezifische Modelle erzeugt (z.B. Energievorhersage, Anomalierkennung).
Bei der Partitionierung wird eine Berechnung in kleinere, überschaubare Teilberechnungen zerlegt, die unabhängig voneinander (parallel) auf unterschiedlichen Teilen des Datensatzes berechnet werden. Dies ist besonders nützlich für Algorithmen die in Teilen berechnet und dann Aggregiert werden können (Statistiken, Lineare Regression, k-Means, Random Forest, SVM, PCA, KNN).
Wichtige Frameworks zur Parallelisierung sind dask und Spark.
Verteiltes Rechnen eines großen Modells ist eine Erweiterung der Partitionierung, bei der die Ausführung auf mehreren Rechenknoten (z.B. Cloud-PCs) verteilt werden, um die Effizienz und Geschwindigkeit zu erhöhen. Das bedeutet auch dass die Daten mit der Berechnung eines großen Modells auf die Rechenknoten verteilt werden müssen, was wiederum Performance-Nachteile mit sich bringen kann.
Typische Frameworks sind Hadoop und Spark die den MapReduce-Algorithmus (Dean and Ghemawat 2008) nutzen.
Beim verteiltem Rechnen vieler Modelle werden mehrere Modelle parallel trainiert. Diese nutzen meist unterschiedliche, z.T. überschneidende Datensätze. Die Aufgabe besteht darin die Daten und die Berechnungen über mehreren Rechenknoten in der Cloud zu verteilen. Zur Lastverteilung werden meist Joblisten genutzt.
Frameworks zum verteilten Rechnen sind Ray für Python Modelle, was wir bereits beim Reinforcement Learning genutzt haben, oder Airflow.
Sind die Daten zu Groß zum speichern, nutzt man mein Stream-Processing. Dabei werden die Datenströmen in Echtzeit kontinuierlich verarbeitet und nur die Ergebnisse und Modelle gespeichert. Werden die Modelle dabei kontinuierlich geupdated so spricht man auch vom Online Learning
. Das eignet sich besonders zur Datenaggregation (Statistiken), Mustererkennung (Anomalien), oder Vorhersagen mit hohen Echtzeitanforderungen (Short-Term-Trading).
Ein typisches Framework für Stream-Processing ist Kafka oder Flink.
from kafka import KafkaConsumer
import json
# Kafka-Consumer erstellen
consumer = KafkaConsumer('test-topic')
# Nachrichten vom Topic lesen und verarbeiten
for message in consumer:
# Verarbeitung der empfangenen Nachrichten
print(f"Received message: {message.value}")
# Kafka-Consumer schließen
consumer.close()
Beim Edge Computing werden die Daten bereit dort verarbeitet wo sie entstehen, also direkt auf den lokalen Geräten. Dadurch hat man schneller Ergebnisse und höheren Datenschutz. Das eignet sich insbesondere für Probleme wo nur lokale Modelle (z.B. Energievorhersage, Anomalieerkennung, etc.) benötig werden und globale Modelle vereinfacht nur angewendet werden, z.B. mit Tensorflow Lite.
import tensorflow as tf
# Modell für Edge Computing konvertieren
# converter = tf.lite.TFLiteConverter.from_keras_model(model)
# tflite_model = converter.convert()
# with open('model.tflite', 'wb') as f: f.write(tflite_model)
# TFLite-Modell auf Edge-Geräten ausführen
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Input und Output Tensor definieren
input_tensor = interpreter.tensor(interpreter.get_input_details()[0]['index'])
output_tensor = interpreter.tensor(interpreter.get_output_details()[0]['index'])
# Beispiel-Inferenz auf Edge-Gerät durchführen
input_tensor()[0] = input_data
interpreter.invoke()
print(output_tensor()[0])
Federated Learning erweitert das Edge Computing zum Training von gemeinsamen Modellen über verteilte Geräte, ohne dass die Daten zentralisiert werden müssen. Dabei wird lokal ein gemeinsames Modell weiter trainiert und Änderungen synchronisiert, so dass das gemeinsame Modell sich verbessert.
Hier können Frameworks wie PySyft oder Tensorflow Federated genutzt werden.
import tensorflow as tf
import tensorflow_federated.learning as tffl
# Federated Learning-Modell definieren
def create_federated_model():
return tf.keras.models.Sequential([
tf.keras.layers.Dense(10),
tf.keras.layers.Dense(1)
])
# TensorFlow Federated Konfiguration erstellen
fed_avg = tffl.build_federated_averaging_process(
model_fn=create_federated_model)
# Modell trainieren
initial_state = fed_avg.initialize()
for round_num in range(10):
state, metrics = fed_avg.next(state, client_data)
print('Round {}: loss={}'.format(round_num, metrics.loss))
Definition: Personenbezogene Daten
Personenbezogene Daten [sind] alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen.
Definition: Anonymisierung
Die Anonymisierung von Daten ist ein Verfahren, um personenbezogene Daten so zu verändern, dass die betroffene Person nicht mehr identifiziert werden kann. Es gibt verschiedene Methoden und Techniken zur Anonymisierung, die je nach Anwendungsfall und erforderlichem Schutzgrad eingesetzt werden.
Beispieldatensatz mit verschiedenen personenbezogenen Daten
# Beispieldaten erstellen
import pandas as pd
import numpy as np
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Geburt': ['1990-01-01', '1985-05-23', '1979-07-14', '1992-12-30', '1988-03-09'],
'Telefon': ['0123/4567890', '0234/5678901', '0345/6789012', '0456/7890123', '0567/8901234'],
'Gehalt': [50000, 60000, 55000, 65000, 70000],
'PLZ': ['10115', '10243', '10365', '10437', '10555']
})
print(df)
Beschreibung: Daten werden durch ein Pseudonym ersetzt, das die direkte Identifikation der Person verhindert, aber erlaubt die ursprünglichen Daten wiederherzustellen.
Anwendung: Häufig verwendet, um Daten zu schützen, die ggf. wiederhergestellt werden sollen.
Beispiel: Ersetzung eines Namens durch eine Kennnummer.
Beschreibung: Ersetzen von Daten mit Platzhaltern oder zufälligen Werten, um die Identifikation der betroffenen Person zu verhindern.
Anwendung: Oft verwendet in Entwicklungs- und Testumgebungen, um den Zugriff auf echte personenbezogene Daten zu vermeiden.
Beispiel: Umwandlung von Telefonnummern in “XXXX/XXX4534”.
Beschreibung: Daten werden nur in zusammengefasster Form dargestellt, sodass nur noch statistische Infos verfügbar sind.
Anwendung: Häufig in Berichten und statistischen Analysen.
Beispiel: Anstatt individuelle Gehälter anzugeben, wird der Durchschnitt genutzt.
Beschreibung: Datenfelder oder Datensätze werden vollständig entfernt, um die Identifikation der betroffenen Person zu verhindern.
Anwendung: Bei besonders sensiblen Datenfeldern, die nicht für den Analysezweck erforderlich sind.
Beispiel: Entfernen von Geburtsdaten aus einem Datensatz.
Beschreibung: Datenverschiebung vertauscht Datenfelder zufällig, sodass diese nicht mehr den ursprünglichen Personen zugeordnet werden können.
Anwendung: Erlaubt die statistische Analyse zu ermöglichen, ohne dass Datensätze zurückverfolgt werden.
Beispiel: Vertauschen der Postleitzahlen zwischen verschiedenen Datensätzen.
Beschreibung: Die Präzision der Daten wird durch die Verallgemeinerung reduziert, sodass Individuen nicht mehr identifizierbar sind.
Anwendung: Bei der Veröffentlichung von Daten, um detaillierte Informationen zu verbergen.
Beispiel: Anstatt das Gehalt anzugeben, wird die Gehaltsgruppe verwendet.
Beschreibung: Daten werden durch zufällige Veränderungen modifiziert, um die Identifikation zu erschweren, ohne den Mittelwert zu ändern.
Anwendung: In Datenbanken und bei der Veröffentlichung von Mikrodaten.
Beispiel: Hinzufügen eines zufälligen Rauschens zu Gehaltsdaten.
Beschreibung: Verschleierung (Obfuscation) fügt falsche oder ungenaue Daten in den Datensatz hinzu, um die Identifikation zu erschweren.
Anwendung: Schutz besonders sensibler Informationen.
Beispiel: Leichte Veränderung von GPS-Koordinaten.
Definition: Algorithmic Fairness
Algorithmen, insbesondere ML Modelle, sollten keine Vorurteile abbilden und nicht bestimmte Gruppen privilegieren oder diskriminieren und somit anti-diskriminierung Gesetzen entsprechen.
Insbesondere sensibel sind Merkmale bezüglich: - Geschlecht - Sexualität - Rasse - Alter - Religionuigkeit vs. Fairness - Wohnort - Behinderungen
Unprofessional Hair for Work
Schufa Score - Schätzwert für die Wahrscheinlichkeit, dass ein Kredit bedient wird
Algorithmus ist proprietär
2018 formte sich OpenSchufa-Projekt welches durch Selbstauskunft versucht hat den Schufa Algorithmus zu testen
Ergebnisse zeigen, dass Geschlecht, Alter und andere Faktoren den Score beeinflussen – z.B. werden junge Männer eher schlecht bewert, auch ohne negative Geschichte
Manueller Ansatz in der Vergangenheit
Digitaler Ansatz
Fairness der Daten Durch Vorverarbeitung kann man versuchen gezielt den Bias aus den Trainingsdaten zu entfernen.
Fairness der ML Modelle Spezielle Modelle erlauben es die sensitiven Daten verstärkt zu ignorieren.
Fairness des Ergebnisse Bestimmte Tests und Algorithmen Bewerten die Fairness von Modellen und ggf. widerrufen Ergebnisse.
Das Ergebnis \(P\) des Modelles (z.B. Wahrscheinlichkeit) ist unter der Nutzung von Testdatensätzen mit dominanten sensiblen Merkmal \(A\) (z.B. nur Männer) nicht signifikant anders als der Test gegen die Gesamtheit
\[P(\hat y |P) = P(\hat y)\]
Zeit: Wintersemester 2024
Machine
Learning