Regresja logistyczna (alias regresja logitowa lub model logitowy) została opracowana przez statystyka Davida Coxa w 1958 roku i może być modelem regresji, w którym zmienna odpowiedzi Y jest kategoryczna. Regresja logistyczna pozwala na oszacowanie prawdopodobieństwa odpowiedzi kategorycznej obsługiwanej przez jedną lub więcej zmiennych predykcyjnych (X). Pozwala ona wspomnieć, że obecność predykatora zwiększa (lub zmniejsza) prawdopodobieństwo danego wyniku o wybrany procent. Ten tutorial obejmuje przypadek, gdy Y jest binarne – to znaczy, że może przyjmować tylko dwie wartości, “0” i “1”, które reprezentują takie wyniki jak: zaliczenie/nie zaliczenie, wygrana/przegrana, żywy/umarły lub zdrowy/chory. Przypadki, w których zmienna ma dość dwie kategorie wyników, mogą być również analizowane za pomocą wielomianowej regresji logistycznej lub, jeśli wiele kategorii jest uporządkowanych, za pomocą zwykłej regresji logistycznej. Jednakże, analiza dyskryminacyjna stała się ulubioną metodą klasyfikacji wielomianowej, więc nasz następny tutorial będzie specjalizował się w tej technice dla tych przypadków.

Wymagania dotyczące replikacji

Jest to często symulowany zbiór danych zawierający informacje o dziesięciu tysiącach klientów, takie jak: czy klient nie wywiązał się ze zobowiązań, czy też może być studentem, typowe saldo przenoszone przez klienta, a tym samym jego dochody. Będziemy również korzystać z kilku pakietów, które zapewniają manipulację danymi, wizualizację, funkcje modelowania potoków oraz funkcje porządkowania wyników modelu.

# Pakiety

biblioteka(porządek) # manipulacja danymi i wizualizacja

biblioteka(modelr) # zapewnia łatwe funkcje modelowania rurociągów

biblioteka(miotła) # pomaga uporządkować wyjścia modelu

# Load data

(domyślnie <- as_tibble(ISLR::Domyślnie))

## # A tibble: 10,000 × 4

## default student balance income

## <fctr> <fctr> <dbl> <dbl>

## 1 nr 729.5265 44361.625

## 2 Nie Tak 817.1804 12106.135

## 3 nr 1073.5492 31767.139

## 4 nr 529.2506 35704.494

## 5 nr 785.6559 38463.496

## 6 Nie Tak 919.5885 7491.559

## 7 nr 825.5133 24905.227

## 8 Nie Tak 808.6675 17600.451

## 9 nr 1161.0579 37468.529

## 10 No No 0.0000 29275.268

## # …z 9,990 więcej rzędów

Dlaczego regres logistyczny

Regresja liniowa nie jest właściwa w przypadku odpowiedzi jakościowej. Dlaczego nie? Załóżmy, że próbujemy przewidzieć stan zdrowia pacjentki na ostrym dyżurze na podstawie wyobrażenia o jej objawach. w tym uproszczonym przykładzie istnieją trzy możliwe diagnozy: udar mózgu, przedawkowanie leków i drgawki. Możemy rozważyć zakodowanie tych wartości jako zmiennej odpowiedzi ilościowej, Y , w następujący sposób:

Y=⎧⎨⎩1,jeśli udar mózgu;2,jeśli przedawkowanie leków;3,jeśli napad padaczkowy.

Używając tego kodowania, metoda najmniejszych kwadratów może nie pasować do modelu regresji prostoliniowej do przewidywania Y na idei grupy predyktorów

Niestety, to kodowanie implikuje uporządkowanie wyników, umieszczanie przedawkowania leków pomiędzy udarem a drgawkami, oraz podkreślanie, że różnica pomiędzy udarem a przedawkowaniem leków jest taka sama, ponieważ różnica pomiędzy przedawkowaniem a drgawkami. W praktyce nie ma żadnego szczególnego powodu, aby tak było. jako przykład można by wybrać równie rozsądne kodowanie,

