0% fanden dieses Dokument nützlich (0 Abstimmungen)
0 Ansichten17 Seiten

Data Analytics - Chapter 5

Hochgeladen von

nelsonmaria2002
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
0 Ansichten17 Seiten

Data Analytics - Chapter 5

Hochgeladen von

nelsonmaria2002
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

Data Analy)cs (Master Wirtscha3swissenscha3en LUH -> Chapter 5 – „Vorhersage am Beispiel der

linearen Regression“)
Quelle für das gesamte Dokument sind Vorlesung und Übung der Veranstaltung „Data Analy:cs“ im SoSe 26
Ins:tut für Arbeitsökonomik
(Python-Codes wurden durch den Verfasser via Erklärungen von ChatGPT erläutert)

Step 6 „Auswahl der Techniken (z.B. Regression, Logit)“ und Step 7 „Itera)ve Implemen)erung und
„Tuning““ im Data Mining Prozess

Lineare Regression (Erweiterung)


- Zielt darauf ab, eine lineare Beziehung zwischen einer abhängigen und einer (oder mehrerer)
unabhängigen Variablen zu beschreiben
- Annahme: In einer PopulaJon besteht eine lineare Beziehung zwischen den Variablen y und x

Beziehung zw. Autopreisen und Motorleistung (klassische stat. Analyse wie in Teil II)

mod = [Link](toyota_df["PRICE"], mod1_X)


→ definiert ein lineares Regressionsmodell (OLS = Ordinary Least Squares)
[Link](...)
→ erstellt ein lineares Modell zur Erklärung einer Zielvariable durch Prädiktoren
toyota_df["PRICE"]
→ abhängige Variable (Zielvariable) = Fahrzeugpreis
mod1_X
→ unabhängige Variablen (Prädiktoren / Designmatrix)
→ Ziel: Preis durch Einflussfaktoren erklären
res = mod.fit()
→ schätzt das Regressionsmodell
→ berechnet die op:malen Koeffizienten (Least Squares Lösung)
print([Link]())
→ gibt detaillierte Modellzusammenfassung aus
→ enthält u. a.:
Regressionskoeffizienten
Signifikanz (p-Werte)
Gütemaße (R², adj. R²)
Standardfehler

1
Kernidee:
→ OLS modelliert lineare Beziehung zwischen Preis und Einflussvariablen
→ fit() schätzt das Modell
→ summary() liefert vollständige sta:s:sche Auswertung

StaJsJsche Signifikanz
(Klassiche stat. Analyse wie in Teil II)

- Ist es möglich, dass in Wirklichkeit gar kein Zshg. Zwischen den Variablen Price und HP be-
steht (-> also b = 0), allerdings zufällig eine SJchprobe gezogen wurde, in der Price und HP po-
siJv miteinander korreliert sind?
- Pr(>ItI), genannt p-Wert, bezeichnet die W`keit, dass b >= 76,26 oder b <= -76,26 unter der
Hypothese beobachtet wird, dass der wahre Wert von b Null ist
- Im Falle von b (und auch a) ist diese W`keit extrem klein -> man kann sicher sein, dass der
wahre (aber unbeobachtete) Wert b von Null abweicht

Gleicher Code wie auf Seite 1

2
InterpretaJon der Koeffizienten-Schätzer b

Mul)ples Regressionsmodell

Variablen

Datenübersicht

mod2_X
→ enthält die unabhängigen Variablen (Prädiktoren) für ein mul:ples Regressionsmodell
→ entspricht der sogenannten Designmatrix (jede Spalte ist ein separater Regressor im Modell)

3
Klassische sta:s:sche Analyse (wie in Teil II)

