Erfahren Sie alles über die Logistic Regression: Wie sie sich von der linearen Regression unterscheidet, wie Sie diese Modelle in R mit der Funktion glm() anpassen und auswerten und mehr!
Die Logistic Regression ist ein einfaches, aber leistungsfähiges Modell zur Vorhersage binärer Ergebnisse. Das heißt, ob etwas passieren wird oder nicht. Es handelt sich um eine Art Klassifizierungsmodell für überwachtes maschinelles Lernen.
Die Logistic Regression wird in nahezu allen Branchen – Marketing, Gesundheitswesen, Sozialwissenschaften und anderen – verwendet und ist ein wesentlicher Bestandteil des Werkzeugkastens jedes Datenwissenschaftlers.
Um dieses Tutorial optimal nutzen zu können, benötigen Sie grundlegende Kenntnisse in R. Außerdem ist es hilfreich, einen verwandten Modelltyp zu kennen: die lineare Regression. Lesen Sie das Tutorial „Lineare Regression in R“, um mehr darüber zu erfahren.
Ein Überblick über die Logistic Regression
Angenommen, Sie möchten 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, wie z. B. „Temperatur am Vortag“, „Luftdruck“ usw. Die Einflussvariablen werden als Merkmale, unabhängige Variablen oder Prädiktoren bezeichnet – alle diese Begriffe bedeuten dasselbe.
Weitere Beispiele sind, ob ein Kunde Ihr Produkt kauft oder nicht, ob es sich bei einer E-Mail um Spam handelt oder nicht, ob eine Transaktion betrügerisch ist oder nicht und ob ein Medikament einen Patienten heilen wird oder nicht.
Wie funktioniert die Logistic Regression?
Die Logistic Regression findet die bestmögliche Übereinstimmung zwischen den Prädiktor- und Zielvariablen, um die Wahrscheinlichkeit vorherzusagen, dass die Zielvariable zu einer bezeichneten Klasse/Kategorie gehört.
Die lineare Regression versucht, die beste Gerade zu finden, die das Ergebnis der Merkmale vorhersagt. Sie bildet eine Gleichung wie
und versucht durch Optimierung, die bestmöglichen Werte für Achsenabschnitt und Steigung zu finden.
Die Logistic Regression funktioniert ähnlich, führt jedoch eine Regression auf die Wahrscheinlichkeiten aus, dass das Ergebnis eine Kategorie ist. Sie verwendet eine Sigmoidfunktion (die kumulative Verteilungsfunktion der logistischen Verteilung), um die rechte Seite dieser Gleichung zu transformieren.
Auch hier versucht das Modell durch Optimierung, die bestmöglichen Werte für Achsenabschnitt und Steigung zu finden.
Da der Algorithmus für die Logistic Regression der Gleichung für die lineare Regression sehr ähnlich ist, ist er Teil einer Familie von Modellen, die als „verallgemeinerte lineare Modelle“ bezeichnet werden. Aus diesem Grund trägt die Logistic Regression „Regression“ im Namen, obwohl es sich um ein Klassifizierungsmodell handelt.
Die Sigmoidfunktion ähnelt im Bild unten einer S-förmigen Kurve. Sie nimmt die reellen Eingabewerte und konvertiert sie zwischen 0 und 1 (indem sie von beiden Seiten schrumpft, d. h. die negativen Werte auf 0 und sehr hohe positive Werte auf 1). Darüber hinaus ist der Cut-off-Schwellenwert der übergeordnete entscheidende Faktor, der die Ausgabe in Kategorien oder Klassen einteilt, wenn er auf diese Wahrscheinlichkeiten angewendet wird.
Die komplexen Konzepte lassen sich am besten anhand von Beispielen verstehen. Wir wollen uns also eine Analogie zunutze machen, um die Funktionsweise des LR-Algorithmus zu veranschaulichen. Nehmen wir an, das LR-Modell soll eine betrügerische Transaktion identifizieren, indem es mehrere Betrugsindikatoren wie den Standort des Benutzers, den Kaufbetrag, die IP-Adresse usw. betrachtet. Ziel ist es, die Wahrscheinlichkeit zu bestimmen, ob eine bestimmte Transaktion legitim oder betrügerisch ist – was die Zielvariable darstellt.
Das Modell weist den Prädiktoren Gewichte zu, basierend darauf, wie sie sich auf die Zielvariable auswirken, und kombiniert sie, um den normalisierten Score oder die Betrugswahrscheinlichkeit zu berechnen.
Der Datensatz
Wir würden einen Datensatz einer Direktmarketingkampagne eines portugiesischen Bankinstituts verwenden, das Telefonanrufe verwendet. Die Kampagne zielt darauf ab, Abonnements für ein Banktermingeld zu verkaufen, das durch die Variable y (Abonnement oder kein Abonnement) dargestellt wird. Das Ziel des Logistic Regression smodells besteht darin, vorherzusagen, ob ein Kunde ein Abonnement kaufen würde oder nicht, basierend auf den Prädiktorvariablen, d. h. Attributen des Kunden, wie z. B. demografischen Informationen.
Das Datenwörterbuch für diesen Datensatz und viele andere nützliche Datensätze finden Sie auf der Website von Datacamp.
Variable | Beschreibung | Einzelheiten |
Alter | Alter des Kunden | |
Arbeit | Berufsart | Kategorisch: “Verwaltung”, “Arbeiter”, “Unternehmer”, “Hausmädchen”, “Management”, “Rentner”, “Selbständiger”, “Dienstleister”, “Student”, “Techniker”, “Arbeitslos”, “Unbekannt” |
Ehe | Familienstand | kategorisch: „geschieden“, „verheiratet“, „ledig“, „unbekannt“; Hinweis: „geschieden“ bedeutet geschieden oder verwitwet |
Ausbildung | höchste Kundenzufriedenheit | kategorisch: „grundlegend.4y“, „grundlegend.6y“, „grundlegend.9y“, „Gymnasium“, „Analphabet“, „Berufsausbildung“, „Universitätsabschluss“, „unbekannt“ |
Standard | ist der Kredit im Verzug? | kategorisch: “nein”, “ja”, “unbekannt” |
Gehäuse | hat ein Wohnungsbaudarlehen? | kategorisch: “nein”, “ja”, “unbekannt” |
Darlehen | hat einen Privatkredit? | kategorisch: “nein”, “ja”, “unbekannt” |
Kontakt | Kontaktkommunikationstyp | kategorisch: “Mobiltelefon”, “Telefon” |
Monat | letzter Kontakt Monat Jahr | kategorisch: “jan”, “feb”, “mar”, …, “nov”, “dec” |
Wochentag | letzter Kontakttag der Woche | kategorisch: „Mo“, „Di“, „Mi“, „Do“, „Fr“ |
Kampagne | Anzahl der Kundenkontakte während dieser Kampagne | numerisch, inkl. letztem Kontakt |
pTage | Anzahl der Tage seit der letzten Kontaktaufnahme mit dem Kunden im Rahmen einer früheren Kampagne | numerisch; 999 bedeutet, dass der Kunde nicht zuvor kontaktiert wurde |
vorherige | Anzahl der vor dieser Kampagne und für diesen Kunden durchgeführten Kontakte | Numerisch |
Schmollmund | Ergebnis der vorherigen Marketingkampagne | kategorisch: „Misserfolg“, „nicht vorhanden“, „Erfolg“ |
emp.var.rate | Beschäftigungsvariationsrate – Vierteljahresindikator | Numerisch |
Nachteile.Preis.idx | Verbraucherpreisindex – monatlicher Indikator | Numerisch |
cons.conf.idx | Verbrauchervertrauensindex – monatlicher Indikator | Numerisch |
euribor3m | 3-Monats-Euribor-Satz – Tagesindikator | Numerisch |
Anzahl der Beschäftigten | Anzahl der Beschäftigten – Quartalsindikator | Numerisch |
j | hat der Kunde ein Festgeldkonto gezeichnet? | binär: “ja”, “nein” |
Workflow für die Logistic Regression
Der gesamte Workflow des maschinellen Lernens wird in der Infografik „Ein Leitfaden für Anfänger zum Workflow des maschinellen Lernens“ behandelt . Hier konzentrieren wir uns auf die Schritte zur Datenaufbereitung und Modellierung. Insbesondere behandeln wir:
- Aufteilung der Daten in Trainings- und Testsätze
- Anpassen (Trainieren) des Modells
- Vorhersagen treffen
- Bewertung der Modellleistung
- Hyperparameter-Optimierung
Pakete zur Logistic Regression
In R gibt es zwei beliebte Workflows zur Modellierung der Logistic 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 generieren.
Der tidymodels-Workflow ermöglicht eine einfachere Verwaltung mehrerer Modelle und eine konsistente Schnittstelle für die Arbeit mit verschiedenen Modelltypen.
In diesem Tutorial wird der Tidymodels-Workflow verwendet.
Visualisieren Sie die Daten
Importieren Sie das Paket tidymodels, indem Sie die Funktion library() aufrufen.
Der Datensatz befindet sich in einer CSV-Datei mit europäischer Formatierung (Kommas als Dezimalstellen und Semikolons als Trennzeichen). Wir lesen ihn mit read_csv2() aus dem readr-Paket.
Konvertieren Sie die Zielvariable y in eine Faktorvariable zur Modellierung.
Stellen Sie mit der Funktion ggplot() die Anzahl der Berufsausübungen in Bezug auf y grafisch dar.
Aufteilen der Daten
Teilen wir den Datensatz in einen Trainingssatz zum Anpassen des Modells und einen Testsatz zur Modellbewertung auf, um sicherzustellen, dass das so trainierte Modell mit einem unbekannten Datensatz funktioniert.
Das Aufteilen der Daten in Trainings- und Testdatensätze kann mit der Funktion initial_split() und dem Prop-Attribut erfolgen, das den Anteil der Trainingsdaten definiert.
Anpassen und Auswerten des Modells
Um das Modell zu erstellen, deklarieren Sie ein logistic_reg()-Modell. Dies erfordert Mischungs- und Strafargumente, die den Grad der Regularisierung steuern. Ein Mischungswert von 1 bezeichnet ein Lasso-Modell und 0 bezeichnet eine Ridge-Regression. Werte dazwischen sind ebenfalls zulässig. Das Strafargument bezeichnet die Stärke der Regularisierung.
Beachten Sie, dass Sie “doppelte” Gleitkommazahlen an die Mischung und Strafe übergeben müssen
Stellen Sie die „Engine“ (die Backend-Software, die zur Ausführung der Berechnungen verwendet wird) mit set_engine() ein. Es gibt mehrere Auswahlmöglichkeiten: Die Standard-Engine ist „glm“, die eine klassische Logistic Regression durchführt. Dies wird von Statistikern oft bevorzugt, da Sie für jeden Koeffizienten p-Werte erhalten, wodurch die Bedeutung jedes Koeffizienten leichter zu verstehen ist.
Hier verwenden wir die „glmnet“-Engine. Diese wird von Wissenschaftlern des maschinellen Lernens bevorzugt, da sie eine Regularisierung ermöglicht, die die Vorhersagen verbessern kann, insbesondere wenn Sie viele Features haben. (In Python schließt das Paket scikit-learn standardmäßig eine gewisse Regularisierung in die Logistic Regression ein.)
Rufen Sie die Methode fit() auf, um das Modell mit den im vorherigen Schritt erstellten Trainingsdaten zu trainieren. Als erstes Argument wird eine Formel verwendet. Auf der linken Seite der Formel verwenden Sie die Zielvariable (in diesem Fall y). Auf der rechten Seite können Sie beliebige Features einfügen. Ein Punkt bedeutet „verwenden Sie alle Variablen, die nicht auf der linken Seite der Formel stehen“. Weitere Informationen zum Schreiben von Formeln finden Sie im R-Formel-Tutorial .
Die Ausgabe wird unten angezeigt, wobei die Schätzspalte die Koeffizienten des Prädiktors darstellt.
Vorhersagen treffen
Machen Sie mit der Funktion predict() Vorhersagen zu den Testdaten. Sie können die Art der Vorhersagen wählen.
- Typ = „Klasse“ 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 wahrscheinlich ein Festgeldkonto zeichnen wird oder nicht.
- Typ = „prob“ gibt die Wahrscheinlichkeit jedes Zielwerts für jede Beobachtung zurück. Hier wird die Wahrscheinlichkeit für „Ja“ und die Wahrscheinlichkeit für „Nein“ zurückgegeben (die sich für jede Beobachtung zu eins addieren).
Bewerten Sie das Modell mithilfe der Funktion accuracy() mit dem Wahrheitsargument y und schätzen Sie, dass der Argumentwert den Vorhersagen aus dem vorherigen Schritt entspricht mlops.
Hyperparameter-Tuning
Anstatt bestimmte Werte an die Mischungs- und Strafargumente (die „Hyperparameter“) zu übergeben, können Sie die Vorhersagekraft des Modells durch Feinabstimmung optimieren.
Die Idee besteht darin, das Modell viele Male mit unterschiedlichen Werten der Hyperparameter auszuführen und zu sehen, welcher die besten Vorhersagen liefert.
- Legen Sie in der Funktion logistic_reg() die Mischungs- und Strafargumente für einen Aufruf von tune() fest.
- Verwenden Sie die Funktion grid_regular(), um ein Raster mit möglichen Werten für Mischung und Strafe zu definieren.
- Die Funktion workflow() erstellt ein Objekt zum Speichern der Modelldetails, die bei häufigen Ausführungen benötigt werden.
- Wählen Sie das beste Modell mit der Funktion select_best() aus. Sie können aus einer Auswahl von Metriken auswählen, die die „beste“ definieren. Hier verwenden wir die Metrik „Receiver Operating Characteristic Area Under the Curve“ (ROC AUC).
Weitere Bewertungsmetriken
Verwenden der besten Hyperparameter:
- Lassen Sie uns ein logistic regression modell trainieren
- Verwenden Sie es, um Vorhersagen für Testsätze zu generieren
- Erstellen Sie eine Konfusionsmatrix mit den wahren Werten und den Schätzungen
Sie können die Präzision (positiver Vorhersagewert, die Anzahl der echten positiven Ergebnisse geteilt durch die Anzahl der vorhergesagten positiven Ergebnisse) mit der Funktion precision() berechnen.
In ähnlicher Weise können Sie den Rückruf (die Sensitivität, die Anzahl der echten positiven Ergebnisse geteilt durch die Anzahl der tatsächlichen positiven Ergebnisse) mit der Funktion recall() berechnen.
Lassen Sie uns die Variablen verstehen, die die Kaufentscheidung für ein Abonnement beeinflussen. In einem Szenario der Logistic Regression entscheiden die Koeffizienten, wie empfindlich die Zielvariable auf die einzelnen Prädiktoren reagiert. Je höher der Wert der Koeffizienten, desto höher ist ihre Bedeutung. Sortieren Sie die Variablen in absteigender Reihenfolge des absoluten Werts ihrer Koeffizientenwerte und zeigen Sie nur die Koeffizienten mit einem absoluten Wert größer als 0,5 an.
Stellen Sie die Merkmalswichtigkeit mit der Funktion ggplot() grafisch dar.
Es auf die nächste Stufe bringen
Damit sind wir am Ende dieses Tutorials angelangt, das gezeigt hat, wie man ein logistic regression modell mit dem Paket tidymodels trainiert und auswertet. Außerdem wurde erläutert, wie man die Modellergebnisse interpretiert und sie als Merkmalswichtigkeit darstellt.
Wenn Sie mehr über die Modellierung von KI-Modellen mit tidymodels erfahren möchten, sehen Sie sich den Kurs zur Modellierung mit tidymodels in R an . Informationen zur Modellierung mit dem Base-R-Ansatz finden Sie in den Kursen Einführung in die Regression in R , Fortgeschrittene Regression in R und Verallgemeinerte lineare Modelle in R.