Y=⎧⎨⎩1,jeśli napad padaczkowy;2,jeśli udar;3,jeśli przedawkowanie narkotyków.

co sugerowałoby zupełnie inny związek pomiędzy tymi trzema warunkami. Każde z tych oznaczeń dawałoby fundamentalnie różne modele liniowe, które ostatecznie mogłyby powodować różne zestawy przewidywań w obserwacjach testowych.

Bardziej istotne dla naszych danych, jeśli spróbujemy zaklasyfikować klienta jako defaultera wysokiego lub niskiego ryzyka, możemy użyć regresji liniowej; jednakże, lewy rysunek poniżej ilustruje, jak regresja prostoliniowa przewidywałaby prawdopodobieństwo niestosowania się. Niestety, dla sald na granicy zera przewidujemy ujemne prawdopodobieństwo niewykonania zobowiązania; jeśli mielibyśmy przewidzieć dla bardzo dużych sald, moglibyśmy otrzymać wartości większe niż 1. Te przewidywania nie są rozsądne, ponieważ w rzeczywistości prawdopodobieństwo niewykonania zobowiązania, bez względu na saldo mastercard, musi spaść między 0 a 1.

Aby uniknąć tego problemu, musimy modelować p(X) wykorzystując funkcję, która dostarcza wyjścia od 0 do 1 dla wszystkich wartości X. Wiele funkcji spełnia ten opis. W regresji logistycznej używamy funkcji logistycznej, która jest zdefiniowana w par. 1 i zilustrowana na prawym rysunku powyżej.

p(X)=eβ0+β1X1+eβ0+β1X

Przygotowywanie naszych danych

Podobnie jak w przypadku samouczka dotyczącego regresji, podzielimy nasze dane na trening (60%) i testowanie (40%) zestawów danych, aby ocenić, jak dobrze nasz model radzi sobie z danymi spoza próbki.

set.seed(123)

próbka <- próbka(c(TRUE, FALSE), nrow(default), replace = T, prob = c(0.6,0.4))

pociąg <- default[próbka, ]

test <- default[!sample, ]

Prosta regresja logistyczna

Dopasujemy model regresji logistycznej tak, aby przewidzieć prawdopodobieństwo niewywiązania się klienta z zobowiązań obsługiwanego przez niego typowego salda. Funkcja glm pasuje do uogólnionych modeli liniowych, kategorii modeli, które posiadają regresję logistyczną. Składnia funkcji glm jest analogiczna do składni lm, z tą różnicą, że musimy przekazać rodzinę argumentów = dwumian, aby poinformować R o uruchomieniu regresji logistycznej zamiast innego rodzaju uogólnionego modelu liniowego.

model1 <- glm(default ~ balance, family = “binomial”, data = train)

W tle glm, używa maksymalnego prawdopodobieństwa, aby dopasować się do modelu. zasadnicza intuicja stojąca za użyciem maksymalnego prawdopodobieństwa, aby dopasować się do modelu regresji logistycznej jest następująca: szukamy szacunków dla

Tak więc przewidywane prawdopodobieństwo ^p(xi) wartości domyślnej dla każdego osobnika, przy użyciu równania 1, odpowiada jak najwierniej obserwowanemu statusowi domyślnemu osobnika. Innymi słowy, staramy się znaleźć β0β^0 i ^β1, które podłączając te oszacowania do modelu dla p(X), podanego w równiku 1, dają odmianę na skraju jednego dla wszystkich osobników, które nie spełniły warunków domyślnych, i odmianę na skraju zera dla wszystkich osobników, które nie spełniły warunków. Intuicja ta jest często sformalizowana za pomocą równania matematycznego zwanego funkcją prawdopodobieństwa: ℓ(β0,β1)=∏i:yi=1p(xi)∏i′:y′i=0(1-p(x′i)).