toyota_df[[ "Age_08_04", "Fuel_Type", "Met_Color", "AutomaNc", "CC", "Doors", "Quarterly Tax", "Weight" ]]
→ Auswahl der unabhängigen Variablen (Prädiktoren) aus dem DataFrame
→ diese Variablen erklären später den Preis
→ bildet die Basis für das Regressionsmodell (X-Matrix)
pd.get_dummies(mod2_x, drop_first = True)
→ wandelt kategoriale Variablen in Dummy-Variablen um
get_dummies(...)
→ z. B. Fuel_Type wird in mehrere 0/1-Spalten zerlegt
drop_first = True
→ enkernt eine Kategorie als Referenzklasse
→ verhindert Mul:kollinearität (Dummy-Falle)
sm.add_constant(mod2_x)
→ fügt eine Konstante (Intercept) zum Modell hinzu
→ notwendig, damit das Modell einen Achsenabschnil schätzen kann
[Link](toyota_df["Price"], mod2_X) (korrekt ergänzt)
→ definiert ein mul:ples lineares Regressionsmodell
toyota_df["Price"]
→ abhängige Variable (Zielgröße)
mod2_X
→ alle erklärenden Variablen inkl. Dummies + Konstante
res2 = mod2.fit()
→ schätzt das mul:ple lineare Regressionsmodell
→ berechnet die op:malen Koeffizienten (OLS-Schätzung)
→ Modell wird an die Daten angepasst (Training/Finng)
[Link]()
→ gibt die vollständige sta:s:sche Modellzusammenfassung aus
→ enthält u. a.:
Regressionskoeffizienten (Einfluss jeder Variable)
p-Werte (Signifikanz der Variablen)
R² / adj. R² (Erklärungsgehalt des Modells)
Standardfehler und Konfidenzintervalle

4
Zurück zum Data Mining: Daten ParJJonieren und Schätzung

KompleUer Machine Learning Workflow für lineare Regression

x = toyota_df[[ "Age_08_04", "Fuel_Type", "Met_Color", "AutomaNc", "CC", "Doors", "Quarterly Tax", "Weight" ]]
→ Auswahl der unabhängigen Variablen (Features)
→ diese erklären den Preis
y = toyota_df[[ "Price" ]]
→ Zielvariable (abhängige Variable)
→ wird vorhergesagt
pd.get_dummies(x, drop_first = True)
→ Umwandlung kategorialer Variablen in numerische Dummy-Variablen
→ z. B. Fuel_Type wird in 0/1-Spalten zerlegt
→ drop_first = True verhindert redundante Variable (Dummy-Falle)
train_test_split(x, y, test_size = 0.4, random_state = 1)
→ Aupeilung der Daten in Trainings- und Validierungsdaten
test_size = 0.4
→ 40% der Daten sind Test/Validierung
train_x, valid_x, train_y, valid_y
→ getrennte Feature- und Zielvariablen für Training und Test
random_state = 1
→ sorgt für reproduzierbare Zufallsaupeilung
toyota_slm = LinearRegression()
→ erstellt ein lineares Regressionsmodell (scikit-learn)
toyota_slm.fit(train_x, train_y)
→ trainiert das Modell auf den Trainingsdaten
→ schätzt Zusammenhang zwischen Features und Preis
Kernidee (Data Mining Kontext):
→ vollständiger ML-Workflow:
Features + Target definieren
kategoriale Variablen vorbereiten (Dummies)
Daten in Train/Test splilen (Generalisierung!)
Modell instanziieren
Modell auf Trainingsdaten filen

5
print("Performance Measures (Training data)")
→ gibt eine Überschrip für die Modellbewertung auf Trainingsdaten aus
regressionSummary(train_y, toyota_slm.predict(train_x))
→ berechnet zentrale Gütemaße des Regressionsmodells auf Trainingsdaten
train_y
→ tatsächliche Zielwerte (Training)
toyota_slm.predict(train_x)
→ vom Modell vorhergesagte Werte auf Trainingsdaten
→ vergleicht Ist- vs. Prognosewerte
→ liefert z. B. MAE, RMSE, MAPE (je nach dmba-Funk:on)

print("Performance Measures (ValidaNon data)")


