Przejdź do treści

Jak działa regresja logistyczna?

– Tato, możemy przed czytaniem obejrzeć jeszcze bajkę na dobranoc? – zapytała Jagódka.

– Tak, teraz nasza kolej! – twardo domagała się Otylka.

– Zobaczę tylko ostatnią scenę z tego filmu i już oddaję Wam pilota – powiedziałem wpatrzony z wypiekami w ekran.

– Tatusiu, a dlaczego oglądasz tak stary film? Już go przecież widziałeś kilka razy – zapytała Jagódka.

– Przecież to Gwiezdne Wojny! Klasyka filmów science-fiction! Aby wiedzieć jak powinien wyglądać taki rodzaj, to trzeba znać tę serię – powiedziałem oburzony.

– My tam wolimy bajki – odpowiedziały z uśmiechem dziewczynki.

Czy kiedykolwiek zdarzyło Ci się usłyszeć, że warto znać klasykę? Pewnie nie raz od różnych osób i w różnym kontekście, jak chociażby moje dziewczyny w kontekście filmów.

W świecie Machine Learning i Data Science także istnieje „klasyka” – modele, które stanowią podstawę dla większości dzisiejszych algorytmów. Jednym z takich modeli jest regresja logistyczna – jeden z najważniejszych modeli w Machine Learning, który sprawia, że możemy dokładnie przewidzieć, co i z jakim prawdopodobieństwem się wydarzy.

Dzięki regresji logistycznej mamy moc przewidywania przyszłości jak Luke Skywalker, który musiał przewidzieć ruchy swojego przeciwnika, aby zwyciężyć w walce z Darth Vaderem. Możemy otrzymać precyzyjne wyniki, na podstawie których podejmujemy decyzje. Jest to narzędzie, które warto poznać, tak jak warto obejrzeć Gwiezdne Wojny, by zrozumieć, jak powinien wyglądać dobry film science-fiction.

Tak więc jeśli nie znasz podstaw tajników walki mieczem świetlnym (czytaj regresji logistycznej), to zapraszam Cię w tę podróż!

Uwaga! Zanim przejdziesz dalej warto byłoby przypomnieć sobie jak działa REGRESJA LINIOWA.

Problem w regresji liniowej

Jak pamiętacie z wcześniejszego wpisu na blogu zadaniem regresji liniowej jest po prostu dopasowanie prostej do danych. Jest to bardzo łatwe narzędzie do przewidywania zmiennych ilościowych.

Ale co należy zrobić, jeśli chcemy przewidzieć tylko dwie wartości? Na przykład czy umrzemy w ciągu kolejnych 10 lat? Albo czy nasz sąsiad odda nam pieniądze z odsetkami, czy nie?

W tym przypadku widzimy, że wyniki dla takiej regresji liniowej rosną do +/- nieskończoności. A tak naprawdę zależy nam, aby dążyły do wartości od 0 do 1. Zatem potrzebujemy funkcji, która nam to zapewni.

Funkcja logistyczna

Funkcja logistyczna (zwana również sigmoidalną) to funkcja matematyczna, która przekształca dowolną wartość wejściową do wartości z przedziału (0, 1). Jest często wykorzystywana w różnych dziedzinach matematyki i jest wyrażana wzorem:

gdzie:

  • x jest wartością zmiennej niezależnej,
  • e jest liczbą Eulera (około 2,71828),
  • f(x) jest wartością zmiennej zależnej.

W kontekście uczenia maszynowego funkcję logistyczną wykorzystujemy często jako jedną z funkcji aktywacji lub w regresji logistycznej do przewidywania prawdopodobieństwa, czy dany obiekt należy do jednej z dwóch klas (np. „tak” lub „nie”, „0” lub „1”).

Regresja logistyczna

Regresja logistyczna jest prostym i jednocześnie bardzo skutecznym algorytmem klasyfikacji.

Model regresji logistycznej przyjmuje równanie liniowe jako dane wejściowe i wykorzystuje funkcję logistyczną do wykonania zadania klasyfikacji binarnej.

Wizualnie wygląda to tak:

Powyższa krzywa w kształcie litery “S” pozwala nam odczytać, jakie jest prawdopodobieństwo tego, czy umrzemy w ciągu 10 najbliższych lat z założeniem konkretnego wieku.

Jeśli podamy bardzo wysoki wiek, to prawdopodobieństwo tego, że umrzemy w tym czasie jest bardzo wysokie. A dla młodego wieku jest odpowiednio niższe.

Zatem nasz model regresji logistycznej przewidującej prawdopodobieństwo śmierci w ciągu kolejnych 10 lat na podstawie wieku wygląda tak:

Oczywiście, aby model działał lepiej, należy dostarczyć większą liczbę cech niosących za sobą informacje do predykcji zmiennej. Nie wiesz, jak wybrać odpowiednie zmienne? Możesz o tym poczytać TUTAJ (link).

