W tym artykule przeanalizujemy teoretyczne obliczenia transformacji funkcje regresji liniowej в odwrotna funkcja transformacji logit (inaczej zwana funkcją odpowiedzi logistycznej). Następnie skorzystaj z arsenału metoda największej wiarygodnościzgodnie z modelem regresji logistycznej wyprowadzamy funkcję straty Straty logistyczne, czyli inaczej zdefiniujemy funkcję za pomocą której dobierane będą parametry wektora wag w modelu regresji logistycznej .
Zarys artykułu:
- Powtórzmy liniową zależność pomiędzy dwiema zmiennymi
- Zidentyfikujmy potrzebę transformacji funkcje regresji liniowej в funkcja reakcji logistycznej
- Przeprowadźmy transformacje i wyniki funkcja reakcji logistycznej
- Spróbujmy zrozumieć, dlaczego metoda najmniejszych kwadratów jest zła przy wyborze parametrów funkcje Straty logistyczne
- Używamy metoda największej wiarygodności do ustalenia funkcje wyboru parametrów :
5.1. Przypadek 1: funkcja Straty logistyczne dla obiektów z oznaczeniami klas 0 и 1:
5.2. Przypadek 2: funkcja Straty logistyczne dla obiektów z oznaczeniami klas -1 и +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ć wymagany kalkulator. Więc przygotuj się :)
Ten artykuł jest przeznaczony przede wszystkim dla analityków danych z początkowym poziomem wiedzy na temat podstaw uczenia maszynowego.
W artykule zostanie podany również kod do rysowania wykresów i obliczeń. Cały kod jest napisany w tym języku python 2.7. Wyjaśnię z góry „nowość” zastosowanej wersji – to jeden z warunków obrania znanego kursu z Yandex na równie znanej platformie edukacyjnej online Courserai, jak można przypuszczać, materiał został przygotowany w oparciu o ten kurs.
01. Zależność liniowa
Całkiem rozsądne jest zadanie pytania - co ma z tym wspólnego zależność liniowa i regresja logistyczna?
To proste! Regresja logistyczna jest jednym z modeli należących do klasyfikatora liniowego. Krótko mówiąc, zadaniem klasyfikatora liniowego jest przewidywanie wartości docelowych ze zmiennych (regresorów) . Uważa się, że istnieje zależność między cechami i wartości docelowe liniowy. Stąd nazwa klasyfikatora – liniowy. W dużym uproszczeniu model regresji logistycznej opiera się na założeniu, że pomiędzy cechami istnieje liniowa zależność i wartości docelowe . To jest połączenie.
W studiu mamy pierwszy przykład, który słusznie dotyczy prostoliniowej zależności badanych wielkości. W trakcie przygotowywania artykułu natknąłem się na przykład, który zmartwił już wiele osób – zależność prądu od napięcia („Zastosowana analiza regresji”, N. Draper, G. Smith). Przyjrzymy się temu również tutaj.
Według Prawo Ohma:
Gdzie - siła prądu, - Napięcie, - opór.
Gdybyśmy nie wiedzieli Prawo Ohma, wówczas moglibyśmy znaleźć zależność empirycznie, zmieniając i mierzenie , jednocześnie wspierając naprawił. Wtedy zobaczylibyśmy wykres zależności od daje mniej więcej prostą linię przechodzącą przez początek. Mówimy „mniej więcej”, bo choć zależność faktycznie jest dokładna, to nasze pomiary mogą zawierać drobne błędy i w związku z tym punkty na wykresie mogą nie mieścić się dokładnie na linii, ale będą wokół niej losowo rozrzucone.
Wykres 1 „Uzależnienie” od »
Kod rysowania wykresów
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 = 'Actual results')
plt.xlabel('I', size = 16)
plt.ylabel('U', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
02. Konieczność przekształcenia równania regresji liniowej
Spójrzmy na inny przykład. Wyobraźmy sobie, że pracujemy w banku i naszym zadaniem jest określenie prawdopodobieństwa spłaty kredytu przez kredytobiorcę w zależności od określonych czynników. Aby uprościć zadanie, weźmiemy pod uwagę tylko dwa czynniki: miesięczne wynagrodzenie pożyczkobiorcy i miesięczną kwotę spłaty kredytu.
Zadanie jest bardzo warunkowe, ale na tym przykładzie możemy zrozumieć, dlaczego nie wystarczy go użyć funkcje regresji liniowej, a także dowiedzieć się, jakie przekształcenia należy przeprowadzić za pomocą funkcji.
Wróćmy do przykładu. Przyjmuje się, że im wyższe wynagrodzenie, tym więcej kredytobiorca będzie mógł przeznaczyć miesięcznie na spłatę kredytu. Jednocześnie dla pewnego przedziału wynagrodzeń zależność ta będzie dość liniowa. Przykładowo, weźmy przedział wynagrodzeń od 60.000 200.000 RUR do 3 5.000 RUR i załóżmy, że w podanym przedziale wynagrodzeń zależność wysokości miesięcznej wpłaty od wysokości wynagrodzenia jest liniowa. Załóżmy, że dla określonego przedziału płac okazało się, że stosunek wynagrodzenia do wynagrodzenia nie może spaść poniżej XNUMX, a pożyczkobiorca musi jeszcze mieć XNUMX RUR w rezerwie. I tylko w tym przypadku założymy, że kredytobiorca spłaci kredyt bankowi. Wówczas równanie regresji liniowej będzie miało postać:
gdzie , , , - wynagrodzenie -ty pożyczkobiorca, - spłata pożyczki -ty pożyczkobiorca.
Podstawienie do równania wynagrodzenia i spłaty kredytu o stałych parametrach Możesz zdecydować o udzieleniu lub odrzuceniu pożyczki.
Patrząc w przyszłość zauważamy, że przy danych parametrach funkcja regresji liniowej, stosuje się w funkcje odpowiedzi logistycznej wygeneruje duże wartości, które skomplikują obliczenia w celu określenia prawdopodobieństwa spłaty kredytu. Dlatego proponuje się zmniejszenie naszych współczynników, powiedzmy, 25.000 XNUMX razy. Ta transformacja współczynników nie spowoduje zmiany decyzji o udzieleniu kredytu. Zapamiętajmy tę kwestię na przyszłość, ale teraz, żeby jeszcze jaśniej było o czym mówimy, przeanalizujmy sytuację z trzema potencjalnymi pożyczkobiorcami.
Tabela 1 „Potencjalni kredytobiorcy”
Kod generujący tabelę
import pandas as pd
r = 25000.0
w_0 = -5000.0/r
w_1 = 1.0/r
w_2 = -3.0/r
data = {'The borrower':np.array(['Vasya', 'Fedya', 'Lesha']),
'Salary':np.array([120000,180000,210000]),
'Payment':np.array([3000,50000,70000])}
df = pd.DataFrame(data)
df['f(w,x)'] = w_0 + df['Salary']*w_1 + df['Payment']*w_2
decision = []
for i in df['f(w,x)']:
if i > 0:
dec = 'Approved'
decision.append(dec)
else:
dec = 'Refusal'
decision.append(dec)
df['Decision'] = decision
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision']]
Zgodnie z danymi w tabeli Wasia z pensją 120.000 3.000 RUR chce otrzymać pożyczkę, aby móc ją co miesiąc spłacać w wysokości 5.000 RUR. Ustaliliśmy, że aby pożyczka została zatwierdzona, wynagrodzenie Wasyi musi przekraczać trzykrotność kwoty wpłaty, a pozostało jeszcze XNUMX rubli. Vasya spełnia ten wymóg: . Pozostaje jeszcze 106.000 XNUMX RUR. Pomimo tego, że przy obliczaniu zmniejszyliśmy szanse 25.000 XNUMX razy wynik był taki sam - pożyczkę można zatwierdzić. Fedya również otrzyma pożyczkę, ale Lesha, mimo że otrzymuje najwięcej, będzie musiała pohamować apetyty.
Narysujmy wykres dla tego 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 = 'Decision - Loan approved')
plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'],
's', color = 'red', markersize = 12, label = 'Decision - Loan refusal')
plt.xlabel('Salary', size = 16)
plt.ylabel('Payment', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
A więc nasza prosta, skonstruowana zgodnie z funkcją , oddziela „złych” pożyczkobiorców od „dobrych”. Powyżej tej linii (Lesha) znajdują się pożyczkobiorcy, których pragnienia nie pokrywają się z ich możliwościami, natomiast poniżej tej linii znajdują się ci, którzy zgodnie z parametrami naszego modelu są w stanie spłacić pożyczkę (Vasya i Fedya). Innymi słowy możemy powiedzieć tak: nasza linia bezpośrednia dzieli pożyczkobiorców na dwie klasy. Oznaczmy je następująco: do klasy Do kategorii kredytobiorców, którzy z największym prawdopodobieństwem spłacają pożyczkę, zaklasyfikujemy lub Uwzględnimy tych kredytobiorców, którzy najprawdopodobniej nie będą w stanie spłacić pożyczki.
Podsumujmy wnioski z tego prostego przykładu. Weźmy pewien punkt i podstawiając współrzędne punktu do odpowiedniego równania linii rozważ trzy opcje:
- Jeśli punkt znajduje się pod linią i przypisujemy go do klasy , a następnie wartość funkcji będzie pozytywny od do . Oznacza to, że możemy założyć, że prawdopodobieństwo spłaty pożyczki mieści się w granicach . Im większa wartość funkcji, tym większe prawdopodobieństwo.
- Jeśli punkt znajduje się nad linią i przypisujemy go do klasy lub , wówczas wartość funkcji będzie ujemna do . Zakładamy wówczas, że prawdopodobieństwo spłaty zadłużenia mieści się w granicach i im większa jest wartość bezwzględna funkcji, tym większa jest nasza pewność.
- Punkt leży na linii prostej, na granicy dwóch klas. W tym przypadku wartość funkcji będzie równe a prawdopodobieństwo spłaty pożyczki jest równe .
A teraz wyobraźmy sobie, że mamy nie dwa czynniki, a dziesiątki, nie trzy, a tysiące pożyczkobiorców. Wtedy zamiast linii prostej będziemy mieli m-wymiarowy płaszczyzna i współczynniki nie zostaniemy wzięci znikąd, ale wyprowadzeni według wszelkich zasad i na podstawie zgromadzonych danych o pożyczkobiorcach, którzy spłacili lub nie spłacili pożyczkę. I rzeczywiście, należy pamiętać, że obecnie dobieramy pożyczkobiorców przy użyciu znanych już współczynników . Tak naprawdę zadaniem modelu regresji logistycznej jest właśnie określenie parametrów , przy którym wartość funkcji straty Straty logistyczne będzie dążyć do minimum. Ale o tym, jak obliczany jest wektor , dowiemy się więcej w 5. części artykułu. Tymczasem wracamy do ziemi obiecanej – do naszego bankiera i jego trzech klientów.
Dzięki funkcji wiemy komu można udzielić pożyczki, a komu trzeba odmówić. Ale z taką informacją nie można udać się do dyrektora, bo on chciał od nas uzyskać prawdopodobieństwo spłaty kredytu przez każdego pożyczkobiorcę. Co robić? Odpowiedź jest prosta – musimy jakoś przekształcić funkcję , którego wartości mieszczą się w przedziale do funkcji, której wartości będą mieścić się w przedziale . I taka funkcja istnieje, nazywa się ją funkcja odpowiedzi logistycznej lub odwrotna transformacja logitowa. Poznać:
Zobaczmy krok po kroku jak to działa funkcja reakcji logistycznej. Uwaga, będziemy iść w przeciwnym kierunku, tj. założymy, że znamy wartość prawdopodobieństwa, która mieści się w przedziale od do a następnie „rozwiniemy” tę wartość do całego zakresu liczb od do .
03. Wyprowadzamy funkcję odpowiedzi logistycznej
Krok 1. Przekształć wartości prawdopodobieństwa w zakres
Podczas transformacji funkcji в funkcja reakcji logistycznej Zostawmy naszego analityka kredytowego w spokoju i zamiast tego wybierzmy się na wycieczkę po bukmacherach. Nie, oczywiście, nie będziemy stawiać zakładów, interesuje nas tylko znaczenie wyrażenia, na przykład szansa wynosi 4 do 1. Szanse, znane wszystkim obstawiającym, to stosunek „sukcesów” do „ niepowodzenia”. W ujęciu prawdopodobieństwa szanse to prawdopodobieństwo wystąpienia zdarzenia podzielone przez prawdopodobieństwo, że zdarzenie nie wystąpi. Zapiszmy wzór na prawdopodobieństwo zajścia zdarzenia :
Gdzie - prawdopodobieństwo wystąpienia zdarzenia, — prawdopodobieństwo, że zdarzenie NIE wystąpi
Na przykład, jeśli prawdopodobieństwo, że młody, silny i wesoły koń o imieniu „Veterok” pokona w wyścigu starą i wiotką staruszkę o imieniu „Matylda”, jest równe , wtedy będą szanse na sukces „Veteroka”. к i odwrotnie, znając szanse, obliczenie prawdopodobieństwa nie będzie dla nas trudne :
W ten sposób nauczyliśmy się „przekładać” prawdopodobieństwo na szanse, z których pobierane są wartości do . Zróbmy jeszcze jeden krok i nauczmy się „przekładać” prawdopodobieństwo na całą oś liczbową do .
Krok 2. Przekształć wartości prawdopodobieństwa w zakres
Ten krok jest bardzo prosty - przenieś logarytm szans na podstawę liczby Eulera i otrzymujemy:
Teraz wiemy, że jeśli , a następnie oblicz wartość będzie bardzo proste, a ponadto powinno być pozytywne: . To prawda.
Z ciekawości sprawdźmy co jeśli , wówczas spodziewamy się wartości ujemnej . Sprawdzamy: . Zgadza się.
Teraz wiemy, jak przekonwertować wartość prawdopodobieństwa do wzdłuż całej osi liczbowej od do . W następnym kroku zrobimy odwrotnie.
Na razie zauważamy, że zgodnie z zasadami logarytmu, znając wartość funkcji , możesz obliczyć szanse:
Ta metoda ustalania kursów przyda nam się w kolejnym kroku.
Krok 3. Wyprowadźmy wzór do ustalenia
Więc nauczyliśmy się, wiedząc , znajdź wartości funkcji . Jednak tak naprawdę potrzebujemy czegoś zupełnie odwrotnego – znajomości wartości znaleźć . Aby to zrobić, przejdźmy do takiej koncepcji, jak funkcja odwrotnego kursu, zgodnie z którą:
W artykule nie będziemy wyprowadzać powyższego wzoru, ale sprawdzimy to na liczbach z powyższego przykładu. Wiemy, że przy kursie 4 do 1 (), prawdopodobieństwo zajścia zdarzenia wynosi 0.8 (). Dokonajmy podstawienia: . Zbiega się to z naszymi wcześniejszymi wyliczeniami. Przejdźmy dalej.
W ostatnim kroku to wydedukowaliśmy , co oznacza, że możesz dokonać podstawienia w funkcji odwrotnego kursu. Otrzymujemy:
Podziel licznik i mianownik przez , następnie:
Na wszelki wypadek, żeby mieć pewność, że nigdzie się nie pomyliliśmy, dokonamy jeszcze jednego małego sprawdzenia. W kroku 2 to ustaliłem . Następnie zastępując wartość do funkcji reakcji logistycznej, spodziewamy się uzyskać . Podstawiamy i otrzymujemy:
Gratulacje, drogi czytelniku, właśnie wyprowadziliśmy i przetestowaliśmy funkcję odpowiedzi logistycznej. Spójrzmy na wykres funkcji.
Wykres 3 „Funkcja reakcji 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 spotkać także nazwę tej funkcji jako funkcja sigmoidalna. Wykres wyraźnie pokazuje, że główna zmiana prawdopodobieństwa przynależności obiektu do klasy zachodzi w stosunkowo niewielkim zakresie , skądś do .
Proponuję wrócić do naszego analityka kredytowego i pomóc mu obliczyć prawdopodobieństwo spłaty kredytu, w przeciwnym razie grozi mu pozostawienie bez premii :)
Tabela 2 „Potencjalni kredytobiorcy”
Kod generujący tabelę
proba = []
for i in df['f(w,x)']:
proba.append(round(logit(i),2))
df['Probability'] = proba
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision', 'Probability']]
Określiliśmy więc prawdopodobieństwo spłaty kredytu. Ogólnie rzecz biorąc, wydaje się to prawdą.
Rzeczywiście prawdopodobieństwo, że Wasia z pensją w wysokości 120.000 3.000 RUR będzie w stanie co miesiąc przekazywać bankowi 100 RUR, jest bliskie 0.3%. Nawiasem mówiąc, musimy zrozumieć, że bank może udzielić Leshy pożyczki, jeśli polityka banku przewiduje na przykład udzielanie kredytów klientom z prawdopodobieństwem spłaty kredytu większym niż, powiedzmy, XNUMX. Tyle, że w tym przypadku bank utworzy większą rezerwę na ewentualne straty.
Należy również zauważyć, że z pułapu odjęto stosunek wynagrodzenia do wynagrodzenia wynoszący co najmniej 3 i z marginesem w wysokości 5.000 XNUMX RUR. Dlatego nie mogliśmy użyć wektora wag w jego pierwotnej postaci . Musieliśmy znacznie zmniejszyć współczynniki i w tym przypadku podzieliliśmy każdy współczynnik przez 25.000 XNUMX, czyli w istocie skorygowaliśmy wynik. Zrobiono to jednak specjalnie, aby uprościć zrozumienie materiału na początkowym etapie. W życiu nie będziemy musieli wymyślać i dostosowywać współczynników, ale je znaleźć. W kolejnych częściach artykułu wyprowadzimy równania, za pomocą których dobierane są parametry .
04. Metoda najmniejszych kwadratów do wyznaczania wektora wag w funkcji odpowiedzi logistycznej
Znamy już tę metodę wybierania wektora wag jako metoda najmniejszych kwadratów (LSM) i właściwie, dlaczego nie użyjemy go w problemach klasyfikacji binarnej? Rzeczywiście nic nie stoi na przeszkodzie, aby skorzystać MNC, tylko ta metoda w problemach klasyfikacyjnych daje wyniki mniej dokładne niż Straty logistyczne. Ma to swoje teoretyczne podstawy. Spójrzmy najpierw na jeden prosty przykład.
Załóżmy, że nasze modele (przy użyciu MSE и Straty logistyczne) już rozpoczęliśmy wybieranie wektora wag i w pewnym momencie zatrzymaliśmy obliczenia. Nie ma znaczenia czy w środku, na końcu czy na początku, najważniejsze jest to, że mamy już pewne wartości wektora wag i załóżmy, że na tym etapie wektor wag w przypadku obu modeli nie ma różnic. Następnie weź otrzymane wagi i zamień je na funkcja reakcji logistycznej () dla jakiegoś obiektu należącego do klasy . Rozpatrujemy dwa przypadki, gdy zgodnie z wybranym wektorem wag nasz model jest bardzo błędny i odwrotnie – model ma dużą pewność, że obiekt należy do klasy . Zobaczmy, jakie kary zostaną wydane podczas korzystania MNC и Straty logistyczne.
Kod do obliczania kar w zależności od użytej 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_2
Przypadek pomyłki — model przypisuje obiekt do klasy z prawdopodobieństwem 0,01
Kara za użycie MNC będzie:
Kara za użycie Straty logistyczne będzie:
Przypadek silnego zaufania — model przypisuje obiekt do klasy z prawdopodobieństwem 0,99
Kara za użycie MNC będzie:
Kara za użycie Straty logistyczne będzie:
Przykład ten dobrze ilustruje, że w przypadku błędu dużego działa funkcja straty Utrata dziennika karze model znacznie bardziej niż MSE. Przyjrzyjmy się teraz teoretycznym podstawom korzystania z funkcji straty Utrata dziennika w problemach klasyfikacyjnych.
05. Metoda największej wiarygodności i regresja logistyczna
Zgodnie z obietnicą na początku artykuł jest pełen prostych przykładów. W studiu jest kolejny przykład i starzy goście - kredytobiorcy bankowi: Vasya, Fedya i Lesha.
Na wszelki wypadek, zanim rozwinę przykład, przypomnę, że w życiu mamy do czynienia z próbką treningową złożoną z tysięcy lub milionów obiektów o dziesiątkach lub setkach cech. Tutaj jednak liczby są brane tak, aby z łatwością zmieściły się w głowie początkującego analityka danych.
Wróćmy do przykładu. Wyobraźmy sobie, że dyrektor banku zdecydował się udzielić pożyczki wszystkim potrzebującym, mimo że algorytm kazał mu nie udzielać jej Leszy. A teraz minęło już wystarczająco dużo czasu i wiemy, który z trójki bohaterów spłacił pożyczkę, a który nie. Czego można było się spodziewać: Wasya i Fedya spłaciły pożyczkę, ale Lesha nie. Wyobraźmy sobie teraz, że ten wynik będzie dla nas nową próbą treningową, a jednocześnie to tak, jakby zniknęły wszelkie dane dotyczące czynników wpływających na prawdopodobieństwo spłaty kredytu (wynagrodzenie pożyczkobiorcy, wysokość miesięcznej raty). Wtedy intuicyjnie możemy założyć, że co trzeci kredytobiorca nie spłaci kredytu bankowi, czyli inaczej prawdopodobieństwo, że kolejny kredytobiorca spłaci kredyt . To intuicyjne założenie ma teoretyczne potwierdzenie i na nim się opiera metoda największej wiarygodności, często w literaturze nazywa się to zasada największego prawdopodobieństwa.
Najpierw zapoznajmy się z aparatem pojęciowym.
Prawdopodobieństwo pobierania próbek jest prawdopodobieństwem otrzymania dokładnie takiej próbki, otrzymania dokładnie takich obserwacji/wyników, tj. iloczyn prawdopodobieństw uzyskania każdego z wyników próby (przykładowo, czy pożyczka Wasyi, Fedyi i Leszy została spłacona, czy nie została spłacona w tym samym czasie).
Funkcja prawdopodobieństwa wiąże prawdopodobieństwo próbki z wartościami parametrów rozkładu.
W naszym przypadku próbą uczącą jest uogólniony schemat Bernoulliego, w którym zmienna losowa przyjmuje tylko dwie wartości: lub . Dlatego prawdopodobieństwo próbki można zapisać jako funkcję wiarygodności parametru w następujący sposób:
Powyższy wpis można zinterpretować następująco. Łączne prawdopodobieństwo, że Vasya i Fedya spłacą pożyczkę, jest równe , prawdopodobieństwo, że Lesha NIE spłaci pożyczki, jest równe (ponieważ NIE była to spłata kredytu), zatem łączne prawdopodobieństwo wszystkich trzech zdarzeń jest równe .
Metoda największej wiarygodności to metoda estymacji nieznanego parametru poprzez maksymalizację funkcje prawdopodobieństwa. W naszym przypadku musimy znaleźć taką wartość w którym osiąga maksimum.
Skąd właściwie pomysł – szukać wartości nieznanego parametru, przy której funkcja wiarygodności osiąga maksimum? Początki tego pomysłu wywodzą się z założenia, że próbka jest jedynym dostępnym nam źródłem wiedzy o populacji. Wszystko, co wiemy o populacji, jest reprezentowane w próbie. Dlatego jedyne, co możemy powiedzieć, to to, że próbka jest najdokładniejszym odzwierciedleniem dostępnej nam populacji. Musimy zatem znaleźć parametr, przy którym dostępna próbka staje się najbardziej prawdopodobna.
Oczywiście mamy do czynienia z problemem optymalizacyjnym, w którym musimy znaleźć ekstremum funkcji. Aby znaleźć ekstremum, należy wziąć pod uwagę warunek pierwszego rzędu, czyli przyrównać pochodną funkcji do zera i rozwiązać równanie ze względu na żądany parametr. Jednak znalezienie pochodnej iloczynu dużej liczby czynników może być zadaniem długotrwałym; aby tego uniknąć, istnieje specjalna technika - przejście na logarytm funkcje prawdopodobieństwa. Dlaczego takie przejście jest możliwe? Zwróćmy uwagę, że nie szukamy ekstremum samej funkcjioraz punkt ekstremalny, czyli wartość nieznanego parametru w którym osiąga maksimum. Po przejściu do logarytmu punkt ekstremum nie zmienia się (chociaż samo ekstremum będzie się różnić), ponieważ logarytm jest funkcją monotoniczną.
Zgodnie z powyższym kontynuujmy rozwój naszego przykładu dzięki pożyczkom od Vasyi, Fedyi i Leshy. Najpierw przejdźmy do logarytm funkcji wiarygodności:
Teraz możemy łatwo rozróżnić wyrażenie poprzez :
I na koniec rozważ warunek pierwszego rzędu - przyrównujemy pochodną funkcji do zera:
Tym samym nasz intuicyjny szacunek prawdopodobieństwa spłaty kredytu było teoretycznie uzasadnione.
Świetnie, ale co teraz zrobić z tą informacją? Jeżeli założymy, że co trzeci kredytobiorca nie zwróci pieniędzy bankowi, to ten ostatni nieuchronnie zbankrutuje. Zgadza się, ale tylko przy ocenie prawdopodobieństwa spłaty kredytu równego Nie wzięliśmy pod uwagę czynników wpływających na spłatę kredytu: wynagrodzenia kredytobiorcy i wysokości miesięcznej raty. Pamiętajmy, że wcześniej obliczyliśmy prawdopodobieństwo spłaty kredytu przez każdego klienta, biorąc pod uwagę te same czynniki. Logiczne jest, że otrzymaliśmy prawdopodobieństwa różne od stałego równego .
Określmy prawdopodobieństwo próbek:
Kod do obliczania prawdopodobieństwa 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 'Правдоподобие выборки при константном значении p=2/3:', round(likelihood(y,p_const),3)
print '****************************************************************************************************'
print 'Правдоподобие выборки при расчетном значении p:', round(likelihood(y,p_log_response),3)
Prawdopodobieństwo próbki przy stałej wartości :
Przykładowe prawdopodobieństwo przy obliczaniu prawdopodobieństwa spłaty kredytu z uwzględnieniem czynników :
Prawdopodobieństwo próbki z prawdopodobieństwem obliczonym w zależności od czynników okazało się wyższe niż prawdopodobieństwo przy stałej wartości prawdopodobieństwa. Co to znaczy? Sugeruje to, że wiedza o tych czynnikach pozwoliła na dokładniejsze dobranie prawdopodobieństwa spłaty kredytu dla każdego klienta. Dlatego też przy udzielaniu kolejnej pożyczki bardziej słuszne byłoby skorzystanie z zaproponowanego na końcu ust. 3 artykułu modelu oceny prawdopodobieństwa spłaty zadłużenia.
Ale jeśli chcemy maksymalizować funkcja wiarygodności próbki, to dlaczego nie zastosować jakiegoś algorytmu, który wygeneruje prawdopodobieństwa dla Wasyi, Fedyi i Leszy na przykład równe odpowiednio 0.99, 0.99 i 0.01. Być może taki algorytm będzie dobrze działał na próbie uczącej, ponieważ przybliży wartość prawdopodobieństwa próbki , ale po pierwsze, taki algorytm będzie najprawdopodobniej miał trudności z możliwością generalizacji, a po drugie, algorytm ten na pewno nie będzie liniowy. A jeśli metody walki z przetrenowaniem (równie słaba zdolność generalizacji) wyraźnie nie są uwzględnione w planie tego artykułu, to przejdźmy do drugiego punktu bardziej szczegółowo. Aby to zrobić, wystarczy odpowiedzieć na proste pytanie. Czy prawdopodobieństwo spłaty pożyczki przez Vasyę i Fedyę może być takie samo, biorąc pod uwagę znane nam czynniki? Z punktu widzenia zdrowej logiki oczywiście, że nie, nie może. Tak więc Wasia będzie płacić 2.5% swojej pensji miesięcznie na spłatę pożyczki, a Fedya - prawie 27,8%. Również na wykresie 2 „Klasyfikacja klientów” widzimy, że Wasia jest znacznie dalej od linii oddzielającej klasy niż Fedya. I wreszcie wiemy, że funkcja dla Vasyi i Fedyi przyjmuje różne wartości: 4.24 dla Wasyi i 1.0 dla Fedyi. Teraz, gdyby na przykład Fedya zarobił o rząd wielkości więcej lub poprosił o mniejszą pożyczkę, wówczas prawdopodobieństwo spłaty pożyczki dla Wasyi i Fedyi byłoby podobne. Innymi słowy, zależności liniowej nie da się oszukać. I jeśli faktycznie obliczyliśmy szanse i nie wzieliśmy ich z powietrza, śmiało możemy powiedzieć, że nasze wartości najlepiej pozwalają nam oszacować prawdopodobieństwo spłaty kredytu przez każdego pożyczkobiorcę, ale ponieważ zgodziliśmy się założyć, że wyznaczenie współczynników zostało przeprowadzone według wszystkich zasad, to wtedy tak założymy - nasze współczynniki pozwalają nam lepiej oszacować prawdopodobieństwo :)
Jednak odpuszczamy. W tej sekcji musimy zrozumieć, w jaki sposób wyznaczany jest wektor wag , co jest niezbędne do oceny prawdopodobieństwa spłaty kredytu przez każdego pożyczkobiorcę.
Podsumujmy pokrótce jakim arsenałem szukamy kursów :
1. Zakładamy, że związek pomiędzy zmienną docelową (wartością prognozy) a czynnikiem wpływającym na wynik jest liniowy. Z tego powodu jest używany funkcja regresji liniowej uprzejmy , którego linia dzieli obiekty (klientów) na klasy и lub (klienci, którzy są w stanie spłacić pożyczkę i ci, którzy nie są). W naszym przypadku równanie ma postać .
2. Używamy odwrotna funkcja logitowa uprzejmy aby określić prawdopodobieństwo, że obiekt należy do klasy .
3. Nasz zbiór treningowy traktujemy jako implementację uogólnioną Schematy Bernoulliego, czyli dla każdego obiektu generowana jest zmienna losowa, która z prawdopodobieństwem (własny dla każdego obiektu) przyjmuje wartość 1 iz prawdopodobieństwem - 0.
4. Wiemy, czego potrzebujemy, aby maksymalizować funkcja wiarygodności próbki biorąc pod uwagę przyjęte czynniki, aby dostępna próbka stała się jak najbardziej wiarygodna. Innymi słowy, musimy wybrać parametry, przy których próbka będzie najbardziej wiarygodna. W naszym przypadku wybranym parametrem jest prawdopodobieństwo spłaty kredytu , co z kolei zależy od nieznanych współczynników . Musimy więc znaleźć taki wektor wag , przy którym prawdopodobieństwo próbki będzie największe.
5. Wiemy, co maksymalizować przykładowe funkcje wiarygodności może być użyty metoda największej wiarygodności. Znamy wszystkie trudne sztuczki związane z tą metodą.
Okazuje się, że jest to ruch wieloetapowy :)
Teraz pamiętajmy, że na samym początku artykułu chcieliśmy wyprowadzić dwa rodzaje funkcji straty Straty logistyczne w zależności od sposobu wyznaczenia klas obiektów. Tak się złożyło, że w problemach klasyfikacyjnych z dwiema klasami klasy te oznacza się jako и lub . W zależności od zapisu wyjście będzie miało odpowiednią funkcję straty.
Przypadek 1. Klasyfikacja obiektów na и
Wcześniej przy ustalaniu prawdopodobieństwa próby, w której prawdopodobieństwo spłaty zadłużenia przez kredytobiorcę obliczano w oparciu o czynniki i podane współczynniki , zastosowaliśmy wzór:
Faktycznie jest znaczenie funkcje odpowiedzi logistycznej dla danego wektora wag
Zatem nic nie stoi na przeszkodzie, aby zapisać funkcję wiarygodności próbki w następujący sposób:
Zdarza się, że niektórym początkującym analitykom trudno jest od razu zrozumieć, jak działa ta funkcja. Spójrzmy na 4 krótkie przykłady, które wszystko wyjaśnią:
1. jeśli (czyli według próbki uczącej obiekt należy do klasy +1) i nasz algorytm określa prawdopodobieństwo zaklasyfikowania obiektu do klasy równe 0.9, wówczas ten fragment prawdopodobieństwa próbki zostanie obliczony w następujący sposób:
2. jeśli I , to obliczenia będą wyglądać następująco:
3. jeśli I , to obliczenia będą wyglądać następująco:
4. jeśli I , to obliczenia będą wyglądać następująco:
Jest oczywiste, że funkcja wiarygodności zostanie zmaksymalizowana w przypadkach 1 i 3 lub w przypadku ogólnym - przy poprawnie odgadniętych wartościach prawdopodobieństw przyporządkowania obiektu do klasy .
Z uwagi na to, że przy określaniu prawdopodobieństwa przypisania obiektu do klasy Nie znamy tylko współczynników , to będziemy ich szukać. Jak wspomniano powyżej, jest to problem optymalizacyjny, w którym najpierw należy znaleźć pochodną funkcji wiarygodności po wektorze wag . Najpierw jednak warto uprościć zadanie dla siebie: będziemy szukać pochodnej logarytmu funkcje prawdopodobieństwa.
Dlaczego po logarytmach w funkcje błędów logistycznych, zmieniliśmy znak z na . Wszystko jest proste, ponieważ w problemach oceny jakości modelu zwyczajowo minimalizuje się wartość funkcji, pomnożyliśmy prawą stronę wyrażenia przez i odpowiednio zamiast maksymalizować, teraz minimalizujemy funkcję.
Właściwie, właśnie teraz, na twoich oczach, funkcja straty została starannie wyprowadzona - Straty logistyczne dla zestawu treningowego z dwiema klasami: и .
Teraz, aby znaleźć współczynniki, wystarczy znaleźć pochodną funkcje błędów logistycznych a następnie wykorzystując metody optymalizacji numerycznej, takie jak opadanie gradientowe lub opadanie gradientowe stochastyczne, wybrać najbardziej optymalne współczynniki . Jednak biorąc pod uwagę znaczną objętość artykułu, proponuje się przeprowadzić różnicowanie samodzielnie, w przeciwnym razie będzie to temat na następny artykuł z dużą ilością arytmetyki bez tak szczegółowych przykładów.
Przypadek 2. Klasyfikacja obiektów na и
Podejście tutaj będzie takie samo jak w przypadku klas и , ale samą ścieżkę do wyniku funkcji straty Straty logistyczne, będzie bardziej ozdobny. Zacznijmy. W przypadku funkcji wiarygodności użyjemy operatora "Jeśli następnie...". To znaczy, jeśli Obiekt th należy do klasy , następnie do obliczenia prawdopodobieństwa próbki używamy prawdopodobieństwa , jeśli obiekt należy do klasy , następnie podstawiamy pod prawdopodobieństwo . Tak wygląda funkcja prawdopodobieństwa:
Opiszmy na palcach jak to działa. Rozważmy 4 przypadki:
1. jeśli и , wówczas prawdopodobieństwo próbkowania „zniknie”
2. jeśli и , wówczas prawdopodobieństwo próbkowania „zniknie”
3. jeśli и , wówczas prawdopodobieństwo próbkowania „zniknie”
4. jeśli и , wówczas prawdopodobieństwo próbkowania „zniknie”
Jest oczywiste, że w przypadkach 1 i 3, gdy algorytm poprawnie określił prawdopodobieństwa, funkcja prawdopodobieństwa zostanie zmaksymalizowany, czyli dokładnie to chcieliśmy uzyskać. Jednak takie podejście jest dość kłopotliwe i następnie rozważymy bardziej zwartą notację. Ale najpierw logarytmujmy funkcję wiarygodności ze zmianą znaku, ponieważ teraz ją zminimalizujemy.
Zamiast tego zamieńmy wyrażenie :
Uprośćmy odpowiedni wyraz pod logarytmem, używając prostych technik arytmetycznych i otrzymamy:
Teraz czas pozbyć się operatora "Jeśli następnie...". Należy pamiętać, że gdy obiekt należy do klasy , następnie w wyrażeniu pod logarytmem w mianowniku, podniesiony do potęgi , jeśli obiekt należy do klasy , następnie $e$ podnosi się do potęgi . Dlatego zapis stopnia można uprościć, łącząc oba przypadki w jeden: . Następnie funkcja błędu logistycznego przyjmie postać:
Zgodnie z zasadami logarytmu odwracamy ułamek i wystawiamy znak „" (minus) dla logarytmu otrzymujemy:
Oto funkcja straty straty logistyczne, który jest używany w zbiorze treningowym z obiektami przypisanymi do klas: и .
Cóż, w tym momencie żegnam się i kończymy artykuł.
Materiały pomocnicze
1. Literatura
1) Stosowana analiza regresji / N. Draper, G. Smith - wyd. 2. - M .: Finanse i statystyki, 1986 (przetłumaczone z angielskiego)
2) Teoria prawdopodobieństwa i statystyka matematyczna / V.E. Gmurman – wyd. 9. - M.: Szkoła Wyższa, 2003
3) Teoria prawdopodobieństwa / N.I. Czernowa – Nowosybirsk: Nowosybirski Uniwersytet Państwowy, 2007
4) Analityka biznesowa: od danych do wiedzy / Paklin N. B., Oreshkov V. I. - wyd. 2. — Petersburg: Piotr, 2013
5) Data Science Nauka danych od podstaw / Joel Gras – St. Petersburg: BHV Petersburg, 2017
6) Statystyka praktyczna dla specjalistów Data Science / P. Bruce, E. Bruce – St. Petersburg: BHV Petersburg, 2018
2. Wykłady, kursy (wideo)
1)
2)
3)
4)
5)
3. Źródła internetowe
1)
2)
3)
4)
6)
7)
Źródło: www.habr.com