→ Überschrip für Bewertung auf Validierungsdaten
regressionSummary(valid_y, toyota_slm.predict(valid_x))
→ gleiche Kennzahlen, aber auf unbekannten Daten
valid_y
→ tatsächliche Werte im Test/Validierungsset
toyota_slm.predict(valid_x)
→ Modellvorhersagen auf Validierungsdaten

Kernidee:
→ Vergleich von Trainings- vs. Validierungsleistung
Training gut, Valida:on schlecht → Overfinng
beide ähnlich → gutes Generalisierungsverhalten
→ genau dieser Vergleich ist zentral im Data-Mining-Kontext

6
Gegenüberstellung von einfachem und mulJplen Regressionsmodell

- Der RSME in den Trainingsdaten sinkt von 3533 auf 1315, wenn von einem Prädiktor (einfa-
ches Modell) zu 10 Prädiktoren (vollständiges Modell) übergegangen wird

Zusammenfassung

- Lineare Regressionsmodelle liefern Schätzungen der Parameter bdurch Minimierung der


Summe der quadrierten Residuen.
- Vorhersagemodelle werden erst an die Trainingsdaten angepasst und ihre
Vorhersagegenauigkeit wird dann anhand eines separaten Validierungsdatensatzes
bewertet.
- Die Enfernung redundanter Prädiktoren ist der Schlüssel zum Erreichen von
Vorhersagegenauigkeit und Robustheit.

7
Übung Chapter 5

import pandas as pd
→ Datenanalyse mit DataFrames (Tabellenstruktur)
import numpy as np
→ numerische Berechnungen mit Arrays und mathema:schen Funk:onen
from sklearn.model_selecNon import train_test_split
→ Funk:on zur Aupeilung in Trainings- und Testdaten
from sklearn.linear_model import LinearRegression
→ lineares Regressionsmodell (Machine Learning Ansatz)
import [Link] as sm
→ sta:s:sche Modellierung (z. B. OLS Regression mit Inferenz)
import matplotlib as mpl / import [Link] as plt
→ Basisbibliothek für Visualisierungen (Plots, Grafiken)
from dmba import regressionSummary
→ Funk:on zur kompakten Auswertung von Regressionsmodellen (MAE, RMSE etc.)
import seaborn as sns
→ sta:s:sche Visualisierung (auf matplotlib autauend, einfacher für Data Analysis Plots)

è Datenimport (wie in den vorherigen Übungen)

8
Toyota_df.Fuel_Type.value_counts()
→ erstellt eine Häufigkeitstabelle für die Variable Fuel_Type
Fuel_Type
→ kategoriale Variable (z. B. Benzin, Diesel, Hybrid)
value_counts()
→ zählt, wie op jede Kategorie vorkommt
→ zeigt die Verteilung der Krapstoffarten im Datensatz

Toyota_df.groupby("Fuel_Type").[Link]()
→ berechnet den durchschnillichen Preis pro Krapstoffart
groupby("Fuel_Type")
→ gruppiert die Daten nach Kategorien der Variable Fuel_Type
[Link]()
→ berechnet den Milelwert der Variable Price innerhalb jeder Gruppe
Kernidee:
→ zeigt, wie sich der durchschnilliche Fahrzeugpreis je Krapstoffart unterscheidet
→ einfache Form der gruppierten Aggrega:on (Gruppenvergleich)

9
[Link](x = "Fuel_Type", y = "Price", data = Toyota_df, whis = 100)
→ erstellt Boxplots des Preises für jede Krapstoffart
x = "Fuel_Type"
→ Gruppierung nach Krapstoffart
y = "Price"
→ numerische Variable (Fahrzeugpreis)
data = Toyota_df
→ Datensatz
whis = 100
→ Whisker reichen bis zu den Minimal- und Maximalwerten
→ prak:sch: keine separaten Ausreißerpunkte, gesamte Spannweite wird gezeigt
Kernidee:
→ Vergleich der Preisverteilungen zwischen Krapstoffarten
→ zeigt Median, Streuung und Extremwerte je Gruppe

