# Explainable AI Projektaufgabe - Adult Census Income Datensatz

Dieses Repository enthält eine Projektaufgabe zum Thema Explainable AI (XAI), die anhand des Adult Census Income Datensatzes demonstriert wird. Das Projekt verwendet einen Random Forest Classifier, um Einkommensvorhersagen zu treffen, und verschiedene Methoden zur Erklärung der Modellentscheidungen, darunter Feature Importance, LIME (Local Interpretable Model-agnostic Explanations) und regelbasierte Erklärungen mit dem RIPPER-Algorithmus.

## Inhaltsverzeichnis

1. [Projektübersicht](#projektübersicht)
2. [Datensatz](#datensatz)
3. [Notebook-Struktur](#notebook-struktur)
4. [Datenvorverarbeitung](#datenvorverarbeitung)
5. [Modelltraining](#modelltraining)
6. [Hyperparameter-Tuning](#hyperparameter-tuning)
7. [Modellbewertung](#modellbewertung)
8. [Explainable AI Methoden](#explainable-ai-methoden)
   - [Feature Importance](#feature-importance)
   - [LIME](#lime)
   - [Regelbasierte Erklärungen (RIPPER)](#regelbasierte-erklärungen-ripper)
   - [Vergleich der Methoden](#vergleich-der-methoden)
9. [Anwendung auf einzelne Beispiele](#anwendung-auf-einzelne-beispiele)
10. [Voraussetzungen und Installation](#voraussetzungen-und-installation)
11. [Fazit](#fazit)

## Projektübersicht

Dieses Projekt demonstriert die Anwendung von Explainable AI-Techniken auf ein klassisches Machine Learning-Problem: die Vorhersage, ob eine Person ein Einkommen von mehr als 50.000 Dollar pro Jahr erzielt. Während die Vorhersagegenauigkeit wichtig ist, liegt der Schwerpunkt dieses Projekts auf der Erklärbarkeit der Modellentscheidungen. Wir verwenden verschiedene Methoden (Feature Importance, LIME und regelbasierte Erklärungen), um zu verstehen, welche Faktoren das Einkommensniveau am stärksten beeinflussen.

## Datensatz

Der Adult Census Income Datensatz (auch bekannt als "Census Income" oder "Adult" Datensatz) enthält demografische Informationen aus der US-Volkszählung und wird verwendet, um vorherzusagen, ob eine Person ein Einkommen von mehr als 50.000 Dollar pro Jahr erzielt. Der Datensatz enthält folgende Attribute:

- **age**: Alter der Person
- **c**: Arbeitsklasse (Private, Self-emp-not-inc, Self-emp-inc, Federal-gov, Local-gov, State-gov, Without-pay, Never-worked)
- **fnlwgt**: Gewichtungsfaktor (repräsentiert die Anzahl der Personen mit ähnlichen demografischen Merkmalen)
- **education**: Höchster Bildungsabschluss (Bachelors, Some-college, 11th, HS-grad, Prof-school, Assoc-acdm, Assoc-voc, 9th, 7th-8th, 12th, Masters, 1st-4th, 10th, Doctorate, 5th-6th, Preschool)
- **education.num**: Numerische Darstellung des Bildungsabschlusses
- **marital.status**: Familienstand (Married-civ-spouse, Divorced, Never-married, Separated, Widowed, Married-spouse-absent, Married-AF-spouse)
- **occupation**: Beruf
- **relationship**: Beziehungsstatus (Wife, Own-child, Husband, Not-in-family, Other-relative, Unmarried)
- **race**: Ethnische Zugehörigkeit (White, Asian-Pac-Islander, Amer-Indian-Eskimo, Other, Black)
- **sex**: Geschlecht (Female, Male)
- **c**: Kapitalgewinn
- **capital.loss**: Kapitalverlust
- **hours.per.week**: Arbeitsstunden pro Woche
- **native.country**: Herkunftsland
- **income**: Zielvariable, gibt an, ob das Einkommen über 50.000 Dollar liegt (>50K) oder nicht (<=50K)

## Notebook-Struktur

Das Jupyter Notebook `Explainable_AI_Adult_Census_Income.ipynb` ist in folgende Abschnitte unterteilt:

1. **Abhängigkeiten installieren**: Installation der benötigten Python-Bibliotheken (scikit-learn, matplotlib, seaborn, pandas, numpy, lime, wittgenstein)
2. **Daten einlesen und erkunden**: Laden und erste Analyse der Daten
3. **Datenvorverarbeitung**: Behandlung fehlender Werte und Umwandlung kategorischer Variablen
4. **Daten aufteilen und Modell trainieren**: Aufteilung der Daten in Trainings- und Testsets und Training des Random Forest Modells
5. **Feature Importance**: Analyse der wichtigsten Features für die Vorhersage
6. **Hyperparameter-Tuning**: Optimierung der Modellparameter mit GridSearchCV
7. **LIME für Erklärbarkeit**: Verwendung von LIME für lokale Erklärungen
8. **Regelbasierte Erklärungen**: Verwendung des RIPPER-Algorithmus für interpretierbare Regeln
9. **Anwendung der Regeln auf einzelne Beispiele**: Demonstration, wie die Regeln auf einzelne Datenpunkte angewendet werden
10. **Vergleich zwischen LIME und regelbasierten Erklärungen**: Vergleich der verschiedenen Erklärungsmethoden
11. **Diskussion und Fazit**: Zusammenfassung der Ergebnisse und Schlussfolgerungen

## Datenvorverarbeitung

Die Datenvorverarbeitung umfasst mehrere Schritte:

1. **Behandlung fehlender Werte**:

   - Identifizierung von Einträgen mit '?' als fehlende Werte
   - Ersetzung fehlender Werte durch den häufigsten Wert in der jeweiligen Spalte

2. **Umwandlung kategorischer Variablen**:
   - Label Encoding für die Zielvariable 'income'
   - One-Hot-Encoding für alle anderen kategorischen Variablen

Diese Schritte sind wichtig, um die Daten in ein Format zu bringen, das von Machine Learning-Algorithmen verarbeitet werden kann.

## Modelltraining

Für das Modelltraining verwenden wir einen Random Forest Classifier, der folgende Vorteile bietet:

- Gute Leistung bei verschiedenen Arten von Daten
- Robustheit gegenüber Overfitting
- Fähigkeit, mit fehlenden Werten und kategorischen Variablen umzugehen
- Eingebaute Feature Importance

Der Trainingsprozess umfasst:

1. Initialisierung des Random Forest Classifiers mit 100 Entscheidungsbäumen
2. Training des Modells mit den Trainingsdaten
3. Vorhersage für die Testdaten
4. Berechnung von Metriken wie Accuracy, Precision, Recall und F1-Score

## Hyperparameter-Tuning

Um die Leistung des Modells zu optimieren, wird Hyperparameter-Tuning mit GridSearchCV durchgeführt. Folgende Parameter werden optimiert:

- **n_estimators**: Anzahl der Bäume im Random Forest (50, 100)
- **max_depth**: Maximale Tiefe der Bäume (None, 10, 20)
- **min_samples_split**: Minimale Anzahl von Samples, um einen Knoten zu teilen (2, 5)
- **min_samples_leaf**: Minimale Anzahl von Samples in einem Blatt (1, 2)

GridSearchCV testet alle möglichen Kombinationen dieser Parameter mit 3-facher Kreuzvalidierung und wählt die beste Kombination aus. Das optimierte Modell wird dann für die endgültigen Vorhersagen verwendet.

## Modellbewertung

Die Modellbewertung erfolgt anhand mehrerer Metriken:

- **Accuracy**: Anteil der korrekt klassifizierten Instanzen
- **Precision**: Anteil der als positiv klassifizierten Instanzen, die tatsächlich positiv sind
- **Recall**: Anteil der tatsächlich positiven Instanzen, die als positiv klassifiziert wurden
- **F1-Score**: Harmonisches Mittel aus Precision und Recall

Zusätzlich werden visuelle Darstellungen verwendet:

- **Confusion Matrix**: Zeigt die Anzahl der True Positives, False Positives, True Negatives und False Negatives
- **Klassifikationsbericht**: Detaillierte Metriken für jede Klasse

Diese Metriken helfen zu verstehen, wie gut das Modell funktioniert und ob es bestimmte Klassen besser vorhersagt als andere.

## Explainable AI Methoden

### Feature Importance

Die einfachste Methode zur Erklärung des Modells ist die eingebaute Feature Importance des Random Forest Classifiers. Diese zeigt, wie wichtig jedes Feature für die Vorhersage ist, basierend auf der durchschnittlichen Verringerung der Unreinheit (Impurity) über alle Bäume.

Vorteile:

- Einfach zu berechnen und zu verstehen
- Gibt einen globalen Überblick über die Wichtigkeit der Features

Nachteile:

- Zeigt nur die globale Wichtigkeit, nicht die Auswirkung auf einzelne Vorhersagen
- Berücksichtigt keine Feature-Interaktionen

### LIME

LIME (Local Interpretable Model-agnostic Explanations) ist eine Methode zur Erklärung einzelner Vorhersagen, indem ein lokales lineares Modell um die Vorhersage herum erstellt wird.

In unserem Projekt verwenden wir LIME für:

1. **Lokale Erklärungen**: Erklärung einzelner Vorhersagen durch Approximation mit einem linearen Modell
2. **Feature-Wichtigkeit**: Identifikation der wichtigsten Features für eine einzelne Vorhersage

Vorteile:

- Modellunabhängig (kann mit jedem Modell verwendet werden)
- Einfach zu verstehen (basiert auf linearen Modellen)
- Fokussiert auf lokale Erklärungen

Nachteile:

- Ergebnisse können instabil sein (abhängig von der Stichprobe)
- Keine globalen Erklärungen

### Regelbasierte Erklärungen (RIPPER)

RIPPER (Repeated Incremental Pruning to Produce Error Reduction) ist ein Algorithmus zur Extraktion von Regeln aus Daten. Er erstellt eine Reihe von Wenn-Dann-Regeln, die leicht zu interpretieren sind.

In unserem Projekt verwenden wir den RIPPER-Algorithmus (implementiert in der Wittgenstein-Bibliothek) für:

1. **Globale Erklärungen**: Extraktion von interpretierbaren Regeln aus den Daten
2. **Regelbasierte Vorhersagen**: Verwendung der Regeln für Vorhersagen

Vorteile:

- Sehr interpretierbar (Regeln sind in natürlicher Sprache)
- Bietet globale Erklärungen für das gesamte Modell
- Kann direkt für Vorhersagen verwendet werden

Nachteile:

- Möglicherweise geringere Genauigkeit als komplexere Modelle
- Kann bei großen Datensätzen rechenintensiv sein

### Vergleich der Methoden

In unserem Projekt vergleichen wir die Erklärungen von LIME und RIPPER, um ein umfassenderes Verständnis der Modellentscheidungen zu gewinnen. Dieser Vergleich zeigt:

- Welche Features von beiden Methoden als wichtig identifiziert werden
- Wo die Methoden unterschiedliche Erklärungen liefern
- Die Vor- und Nachteile jeder Methode in Bezug auf Interpretierbarkeit und Genauigkeit

## Anwendung auf einzelne Beispiele

Ein wichtiger Aspekt von Explainable AI ist die Fähigkeit, einzelne Vorhersagen zu erklären. Im Notebook wird ein zufälliges Beispiel aus den Testdaten ausgewählt und detailliert erklärt:

1. Anzeige des tatsächlichen und vorhergesagten Labels
2. Erklärung mit LIME, die ein lokales lineares Modell um die Vorhersage herum erstellt
3. Anwendung der RIPPER-Regeln auf das Beispiel
4. Vergleich der Vorhersagen des Random Forest Modells und der RIPPER-Regeln

Diese Erklärung hilft zu verstehen, warum das Modell eine bestimmte Vorhersage für eine bestimmte Person getroffen hat, was in realen Anwendungen sehr wertvoll sein kann.

## Voraussetzungen und Installation

Um dieses Projekt auszuführen, benötigen Sie:

1. Python 3.6 oder höher
2. Jupyter Notebook oder JupyterLab
3. Folgende Python-Bibliotheken:
   - scikit-learn
   - pandas
   - numpy
   - matplotlib
   - seaborn
   - lime
   - wittgenstein

Sie können die benötigten Bibliotheken mit folgendem Befehl installieren:

```bash
pip install scikit-learn pandas numpy matplotlib seaborn lime wittgenstein
```

## Fazit

Dieses Projekt demonstriert, wie Machine Learning-Modelle nicht nur für Vorhersagen, sondern auch für das Verständnis der zugrunde liegenden Daten und Zusammenhänge verwendet werden können. Durch die Verwendung verschiedener Explainable AI-Techniken wie Feature Importance, LIME und regelbasierte Erklärungen können wir:

1. Die wichtigsten Faktoren identifizieren, die das Einkommensniveau beeinflussen
2. Verstehen, wie diese Faktoren zusammenwirken
3. Einzelne Vorhersagen detailliert erklären
4. Verschiedene Erklärungsmethoden vergleichen und ihre Stärken und Schwächen verstehen

Der Vergleich zwischen LIME und regelbasierten Erklärungen zeigt, dass beide Methoden wertvolle Einblicke bieten können:

- LIME bietet detaillierte lokale Erklärungen für einzelne Vorhersagen
- Regelbasierte Erklärungen bietet globale, leicht verständliche Regeln, die das Gesamtverhalten des Modells beschreiben

Die Kombination verschiedener XAI-Methoden ermöglicht ein umfassenderes Verständnis der Modellentscheidungen und kann dazu beitragen, das Vertrauen in Machine Learning-Modelle zu erhöhen.

# Modell und XAI-Methoden im Überblick

## Random Forest

Random Forest ist ein Ensemble-Lernalgorithmus, der mehrere Entscheidungsbäume kombiniert, um präzisere Vorhersagen zu treffen. Er funktioniert, indem er:

Viele verschiedene Entscheidungsbäume auf zufällig ausgewählten Teilmengen der Trainingsdaten aufbaut
Bei jedem Split nur eine zufällige Teilmenge der Features berücksichtigt
Die Ergebnisse aller Bäume mittelt (bei Regression) oder durch Mehrheitsentscheidung kombiniert (bei Klassifikation)
Random Forests sind beliebt wegen ihrer hohen Genauigkeit, Robustheit gegen Overfitting und geringen Parameteroptimierungsbedarf.

## LIME (Local Interpretable Model-agnostic Explanations)

LIME ist eine Methode zur Erklärung der Vorhersagen beliebiger Machine Learning Modelle. LIME funktioniert durch:

Erzeugung von Stichproben in der Nähe der zu erklärenden Instanz
Training eines lokalen, interpretierbaren Modells (z.B. linearer Regression) auf diesen Stichproben
Nutzung der Gewichte des lokalen Modells, um zu zeigen, welche Features die Vorhersage am stärksten beeinflussen
LIME ermöglicht es, komplexe Modelle wie neuronale Netze oder Random Forests lokal zu interpretieren, ohne deren innere Struktur zu kennen.

## Rule-Based Explanations

Rule-Based Explanations verwenden Wenn-Dann-Regeln, um Modellvorhersagen zu erklären. Sie:

Extrahieren verständliche Entscheidungsregeln aus komplexen Modellen
Präsentieren Bedingungen, die zu bestimmten Vorhersagen führen
Können aus regelbasierten Modellen direkt abgeleitet oder aus komplexeren Modellen approximiert werden
Methoden wie RIPPER, CART oder die Extraktion von Regeln aus Random Forests fallen in diese Kategorie. Diese Erklärungen sind besonders wertvoll für Domänenexperten ohne ML-Hintergrund, da sie in natürlicher Sprache formuliert werden können.
