feature: add workshop 2 jupyter notebook
This commit is contained in:
@@ -0,0 +1,84 @@
|
|||||||
|
# Workshop 2 – Feature Engineering & Datenaufbereitung
|
||||||
|
|
||||||
|
## Aufgabenstellung
|
||||||
|
|
||||||
|
Untersuchung des Melbourne Housing Datasets aus ML-Perspektive.
|
||||||
|
Erste Empfehlungen zur Datenaufbereitung formulieren.
|
||||||
|
|
||||||
|
### Zu untersuchende Punkte
|
||||||
|
|
||||||
|
- **Ungeeignete Variablen** identifizieren (von vornherein nicht für ML brauchbar)
|
||||||
|
- **Missing Values** – pro Variable geeignete Strategie wählen
|
||||||
|
- **Nicht-numerische Variablen** – passende Encoding-Strategie wählen
|
||||||
|
- **Anomalien** entdecken, die bereinigt werden müssen (Outlier, Inkonsistenzen, Duplikate)
|
||||||
|
- **Empfehlungen** zur Datenaufbereitung formulieren
|
||||||
|
|
||||||
|
### Zeitrahmen
|
||||||
|
|
||||||
|
90 Minuten
|
||||||
|
|
||||||
|
## Hilfsmittel der Dozentin
|
||||||
|
|
||||||
|
- `WS 02 Feature Engineering Exploration Overview.ipynb`
|
||||||
|
– ermittelt Kennwerte der Variablen in einem DataFrame und stellt diese in einer Excel-Tabelle zusammen
|
||||||
|
- `pandas_profiling_melb_data.html` – vorgenerierter Profiling-Report
|
||||||
|
|
||||||
|
## Vorgehen
|
||||||
|
|
||||||
|
1. **Profiling-Report sichten** (ydata-profiling) für schnellen Überblick
|
||||||
|
2. **Variablen filtern** – ungeeignete Spalten markieren (z.B. IDs, Freitextfelder, zu hohe Kardinalität)
|
||||||
|
3. **Missing Values analysieren** – Anteil pro Spalte, Muster (MCAR / MAR / MNAR)
|
||||||
|
4. **Kategoriale Variablen** – Strategie pro Spalte festlegen
|
||||||
|
5. **Anomalien suchen** – Outlier (Boxplots, z-Score, IQR), inkonsistente Werte, Duplikate
|
||||||
|
6. **Empfehlungen dokumentieren** – in der Workshop-1-Tabelle ergänzen
|
||||||
|
|
||||||
|
## Theorie-Bausteine
|
||||||
|
|
||||||
|
### Missing-Value-Strategien
|
||||||
|
|
||||||
|
| Strategie | Wann geeignet |
|
||||||
|
|---|---|
|
||||||
|
| Zeile löschen | wenige Missings, MCAR |
|
||||||
|
| Spalte löschen | sehr hoher Missing-Anteil (>50%), wenig Information |
|
||||||
|
| Mean / Median imputieren | numerisch, symmetrisch / schief verteilt |
|
||||||
|
| Mode imputieren | kategorial |
|
||||||
|
| Konstanter Wert (z.B. "Unknown", 0) | kategorial mit Bedeutung "fehlt" |
|
||||||
|
| KNN / Iterative Imputation | komplexere Muster, mehr Aufwand |
|
||||||
|
| Indikator-Spalte | "fehlt" selbst ist Information (MNAR) |
|
||||||
|
|
||||||
|
### Missing-Value-Typen (Rubin)
|
||||||
|
|
||||||
|
- **MCAR** – Missing Completely At Random: Fehlen unabhängig von allem
|
||||||
|
- **MAR** – Missing At Random: Fehlen erklärbar durch andere beobachtete Variablen
|
||||||
|
- **MNAR** – Missing Not At Random: Fehlen hängt vom fehlenden Wert selbst ab
|
||||||
|
|
||||||
|
### Encoding-Strategien für kategoriale Variablen
|
||||||
|
|
||||||
|
| Strategie | Wann geeignet |
|
||||||
|
|---|---|
|
||||||
|
| **Label-Encoding** | ordinal mit klarer Reihenfolge |
|
||||||
|
| **One-Hot-Encoding** | nominal, wenige Kategorien (<~15) |
|
||||||
|
| **Target-Encoding** | nominal, hohe Kardinalität, Vorsicht: Leakage |
|
||||||
|
| **Frequency-Encoding** | hohe Kardinalität, einfach |
|
||||||
|
| **Binary-Encoding** | hohe Kardinalität, weniger Spalten als One-Hot |
|
||||||
|
| **Embeddings** | sehr hohe Kardinalität, Deep Learning |
|
||||||
|
|
||||||
|
### Outlier-Detection
|
||||||
|
|
||||||
|
- Boxplot / IQR-Regel (1.5 × IQR)
|
||||||
|
- z-Score (|z| > 3)
|
||||||
|
- Visuell via Histogramm / Scatter
|
||||||
|
- Domain-Wissen (z.B. negativer Preis, Baujahr 1196 statt 1996)
|
||||||
|
|
||||||
|
## Struktur
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── devenv.nix
|
||||||
|
├── devenv.lock
|
||||||
|
├── devenv.yaml
|
||||||
|
├── data/
|
||||||
|
│ └── melb_data.csv
|
||||||
|
└── solution/
|
||||||
|
├── 01_skalenniveaus.md
|
||||||
|
```
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -6,15 +6,16 @@
|
|||||||
version = "3.12";
|
version = "3.12";
|
||||||
venv.enable = true;
|
venv.enable = true;
|
||||||
venv.requirements = ''
|
venv.requirements = ''
|
||||||
|
imbalanced-learn
|
||||||
ipython
|
ipython
|
||||||
jupyter
|
jupyter
|
||||||
jupyterlab
|
jupyterlab
|
||||||
|
matplotlib
|
||||||
numpy
|
numpy
|
||||||
pandas
|
pandas
|
||||||
matplotlib
|
|
||||||
seaborn
|
|
||||||
scikit-learn
|
scikit-learn
|
||||||
imbalanced-learn
|
seaborn
|
||||||
|
setuptools<81
|
||||||
statsmodels
|
statsmodels
|
||||||
ydata-profiling
|
ydata-profiling
|
||||||
'';
|
'';
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user