Šiame straipsnyje panagrinėsime teorinius transformacijos skaičiavimus tiesinės regresijos funkcijos в atvirkštinės logito transformacijos funkcija (kitaip vadinama logistinio atsako funkcija). Tada naudodamiesi arsenalu didžiausios tikimybės metodas, pagal logistinės regresijos modelį išvedame nuostolių funkciją Logistiniai nuostoliai, arba kitaip tariant, apibrėšime funkciją, su kuria parenkami svorio vektoriaus parametrai logistinės regresijos modelyje .
Straipsnio apybraiža:
- Pakartokime tiesinį ryšį tarp dviejų kintamųjų
- Nustatykime transformacijos poreikį tiesinės regresijos funkcijos в logistinės reakcijos funkcija
- Atlikime transformacijas ir išvedimą logistinės reakcijos funkcija
- Pabandykime suprasti, kodėl mažiausių kvadratų metodas yra blogas renkantis parametrus функции Logistiniai nuostoliai
- Mes naudojame didžiausios tikimybės metodas nustatymui parametrų pasirinkimo funkcijos :
5.1. 1 atvejis: funkcija Logistiniai nuostoliai objektams su klasių žymėjimais 0 и 1:
5.2. 2 atvejis: funkcija Logistiniai nuostoliai objektams su klasių žymėjimais -1 и +1:
Straipsnyje gausu paprastų pavyzdžių, kuriuose visus skaičiavimus lengva atlikti žodžiu arba popieriuje; kai kuriais atvejais gali prireikti skaičiuotuvo. Taigi ruoškis :)
Šis straipsnis visų pirma skirtas duomenų mokslininkams, turintiems pradinį mašininio mokymosi pagrindų žinių lygį.
Straipsnyje taip pat bus pateiktas grafikų braižymo ir skaičiavimų kodas. Visas kodas parašytas ta kalba pitonas 2.7. Leiskite man iš anksto paaiškinti apie naudojamos versijos „naujovę“ - tai viena iš sąlygų norint išklausyti gerai žinomą kursą Yandex ne mažiau žinomoje internetinėje švietimo platformoje Coursera, ir, kaip galima manyti, medžiaga buvo parengta remiantis šiuo kursu.
01. Tiesios linijos priklausomybė
Visiškai pagrįsta kelti klausimą – ką su tuo turi tiesinė priklausomybė ir logistinė regresija?
Tai paprasta! Logistinė regresija yra vienas iš modelių, priklausančių tiesiniam klasifikatoriui. Paprastais žodžiais tariant, linijinio klasifikatoriaus užduotis yra numatyti tikslines reikšmes iš kintamųjų (regresorių) . Manoma, kad priklausomybė tarp savybių ir tikslines vertes linijinis. Iš čia kilęs ir klasifikatoriaus pavadinimas – linijinis. Labai grubiai tariant, logistinės regresijos modelis yra pagrįstas prielaida, kad tarp charakteristikų yra tiesinis ryšys. ir tikslines vertes . Tai yra ryšys.
Yra pirmasis pavyzdys studijoje, ir jis, teisingai, yra apie tiriamų kiekių tiesinę priklausomybę. Rengdamas straipsnį aptikau pavyzdį, kuris jau daugelį žmonių pribloškė - srovės priklausomybė nuo įtampos („Taikomoji regresijos analizė“, N. Draper, G. Smith). Pažiūrėsime ir čia.
Pagal Omo dėsnis:
Kur - srovės stiprumas, - Įtampa, - pasipriešinimas.
Jei nežinotume Omo dėsnis, tada priklausomybę galėtume rasti empiriškai keisdami ir matavimas , o palaikau fiksuotas. Tada pamatytume, kad priklausomybės grafikas nuo suteikia daugiau ar mažiau tiesią liniją per pradžią. Mes sakome „daugiau ar mažiau“, nes nors ryšys iš tikrųjų yra tikslus, mūsų matavimuose gali būti nedidelių paklaidų, todėl grafiko taškai gali nepatekti tiksliai į tiesę, o atsitiktinai išsibarstę aplink ją.
1 grafikas „Priklausomybė“ nuo »
Diagramos piešimo kodas
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. Būtinybė transformuoti tiesinės regresijos lygtį
Pažvelkime į kitą pavyzdį. Įsivaizduokime, kad dirbame banke ir mūsų užduotis yra nustatyti tikimybę, kad skolininkas grąžins paskolą priklausomai nuo tam tikrų faktorių. Norėdami supaprastinti užduotį, atsižvelgsime tik į du veiksnius: paskolos gavėjo mėnesinį atlyginimą ir mėnesinę paskolos grąžinimo sumą.
Užduotis yra labai sąlyginė, tačiau pagal šį pavyzdį galime suprasti, kodėl neužtenka naudoti tiesinės regresijos funkcijos, taip pat sužinokite, kokias transformacijas reikia atlikti naudojant funkciją.
Grįžkime prie pavyzdžio. Suprantama, kad kuo didesnis atlyginimas, tuo daugiau paskolos gavėjas kas mėnesį galės skirti paskolai grąžinti. Tuo pačiu metu tam tikram atlyginimų diapazonui šis santykis bus gana linijinis. Pavyzdžiui, paimkime atlyginimo diapazoną nuo 60.000 200.000 RUR iki 3 5.000 RUR ir manykime, kad nurodytame atlyginimų diapazone mėnesinės įmokos dydžio priklausomybė nuo atlyginimo dydžio yra tiesinė. Tarkime, nurodytam darbo užmokesčio diapazonui paaiškėjo, kad atlyginimo ir įmokų santykis negali nukristi žemiau XNUMX, o skolininkas rezerve vis tiek turi turėti XNUMX RUB. Ir tik tokiu atveju manysime, kad paskolos gavėjas grąžins paskolą bankui. Tada tiesinės regresijos lygtis bus tokia:
kur , , , - atlyginimas - skolininkas, - paskolos mokėjimas – skolininkas.
Atlyginimo ir paskolos mokėjimo pakeitimas fiksuotais parametrais į lygtį Galite nuspręsti, išduoti ar atsisakyti paskolos.
Žvelgdami į ateitį, pažymime, kad su nurodytais parametrais tiesinės regresijos funkcija, naudojamas logistinės reagavimo funkcijos sukurs dideles reikšmes, kurios apsunkins skaičiavimus nustatant paskolos grąžinimo tikimybę. Todėl mūsų koeficientus siūloma sumažinti, tarkime, 25.000 XNUMX kartų. Ši koeficientų pertvarka sprendimo išduoti paskolą nepakeis. Prisiminkime šį momentą ateičiai, bet dabar, kad būtų dar aiškiau, apie ką kalbame, panagrinėkime situaciją su trimis potencialiais skolininkais.
1 lentelė „Potencialūs skolininkai“
Kodas lentelės generavimui
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']]
Remiantis lentelės duomenimis, Vasya, kurio atlyginimas yra 120.000 3.000 RUR, nori gauti paskolą, kad galėtų ją grąžinti kas mėnesį po 5.000 XNUMX RUB. Nustatėme, kad norint patvirtinti paskolą, Vasios atlyginimas turi tris kartus viršyti įmokos sumą, o dar turi likti XNUMX RUR. Vasya atitinka šį reikalavimą: . Liko net 106.000 XNUMX RUR. Nepaisant to, kad skaičiuojant mes sumažinome šansus 25.000 XNUMX kartų, rezultatas buvo toks pat – paskola gali būti patvirtinta. Fedya taip pat gaus paskolą, tačiau Lesha, nepaisant to, kad jis gauna daugiausiai, turės pažaboti savo apetitą.
Nubraižykime šio atvejo grafiką.
2 diagrama „Skolininkų klasifikacija“
Grafiko braižymo kodas
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()
Taigi, mūsų tiesi linija, sukonstruota pagal funkciją , atskiria „blogus“ skolininkus nuo „gerų“. Tie skolininkai, kurių norai nesutampa su jų galimybėmis, yra aukščiau linijos (Lesha), o tie, kurie pagal mūsų modelio parametrus gali grąžinti paskolą, yra žemiau linijos (Vasya ir Fedya). Kitaip tariant, galime pasakyti taip: mūsų tiesioginė linija suskirsto skolininkus į dvi klases. Pažymėkime juos taip: į klasę Paskolos gavėjus, kurie greičiausiai grąžins paskolą, priskirsime prie arba Įtrauksime tuos skolininkus, kurie greičiausiai negalės grąžinti paskolos.
Apibendrinkime išvadas iš šio paprasto pavyzdžio. Paimkime tašką ir taško koordinates pakeičiant atitinkama tiesės lygtimi , apsvarstykite tris galimybes:
- Jei taškas yra po linija ir mes jį priskiriame klasei , tada funkcijos reikšmė bus teigiamas nuo į . Tai reiškia, kad galime daryti prielaidą, kad paskolos grąžinimo tikimybė yra ribose . Kuo didesnė funkcijos reikšmė, tuo didesnė tikimybė.
- Jei taškas yra virš linijos ir mes priskiriame jį klasei arba , tada funkcijos reikšmė bus neigiama nuo į . Tada manysime, kad skolos grąžinimo tikimybė yra ribose ir kuo didesnė funkcijos absoliuti reikšmė, tuo didesnis mūsų pasitikėjimas.
- Taškas yra tiesioje linijoje, ant ribos tarp dviejų klasių. Šiuo atveju funkcijos reikšmė bus lygus o paskolos grąžinimo tikimybė lygi .
Dabar įsivaizduokime, kad turime ne du faktorius, o dešimtis ir ne tris, o tūkstančius skolininkų. Tada vietoj tiesios linijos turėsime m matmenų plokštuma ir koeficientai būsime ne iš oro paimti, o išvesti pagal visas taisykles, ir pagal sukauptus duomenis apie paskolą grąžinusius ar negrąžinusius skolininkus. Ir iš tiesų, atkreipkite dėmesį, kad dabar skolininkus renkame naudodami jau žinomus koeficientus . Tiesą sakant, logistinės regresijos modelio užduotis yra tiksliai nustatyti parametrus , kuriai esant nuostolio funkcijos reikšmė Logistiniai nuostoliai bus linkęs į minimumą. Bet apie tai, kaip apskaičiuojamas vektorius , daugiau sužinosime 5-oje straipsnio dalyje. Tuo tarpu grįžtame į pažadėtąją žemę – pas savo bankininką ir tris jo klientus.
Dėl funkcijos mes žinome, kam gali būti suteikta paskola, o kam jos turi būti atsisakyta. Bet jūs negalite kreiptis į direktorių su tokia informacija, nes jie norėjo iš mūsų sužinoti tikimybę, kad kiekvienas skolininkas grąžins paskolą. Ką daryti? Atsakymas paprastas – turime kažkaip pakeisti funkciją , kurių vertės yra diapazone funkcijai, kurios reikšmės bus diapazone . Ir tokia funkcija egzistuoja, ji vadinama logistinės reakcijos funkcija arba atvirkštinė logit transformacija. Susitikti:
Pažiūrėkime žingsnis po žingsnio, kaip tai veikia logistinės reakcijos funkcija. Atkreipkite dėmesį, kad eisime priešinga kryptimi, t.y. manysime, kad žinome tikimybės reikšmę, kuri yra intervale nuo į ir tada šią reikšmę „išvyniosime“ į visą skaičių diapazoną nuo į .
03. Išvedame logistinio atsako funkciją
1 veiksmas. Konvertuokite tikimybių reikšmes į diapazoną
Vykdant funkcijos transformaciją в logistinės reakcijos funkcija Mes paliksime savo kredito analitiką ramybėje ir apžiūrėsime lažybų tarpininkus. Ne, žinoma, mes nedarysime statymų, viskas, kas mus domina, yra posakio reikšmė, pavyzdžiui, šansas yra 4 prieš 1. Šansai, žinomi visiems lažybininkams, yra „sėkmės“ ir „ nesėkmės“. Kalbant apie tikimybę, šansai yra įvykio įvykimo tikimybė, padalyta iš tikimybės, kad įvykis neįvyks. Užrašykime įvykio tikimybės formulę :
Kur - įvykio tikimybė, — tikimybė, kad įvykis NEįvyks
Pavyzdžiui, jei tikimybė, kad jaunas, stiprus ir žaismingas arklys, pravarde „Veterok“, lenktynėse įveiks seną ir suglebusią moterį, vardu „Matilda“, yra lygi , tada „Veterok“ sėkmės tikimybė bus к ir atvirkščiai, žinant tikimybę, mums nebus sunku apskaičiuoti tikimybę :
Taigi, mes išmokome „išversti“ tikimybę į tikimybes, kurios paima vertes iš į . Ženkime dar vieną žingsnį ir išmokime „išversti“ tikimybę į visą skaičių eilutę iš į .
2 veiksmas. Konvertuokite tikimybių reikšmes į diapazoną
Šis žingsnis labai paprastas – paimkime koeficientų logaritmą iki Eulerio skaičiaus bazės ir gauname:
Dabar žinome, kad jei , tada apskaičiuokite vertę bus labai paprasta ir, be to, turėtų būti teigiama: . Tai yra tiesa.
Dėl smalsumo patikrinkime, kas būtų, jei , tada tikimės matyti neigiamą reikšmę . Mes tikriname: . Teisingai.
Dabar mes žinome, kaip konvertuoti tikimybės vertę iš į išilgai visos skaičių eilutės nuo į . Kitame žingsnyje darysime priešingai.
Kol kas pažymime, kad pagal logaritmo taisykles, žinant funkcijos reikšmę , galite apskaičiuoti tikimybę:
Šis koeficientų nustatymo metodas mums bus naudingas kitame žingsnyje.
3 veiksmas. Išveskime formulę nustatymui
Taigi mes išmokome, žinodami , raskite funkcijų reikšmes . Tačiau iš tikrųjų mums reikia visiškai priešingai – žinoti vertę rasti . Norėdami tai padaryti, pereikime prie tokios sąvokos kaip atvirkštinių šansų funkcija, pagal kurią:
Straipsnyje mes neišvesime aukščiau pateiktos formulės, bet patikrinsime ją naudodami skaičius iš aukščiau pateikto pavyzdžio. Žinome, kad su koeficientu nuo 4 iki 1 (), įvykio tikimybė yra 0.8 (). Padarykime pakaitalą: . Tai sutampa su mūsų anksčiau atliktais skaičiavimais. Eikime toliau.
Paskutiniame žingsnyje mes tai padarėme , o tai reiškia, kad galite pakeisti atvirkštinių šansų funkciją. Mes gauname:
Padalinkite skaitiklį ir vardiklį iš , Tada:
Bet kokiu atveju, norėdami įsitikinti, kad niekur nepadarėme klaidos, atliksime dar vieną nedidelį patikrinimą. 2 veiksme mes už nustatė, kad . Tada pakeiskite vertę į logistinio atsako funkciją, tikimės gauti . Pakeičiame ir gauname:
Sveikiname, gerbiamas skaitytojau, ką tik sukūrėme ir išbandėme logistinio atsako funkciją. Pažiūrėkime į funkcijos grafiką.
3 grafikas „Logistinės reakcijos funkcija“
Grafiko braižymo kodas
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()
Literatūroje taip pat galite rasti šios funkcijos pavadinimą kaip sigmoidinė funkcija. Grafikas aiškiai parodo, kad pagrindinis objekto, priklausančio klasei, tikimybės pokytis vyksta santykinai nedideliame diapazone , kažkur iš į .
Siūlau grįžti pas mūsų kredito analitiką ir padėti jam apskaičiuoti paskolos grąžinimo tikimybę, antraip rizikuoja likti be premijos :)
2 lentelė „Potencialūs skolininkai“
Kodas lentelės generavimui
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']]
Taigi, mes nustatėme paskolos grąžinimo tikimybę. Apskritai tai atrodo tiesa.
Iš tiesų tikimybė, kad Vasya, turėdamas 120.000 3.000 RUR atlyginimą, kas mėnesį galės duoti bankui 100 0.3 RUB, yra beveik XNUMX%. Beje, turime suprasti, kad bankas gali išduoti paskolą Lesha, jei banko politika numato, pavyzdžiui, skolinti klientams, kurių paskolos grąžinimo tikimybė yra didesnė nei, tarkime, XNUMX. Tiesiog tokiu atveju bankas sukurs didesnį rezervą galimiems nuostoliams.
Taip pat reikėtų pažymėti, kad nuo lubų buvo paimtas ne mažesnis kaip 3 atlyginimo ir mokėjimo santykis su 5.000 RUR marža. Todėl negalėjome naudoti svorių vektoriaus pradine forma . Reikėjo labai sumažinti koeficientus ir šiuo atveju kiekvieną koeficientą padalinome iš 25.000 XNUMX, tai iš esmės pakoregavome rezultatą. Bet tai buvo padaryta specialiai siekiant supaprastinti medžiagos supratimą pradiniame etape. Gyvenime mums nereikės sugalvoti ir koreguoti koeficientus, o juos rasti. Kituose straipsnio skyriuose išvesime lygtis, kuriomis pasirenkami parametrai .
04. Mažiausių kvadratų metodas svorių vektoriui nustatyti logistinio atsako funkcijoje
Mes jau žinome šį svorių vektoriaus pasirinkimo būdą Kaip Mažiausių kvadratų metodas (LSM) ir iš tikrųjų, kodėl mes tada jo nenaudojame dvejetainės klasifikacijos problemose? Tiesą sakant, niekas netrukdo jums naudoti MNC, tik šis metodas klasifikavimo uždaviniuose duoda rezultatus, kurie yra mažiau tikslūs nei Logistiniai nuostoliai. Tam yra teorinis pagrindas. Pirmiausia pažvelkime į vieną paprastą pavyzdį.
Tarkime, kad mūsų modeliai (naudojant MSE и Logistiniai nuostoliai) jau pradėjo rinktis svorių vektorių ir kažkuriame žingsnyje sustabdėme skaičiavimą. Nesvarbu, viduryje, pabaigoje ar pradžioje, svarbiausia, kad mes jau turime tam tikras svorių vektoriaus reikšmes ir tarkime, kad šiame žingsnyje svorių vektorius abiejų modelių skirtumų nėra. Tada paimkite gautus svorius ir pakeiskite juos logistinės reakcijos funkcija () tam tikram objektui, kuris priklauso klasei . Nagrinėjame du atvejus, kai pagal pasirinktą svorių vektorių mūsų modelis labai klysta ir atvirkščiai – modelis yra labai įsitikinęs, kad objektas priklauso klasei. . Pažiūrėkime, kokios baudos bus išrašytos naudojant MNC и Logistiniai nuostoliai.
Kodas baudoms apskaičiuoti, atsižvelgiant į naudojamą nuostolių funkciją
# класс объекта
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
Klaidos atvejis — modelis priskiria objektą klasei su 0,01 tikimybe
Bauda už naudojimą MNC bus:
Bauda už naudojimą Logistiniai nuostoliai bus:
Stipraus pasitikėjimo atvejis — modelis priskiria objektą klasei su 0,99 tikimybe
Bauda už naudojimą MNC bus:
Bauda už naudojimą Logistiniai nuostoliai bus:
Šis pavyzdys gerai parodo, kad didelės klaidos atveju nuostolių funkcija Žurnalo praradimas baudžia modelį žymiai daugiau nei MSE. Dabar supraskime, koks yra praradimo funkcijos naudojimo teorinis pagrindas Žurnalo praradimas klasifikavimo problemose.
05. Didžiausios tikimybės metodas ir logistinė regresija
Kaip žadėta pradžioje, straipsnyje gausu paprastų pavyzdžių. Studijoje yra dar vienas pavyzdys ir seni svečiai - banko skolininkai: Vasya, Fedya ir Lesha.
Tik tuo atveju, prieš plėtojant pavyzdį, leiskite jums priminti, kad gyvenime mes susiduriame su tūkstančių ar milijonų objektų, turinčių dešimtis ar šimtus funkcijų, mokomuoju pavyzdžiu. Tačiau čia paimti skaičiai, kad jie nesunkiai tilptų į pradedančiojo duomenų mokslininko galvą.
Grįžkime prie pavyzdžio. Įsivaizduokime, kad banko direktorius nusprendė išduoti paskolą visiems, kuriems jos reikia, nepaisant to, kad algoritmas liepė jos neišduoti Lesha. O dabar praėjo pakankamai laiko ir mes žinome, kuris iš trijų herojų grąžino paskolą, o kuris ne. Ko buvo galima tikėtis: Vasya ir Fedya grąžino paskolą, bet Lesha to nepadarė. Dabar įsivaizduokime, kad šis rezultatas mums bus naujas mokymo pavyzdys ir tuo pačiu tarsi dingo visi duomenys apie veiksnius, įtakojančius paskolos grąžinimo tikimybę (skolininko atlyginimas, mėnesinės įmokos dydis). Tada intuityviai galime daryti prielaidą, kad kas trečias skolininkas negrąžins paskolos bankui, arba, kitaip tariant, tikimybė, kad paskolą grąžins kitas skolininkas. . Ši intuityvi prielaida turi teorinį patvirtinimą ir yra pagrįsta didžiausios tikimybės metodas, dažnai literatūroje taip vadinama didžiausios tikimybės principas.
Pirmiausia susipažinkime su koncepciniu aparatu.
Atrankos tikimybė yra tikimybė gauti būtent tokią imtį, gauti būtent tokius stebėjimus/rezultatus, t.y. kiekvieno imties rezultato gavimo tikimybių sandauga (pavyzdžiui, ar Vasya, Fedya ir Lesha paskola buvo grąžinta, ar negrąžinta tuo pačiu metu).
Tikimybės funkcija sieja imties tikimybę su pasiskirstymo parametrų reikšmėmis.
Mūsų atveju mokymo pavyzdys yra apibendrinta Bernoulli schema, kurioje atsitiktinis kintamasis turi tik dvi reikšmes: arba . Todėl imties tikimybę galima parašyti kaip parametro tikimybės funkciją taip:
Aukščiau pateiktą įrašą galima interpretuoti taip. Bendra tikimybė, kad Vasya ir Fedya grąžins paskolą, yra lygi , tikimybė, kad Lesha negrąžins paskolos yra lygi (kadangi buvo NE paskolos grąžinimas), todėl bendra visų trijų įvykių tikimybė yra lygi .
Didžiausios tikimybės metodas yra nežinomo parametro įvertinimo metodas maksimizuojant tikimybės funkcijos. Mūsų atveju turime rasti tokią vertę , kuriame pasiekia maksimumą.
Iš kur kyla tikroji idėja – ieškoti nežinomo parametro reikšmės, kuriai esant tikimybės funkcija pasiekia maksimumą? Idėjos ištakos kyla iš minties, kad pavyzdys yra vienintelis mums prieinamų žinių apie populiaciją šaltinis. Viskas, ką žinome apie populiaciją, yra pavaizduota imtyje. Todėl galime pasakyti tik tiek, kad pavyzdys yra tiksliausias turimas populiacijos atspindys. Todėl turime rasti parametrą, kuriam esant turima imtis tampa labiausiai tikėtina.
Akivaizdu, kad mes susiduriame su optimizavimo problema, kurioje turime rasti funkcijos ekstremalų tašką. Norint rasti ekstremumo tašką, reikia atsižvelgti į pirmosios eilės sąlygą, tai yra prilyginti funkcijos išvestinę nuliui ir išspręsti lygtį norimo parametro atžvilgiu. Tačiau daugelio veiksnių sandaugos išvestinės paieška gali būti ilga užduotis, norint to išvengti, yra speciali technika - perėjimas prie logaritmo. tikimybės funkcijos. Kodėl toks perėjimas įmanomas? Atkreipkime dėmesį į tai, kad mes neieškome pačios funkcijos ekstremumo, ir ekstremumo taškas, tai yra nežinomo parametro reikšmė , kuriame pasiekia maksimumą. Pereinant prie logaritmo, ekstremumo taškas nesikeičia (nors pats ekstremumas skirsis), nes logaritmas yra monotoninė funkcija.
Remdamiesi tuo, kas išdėstyta aukščiau, ir toliau plėtokime savo pavyzdį su paskolomis iš Vasya, Fedya ir Lesha. Pirmiausia pereikime prie tikimybs funkcijos logaritmas:
Dabar galime lengvai atskirti išraišką pagal :
Ir galiausiai apsvarstykite pirmosios eilės sąlygą – funkcijos išvestinę prilyginsime nuliui:
Taigi mūsų intuityvus paskolos grąžinimo tikimybės įvertinimas buvo teoriškai pagrįsta.
Puiku, bet ką dabar daryti su šia informacija? Jeigu darysime prielaidą, kad kas trečias skolininkas negrąžins pinigų bankui, tai pastarasis neišvengiamai bankrutuos. Teisingai, bet tik vertinant paskolos grąžinimo tikimybę, lygią Neatsižvelgėme į veiksnius, turinčius įtakos paskolos grąžinimui: skolininko atlyginimą ir mėnesinės įmokos dydį. Prisiminkime, kad anksčiau skaičiavome paskolos grąžinimo tikimybę kiekvienam klientui, atsižvelgdami į tuos pačius veiksnius. Logiška, kad gavome tikimybes, kurios skiriasi nuo pastovių lygių .
Apibrėžkime mėginių tikimybę:
Kodas imties tikimybių skaičiavimui
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)
Imties tikimybė esant pastoviai vertei :
Tikimybių pavyzdys skaičiuojant paskolos grąžinimo tikimybę atsižvelgiant į veiksnius :
Imties su tikimybe, apskaičiuota priklausomai nuo veiksnių, tikimybė pasirodė esanti didesnė už tikimybę su pastovia tikimybės verte. Ką tai reiškia? Tai rodo, kad žinojimas apie veiksnius leido tiksliau parinkti paskolos grąžinimo tikimybę kiekvienam klientui. Todėl išduodant kitą paskolą skolos grąžinimo tikimybei įvertinti teisingiau būtų naudoti straipsnio 3 dalies pabaigoje siūlomą modelį.
Bet tada, jei norime maksimaliai padidinti imties tikimybės funkcija, tada kodėl gi nepasinaudojus algoritmu, kuris, pavyzdžiui, sukurtų tikimybes Vasjai, Fedjai ir Lešai, lygias atitinkamai 0.99, 0.99 ir 0.01. Galbūt toks algoritmas gerai veiks mokymo pavyzdyje, nes jis priartins imties tikimybės vertę prie , bet, pirma, toks algoritmas greičiausiai turės sunkumų su apibendrinimo galimybėmis, antra, šis algoritmas tikrai nebus tiesinis. Ir jei kovos su persitreniravimu metodai (vienodai silpni apibendrinimo gebėjimai) akivaizdžiai neįtraukti į šio straipsnio planą, panagrinėkime antrąjį punktą išsamiau. Norėdami tai padaryti, tiesiog atsakykite į paprastą klausimą. Ar tikimybė, kad Vasya ir Fedya grąžins paskolą, gali būti vienoda, atsižvelgiant į mums žinomus veiksnius? Skamba logikos požiūriu, žinoma, ne, negali. Taigi Vasya paskolai grąžinti kas mėnesį mokės 2.5% savo atlyginimo, o Fedya - beveik 27,8%. Taip pat 2 grafike „Klientų klasifikacija“ matome, kad Vasya yra daug toliau nuo klases skiriančios linijos nei Fedya. Ir galiausiai, mes žinome, kad funkcija Vasya ir Fedya turi skirtingas vertes: 4.24 Vasya ir 1.0 Fedya. Dabar, jei, pavyzdžiui, Fedya uždirbtų eilės tvarka daugiau arba paprašytų mažesnės paskolos, tada Vasya ir Fedya paskolos grąžinimo tikimybė būtų panaši. Kitaip tariant, linijinės priklausomybės negalima apgauti. Ir jei iš tikrųjų apskaičiavome šansus , ir jų nepaėmė iš oro, galėtume drąsiai teigti, kad mūsų vertybės geriausiai leidžia įvertinti kiekvieno skolininko paskolos grąžinimo tikimybę, tačiau kadangi susitarėme daryti prielaidą, kad koeficientų nustatymas buvo atliktas pagal visas taisykles, tada taip ir manysime - mūsų koeficientai leidžia geriau įvertinti tikimybę :)
Tačiau mes nukrypstame. Šiame skyriuje turime suprasti, kaip nustatomas svorių vektorius , kuri būtina norint įvertinti kiekvieno skolininko paskolos grąžinimo tikimybę.
Trumpai apibendrinkime, kokiu arsenalu ieškome šansų :
1. Darome prielaidą, kad ryšys tarp tikslinio kintamojo (numatymo reikšmės) ir veiksnio, turinčio įtakos rezultatui, yra tiesinis. Dėl šios priežasties jis naudojamas tiesinės regresijos funkcija malonus , kurios eilutė padalina objektus (klientus) į klases и arba (klientai, kurie gali grąžinti paskolą, ir tie, kurie negali grąžinti). Mūsų atveju lygtis turi formą .
2. Mes naudojame atvirkštinė logit funkcija malonus nustatyti tikimybę, kad objektas priklauso klasei .
3. Mes laikome savo mokymo rinkinį apibendrinto įgyvendinimu Bernulli schemos, tai yra, kiekvienam objektui generuojamas atsitiktinis kintamasis, kuris su tikimybe (kiekvienam objektui savo) įgauna reikšmę 1 ir su tikimybe - 0.
4. Mes žinome, ką turime maksimaliai padidinti imties tikimybės funkcija atsižvelgiant į priimtus veiksnius, kad turima imtis taptų patikimiausia. Kitaip tariant, turime pasirinkti parametrus, pagal kuriuos imtis būtų patikimiausia. Mūsų atveju pasirinktas parametras yra paskolos grąžinimo tikimybė , o tai savo ruožtu priklauso nuo nežinomų koeficientų . Taigi turime rasti tokį svorių vektorių , kuriai esant imties tikimybė bus didžiausia.
5. Mes žinome, ką maksimaliai padidinti pavyzdinės tikimybės funkcijos gali būti panaudotas didžiausios tikimybės metodas. Ir mes žinome visas sudėtingas darbo su šiuo metodu gudrybes.
Štai kaip tai yra kelių žingsnių žingsnis :)
Dabar atminkite, kad pačioje straipsnio pradžioje norėjome išvesti dviejų tipų nuostolių funkcijas Logistiniai nuostoliai priklausomai nuo to, kaip įvardijamos objektų klasės. Taip atsitiko, kad klasifikavimo uždaviniuose su dviem klasėmis klasės žymimos kaip и arba . Priklausomai nuo žymėjimo, išvestis turės atitinkamą praradimo funkciją.
1 atvejis. Objektų klasifikavimas į и
Anksčiau nustatant atrankos tikimybę, kurioje skolininko skolos grąžinimo tikimybė buvo skaičiuojama pagal veiksnius ir duotus koeficientus. , pritaikėme formulę:
Tikrai yra prasmė logistinės reagavimo funkcijos duotam svorių vektoriui
Tada niekas netrukdo mums parašyti pavyzdinės tikimybės funkcijos taip:
Taip atsitinka, kad kai kuriems pradedantiesiems analitikams kartais sunku iš karto suprasti, kaip ši funkcija veikia. Pažvelkime į 4 trumpus pavyzdžius, kurie viską paaiškins:
1. jei (t.y. pagal mokymo pavyzdį objektas priklauso +1 klasei), o mūsų algoritmas nustato objekto priskyrimo klasei tikimybę lygi 0.9, tada ši imties dalis bus apskaičiuojama taip:
2. jei Ir , tada skaičiavimas bus toks:
3. jei Ir , tada skaičiavimas bus toks:
4. jei Ir , tada skaičiavimas bus toks:
Akivaizdu, kad tikimybės funkcija bus maksimaliai padidinta 1 ir 3 atvejais arba bendruoju atveju - su teisingai atspėtomis objekto priskyrimo klasei tikimybių reikšmėmis .
Dėl to, kad nustatant objekto priskyrimo klasei tikimybę Mes nežinome tik koeficientų , tada mes jų ieškosime. Kaip minėta aukščiau, tai yra optimizavimo problema, kurioje pirmiausia turime rasti tikimybės funkcijos išvestinę svorių vektoriaus atžvilgiu. . Tačiau pirmiausia prasminga užduotis supaprastinti patiems: ieškosime logaritmo išvestinės tikimybės funkcijos.
Kodėl po logaritmo, in logistikos klaidų funkcijos, mes pakeitėme ženklą iš apie . Viskas paprasta, nes modelio kokybės vertinimo uždaviniuose yra įprasta sumažinti funkcijos reikšmę, dešinę išraiškos pusę padauginome iš ir atitinkamai, užuot padidinę, dabar sumažiname funkciją.
Tiesą sakant, dabar, jūsų akyse, praradimo funkcija buvo kruopščiai išvedama - Logistiniai nuostoliai treniruočių rinkiniui su dviem klasėmis: и .
Dabar, norėdami rasti koeficientus, tereikia rasti išvestinę logistikos klaidų funkcijos ir tada, naudodami skaitmeninio optimizavimo metodus, tokius kaip gradiento nusileidimas arba stochastinis gradiento nusileidimas, pasirinkite optimaliausius koeficientus . Tačiau, atsižvelgiant į nemažą straipsnio apimtį, diferencijavimą siūloma atlikti patiems, o gal tai bus kito straipsnio tema su daug aritmetikos be tokių detalių pavyzdžių.
2 atvejis. Objektų klasifikavimas į и
Metodas čia bus toks pat kaip ir pamokose и , bet pats kelias į nuostolių funkcijos išvestį Logistiniai nuostoliai, bus puošnesni. Pradėkime. Tikimybės funkcijai naudosime operatorių "jei tada...". Tai yra, jei Objektas priklauso klasei , tada imties tikimybei apskaičiuoti naudojame tikimybę , jei objektas priklauso klasei , tada pakeičiame į tikimybę . Taip atrodo tikimybės funkcija:
Pirštais apibūdinkime, kaip tai veikia. Panagrinėkime 4 atvejus:
1. jei и , tada atrankos tikimybė išnyks
2. jei и , tada atrankos tikimybė išnyks
3. jei и , tada atrankos tikimybė išnyks
4. jei и , tada atrankos tikimybė išnyks
Akivaizdu, kad 1 ir 3 atvejais, kai tikimybės buvo teisingai nustatytos algoritmu, tikimybės funkcija bus maksimaliai padidintas, tai yra, būtent tai ir norėjome gauti. Tačiau šis metodas yra gana sudėtingas, todėl toliau apsvarstysime kompaktiškesnį žymėjimą. Bet pirmiausia logaritmuokime tikimybės funkciją su ženklo pasikeitimu, nes dabar ją sumažinsime iki minimumo.
Vietoj to pakeiskime išraiška :
Supaprastinkime tinkamą logaritmo terminą naudodami paprastus aritmetinius metodus ir gaukime:
Dabar atėjo laikas atsikratyti operatoriaus "jei tada...". Atkreipkite dėmesį, kad kai objektas priklauso klasei , tada išraiškoje po logaritmu, vardiklyje, pakeltas į valdžią , jei objektas priklauso klasei , tada $e$ pakeliamas į laipsnį . Todėl laipsnio žymėjimą galima supaprastinti sujungiant abu atvejus į vieną: , tada logistikos klaidų funkcija bus tokia forma:
Laikydamiesi logaritmo taisyklių, trupmeną apverčiame ir dedame ženklą "" (minusas) už logaritmą gauname:
Čia yra praradimo funkcija logistikos nuostoliai, kuris naudojamas treniruočių rinkinyje su klasėms priskirtais objektais: и .
Na, šiuo metu aš atostogauju ir baigiame straipsnį.
Pagalbinės medžiagos
1. Literatūra
1) Taikomoji regresinė analizė / N. Draper, G. Smith - 2nd ed. – M.: Finansai ir statistika, 1986 (vertimas iš anglų kalbos)
2) Tikimybių teorija ir matematinė statistika / V.E. Gmurmanas – 9 leidimas. - M.: Aukštoji mokykla, 2003 m
3) Tikimybių teorija / N.I. Černova – Novosibirskas: Novosibirsko valstybinis universitetas, 2007 m
4) Verslo analitika: nuo duomenų iki žinių / Paklin N. B., Oreshkov V. I. - 2nd ed. — Sankt Peterburgas: Petras, 2013 m
5) Duomenų mokslas Duomenų mokslas nuo nulio / Joel Gras – Sankt Peterburgas: BHV Petersburg, 2017 m.
6) Praktinė statistika duomenų mokslo specialistams / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018 m.
2. Paskaitos, kursai (video)
1)
2)
3)
4)
5)
3. Interneto šaltiniai
1)
2)
3)
4)
5)
6)
7)
Šaltinis: www.habr.com