
W tym artykule omówimy teoretyczne podstawy transformacji funkcji regresji liniowej do funkcji odwrotnej logit-transformacji (inaczej nazywanej funkcją logistycznej odpowiedzi). Następnie, posługując się zasobami metody największej wiarygodności, zgodnie z modelem regresji logistycznej, wyprowadzimy funkcję straty Logistic Loss, innymi słowy, określimy funkcję, na podstawie której w modelu regresji logistycznej dobiera się parametry wektora wag
.
Plan artykułu:
- Przypomnimy o liniowej zależności między dwiema zmiennymi
- Ujawnimy potrzebę transformacji funkcji regresji liniowej
do funkcji logistycznej odpowiedzi 
- Przeprowadzimy transformacje i wyprowadzimy funkcji logistycznej odpowiedzi
- Postaramy się zrozumieć, dlaczego metoda najmniejszych kwadratów jest niewłaściwa przy dopasowywaniu parametrów
funkcje Logistic Loss - Używamy metoda największej wiarygodności określenie funkcji dopasowywania parametrów
:5.1. Przypadek 1: funkcja Logistic Loss dla obiektów z oznaczeniem klas 0 i 1:

5.2. Przypadek 2: funkcja Logistic Loss dla obiektów z oznaczeniem klas -1 i +1:

Artykuł obfituje w proste przykłady, w których wszystkie obliczenia można łatwo wykonać ustnie lub na papierze, w niektórych przypadkach może być potrzebny kalkulator. Przygotuj się 🙂
Artykuł ten przeznaczony jest w większym stopniu dla data scientistów z podstawową wiedzą na temat podstaw uczenia maszynowego.
W artykule znajdziesz również kod do rysowania wykresów i obliczeń. Cały kod napisany jest w języku python 2.7. Z góry wyjaśnię o 'nowości' używanej wersji — to jedno z warunków przejścia znanego kursu od Yandeksu na równie znanej platformie edukacji online Coursera, a jak można się domyślić, materiał został przygotowany na podstawie tego kursu.
01. Liniowa zależność
Zasadniczo można zadać pytanie — co mają wspólnego liniowa zależność i regresja logistyczna?
To proste! Regresja logistyczna jest jednym z modeli, które należą do klasyfikatorów liniowych. Mówiąc prościej, zadaniem klasyfikatora liniowego jest przewidywanie wartości docelowych
na podstawie zmiennych (regresorów)
. Przyjmuje się, że zależność między cechami
a wartościami docelowymi
jest liniowa. Stąd właśnie nazwa klasyfikatora — liniowy. Jeśli bardzo ogólnie podsumować, to w podstawie modelu regresji logistycznej leży założenie o istnieniu liniowej zależności między cechami
a wartościami docelowymi
. Oto ona — zależność.
W studiu mamy pierwszy przykład, który, rzecz jasna, dotyczy liniowej zależności badanych wielkości. Podczas pisania artykułu natknąłem się na przykład, który stał się już dla wielu znany — zależność natężenia prądu od napięcia. ('Analiza regresji praktycznej', N. Draper, G. Smith). Zajmiemy się nim również tutaj.
Zgodnie z zgodnie z prawem Ohma:
, gdzie
— natężenie prądu,
— napięcie,
— oporność.
Gdybyśmy nie znali prawa Ohma, moglibyśmy znaleźć zależność empirycznie, zmieniając
i mierząc
, przy czym
pozostawałoby stałe. Wówczas zobaczylibyśmy, że wykres zależności
od
tworzy mniej lub bardziej prostą linię przechodzącą przez początek układu współrzędnych. Powiedzieliśmy 'mniej lub bardziej', ponieważ, choć zależność jest faktycznie precyzyjna, nasze pomiary mogą zawierać małe błędy, dlatego punkty na wykresie mogą nie znaleźć się dokładnie na linii, ale będą losowo rozrzucone wokół niej.
Wykres 1 'Zależność
od
»

Kod do rysowania wykresu
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import random
R = 13.75
x_line = np.arange(0,220,1)
y_line = []
for i in x_line:
y_line.append(i/R)
y_dot = []
for i in y_line:
y_dot.append(i + random.uniform(-0.9, 0.9))
fig, axes = plt.subplots(figsize=(14,6), dpi=80)
plt.plot(x_line, y_line, color='purple', lw=3, label='I = U/R')
plt.scatter(x_line, y_dot, color='red', label='Rzeczywiste wyniki')
plt.xlabel('I', size=16)
plt.ylabel('U', size=16)
plt.legend(prop={'size': 14})
plt.show()02. Konieczność przekształceń równania regresji liniowej
Rozważmy kolejny przykład. Załóżmy, że pracujemy w banku i mamy zadanie określić prawdopodobieństwo zwrotu kredytu przez pożyczkobiorcę w zależności od kilku czynników. Aby uprościć zadanie, rozważmy tylko dwa czynniki: miesięczną pensję pożyczkobiorcy oraz miesięczną kwotę płatności na spłatę kredytu.
Zadanie jest bardzo umowne, ale na tym przykładzie będziemy mogli zrozumieć, dlaczego do jego rozwiązania nie wystarczy zastosowanie funkcji regresji liniowej, a także dowiemy się, jakie przekształcenia funkcji są wymagane.
Wracając do przykładu. Jasne jest, że im wyższa pensja, tym więcej kredytobiorca będzie mógł miesięcznie przeznaczyć na spłatę kredytu. Przy tym, dla określonego przedziału wynagrodzeń, ta zależność będzie całkowicie liniowa. Weźmy na przykład przedział wynagrodzeń od 60 000 PLN do 200 000 PLN i załóżmy, że w tym przedziale wynagrodzeń, zależność wysokości miesięcznej raty od wysokości wynagrodzenia jest liniowa. Załóżmy, że dla podanego przedziału wysokości wynagrodzeń ustalono, że stosunek wynagrodzenia do płatności nie może być niższy niż 3, a kredytobiorca powinien mieć jeszcze 5 000 PLN w zapasie. I tylko w takim przypadku uznamy, że kredytobiorca spłaci kredyt bankowi. Wtedy równanie regresji liniowej przyjmie postać:

gdzie
,
,
,
— wynagrodzenie
-go kredytobiorcy,
— płatność kredytu
-go kredytobiorcy.
Podstawiając do równania wynagrodzenie i płatność kredytu z ustalonymi parametrami
można podjąć decyzję o przyznaniu lub odmowie kredytu.
Na wstępie warto zauważyć, że przy danych parametrach
funkcja regresji liniowej, stosowana w funkcji logistycznego odpowiedzi będzie wydawać wysokie wartości, które utrudnią przeprowadzanie obliczeń w celu określenia prawdopodobieństw spłaty kredytu. Dlatego proponuje się zmniejszyć nasze współczynniki, powiedzmy, 25 000 razy. Z tej transformacji w współczynnikach nie zmieni się decyzja o przyznaniu kredytu. Zapamiętajmy ten moment na przyszłość, a teraz, aby było jeszcze jaśniej, o czym mowa, rozważmy sytuację z trzema potencjalnymi kredytobiorcami.
Tabela 1 „Potencjalni kredytobiorcy”

Kod do tworzenia tabeli
import pandas as pd
r = 25000.0
w_0 = -5000.0/r
w_1 = 1.0/r
w_2 = -3.0/r
data = {'Kredytobiorca':np.array(['Wania', 'Fedya', 'Lesha']),
'Wynagrodzenie':np.array([120000,180000,210000]),
'Płatność':np.array([3000,50000,70000])}
df = pd.DataFrame(data)
df['f(w,x)'] = w_0 + df['Wynagrodzenie']*w_1 + df['Płatność']*w_2
decyzja = []
for i in df['f(w,x)']:
if i > 0:
dec = 'Zatwierdzone'
decyzja.append(dec)
else:
dec = 'Odmowa'
decyzja.append(dec)
df['Decyzja'] = decyzja
df[['Kredytobiorca', 'Wynagrodzenie', 'Płatność', 'f(w,x)', 'Decyzja']]Zgodnie z danymi w tabeli, Wania przy wynagrodzeniu 120 000 PLN chce uzyskać kredyt, którego miesięczną spłatę wynosi 3 000 PLN. Określiliśmy, że dla zatwierdzenia kredytu, wysokość wynagrodzenia Wani musi przekraczać trzykrotność płatności, a ponadto powinno zostać 5 000 PLN. Wania spełnia to wymaganie:
Zostaje nawet 106.000 zł. Mimo że przy obliczeniach
zmniejszyliśmy współczynniki
w 25.000 razy, otrzymaliśmy ten sam wynik – kredyt może zostać zatwierdzony. Fedya również otrzyma kredyt, natomiast Leszy, mimo że zarabia najwięcej, będzie musiał ograniczyć swoje apetyt.
Narysujmy wykres w takim przypadku.
Wykres 2 „Klasyfikacja kredytobiorców”