Możemy dodać do naszego zbioru dodatkowe zmienne na przykład “czy_pali” (domyślnie papierosy) i wówczas wzór zostałby rozbudowany do poniższej postaci:

Uwaga! Zapamiętaj, że regresja logistyczna to klasyfikacja.

Próg odcięcia (ang. treshold)

Jak widać regresja logistyczna zwraca nam prawdopodobieństwo występowania pewnego zdarzenia. Ale my mieliśmy do zaadresowania problem klasyfikacji, czyli czy dana osoba przeżyje kolejne 10 lat czy nie. Pomaga nam w tym próg odcięcia.

Progiem odcięcia (ang. threshold) w modelu regresji logistycznej nazywamy wartość, powyżej której przypisujemy obserwację do jednej klasy, a poniżej której do drugiej klasy. Jest to punkt graniczny, który pozwala na dokonanie decyzji o przynależności danego obiektu do jednej z klas na podstawie wartości przewidywanego prawdopodobieństwa.

Domyślnie w większości implementacji regresji logistycznej próg odcięcia wynosi 0,5 (czyli 50%). Oznacza to, że wszystkie obserwacje, dla których przewidywane prawdopodobieństwo przynależności do jednej z klas jest większe niż 0,5, zostaną przypisane do tej klasy, a pozostałe do drugiej.

Warto pamiętać, że wybór wartości progu odcięcia zależy od konkretnego zastosowania i powinien być ustalany na podstawie biznesowych metryk. Zauważ też, że wybór progu odcięcia wpływa na jakość niektórych metryk (np. recall, accurancy, precision).

A jak wybrać odpowiedni próg odcięcia? Na ten temat można nie jeden doktorat byłoby napisać. Natomiast w jednym z kolejnych wpisów pokażę Wam konkretny przykład dla ryzyka kredytowego klientów.

No dobra, już wiemy jak działa regresja. To teraz kolejne ważne pytanie: jak wybierane są parametry w modelu regresji logistycznej?

Regresja logistyczna – jak optymalizujemy parametry?

W przypadku regresji liniowej mogliśmy posłużyć się na przykład metodą najmniejszych kwadratów, aby znaleźć optymalne parametry. A następnie wyliczyć współczynnik determinacji (R2) mówiący o jakości dopasowania modelu.

W przypadku regresji logistycznej nie możemy wykorzystać tych metod, ponieważ algorytm najmniejszych kwadratów (OLS) jest techniką szacowania parametrów, która minimalizuje sumę kwadratów błędów między wartościami rzeczywistymi a wartościami przewidywanymi przez model. Regresja logistyczna z kolei jest modelem, który przewiduje prawdopodobieństwo przynależności do danej klasy.

Możemy natomiast wykorzystać metodę największej wiarygodności (ang. maximum likelihood).

Metoda największej wiarygodności, czyli Maximum Likelihood (MLE)

Algorytm Maximum Likelihood (MLE) to metoda, która pomaga nam znaleźć najlepsze wartości parametrów w modelach matematycznych, które opisują nasze dane.

Funkcja wiarygodności to funkcja opisująca prawdopodobieństwo obserwacji danych dla różnych wartości parametrów modelu. MLE szuka takich wartości parametrów, które maksymalizują tę funkcję wiarygodności, czyli takich, dla których obserwowane dane są najbardziej prawdopodobne.

Idea działania Maximum Likelihood (MLE)

MLE działa tak, że bada różne wartości parametrów i oblicza, jak prawdopodobne są nasze dane dla każdej z tych wartości.

Weźmy nasz wcześniejszy przykład z wiekiem i prawdopodobieństwem śmierci w ciągu najbliższych 10 lat i narysujmy pierwszą krzywą dla parametrów theta_0 i theta_1.

Następnie wyliczamy prawdopodobieństwa wystąpienia dla każdej obserwacji, mnożymy je i mamy wyliczoną wartość funkcji wiarygodności dla zadanej krzywej (czyli modelu z odpowiednimi parametrami).

Teraz przesuwamy odrobinkę krzywą dla innych parametrów i powtarzamy wyliczenie wartości funkcji wiarygodności dla niej. I tak w kółko.

I ostatecznie wybieramy krzywą z największą wartością likelihood.

Gradient i learning rate

Mówiąc powyżej, że przesuwamy odrobinkę krzywą, był to duży skrót myślowy, aby uprościć ideę działania algorytmu. Wchodząc bardziej w szczegóły, to w algorytmach najczęściej wyliczamy gradient funkcji wiarygodności.

Jest to wektor zawierający pochodne cząstkowe funkcji wiarygodności względem każdego z parametrów. Ten wektor pozwala na określenie kierunku, w którym funkcja ta rośnie najszybciej, a zatem w którym powinny być dokonywane zmiany wartości parametrów, aby osiągnąć maksimum funkcji.

