# 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).