Entdecke alles über die logistische Regression: wie sie sich von der linearen Regression unterscheidet, wie man diese Modelle in R mit der Funktion glm() anpasst und auswertet und vieles mehr!
Die logistische Regression ist ein einfaches, aber leistungsstarkes Modell zur Vorhersage binärer Ergebnisse. Das heißt, ob etwas passieren wird oder nicht. Es ist eine Art Klassifizierungsmodell für überwachtes maschinelles Lernen.
Die logistische Regression wird in fast jeder Branche eingesetzt - im Marketing, im Gesundheitswesen, in den Sozialwissenschaften und in anderen Bereichen - und ist ein unverzichtbarer Bestandteil des Werkzeugkastens eines jeden Datenwissenschaftlers.
Um dieses Tutorial optimal nutzen zu können, brauchst du Grundkenntnisse in R. Außerdem ist es hilfreich, etwas über einen verwandten Modelltyp, die lineare Regression, zu wissen. Lies das Tutorial Lineare Regression in R, um mehr darüber zu erfahren.
Ein Überblick über die logistische Regression
Angenommen, du willst vorhersagen, ob heute ein sonniger Tag wird oder nicht. Es gibt zwei mögliche Ergebnisse: "sonnig" oder "nicht sonnig". Die Ergebnisvariable wird auch als "Zielvariable" oder "abhängige Variable" bezeichnet.
Es gibt viele Variablen, die das Ergebnis beeinflussen können, z. B. die "Temperatur am Vortag", der "Luftdruck" usw. Die Einflussvariablen werden als Merkmale, unabhängige Variablen oder Prädiktoren bezeichnet - alle diese Begriffe bedeuten das Gleiche.
Andere Beispiele sind, ob ein Kunde dein Produkt kaufen wird oder nicht, ob eine E-Mail Spam ist oder nicht, ob eine Transaktion betrügerisch ist oder nicht und ob ein Medikament einen Patienten heilen wird oder nicht.
Wie funktioniert die logistische Regression?
Die logistische Regression findet die bestmögliche Übereinstimmung zwischen der Prädiktor- und der Zielvariablen, um die Wahrscheinlichkeit vorherzusagen, dass die Zielvariable zu einer bestimmten Klasse/Kategorie gehört.
Die lineare Regression versucht, die beste gerade Linie zu finden, die das Ergebnis aus den Merkmalen vorhersagt. Sie bildet eine Gleichung wie
und nutzt die Optimierung, um die bestmöglichen Werte für Achsenabschnitt und Steigung zu finden.
Die logistische Regression funktioniert ähnlich, nur dass sie eine Regression auf die Wahrscheinlichkeiten des Ergebnisses in einer Kategorie durchführt. Sie verwendet eine Sigmoidfunktion (die kumulative Verteilungsfunktion der logistischen Verteilung), um die rechte Seite dieser Gleichung umzuformen.
y_predictions = logistic_cdf(intercept + slope * features)Bereitgestellt von
Auch hier nutzt das Modell die Optimierung, um die bestmöglichen Werte für Achsenabschnitt und Steigung zu finden.
Da der Algorithmus für die logistische Regression der Gleichung für die lineare Regression sehr ähnlich ist, gehört er zu einer Familie von Modellen, die "verallgemeinerte lineare Modelle" genannt werden. Deshalb trägt die logistische Regression "Regression" in ihrem Namen, obwohl sie ein Klassifikationsmodell ist.
Die sigmoide Funktion ähnelt einer S-förmigen Kurve in der Abbildung unten. Er nimmt die reellen numerischen Eingangswerte und wandelt sie zwischen 0 und 1 um (indem er sie von beiden Seiten her verkleinert, d.h. die negativen Werte auf 0 und die sehr hohen positiven auf 1). Darüber hinaus ist die Abschneidegrenze der entscheidende Faktor, der die Ergebnisse in Kategorien oder Klassen einteilt, wenn er auf diese Wahrscheinlichkeiten angewendet wird.
Komplexe Konzepte lassen sich am besten verstehen, wenn sie anhand von Beispielen erklärt werden, also lass uns eine Analogie aufgreifen, um die Funktionsweise des LR-Algorithmus zu erfassen. Nehmen wir an, das LR-Modell hat die Aufgabe, eine betrügerische Transaktion zu identifizieren, indem es mehrere Betrugsindikatoren wie den Standort des Nutzers, den Kaufbetrag, die IP-Adresse usw. untersucht. Das Ziel ist es, die Wahrscheinlichkeit zu bestimmen, ob eine bestimmte Transaktion rechtmäßig oder betrügerisch ist - was die Zielvariable darstellt.
Das Modell gewichtet die Prädiktoren je nach ihrem Einfluss auf die Zielvariable und kombiniert sie, um die normalisierte Punktzahl oder Betrugswahrscheinlichkeit zu berechnen.
Der Datensatz
Wir verwenden den Datensatz einer Direktmarketing-Kampagne eines portugiesischen Bankinstituts, die Telefonanrufe nutzt. Die Kampagne zielt darauf ab, Abonnements für eine Bank-Festgeldanlage zu verkaufen, die durch die Variable y (Abonnement oder kein Abonnement) dargestellt wird. Ziel des logistischen Regressionsmodells ist es, anhand der Vorhersagevariablen, d.h. der Eigenschaften des Kunden, wie z.B. der demografischen Informationen, vorherzusagen, ob ein Kunde ein Abonnement kaufen würde oder nicht.
Das Datenwörterbuch für diesen Datensatz und viele andere nützliche Datensätze findest du auf der Website von Datacamp.
Anzahl der Beschäftigten - vierteljährlicher Indikator
numerisch
y
Hat der Kunde eine Termineinlage gezeichnet?
binär: "ja", "nein"
Logistische Regression Arbeitsablauf
Der gesamte Workflow des maschinellen Lernens wird in der Infografik A Beginner's Guide to The Machine Learning Workflow beschrieben. Hier konzentrieren wir uns auf die Schritte zur Datenvorbereitung und Modellierung. Wir werden uns insbesondere mit folgenden Themen beschäftigen:
Aufteilung der Daten in Trainings- und Testgruppen
Anpassen (Trainieren) des Modells
Vorhersagen treffen
Bewertung der Modellleistung
Hyperparameter-Abstimmung
Logistische Regression Pakete
In R gibt es zwei beliebte Workflows für die Modellierung der logistischen Regression: base-R und tidymodels.
Die Base-R Workflow-Modelle sind einfacher und enthalten Funktionen wie glm() und summary(), um das Modell anzupassen und eine Modellzusammenfassung zu erstellen.
Der tidymodels Workflow ermöglicht eine einfachere Verwaltung mehrerer Modelle und eine einheitliche Schnittstelle für die Arbeit mit verschiedenen Modelltypen.
In diesem Lernprogramm wird der tidymodels Workflow verwendet.
Visualisiere die Daten
Importiere das Paket tidymodels, indem du die Funktion library() aufrufst.
Der Datensatz liegt in einer CSV-Datei mit europäischer Formatierung vor (Kommas für Dezimalstellen und Semikolons für Trennzeichen). Wir lesen sie mit read_csv2() aus dem readr-Paket.
Wandle die Zielvariable y in eine Faktorvariable für die Modellierung um.
Stelle mit der Funktion ggplot() die Anzahl der einzelnen Berufe in Abhängigkeit von y dar.
library(readr)
library(tidymodels)# Read the dataset and convert the target variable to a factor
bank_df <- read_csv2("bank-full.csv")
bank_df$y = as.factor(bank_df$y)# Plot job occupation against the target variable
ggplot(bank_df, aes(job, fill = y))+
geom_bar()+
coord_flip()Bereitgestellt von
Aufteilung der Daten
Wir teilen den Datensatz in einen Trainingsdatensatz für die Anpassung des Modells und einen Testdatensatz für die Evaluierung des Modells auf, um sicherzustellen, dass das so trainierte Modell auch auf einem ungesehenen Datensatz funktioniert.
Die Aufteilung der Daten in Trainings- und Testdaten kann mit der Funktion initial_split() und dem Attribut prop vorgenommen werden, das den Anteil der Trainingsdaten definiert.
# Split data into train and test
set.seed(421)
split <- initial_split(bank_df, prop =0.8, strata = y)
train <- split %>%
training()
test <- split %>%
testing()Bereitgestellt von
Anpassen und Auswerten des Modells
Um das Modell zu erstellen, deklarierst du ein logistic_reg()-Modell. Hierfür werden Mischungs- und Strafargumente benötigt, die das Ausmaß der Regularisierung steuern. Ein Mischungswert von 1 steht für ein Lasso-Modell und 0 für eine Ridge-Regression. Es sind auch Werte dazwischen erlaubt. Das Strafargument gibt die Stärke der Regularisierung an.
Beachte, dass du "doppelte" Fließkommazahlen an die Mischung und die Strafe übergeben musst
Setze die "Engine" (die Backend-Software, mit der die Berechnungen durchgeführt werden) mit set_engine(). Es gibt mehrere Möglichkeiten: Die Standard-Engine ist "glm", die eine klassische logistische Regression durchführt. Diese Methode wird oft von Statistikern bevorzugt, weil du p-Werte für jeden Koeffizienten erhältst, was es einfacher macht, die Bedeutung der einzelnen Koeffizienten zu verstehen.
Hier verwenden wir die Engine "glmnet". Diese Methode wird von Wissenschaftlern im Bereich des maschinellen Lernens bevorzugt, weil sie eine Regularisierung ermöglicht, die die Vorhersagen verbessern kann, insbesondere wenn du viele Merkmale hast. (In Python ist das scikit-learn-Paket standardmäßig so eingestellt, dass eine gewisse Regularisierung in der logistischen Regression enthalten ist).
Rufe die fit()-Methode auf, um das Modell anhand der im vorherigen Schritt erstellten Trainingsdaten zu trainieren. Das erste Argument für diese Funktion ist eine Formel. Auf der linken Seite der Formel verwendest du die Zielvariable (in diesem Fall y). Auf der rechten Seite kannst du jede beliebige Funktion einfügen, die du möchtest. Ein Punkt bedeutet: "Verwende alle Variablen, die nicht auf der linken Seite der Formel geschrieben wurden. Weitere Informationen zum Schreiben von Formeln findest du im R Formula Tutorial.
# Train a logistic regression model
model <- logistic_reg(mixture = double(1), penalty = double(1))%>%
set_engine("glmnet")%>%
set_mode("classification")%>%
fit(y ~ ., data = train)# Model summary
tidy(model)Bereitgestellt von
Die Ausgabe ist unten dargestellt, wobei die Spalte Schätzung die Koeffizienten des Prädiktors darstellt.
# A tibble: 43 × 3
term estimate penalty
<chr><dbl><dbl>1(Intercept)-2.5902 age -0.00047703 jobblue-collar -0.18304 jobentrepreneur -0.20605 jobhousemaid -0.27006 jobmanagement -0.019007 jobretired 0.36008 jobself-employed -0.10109 jobservices -0.105010 jobstudent 0.4150# ... with 33 more rows# ℹ Use `print(n = ...)` to see more rowsBereitgestellt von
Vorhersagen treffen
Mache Vorhersagen für die Testdaten mit der Funktion predict(). Du hast die Wahl der Art der Vorhersagen.
type = "class" gibt den wahrscheinlichsten Zielwert für jede Beobachtung zurück. Hier wird ein "Ja" oder ein "Nein" zurückgegeben, je nachdem, ob das Modell davon ausgeht, dass der Kunde ein Festgeld zeichnen wird oder nicht.
type = "prob" gibt die Wahrscheinlichkeit jedes Zielwerts für jede Beobachtung zurück. Hier wird die Wahrscheinlichkeit für ein "Ja" und die Wahrscheinlichkeit für ein "Nein" zurückgegeben (die sich für jede Beobachtung zu eins addieren).
# Class Predictions
pred_class <- predict(model,
new_data = test,
type ="class")# Class Probabilities
pred_proba <- predict(model,
new_data = test,
type ="prob")Bereitgestellt von
Bewerte das Modell mit der Funktion accuracy() mit dem Wahrheitsargument y und schätze den Wert des Arguments als die Vorhersagen aus dem vorherigen Schritt.
results <- test %>%
select(y)%>%
bind_cols(pred_class, pred_proba)
accuracy(results, truth = y, estimate = .pred_class)Bereitgestellt von
Hyperparameter-Abstimmung
Anstatt den Argumenten für Mischung und Strafe (den "Hyperparametern") bestimmte Werte zu geben, kannst du die Vorhersagekraft des Modells optimieren, indem du es abstimmst.
Die Idee ist, dass du das Modell viele Male mit verschiedenen Werten der Hyperparameter durchführst und siehst, welcher Wert die besten Vorhersagen liefert.
Setze in der Funktion logistic_reg() die Mixtur- und Strafargumente für einen Aufruf von tune().
Verwende die Funktion grid_regular(), um ein Raster möglicher Werte für Mischung und Strafe zu definieren.
Die Funktion workflow() erstellt ein Objekt, um die Details des Modells zu speichern, was nötig ist, wenn du es viele Male ausführst.
Wähle das beste Modell mit der Funktion select_best() aus. Du kannst aus einer Reihe von Metriken die "beste" auswählen. Hier verwenden wir die Kennzahl "Receiver Operating Characteristic Area under the Curve" (ROC AUC).
# Define the logistic regression model with penalty and mixture hyperparameters
log_reg <- logistic_reg(mixture = tune(), penalty = tune(), engine ="glmnet")# Define the grid search for the hyperparameters
grid <- grid_regular(mixture(), penalty(), levels = c(mixture =4, penalty =3))# Define the workflow for the model
log_reg_wf <- workflow()%>%
add_model(log_reg)%>%
add_formula(y ~ .)# Define the resampling method for the grid search
folds <- vfold_cv(train, v =5)# Tune the hyperparameters using the grid search
log_reg_tuned <- tune_grid(
log_reg_wf,
resamples = folds,
grid = grid,
control = control_grid(save_pred =TRUE))
select_best(log_reg_tuned, metric ="roc_auc")Bereitgestellt von
# A tibble: 1 × 3
penalty mixture .config
<dbl><dbl><chr>10.00000000010 Preprocessor1_Model01Bereitgestellt von
Weitere Bewertungsmetriken
Verwendung der besten Hyperparameter:
Lass uns ein logistisches Regressionsmodell trainieren
Nutze sie, um Vorhersagen für die Testmenge zu erstellen
Erstelle eine Konfusionsmatrix mit den wahren Werten und den Schätzungen
# Fit the model using the optimal hyperparameters
log_reg_final <- logistic_reg(penalty =0.0000000001, mixture =0)%>%
set_engine("glmnet")%>%
set_mode("classification")%>%
fit(y~., data = train)# Evaluate the model performance on the testing set
pred_class <- predict(log_reg_final,
new_data = test,
type ="class")
results <- test %>%
select(y)%>%
bind_cols(pred_class, pred_proba)# Create confusion matrix
conf_mat(results, truth = y,
estimate = .pred_class)Bereitgestellt von
Mit der Funktion precision() kannst du die Genauigkeit (positiver Vorhersagewert, d.h. die Anzahl der wahren Positiven geteilt durch die Anzahl der vorhergesagten Positiven) berechnen.
# A tibble: 1 × 3
.metric .estimator .estimate
<chr><chr><dbl>1 precision binary 0.914Bereitgestellt von
Auf ähnliche Weise kannst du mit der recall()-Funktion den Recall (die Sensitivität, also die Anzahl der echten Positiven geteilt durch die Anzahl der tatsächlichen Positiven) berechnen.
# A tibble: 1 × 3
.metric .estimator .estimate
<chr><chr><dbl>1 recall binary 0.982Bereitgestellt von
Wir wollen die Variablen verstehen, die die Entscheidung für ein Abonnement beeinflussen. In einem logistischen Regressionsszenario entscheiden die Koeffizienten darüber, wie empfindlich die Zielvariable auf die einzelnen Prädiktoren reagiert. Je höher der Wert der Koeffizienten, desto größer ist ihre Bedeutung. Sortiere die Variablen in absteigender Reihenfolge nach dem absoluten Wert ihrer Koeffizientenwerte und zeige nur die Koeffizienten mit einem absoluten Wert größer als 0,5 an.
coeff <- tidy(log_reg_final)%>%
arrange(desc(abs(estimate)))%>%
filter(abs(estimate)>0.5)Bereitgestellt von
# A tibble: 10 × 3
term estimate penalty
<chr><dbl><dbl>1(Intercept)-2.590.00000000012 poutcomesuccess 2.080.00000000013 monthmar 1.620.00000000014 monthoct 1.080.00000000015 monthsep 1.030.00000000016 contactunknown -1.010.00000000017 monthdec 0.8610.00000000018 monthjan -0.8200.00000000019 housingyes -0.5500.000000000110 monthnov -0.5170.0000000001Bereitgestellt von
Stelle die Bedeutung der Merkmale mit der Funktion ggplot() dar.
ggplot(coeff, aes(x = term, y = estimate, fill = term))+ geom_col()+ coord_flip()Bereitgestellt von
Bring es auf die nächste Stufe
Damit sind wir am Ende dieses Tutorials angelangt, das gezeigt hat, wie man mit dem Paket tidymodels ein logistisches Regressionsmodell trainiert und auswertet. Es wurde auch erklärt, wie man die Modellergebnisse interpretiert und wie man sie als Merkmalsbedeutung darstellt.
Gewinne Vertrauen in die OLS-Regression, indem du ihre theoretischen Grundlagen beherrschst. Erforsche, wie du einfache Implementierungen in Excel, R und Python durchführst.
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Die logistische Regression ist ein einfaches, aber leistungsstarkes Modell zur Vorhersage binärer Ergebnisse. Das heißt, ob etwas passieren wird oder nicht. Es ist eine Art Klassifizierungsmodell für überwachtes maschinelles Lernen.
Die logistische Regression wird in fast jeder Branche eingesetzt - im Marketing, im Gesundheitswesen, in den Sozialwissenschaften und in anderen Bereichen - und ist ein unverzichtbarer Bestandteil des Werkzeugkastens eines jeden Datenwissenschaftlers.
Um dieses Tutorial optimal nutzen zu können, brauchst du Grundkenntnisse in R. Außerdem ist es hilfreich, etwas über einen verwandten Modelltyp, die lineare Regression, zu wissen. Lies das Tutorial Lineare Regression in R, um mehr darüber zu erfahren.
Ein Überblick über die logistische Regression
Angenommen, du willst vorhersagen, ob heute ein sonniger Tag wird oder nicht. Es gibt zwei mögliche Ergebnisse: "sonnig" oder "nicht sonnig". Die Ergebnisvariable wird auch als "Zielvariable" oder "abhängige Variable" bezeichnet.
Es gibt viele Variablen, die das Ergebnis beeinflussen können, z. B. die "Temperatur am Vortag", der "Luftdruck" usw. Die Einflussvariablen werden als Merkmale, unabhängige Variablen oder Prädiktoren bezeichnet - alle diese Begriffe bedeuten das Gleiche.
Andere Beispiele sind, ob ein Kunde dein Produkt kaufen wird oder nicht, ob eine E-Mail Spam ist oder nicht, ob eine Transaktion betrügerisch ist oder nicht und ob ein Medikament einen Patienten heilen wird oder nicht.
Wie funktioniert die logistische Regression?
Die logistische Regression findet die bestmögliche Übereinstimmung zwischen der Prädiktor- und der Zielvariablen, um die Wahrscheinlichkeit vorherzusagen, dass die Zielvariable zu einer bestimmten Klasse/Kategorie gehört.
Die lineare Regression versucht, die beste gerade Linie zu finden, die das Ergebnis aus den Merkmalen vorhersagt. Sie bildet eine Gleichung wie
und nutzt die Optimierung, um die bestmöglichen Werte für Achsenabschnitt und Steigung zu finden.
Die logistische Regression funktioniert ähnlich, nur dass sie eine Regression auf die Wahrscheinlichkeiten des Ergebnisses in einer Kategorie durchführt. Sie verwendet eine Sigmoidfunktion (die kumulative Verteilungsfunktion der logistischen Verteilung), um die rechte Seite dieser Gleichung umzuformen.
Auch hier nutzt das Modell die Optimierung, um die bestmöglichen Werte für Achsenabschnitt und Steigung zu finden.
Da der Algorithmus für die logistische Regression der Gleichung für die lineare Regression sehr ähnlich ist, gehört er zu einer Familie von Modellen, die "verallgemeinerte lineare Modelle" genannt werden. Deshalb trägt die logistische Regression "Regression" in ihrem Namen, obwohl sie ein Klassifikationsmodell ist.
Die sigmoide Funktion ähnelt einer S-förmigen Kurve in der Abbildung unten. Er nimmt die reellen numerischen Eingangswerte und wandelt sie zwischen 0 und 1 um (indem er sie von beiden Seiten her verkleinert, d.h. die negativen Werte auf 0 und die sehr hohen positiven auf 1). Darüber hinaus ist die Abschneidegrenze der entscheidende Faktor, der die Ergebnisse in Kategorien oder Klassen einteilt, wenn er auf diese Wahrscheinlichkeiten angewendet wird.
Komplexe Konzepte lassen sich am besten verstehen, wenn sie anhand von Beispielen erklärt werden, also lass uns eine Analogie aufgreifen, um die Funktionsweise des LR-Algorithmus zu erfassen. Nehmen wir an, das LR-Modell hat die Aufgabe, eine betrügerische Transaktion zu identifizieren, indem es mehrere Betrugsindikatoren wie den Standort des Nutzers, den Kaufbetrag, die IP-Adresse usw. untersucht. Das Ziel ist es, die Wahrscheinlichkeit zu bestimmen, ob eine bestimmte Transaktion rechtmäßig oder betrügerisch ist - was die Zielvariable darstellt.
Das Modell gewichtet die Prädiktoren je nach ihrem Einfluss auf die Zielvariable und kombiniert sie, um die normalisierte Punktzahl oder Betrugswahrscheinlichkeit zu berechnen.
Der Datensatz
Wir verwenden den Datensatz einer Direktmarketing-Kampagne eines portugiesischen Bankinstituts, die Telefonanrufe nutzt. Die Kampagne zielt darauf ab, Abonnements für eine Bank-Festgeldanlage zu verkaufen, die durch die Variable y (Abonnement oder kein Abonnement) dargestellt wird. Ziel des logistischen Regressionsmodells ist es, anhand der Vorhersagevariablen, d.h. der Eigenschaften des Kunden, wie z.B. der demografischen Informationen, vorherzusagen, ob ein Kunde ein Abonnement kaufen würde oder nicht.
Das Datenwörterbuch für diesen Datensatz und viele andere nützliche Datensätze findest du auf der Website von Datacamp.
Variabel
Beschreibung
Details
Alter
Alter des Kunden
Job
Art der Tätigkeit
kategorisch: "admin.", "Arbeiter", "Unternehmer", "Hausangestellte", "Management", "Rentner", "Selbstständige", "Dienstleistungen", "Student", "Techniker", "Arbeitslose", "unbekannt"
marital
Familienstand
kategorisch: "geschieden", "verheiratet", "ledig", "unbekannt"; Hinweis: "geschieden" bedeutet geschieden oder verwitwet
Bildung
höchster Grad an Kunden
kategorisch: "basic.4y", "basic.6y", "basic.9y", "high.school", "illiterate", "professional.course", "university.degree", "unknown"
Standard
hat Kredit in Verzug?
kategorisch: "nein", "ja", "unbekannt"
Gehäuse
ein Wohnungsbaudarlehen hat?
kategorisch: "nein", "ja", "unbekannt"
Darlehen
ein persönliches Darlehen hat?
kategorisch: "nein", "ja", "unbekannt"
contact
Kontakt Kommunikationsart
kategorisch: "Mobiltelefon", "Telefon"
Monat
letzter Kontakt Monat des Jahres
categorical: "jan", "feb", "mar", ..., "nov", "dec"
day_of_week
letzter Kontakttag der Woche
kategorisch: "Mo", "Di", "Mi", "Do", "Fr"
Kampagne
Anzahl der Kontakte mit dem Kunden während dieser Kampagne
numerisch, beinhaltet den letzten Kontakt
pdays
Anzahl der Tage seit der letzten Kontaktaufnahme mit dem Kunden im Rahmen einer früheren Kampagne
numerisch; 999 bedeutet, dass der Kunde zuvor nicht kontaktiert wurde
vorherige
Anzahl der Kontakte, die vor dieser Kampagne und für diesen Kunden durchgeführt wurden
numerisch
poutcome
Ergebnis der vorherigen Marketingkampagne
categorical: "failure","nonexistent","success"
emp.var.rate
Veränderungsrate der Beschäftigung - vierteljährlicher Indikator
numerisch
cons.price.idx
Verbraucherpreisindex - monatlicher Indikator
numerisch
cons.conf.idx
Verbrauchervertrauensindex - monatlicher Indikator
numerisch
euribor3m
Euribor 3-Monats-Satz - Tagesindikator
numerisch
nr.beschäftigt
Anzahl der Beschäftigten - vierteljährlicher Indikator
numerisch
y
Hat der Kunde eine Termineinlage gezeichnet?
binär: "ja", "nein"
Logistische Regression Arbeitsablauf
Der gesamte Workflow des maschinellen Lernens wird in der Infografik A Beginner's Guide to The Machine Learning Workflow beschrieben. Hier konzentrieren wir uns auf die Schritte zur Datenvorbereitung und Modellierung. Wir werden uns insbesondere mit folgenden Themen beschäftigen:
Logistische Regression Pakete
In R gibt es zwei beliebte Workflows für die Modellierung der logistischen Regression: base-R und tidymodels.
Die Base-R Workflow-Modelle sind einfacher und enthalten Funktionen wie glm() und summary(), um das Modell anzupassen und eine Modellzusammenfassung zu erstellen.
Der tidymodels Workflow ermöglicht eine einfachere Verwaltung mehrerer Modelle und eine einheitliche Schnittstelle für die Arbeit mit verschiedenen Modelltypen.
In diesem Lernprogramm wird der tidymodels Workflow verwendet.
Visualisiere die Daten
Importiere das Paket tidymodels, indem du die Funktion library() aufrufst.
Der Datensatz liegt in einer CSV-Datei mit europäischer Formatierung vor (Kommas für Dezimalstellen und Semikolons für Trennzeichen). Wir lesen sie mit read_csv2() aus dem readr-Paket.
Wandle die Zielvariable y in eine Faktorvariable für die Modellierung um.
Stelle mit der Funktion ggplot() die Anzahl der einzelnen Berufe in Abhängigkeit von y dar.
Aufteilung der Daten
Wir teilen den Datensatz in einen Trainingsdatensatz für die Anpassung des Modells und einen Testdatensatz für die Evaluierung des Modells auf, um sicherzustellen, dass das so trainierte Modell auch auf einem ungesehenen Datensatz funktioniert.
Die Aufteilung der Daten in Trainings- und Testdaten kann mit der Funktion initial_split() und dem Attribut prop vorgenommen werden, das den Anteil der Trainingsdaten definiert.
Anpassen und Auswerten des Modells
Um das Modell zu erstellen, deklarierst du ein logistic_reg()-Modell. Hierfür werden Mischungs- und Strafargumente benötigt, die das Ausmaß der Regularisierung steuern. Ein Mischungswert von 1 steht für ein Lasso-Modell und 0 für eine Ridge-Regression. Es sind auch Werte dazwischen erlaubt. Das Strafargument gibt die Stärke der Regularisierung an.
Beachte, dass du "doppelte" Fließkommazahlen an die Mischung und die Strafe übergeben musst
Setze die "Engine" (die Backend-Software, mit der die Berechnungen durchgeführt werden) mit set_engine(). Es gibt mehrere Möglichkeiten: Die Standard-Engine ist "glm", die eine klassische logistische Regression durchführt. Diese Methode wird oft von Statistikern bevorzugt, weil du p-Werte für jeden Koeffizienten erhältst, was es einfacher macht, die Bedeutung der einzelnen Koeffizienten zu verstehen.
Hier verwenden wir die Engine "glmnet". Diese Methode wird von Wissenschaftlern im Bereich des maschinellen Lernens bevorzugt, weil sie eine Regularisierung ermöglicht, die die Vorhersagen verbessern kann, insbesondere wenn du viele Merkmale hast. (In Python ist das scikit-learn-Paket standardmäßig so eingestellt, dass eine gewisse Regularisierung in der logistischen Regression enthalten ist).
Rufe die fit()-Methode auf, um das Modell anhand der im vorherigen Schritt erstellten Trainingsdaten zu trainieren. Das erste Argument für diese Funktion ist eine Formel. Auf der linken Seite der Formel verwendest du die Zielvariable (in diesem Fall y). Auf der rechten Seite kannst du jede beliebige Funktion einfügen, die du möchtest. Ein Punkt bedeutet: "Verwende alle Variablen, die nicht auf der linken Seite der Formel geschrieben wurden. Weitere Informationen zum Schreiben von Formeln findest du im R Formula Tutorial.
Die Ausgabe ist unten dargestellt, wobei die Spalte Schätzung die Koeffizienten des Prädiktors darstellt.
Vorhersagen treffen
Mache Vorhersagen für die Testdaten mit der Funktion predict(). Du hast die Wahl der Art der Vorhersagen.
Bewerte das Modell mit der Funktion accuracy() mit dem Wahrheitsargument y und schätze den Wert des Arguments als die Vorhersagen aus dem vorherigen Schritt.
Hyperparameter-Abstimmung
Anstatt den Argumenten für Mischung und Strafe (den "Hyperparametern") bestimmte Werte zu geben, kannst du die Vorhersagekraft des Modells optimieren, indem du es abstimmst.
Die Idee ist, dass du das Modell viele Male mit verschiedenen Werten der Hyperparameter durchführst und siehst, welcher Wert die besten Vorhersagen liefert.
Weitere Bewertungsmetriken
Verwendung der besten Hyperparameter:
Mit der Funktion precision() kannst du die Genauigkeit (positiver Vorhersagewert, d.h. die Anzahl der wahren Positiven geteilt durch die Anzahl der vorhergesagten Positiven) berechnen.
Auf ähnliche Weise kannst du mit der recall()-Funktion den Recall (die Sensitivität, also die Anzahl der echten Positiven geteilt durch die Anzahl der tatsächlichen Positiven) berechnen.
Wir wollen die Variablen verstehen, die die Entscheidung für ein Abonnement beeinflussen. In einem logistischen Regressionsszenario entscheiden die Koeffizienten darüber, wie empfindlich die Zielvariable auf die einzelnen Prädiktoren reagiert. Je höher der Wert der Koeffizienten, desto größer ist ihre Bedeutung. Sortiere die Variablen in absteigender Reihenfolge nach dem absoluten Wert ihrer Koeffizientenwerte und zeige nur die Koeffizienten mit einem absoluten Wert größer als 0,5 an.
Stelle die Bedeutung der Merkmale mit der Funktion ggplot() dar.
Bring es auf die nächste Stufe
Damit sind wir am Ende dieses Tutorials angelangt, das gezeigt hat, wie man mit dem Paket tidymodels ein logistisches Regressionsmodell trainiert und auswertet. Es wurde auch erklärt, wie man die Modellergebnisse interpretiert und wie man sie als Merkmalsbedeutung darstellt.
Wenn du mehr über die Modellierung von KI-Modellen mit Tidymodels erfahren möchtest, schau dir den Kurs Modellierung mit Tidymodels in R an. Für die Modellierung mit dem Base-R-Ansatz, schau dir die Kurse Einführung in die Regression in R, Intermediate Regression in R und Generalized Linear Models in R an.