Oszacowania β0β^0 i ^β1 zostały wybrane w celu zmaksymalizowania tej funkcji prawdopodobieństwa. Maksymalne szanse to naprawdę ogólne podejście, które nie pasuje do wielu nieliniowych modeli, które będziemy badać w przyszłych tutorialach. Jakim wynikiem może być zilustrowana poniżej krzywa prawdopodobieństwa w kształcie litery S (zauważ, że aby wykreślić linię dopasowania regresji logistycznej, chcielibyśmy przekonwertować naszą zmienną odpowiedzi na [0,1] kodowaną binarnie zmienną).

domyślnie %>%

mutate(prob = ifelse(default == “Tak”, 1, 0)) %> %

ggplot(aes(balans, probówka)) +

geom_point(alfa = .15) +

geom_smooth(method = “glm”, method.args = list(family = “binomial”)) +

ggtitle(“Logistic regression model fit”) +

xlab(“Saldo”) +

ylab(“Probability of Default”)

Podobnie jak w przypadku regresji prostoliniowej, będziemy oceniać model za pomocą podsumowania lub spojrzenia. Zauważ, że format wyjściowy współczynnika jest analogiczny do tego, jaki widzieliśmy w przypadku regresji liniowej, jednak szczegóły dotyczące dopasowania na skalnym dnie podsumowania są różne. Zajmiemy się tym później, ale zwróć uwagę, że po prostu widzisz słowo odchylenie. Odchylenie może być nalogiem do sumy obliczeń kwadratów w regresji prostoliniowej i jest miarą braku dopasowania informacji podczas modelu regresji logistycznej. Odchylenie zerowe reprezentuje różnicę pomiędzy modelem z jedynie przechwyceniem (co oznacza “brak predykatorów”) a modelem nasyconym (modelem z teoretycznie idealnym dopasowaniem). Celem jest, aby odchylenie modelu (odnotowane jako odchylenie resztowe) było mniejsze; mniejsze wartości wskazują na lepsze dopasowanie. w tym względzie model zerowy stanowi punkt odniesienia, na którym można dopasować modele predykcyjne. podsumowanie(model1)

##

## Call:

## glm(wzór = domyślny ~ saldo, rodzina = “dwumian”, dane = pociąg)

##

## Odchylenie Resztki:

## Min 1Q Mediana 3Q Max

## -2.2905 -0.1395 -0.0528 -0.0189 3.3346

##

## Coefficients:

## Szacunkowa wartość Std. Błąd z wartością Pr(>|z|)

## (Intercept) -1.101e+01 4.887e-01 -22.52 <2e-16 ***

## balance 5.669e-03 2.949e-04 19.22 <2e-16 ***

## —

## Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1

##

## (Parametr dyspersji dla rodziny dwumianowych przyjmuje się jako 1)

##

## Null deviance: 1723.03 on 6046 degrees of freedom

## Resztka odchylenia: 908.69 na 6045 stopniach swobody

## AIC: 912.69

##

## Number of Fisher Scoring iterations: 8

Współczynniki oceny

Poniższa tabela przedstawia oszacowania współczynników i związane z nimi informacje, które wynikają z dopasowania modelu regresji logistycznej w celu przewidywania prawdopodobieństwa wystąpienia wartości domyślnej = Tak przy użyciu salda. Należy pamiętać, że oszacowania współczynników na podstawie regresji logistycznej charakteryzują związek pomiędzy zmienną predykator i zmienną odpowiedzi w skali log-odds (więcej szczegółów w rozdziale 3 ISLR1). Widzimy więc, że ^β1=0,0057β^1=0,0057 ; oznacza to, że wzrost równowagi jest związany ze wzrostem w granicach prawdopodobieństwa domyślnego. Dokładnie rzecz ujmując, wzrost salda o jedną jednostkę jest związany ze wzrostem o 0,0057 jednostek w obrębie dziennika kursów domyślnych.

tidy(model1)

## term estimate std.error statistic p.value

## 1 (przechwytywanie) -11.006277528 0.488739437 -22.51972 2.660162e-112