Krok uczenia (ang. learning rate) to parametr algorytmu, który określa jak duże są zmiany wartości parametrów dokonywane w każdej iteracji. Jeśli krok uczenia jest zbyt mały, to algorytm może działać zbyt wolno lub zatrzymać się w minimum lokalnym. Natomiast, jeśli krok uczenia jest zbyt duży, to algorytm może nie osiągnąć maksimum funkcji, ponieważ zbyt szybko „przeskoczy” punkt, w którym funkcja ta osiąga maksimum.

Algorytm MLE używający gradientu i kroku uczenia optymalizuje funkcję wiarygodności poprzez iteracyjne aktualizowanie wartości parametrów w kierunku maksimum funkcji. Proces ten powtarzamy, aż wartość funkcji wiarygodności przestaje się poprawiać lub osiągniemy ustaloną iterację.

A jak wyliczyć funkcję wiarygodności?

Dla modelu regresji logistycznej funkcja wiarygodności może być zapisana w postaci:

gdzie:

  • θ to wektor wartości parametrów modelu,
  • y to wektor wartości zmiennej objaśnianej przyjmującej wartość 0 lub 1,
  • X to macierz zmiennych objaśniających,
  • i to numer obserwacji,
  • P(y_i=1 | X_i, θ) to prawdopodobieństwo, że dla i-tej obserwacji y przyjmuje wartość 1, przy założeniu wartości zmiennej niezależnej X_i oraz wartości parametrów regresji logistycznej.

Zatem liczymy powyższy iloczyn dla wszystkich obserwacji, które mamy i szukamy maksymalnej wartości dla różnych parametrów θ.

W przypadku naszego prostego przykładu z wiekiem doprecyzujmy, że prawdopodobieństwo możemy zapisać jako funkcję sigmoidalną, zdefiniowaną jako:

Super, już wiemy jak optymalizujemy i szukamy parametrów dla naszego modelu.

Prosty przykład w PYTHON

Stwórzmy prościutki i krótki kod w python, by zobaczyć jak będą wyglądały parametry dla modelu. Przykład od początku do końca z budową karty skoringowej przy pomocji regresji logistycznej pokaże Wam w jednym z kolejnych wpisów.

Zacznijmy od wczytania bibliotek (macie napisane wersje gdybyście chcieli odtworzyć kody i środowisko).

import pandas as pd
import math

from sklearn.linear_model import LogisticRegression

from platform import python_version
from sklearn import __version__ as sklearn_ver
from statsmodels import __version__ as statsmodels_ver

print(f'python: {python_version()}')
print(f'\npandas: {pd.__version__}')
print(f'sklearn: {sklearn_ver}')
print(f'statsmodels: {statsmodels_ver}')

Wczytujemy przygotowane przeze mnie dane:

df = pd.read_excel('../data/data.xlsx')
df.head(3)

A teraz zbudujmy model na podstawie jednej zmiennej opisowej (age):

X = df[['age']]
y = df['target']

model = LogisticRegression()
model.fit(X, y)

# probability of death
age_to_predict = 30
model.predict_proba([[age_to_predict]])[:,1]

Pamiętacie powyższy wzór na prawdopodobieństwo z parametrami θ? Wyciągnijmy te zmienne z modelu i podstawmy pod wzór, by mieć pewność, że był poprawny.

theta0 = model.intercept_[0]
theta1 = model.coef_[0][0]

print(f'theta1={round(theta1,3)}; theta0 ={round(theta0,3)}')

# probability of death from math formula
round(1/(1+math.exp(-(age_to_predict*theta1+theta0))),8)

Super! Mamy to!

W klasycznym podejściu regresji logistycznej bardzo często mamy jeszcze parametry z-score i p-wartości. Niestety do dzisiaj w bibliotece sklearn nie doczekaliśmy się ich jeszcze. Skorzystajmy zatem z innej biblioteki statsmodels by móc się im przyjrzeć, a następnie przeanalizować i lepiej zje rozumieć.

import statsmodels.api as sm

X = df[['age']]
y = df['target']

X = sm.add_constant(X)

model = sm.Logit(y,X)

result = model.fit()
print(result.summary())

Interpretacja współczynników modelu

Mamy wyliczony prosty model dla naszego przykładu. Spróbujmy zinterpretować jeszcze jego wyniki.

W regresji logistycznej, współczynniki regresji (coef) odpowiadają za ilościową zmianę w logarytmie szans zmiennej objaśnianej (y), która jest wyjaśniana przez zmienne niezależne (X).

Logarytm szans (ang. log odds)

Logarytm szans w regresji logistycznej, to logarytm ilorazu prawdopodobieństwa sukcesu do prawdopodobieństwa niepowodzenia, który jest wykorzystywany do modelowania prawdopodobieństwa sukcesu w zależności od zmiennych niezależnych.