Kod do rysowania wykresu
salary = np.arange(60000,240000,20000)
payment = (-w_0-w_1*salary)/w_2
fig, axes = plt.subplots(figsize=(14,6), dpi=80)
plt.plot(salary, payment, color='grey', lw=2, label='$f(w,x_i)=w_0 + w_1x_{i1} + w_2x_{i2}$')
plt.plot(df[df['Decision'] == 'Approved']['Salary'], df[df['Decision'] == 'Approved']['Payment'],
'o', color='green', markersize=12, label='Decyzja - Kredyt zatwierdzony')
plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'],
's', color='red', markersize=12, label='Decyzja - Kredyt odmówiony')
plt.xlabel('Wynagrodzenie', size=16)
plt.ylabel('Płatność', size=16)
plt.legend(prop={'size':14})
plt.show()Zatem nasza prosta, zbudowana zgodnie z funkcją
, oddziela „złych” kredytobiorców od „dobrych”. Kredytobiorcy, których życzenia nie zgadzają się z możliwościami, znajdują się powyżej prostej (Lesza), ci, którzy są w stanie, według parametrów naszego modelu, spłacić kredyt, są poniżej prostej (Wania i Fedya). Można to powiedzieć tak — nasza prosta dzieli kredytobiorców na dwa klasy. Oznaczmy je następująco: do klasy
przypiszemy tych kredytobiorców, którzy najprawdopodobniej spłacą kredyt, do klasy
lub
przypiszemy tych kredytobiorców, którzy najprawdopodobniej nie będą w stanie spłacić kredytu.
Podsumujmy wnioski z tego prostego przykładu. Weźmy punkt
i, podstawiając współrzędne punktu do odpowiedniego równania prostej
, rozważmy trzy opcje:
- Jeśli punkt znajduje się poniżej prostej, i przypisujemy go do klasy
, to wartość funkcji
będzie dodatnia od
do
. Oznacza to, że możemy uznać, iż prawdopodobieństwo spłaty kredytu znajduje się w granicach
. Im większa wartość funkcji, tym wyższe prawdopodobieństwo. - Jeśli punkt znajduje się powyżej prostej i przypisujemy go do klasy
lub
, to wartość funkcji będzie ujemna od
do
. Wówczas uznamy, że prawdopodobieństwo spłaty zadłużenia znajduje się w granicach
i im większa wartość funkcji w module, tym większa nasza pewność. - Punkt znajduje się na prostej, na granicy między dwoma klasami. W takim przypadku wartość funkcji
będzie równa
i prawdopodobieństwo spłaty kredytu wynosi
.
Teraz wyobraźmy sobie, że mamy nie dwa czynniki, a dziesiątki, nie trzech kredytobiorców, a tysiące. Wtedy zamiast prostej mamy m-мерna płaszczyzna i współczynniki
będą brane nie z powietrza, lecz wyprowadzone zgodnie z zasadami, na podstawie zgromadzonych danych o pożyczkobiorcach, którzy zwrócili lub nie zwrócili kredytu. Rzeczywiście, zauważcie, obecnie wybieramy pożyczkobiorców przy już znanych współczynnikach
. W rzeczywistości zadaniem modelu regresji logistycznej jest właśnie określenie parametrów
, przy których wartość funkcji strat Logistic Loss będzie dążyć do minimum. Ale o tym, jak oblicza się wektor
, dowiemy się w piątej części artykułu. A na razie wracamy do obiecanej ziemi — do naszego bankiera i trzech jego klientów.
Dzięki funkcji
wiemy, komu można dać kredyt, a komu należy odmówić. Ale z taką informacją nie można iść do dyrektora, ponieważ chciano od nas uzyskać prawdopodobieństwo zwrotu kredytu przez każdego pożyczkobiorcę. Co robić? Odpowiedź jest prosta — musimy jakoś przekształcić funkcję
, której wartości leżą w zakresie
na funkcję, której wartości będą leżały w zakresie
. Taka funkcja istnieje, nazywa się funkcją odpowiedzi logistycznej lub odwrotną transformacją logit. Oto ona:

Zobaczmy krok po kroku, jak uzyskuje się funkcję odpowiedzi logistycznej. Zauważmy, że będziemy się cofać, to znaczy założymy, że znamy wartość prawdopodobieństwa, które leży w przedziale od
do
i potem będziemy "rozkręcać" tę wartość na cały zakres liczb od
do
.
03. Wyprowadzamy funkcję odpowiedzi logistycznej
Krok 1. Przekształcimy wartości prawdopodobieństwa w zakres 
Na czas transformacji funkcji
do funkcji logistycznej odpowiedzi
zostawimy w spokoju naszego analityka kredytowego, a zamiast tego przejdziemy się do biur bukmacherskich. Nie, oczywiście, nie będziemy obstawiać, wszystko, co nas tam interesuje, to sens wyrażenia, na przykład szansa 4 do 1. Szanse, znane wszystkim grającym w zakłady graczom, są stosunkiem "sukcesów" do "porażek". Z perspektywy prawdopodobieństw, szanse to prawdopodobieństwo zajścia zdarzenia podzielone przez prawdopodobieństwo, że zdarzenie się nie wydarzy. Zapiszmy wzór na szansę zajścia zdarzenia
:

, gdzie
— prawdopodobieństwo zajścia zdarzenia,
— prawdopodobieństwo NIE zajścia zdarzenia
Na przykład, jeśli prawdopodobieństwo, że młody, silny i szybki koń o przydomku „Wiatraczek” pokona na wyścigach starą i zwiotczałą staruszkę o imieniu „Matylda”, wynosi
, więc szanse sukcesu „Wietrzyka” wyniosą
do
i odwrotnie, znając szanse, łatwo obliczymy prawdopodobieństwo
:

W ten sposób nauczyliśmy się „tłumaczyć” prawdopodobieństwo na szanse, które przyjmują wartości od
do
. Zróbmy kolejny krok i nauczmy się „tłumaczyć” prawdopodobieństwo na całą prostą liczbową od
do
.
Krok 2. Przetłumaczymy wartości prawdopodobieństwa na zakres 
Krok ten jest bardzo prosty – przelogarytmujemy szanse przy podstawie liczby Eulera
i otrzymamy:

Teraz wiemy, że jeśli
, to obliczenie wartości
będzie bardzo proste, a co więcej, powinno być dodatnie:
. I tak jest.
Dla ciekawości sprawdźmy, co się stanie, jeśli
, wtedy oczekujemy uzyskać wartość ujemną
. Sprawdzamy:
. Zgadza się.
Teraz wiemy, jak przetłumaczyć wartość prawdopodobieństwa od
do
na całą prostą liczbową od
do
. W następnym kroku zrobimy odwrotnie.
A tymczasem zauważmy, że zgodnie z zasadami logarytmowania, znając wartość funkcji
, można obliczyć szanse:

Ta metoda określania szans przyda nam się w następnym kroku.
Krok 3. Wyprowadzimy wzór do obliczenia 
Zatem nauczyliśmy się, znając
, znajdować wartości funkcji
. Jednak w rzeczywistości potrzebujemy rzeczy odwrotnej – znając wartość
znajdować
. W tym celu odwołamy się do pojęcia odwrotnej funkcji szans, zgodnie z którą:

W artykule nie będziemy wyprowadzać powyższego wzoru, ale sprawdzimy na liczbach z powyższego przykładu. Wiemy, że przy szansach równych 4 do 1 (
), prawdopodobieństwo wystąpienia zdarzenia wynosi 0,8 (
). Zróbmy podstawienie:
. To zgadza się z naszymi wcześniejszymi obliczeniami. Przechodzimy dalej.
W poprzednim kroku wyprowadziliśmy, że
, więc możemy dokonać zamiany w odwrotnej funkcji szans. Otrzymamy:

Podzielmy zarówno licznik, jak i mianownik przez
, wtedy:

Dla bezpieczeństwa, aby upewnić się, że nigdzie się nie pomyliliśmy, zróbmy jeszcze jedno małe sprawdzenie. W kroku 2 określiliśmy, że
. Wtedy, podstawiając wartość
do funkcji odpowiedzi logistycznej, oczekujemy uzyskać
. Podstawiamy i otrzymujemy:
Gratuluję, szanowny czytelniku, właśnie wyprowadziliśmy i przetestowaliśmy funkcję odpowiedzi logistycznej. Zobaczmy wykres tej funkcji. 
Wykres 3 „Funkcja odpowiedzi logistycznej”
Wykres 3 „Funkcja odpowiedzi logistycznej”

Kod do rysowania wykresu
import math
def logit (f):
return 1/(1+math.exp(-f))
f = np.arange(-7,7,0.05)
p = []
for i in f:
p.append(logit(i))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(f, p, color = 'grey', label = '$ 1 / (1+e^{-w^Tx_i})$')
plt.xlabel('$f(w,x_i) = w^Tx_i$', size = 16)
plt.ylabel('$p_{i+}$', size = 16)
plt.legend(prop = {'size': 14})
plt.show()W literaturze można również spotkać nazwę tej funkcji jako funkcja sigmoid. Na wykresie wyraźnie widać, że główna zmiana prawdopodobieństwa przynależności obiektu do klasy następuje w stosunkowo wąskim zakresie
, gdzieś od
do
.
Proponuję wrócić do naszego analityka kredytowego i pomóc mu w obliczeniu prawdopodobieństwa spłaty kredytów, w przeciwnym razie ryzykuje, że nie dostanie premii 🙂
Tabela 2 "Potencjalni pożyczkobiorcy"

Kod do tworzenia tabeli
proba = []
for i in df['f(w,x)']:
proba.append(round(logit(i),2))
df['Prawdopodobieństwo'] = proba
df[['Pożyczkobiorca', 'Wynagrodzenie', 'Płatność', 'f(w,x)', 'Decyzja', 'Prawdopodobieństwo']]Zatem prawdopodobieństwo zwrotu kredytu ustaliliśmy. Ogólnie rzecz biorąc, to wygląda na prawdę.
Rzeczywiście, prawdopodobieństwo, że Wanja przy wynagrodzeniu 120.000 zł będzie w stanie co miesiąc przekazywać bankowi 3.000 zł, zbliża się do 100%. Przy okazji, musimy rozumieć, że bank może przyznać kredyt również Leszkowi, pod warunkiem, że polityka banku przewiduje na przykład kredytowanie klientów z prawdopodobieństwem zwrotu kredytu większym niż, powiedzmy, 0.3. Po prostu w takim przypadku bank utworzy większy rezerwę na możliwe straty.
Należy także zauważyć, że stosunek wynagrodzenia do płatności nie mniejszy niż 3 i z zapasem 5.000 zł został wzięty z sufitu. Dlatego nie mogliśmy używać w pierwotnej postaci wektora wag
. Musieliśmy znacząco zmniejszyć współczynniki, więc podzieliliśmy każdy współczynnik przez 25.000, to znaczy, w zasadzie dostosowaliśmy wynik. Zrobiono to celowo, aby uprościć zrozumienie materiału na początkowym etapie. W rzeczywistości jednak nie musimy wymyślać i dostosowywać współczynników, tylko je znajdować. Właśnie w następnych sekcjach artykułu wyprowadzimy równania, za pomocą których dobierane są parametry
.
04. Metoda najmniejszych kwadratów przy określaniu wektora wag
w funkcji odpowiedzi logistycznej
Taka metoda doboru wektora wag jest nam już znana
, jako metoda najmniejszych kwadratów (MNK) i właściwie, dlaczego więc nie używać jej w zadaniach klasyfikacji binarnej? Rzeczywiście, nic nie stoi na przeszkodzie, aby używać MNK, tylko ten sposób w zadaniach klasyfikacji daje mniej dokładne wyniki niż Logistic LossIstnieje teoretyczne uzasadnienie. Zacznijmy od jednego prostego przykładu.
Załóżmy, że nasze modele (używające MSE i Logistic Loss) już zaczęły dobór wektora wag
i zatrzymaliśmy obliczenia na pewnym kroku. Nie ma znaczenia, w połowie, na końcu czy na początku, najważniejsze, że mamy już pewne wartości wektora wag i załóżmy, że na tym kroku wektory wag
dla obu modeli nie mają różnic. Weźmy więc otrzymane wagi i podstawimy je w funkcji logistycznej odpowiedzi (
) dla jakiegoś obiektu, który należy do klasy
. Zbadamy dwa przypadki, kiedy zgodnie z dobranym wektorem wag nasz model mocno się myli, a odwrotnie — model jest mocno pewny, że obiekt należy do klasy
. Zobaczymy, jakie kary będą "nałożone" przy użyciu MNK i Logistic Loss.
Kod do obliczania kar w zależności od używanej funkcji straty
# класс объекта
y = 1
# вероятность отнесения объекта к классу в соответствии с параметрами w
proba_1 = 0.01
MSE_1 = (y - proba_1)**2
print 'Штраф MSE при грубой ошибке =', MSE_1
# напишем функцию для вычисления f(w,x) при известной вероятности отнесения объекта к классу +1 (f(w,x)=ln(odds+))
def f_w_x(proba):
return math.log(proba/(1-proba))
LogLoss_1 = math.log(1+math.exp(-y*f_w_x(proba_1)))
print 'Штраф Log Loss при грубой ошибке =', LogLoss_1
proba_2 = 0.99
MSE_2 = (y - proba_2)**2
LogLoss_2 = math.log(1+math.exp(-y*f_w_x(proba_2)))
print '**************************************************************'
print 'Штраф MSE при сильной уверенности =', MSE_2
print 'Штраф Log Loss при сильной уверенности =', LogLoss_2Przypadek z poważnym błędem — model przypisuje obiekt do klasy
z prawdopodobieństwem 0,01
Kara przy użyciu MNK wyniesie:

Kara przy użyciu Logistic Loss wyniesie:

Przypadek z dużą pewnością — model przypisuje obiekt do klasy
z prawdopodobieństwem 0,99
Kara przy użyciu MNK wyniesie:

Kara przy użyciu Logistic Loss wyniesie:

Ten przykład dobrze ilustruje, że przy poważnym błędzie funkcja straty Log Loss kara model znacznie mocniej, niż MSE. Teraz zajmijmy się tym, jakie są teoretyczne przesłanki używania funkcji straty Log Loss w zadaniach klasyfikacji.
05. Metoda największej wiarygodności i regresja logistyczna
Jak obiecano na początku, artykuł obfituje w proste przykłady. W studiu kolejny przykład i starzy goście — kredytobiorcy banku: Wania, Fiedia i Liesha.
Na wszelki wypadek, zanim rozwiniemy przykład, przypomnę, że w życiu mamy do czynienia z zestawem danych składającym się z tysięcy lub milionów obiektów z dziesiątkami lub setkami cech. Jednak tutaj liczby zostały dobrane tak, aby łatwo mieściły się w głowie początkującego data scientista.
Wracamy do przykładu. Załóżmy, że dyrektor banku postanowił udzielić kredytu wszystkim potrzebującym, mimo że algorytm sugerował, by nie przyznawać go Łeszy. Po pewnym czasie dowiadujemy się, kto z trójki bohaterów spłacił kredyt, a kto nie. Jak można się było spodziewać: Wasia i Fiedia spłacili kredyt, a Łesza – nie. Teraz wyobraźmy sobie, że ten wynik będzie dla nas nowym zbiorem treningowym i, jakby to ująć, zniknęły nam wszystkie dane dotyczące czynników wpływających na prawdopodobieństwo spłaty kredytu (wynagrodzenie kredytobiorcy, wysokość miesięcznej raty). Możemy intuicyjnie założyć, że co trzeci kredytobiorca nie zwraca bankowi kredytu, innymi słowy - prawdopodobieństwo zwrotu kredytu przez następnego kredytobiorcę
. Istnieje teoretyczne potwierdzenie tego intuicyjnego założenia, a opiera się ono na metodzie największej wiarygodności, która w literaturze często jest nazywana zasadą największej wiarygodności.
Na początek zapoznajmy się z aparatem pojęciowym.
Wiarygodność próby to prawdopodobieństwo uzyskania exakt takiej próby, uzyskania dokładnie takich obserwacji / wyników, tzn. iloczyn prawdopodobieństw uzyskania każdego z wyników próby (na przykład spłata lub niespłata kredytu przez Wasię, Fiedię i Łeszę jednocześnie).
Funkcja wiarygodności łączy wiarygodność próby z wartościami parametrów rozkładu.
W naszym przypadku zbiór treningowy przedstawia uogólniony schemat Bernoulliego, w którym zmienna losowa przyjmuje tylko dwa wartości:
lub
. W związku z tym wiarygodność próby można zapisać jako funkcję wiarygodności od parametru
w następujący sposób:


Powyższy zapis można zinterpretować w ten sposób. Wspólne prawdopodobieństwo, że Wasia i Fiedia spłacą kredyt wynosi
, prawdopodobieństwo, że Łesza NIE spłaci kredytu wynosi
(ponieważ miało miejsce dokładnie NIE spłacenie kredytu), a zatem wspólne prawdopodobieństwo wszystkich trzech zdarzeń wynosi
.
Metoda największej wiarygodności jest to metoda oszacowania nieznanego parametru przez maksymalizację funkcji wiarygodności. W naszym przypadku należy znaleźć taką wartość
, przy której
osiąga maksimum.
Skąd w ogóle wzięła się idea poszukiwania wartości nieznanego parametru, w którym funkcja prawdopodobieństwa osiąga maksimum? Źródła tej idei pochodzą z przekonania, że próbka jest jedynym dostępnym źródłem wiedzy o populacji ogólnej. Wszystko, co wiemy o populacji ogólnej, jest przedstawione w próbce. Dlatego możemy powiedzieć, że próbka jest najbardziej dokładnym odzwierciedleniem populacji ogólnej dostępnym dla nas. W związku z tym musimy znaleźć taki parametr, przy którym istniejąca próbka staje się najbardziej prawdopodobna.
Oczywiście mamy do czynienia z problemem optymalizacyjnym, w którym musimy znaleźć punkt ekstremum funkcji. Aby znaleźć punkt ekstremum, należy rozważyć warunek pierwszego porządku, czyli przyrównać pochodną funkcji do zera i rozwiązać równanie w stosunku do poszukiwanego parametru. Jednak poszukiwanie pochodnej iloczynu wielu czynników może okazać się czasochłonne, aby tego uniknąć, istnieje szczególna technika — przejście do logarytmu. funkcji wiarygodności. Dlaczego możliwe jest takie przejście? Zwróćmy uwagę, że nie szukamy samego ekstremum funkcji,
ale punktu ekstremum, czyli takiej wartości nieznanego parametru,
, przy której
która osiąga maksimum. Przechodząc do logarytmu, punkt ekstremum nie zmienia się (choć samo ekstremum będzie się różnić), ponieważ logarytm jest funkcją monotoniczną.
Zgodnie z powyższym, kontynuujmy nasz przykład z pożyczkami od Wasy, Fiedzi i Leszka. Na początku przejdźmy do logarytmu funkcji prawdopodobieństwa.:

Teraz możemy z łatwością zróżnicować wyrażenie względem
:

I na koniec rozważmy warunek pierwszego porządku — przyrównajmy pochodną funkcji do zera:

W ten sposób nasza intuicyjna ocena prawdopodobieństwa spłaty pożyczki
została teoretycznie uzasadniona.
Świetnie, ale co teraz zrobić z taką informacją? Jeśli uznamy, że co trzeci pożyczkobiorca nie zwróci bankowi pieniędzy, to bank nieuchronnie zbankrutuje. Tak to wygląda, ale przy ocenie prawdopodobieństwa spłaty pożyczki równej
Nie uwzględniliśmy czynników wpływających na spłatę kredytu: wynagrodzenie kredytobiorcy i wysokość miesięcznej raty. Przypomnijmy, że wcześniej obliczyliśmy prawdopodobieństwo spłaty kredytu przez każdego klienta z uwzględnieniem tych czynników. Logicznym jest, że i prawdopodobieństwa, które uzyskaliśmy, będą różne od stałej równej
.
Zdefiniujmy prawdopodobieństwo próbek:
Kod do obliczeń prawdopodobieństw próbek
from functools import reduce
def likelihood(y, p):
line_true_proba = []
for i in range(len(y)):
ltp_i = p[i]**y[i]*(1-p[i])**(1-y[i])
line_true_proba.append(ltp_i)
likelihood = []
return reduce(lambda a, b: a*b, line_true_proba)
y = [1.0, 1.0, 0.0]
p_log_response = df['Probability']
const = 2.0/3.0
p_const = [const, const, const]
print 'Prawdopodobieństwo próbki przy stałej wartości p=2/3:', round(likelihood(y, p_const), 3)
print '****************************************************************************************************'
print 'Prawdopodobieństwo próbki przy obliczonej wartości p:', round(likelihood(y, p_log_response), 3)Prawdopodobieństwo próbki przy stałej wartości
:

Prawdopodobieństwo próbki przy obliczaniu prawdopodobieństwa spłaty kredytu z uwzględnieniem czynników
:


Prawdopodobieństwo próbki, obliczone w zależności od czynników, okazało się wyższe niż prawdopodobieństwo przy stałej wartości prawdopodobieństwa. Co to oznacza? Oznacza to, że wiedza o czynnikach pozwoliła bardziej precyzyjnie dobrać prawdopodobieństwo spłaty kredytu dla każdego klienta. Dlatego, przy udzielaniu kolejnego kredytu, właściwszym będzie użycie modelu oceny prawdopodobieństwa spłaty zadłużenia, zaproponowanego na końcu trzeciego rozdziału artykułu.
Ale w takim razie, jeśli musimy zmaksymalizować funkcję prawdopodobieństwa próbki, to czemu nie użyć jakiegoś algorytmu, który wygeneruje prawdopodobieństwa dla Wasy, Fedi i Lesi, na przykład, równe 0.99, 0.99 i 0.01 odpowiednio. Może taki algorytm dobrze sprawdzi się na zbiorze uczącym, ponieważ przybliży wartość prawdopodobieństwa próbki do
, ale po pierwsze taki algorytm prawdopodobnie napotka trudności w uogólnianiu, po drugie, ten algorytm z pewnością nie będzie liniowy. A jeśli metody przeciwdziałania nadmiernemu dopasowaniu (a także słabe uogólnienie) wyraźnie nie są częścią tego artykułu, to w odniesieniu do drugiego punktu przeanalizujmy to bliżej. Wystarczy odpowiedzieć na proste pytanie. Czy prawdopodobieństwo spłaty kredytu przez Włodka i Staszka może być takie samo, biorąc pod uwagę znane nam czynniki? Z punktu widzenia zdrowego rozsądku oczywiście nie, nie może. Włodek będzie odkładał 2,5% swojej pensji miesięcznie na spłatę kredytu, a Staszek — prawie 27,8%. Również na wykresie 2 „Klasyfikacja klientów” widzimy, że Włodek jest znacznie dalej od linii dzielącej klasy niż Staszek. I w końcu wiemy, że funkcja
dla Włodka i Staszka przyjmuje różne wartości: 4,24 dla Włodka i 1,0 dla Staszka. Gdyby Staszek na przykład zarabiał znacznie więcej lub prosił o mniejszy kredyt, to prawdopodobieństwa spłaty kredytu dla Włodka i Staszka byłyby zbliżone. Innymi słowy, liniowej zależności nie da się oszukać. A gdybyśmy rzeczywiście obliczyli współczynniki
, a nie wzięli ich z sufitu, moglibyśmy śmiało stwierdzić, że nasze wartości
najlepiej pozwalają ocenić prawdopodobieństwo spłaty kredytu przez każdego kredytobiorcę, ale ponieważ zgodziliśmy się przyjąć, że określenie współczynników
zostało przeprowadzone zgodnie z zasadami, to musimy przyjąć — nasze współczynniki pozwalają na najlepszą ocenę prawdopodobieństwa 🙂
Jednakże zboczyliśmy z tematu. W tej sekcji musimy ustalić, jak definiowany jest wektor wag
, który jest potrzebny do oceny prawdopodobieństwa spłaty kredytu przez każdego kredytobiorcę.
Krótko podsumowując, z jakim arsenałem występujemy w poszukiwaniu współczynników
:
1. Zakładamy, że zależność między zmienną zależną (wartością prognozowaną) a czynnikiem wpływającym na rezultat jest liniowa. Z tego powodu stosuje się funkcja regresji liniowej postać
, której linia dzieli obiekty (klientów) na klasy
i
lub
(klienci, którzy mogą spłacić kredyt i ci, którzy nie mogą). W naszym przypadku równanie ma postać
.
2. Używamy funkcji odwrotnej transformacji logit postać
do określenia prawdopodobieństwa przynależności obiektu do klasy
.
3. Rozważamy naszą próbkę szkoleniową jako realizację uogólnioną schematy Bernoulliego, czyli dla każdego obiektu generowana jest losowa wielkość, która z prawdopodobieństwem
(swoim dla każdego obiektu) przyjmuje wartość 1 i z prawdopodobieństwem
– 0.
4. Wiemy, że musimy maksymalizować funkcję prawdopodobieństwa próbki biorąc pod uwagę przyjęte czynniki, aby posiadana próbka była najbardziej wiarygodna. Innymi słowy, musimy dopasować takie parametry, przy których próbka będzie najbardziej wiarygodna. W naszym przypadku dobieranym parametrem jest prawdopodobieństwo spłaty kredytu
, które z kolei zależy od nieznanych współczynników
. Oznacza to, że musimy znaleźć taki wektor wag
, przy którym prawdopodobieństwo próbki będzie maksymalne.
5. Wiemy, że dla maksymalizacji funkcji prawdopodobieństwa próbki można używać metoda największej wiarygodności. I znane są nam wszelkie sprytne triki dotyczące tej metody.
Tak to wygląda, wieloaspektowe 🙂
A teraz przypomnijmy sobie, że na początku artykułu chcieliśmy wyprowadzić dwa rodzaje funkcji straty Logistic Loss w zależności od tego, jak oznaczone są klasy obiektów. Zwykle w zadaniach klasyfikacji z dwoma klasami klasy oznaczane są jako
i
lub
. W zależności od oznaczenia, na wyjściu otrzymamy odpowiednią funkcję straty.
Przypadek 1. Klasyfikacja obiektów na
i 
Na początku, przy ustalaniu prawdopodobieństwa próbki, w którym prawdopodobieństwo spłaty zadłużenia przez pożyczkobiorcę było obliczane na podstawie czynników i zadanych współczynników
, zastosowaliśmy wzór:

W rzeczywistości
— to wartość funkcji logistycznego odzewu
przy zadanym wektorze wag 
W takim razie nic nie stoi na przeszkodzie, aby zapisać funkcję prawdopodobieństwa próbki w ten sposób:

Bywa tak, że czasami niektórzy początkujący analitycy mają trudności z natychmiastowym zrozumieniem, jak działa ta funkcja. Przyjrzyjmy się 4 krótkim przykładom, które wszystko wyjaśnią:
1. Jeśli
(tj. zgodnie z próbką szkoleniową obiekt należy do klasy +1), a nasz algorytm
określa prawdopodobieństwo przypisania obiektu do klasy
równe 0.9, wtedy ten fragment prawdopodobieństwa próbki będzie obliczany w ten sposób:

2. Jeśli
, a
, więc obliczenia będą takie:

3. Jeśli
, a
, więc obliczenia będą takie:

4. Jeśli
, a
, więc obliczenia będą takie:

Oczywiście, że funkcja prawdopodobieństwa będą maksymalizowane w przypadkach 1 i 3 lub ogólnie — przy prawidłowo odgadniętych wartościach prawdopodobieństw przypisania obiektu do klasy
.
W związku z tym, że przy ustalaniu prawdopodobieństwa przypisania obiektu do klasy
nie znamy tylko współczynników
, więc będziemy ich szukać. Jak wspomniano wcześniej, jest to zadanie optymalizacji, w którym na początku potrzebujemy znaleźć pochodną funkcji prawdopodobieństwa względem wektora wag
. Jednak przedtem warto uprościć sobie zadanie: pochodną będziemy szukać od logarytmu funkcji wiarygodności.

