99 lines
3.7 KiB
Markdown
99 lines
3.7 KiB
Markdown
# Workshop 3 Feature Engineering: Melbourne Housing Dataset
|
|
|
|
Aufbereitung des **Melbourne Housing Datasets** für Supervised Learning, gemäss
|
|
den in Workshop 2 erarbeiteten und konsolidierten Empfehlungen.
|
|
|
|
- **Input:** `data/melb_data.csv` (Rohdaten)
|
|
- **Output:** `data/melb_data_prep.csv` (aufbereitet)
|
|
- **Pipeline:** `src/prepare.py`
|
|
|
|
Die Empfehlungen stammen aus der EDA in Workshop 2. Dieses README ist die
|
|
einzige Quelle der Wahrheit für die anzuwendenden Transformationen, das
|
|
ursprüngliche `WS_03_Empfehlungen.xlsx` muss nicht geöffnet werden.
|
|
|
|
## Aufgabenstellung
|
|
|
|
Das Dataset wurde in Workshop 2 mit Sicht auf Machine Learning untersucht.
|
|
Die daraus abgeleiteten Empfehlungen (siehe unten) werden hier in einer
|
|
deterministischen Pipeline `CSV rein → CSV raus` implementiert. Es findet
|
|
keine neue Exploration statt, die Entscheidungen sind bereits getroffen.
|
|
|
|
## Drehbuch (Transformationsliste)
|
|
|
|
### 1. Data Frame
|
|
|
|
| # | Transformation | Details |
|
|
|-----|----------------|---------|
|
|
| 1.1 | Beobachtungen nach Bedingung entfernen | `Price >= 8000000`; `YearBuilt == 1196` |
|
|
| 1.2 | Duplikate entfernen | kein Bedarf |
|
|
| 1.3 | Fragwürdige Variablen entfernen | `Unnamed: 0`, `Suburb`, `Address`, `SellerG`, `Postcode`, `Bedroom2` |
|
|
| 1.4 | NAs ersetzen | kategoriale: Modalwert · numerische: Median |
|
|
|
|
### 2. Kategoriale Variablen
|
|
|
|
| # | Transformation | Details |
|
|
|-----|----------------|---------|
|
|
| 2.1 | Kardinalität reduzieren | `Regionname`: `* Victoria` → `Victoria` · `Method`: `SA` → `S` |
|
|
| 2.2 | Faktorisieren | `CouncilArea` |
|
|
| 2.3 | Ordinal encodieren | `Type`: `h, u, t` → `1, 2, 3` |
|
|
| 2.4 | Binär encodieren | kein Bedarf |
|
|
| 2.5 | Nominal encodieren (One-Hot) | alle verbleibenden kategorialen Variablen ausser `Date` |
|
|
|
|
### 3. Numerische Variablen
|
|
|
|
| # | Transformation | Details |
|
|
|-----|----------------|---------|
|
|
| 3.1 | Logarithmieren (+ umbenennen) | `Landsize` → `logLandsize` · `BuildingArea` → `logBuildingArea` |
|
|
| 3.2 | Binär umcodieren | kein Bedarf |
|
|
|
|
### 4. Andere Tätigkeiten
|
|
|
|
| # | Transformation | Details |
|
|
|-----|----------------|---------|
|
|
| 4.1 | Konstruktion | `Date` → `month`, `year`, `day_of_week`; danach `Date` droppen |
|
|
| 4.2 | Variablennamen bereinigen | unerwünschte Zeichen → `_` |
|
|
| 4.3 | Standardisieren | kein Bedarf |
|
|
| 4.4 | Speichern | als `melb_data_prep.csv` |
|
|
|
|
## Reihenfolge — wichtig
|
|
|
|
Die Schritte sind nicht beliebig vertauschbar. Insbesondere:
|
|
|
|
- **1.1 vor 1.4:** erst Ausreisser/fehlerhafte Zeilen raus, dann NAs füllen
|
|
(sonst fliessen Schrottwerte in Median/Modalwert ein).
|
|
- **2.1 vor 2.5:** erst Kardinalität reduzieren, dann One-Hot
|
|
(sonst entstehen Dummy-Spalten für Levels, die man gerade zusammenlegen will).
|
|
- **2.5 nach allen anderen kategorialen Schritten:** One-Hot greift alle
|
|
*übrigen* `object`-Spalten ab — `CouncilArea` und `Type` sind dann schon
|
|
numerisch und werden korrekt übersprungen.
|
|
- **4.1 vor 2.5 ODER `Date` explizit ausnehmen:** `Date` ist `object` und würde
|
|
sonst von One-Hot zerlegt. Lösung: `Date` beim One-Hot ignorieren und erst in
|
|
4.1 zu `month`/`year`/`day_of_week` zerlegen.
|
|
|
|
## Projektstruktur
|
|
|
|
```
|
|
workshop3
|
|
├── data/
|
|
│ ├── melb_data.csv # Rohdaten (Input)
|
|
│ └── melb_data_prep.csv # aufbereitet (Output, generiert)
|
|
├── src/
|
|
│ └── prepare.py # Pipeline
|
|
├── devenv.nix
|
|
└── README.md
|
|
```
|
|
|
|
## Ausführen
|
|
|
|
```sh
|
|
python src/prepare.py
|
|
```
|
|
|
|
## Offene Punkte / Selbstcheck
|
|
|
|
- [ ] `YearBuilt == 1196` verifizieren (vermutlich Tippfehler für 1996)
|
|
- [ ] NA-Spalten prüfen -> sind NAs in der Target-Variable `Price`?
|
|
(Falls ja: Zeilen entfernen statt Median einsetzen.)
|
|
- [ ] Standardisieren bleibt hier aus -> relevant erst beim Training,
|
|
und modellabhängig (Bäume brauchen es nicht).
|