W regresji logistycznej każde prawdopodobieństwo lub możliwy wynik zmiennej zależnej można przekształcić w logarytm szans, znajdując iloraz szans.

Uwaga! Szansa a prawdopodobieństwo to coś innego! Szansa to stosunek tego, co się dzieje, do tego, co się nie dzieje. A prawdopodobieństwo to stosunek tego, co się dzieje, do wszystkiego, co może się wydarzyć.

Współczynnik regresji dla wieku wynosi 0.56. Zmienna coef dla zmiennej niezależnej oznacza, jak bardzo ta zmienna oddziałuje na zmienną objaśnianą w analizie regresji logistycznej. Im większa wartość współczynnika, tym większy wpływ na zmienną objaśnianą.

Wartości współczynnika możemy też wykorzystać do określenia kierunku wpływu zmiennej niezależnej na zmienną objaśnianą. Współczynnik dodatni oznacza, że zwiększenie zmiennej niezależnej prowadzi do zwiększenia wartości zmiennej objaśnianej, a współczynnik ujemny oznacza, że zwiększenie zmiennej niezależnej prowadzi do zmniejszenia przewidywanego prawdopodobieństwa.

Współczynniki regresji logistycznej można wykorzystać do oszacowania szansy (odds) sukcesu lub niepowodzenia w modelu, w zależności od wartości zmiennych niezależnych. Aby oszacować szansę (ang. odds) dla danej wartości zmiennej niezależnej, należy pomnożyć wartość zmiennej niezależnej przez współczynnik regresji i dodać stałą.

W naszym przypadku będzie to:

Zatem dla wieku 30 lat (i naszych danych na których wytrenowaliśmy model) szansa na śmierć w ciągu kolejnych 10 lat będzie niecałe 2 razy mniejsza niż średnia. Natomiast 100 latek będzie miał 2 razy wyższą szansę na śmierć.

Test Walda

Podczas wyliczania regresji w bibliotece statmodel mamy podane dodatkowe parametry.

Pierwszym z nich jest odchylenie standardowe, które mówi, jak szeroko wartości jakiejś wielkości (na przykład wieku) są rozrzucone wokół jej średniej.

Drugim parametrem jest wartość *z (*częściej zwana też z-score). Jest to po prostu iloraz współczynnika (coef) i odchylania (std err). Innymi słowy wartość z-score to po prostu liczba odchyleń standardowych od wartości 0 dla rozkładu normalnego.

Mając wyliczony z-score na podstawie rozkładu normalnego, obliczana jest p-wartość, która informuje nas o tym, jakie jest prawdopodobieństwo uzyskania danej wartości z-score lub większej/ mniejszej, gdyby hipoteza zerowa (czyli brak istotności współczynnika regresji) była prawdziwa.

Jeśli p-wartość jest mniejsza od przyjętego poziomu istotności alfa (najczęściej 0.005), to odrzucamy hipotezę zerową i uważamy, że istnieje istotna różnica między wartością oszacowanego współczynnika a wartością oczekiwaną, czyli zerem. Z kolei, jeśli p-wartość jest większa od alfy, to nie ma podstaw do odrzucenia hipotezy zerowej i stwierdzamy, że brak jest istotnej różnicy między wartością oszacowanego współczynnika a wartością oczekiwaną.

I to jest właśnie test Walda. W naszym przypadku p-wartość dla wieku wyniosła 0. Zatem jest uznawana za istotną na poziomie istotności alfa = 0.05.

A co jakbyśmy dodali inną zmienną np. czy ktoś pali?

# create model for 2 variables
X = df[['age', 'smoke']]
y = df['target']

X = sm.add_constant(X)

model = sm.Logit(y,X)

result = model.fit()
print(result.summary())

W tym przypadku p-wartość dla palenia wyniosła 0.098. Zatem nie jest uznawana za istotną na poziomie istotności alfa = 0.05, ale może być istotna na wyższym poziomie istotności (np. alfa = 0.1).

Należy jednak pamiętać, że interpretacja p-wartości jest zawsze względna i zależy od wybranej wartości poziomu istotności oraz liczby próbek w badaniu. Ponadto, ocena istotności wpływu poszczególnych zmiennych powinna być wykonywana w kontekście całego modelu, a nie tylko dla pojedynczych zmiennych.

Wykres log odds

Teraz możemy wykorzystać funkcję logit, aby przerobić nasz wcześniejszy wykres na wykres liniowy.

Wykres log odds to graficzna reprezentacja zależności między wartościami logarytmów oddsów (logitów) a wartościami zmiennej niezależnej w analizie regresji logistycznej. Wykres log odds może pomóc w zrozumieniu, jak zmiana wartości zmiennej niezależnej wpływa na prawdopodobieństwo sukcesu lub niepowodzenia w modelu regresji logistycznej.