10
erstellt einen Swarmplot (Punktdiagramm ohne Überlappung) für Preise nach Krapstoffart
with pd.opNon_context('mode.use_inf_as_na', True):
→ behandelt unendliche Werte (inf) temporär wie fehlende Werte (NaN)
→ verhindert Darstellungsprobleme oder Fehler im Plot
[Link](rc={'figure.figsize':(13,5), "fi[Link]":300})
→ definiert globale Plot-Einstellungen
figure.figsize = (13,5)
→ Breite und Höhe der Grafik in Zoll
fi[Link] = 300
→ hohe Auflösung (geeignet für Präsenta:onen/Export)
sns.set_theme(style="whitegrid")
→ setzt das visuelle Theme
→ „whitegrid“: heller Hintergrund mit Gilernetzlinien zur besseren Ablesbarkeit
[Link](x = "Fuel_Type", y = "Price", data = Toyota_df, size = 4)
→ erstellt den eigentlichen Swarmplot
x = "Fuel_Type"
→ kategoriale Variable (Krapstoffart) auf der x-Achse
y = "Price"
→ numerische Variable (Fahrzeugpreis) auf der y-Achse
data = Toyota_df
→ verwendeter Datensatz
size = 4
→ Größe der einzelnen Punkte (Beobachtungen)
→ Swarmplot-Logik: Punkte werden so angeordnet, dass sie sich nicht überlappen
→ zeigt die vollständige Verteilung der Datenpunkte innerhalb jeder Kategorie
Kernidee:
→ detaillierte Visualisierung aller einzelnen Beobachtungen je Krapstoffart
→ im Gegensatz zum Boxplot: keine Aggrega:on, sondern vollständige Datenpunkte sichtbar
→ besonders geeignet zur Erkennung von Clustern, Dichtebereichen und Ausreißern
→ kombiniert Verteilungsübersicht mit maximaler Informa:onsdichte je Datenpunkt

11
erstellt einen Stripplot zur Darstellung einzelner Beobachtungen nach Krapstoffart
with pd.opNon_context('mode.use_inf_as_na', True):
→ behandelt unendliche Werte (inf) temporär als fehlende Werte (NaN)
[Link](rc={'figure.figsize':(10,8), "fi[Link]":300})
→ globale Plot-Parameter
figure.figsize = (10,8)
→ Plotgröße (Breite × Höhe)
fi[Link] = 300
→ hohe Auflösung für bessere Darstellung/Export
sns.set_theme(style="whitegrid")
→ visueller S:l mit hellem Hintergrund und Gilernetz
[Link](x = "Fuel_Type", y = "Price", data = Toyota_df)
→ erstellt Punktdiagramm ohne Aggrega:on
x = "Fuel_Type"
→ kategoriale Gruppierungsvariable (z. B. Benzin, Diesel etc.)
y = "Price"
→ numerische Variable (Fahrzeugpreis)
data = Toyota_df
→ verwendeter Datensatz
→ Funk:onsweise Stripplot:
→ alle einzelnen Beobachtungen werden als Punkte dargestellt
→ Standardmäßig leichtes „Jilering“ (zufällige horizontale Verschiebung)
→ reduziert Überlappungen, aber nicht vollständig eliminiert
Kernidee:
→ Visualisierung der vollständigen Datenverteilung je Kategorie
→ zeigt Streuung, Dichte und mögliche Ausreißer auf Einzelwert-Ebene
→ weniger „geordnet“ als Swarmplot, dafür schneller und bei großen Datenmengen robuster
→ gute Alterna:ve zum Boxplot, wenn Detailverteilung wich:g ist