Dlaczego po logarytmowaniu, w funkcji błędu logistycznego, zmieniliśmy znak z
na
. Wszyscy prosto, ponieważ w zadaniach oceny jakości modelu powszechnie minimalizuje się wartość funkcji, więc pomnożyliśmy prawą stronę wyrażenia przez
i w związku z tym zamiast maksymalizacji, teraz minimalizujemy funkcję.
Właściwie, teraz, na waszych oczach, została wyprowadzona funkcja straty — Logistic Loss dla zbioru treningowego z dwoma klasami:
i
.
Teraz, aby znaleźć współczynniki, wystarczy znaleźć pochodną funkcji błędu logistycznego i następnie, korzystając z metod numerycznych optymalizacji, takich jak spadek gradientowy lub stochastyczny spadek gradientowy, dobrać najbardziej optymalne współczynniki
. Jednak, biorąc pod uwagę już nie małą objętość artykułu, proponuje się przeprowadzenie różniczkowania samodzielnie lub może będzie to temat na następny artykuł z większą ilością arytmetyki bez tak szczegółowych przykładów.
Przypadek 2. Klasyfikacja obiektów na
i 
Podejście będzie takie samo jak w przypadku klas
i
, ale sama droga do wyprowadzenia funkcji straty Logistic Loss, będzie bardziej kręta. Zaczynamy. Będziemy używać operatora „jeśli…, to…”. To znaczy, jeśli
-ty obiekt należy do klasy
, to do obliczenia prawdopodobieństwa zbioru użyjemy prawdopodobieństwa
, jeśli obiekt należy do klasy
, to do prawdopodobieństwa podstawiamy
. Tak wygląda funkcja prawdopodobieństwa:

Rozważmy jak to działa. Rozważmy 4 przypadki:
1. Jeśli
i
, więc do prawdopodobieństwa zbioru „wejdzie” 
2. Jeśli
i
, więc do prawdopodobieństwa zbioru „wejdzie” 
3. Jeśli
i
, więc do prawdopodobieństwa zbioru „wejdzie” 
4. Jeśli
i
, więc do prawdopodobieństwa zbioru „wejdzie” 
Jasne jest, że w 1 i 3 przypadku, gdy prawdopodobieństwa zostały poprawnie określone przez algorytm, funkcja prawdopodobieństwa będzie maksymalizowana, to właśnie to chcieliśmy uzyskać. Jednak takie podejście jest dość nieporęczne i później rozważymy bardziej zwarty zapis. Ale najpierw, logarytmujemy funkcję prawdopodobieństwa zmieniając znak, ponieważ teraz będziemy ją minimalizować.

Podstawimy zamiast
wyrażenie
:

Uprościmy prawe wyrażenie pod logarytmem, używając prostych technik arytmetycznych, i uzyskamy:

A teraz nadszedł czas, aby pozbyć się operatora „jeśli…, to…”. Zauważmy, że kiedy obiekt
należy do klasy
, to w wyrażeniu pod logarytmem, w mianowniku,
podnosimy do potęgi
, jeśli obiekt należy do klasy
, więc $e$ podnosimy do potęgi
. W związku z tym można uprościć zapis potęgi — połączyć oba przypadki w jeden:
. Wtedy funkcja błędu logistycznego przyjmie postać:

Zgodnie z zasadami logarytmowania, odwracamy ułamek i wyciągamy znak "
" (minus) przed logarytm, otrzymujemy:

Przed Państwem funkcja strat logistic Loss, która jest stosowana w zbiorze uczącym z obiektami należącymi do klas:
i
.
Cóż, w tym momencie żegnam się i kończymy artykuł.
Poprzednia praca autora — „Przekształcenie równania regresji liniowej w postać macierzową”
Materiały pomocnicze
1. Literatura
1) Praktyczna analiza regresji / N. Draper, G. Smith – 2. wyd. – Moskwa: Finanse i statystyka, 1986 (tłumaczenie z angielskiego)
2) Teoria prawdopodobieństwa i statystyka matematyczna / W.E. Gmurman — 9. wyd. — Moskwa: Wyższa szkoła, 2003
3) Teoria prawdopodobieństwa / N.I. Czerowa — Nowosybirsk: Nowosybirskie uniwersytet państwowy, 2007
4) Analiza biznesowa: od danych do wiedzy / Paklin N.B., Oreszkow W.I. — 2. wyd. — Petersburg: Piter, 2013
5) Data Science Nauka o danych od podstaw / Joel Grasz — Petersburg: BHW Petersburg, 2017
6) Praktyczna statystyka dla specjalistów Data Science / P. Bruce, E. Bruce — Petersburg: BHW Petersburg, 2018
2. Wykłady, kursy (wideo)
1)
2)
3)
4)
5)
3. Źródła internetowe
1)
2)
3)
4)
5)
6)
7)
8)
Źródło: habr.com

do funkcji logistycznej odpowiedzi 
funkcje Logistic Loss
:

, to wartość funkcji
będzie dodatnia od
do
. Oznacza to, że możemy uznać, iż prawdopodobieństwo spłaty kredytu znajduje się w granicach
. Im większa wartość funkcji, tym wyższe prawdopodobieństwo.
lub
, to wartość funkcji będzie ujemna od
do
. Wówczas uznamy, że prawdopodobieństwo spłaty zadłużenia znajduje się w granicach
i im większa wartość funkcji w module, tym większa nasza pewność.
będzie równa
i prawdopodobieństwo spłaty kredytu wynosi
.


w funkcji odpowiedzi logistycznej
i 
i 