Na obu wykresach mamy naszą najlepszą funkcję pasujacą do danych wybranych za pomocą maksymalnej wiarygodności.

Jeśli nasze prawdopodobieństwa z modelu będą układać się w wzdłuż linii z modelem oznacza to, że model dobrze dopasował się do danych.

Interpretacja graficzna

Współczynniki modelu, które otrzymujemy, możemy narysować na wykresie logitowym:

Wyraz wolny jest ujemny. Można to tłumaczyć tak, że jeśli dopiero się urodziłeś, to masz znikome szanse na to, aby nie przeżyć kolejnych 10 lat!

Założenia, czyli o czym musisz pamiętać!

1. Zmienna zależna jest binarna lub kategoryczna.

Głównym założeniem regresji logistycznej jest to, że zmienne odpowiedzi mogą przyjmować dwa możliwe wyniki. Na przykład: chory/zdrowy, 0/1, kobieta/mężczyzna, lewo/prawo, kupi/nie kupi, spłaci/nie spłaci.

Wraz z rozwojem stworzono również modyfikacje podstawowego algorytmu regresji zwanej wielomianową regresją logistyczną, która pozwala przewidywać więcej stanów niż dwa, np. pozytywny/neutralny/negatywny.

2. Brak współliniowości między zmiennymi wyjaśniającymi

Jeśli zmienne objaśniające są silnie skorelowane między sobą (tj. występuje tzw. współliniowość), to otrzymane wyniki modelu mogą być niestabilne i trudne do interpretacji. Współliniowość może prowadzić do błędnych wniosków na temat wpływu poszczególnych zmiennych objaśniających na zmienną zależną oraz do przeszacowania istotności niektórych zmiennych objaśniających.

Na przykład, jeśli zmienna doświadczenie zawodowe jest zależna od zmiennej wiek, a zmienna wiek jest jednym z czynników objaśniających, to wyniki modelu mogą sugerować, że zmienna wiek ma wpływ na przewidywanie dochodu, podczas gdy w rzeczywistości to zmienna doświadczenie zawodowe ma większy wpływ.

3. Wartości odstające

Kolejnym krytycznym założeniem dla regresji logistycznej jest konieczność pozbycia się wartości odstających w zbiorze danych, ponieważ mocno będą zaburzać dobierane parametry modelu θ.

4. Preferowany większy rozmiar próby

Regresja logistyczna daje wiarygodne i stabilne wyniki, gdy bierze się pod uwagę większy rozmiar próby zbioru danych.

Zwykle zaleca się, aby liczba przypadków (zarówno pozytywnych jak i negatywnych) w próbie była co najmniej dziesięciokrotnie większa niż liczba zmiennych objaśniających. Zatem przy budowie modelu z 10 zmiennymi oznaczałoby, że powinno być co najmniej po 100 przypadków dla każdej klasy.

Jednakże, zalecana minimalna liczba przypadków może być różna w zależności od kontekstu badawczego oraz stopnia złożoności modelu oraz rodzajów zmiennych.

5. Monotoniczność zmiennych

Regresja logistyczna wymaga, aby zmienne objaśniające miały liniowy lub logarytmiczny wpływ na logarytm szansy. Na przykład wraz z wiekiem mamy coraz mniejszą szanse na przeżycie kolejnych 10 lat.

W przypadku, gdy zmienne objaśniające nie spełniają założeń modelu regresji logistycznej, konieczne jest zastosowanie odpowiednich przekształceń lub modeli nieliniowych, aby poprawić jakość modelowania i uniknąć błędnej interpretacji efektów.

Na przykład zmienne ciągłe można pokateryzować w koszyki. Na przykład zamiast zmiennej ciągłej wiek, dać zmienną wiek przyjmującą 5 wartości: ≤18, 18-25, 26-40, 40-65, 65+ i sprawdzić czy wówczas zmienna jest monotoniczna.

W przypadku zmiennych kategorycznych warto zastosować one-hot-encoder lub label encoder zgodny z rosnącym prawdopodobieństwem wartości zmiennej.

Podsumowanie

Uff. Jeśli dotarliście aż tutaj, to mam nadzieję, że odczarowałem dla Was czym jest regresja logistyczna.

W końcu regresja logistyczna to nic innego jak gotowanie, tylko zamiast składników mamy zmienne objaśniające, a zamiast dania gotowego model. Ważne, żeby każdy składnik (czyli zmienna) był odpowiednio dobrany i zbalansowany, tak jak w przypadku przypraw w kuchni.

A kiedy już wszystko się uda i nasz model jest gotowy, możemy cieszyć się smakiem sukcesu i przekonaniem, że nasz przepis na sukces jest jedynie nasz!

Pozdrawiam z całego serducha,