12
Vorbereitung der Regressions-Designmatrix (Feature Engineering für kategoriale Variable)
modg_x = Toyota_df[['Fuel_Type']]
→ Auswahl der unabhängigen Variable (nur Fuel_Type) als DataFrame
pd.get_dummies(modg_x, drop_first = True)
→ One-Hot-Encoding der kategorialen Variable
→ wandelt Kategorien in binäre Dummy-Variablen um (0/1)
drop_first = True
→ enkernt eine Dummy-Variable zur Vermeidung der Dummy-Falle (Mul:kollinearität)
→ eine Kategorie dient als Referenzgruppe
sm.add_constant(modg_x)
→ fügt Intercept (Achsenabschnil) zur Regressionsmatrix hinzu
→ notwendig für OLS-Schätzung mit konstantem Term
astype(float)
→ stellt sicher, dass alle Werte numerisch sind
→ erforderlich für sta:s:sche Modellierung (keine Objekt-/Stringtypen erlaubt)
Kernidee:
→ Umwandlung einer kategorialen Variable in ein regressionsfähiges numerisches Format
→ Defini:on eines linearen Modells mit Referenzkategorie

Schätzung eines linearen Regressionsmodells und Ausgabe der Ergebnisse


[Link](Toyota_df['Price'], modg_x)
→ Defini:on eines Ordinary Least Squares (OLS) Modells
→ abhängige Variable: Price
→ unabhängige Variablen: Dummy-kodierte Fuel_Type + Konstante
modg.fit()
→ Modellschätzung (Parameter werden milels kleinster Quadrate bes:mmt)
[Link]()
→ ausführliche Modellzusammenfassung
→ enthält typischerweise:
→ Regressionskoeffizienten (Effekte der Fuel-Typen rela:v zur Referenz)
→ Standardfehler
→ t-Tests und p-Werte (Signifikanz der Variablen)
→ R² und adj. R² (Modellgüte)
→ F-Test (Gesamtmodellsignifikanz)
Kernidee:
→ Untersuchung des Einflusses der Krapstoffart auf den Preis milels linearer Regression
→ Interpreta:on der Dummy-Koeffizienten als Preisunterschiede zur Referenzkategorie
→ sta:s:sche Bewertung, ob Fuel_Type signifikant zur Preisvaria:on beiträgt

13
Defini:on von Features (X) und Zielvariable (y) für ein Regressionsmodell
x = Toyota_df[['Fuel_Type', 'HP']]
→ unabhängige Variablen (Features)
→ Fuel_Type = kategoriale Variable (später zu Dummies)
→ HP = numerische Variable (z. B. Motorleistung)
y = Toyota_df[['Price']]
→ Zielvariable (abhängige Variable)
→ Fahrzeugpreis

Umwandlung kategorialer Variablen in numerische Dummy-Variablen


pd.get_dummies(x)
→ One-Hot-Encoding für Fuel_Type
→ erzeugt binäre Spalten (0/1) für jede Kategorie
drop_first = True
→ enkernt eine Referenzkategorie
→ verhindert Mul:kollinearität (Dummy-Falle)
Kernidee:
→ Fuel_Type wird regressionsfähig gemacht

Aupeilung des Datensatzes in Trainings- und Validierungsdaten


train_test_split(...)
→ zufällige Trennung der Daten
test_size = 0.4
→ 40% Validierungs-/Testdaten
→ 60% Trainingsdaten
train_x / train_y
→ Daten zum Trainieren des Modells
valid_x / valid_y
→ Daten zur Modellbewertung (Generalisa:on)
Kernidee:
→ Vermeidung von Overfinng durch getrennte Datenbasis

Training eines linearen Regressionsmodells


LinearRegression()
→ Instanziierung eines linearen Modells (scikit-learn)
fit(train_x, train_y)
→ Schätzung der Regressionsparameter auf Trainingsdaten
→ lernt Zusammenhang zwischen Features (HP, Fuel_Type-Dummies) und Preis
Kernidee:
→ Autau eines prädik:ven Modells zur Preisvorhersage
→ Kombina:on aus numerischen und kategorischen Einflussgrößen
→ Grundlage für spätere Vorhersagen und Modellbewertung