## 2 saldo 0,005668817 0,000294946 19,21985 2,525157e-82

Współczynnik równowagi możemy dalej interpretować jako – dla każdego dolarowego wzrostu miesięcznego salda przenoszonego przez klienta wzrasta o element 1,0057.

exp(coef(model1))

## (Przechwytywanie) równowaga

## 1.659718e-05 1.005685e+00

Na przykład, będziemy mierzyć odstępy arogancji i dokładność oszacowań współczynników, obliczając ich standardowe błędy. na przykład, β1β^1 ma wartość p- wartość < 2e-16 cechy p- wartość < 2e-16 sugerujące statystycznie istotną zależność pomiędzy noszoną równowagą, a tym samym prawdopodobieństwem niewywiązania się z zobowiązań. wykorzystamy również błędy jakości do wymuszenia odstępów ufności, tak jak to zrobiliśmy w poradniku regresji prostoliniowej:

confint(model1)

## 2.5 % 97.5 %

## (przechwytywanie) -12.007610373 -10.089360652

## balance 0.005111835 0.006269411

Tworzenie przepowiedni

Po oszacowaniu współczynników, łatwo jest obliczyć prawdopodobieństwo niewypłacalności dla danego salda mastercard. Matematycznie, używając oszacowań współczynników z naszego modelu przewidujemy, że domyślne prawdopodobieństwo dla osoby prywatnej z saldem 1000$ jest mniejsze niż 0,5%.

^p(X)=e^β0+^β1X1+e^β0+^β1X=e-11.0063+0.0057×10001+e-11.0063+0.0057×1000=0.004785(3)

Za pomocą funkcji przewidywania możemy przewidzieć prawdopodobieństwo wystąpienia błędu w R (należy dołączyć typ = “odpowiedź”). Tutaj porównujemy prawdopodobieństwo domyślnego ustawienia obsługiwanych sald $1000 i $2000. Jak zobaczysz, ponieważ saldo przesuwa się z $1000 do $2000, prawdopodobieństwo niewywiązania się z płatności wzrasta znacząco, z 0,5% do 58%!

Można również użyć jakościowych predykatorów z modelem regresji logistycznej. Jako przykład, dopasujemy model, który wykorzystuje zmienną naukową.

Współczynnik odniesiony do studenta = Tak jest dodatni, a zatem związana z nim wartość p jest statystycznie istotna. oznacza to, że studenci mają zazwyczaj wyższe prawdopodobieństwo domyślne niż nie studenci. W rzeczywistości model ten sugeruje, że student ma prawie dwa razy większe prawdopodobieństwo niewykonania zobowiązania niż osoba nie będąca studentem. Jednak w następnej sekcji zobaczymy dlaczego.

Wielokrotna regresja logistyczna

Możemy również rozszerzyć nasz model, jak widać na wykresie 1, aby przewidzieć odpowiedź binarną przy użyciu wielu predyktorów, gdzie X=(X1,…,Xp)X=(X1,…,Xp) są predyktorami p:

p(X)=eβ0+β1X+⋯+βpXp1+eβ0+β1X+⋯+βpXp X

Zróbmy pług do przodu i dopasujmy model, który przewiduje prawdopodobieństwo niewywiązania się ze zobowiązań, wspiera równowagę, dochody (w tysiącach dolarów) i zmienne statusu studenta. jest tu zaskakujący wynik. Wartości p związane z bilansem i statusem studenta=Tak są bardzo małe, co wskazuje, że każda z tych zmiennych jest związana z prawdopodobieństwem niewykonania zobowiązania. Jednakże, współczynnik dla zmiennej ucznia jest ujemny, co wskazuje, że studenci są mniej skłonni do domyślności niż nie studenci. Natomiast współczynnik dla zmiennej “uczeń” w modelu 2, gdzie przewidywaliśmy prawdopodobieństwo domyślności tylko na podstawie statusu studenta, wskazywał, że studenci mają większe prawdopodobieństwo domyślności. Co daje?