Bibliografia

  1. https://www.youtube.com/watch?v=yIYKR4sgzI8
  2. https://en.wikipedia.org/wiki/Linear_regression
  3. https://www.spiceworks.com/tech/artificial-intelligence/articles/what-is-logistic-regression/
  4. http://prac.im.pwr.wroc.pl/~sobczyk/dydaktyka/regresja_logistyczna_dane.pdf
  5. https://www.kartydatascience.pl/
  6. https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

8 komentarzy do “Jak działa regresja logistyczna?”

  1. „Uwaga! Zapamiętaj, że regresja logistyczna to klasyfikacja.”. No nie tak do końca. Regresja logistyczna to statystycznie czysta regresja, no a klasyfikacja jest tylko jednym z wielu możliwych zastosowań. W nauczaniu maszynowym pasuje taka aplikacja, zgoda, no bo warunkowa wartość oczekiwana ma interpretację probabilistyczną, ale to wszystko. Przecież inne regresje też mają swoje interpretacje warunkowej wartości oczekiwanej, a to wcale a wcale nie oznacza, że nagle przestają być regresjami. Ludzie to mylą, ale oczywiście na egzaminie ze statystyki to byłoby oblane pytanie.

  2. Przyjąłem założenie, że artykuł NIE jest adresowany do statystyków, którzy zajmują się zagadnieniami biznesowymi, i że każdy stanowi osobną całość [dx\bdw – zdanie: „Możesz o tym poczytać TUTAJ (link).” nie jest zlinkowane].

    Jeśli moje założenie jest prawidłowe, to takie frazy jak „biznesowa metryka” (pewnie chodzi o zakładany w banku próg prawdopodobieństwa niespłacenia kredytu jako prób dopuszczalny – ale kto to wie?) powinny być wyjasnione w tekście. Nie wspomnę o funkcjach ecall, accurancy, precision.

    Pozwalam sobie na to zwrócić uwagę, gdyż dla niektórych czytelników (humanistów), którzy są nieco ociężali w przyswajaniu pojęć „technicznych” wprowadzanie ich bez kontekstowego wyjaśnienia jest deprymujące i znacznie wpływa na jakośc percepcji. Nawet jeśli wyjaśnienie ma się pojawić później, to niezrozumiałe fragmenty, które w danym momencie nie wnoszą niczego nowego (a jako niezrozumniałe – nie mogą) ciągną się za niewprawionym czytelnikiem do momentu wyjaśnienia, jak sm* po ga*.

  3. Jestem mega pozytywnie zaskoczony. Twój artykuł mnie ucieszył, bo po pierwsze – opisałeś RL (jedno z moich kluczowych narzędzi regresyjnych) w sposób bardzo dokładny i przystępny dla czytelnika, a po drugie – nie zepsułeś tego pisząc, że „regresja logistyczna to „misnomer”, bo to „wcale nie jest regresja”. A to rzadkość! Czytałem go z przyjemnością. I za to Ci bardzo dziękuję 🙂

    (w poniższym tekście będę powtarzał niektóre z rzeczy, o których napisałeś w swym artykule – jedynie dla ustalenia kontekstu).

    Obecnie internet (LinkedIn, Medium, Kaggle, pewne książkowe bestsellery) zalany jest nonsensem pod tytułem „regresja logistyczna nie jest regresją” („logistic regression is not a regression”, „it’s a misnomer”) itd. Podczas, gdy jest to klasyczny mechanizm regresji w statystyce, gdzie regresja zajmuje się określeniem warunkowej wartości oczekiwanej zmiennej zależnej (odpowiedzi), E(Y|X=x). Dla rozkładu Bernoullego wartość oczekiwana jest prawdopodobieństwem sukcesu – tak jak wspominasz. Stąd zresztą inna (choć raczej nieużywana poza kręgami akademickimi) nazwa LR: „bezpośredni estymator prawdopodobieństwa”.

    W ujęciu GLM (uogólnionego modelu liniowego) RL nie różni się zbytnio od innych regresji (liniowej, Poissona, gamma, beta) poza rodzajem rodzajem odpowiedzi. A z tego wynika rodzaj funkcji łączącej (liniowa: identyczność, logistyczna: logit, Poisson: log), rozkład warunkowy odpowiedzi (liniowa: Gaussa, logistyczna: Bernoullego, Poisson/gamma/beta – jak nazwa wskazuje, itd) i w konsekwencji – interpretacja współczynników. Ale – w ujęciu GLM – mechanizm estymacji i „pracy” z regresją jest wszędzie ten sam. (OLS jest ekwiwalentna MLE dla przykładu regresji liniowej, tak więc nie ma tu nieścisłości). Dla statystyka to po prostu kolejny model regresyjny o konkretnych zastosowaniach.

    Regresja logistyczna została wymyślona ok 1960 roku przez sir Coxa (choć prace nad nią trwały od końca XIX wieku) do rozwiązania właśnie problemów regresyjnych (i przy okazji zagadnień zw. z analizą przeżycia – również binarny przypadek, choć w innym ujęciu), na kilka lat przed zauważeniem, że przecież może stanowić świetne narzędzie do klasyfikacji. Następnie została „wciągnięta” przez Neldera i Weddeburna w krąg rodziny GLM, a potem dodatkowo zaimplementowana w jednym z wiodących wówczas pakietów statystycznych – S (dziś jego open sourcee’owym odpowiednikiem jest R) i uogólniona do klasy GAM przez Hastiego i Tibshiraniego. Ci dwaj profesorowie początkowo również wykorzystywali ją do problemów regresyjnych w biostatystyce klinicznej (można znaleźć kilka ich prac na ten temat) i dopiero później powstało ich znane „Elements of statistical learning”, gdzie jest ona wykorzystana naturalnie jako element klasyfikatora logistycznego. Chociaż nadal jej regresyjny charakter jest podkreślony na stronach 121-122 (+ przykłady). Podobnie w książce Bretta Lantza o nauczaniu maszynowym w R. Około bodajże lat 80-90 została rozszerzona o modele warunkowe z efektami mieszanymi (GLMM) i modele brzegowe (GEE – metoda uogólnionych równań estymacyjnych) dla danych zależnych – kluczowa metoda dla badań eksperymentalnych.

    Dziś regresja logistyczna jest głównym narzędziem regresji (nie klasyfikacji) w badaniach eksperymentalnych w medycynie, fizyce, psychologii, oraz badaniach klinicznych leków (badania RCT z binarną odpowiedzią), gdzie dodatkowo jest rozszerzona o „obsługę” obserwacji powtarzanych w czasie (zależnych), tj. w badaniach longitudinalnych np. z użyciem modeli mieszanych (rzadziej) i estymacji GEE (częściej). Nie służy ona tutaj w ogóle do klasyfikacji, bo i nie ma tu czego klasyfikować. Służy natomiast do określenia rozmiaru efektu (różnicy % sukcesów między ramionami terapii) i wpływu różnych zmiennych na te %).

    I teraz kuriozum: podczas, gdy A) autorzy tej metody wymyślili ją do celów regresji, gdy B) setki tysięcy badaczy i statystyków na całym świecie od dekad używają jej do czelów regresyjnych, gdy C) czołowi statystycy (np. Agresti, Fitzmaurice, Willson, Hosmer, Lemeshow, Nelder, Wedeburn i in.) opisali jej regresyjną naturę w licznych monografiach, książki takie jak 100-page ML book twierdzi, że „regresja logistyczna to nie regresja”.

    To jest niesamowite, jak środowisko ML pozmieniało definicje z „conditional expectation” na predykcję wartości tej samej klasy co zmienna zależna i tylko dla zmiennych numerycznych.
    (w tym ujęciu to nawet regresja Poissona albo Coxa nie jest regresją – no bo nie przewiduje tego samego, co dostała na wejściu). I zamiast powiedzieć, że „regresja logistyczna służy do zdefiniowania klasyfikatora logistycznego”, twierdzą teraz, że „logistic regression is a misnomer”. Zastanawiając się przy tym, jak to jest możliwe (o ile są tego świadomi), że tysiące statystyków wcale nie używa regresji logistycznej do klasyfikowania czegokolwiek (osobiście zrobiłem to raz, ok. 2005 roku, z ciekawości a – potem nie miałem już potrzeby).

    Ba! Dochodzi do tego, że na LinkedIn dostaję wiadomości od osób właśnie z dziedziny badań eksperymentalnych, które na rozmowie rekrutacyjnej oblały pytanie o regresję logistyczną, bo zapytani „czy – a jeśli tak – to do czego jej używałeś” nie odpowiedzieli, że „do klasyfikacji”. Rekruterzy oraz inżynierowie ML (w tym nierzadko z PhD) odpowiadali, że „chyba pomyliłeś z regresją liniową – doucz się tego, bo to jest źle”.
    Inny przykład – u mnie w pracy. Kilka lat temu, gdy zachorował jeden z biostatystyków, poprosiliśmy człowieka z działu Data Science o pomoc (w badaniach klinicznych nie korzystamy z ML/AI ani big data, nie zajmujemy się predykcją, klasyfikacją, nauczaniem, etc. tylko konfirmacyjne analizy oparte o wnioskowanie – zwykle częstościowe na b. małych zbiorach; tymi sprawami zajmuję się DS/ML). Chodziło o policzenie paru rzeczy w badaniu klinicznym z binarną odpowiedzią. Poprosiliśmy o wykorzystanie GEE-regresji logistycznej do obliczenia efektów brzegowych (prawdopodobieństw) i popełnienie kilku testów hipotez na planowanych kontrastach i oszacowania trendów % w obu ramionach badań i kilku innych dodatków. Ta osoba odmówiła (dość obcesowo), że regresja logistyczna służy tylko do klasyfikacji.

    A do czego używa się regresji logistycznej w naukach eksperymentalnych, skoro nie do klasyfikacji? Ano – do tego, co już opisałeś u siebie w artykule, plus kilka innych:
    – do oceny kierunku, siły (magnitude) i statystycznej istotności wpływu zmiennych niezależnych na prawdopodobieństwo sukcesu (normalnie na log-odds, lub, po transformacji – odds-ratio; ale po użyciu efektów brzegowych pracujemy na skali prawdopodobieństw)

    – do testowania klasycznych hipotez statystycznych ale skorygowanych o inne zmienne (głównie numeryczne). Regresja logistyczna (z rozszerzeniami, jak warunkowa r.g., GEE) zastępuje wiele testów: z Walda, z Rao, Cochrana-Mantela-Haenszela, Breslowa-Daya, Friedmana, Kruskala-Wallisa, Cochrana (Q), McNemara, Cochrana-Armitege’a i innych.

    – do testowania efektów głównych – przez zastosowanie do niej AN(C)OVA’y typu 2 lub 3. W ogólnym modelu liniowym AN(C)OVA bada redukcję resztowej wariancji (stąd nazwa) podczas porównania modeli zagnieżdzonych (co sprowadza się do porównań średnich poprzez efekty główne), a tutaj – wariancja resztowa zastąpiona jest dewiancją.

    – do analizy interakcji przez analizę efektów prostych

    – do testowania trendów proporcji (jak test Cochrana-Armitage’a, ale lepiej)

    – do testowania zaplanowanych kontrastów. To właśnie znajduje zastosowanie w badaniach klinicznych.

    – do przewidywania prawdopodobieństw w metodzie ważenia zwanej IPW – inverse probability weighting. Ta jest z kolei często wykorzystywana do „ważenia” celem uczynienia metod estymacji takich jak GEE lub modeli z odpornym estymatorem wariancji (jak „sandwich”) mniej wrażliwymi na przypadek, gdy brakujące dane (missing data) nie spełniają kryterium MCAR (missing completely at random).

    – przy tzw. „matchingu” (propensity score matching), stosowanym często w przypadku nierandomizowanych badań obserwacyjnych do częściowego zaradzenia brakowi randomizacji.

    Klasyfikacja, jak wspomniałeś, jest wieloetapowym procesem i jest „zbudowana” na wyniku działania regresji. Czyli Regresja logistyczna + Reguła decyzyjna = Klasyfikator logistyczny.

    Zresztą, podobny efekt otrzymalibyśmy stosując regułę dec. dla regresji liniowej, o czym również wspomniałeś, otrzymując tzw. „liniowy model prawdopodobieństwa” z jego naturalnymi słabościami (poza przedziałem, powiedzmy, 20-80%, gdzie pasuje całkiem OK, niestety – gorzej z wnioskowaniem).

    PS: Jak wspomniałeś, w użyciu są również jej „siostry”: logistyczna regresja wielomianowa (wiele nieuporządkowanych klas, jak kolory), porządkowa (dla wielu uporządkowanych klas, jak rangi, ankiety), „alternująca; ang. alternating” dla pomiarów powtarzanych (kolejna opcja po GLMM i GEE), czy wreszcie kwantylowa regresja logistyczna. Warto też wspomnieć, że porządkowa r.l. (zwana również modelem proporcjonalnych szans; proportional-odds model) to nic innego jak uogólnienie testu stochastycznej równości Manna-Whitneya (Wilcoxona) (błędnie zwanych testem równości median; generalnie jest to fałsz). Jeśli zatem potrzebujemy nieparametrycznego testu stoch. dominacji (superiority) skorygowanego o inne zmienne (covariates), to mamy gotowe narzędzie.

    Serdecznie pozdrawiam i gratuluję świetnego artukułu!

  4. Bardzo ciekawy i przystępnie napisany artykuł. Przy okazji mam pytanie, jaką funkcję zastosować w przypadku danych wyjściowych za dowolnego zakresu, a nie z klasyfikacji (np. od -3 do 3)?

    1. Regresja logistyczna działa tylko dla problemów klasyfikacji. Jak chcesz przewidywać dowolny zakres to bardziej mówimy o problemach regresji i innych algorytmach.

  5. Bardzo ciekawy artykuł, jako osoba, która zaczęła studia podyplomowe w kierunku Data Scientist zdecydowanie przydatna wiedza, do tego przykłady w Pythonie gdzie na początku wydaje się, że to „czarna magia”. W końcu mogę powiedzieć, że rozumiem chociaż jeden algorytm w dużym stopniu. Od dzisiaj przy gotowaniu będę myślał o regresji liniowej. 😀

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Spodobało Ci się? Udostępnij ten post w social mediach! ❤️❤️❤️