V tomto článku rozebereme teoretické výpočty transformace lineární regresní funkce в funkce inverzní logitové transformace (jinak nazývaná funkce logistické odezvy). Pak pomocí arzenálu metoda maximální pravděpodobnostiv souladu s modelem logistické regrese odvodíme ztrátovou funkci Logistická ztráta, nebo jinými slovy, nadefinujeme funkci, pomocí které se volí parametry váhového vektoru v modelu logistické regrese .
Přehled článku:
- Zopakujme lineární vztah mezi dvěma proměnnými
- Pojďme identifikovat potřebu transformace lineární regresní funkce в funkce logistické odezvy
- Proveďme transformace a výstup funkce logistické odezvy
- Zkusme pochopit, proč je metoda nejmenších čtverců špatná při výběru parametrů funkce Logistická ztráta
- Používáme metoda maximální pravděpodobnosti pro určení funkce pro výběr parametrů :
5.1. Případ 1: funkce Logistická ztráta pro objekty s označením třídy 0 и 1:
5.2. Případ 2: funkce Logistická ztráta pro objekty s označením třídy -1 и +1:
Článek je plný jednoduchých příkladů, ve kterých lze všechny výpočty snadno provést ústně nebo na papíře; v některých případech může být vyžadována kalkulačka. Tak se připrav :)
Tento článek je primárně určen datovým vědcům s počáteční úrovní znalostí základů strojového učení.
Článek také poskytne kód pro kreslení grafů a výpočty. Veškerý kód je napsán v jazyce python 2.7. Předem vysvětlím „novost“ použité verze – to je jedna z podmínek pro absolvování známého kurzu z Yandex na neméně známé online vzdělávací platformě Coursera, a jak by se dalo předpokládat, materiál byl připraven na základě tohoto kurzu.
01. Přímá závislost
Je vcelku rozumné položit si otázku – co s tím má společného lineární závislost a logistická regrese?
Je to jednoduché! Logistická regrese je jedním z modelů, které patří do lineárního klasifikátoru. Jednoduše řečeno, úkolem lineárního klasifikátoru je předpovídat cílové hodnoty z proměnných (regresorů) . Předpokládá se, že závislost mezi charakteristikami a cílové hodnoty lineární. Odtud název klasifikátoru - lineární. Velmi zhruba řečeno, model logistické regrese je založen na předpokladu, že mezi charakteristikami existuje lineární vztah a cílové hodnoty . Toto je spojení.
V ateliéru je první příklad a je to správně o přímočaré závislosti studovaných veličin. V procesu přípravy článku jsem narazil na příklad, který už řadu lidí vyvedl z míry - závislost proudu na napětí („Aplikovaná regresní analýza“, N. Draper, G. Smith). Podíváme se na to i zde.
V souladu s Ohmův zákon:
Kde - proudová síla, - Napětí, - odpor.
Kdybychom nevěděli Ohmův zákon, pak bychom mohli závislost najít empiricky změnou a měření , při podpoře pevný. Pak bychom viděli graf závislosti z dává víceméně přímou čáru přes počátek. Říkáme „víceméně“, protože ačkoli je vztah ve skutečnosti přesný, naše měření mohou obsahovat malé chyby, a proto body na grafu nemusí padat přesně na přímku, ale budou kolem ní náhodně rozptýleny.
Graf 1 „Závislost“ z »
Kód kreslení grafu
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. Potřeba transformace rovnice lineární regrese
Podívejme se na další příklad. Představme si, že pracujeme v bance a naším úkolem je v závislosti na určitých faktorech určit pravděpodobnost, že dlužník úvěr splatí. Abychom tento úkol zjednodušili, vezmeme v úvahu pouze dva faktory: měsíční plat dlužníka a výši měsíční splátky úvěru.
Úloha je velmi podmíněná, ale s tímto příkladem pochopíme, proč nestačí použít lineární regresní funkcea také zjistěte, jaké transformace je třeba s funkcí provést.
Vraťme se k příkladu. Rozumí se, že čím vyšší je plat, tím více bude dlužník schopen měsíčně přidělit na splácení úvěru. Zároveň bude tento vztah pro určité platové rozpětí značně lineární. Vezměme například rozsah platů od 60.000 200.000 RUR do 3 5.000 RUR a předpokládejme, že v uvedeném platovém rozsahu je závislost velikosti měsíční platby na velikosti platu lineární. Řekněme, že pro zadaný rozsah mezd se ukázalo, že poměr plat/platba nemůže klesnout pod XNUMX a dlužník musí mít v rezervě stále XNUMX XNUMX RUR. A pouze v tomto případě budeme předpokládat, že dlužník bance úvěr splatí. Potom bude mít rovnice lineární regrese tvar:
kde , , , - výplata - dlužník, - splátka půjčky - dlužník.
Dosazení platu a splátky úvěru pevnými parametry do rovnice Můžete se rozhodnout, zda půjčku vydáte nebo odmítnete.
Při pohledu do budoucna poznamenáváme, že s danými parametry lineární regresní funkce, použito v funkce logistické odezvy vytvoří velké hodnoty, které zkomplikují výpočty pro určení pravděpodobnosti splacení úvěru. Proto se navrhuje snížit naše koeficienty, řekněme, 25.000 XNUMXkrát. Tato transformace v koeficientech nezmění rozhodnutí o poskytnutí úvěru. Pamatujme si tento bod do budoucna, ale nyní, aby bylo ještě jasnější, o čem mluvíme, se podívejme na situaci se třemi potenciálními dlužníky.
Tabulka 1 „Potenciální dlužníci“
Kód pro generování tabulky
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']]
V souladu s údaji v tabulce chce Vasya s platem 120.000 3.000 RUR získat půjčku, aby ji mohl měsíčně splácet ve výši 5.000 XNUMX RUR. Zjistili jsme, že pro schválení půjčky musí Vasyin plat překročit trojnásobek částky platby a stále musí zůstat XNUMX XNUMX RUR. Vasya splňuje tento požadavek: . Zbývá dokonce 106.000 XNUMX RUR. Nehledě na to, že při kalkulaci snížili jsme šance 25.000 XNUMXx výsledek stejný - půjčka může být schválena. Fedya také dostane půjčku, ale Lesha, přestože dostává nejvíce, bude muset krotit své choutky.
Pro tento případ nakreslíme graf.
Graf 2 „Klasifikace dlužníků“
Kód pro kreslení grafu
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()
Takže naše přímka, postavená v souladu s funkcí , odděluje „špatné“ dlužníky od „dobrých“. Ti dlužníci, jejichž přání se neshodují s jejich možnostmi, jsou nad čárou (Lesha), zatímco ti, kteří jsou podle parametrů našeho modelu schopni splácet půjčku, jsou pod čarou (Vasya a Fedya). Jinými slovy, můžeme říci toto: naše přímá linie rozděluje dlužníky do dvou tříd. Označme je takto: do třídy Ty dlužníky, kteří s největší pravděpodobností půjčku splatí, zařadíme jako nebo Zařadíme ty dlužníky, kteří s největší pravděpodobností nebudou schopni úvěr splácet.
Shrňme si závěry z tohoto jednoduchého příkladu. Vezměme si bod a dosazením souřadnic bodu do odpovídající rovnice přímky , zvažte tři možnosti:
- Pokud je bod pod přímkou a přiřadíme jej do třídy , pak hodnotu funkce bude pozitivní od na . To znamená, že můžeme předpokládat, že pravděpodobnost splacení úvěru je v rámci . Čím větší je hodnota funkce, tím vyšší je pravděpodobnost.
- Pokud je bod nad přímkou a přiřadíme jej do třídy nebo , pak bude hodnota funkce záporná od na . Pak budeme předpokládat, že pravděpodobnost splacení dluhu je v rámci a čím větší je absolutní hodnota funkce, tím vyšší je naše spolehlivost.
- Bod je na přímce, na hranici mezi dvěma třídami. V tomto případě hodnota funkce budou rovné a pravděpodobnost splacení úvěru se rovná .
Nyní si představme, že nemáme dva faktory, ale desítky a ne tři, ale tisíce dlužníků. Pak místo přímky budeme mít m-rozměrný rovina a koeficienty nebudeme vytahováni ze vzduchu, ale odvozeni podle všech pravidel a na základě nashromážděných údajů o dlužníkech, kteří půjčku splatili nebo nesplatili. A skutečně, všimněte si, že nyní vybíráme dlužníky pomocí již známých koeficientů . Ve skutečnosti je úkolem logistického regresního modelu přesně určit parametry , při které funguje hodnota ztráty Logistická ztráta bude směřovat k minimu. Ale o tom, jak se vektor počítá , více se dozvíme v 5. sekci článku. Mezitím se vracíme do země zaslíbené – k našemu bankéři a jeho třem klientům.
Díky funkci víme, komu může být poskytnuta půjčka a komu je třeba odmítnout. Ale s takovými informacemi nemůžete jít za ředitelem, protože od nás chtěli získat pravděpodobnost splacení půjčky každým dlužníkem. Co dělat? Odpověď je jednoduchá – musíme funkci nějak transformovat , jehož hodnoty leží v rozmezí na funkci, jejíž hodnoty budou ležet v rozsahu . A taková funkce existuje, říká se jí funkce logistické odezvy nebo inverzní logitová transformace. Setkat:
Podívejme se krok za krokem, jak to funguje funkce logistické odezvy. Všimněte si, že půjdeme opačným směrem, tzn. budeme předpokládat, že známe hodnotu pravděpodobnosti, která leží v rozmezí od na a poté tuto hodnotu „rozvineme“ na celý rozsah čísel na .
03. Odvodíme funkci logistické odezvy
Krok 1. Převeďte hodnoty pravděpodobnosti na rozsah
Při transformaci funkce в funkce logistické odezvy Necháme našeho úvěrového analytika na pokoji a místo toho si prohlédneme sázkové kanceláře. Ne, samozřejmě nebudeme sázet, vše, co nás zajímá, je význam výrazu, například šance je 4 ku 1. Kurz, známý všem sázejícím, je poměr „úspěchů“ k „ selhání“. Z hlediska pravděpodobnosti jsou šance pravděpodobnost, že k události dojde, dělená pravděpodobností, že událost nenastane. Zapišme si vzorec pro pravděpodobnost výskytu události :
Kde - pravděpodobnost výskytu události, — pravděpodobnost, že událost nenastane
Například pokud pravděpodobnost, že mladý, silný a hravý kůň přezdívaný „Veterok“ porazí na dostihu starou a ochablou stařenu jménem „Matilda“, je rovna , pak budou šance na úspěch pro „Veterok“. к a naopak, když známe šance, nebude pro nás těžké vypočítat pravděpodobnost :
Naučili jsme se tedy „překládat“ pravděpodobnost na šance, které nabývají hodnot na . Udělejme ještě jeden krok a naučme se „přeložit“ pravděpodobnost na celou číselnou řadu na .
Krok 2. Převeďte hodnoty pravděpodobnosti na rozsah
Tento krok je velmi jednoduchý – vezměme logaritmus pravděpodobnosti na základnu Eulerova čísla a dostaneme:
Nyní víme, že pokud a poté vypočítejte hodnotu bude velmi jednoduchý a navíc by měl být pozitivní: . To je pravda.
Ze zvědavosti si ověříme, co kdyby , pak očekáváme zápornou hodnotu . Kontrolujeme: . To je správně.
Nyní víme, jak převést hodnotu pravděpodobnosti z na po celé číselné řadě od na . V dalším kroku uděláme opak.
Prozatím poznamenáváme, že v souladu s pravidly logaritmu, znát hodnotu funkce , můžete si spočítat kurz:
Tento způsob stanovení kurzů se nám bude hodit v dalším kroku.
Krok 3. Odvoďme vzorec k určení
Tak jsme se učili, věděli , najít hodnoty funkcí . Ve skutečnosti však potřebujeme pravý opak – znát hodnotu najít . Abychom to udělali, pojďme k takovému konceptu, jako je funkce inverzních šancí, podle které:
V článku nebudeme odvodit výše uvedený vzorec, ale zkontrolujeme jej pomocí čísel z výše uvedeného příkladu. Víme, že s pravděpodobností 4 ku 1 (), pravděpodobnost výskytu události je 0.8 (). Udělejme náhradu: . To se shoduje s našimi výpočty provedenými dříve. Pokračujme.
V posledním kroku jsme to odvodili , což znamená, že můžete provést substituci ve funkci inverzních šancí. Dostaneme:
Čitatele i jmenovatele vydělte , Pak:
Pro jistotu, abychom se ujistili, že jsme nikde neudělali chybu, uděláme ještě jednu malou kontrolu. V kroku 2 jsme pro to určil . Poté dosaďte hodnotu do funkce logistické odezvy, očekáváme, že dostaneme . Nahradíme a dostaneme:
Gratulujeme, milý čtenáři, právě jsme odvodili a otestovali funkci logistické odezvy. Podívejme se na graf funkce.
Graf 3 „Funkce logistické odezvy“
Kód pro kreslení grafu
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()
V literatuře můžete také najít název této funkce jako sigmoidní funkce. Graf jasně ukazuje, že hlavní změna pravděpodobnosti objektu patřícího do třídy nastává v relativně malém rozmezí , odněkud na .
Navrhuji vrátit se k našemu úvěrovému analytikovi a pomoci mu spočítat pravděpodobnost splacení úvěru, jinak riskuje, že zůstane bez bonusu :)
Tabulka 2 „Potenciální dlužníci“
Kód pro generování tabulky
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']]
Určili jsme tedy pravděpodobnost splacení úvěru. Obecně se zdá, že je to pravda.
Pravděpodobnost, že Vasya s platem 120.000 3.000 RUR bude moci dát bance 100 0.3 RUR každý měsíc, se skutečně blíží XNUMX%. Mimochodem, musíme pochopit, že banka může poskytnout půjčku Leshovi, pokud její politika umožňuje například půjčování klientům s pravděpodobností splacení půjčky vyšší než, řekněme, XNUMX. Jde jen o to, že v tomto případě si banka vytvoří větší rezervu na případné ztráty.
Je třeba také poznamenat, že poměr platu k platu ve výši alespoň 3 as rozpětím 5.000 XNUMX RUR byl převzat ze stropu. Proto jsme nemohli použít vektor vah v původní podobě . Potřebovali jsme velmi snížit koeficienty a v tomto případě jsme každý koeficient vydělili 25.000 XNUMX, to znamená, že jsme v podstatě upravili výsledek. Ale to bylo provedeno speciálně pro zjednodušení porozumění materiálu v počáteční fázi. V životě nebudeme potřebovat koeficienty vymýšlet a upravovat, ale nacházet je. V dalších částech článku odvodíme rovnice, kterými se parametry volí .
04. Metoda nejmenších čtverců pro určení vektoru vah ve funkci logistické odezvy
Tuto metodu pro výběr vektoru vah již známe Jak metoda nejmenších čtverců (LSM) a vlastně, proč to pak nepoužijeme v problémech binární klasifikace? Ve skutečnosti vám nic nebrání v používání MNC, pouze tato metoda v klasifikačních problémech poskytuje výsledky, které jsou méně přesné než Logistická ztráta. Existuje pro to teoretický základ. Podívejme se nejprve na jeden jednoduchý příklad.
Předpokládejme, že naše modely (s použitím MSE и Logistická ztráta) již začali s výběrem vektoru vah a výpočet jsme v určitém kroku zastavili. Nezáleží na tom, zda uprostřed, na konci nebo na začátku, hlavní je, že již máme nějaké hodnoty vektoru vah a předpokládejme, že v tomto kroku vektor vah u obou modelů nejsou žádné rozdíly. Poté vezměte výsledné závaží a vložte je do funkce logistické odezvy () pro nějaký objekt, který patří do třídy . Zkoumáme dva případy, kdy v souladu se zvoleným vektorem vah je náš model velmi chybný a naopak - model je velmi jistý, že objekt patří do třídy . Podívejme se, jaké pokuty budou uděleny při použití MNC и Logistická ztráta.
Kód pro výpočet sankcí v závislosti na použité ztrátové funkci
# класс объекта
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
Případ omylu — model přiřadí objekt třídě s pravděpodobností 0,01
Pokuta za použití MNC bude:
Pokuta za použití Logistická ztráta bude:
Případ silné důvěry — model přiřadí objekt třídě s pravděpodobností 0,99
Pokuta za použití MNC bude:
Pokuta za použití Logistická ztráta bude:
Tento příklad dobře ilustruje, že v případě hrubé chyby funguje ztráta Log Loss penalizuje model výrazně více než MSE. Pojďme nyní porozumět teoretickým základům použití ztrátové funkce Log Loss v klasifikačních problémech.
05. Metoda maximální věrohodnosti a logistická regrese
Jak bylo slíbeno na začátku, článek je plný jednoduchých příkladů. Ve studiu je další příklad a staří hosté - bankovní dlužníci: Vasya, Fedya a Lesha.
Jen pro případ, před vývojem příkladu mi dovolte připomenout, že v životě máme co do činění s trénovacím vzorkem tisíců nebo milionů objektů s desítkami nebo stovkami funkcí. Zde jsou však čísla brána tak, aby se snadno vešla do hlavy začínajícího datového vědce.
Vraťme se k příkladu. Představme si, že se ředitel banky rozhodl poskytnout půjčku každému v nouzi, přestože mu algoritmus řekl, aby ji Leshovi neposkytoval. A nyní uplynulo dost času a my víme, který ze tří hrdinů půjčku splatil a kdo ne. Co se dalo očekávat: Vasya a Fedya splatili půjčku, ale Lesha ne. Nyní si představme, že tento výsledek pro nás bude novým tréninkovým vzorkem a zároveň jakoby zmizely všechny údaje o faktorech ovlivňujících pravděpodobnost splacení úvěru (plat dlužníka, výše měsíční splátky). Intuitivně pak můžeme předpokládat, že každý třetí dlužník nesplatí úvěr bance, nebo jinými slovy pravděpodobnost, že úvěr splatí další dlužník . Tento intuitivní předpoklad má teoretické potvrzení a je založen na metoda maximální pravděpodobnosti, často se v literatuře nazývá princip maximální pravděpodobnosti.
Nejprve se seznámíme s pojmovým aparátem.
Pravděpodobnost odběru vzorků je pravděpodobnost získání přesně takového vzorku, získání přesně takových pozorování/výsledků, tzn. součin pravděpodobností získání každého z výsledků vzorku (například zda byla půjčka Vasya, Fedya a Lesha splacena nebo nebyla splacena současně).
Pravděpodobnostní funkce vztahuje pravděpodobnost vzorku k hodnotám distribučních parametrů.
V našem případě je trénovací vzorek zobecněné Bernoulliho schéma, ve kterém náhodná veličina nabývá pouze dvou hodnot: nebo . Proto může být vzorková pravděpodobnost zapsána jako pravděpodobnostní funkce parametru takto:
Výše uvedený záznam lze interpretovat následovně. Společná pravděpodobnost, že Vasya a Fedya půjčku splatí, se rovná , pravděpodobnost, že Lesha NEBUDE půjčku splácet, se rovná (protože se NEJEDNALO o splátku úvěru), proto je společná pravděpodobnost všech tří událostí stejná .
Metoda maximální pravděpodobnosti je metoda pro odhad neznámého parametru pomocí maximalizace pravděpodobnostní funkce. V našem případě musíme takovou hodnotu najít na které dosáhne svého maxima.
Odkud pochází skutečná myšlenka – hledat hodnotu neznámého parametru, při které věrohodnostní funkce dosahuje maxima? Původ myšlenky pramení z myšlenky, že vzorek je jediný zdroj znalostí, který máme o populaci k dispozici. Ve vzorku je zastoupeno vše, co o populaci víme. Můžeme tedy říci pouze to, že vzorek je nejpřesnějším odrazem populace, kterou máme k dispozici. Proto musíme najít parametr, při kterém se dostupný vzorek stane nejpravděpodobnějším.
Je zřejmé, že máme co do činění s optimalizačním problémem, ve kterém potřebujeme najít extrémní bod funkce. Pro nalezení extremního bodu je nutné uvažovat podmínku prvního řádu, tedy srovnat derivaci funkce s nulou a řešit rovnici s ohledem na požadovaný parametr. Hledání derivace součinu velkého množství faktorů však může být zdlouhavý úkol, aby se tomu zabránilo, existuje speciální technika - přepnutí na logaritmus pravděpodobnostní funkce. Proč je takový přechod možný? Věnujme pozornost tomu, že nehledáme extrém funkce samotné, a extrémní bod, tedy hodnotu neznámého parametru na které dosáhne svého maxima. Při přechodu na logaritmus se bod extrému nemění (ačkoli samotný extrém se bude lišit), protože logaritmus je monotónní funkce.
Pojďme, v souladu s výše uvedeným, dále rozvíjet náš příklad s půjčkami od Vasya, Fedya a Lesha. Nejprve přejděme k logaritmus věrohodnostní funkce:
Nyní můžeme výraz snadno odlišit podle :
A nakonec zvažte podmínku prvního řádu - derivaci funkce přirovnáme k nule:
Tedy náš intuitivní odhad pravděpodobnosti splacení úvěru byl teoreticky oprávněný.
Skvělé, ale co teď máme s touto informací dělat? Pokud předpokládáme, že každý třetí dlužník peníze bance nevrátí, pak tato banka nevyhnutelně zkrachuje. To je pravda, ale pouze při posuzování pravděpodobnosti splacení úvěru rovné Nebrali jsme v úvahu faktory ovlivňující splácení úvěru: mzdu dlužníka a výši měsíční splátky. Připomeňme, že jsme dříve počítali pravděpodobnost splacení úvěru každým klientem s přihlédnutím ke stejným faktorům. Je logické, že jsme dostali pravděpodobnosti odlišné od konstanty rovné .
Pojďme definovat pravděpodobnost vzorků:
Kód pro výpočet pravděpodobnosti vzorku
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)
Pravděpodobnost vzorku při konstantní hodnotě :
Vzorová pravděpodobnost při výpočtu pravděpodobnosti splacení úvěru s přihlédnutím k faktorům :
Pravděpodobnost vzorku s pravděpodobností vypočítanou v závislosti na faktorech se ukázala být vyšší než pravděpodobnost s konstantní hodnotou pravděpodobnosti. Co to znamená? To naznačuje, že znalost faktorů umožnila přesněji vybrat pravděpodobnost splacení úvěru u každého klienta. Při poskytování další půjčky by proto bylo správnější použít model navržený na konci části 3 článku pro posouzení pravděpodobnosti splacení dluhu.
Ale pak, pokud chceme maximalizovat vzorová věrohodnostní funkce, tak proč nepoužít nějaký algoritmus, který vytvoří pravděpodobnosti například pro Vasyu, Fedyu a Leshu rovnající se 0.99, 0.99 a 0.01. Možná bude takový algoritmus fungovat dobře na trénovacím vzorku, protože přiblíží hodnotu pravděpodobnosti vzorku , ale za prvé, takový algoritmus bude mít s největší pravděpodobností potíže se schopností zobecnění a za druhé tento algoritmus rozhodně nebude lineární. A pokud metody boje s přetrénováním (stejně slabá schopnost generalizace) zjevně nejsou zahrnuty v plánu tohoto článku, projdeme si druhý bod podrobněji. Chcete-li to provést, stačí odpovědět na jednoduchou otázku. Může být pravděpodobnost, že Vasya a Fedya splatí půjčku, stejná, vezmeme-li v úvahu nám známé faktory? Z hlediska zvukové logiky samozřejmě ne, nemůže. Takže Vasya bude platit 2.5% svého platu měsíčně na splácení úvěru a Fedya - téměř 27,8%. Také v grafu 2 „Klasifikace klientů“ vidíme, že Vasya je mnohem dále od čáry oddělující třídy než Fedya. A konečně víme, že funkce pro Vasya a Fedya nabývá různých hodnot: 4.24 pro Vasyu a 1.0 pro Fedyu. Pokud by nyní například Fedya vydělal řádově více nebo požádal o menší půjčku, pak by pravděpodobnosti splacení půjčky pro Vasyu a Fedyu byly podobné. Jinými slovy, lineární závislost nelze oklamat. A jestli jsme skutečně spočítali kurzy a nevzali jsme je z ničeho, mohli bychom bezpečně říci, že naše hodnoty nejlépe nám umožní odhadnout pravděpodobnost splacení úvěru každým dlužníkem, ale jelikož jsme souhlasili s tím, že stanovení koeficientů bylo provedeno podle všech pravidel, pak budeme předpokládat - naše koeficienty nám umožňují lépe odhadnout pravděpodobnost :)
To jsme však odbočili. V této části musíme pochopit, jak se určuje vektor vah , který je nezbytný pro posouzení pravděpodobnosti splacení úvěru každým dlužníkem.
Pojďme si krátce shrnout, s jakým arzenálem hledáme šance :
1. Předpokládáme, že vztah mezi cílovou proměnnou (hodnotou predikce) a faktorem ovlivňujícím výsledek je lineární. Z tohoto důvodu se používá lineární regresní funkce druh , jehož linie rozděluje objekty (klienty) do tříd и nebo (klienti, kteří jsou schopni úvěr splácet a ti, kteří nejsou). V našem případě má rovnice tvar .
2. Používáme inverzní logit funkce druh určit pravděpodobnost, že objekt patří do třídy .
3. Náš tréninkový soubor považujeme za implementaci zobecněného Bernoulliho schémata, to znamená, že pro každý objekt je generována náhodná veličina, která s pravděpodobností (pro každý objekt vlastní) nabývá hodnoty 1 as pravděpodobností - 0.
4. Víme, co potřebujeme k maximalizaci vzorová věrohodnostní funkce zohledněním přijatých faktorů tak, aby se dostupný vzorek stal nejvěrohodnějším. Jinými slovy, musíme vybrat parametry, při kterých bude vzorek nejvěrohodnější. V našem případě je zvoleným parametrem pravděpodobnost splacení úvěru , což zase závisí na neznámých koeficientech . Potřebujeme tedy najít takový vektor vah , při kterém bude pravděpodobnost vzorku maximální.
5. Víme, co maximalizovat ukázkové věrohodnostní funkce Můžete použít metoda maximální pravděpodobnosti. A známe všechny záludné triky, jak s touto metodou pracovat.
Takhle to vypadá na vícekrokový krok :)
Nyní si pamatujte, že na samém začátku článku jsme chtěli odvodit dva typy ztrátových funkcí Logistická ztráta v závislosti na tom, jak jsou určeny třídy objektů. Stalo se, že v klasifikačních úlohách se dvěma třídami jsou třídy označeny jako и nebo . V závislosti na notaci bude mít výstup odpovídající ztrátovou funkci.
Případ 1. Klasifikace objektů do и
Dříve při určování pravděpodobnosti vzorku, ve kterém byla pravděpodobnost splacení dluhu dlužníkem vypočtena na základě faktorů a daných koeficientů , použili jsme vzorec:
Skutečně je smysl funkce logistické odezvy pro daný vektor vah
Pak nám nic nebrání napsat vzorovou pravděpodobnostní funkci následovně:
Stává se, že někdy je pro některé začínající analytiky obtížné okamžitě pochopit, jak tato funkce funguje. Podívejme se na 4 krátké příklady, které vše objasní:
1. Jestliže (tj. podle trénovacího vzorku objekt patří do třídy +1) a náš algoritmus určuje pravděpodobnost zařazení objektu do třídy rovna 0.9, pak se pravděpodobnost této části vzorku vypočítá takto:
2. Jestliže a , pak bude výpočet vypadat takto:
3. Jestliže a , pak bude výpočet vypadat takto:
4. Jestliže a , pak bude výpočet vypadat takto:
Je zřejmé, že věrohodnostní funkce bude maximalizována v případech 1 a 3 nebo v obecném případě - se správně uhádnutými hodnotami pravděpodobností přiřazení objektu do třídy .
Vzhledem k tomu, že při určování pravděpodobnosti přiřazení objektu do třídy Jen neznáme koeficienty , pak je budeme hledat. Jak bylo uvedeno výše, jedná se o optimalizační problém, ve kterém nejprve musíme najít derivaci věrohodnostní funkce vzhledem k vektoru vah. . Nejprve však má smysl si tento úkol zjednodušit: budeme hledat derivaci logaritmu pravděpodobnostní funkce.
Proč po logaritmu, in logistické chybové funkce, změnili jsme znamení z na . Vše je jednoduché, protože v problémech posuzování kvality modelu je obvyklé minimalizovat hodnotu funkce, vynásobili jsme pravou stranu výrazu a podle toho místo maximalizace nyní funkci minimalizujeme.
Vlastně právě teď, před tvýma očima, byla funkce ztráty pečlivě odvozena - Logistická ztráta pro tréninkovou sadu se dvěma třídami: и .
Nyní, abychom našli koeficienty, musíme najít derivaci logistické chybové funkce a poté pomocí numerických optimalizačních metod, jako je gradient sestup nebo stochastický gradient sestup, vyberte nejoptimálnější koeficienty . Ale vzhledem ke značnému objemu článku se navrhuje provést diferenciaci na vlastní pěst, nebo to bude možná téma pro příští článek se spoustou aritmetiky bez takových podrobných příkladů.
Případ 2. Klasifikace objektů do и
Přístup zde bude stejný jako u tříd и , ale samotná cesta k výstupu ztrátové funkce Logistická ztráta, bude zdobnější. Začněme. Pro funkci pravděpodobnosti použijeme operátor "jestli... tak...". Tedy pokud th objekt patří do třídy , pak pro výpočet pravděpodobnosti vzorku použijeme pravděpodobnost , pokud objekt patří do třídy , pak dosadíme do pravděpodobnosti . Takto vypadá funkce pravděpodobnosti:
Pojďme si na prstech popsat, jak to funguje. Podívejme se na 4 případy:
1. Jestliže и , pak pravděpodobnost vzorkování „půjde“
2. Jestliže и , pak pravděpodobnost vzorkování „půjde“
3. Jestliže и , pak pravděpodobnost vzorkování „půjde“
4. Jestliže и , pak pravděpodobnost vzorkování „půjde“
Je zřejmé, že v případech 1 a 3, kdy byly pravděpodobnosti správně stanoveny algoritmem, pravděpodobnostní funkce bude maximalizováno, to je přesně to, co jsme chtěli získat. Tento přístup je však značně těžkopádný a příště budeme uvažovat o kompaktnějším zápisu. Nejprve ale logaritme pravděpodobnostní funkci se změnou znaménka, protože ji nyní minimalizujeme.
Pojďme místo toho nahradit výraz :
Zjednodušme správný výraz pod logaritmem pomocí jednoduchých aritmetických technik a získáme:
Nyní je čas zbavit se operátora "jestli... tak...". Všimněte si, že když objekt patří do třídy , pak ve výrazu pod logaritmem, ve jmenovateli, povýšen k moci , pokud objekt patří do třídy , pak se $e$ zvýší na mocninu . Proto lze zápis stupně zjednodušit spojením obou případů do jednoho: . Pak funkce logistických chyb bude mít podobu:
V souladu s pravidly logaritmu zlomek otočíme a zhasneme znak "" (mínus) pro logaritmus dostaneme:
Zde je funkce ztráty logistická ztráta, který se používá v trénovací sadě s objekty přiřazenými třídám: и .
No, v tomto bodě se rozloučím a uzavíráme článek.
Pomocné materiály
1. Literatura
1) Aplikovaná regresní analýza / N. Draper, G. Smith - 2. vyd. – M.: Finance and Statistics, 1986 (překlad z angličtiny)
2) Teorie pravděpodobnosti a matematická statistika / V.E. Gmurman - 9. vyd. - M.: Vyšší škola, 2003
3) Teorie pravděpodobnosti / N.I. Chernova - Novosibirsk: Novosibirsk State University, 2007
4) Business analytics: from data to knowledge / Paklin N. B., Oreshkov V. I. - 2nd ed. — Petrohrad: Petr, 2013
5) Data Science Data science od nuly / Joel Gras – Petrohrad: BHV Petersburg, 2017
6) Praktické statistiky pro specialisty Data Science / P. Bruce, E. Bruce - Petrohrad: BHV Petersburg, 2018
2. Přednášky, kurzy (video)
1)
2)
3)
4)
5)
3. Internetové zdroje
1)
2)
4)
5)
6)
7)
8)