model3 <- glm(domyślnie ~ saldo + dochód + student, rodzina = “dwumian”, dane = pociąg)

czysty (model3)

## term estimate std.error statistic p.value

## 1 (przechwytywanie) -1.090704e+01 6.480739e-01 -16.8299277 1.472817e-63

## 2 saldo 5.907134e-03 3.102425e-04 19.0403764 7.895817e-81

## 3 dochody -5.012701e-06 1.078617e-05 -0.4647343 6.421217e-01

## 4 student Yes -8.094789e-01 3.133150e-01 -2.5835947 9.777661e-03

Dowodem na tę rozbieżność jest panel po prawej stronie poniższego rysunku. Zmienne student i równowaga są skorelowane. Studenci mają tendencję do przenoszenia wyższych poziomów zadłużenia, co jest kolejno związane z wyższym prawdopodobieństwem niewywiązania się ze zobowiązań. Innymi słowy, studenci mają większe szanse na posiadanie dużych sald z kartami mistrzowskimi, co, jak wszyscy wiemy z lewego panelu poniższego rysunku, jest związane z wysokim poziomem zadłużenia. Tak więc, chociaż studenci indywidualni z danym saldem karty mastercardowej będą mieli mniejsze prawdopodobieństwo braku karty niż studenci nieposiadający jej odpowiednika, to jednak sam fakt, że studenci ogólnie mają większe saldo karty mastercardowej oznacza, że studenci mają większe prawdopodobieństwo braku karty niż studenci nieposiadający karty. Student jest bardziej ryzykowny niż osoba nie będąca studentem, jeśli brak jest informacji o saldzie karty studenta. Student ten jest jednak mniej ryzykowny niż student, który nie jest studentem posiadającym równoważny bilans konta mastercardowego!

Ten prosty przykład ilustruje zagrożenia i subtelności związane z wykonywaniem regresji z udziałem tylko jednego prekursora, gdy inne prekursory mogą być również istotne. Wyniki uzyskane przy użyciu jednego prekursora mogą również różnić się od tych uzyskanych przy użyciu wielu prekursorów, zwłaszcza gdy istnieje korelacja pomiędzy tymi prekursorami. Zjawisko to jest rozumiane jako mylące.

W przypadku wielu zmiennych prognostycznych czasami chcielibyśmy wiedzieć, która zmienna jest tą, która ma największy wpływ na przewidywanie zmiennej odpowiedzi (Y). zrobimy to z varImpem z pakietu caret. Tutaj widzimy, że równowaga jest taka, że najważniejsza jest ta, która ma największy wpływ, podczas gdy status studenta to mniejsza kwota ważna, a następnie dochód (który i tak został uznany za nieistotny (p = .64)).

caret::varImp(model3)

## W sumie

## balance 19.0403764

## dochód 0,4647343

## studentYes 2.5835947

Tak jak poprzednio, dzięki temu modelowi możemy łatwo tworzyć prognozy. Na przykład, student z saldem karty kredytowej w wysokości $1,500 i dochodem w wysokości $40,000 ma szacunkowe prawdopodobieństwo niewypłacalności na poziomie

^p(X)=e-10,907+0,00591×1,500-0,00001×40-0,809×11+e-10,907+0,00591×1,500-0,00001×40-0,809×1=0,054

Nieuczestnik z takim samym saldem i dochodem ma szacunkowe prawdopodobieństwo niewykonania zobowiązania w wysokości

^p(X)=e-10,907+0,00591×1,500-0,00001×40-0,809×01+e-10,907+0,00591×1,500-0,00001×40-0,809×0=0,114p^(X)=e-10,907+0,00591×1,500-0,00001×40-0,809×01+e-10,907+0,00591×1,500-0,00001×40-0,809×0=0,114

new.df <- tibble(balance = 1500, income = 40, student = c(“Yes”, “No”))

predict(model3, new.df, type = “response”)

## 1 2

## 0.05437124 0.11440288