14
Ausgabe der Modellgüte auf den Trainingsdaten
print('Performance Measures (Training data)')
→ Überschrip zur Strukturierung der Ausgabe
regressionSummary(train_y, toyota_ml.predict(train_x))
→ vergleicht tatsächliche Preise mit Modellvorhersagen auf Trainingsdaten
train_y
→ echte Zielwerte (Preise)
toyota_ml.predict(train_x)
→ vorhergesagte Preise des Modells
→ liefert typische Fehlermaße (z. B. MAE, RMSE, MAPE)
Kernidee:
→ schnelle Bewertung, wie gut das Modell die Trainingsdaten erklärt
→ Grundlage für Overfinng-Check im Vergleich zu Validierungsdaten

Ausgabe der Modellgüte auf Validierungsdaten


print('Performance Measures (ValidaNon data)')
→ Überschrip zur Einordnung der Ergebnisse
regressionSummary(valid_y, toyota_ml.predict(valid_x))
→ vergleicht tatsächliche mit vorhergesagten Preisen auf dem Validierungsset
valid_y
→ echte Zielwerte im Validierungsdatensatz
toyota_ml.predict(valid_x)
→ Modellvorhersagen für unbekannte (nicht trainierte) Daten
→ liefert typische Fehlermaße (z. B. MAE, RMSE, MAPE)
Kernidee:
→ Bewertung der Generalisierungsfähigkeit des Modells
→ zeigt, wie gut das Modell auf unbekannten Daten funk:oniert
→ zentral zur Erkennung von Overfinng/Underfinng

15
Defini:on der Modellvariablen
x = Toyota_df[['HP']]
→ unabhängige Variable (Feature)
→ HP = Motorleistung als einzige erklärende Variable
y = Toyota_df[['Price']]
→ abhängige Variable (Zielgröße)
→ Fahrzeugpreis
Kernidee:
→ einfaches lineares Modell nur mit einem Prädiktor

Aupeilung in Trainings- und Validierungsdaten


train_test_split(...)
→ zufällige Trennung des Datensatzes
test_size = 0.4
→ 40% Validierungsdaten, 60% Trainingsdaten
train_x / train_y
→ Daten zum Modelltraining
valid_x / valid_y
→ Daten zur Modellbewertung
Kernidee:
→ saubere Trennung von Training und Test zur Überprüfung der Modellgeneralisa:on

16
Ausgabe der Modellgüte auf Trainingsdaten
print("Performance Measures (Training data)")
→ Überschrip zur Strukturierung der Ergebnisanzeige
regressionSummary(train_y, toyota_sml.predict(train_x))
→ Vergleich von tatsächlichen und vorhergesagten Werten im Trainingsset
train_y
→ echte Zielwerte (Preise)
toyota_sml.predict(train_x)
→ Modellvorhersagen auf Basis der Trainingsdaten
→ liefert typische Fehlermaße (z. B. MAE, RMSE, MAPE)
Kernidee:
→ Bewertung der Anpassungsgüte des Modells auf Trainingsdaten
→ Basis für Vergleich mit Validierungs-/Testperformance (Overfinng-Check)

Ausgabe der Modellgüte auf Validierungsdaten


print('Perfromance Measures (ValidiaNon data)')
→ Überschrip zur Ergebnisstruktur (Hinweis: Tippfehler im String)
regressionSummary(valid_y, toyota_sml.predict(valid_x))
→ Vergleich von echten und prognos:zierten Preisen auf Validierungsdaten
valid_y
→ tatsächliche Zielwerte im Validierungsset
toyota_sml.predict(valid_x)
→ Modellvorhersagen für unbekannte Daten
→ typische Kennzahlen: MAE, RMSE, MAPE
Kernidee:
→ Prüfung der Generalisierungsfähigkeit des Modells
→ zentraler Vergleich zur Trainingsperformance zur Erkennung von Overfinng

17

Das könnte Ihnen auch gefallen