diff --git a/SL/notizen/L5_Notizen.md b/SL/notizen/L5_Notizen.md new file mode 100644 index 0000000..cb85dfe --- /dev/null +++ b/SL/notizen/L5_Notizen.md @@ -0,0 +1,395 @@ +# Notizen SL Lektion 5 (Foliensatz 13–15) + +> Thema: Regression, Validierung, MLOps +> Datum: 11.06.2026 +> Dozentin: Violeta Vogel + +## Regression – Definition + +- Regression ist ein statistisches Analyseverfahren. +- Ziele: + - Beziehungen zwischen einer abhängigen und einer oder mehreren unabhängigen Variablen modellieren + - Zusammenhänge quantitativ beschreiben + - Werte der abhängigen Variable prognostizieren + +## Typen der Regression + +- **Einfache lineare Regression**: zwei Variablen, eine abhängige (AV), eine unabhängige (UV) +- **Multiple lineare Regression**: mehrere unabhängige Variablen beeinflussen gemeinsam eine abhängige Variable +- **Logistische Regression**: wenn die abhängige Variable kategorial ist (binär oder multinominal) +- **Ridge / Lasso Regression**: spezielle Formen der linearen Regression, eingesetzt bei **Multikollinearität** (hohe Korrelation zwischen Prädiktoren) + +### Wahl der Methode nach Datentyp + +Die passende Regressionsart hängt vom Skalenniveau von AV und UV ab: + +| Regressionsart | Skala AV (Kriterium) | Skala UV (Prädiktor) | +| ----------------------------- | --------------------------------- | ------------------------------- | +| Einfache lineare Regression | metrisch | metrisch | +| Multiple lineare Regression | metrisch | metrisch / ordinal / dichotom | +| Logistische Regression | dichotom | intervallskaliert / diskret / beliebig | +| Multinominale logistische R. | kategorial (binär/multinominal) | beliebig | + +## Korrelation + +- Beschreibt, **wie** Variablen zusammenhängen. +- Arten: + - **positiver Zusammenhang**: höhere Werte der einen Variable → höhere Werte der anderen + - **negativer Zusammenhang**: höhere Werte der einen → niedrigere der anderen + - **kein Zusammenhang**: Veränderung der einen hat keinen Einfluss auf die andere + +> ⚠️ Achtung: $r \approx 0$ heisst nur **kein _linearer_** Zusammenhang. Ein klarer nichtlinearer Zusammenhang (z.B. parabelförmig) kann trotzdem $r \approx 0$ haben. → immer auch den Scatterplot anschauen. + +## Korrelation und Regression + +- **Korrelation**: Frage nach dem Zusammenhang zwischen zwei Variablen. +- **Regression**: nutzt diesen Zusammenhang, um Werte der einen Variable auf Basis der anderen **vorherzusagen**. + +## Residuum + +- Der Abstand aller Punkte zur Vorhersagelinie soll minimal sein. +- Dieser Abstand (Wert − Vorhersage) heisst **Residuum** (Rest). +- Bestimmt mit der **Methode der kleinsten Quadrate** (Minimierung der Fehlerquadratsumme). + +## Einfache lineare Regression + +- Untersucht die lineare Beziehung zwischen zwei stetigen Variablen. + +### Regressionsgleichung + +$$\hat{y}_i = a + b \cdot x_i$$ + +- $\hat{y}_i$: vorhergesagter Wert (Schätzung, kann vom echten Wert abweichen) +- $a$: Schnittpunkt mit der y-Achse (Ordinatenabschnitt / Intercept) +- $b$: Steigung der Geraden (Regressionskoeffizient / Regressionsgewicht) +- $x_i$: Wert der Variablen, die zur Vorhersage genutzt wird + +*Beispiel:* $\hat{y} = 0{,}5x + 1$, für $x = 5$ → $\hat{y} = 0{,}5 \cdot 5 + 1 = 3{,}5$ + +### Voraussetzungen für die lineare Regression + +- linearer Zusammenhang zwischen den Variablen +- Skalenniveau von AV und UV metrisch (konkrete Zahlenwerte, z.B. Körpergrösse) +- Residuen sollen untereinander **keine Korrelation** aufweisen +- Residuen sollen **konstant über den ganzen Wertebereich** der AV streuen → **Homoskedastizität** +- möglichst wenig Ausreisser (haben grossen Einfluss auf die Vorhersagegüte) + +## Multiple lineare Regression + +- Mehrere unabhängige Variablen (**Prädiktoren**) erklären gemeinsam $y$. + +### Regressionsgleichung + +$$\hat{y}_i = a + b_1 x_{1i} + b_2 x_{2i} + \dots + b_k x_{ki}$$ + +- jeder Term $b_k \cdot x_{ki}$ ist ein **Prädiktor** +- mit Fehlerterm geschrieben: $y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_k x_k + \varepsilon$ +- jeder Koeffizient $\beta_k$ zeigt den Einfluss seiner Variable auf $y$, **während die anderen Variablen konstant gehalten werden** (das ist der Kernunterschied zur einfachen Regression) + +> **Merksatz:** Jede multiple Regression ist eine lineare Regression (linear in den Koeffizienten), aber nicht jede lineare Regression ist multipel. Die multiple Regression erweitert die einfache um mehrere Einflussgrössen. + +### Regressionsgewicht + +- **Unstandardisiert ($b$)** + - Wertebereich abhängig von der gewählten Skala + - inhaltlich interpretierbar + - zwischen Prädiktoren nur vergleichbar, wenn diese auf derselben Skala gemessen wurden +- **Standardisiert ($\beta$)** (an der Standardabweichung normiert) + - Wertebereich $[-1, +1]$ + - inhaltlich **nicht** interpretierbar + - zwischen Prädiktoren vergleichbar + - interpretierbar wie Korrelationen ($r$) + +### Output-Tabelle lesen (b, β, T, Sig.) + +| Spalte | Bedeutung | +| -------- | ------------------------------------------------------------------------- | +| (Konstante) | Ordinatenabschnitt ($a$ bzw. $\beta_0$) | +| $b$ | unstandardisiertes Regressionsgewicht | +| $\beta$ | standardisiertes Regressionsgewicht | +| $T$ | Teststatistik: hat der Prädiktor einen signifikanten Einfluss? | +| Sig. | p-Wert: kleiner Wert (z.B. < 0.05) → Einfluss vermutlich **nicht zufällig** | + +> Sternchen sind Signifikanzniveaus: `*` p<0.05, `**` p<0.01, `***` p<0.001. +> Im Folienbeispiel: *Geschmack* (0.001 \*\*) und *Preis* (0.000 \*\*\*) signifikant, *Aussehen* (0.682) nicht. + +### Voraussetzungen für die multiple lineare Regression + +- Skalenniveau von AV und UV metrisch +- linearer Zusammenhang Prädiktoren ↔ AV (grafisch prüfen) +- Residuen normalverteilt (bei ausreichend grosser Stichprobe vernachlässigbar) +- **Homoskedastizität**: Streuung der y-Werte über den ganzen Wertebereich von x homogen (Levene-Test oder grafisch) +- wenig Ausreisser / einflussreiche Punkte (Leverage-Analyse) +- Residuen dürfen nicht korrelieren — unkritisch, solange die Korrelation **zwischen den Prädiktoren** den Schwellenwert $r = 0{,}8$ nicht überschreitet + +## Multiple vs. lineare Regression + +| Merkmal | Lineare Regression | Multiple Regression | +| ---------------------- | ------------------------------------- | -------------------------------------------------- | +| Anzahl unab. Variablen | 1 | 2 oder mehr | +| Ziel | Zusammenhang $x \leftrightarrow y$ untersuchen | gemeinsamen Einfluss mehrerer Variablen auf $y$ untersuchen | +| Beispiel | Umsatz durch Werbebudget erklären | Umsatz durch Werbebudget, Preis und Saison erklären | +| Grafische Darstellung | Gerade in 2D | Ebene bzw. Hyperfläche in mehreren Dimensionen | + +## Use Cases für Regression + +Mögliche Zuordnungen (UV → AV, Ziel = Vorhersage der AV): + +| Gebiet | Unabhängige Variablen (UV) | Abhängige Variable (AV) | +| ---------------- | --------------------------------------- | ----------------------- | +| Immobilienpreise | Alter des Gebäudes, Anzahl Zimmer, Wohnfläche | Verkaufspreis | +| Gehaltsanalyse | Berufserfahrung, Ausbildung | Gehalt | +| Autopreise | gefahrene Kilometer, Gewicht, Baujahr | Fahrzeugpreis | +| Medizin | Alter, Gewicht, Blutdruck | Krankheitsrisiko | +| Sportanalyse | Trainingsstunden, Gewicht | Leistung / Platzierung | +| Finanzdaten | Einkommen, Ausbildung, Schulden | Kreditwürdigkeit | + +> Hinweis: Beispiel-Mappings, in der Lektion nicht abschliessend von der Dozentin durchgegangen. + +## Herausforderungen bei der Regression + +- **Nichtlineare Zusammenhänge**: lineare Regression unterstellt Linearität; real oft komplexer (z.B. Alter → Einkommen selten streng linear) +- **Multikollinearität**: stark korrelierte Prädiktoren → einzelne Effekte schwer trennbar (z.B. Wohnfläche vs. Anzahl Zimmer) +- **Ausreisser**: wenige Extremwerte können die Gerade stark verzerren +- **Overfitting**: Modell passt sich zu stark an Trainingsdaten an, generalisiert schlecht +- **Underfitting**: Modell zu einfach, erfasst wichtige Muster nicht +- **Heteroskedastizität**: Fehlerstreuung nicht konstant → Schätzungen/Tests unzuverlässig +- **Fehlende Daten**: verzerrte Ergebnisse +- **Verletzung der Modellannahmen** (Linearität, Unabhängigkeit der Fehler, konstante Fehlervarianz, Normalverteilung der Residuen) → sinkende Aussagekraft +- **Auswahl relevanter Variablen**: zu viele irrelevante erhöhen Komplexität, wichtige fehlende verzerren +- **Kausalität vs. Korrelation**: Regression zeigt Zusammenhänge, beweist **keine** Ursache-Wirkung (z.B. Eisverkauf ↔ Badeunfälle: beide steigen im Sommer, kein kausaler Link) +- **Interpretierbarkeit**: komplexere Modelle ggf. genauer, aber schwerer interpretierbar + +--- + +# Regularisierung: Lasso & Ridge + +Beide fügen der Kostenfunktion (Fehlerquadratsumme) einen **Strafterm** hinzu, der grosse Koeffizienten „teuer" macht → weniger Komplexität, weniger Overfitting. + +## Lasso Regression (L1-Regularisierung) + +- führt **Variablenselektion UND Regularisierung** durch +- Ziel: Überanpassung verhindern, Modellgenauigkeit verbessern +- Vorgehen: einige Koeffizienten werden **auf Null** gesetzt → spärliche (sparse) Modelle + +### Formel + +$$L = \sum_{i=1}^{n}\bigl(y_i - (a + b x_i)\bigr)^2 + \lambda \sum_{j} |b_j|$$ + +- erster Term: Fehlerquadratsumme (OLS) +- zweiter Term: L1-Norm der Koeffizienten $\times\ \lambda$ + +### Einsatz + +- genomische Auswahl (Gene mit stärkstem Krankheits-/Merkmalsbezug identifizieren) +- Vorhersage in Wirtschaft/Finanzen (z.B. Aktienkurse) +- Kreditrisikobewertung + +### Vor- und Nachteile + +| Vorteile | Nachteile | +| ------------------------------ | ------------------------------------------ | +| automatische Variablenselektion | problematisch bei stark korrelierten Variablen | +| verhindert Overfitting | Wahl von $\lambda$ kann schwierig sein | +| einfachere Interpretation | kann wichtige Variablen entfernen | +| geeignet für viele Merkmale | erfasst Nichtlinearitäten nur begrenzt | + +> Bei stark korrelierten Variablen wählt Lasso oft nur **eine** davon und ignoriert die anderen → Informationsverlust. + +## Ridge Regression (L2-Regularisierung) + +- Abwandlung der linearen Regression mit zusätzlichem Regularisierungsterm +- berücksichtigt die **Grösse** der Koeffizienten, verhindert einzelne sehr grosse Koeffizienten +- Folge: geringere Wahrscheinlichkeit für Overfitting +- **schrumpft** Koeffizienten, setzt sie aber (anders als Lasso) **selten auf Null** → keine Variablenselektion + +### Formel + +$$\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^{p}\beta_j^2$$ + +- $\beta_j$: Regressionskoeffizienten +- $\lambda$: Regularisierungsparameter — je grösser $\lambda$, desto stärker werden die Koeffizienten verkleinert +- Strafterm = **Quadrat** der Koeffizienten (L2) — hier liegt der Unterschied zu Lasso (Betrag, L1) + +### Herausforderungen / Hinweise + +- Wahl von $\lambda$: zu klein → kaum Unterschied zur OLS; zu gross → wichtige Info geht verloren +- **keine** Variablenselektion → bei vielen Merkmalen schwerer interpretierbar +- **Standardisierung erforderlich**, da Variablen unterschiedliche Grössenordnungen haben +- bildet Nichtlinearitäten nur begrenzt ab + +### Einsatz + +Immobilienbewertung (viele korrelierte Merkmale), Finanzen (Aktienrenditen, Kreditrisiken), Marketing (Kanäle → Umsatz), Medizin (Krankheitsrisiken), allg. bessere Generalisierung bei vielen Variablen. + +### Vor- und Nachteile + +| Vorteile | Nachteile | +| --------------------------------- | ------------------------------------------ | +| reduziert Overfitting | keine automatische Variablenselektion | +| gut bei Multikollinearität | Wahl von $\lambda$ kann schwierig sein | +| nutzt alle verfügbaren Infos | bei vielen Variablen schlechter interpretierbar | +| stabile Schätzungen | erfasst Nichtlinearitäten nur begrenzt | + +## Lasso vs. Ridge + +| Ridge | Lasso | +| ------------------------------------ | ------------------------------------------ | +| verkleinert Koeffizienten | verkleinert Koeffizienten | +| setzt Koeffizienten **selten** auf 0 | **kann** Koeffizienten auf 0 setzen | +| behält alle Variablen | führt Variablenselektion durch | +| gut bei stark korrelierten Variablen | wählt oft nur einige korrelierte Variablen aus | + +## ⭐ λ vs. alpha — Auflösung der Verwirrung + +Das war der wunde Punkt in der Lektion (Dozentin sprach von „Alpha", zeigte aber auf $\lambda$): + +- In der **Theorie/Statistik** heisst der Regularisierungsparameter **$\lambda$** (Lambda). +- In **scikit-learn** heisst genau derselbe Parameter **`alpha`** (bei `Lasso`, `Ridge`). +- Folie 66 bestätigt es wörtlich: *„der Parameter `alpha` entspricht $\lambda$ in der theoretischen Einführung."* +- → **Es ist dasselbe.** Nur die Benennung unterscheidet sich (Mathe-Notation vs. sklearn-API). Beim Lernen einfach $\lambda = $ `alpha` setzen. + +**Wirkung (für Lasso und Ridge gleich):** + +- $\lambda = 0$ → keine Regularisierung, normale OLS-Regression +- $\lambda$ klein → wenig Schrumpfung, mehr Merkmale bleiben (Risiko Overfitting) +- $\lambda$ gross → starke Schrumpfung + - **Lasso**: setzt Koeffizienten auf 0 → Feature Selection + - **Ridge**: schrumpft sie nur, behält alle + +> 💡 *Hinweis (nicht in den Folien, falls du tiefer willst):* Die genaue **Skalierung** der Zielfunktion ist in sklearn nicht identisch — `Lasso` rechnet mit Faktor $\frac{1}{2n}$ vor dem Fehlerterm, `Ridge` nicht. `alpha` ↔ $\lambda$ stimmt also **konzeptionell**, der numerische Massstab kann zwischen den beiden abweichen. Für die Prüfung irrelevant, aber gut zu wissen, wenn du `alpha`-Werte zwischen Modellen vergleichst. + +--- + +# Evaluation von Regressionsmodellen + +## Mean Absolute Error (MAE) + +$$\text{MAE} = \frac{1}{n}\sum_{i=1}^{n} |y_i - \hat{y}_i|$$ + +- misst die durchschnittliche absolute Abweichung +- **+** einfach zu interpretieren, robust gegenüber Ausreissern +- **−** grosse Fehler werden nicht besonders stark bestraft +- *Beispiel:* MAE = 5 → Vorhersagen weichen im Schnitt um 5 Einheiten ab + +## Mean Squared Error (MSE) + +$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n} (y_i - \hat{y}_i)^2$$ + +- durchschnittliche **quadratische** Abweichung +- **+** bestraft grosse Fehler stark, weit verbreitet im ML +- **−** empfindlich gegenüber Ausreissern, Einheit ist „quadriert" (schwerer interpretierbar) + +## Root Mean Squared Error (RMSE) + +$$\text{RMSE} = \sqrt{\frac{1}{n}\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}$$ + +- Quadratwurzel des MSE +- **+** gleiche Einheit wie die Zielvariable, gewichtet grosse Fehler stärker +- **−** sensibel gegenüber Ausreissern + +## Vergleich + +| Methode | Zweck | Vorteile | Nachteile | Typischer Einsatz | +| ------- | ----------------------------- | --------------------------------- | -------------------------------------- | ----------------------------------- | +| MAE | durchschn. absoluter Fehler | einfach, robust ggü. Ausreissern | grosse Fehler kaum bestraft | wenn durchschn. Fehlergrösse zählt | +| MSE | durchschn. quadrat. Fehler | bestraft grosse Fehler stark | empfindlich ggü. Ausreissern, schwerer interpretierbar | wenn grosse Fehler vermieden werden sollen | +| RMSE | Fehler in Originaleinheit | gleiche Einheit wie Zielvariable | sensibel ggü. Ausreissern | Standardmetrik für viele Probleme | +| Cross Validation | Generalisierung bewerten | erkennt Overfitting, robuster | höherer Rechenaufwand | Modellvergleich & -validierung | + +> Daneben gibt es $R^2$ (Bestimmtheitsmass) — sklearn nutzt das per `model.score()` (siehe Praxis). + +## Cross Validation + +- Verfahren zur Bewertung von ML-/Regressionsmodellen. +- Ziel: prüfen, wie gut ein Modell auf **unbekannten** Daten funktioniert (Generalisierung). +- Reduziert das Risiko einer „glücklichen" Aufteilung durch **mehrere** Trainings-/Test-Splits. + +### Vorgehen (k-Fold) + +1. Datensatz in $k$ gleich grosse Teile (Folds) aufteilen +2. einen Fold als Testdaten verwenden +3. die übrigen $k-1$ Folds als Trainingsdaten +4. Modell trainieren und testen +5. $k$-mal wiederholen, sodass jeder Fold einmal Testdaten ist +6. Ergebnisse mitteln + +*Beispiel (k=5):* Durchlauf 1 testet Fold 1 (trainiert auf 2–5), Durchlauf 2 testet Fold 2 (trainiert auf 1, 3–5), usw. + +### Hinweise + +- **Rechenaufwand**: Modell wird mehrfach trainiert → teurer als einfacher Train-Test-Split +- **Wahl von $k$**: klein (5) = schneller; gross (10) = stabiler, aber aufwändiger +- **Data Leakage**: Test-Infos dürfen nicht ins Training gelangen, sonst zu optimistische Ergebnisse +- **Zeitreihen**: normale k-Fold ungeeignet — zukünftige Daten dürfen nicht zur Vorhersage vergangener verwendet werden (→ stattdessen z.B. `TimeSeriesSplit`) + +### Vor- und Nachteile + +| Vorteile | Nachteile | +| -------------------------------- | -------------------------------------- | +| zuverlässigere Leistungsbewertung | höherer Rechenaufwand | +| erkennt Overfitting | bei grossen Datensätzen langsam | +| nutzt Daten effizient | nicht direkt für Zeitreihen geeignet | +| gut für Modellvergleich | sorgfältige Umsetzung erforderlich | + +## Evaluation: Herausforderungen + +- Overfitting / Underfitting (s.o.) +- Ausreisser beeinflussen MSE und RMSE stark +- Data Leakage verfälscht die Evaluation +- unausgewogene Daten (über-/unterrepräsentierte Wertebereiche) + +--- + +# Praxis (Foliensatz, Demo & Melbourne Housing) + +> Kurzreferenz für den Praxisteil — der eigentliche Workshop 08 ist unten als offene Aufgabe notiert. + +### Setup + +- **Demo-Dataset** `demo_data_regr.csv`: 2 Spalten (X = Feature, y = Target), 81 Beobachtungen — nur zur Veranschaulichung, **kein** Train-Test-Split. +- **Melbourne Housing** `melb_data_prep.csv`: 18'393 Zeilen, 24 Spalten (10 float, 14 int), Target `Price` (float). Hier erfolgen die Performance-Vergleiche → **wird** gesplittet. + +```python +import pandas as pd, numpy as np, matplotlib.pyplot as plt, seaborn as sns +from bfh_cas_pml import prep_data, prep_demo_data + +X_train, X_test, y_train, y_test = prep_data('melb_data_prep.csv', 'Price', seed=1234) +X_demo, y_demo = prep_demo_data('demo_data_regr.csv', 'y') +``` + +### Lineare Regression + +```python +from sklearn.linear_model import LinearRegression +model = LinearRegression() +model.fit(X_train, y_train) +print(model.intercept_, model.coef_) # X_train.columns für Feature-Zuordnung +print(model.score(X_test, y_test)) # liefert R² +``` + +- `fit_intercept=True` (Default) sorgt dafür, dass der Intercept berechnet wird; sonst auf 0 fixiert. +- `model.score(X_test, y_test)` == `r2_score(y_test, model.predict(X_test))` → **R²** (Folienwert ≈ 0.560). +- **Fazit aus dem Scatter** (y_pred vs. y_test): Modell erzeugt teils **negative** Preise (unglaubwürdig), Zusammenhang wirkt nicht ganz linear — evtl. Feature-Korrelationen / Extremwerte. + +### Lasso & Ridge + +```python +from sklearn.linear_model import Lasso, Ridge +Lasso().fit(X_train, y_train) # R² ≈ 0.560 +Ridge().fit(X_train, y_train) # R² ≈ 0.560 +``` + +- Default-`alpha` ändert hier kaum etwas am R² → als reine Regressoren **nicht** Favorit. +- **aber**: starke Instrumente für **Feature Selection** (v.a. Lasso). Mit `alpha=10000` bleiben von 23 Features nur **7** übrig (z.B. Rooms, Bathroom, Car, logLandsize, Method_S, Regionname_Southern_Metropolitan, day_of_week) → daraus liesse sich eine Filtermaske bauen. +- Erinnerung: `alpha` == $\lambda$ (siehe oben). + +### 🛠 Workshop 08 (60', offen) + +Untersuche den Einfluss des **Standardisierens der Features** auf: + +- Modellkoeffizienten +- Predictions +- Score + +Optional/zu Hause: Einfluss des **Logarithmierens des Targets** auf die Performance der linearen Regression.