V tomto článku rozoberieme teoretické výpočty transformácie lineárne regresné funkcie в inverzná logitová transformačná funkcia (inak nazývaná funkcia logistickej odozvy). Potom pomocou arzenálu metóda maximálnej pravdepodobnosti, v súlade s modelom logistickej regresie odvodíme stratovú funkciu Logistická strata, alebo inak povedané, zadefinujeme funkciu, pomocou ktorej sa vyberajú parametre váhového vektora v logistickom regresnom modeli .
Náčrt článku:
- Zopakujme si lineárny vzťah medzi dvoma premennými
- Identifikujme potrebu transformácie lineárne regresné funkcie в funkcia logistickej odozvy
- Vykonajte transformácie a výstup funkcia logistickej odozvy
- Skúsme pochopiť, prečo je metóda najmenších štvorcov zlá pri výbere parametrov функции Logistická strata
- Používame metóda maximálnej pravdepodobnosti na určenie funkcie výberu parametrov :
5.1. Prípad 1: funkcia Logistická strata pre objekty s označením triedy 0 и 1:
5.2. Prípad 2: funkcia Logistická strata pre objekty s označením triedy -1 и +1:
Článok je plný jednoduchých príkladov, v ktorých sa všetky výpočty dajú ľahko urobiť ústne alebo na papieri; v niektorých prípadoch môže byť potrebná kalkulačka. Tak sa priprav :)
Tento článok je primárne určený pre dátových vedcov s počiatočnou úrovňou znalostí základov strojového učenia.
V článku nájdete aj kód na kreslenie grafov a výpočty. Celý kód je napísaný v jazyku python 2.7. Dovoľte mi vopred vysvetliť „novosť“ použitej verzie - to je jedna z podmienok absolvovania známeho kurzu z Yandex na rovnako známej online vzdelávacej platforme Courseraa ako by sa dalo predpokladať, materiál bol pripravený na základe tohto kurzu.
01. Priama závislosť
Je celkom rozumné položiť si otázku – čo s tým má spoločné lineárna závislosť a logistická regresia?
Je to jednoduché! Logistická regresia je jedným z modelov, ktoré patria do lineárneho klasifikátora. Jednoducho povedané, úlohou lineárneho klasifikátora je predpovedať cieľové hodnoty z premenných (regresorov) . Predpokladá sa, že závislosť medzi charakteristikami a cieľové hodnoty lineárne. Odtiaľ pochádza názov klasifikátora - lineárny. Veľmi zhruba povedané, model logistickej regresie je založený na predpoklade, že medzi charakteristikami existuje lineárny vzťah a cieľové hodnoty . Toto je spojenie.
V ateliéri je prvý príklad a je to správne o priamočiarej závislosti skúmaných veličín. V procese prípravy článku som narazil na príklad, ktorý už dostal veľa ľudí na nervy - závislosť prúdu od napätia („Aplikovaná regresná analýza“, N. Draper, G. Smith). Pozrieme sa na to aj tu.
Podľa Ohmov zákon:
Kde - sila prúdu, - Napätie, - odpor.
Keby sme nevedeli Ohmov zákon, potom by sme mohli empiricky nájsť závislosť zmenou a meranie , pričom podporuje pevné. Potom by sme videli, že graf závislosti od dáva viac-menej priamku cez začiatok. Hovoríme „viac-menej“, pretože hoci je vzťah v skutočnosti presný, naše merania môžu obsahovať malé chyby, a preto body na grafe nemusia padnúť presne na čiaru, ale budú okolo nej náhodne rozptýlené.
Graf 1 „Závislosť“ od »
Kód výkresu 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. Potreba transformácie rovnice lineárnej regresie
Pozrime sa na ďalší príklad. Predstavme si, že pracujeme v banke a našou úlohou je určiť pravdepodobnosť, že dlžník splatí úver v závislosti od určitých faktorov. Aby sme túto úlohu zjednodušili, zvážime iba dva faktory: mesačný plat dlžníka a výšku mesačnej splátky úveru.
Úloha je veľmi podmienená, ale na tomto príklade môžeme pochopiť, prečo to nestačí použiť lineárne regresné funkcie, a tiež zistiť, aké transformácie je potrebné vykonať s funkciou.
Vráťme sa k príkladu. Rozumie sa, že čím vyšší je plat, tým viac bude môcť dlžník mesačne prideliť na splácanie úveru. Zároveň pri určitom platovom rozpätí bude tento vzťah pomerne lineárny. Vezmime si napríklad platový rozsah od 60.000 200.000 RUR do 3 5.000 RUR a predpokladajme, že v uvedenom platovom rozsahu je závislosť veľkosti mesačnej platby od veľkosti platu lineárna. Povedzme, že pre špecifikovaný rozsah miezd sa ukázalo, že pomer platu k platu nemôže klesnúť pod XNUMX a dlžník musí mať stále v rezerve XNUMX XNUMX RUR. A len v tomto prípade budeme predpokladať, že dlžník banke úver splatí. Potom bude mať rovnica lineárnej regresie tvar:
kde , , , - plat - dlžník, - splátka úveru - dlžník.
Nahradenie mzdy a splátky úveru pevnými parametrami do rovnice Môžete sa rozhodnúť, či pôžičku poskytnete alebo odmietnete.
Pri pohľade do budúcnosti si všimneme, že s danými parametrami lineárna regresná funkcia, použité v funkcie logistickej odozvy vytvorí veľké hodnoty, ktoré skomplikujú výpočty na určenie pravdepodobnosti splatenia úveru. Preto sa navrhuje znížiť naše koeficienty, povedzme, 25.000 XNUMX-krát. Táto transformácia v koeficientoch nezmení rozhodnutie o poskytnutí úveru. Zapamätajme si tento bod do budúcnosti, ale teraz, aby bolo ešte jasnejšie, o čom hovoríme, zvážme situáciu s tromi potenciálnymi dlžníkmi.
Tabuľka 1 „Potenciálni dlžníci“
Kód na generovanie tabuľky
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 súlade s údajmi v tabuľke chce Vasya s platom 120.000 3.000 RUR dostať pôžičku, aby ju mohol splácať mesačne vo výške 5.000 XNUMX RUR. Rozhodli sme sa, že na schválenie pôžičky musí Vasyov plat presiahnuť trojnásobok sumy platby a stále musí zostať XNUMX XNUMX RUR. Vasya spĺňa túto požiadavku: . Zostáva dokonca 106.000 XNUMX RUR. Napriek tomu, že pri výpočte znížili sme šance 25.000 XNUMX-krát, výsledok bol rovnaký – pôžička môže byť schválená. Fedya tiež dostane pôžičku, ale Lesha, napriek tomu, že dostáva najviac, bude musieť krotiť svoje chúťky.
Nakreslíme graf pre tento prípad.
Graf 2 „Klasifikácia dlžníkov“
Kód na kreslenie 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ša priamka, postavená v súlade s funkciou , oddeľuje „zlých“ dlžníkov od „dobrých“. Tí dlžníci, ktorých túžby sa nezhodujú s ich schopnosťami, sú nad čiarou (Lesha), kým tí, ktorí sú podľa parametrov nášho modelu schopní splácať úver, sú pod čiarou (Vasya a Fedya). Inými slovami, môžeme povedať toto: naša priama línia rozdeľuje dlžníkov do dvoch tried. Označme ich takto: do triedy Tých dlžníkov, ktorí budú s najväčšou pravdepodobnosťou splácať úver, zaradíme ako alebo Zahrnieme tých dlžníkov, ktorí s najväčšou pravdepodobnosťou nebudú schopní splácať úver.
Zhrňme si závery z tohto jednoduchého príkladu. Vezmime si bod a dosadením súradníc bodu do zodpovedajúcej rovnice priamky , zvážte tri možnosti:
- Ak je bod pod čiarou a priradíme ho triede , potom hodnotu funkcie bude pozitívny od na . To znamená, že môžeme predpokladať, že pravdepodobnosť splatenia úveru je v rámci . Čím väčšia je funkčná hodnota, tým vyššia je pravdepodobnosť.
- Ak je bod nad čiarou a priradíme ho do triedy alebo , potom bude hodnota funkcie záporná od na . Potom budeme predpokladať, že pravdepodobnosť splatenia dlhu je v rámci a čím väčšia je absolútna hodnota funkcie, tým vyššia je naša spoľahlivosť.
- Bod je na priamke, na hranici medzi dvoma triedami. V tomto prípade hodnota funkcie budú rovné a pravdepodobnosť splatenia úveru sa rovná .
Teraz si predstavme, že nemáme dva faktory, ale desiatky, a nie tri, ale tisíce dlžníkov. Potom namiesto priamky budeme mať m-rozmerný rovina a koeficienty nebudeme vytiahnutí zo vzduchu, ale odvodení podľa všetkých pravidiel a na základe nahromadených údajov o dlžníkoch, ktorí pôžičku splatili alebo nesplatili. A skutočne, všimnite si, že teraz vyberáme dlžníkov pomocou už známych koeficientov . V skutočnosti je úlohou modelu logistickej regresie presne určiť parametre , pri ktorej funguje hodnota straty Logistická strata bude mať tendenciu k minimu. Ale o tom, ako sa vypočíta vektor , viac sa dozvieme v 5. sekcii článku. Medzitým sa vraciame do zasľúbenej zeme – k nášmu bankárovi a jeho trom klientom.
Vďaka funkcii vieme, komu môže byť poskytnutá pôžička a komu treba odmietnuť. S takouto informáciou však nemôžete ísť za riaditeľom, pretože od nás chceli získať pravdepodobnosť splatenia pôžičky každým dlžníkom. Čo robiť? Odpoveď je jednoduchá – musíme funkciu nejako transformovať , ktorého hodnoty ležia v rozmedzí na funkciu, ktorej hodnoty budú ležať v rozsahu . A takáto funkcia existuje, volá sa funkcia logistickej odozvy alebo inverzná logitová transformácia. Zoznámte sa:
Pozrime sa krok za krokom, ako to funguje funkcia logistickej odozvy. Všimnite si, že pôjdeme opačným smerom, t.j. budeme predpokladať, že poznáme hodnotu pravdepodobnosti, ktorá leží v rozmedzí od na a potom túto hodnotu „rozvinieme“ na celý rozsah čísel od na .
03. Odvodíme funkciu logistickej odozvy
Krok 1. Preveďte hodnoty pravdepodobnosti na rozsah
Pri transformácii funkcie в funkcia logistickej odozvy Necháme nášho kreditného analytika na pokoji a namiesto toho sa vyberieme na prehliadku stávkových kancelárií. Nie, samozrejme, nebudeme uzatvárať stávky, všetko, čo nás tam zaujíma, je význam výrazu, napríklad šanca je 4 ku 1. Všetkým tipujúcim známym kurzom je pomer „úspechov“ k „ zlyhania“. Z hľadiska pravdepodobnosti sú šance pravdepodobnosťou výskytu udalosti vydelená pravdepodobnosťou, že udalosť nenastane. Zapíšme si vzorec pre pravdepodobnosť výskytu udalosti :
Kde - pravdepodobnosť výskytu udalosti, — pravdepodobnosť, že udalosť nenastane
Napríklad, ak je pravdepodobnosť, že mladý, silný a hravý kôň prezývaný „Veterok“ na dostihoch porazí starú a ochabnutú starú ženu menom „Matilda“, rovná , potom budú šance na úspech pre „Veterok“. к a naopak, keď poznáme šance, nebude pre nás ťažké vypočítať pravdepodobnosť :
Naučili sme sa teda „prekladať“ pravdepodobnosť na šance, ktoré nadobúdajú hodnoty na . Urobme ešte jeden krok a naučme sa „preložiť“ pravdepodobnosť na celú číselnú os z na .
Krok 2. Preveďte hodnoty pravdepodobnosti na rozsah
Tento krok je veľmi jednoduchý – zoberme logaritmus pravdepodobnosti na základňu Eulerovho čísla a dostaneme:
Teraz vieme, že ak , potom vypočítajte hodnotu bude veľmi jednoduché a navyše by malo byť pozitívne: . Toto je pravda.
Zo zvedavosti si overíme, čo keby , potom očakávame, že uvidíme zápornú hodnotu . Kontrolujeme: . To je správne.
Teraz vieme, ako previesť hodnotu pravdepodobnosti z na pozdĺž celého číselného radu od na . V ďalšom kroku urobíme opak.
Zatiaľ si všimneme, že v súlade s pravidlami logaritmu poznáme hodnotu funkcie , môžete si vypočítať kurz:
Tento spôsob určenia kurzov sa nám bude hodiť v ďalšom kroku.
Krok 3. Poďme odvodiť vzorec na určenie
Tak sme sa učili, vedeli , nájdite hodnoty funkcií . V skutočnosti však potrebujeme presný opak – poznať hodnotu nájsť . Aby sme to dosiahli, obráťme sa na taký koncept, ako je funkcia inverzných šancí, podľa ktorej:
V článku nebudeme odvodzovať vyššie uvedený vzorec, ale skontrolujeme ho pomocou čísel z vyššie uvedeného príkladu. Vieme, že s kurzom 4 ku 1 (), pravdepodobnosť výskytu udalosti je 0.8 (). Urobme náhradu: . To sa zhoduje s našimi predchádzajúcimi výpočtami. Poďme ďalej.
V poslednom kroku sme to vydedukovali , čo znamená, že môžete vykonať náhradu vo funkcii inverzných kurzov. Dostaneme:
Čitateľ aj menovateľ vydeľte , Potom:
Pre každý prípad, aby sme sa uistili, že sme nikde neurobili chybu, urobíme ešte jednu malú kontrolu. V kroku 2 sme pre to určil . Potom nahraďte hodnotu do funkcie logistickej odozvy, očakávame, že dostaneme . Nahradíme a získame:
Gratulujeme, milý čitateľ, práve sme odvodili a otestovali funkciu logistickej odozvy. Pozrime sa na graf funkcie.
Graf 3 „Funkcia logistickej odozvy“
Kód na kreslenie 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 literatúre môžete nájsť aj názov tejto funkcie ako sigmoidná funkcia. Graf jasne ukazuje, že hlavná zmena pravdepodobnosti objektu patriaceho do triedy nastáva v relatívne malom rozsahu , odniekiaľ na .
Navrhujem vrátiť sa k nášmu úverovému analytikovi a pomôcť mu vypočítať pravdepodobnosť splatenia úveru, inak riskuje, že zostane bez bonusu :)
Tabuľka 2 „Potenciálni dlžníci“
Kód na generovanie tabuľky
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']]
Takže sme určili pravdepodobnosť splatenia úveru. Vo všeobecnosti sa zdá, že je to pravda.
Pravdepodobnosť, že Vasya s platom 120.000 3.000 RUR bude môcť dať banke každý mesiac 100 0.3 RUR, je skutočne takmer XNUMX%. Mimochodom, musíme pochopiť, že banka môže poskytnúť pôžičku Leshe, ak jej politika umožňuje napríklad pôžičky klientom s pravdepodobnosťou splatenia pôžičky vyššou ako napríklad XNUMX. Ide len o to, že v tomto prípade si banka vytvorí väčšiu rezervu na prípadné straty.
Treba tiež poznamenať, že pomer platu k platu vo výške najmenej 3 as maržou 5.000 XNUMX RUR bol prevzatý zo stropu. Preto sme nemohli použiť vektor váh v pôvodnej podobe . Potrebovali sme výrazne znížiť koeficienty a v tomto prípade sme každý koeficient vydelili 25.000 XNUMX, čiže v podstate sme upravili výsledok. Toto sa však urobilo špeciálne na zjednodušenie pochopenia materiálu v počiatočnej fáze. V živote nebudeme potrebovať koeficienty vymýšľať a upravovať, ale nájsť. V ďalších častiach článku odvodíme rovnice, pomocou ktorých sa parametre vyberajú .
04. Metóda najmenších štvorcov na určenie vektora váh vo funkcii logistickej odozvy
Túto metódu výberu vektora váh už poznáme Ako metóda najmenších štvorcov (LSM) a vlastne, prečo to potom nepoužijeme v problémoch binárnej klasifikácie? V používaní vám skutočne nič nebráni MNC, iba táto metóda v klasifikačných problémoch poskytuje výsledky, ktoré sú menej presné ako Logistická strata. Existuje na to teoretický základ. Najprv sa pozrime na jeden jednoduchý príklad.
Predpokladajme, že naše modely (pomocou MSE и Logistická strata) už začali s výberom vektora váh a výpočet sme v určitom kroku zastavili. Nezáleží na tom, či v strede, na konci alebo na začiatku, hlavné je, že už máme nejaké hodnoty vektora váh a predpokladajme, že v tomto kroku vektor váh pre oba modely nie sú žiadne rozdiely. Potom vezmite výsledné závažia a vložte ich do funkcia logistickej odozvy () pre nejaký objekt, ktorý patrí do triedy . Skúmame dva prípady, keď v súlade so zvoleným vektorom váh je náš model veľmi chybný a naopak - model je veľmi presvedčený, že objekt patrí do triedy . Pozrime sa, aké pokuty budú pri používaní MNC и Logistická strata.
Kód na výpočet pokút v závislosti od použitej funkcie 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
Prípad omylu — model priraďuje objekt triede s pravdepodobnosťou 0,01
Pokuta za použitie MNC bude:
Pokuta za použitie Logistická strata bude:
Prípad silnej dôvery — model priraďuje objekt triede s pravdepodobnosťou 0,99
Pokuta za použitie MNC bude:
Pokuta za použitie Logistická strata bude:
Tento príklad dobre ilustruje, že v prípade hrubej chyby funguje strata Strata denníka penalizuje model výrazne viac ako MSE. Poďme teraz pochopiť, aké sú teoretické základy používania stratovej funkcie Strata denníka v klasifikačných problémoch.
05. Metóda maximálnej pravdepodobnosti a logistická regresia
Ako som sľúbil na začiatku, článok je plný jednoduchých príkladov. V štúdiu je ďalší príklad a starí hostia - bankoví dlžníci: Vasya, Fedya a Lesha.
Len pre prípad, pred vytvorením príkladu mi dovoľte pripomenúť, že v živote máme čo do činenia s trénovacou vzorkou tisícov alebo miliónov objektov s desiatkami alebo stovkami funkcií. Tu sú však čísla brané tak, aby sa ľahko zmestili do hlavy začínajúceho dátového vedca.
Vráťme sa k príkladu. Predstavme si, že sa riaditeľ banky rozhodol poskytnúť pôžičku každému, kto ju potrebuje, napriek tomu, že mu algoritmus povedal, aby ju neposkytol Leshovi. A teraz už uplynulo dosť času a vieme, ktorý z troch hrdinov pôžičku splatil a ktorý nie. Čo sa dalo očakávať: Vasya a Fedya splatili pôžičku, ale Lesha nie. Teraz si predstavme, že tento výsledok bude pre nás novou školiacou vzorkou a zároveň akoby zmizli všetky údaje o faktoroch ovplyvňujúcich pravdepodobnosť splatenia úveru (mzda dlžníka, výška mesačnej splátky). Potom môžeme intuitívne predpokladať, že každý tretí dlžník nesplatí úver banke, alebo inými slovami pravdepodobnosť, že úver splatí ďalší dlžník. . Tento intuitívny predpoklad má teoretické potvrdenie a je založený na metóda maximálnej pravdepodobnosti, často sa v literatúre hovorí princíp maximálnej pravdepodobnosti.
Najprv sa zoznámime s pojmovým aparátom.
Pravdepodobnosť odberu vzoriek je pravdepodobnosť získania presne takejto vzorky, získania presne takýchto pozorovaní/výsledkov, t.j. súčin pravdepodobnosti získania každého z výsledkov vzorky (napríklad či pôžička Vasya, Fedya a Lesha bola alebo nebola splatená súčasne).
Funkcia pravdepodobnosti spája pravdepodobnosť vzorky s hodnotami distribučných parametrov.
V našom prípade je trénovacia vzorka zovšeobecnená Bernoulliho schéma, v ktorej náhodná premenná nadobúda iba dve hodnoty: alebo . Preto možno vzorovú pravdepodobnosť zapísať ako pravdepodobnostnú funkciu parametra takto:
Vyššie uvedený záznam možno interpretovať nasledovne. Spoločná pravdepodobnosť, že Vasya a Fedya splatia pôžičku, sa rovná , pravdepodobnosť, že Lesha NESplatí úver, sa rovná (keďže sa neuskutočnilo splatenie úveru), preto je spoločná pravdepodobnosť všetkých troch udalostí rovnaká .
Metóda maximálnej pravdepodobnosti je metóda na odhad neznámeho parametra maximalizáciou pravdepodobnostné funkcie. V našom prípade musíme takúto hodnotu nájsť na ktorom dosiahne svoje maximum.
Odkiaľ pochádza skutočná myšlienka – hľadať hodnotu neznámeho parametra, pri ktorej pravdepodobnostná funkcia dosahuje maximum? Pôvod myšlienky pramení z myšlienky, že vzorka je jediným zdrojom vedomostí o populácii, ktorý máme k dispozícii. Vo vzorke je zastúpené všetko, čo vieme o populácii. Preto môžeme povedať len toľko, že vzorka je najpresnejším odrazom populácie, ktorú máme k dispozícii. Preto musíme nájsť parameter, pri ktorom sa dostupná vzorka stane najpravdepodobnejšou.
Je zrejmé, že máme do činenia s problémom optimalizácie, v ktorom musíme nájsť extrémny bod funkcie. Na nájdenie extrémneho bodu je potrebné zvážiť podmienku prvého rádu, to znamená prirovnať deriváciu funkcie k nule a vyriešiť rovnicu vzhľadom na požadovaný parameter. Hľadanie derivátu súčinu veľkého množstva faktorov však môže byť zdĺhavá úloha, aby sa tomu zabránilo, existuje špeciálna technika - prepnutie na logaritmus pravdepodobnostné funkcie. Prečo je takýto prechod možný? Venujme pozornosť tomu, že nehľadáme extrém funkcie samotnej, a extrémny bod, teda hodnotu neznámeho parametra na ktorom dosiahne svoje maximum. Pri prechode na logaritmus sa extrémny bod nemení (hoci samotný extrém sa bude líšiť), pretože logaritmus je monotónna funkcia.
Poďme, v súlade s vyššie uvedeným, ďalej rozvíjať náš príklad s pôžičkami od Vasya, Fedya a Lesha. Najprv prejdime k logaritmus pravdepodobnostnej funkcie:
Teraz môžeme výraz ľahko rozlíšiť podľa :
A nakoniec zvážte podmienku prvého rádu - deriváciu funkcie prirovnáme k nule:
Teda náš intuitívny odhad pravdepodobnosti splatenia úveru bola teoreticky opodstatnená.
Skvelé, ale čo by sme teraz mali robiť s týmito informáciami? Ak predpokladáme, že každý tretí dlžník peniaze banke nevráti, tak táto nevyhnutne skrachuje. To je pravda, ale len pri posúdení pravdepodobnosti splatenia úveru Nebrali sme do úvahy faktory ovplyvňujúce splácanie úveru: plat dlžníka a výšku mesačnej splátky. Pripomeňme si, že sme predtým vypočítali pravdepodobnosť splatenia úveru každým klientom s prihliadnutím na rovnaké faktory. Je logické, že sme dostali pravdepodobnosti odlišné od konštanty rovné .
Definujme pravdepodobnosť vzoriek:
Kód na výpočet pravdepodobnosti vzorky
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)
Pravdepodobnosť vzorky pri konštantnej hodnote :
Vzorová pravdepodobnosť pri výpočte pravdepodobnosti splatenia úveru s prihliadnutím na faktory :
Pravdepodobnosť vzorky s pravdepodobnosťou vypočítanou v závislosti od faktorov sa ukázala byť vyššia ako pravdepodobnosť s konštantnou hodnotou pravdepodobnosti. Čo to znamená? To naznačuje, že znalosť faktorov umožnila presnejšie vybrať pravdepodobnosť splatenia úveru pre každého klienta. Preto pri poskytovaní ďalšej pôžičky by bolo správnejšie použiť model navrhnutý na konci časti 3 článku na posúdenie pravdepodobnosti splatenia dlhu.
Ale potom, ak chceme maximalizovať vzorová funkcia pravdepodobnosti, tak prečo nepoužiť nejaký algoritmus, ktorý vytvorí pravdepodobnosť napríklad pre Vasyu, Fedyu a Leshu rovnú 0.99, 0.99 a 0.01. Možno, že takýto algoritmus bude fungovať dobre na trénovacej vzorke, pretože priblíži hodnotu pravdepodobnosti vzorky , ale po prvé, takýto algoritmus bude mať s najväčšou pravdepodobnosťou problémy so schopnosťou zovšeobecnenia a po druhé, tento algoritmus určite nebude lineárny. A ak metódy boja proti pretrénovaniu (rovnako slabá schopnosť zovšeobecňovania) zjavne nie sú zahrnuté v pláne tohto článku, potom sa pozrime na druhý bod podrobnejšie. Ak to chcete urobiť, stačí odpovedať na jednoduchú otázku. Môže byť pravdepodobnosť, že Vasya a Fedya splatia úver, rovnaká, berúc do úvahy nám známe faktory? Z hľadiska zvukovej logiky samozrejme nie, nemôže. Takže Vasya zaplatí 2.5% svojho platu mesačne na splatenie úveru a Fedya - takmer 27,8%. Aj v grafe 2 „Klasifikácia klientov“ vidíme, že Vasya je oveľa ďalej od čiary oddeľujúcej triedy ako Fedya. A nakoniec vieme, že funkcia pre Vasya a Fedya má rôzne hodnoty: 4.24 pre Vasyu a 1.0 pre Fedyu. Ak by teraz napríklad Fedya zarobil rádovo viac alebo požiadal o menšiu pôžičku, potom by bola pravdepodobnosť splatenia pôžičky pre Vasyu a Fedyu podobná. Inými slovami, lineárnu závislosť nemožno oklamať. A keby sme si vlastne vypočítali kurz a nezobrali sme ich z ničoho, môžeme pokojne povedať, že naše hodnoty nám najlepšie umožňujú odhadnúť pravdepodobnosť splatenia úveru každým dlžníkom, ale keďže sme súhlasili s predpokladom, že stanovenie koeficientov bola vykonaná podľa všetkých pravidiel, potom budeme predpokladať - naše koeficienty nám umožňujú lepšie odhadnúť pravdepodobnosť :)
To sme však odbočili. V tejto časti musíme pochopiť, ako sa určuje vektor váh , ktorý je potrebný na posúdenie pravdepodobnosti splatenia úveru každým dlžníkom.
Poďme si stručne zhrnúť, s akým arzenálom hľadáme šance :
1. Predpokladáme, že vzťah medzi cieľovou premennou (predikčnou hodnotou) a faktorom ovplyvňujúcim výsledok je lineárny. Z tohto dôvodu sa používa lineárna regresná funkcia druh , ktorej čiara rozdeľuje objekty (klientov) do tried и alebo (klienti, ktorí sú schopní splácať úver a tí, ktorí nie). V našom prípade má rovnica tvar .
2. Používame inverzná logitová funkcia druh určiť pravdepodobnosť, že objekt patrí do triedy .
3. Náš tréningový súbor považujeme za implementáciu zovšeobecneného Bernoulliho schémy, teda pre každý objekt sa vygeneruje náhodná premenná, ktorá s pravdepodobnosťou (svoje pre každý objekt) nadobúda hodnotu 1 as pravdepodobnosťou - 0.
4. Vieme, čo musíme maximalizovať vzorová funkcia pravdepodobnosti berúc do úvahy akceptované faktory tak, aby sa dostupná vzorka stala najpravdepodobnejšou. Inými slovami, musíme vybrať parametre, pri ktorých bude vzorka najpravdepodobnejšia. V našom prípade je zvoleným parametrom pravdepodobnosť splatenia úveru , čo zase závisí od neznámych koeficientov . Musíme teda nájsť takýto vektor váh , pri ktorej bude pravdepodobnosť vzorky maximálna.
5. Vieme, čo maximalizovať vzorové pravdepodobnostné funkcie môže byť použité metóda maximálnej pravdepodobnosti. A poznáme všetky zložité triky na prácu s touto metódou.
Takto to dopadá na viackrokový krok :)
Teraz si pamätajte, že na úplnom začiatku článku sme chceli odvodiť dva typy stratových funkcií Logistická strata v závislosti od toho, ako sú označené triedy objektov. Tak sa stalo, že v klasifikačných úlohách s dvoma triedami sú triedy označené ako и alebo . V závislosti od notácie bude mať výstup zodpovedajúcu stratovú funkciu.
Prípad 1. Klasifikácia objektov do и
Skôr pri určovaní pravdepodobnosti vzorky, v ktorej bola pravdepodobnosť splatenia dlhu dlžníkom vypočítaná na základe faktorov a daných koeficientov , použili sme vzorec:
Skutočne je zmysel funkcie logistickej odozvy pre daný vektor váh
Potom nám nič nebráni napísať funkciu vzorovej pravdepodobnosti takto:
Stáva sa, že niekedy je pre niektorých začínajúcich analytikov ťažké okamžite pochopiť, ako táto funkcia funguje. Pozrime sa na 4 krátke príklady, ktoré veci objasnia:
1. Ak (t.j. podľa trénovacej vzorky objekt patrí do triedy +1) a náš algoritmus určuje pravdepodobnosť zaradenia objektu do triedy rovná 0.9, potom sa pravdepodobnosť tejto časti vzorky vypočíta takto:
2. Ak A , potom bude výpočet vyzerať takto:
3. Ak A , potom bude výpočet vyzerať takto:
4. Ak A , potom bude výpočet vyzerať takto:
Je zrejmé, že pravdepodobnostná funkcia bude maximalizovaná v prípadoch 1 a 3 alebo vo všeobecnom prípade - so správne uhádnutými hodnotami pravdepodobnosti priradenia objektu do triedy .
Vzhľadom na to, že pri určovaní pravdepodobnosti priradenia objektu do triedy Len tie koeficienty nepoznáme , potom ich budeme hľadať. Ako bolo uvedené vyššie, ide o optimalizačný problém, v ktorom najprv musíme nájsť deriváciu pravdepodobnostnej funkcie vzhľadom na vektor váh . Najprv však má zmysel zjednodušiť si úlohu: budeme hľadať deriváciu logaritmu pravdepodobnostné funkcie.
Prečo po logaritme, in logistické chybové funkcie, zmenili sme znamienko z na . Všetko je jednoduché, keďže v problémoch hodnotenia kvality modelu je zvykom minimalizovať hodnotu funkcie, vynásobili sme pravú stranu výrazu a teda namiesto maximalizácie teraz funkciu minimalizujeme.
Vlastne práve teraz, pred vašimi očami, bola funkcia straty starostlivo odvodená - Logistická strata pre tréningovú súpravu s dvoma triedami: и .
Teraz, aby sme našli koeficienty, musíme nájsť deriváciu logistické chybové funkcie a potom pomocou metód numerickej optimalizácie, ako je klesanie gradientu alebo stochastický klesanie gradientu, vyberte najoptimálnejšie koeficienty . Vzhľadom na značný objem článku sa však navrhuje vykonať diferenciáciu sami, alebo to bude možno téma pre ďalší článok s množstvom aritmetiky bez takýchto podrobných príkladov.
Prípad 2. Klasifikácia objektov do и
Prístup tu bude rovnaký ako pri triedach и , ale samotná cesta k výstupu stratovej funkcie Logistická strata, bude ozdobnejšia. Začnime. Pre funkciu pravdepodobnosti použijeme operátor "Ak potom..."... Teda ak th objekt patrí do triedy , potom na výpočet pravdepodobnosti vzorky použijeme pravdepodobnosť , ak objekt patrí do triedy , potom dosadíme do pravdepodobnosti . Funkcia pravdepodobnosti vyzerá takto:
Opíšme si na prstoch, ako to funguje. Zoberme si 4 prípady:
1. Ak и , potom pravdepodobnosť odberu vzoriek „prejde“
2. Ak и , potom pravdepodobnosť odberu vzoriek „prejde“
3. Ak и , potom pravdepodobnosť odberu vzoriek „prejde“
4. Ak и , potom pravdepodobnosť odberu vzoriek „prejde“
Je zrejmé, že v prípadoch 1 a 3, keď boli pravdepodobnosti správne určené algoritmom, pravdepodobnostná funkcia budú maximalizované, to znamená, že presne toto sme chceli získať. Tento prístup je však dosť ťažkopádny a nabudúce zvážime kompaktnejší zápis. Najprv však logaritme pravdepodobnostnú funkciu so zmenou znamienka, keďže ju teraz minimalizujeme.
Poďme namiesto toho nahradiť vyjadrenie :
Zjednodušme si správny výraz pod logaritmom pomocou jednoduchých aritmetických techník a získajme:
Teraz je čas zbaviť sa operátora "Ak potom...". Všimnite si, že keď objekt patrí do triedy , potom vo výraze pod logaritmom, v menovateli, pozdvihnutý k moci , ak objekt patrí do triedy , potom sa $e$ zvýši na mocninu . Preto je možné zápis stupňa zjednodušiť spojením oboch prípadov do jedného: , potom funkcia logistickej chyby bude mať podobu:
V súlade s pravidlami logaritmu zlomok otočíme a zhasneme znak "" (mínus) pre logaritmus dostaneme:
Tu je funkcia straty logistická strata, ktorý sa používa v trénovacej sade s objektmi priradenými triedam: и .
No, v tomto bode sa rozlúčim a končíme článok.
Pomocné materiály
1. Literatúra
1) Aplikovaná regresná analýza / N. Draper, G. Smith - 2. vyd. – M.: Finance and Statistics, 1986 (preklad z angličtiny)
2) Teória pravdepodobnosti a matematická štatistika / V.E. Gmurman - 9. vyd. - M.: Vyššia škola, 2003
3) Teória pravdepodobnosti / N.I. Chernova – Novosibirsk: Novosibirská štátna univerzita, 2007
4) Business analytics: from data to knowledge / Paklin N. B., Oreshkov V. I. - 2nd ed. — Petrohrad: Peter, 2013
5) Data Science Data science od nuly / Joel Gras – Petrohrad: BHV Petersburg, 2017
6) Praktická štatistika pre špecialistov Data Science / P. Bruce, E. Bruce - Petrohrad: BHV Petersburg, 2018
2. Prednášky, kurzy (video)
1)
2)
3)
4)
5)
3. Internetové zdroje
1)
2)
4)
5)
6)
7)
Zdroj: hab.com