În acest articol, vom analiza calculele teoretice ale transformării funcții de regresie liniară в funcția de transformare logit inversă (altfel numită funcție de răspuns logistic). Apoi, folosind arsenalul metoda cu maxima probabilitate, în conformitate cu modelul de regresie logistică, derivăm funcția de pierdere Pierdere logistică, sau cu alte cuvinte, vom defini o funcție cu care parametrii vectorului de greutate sunt selectați în modelul de regresie logistică .
Schița articolului:
- Să repetăm relația liniară dintre două variabile
- Să identificăm nevoia de transformare funcții de regresie liniară в funcția de răspuns logistic
- Să efectuăm transformările și ieșirea funcția de răspuns logistic
- Să încercăm să înțelegem de ce metoda celor mai mici pătrate este proastă la selectarea parametrilor funcții Pierdere logistică
- Folosim metoda cu maxima probabilitate pentru determinare funcții de selecție a parametrilor :
5.1. Cazul 1: funcția Pierdere logistică pentru obiectele cu denumiri de clasă 0 и 1:
5.2. Cazul 2: funcția Pierdere logistică pentru obiectele cu denumiri de clasă -1 и +1:
Articolul este plin cu exemple simple în care toate calculele sunt ușor de făcut oral sau pe hârtie; în unele cazuri, poate fi necesar un calculator. Așa că pregătește-te :)
Acest articol este destinat în principal oamenilor de știință ai datelor cu un nivel inițial de cunoștințe în elementele de bază ale învățării automate.
Articolul va oferi, de asemenea, cod pentru desenarea graficelor și calculelor. Tot codul este scris în limba piton 2.7. Permiteți-mi să explic în prealabil „noutatea” versiunii utilizate - aceasta este una dintre condițiile pentru a urma cursul binecunoscut de la Yandex pe o platformă de educație online la fel de cunoscută Courserași, după cum s-ar putea presupune, materialul a fost pregătit pe baza acestui curs.
01. Dependență de linie dreaptă
Este destul de rezonabil să punem întrebarea - ce legătură are dependența liniară și regresia logistică cu aceasta?
E simplu! Regresia logistică este unul dintre modelele care aparțin clasificatorului liniar. Cu cuvinte simple, sarcina unui clasificator liniar este de a prezice valorile țintă din variabile (regressori) . Se crede că dependența dintre caracteristici și valorile țintă liniar. De aici și numele clasificatorului - liniar. Pentru a spune foarte aproximativ, modelul de regresie logistică se bazează pe presupunerea că există o relație liniară între caracteristici și valorile țintă . Aceasta este conexiunea.
Există primul exemplu în studio și este, în mod corect, despre dependența rectilinie a cantităților studiate. În procesul de pregătire a articolului, am dat peste un exemplu care a pus deja pe mulți oameni pe margine - dependența curentului de tensiune („Analiza de regresie aplicată”, N. Draper, G. Smith). O să ne uităm și aici.
Potrivit Legea lui Ohm:
Unde - puterea curentului, - Voltaj, - rezistenta.
Daca nu am sti Legea lui Ohm, atunci am putea găsi dependența empiric prin schimbare și măsurarea , în timp ce sprijină fix. Apoi am vedea că graficul de dependență din dă o linie mai mult sau mai puțin dreaptă prin origine. Spunem „mai mult sau mai puțin” deoarece, deși relația este de fapt exactă, măsurătorile noastre pot conține mici erori și, prin urmare, punctele din grafic s-ar putea să nu cadă exact pe linie, ci vor fi împrăștiate în jurul ei în mod aleatoriu.
Graficul 1 „Dependență” din »
Cod de desen grafic
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. Necesitatea transformării ecuației de regresie liniară
Să ne uităm la un alt exemplu. Să ne imaginăm că lucrăm într-o bancă și sarcina noastră este să stabilim probabilitatea ca debitorul să ramburseze împrumutul în funcție de anumiți factori. Pentru a simplifica sarcina, vom lua în considerare doar doi factori: salariul lunar al împrumutatului și suma lunară de rambursare a împrumutului.
Sarcina este foarte condiționată, dar cu acest exemplu putem înțelege de ce nu este suficient de utilizat funcții de regresie liniară, și, de asemenea, aflați ce transformări trebuie efectuate cu funcția.
Să revenim la exemplu. Se înțelege că cu cât salariul este mai mare, cu atât împrumutatul va putea aloca lunar pentru rambursarea împrumutului. În același timp, pentru un anumit interval de salariu, această relație va fi destul de liniară. De exemplu, să luăm un interval de salariu de la 60.000 RUR la 200.000 RUR și să presupunem că, în intervalul de salariu specificat, dependența mărimii plății lunare de mărimea salariului este liniară. Să presupunem că pentru intervalul specificat de salarii s-a dezvăluit că raportul salariu-plată nu poate scădea sub 3, iar împrumutatul trebuie să aibă în rezervă 5.000 RUR. Și numai în acest caz, vom presupune că împrumutatul va rambursa împrumutul băncii. Apoi, ecuația de regresie liniară va lua forma:
unde , , , - salariu - al împrumutatului, - plata împrumutului - al-lea împrumutat.
Înlocuirea salariului și a plății împrumutului cu parametri fixe în ecuație Puteți decide dacă acordați sau refuzați un împrumut.
Privind în viitor, observăm că, cu parametrii dați funcția de regresie liniară, folosit in funcții de răspuns logistic va produce valori mari care vor complica calculele pentru a determina probabilitățile de rambursare a creditului. Prin urmare, se propune să ne reducem coeficienții, să spunem, de 25.000 de ori. Această transformare a coeficienților nu va schimba decizia de a acorda un împrumut. Să ne amintim acest punct pentru viitor, dar acum, pentru a ne clarifica și mai mult despre ce vorbim, să luăm în considerare situația cu trei potențiali debitori.
Tabelul 1 „Debitori potențiali”
Cod pentru generarea tabelului
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']]
Conform datelor din tabel, Vasia, cu un salariu de 120.000 RUR, vrea să primească un credit pentru a-l rambursa lunar la 3.000 RUR. Am stabilit că, pentru aprobarea împrumutului, salariul lui Vasya trebuie să depășească de trei ori valoarea plății și trebuie să mai rămână 5.000 de lei. Vasya îndeplinește această cerință: . Au mai rămas chiar și 106.000 RUR. În ciuda faptului că la calcul am redus șansele De 25.000 de ori, rezultatul a fost același - împrumutul poate fi aprobat. Fedya va primi și un împrumut, dar Lesha, în ciuda faptului că primește cel mai mult, va trebui să-și stăpânească poftele.
Să desenăm un grafic pentru acest caz.
Graficul 2 „Clasificarea debitorilor”
Cod pentru desenarea graficului
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()
Deci, linia noastră dreaptă, construită în conformitate cu funcția , separă debitorii „răi” de cei „buni”. Acei debitori ale căror dorințe nu coincid cu capacitățile lor sunt deasupra liniei (Lesha), în timp ce cei care, conform parametrilor modelului nostru, sunt capabili să ramburseze împrumutul sunt sub linie (Vasya și Fedya). Cu alte cuvinte, putem spune acest lucru: linia noastră directă împarte debitorii în două clase. Să le notăm astfel: la clasă Vom clasifica acei debitori care sunt cel mai probabil să ramburseze împrumutul ca sau Vom include acei debitori care cel mai probabil nu vor putea rambursa împrumutul.
Să rezumam concluziile din acest exemplu simplu. Să luăm un punct și, înlocuind coordonatele punctului în ecuația corespunzătoare a dreptei , luați în considerare trei opțiuni:
- Dacă punctul se află sub linie și îl atribuim clasei , apoi valoarea funcției va fi pozitiv de la la . Aceasta înseamnă că putem presupune că probabilitatea de rambursare a împrumutului este în limite . Cu cât valoarea funcției este mai mare, cu atât probabilitatea este mai mare.
- Dacă punctul este deasupra liniei și îl atribuim clasei sau , atunci valoarea funcției va fi negativă de la la . Apoi vom presupune că probabilitatea de rambursare a datoriei este în limita și, cu cât valoarea absolută a funcției este mai mare, cu atât este mai mare încrederea noastră.
- Punctul se află pe o linie dreaptă, la limita dintre două clase. În acest caz, valoarea funcției va fi egal iar probabilitatea de rambursare a creditului este egală cu .
Acum, să ne imaginăm că nu avem doi factori, ci zeci și nu trei, ci mii de debitori. Atunci în loc de o linie dreaptă vom avea m-dimensional plan și coeficienți nu vom fi scoși din aer, ci derivați după toate regulile, și pe baza datelor acumulate despre debitorii care au sau nu au rambursat împrumutul. Și într-adevăr, rețineți că acum selectăm debitori folosind coeficienți deja cunoscuți . De fapt, sarcina modelului de regresie logistică este tocmai de a determina parametrii , la care valoarea funcției de pierdere Pierdere logistică va tinde la minim. Dar despre cum se calculează vectorul , vom afla mai multe în secțiunea a 5-a a articolului. Între timp, ne întoarcem pe pământul promis – la bancherul nostru și cei trei clienți ai săi.
Datorită funcției știm cui i se poate acorda un împrumut și cui trebuie refuzat. Dar nu puteți merge la director cu astfel de informații, pentru că au vrut să obțină de la noi probabilitatea rambursării împrumutului de către fiecare împrumutat. Ce să fac? Răspunsul este simplu - trebuie să transformăm cumva funcția , ale căror valori se află în interval la o funcție ale cărei valori se vor afla în interval . Și o astfel de funcție există, se numește funcția de răspuns logistic sau transformarea logit invers. Întâlni:
Să vedem pas cu pas cum funcționează funcția de răspuns logistic. Rețineți că vom merge în direcția opusă, adică. vom presupune că știm valoarea probabilității, care se află în intervalul de la la și apoi vom „desface” această valoare la întregul interval de numere din la .
03. Deducem funcția de răspuns logistic
Pasul 1. Convertiți valorile probabilității într-un interval
În timpul transformării funcţiei в funcția de răspuns logistic Îl vom lăsa pe analistul de credit în pace și vom face un tur al caselor de pariuri. Nu, desigur, nu vom plasa pariuri, tot ceea ce ne interesează acolo este sensul expresiei, de exemplu, șansa este 4 la 1. Cotele, familiare tuturor pariorilor, sunt raportul dintre „reușite” și „ eșecuri”. În termeni de probabilitate, cotele sunt probabilitatea ca un eveniment să se producă împărțită la probabilitatea ca evenimentul să nu se producă. Să notăm formula pentru șansa ca un eveniment să se producă :
Unde - probabilitatea producerii unui eveniment, — probabilitatea ca un eveniment să NU se producă
De exemplu, dacă probabilitatea ca un cal tânăr, puternic și jucăuș poreclit „Veterok” să învingă o bătrână și flăcătoare pe nume „Matilda” la o cursă este egală cu , atunci șansele de succes pentru „Veterok” vor fi к și invers, cunoscând șansele, nu ne va fi greu să calculăm probabilitatea :
Astfel, am învățat să „traducem” probabilitatea în șanse, din care iau valori la . Să mai facem un pas și să învățăm să „traducem” probabilitatea pe întreaga linie numerică din la .
Pasul 2. Convertiți valorile probabilității într-un interval
Acest pas este foarte simplu - să luăm logaritmul cotelor la baza numărului lui Euler și obținem:
Acum știm că dacă , apoi calculați valoarea va fi foarte simplu și, în plus, ar trebui să fie pozitiv: . Asta este adevărat.
De curiozitate, să verificăm ce dacă , atunci ne așteptăm să vedem o valoare negativă . Verificăm: . Asta e corect.
Acum știm cum să convertim valoarea probabilității din la de-a lungul întregii drepte numerice de la la . În pasul următor vom face invers.
Deocamdată, observăm că în conformitate cu regulile logaritmului, cunoașterea valorii funcției , puteți calcula cotele:
Această metodă de determinare a cotelor ne va fi utilă în pasul următor.
Pasul 3. Să derivăm o formulă pentru a determina
Așa că am învățat, știind , găsiți valorile funcției . Cu toate acestea, de fapt, avem nevoie de exact opusul - cunoașterea valorii a găsi . Pentru a face acest lucru, să ne întoarcem la un astfel de concept precum funcția de cote inverse, conform căreia:
În articol nu vom deriva formula de mai sus, dar o vom verifica folosind numerele din exemplul de mai sus. Știm că cu cote de 4 la 1 (), probabilitatea ca evenimentul să se producă este de 0.8 (). Să facem o înlocuire: . Acest lucru coincide cu calculele noastre efectuate mai devreme. Sa trecem peste.
În ultimul pas am dedus că , ceea ce înseamnă că puteți face o înlocuire în funcția de cote inverse. Primim:
Împărțiți atât numărătorul cât și numitorul cu , Apoi:
Pentru orice eventualitate, pentru a ne asigura că nu am greșit nicăieri, vom face încă o mică verificare. La pasul 2, noi pentru a determinat că . Apoi, înlocuind valoarea în funcția de răspuns logistic, ne așteptăm să ajungem . Inlocuim si obtinem:
Felicitări, dragă cititor, tocmai am derivat și testat funcția de răspuns logistic. Să ne uităm la graficul funcției.
Graficul 3 „Funcția de răspuns logistic”
Cod pentru desenarea graficului
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()
În literatură puteți găsi și numele acestei funcții ca funcția sigmoidă. Graficul arată clar că principala modificare a probabilității ca un obiect să aparțină unei clase are loc într-un interval relativ mic. , undeva de la .
Vă sugerez să reveniți la analistul nostru de credit și să-l ajutați să calculeze probabilitatea rambursării creditului, altfel riscă să rămână fără bonus :)
Tabelul 2 „Debitori potențiali”
Cod pentru generarea tabelului
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']]
Deci, am determinat probabilitatea rambursării creditului. În general, acest lucru pare să fie adevărat.
Într-adevăr, probabilitatea ca Vasya, cu un salariu de 120.000 RUR, să poată oferi băncii 3.000 RUR în fiecare lună este aproape de 100%. Apropo, trebuie să înțelegem că banca poate acorda un împrumut către Lesha dacă politica băncii prevede, de exemplu, acordarea de împrumuturi clienților cu o probabilitate de rambursare a creditului mai mare de, să zicem, 0.3. Doar că în acest caz banca va crea o rezervă mai mare pentru eventuale pierderi.
De remarcat, de asemenea, că din plafon a fost luată raportul salariu-plată de minim 3 și cu o marjă de 5.000 RUR. Prin urmare, nu am putea folosi vectorul greutăților în forma sa originală . Trebuia să reducem foarte mult coeficienții, iar în acest caz am împărțit fiecare coeficient la 25.000, adică, în esență, am ajustat rezultatul. Dar acest lucru a fost făcut special pentru a simplifica înțelegerea materialului la etapa inițială. În viață, nu va trebui să inventăm și să ajustam coeficienți, ci să-i găsim. În secțiunile următoare ale articolului vom deriva ecuațiile cu care sunt selectați parametrii .
04. Metoda celor mai mici pătrate pentru determinarea vectorului greutăților în funcţia de răspuns logistic
Cunoaștem deja această metodă de selectare a unui vector de greutăți ca metoda celor mai mici pătrate (LSM) și de fapt, de ce nu îl folosim atunci în probleme de clasificare binară? Într-adevăr, nimic nu vă împiedică să utilizați MNC, numai această metodă în probleme de clasificare dă rezultate mai puțin precise decât Pierdere logistică. Există o bază teoretică pentru aceasta. Să ne uităm mai întâi la un exemplu simplu.
Să presupunem că modelele noastre (folosind MSE и Pierdere logistică) au început deja să selecteze vectorul greutăților și am oprit calculul la un pas. Nu contează dacă la mijloc, la sfârșit sau la început, principalul lucru este că avem deja niște valori ale vectorului greutăților și să presupunem că la acest pas, vectorul greutăților pentru ambele modele nu exista diferente. Apoi luați greutățile rezultate și înlocuiți-le în funcția de răspuns logistic () pentru un obiect care aparține clasei . Examinăm două cazuri în care, în conformitate cu vectorul de greutăți selectat, modelul nostru este foarte greșit și invers - modelul este foarte încrezător că obiectul aparține clasei . Să vedem ce amenzi vor fi emise la utilizare MNC и Pierdere logistică.
Cod pentru calcularea penalităților în funcție de funcția de pierdere utilizată
# класс объекта
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
Un caz de gafă — modelul atribuie un obiect unei clase cu o probabilitate de 0,01
Penalizare la utilizare MNC va fi:
Penalizare la utilizare Pierdere logistică va fi:
Un caz de încredere puternică — modelul atribuie un obiect unei clase cu o probabilitate de 0,99
Penalizare la utilizare MNC va fi:
Penalizare la utilizare Pierdere logistică va fi:
Acest exemplu ilustrează bine că în cazul unei erori grave funcția de pierdere Pierderea jurnalului penalizează modelul semnificativ mai mult decât MSE. Să înțelegem acum care este fundalul teoretic pentru utilizarea funcției de pierdere Pierderea jurnalului în probleme de clasificare.
05. Metoda maximă de probabilitate și regresie logistică
După cum am promis la început, articolul este plin de exemple simple. În studio există un alt exemplu și oaspeți vechi - debitori bancar: Vasya, Fedya și Lesha.
Pentru orice eventualitate, înainte de a dezvolta exemplul, permiteți-mi să vă reamintesc că în viață avem de-a face cu un eșantion de antrenament de mii sau milioane de obiecte cu zeci sau sute de caracteristici. Cu toate acestea, aici numerele sunt luate astfel încât să se încadreze cu ușurință în capul unui cercetător de date începător.
Să revenim la exemplu. Să ne imaginăm că directorul băncii a decis să acorde un împrumut tuturor celor care au nevoie, în ciuda faptului că algoritmul i-a spus să nu-l dea lui Lesha. Și acum a trecut destul timp și știm care dintre cei trei eroi a rambursat împrumutul și care nu. Ce era de așteptat: Vasya și Fedya au rambursat împrumutul, dar Lesha nu. Acum să ne imaginăm că acest rezultat va fi un nou eșantion de formare pentru noi și, în același timp, parcă toate datele privind factorii care influențează probabilitatea rambursării împrumutului (salariul debitorului, mărimea plății lunare) ar fi dispărut. Apoi, intuitiv, putem presupune că fiecare al treilea debitor nu rambursează împrumutul băncii, sau cu alte cuvinte, probabilitatea ca următorul împrumutat să ramburseze împrumutul. . Această presupunere intuitivă are confirmare teoretică și se bazează pe metoda cu maxima probabilitate, adesea în literatură se numește principiul maximului probabilitate.
În primul rând, să ne familiarizăm cu aparatul conceptual.
Probabilitatea de eșantionare este probabilitatea de a obține exact un astfel de eșantion, de a obține exact astfel de observații/rezultate, i.e. produsul probabilităților de obținere a fiecăruia dintre rezultatele eșantionului (de exemplu, dacă împrumutul lui Vasya, Fedya și Lesha a fost rambursat sau nu în același timp).
Funcția de probabilitate raportează probabilitatea unui eșantion de valorile parametrilor de distribuție.
În cazul nostru, eșantionul de antrenament este o schemă Bernoulli generalizată, în care variabila aleatoare ia doar două valori: sau . Prin urmare, probabilitatea eșantionului poate fi scrisă ca o funcție de probabilitate a parametrului după cum urmează:
Intrarea de mai sus poate fi interpretată după cum urmează. Probabilitatea comună ca Vasya și Fedya să ramburseze împrumutul este egală cu , probabilitatea ca Lesha să NU ramburseze împrumutul este egală cu (din moment ce NU a avut loc rambursarea creditului), prin urmare probabilitatea comună a tuturor celor trei evenimente este egală .
Metoda maximă de probabilitate este o metodă de estimare a unui parametru necunoscut prin maximizare funcții de probabilitate. În cazul nostru, trebuie să găsim o astfel de valoare la care atinge maximul său.
De unde vine ideea reală - de a căuta valoarea unui parametru necunoscut la care funcția de probabilitate atinge un maxim? Originile ideii provin din ideea că un eșantion este singura sursă de cunoștințe pe care o avem la dispoziție despre populație. Tot ceea ce știm despre populație este reprezentat în eșantion. Prin urmare, tot ce putem spune este că un eșantion este cea mai fidelă reflectare a populației pe care o avem la dispoziție. Prin urmare, trebuie să găsim un parametru la care eșantionul disponibil devine cel mai probabil.
Evident, avem de-a face cu o problemă de optimizare în care trebuie să găsim punctul extremum al unei funcții. Pentru a găsi punctul extremum, este necesar să luăm în considerare condiția de ordinul întâi, adică să echivalăm derivata funcției la zero și să rezolvăm ecuația în raport cu parametrul dorit. Cu toate acestea, căutarea unei derivate a unui produs dintr-un număr mare de factori poate fi o sarcină îndelungată; pentru a evita acest lucru, există o tehnică specială - trecerea la logaritm funcții de probabilitate. De ce este posibilă o astfel de tranziție? Să fim atenți la faptul că nu căutăm extremul funcției în sine, și punctul extremum, adică valoarea parametrului necunoscut la care atinge maximul său. Când treceți la un logaritm, punctul extremum nu se schimbă (deși extremul în sine va diferi), deoarece logaritmul este o funcție monotonă.
Să continuăm, în conformitate cu cele de mai sus, să dezvoltăm exemplul nostru cu împrumuturi de la Vasya, Fedya și Lesha. Mai întâi să trecem la logaritmul funcției de probabilitate:
Acum putem diferenția cu ușurință expresia prin :
Și, în sfârșit, luăm în considerare condiția de ordinul întâi - echivalăm derivata funcției cu zero:
Astfel, estimarea noastră intuitivă a probabilității de rambursare a creditului era teoretic justificată.
Grozav, dar ce ar trebui să facem acum cu aceste informații? Dacă presupunem că fiecare al treilea debitor nu returnează banii băncii, atunci aceasta din urmă va da inevitabil faliment. Așa este, dar numai atunci când se evaluează probabilitatea de rambursare a creditului egală cu Nu am luat în considerare factorii care influențează rambursarea împrumutului: salariul debitorului și mărimea plății lunare. Să ne amintim că am calculat anterior probabilitatea de rambursare a creditului de către fiecare client, ținând cont de acești factori. Este logic că am obținut probabilități diferite de constanta egală .
Să definim probabilitatea eșantioanelor:
Cod pentru calcularea probabilităților de eșantionare
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)
Probabilitatea eșantionului la o valoare constantă :
Probabilitatea eșantionului la calcularea probabilității de rambursare a împrumutului ținând cont de factori :
Probabilitatea unui eșantion cu o probabilitate calculată în funcție de factori s-a dovedit a fi mai mare decât probabilitatea cu o valoare constantă a probabilității. Ce spune? Acest lucru sugerează că cunoștințele despre factori au făcut posibilă selectarea mai precisă a probabilității de rambursare a creditului pentru fiecare client. Prin urmare, la emiterea următorului împrumut, mai corect ar fi să se utilizeze modelul propus la sfârșitul secțiunii 3 din articol pentru evaluarea probabilității de rambursare a datoriilor.
Dar atunci, dacă vrem să maximizăm funcția de probabilitate a eșantionului, atunci de ce să nu folosiți un algoritm care va produce probabilități pentru Vasya, Fedya și Lesha, de exemplu, egale cu 0.99, 0.99 și, respectiv, 0.01. Poate că un astfel de algoritm va funcționa bine pe eșantionul de antrenament, deoarece va aduce valoarea probabilității eșantionului mai aproape de , dar, în primul rând, un astfel de algoritm va avea cel mai probabil dificultăți cu capacitatea de generalizare și, în al doilea rând, acest algoritm cu siguranță nu va fi liniar. Și dacă metodele de combatere a supraantrenamentului (capacitatea de generalizare la fel de slabă) nu sunt în mod clar incluse în planul acestui articol, atunci să trecem prin al doilea punct mai detaliat. Pentru a face acest lucru, trebuie doar să răspundeți la o întrebare simplă. Probabilitatea ca Vasya și Fedya să ramburseze împrumutul poate fi aceeași, ținând cont de factorii cunoscuți de noi? Din punctul de vedere al logicii sunetului, desigur că nu, nu se poate. Deci, Vasya va plăti lunar 2.5% din salariu pentru a rambursa împrumutul, iar Fedya - aproape 27,8%. Tot în graficul 2 „Clasificarea clienților” vedem că Vasya este mult mai departe de linia care separă clasele decât Fedya. Și în sfârșit, știm că funcția pentru Vasya și Fedya ia valori diferite: 4.24 pentru Vasya și 1.0 pentru Fedya. Acum, dacă Fedya, de exemplu, a câștigat cu un ordin de mărime mai mult sau a cerut un împrumut mai mic, atunci probabilitățile de rambursare a împrumutului pentru Vasya și Fedya ar fi similare. Cu alte cuvinte, dependența liniară nu poate fi păcălită. Și dacă am calculat efectiv șansele , și nu le-am scos din aer, am putea spune cu siguranță că valorile noastre cel mai bine ne permit să estimăm probabilitatea de rambursare a împrumutului de către fiecare împrumutat, dar întrucât am convenit să presupunem că determinarea coeficienților a fost efectuat conform tuturor regulilor, atunci vom presupune că da - coeficienții noștri ne permit să oferim o estimare mai bună a probabilității :)
Totuși, ne divagăm. În această secțiune trebuie să înțelegem cum este determinat vectorul greutăților , care este necesar pentru evaluarea probabilității de rambursare a împrumutului de către fiecare împrumutat.
Să rezumăm pe scurt cu ce arsenal căutăm cote :
1. Presupunem că relația dintre variabila țintă (valoarea de predicție) și factorul care influențează rezultatul este liniară. Din acest motiv este folosit funcția de regresie liniară specie , a cărui linie împarte obiectele (clienții) în clase и sau (clienții care sunt în măsură să ramburseze împrumutul și cei care nu sunt). În cazul nostru, ecuația are forma .
2. Folosim funcția de logit invers specie pentru a determina probabilitatea ca un obiect să aparțină unei clase .
3. Considerăm setul nostru de instruire ca o implementare a unui generalizat Scheme Bernoulli, adică pentru fiecare obiect se generează o variabilă aleatoare, care cu probabilitate (proprie pentru fiecare obiect) ia valoarea 1 si cu probabilitate - 0.
4. Știm ce trebuie să maximizăm funcția de probabilitate a eșantionului luând în considerare factorii acceptați astfel încât eșantionul disponibil să devină cel mai plauzibil. Cu alte cuvinte, trebuie să selectăm parametrii la care eșantionul va fi cel mai plauzibil. În cazul nostru, parametrul selectat este probabilitatea rambursării creditului , care la rândul său depinde de coeficienți necunoscuți . Deci trebuie să găsim un astfel de vector de greutăți , la care probabilitatea eșantionului va fi maximă.
5. Știm ce să maximizăm funcții de probabilitate a eșantionului puteți folosi metoda cu maxima probabilitate. Și știm toate trucurile complicate pentru a lucra cu această metodă.
Așa se dovedește a fi o mișcare în mai mulți pași :)
Acum amintiți-vă că la începutul articolului am vrut să derivăm două tipuri de funcții de pierdere Pierdere logistică în funcţie de modul în care sunt desemnate clasele de obiecte. Sa întâmplat ca în problemele de clasificare cu două clase, clasele sunt notate ca и sau . În funcție de notație, ieșirea va avea o funcție de pierdere corespunzătoare.
Cazul 1. Clasificarea obiectelor în и
Mai devreme, la determinarea probabilității unui eșantion, în care probabilitatea rambursării datoriilor de către împrumutat a fost calculată pe baza factorilor și a coeficienților dați , am aplicat formula:
De fapt este sensul funcții de răspuns logistic pentru un vector dat de greutăți
Atunci nimic nu ne împiedică să scriem funcția de probabilitate a eșantionului după cum urmează:
Se întâmplă că uneori este dificil pentru unii analiști începători să înțeleagă imediat cum funcționează această funcție. Să ne uităm la 4 exemple scurte care vor clarifica totul:
1. Dacă (adică, conform eșantionului de antrenament, obiectul aparține clasei +1), iar algoritmul nostru determină probabilitatea de a clasifica un obiect într-o clasă egal cu 0.9, atunci această probabilitate a eșantionului va fi calculată după cum urmează:
2. Dacă Și , atunci calculul va fi astfel:
3. Dacă Și , atunci calculul va fi astfel:
4. Dacă Și , atunci calculul va fi astfel:
Este evident că funcția de probabilitate va fi maximizată în cazurile 1 și 3 sau în cazul general - cu valori ghicite corect ale probabilităților de atribuire a unui obiect unei clase. .
Datorită faptului că atunci când se determină probabilitatea atribuirii unui obiect unei clase Numai că nu știm coeficienții , atunci îi vom căuta. După cum am menționat mai sus, aceasta este o problemă de optimizare în care mai întâi trebuie să găsim derivata funcției de probabilitate în raport cu vectorul greutăților . Cu toate acestea, mai întâi este logic să simplificăm sarcina pentru noi înșine: vom căuta derivata logaritmului funcții de probabilitate.
De ce după logaritm, în funcții de eroare logistică, am schimbat semnul din pe . Totul este simplu, deoarece în problemele de evaluare a calității unui model se obișnuiește să se minimizeze valoarea unei funcții, am înmulțit partea dreaptă a expresiei cu și în consecință, în loc să maximizăm, acum minimizăm funcția.
De fapt, chiar acum, sub ochii tăi, funcția de pierdere a fost derivată dureros - Pierdere logistică pentru un set de antrenament cu două clase: и .
Acum, pentru a găsi coeficienții, trebuie doar să găsim derivata funcții de eroare logistică apoi, folosind metode de optimizare numerică, cum ar fi coborârea gradientului sau coborârea gradientului stocastic, selectați cei mai optimi coeficienți . Dar, având în vedere volumul considerabil al articolului, se propune să realizezi diferențierea pe cont propriu, sau poate că acesta va fi un subiect pentru următorul articol cu multă aritmetică fără exemple atât de detaliate.
Cazul 2. Clasificarea obiectelor în и
Abordarea aici va fi aceeași ca și la cursuri и , ci calea în sine către ieșirea funcției de pierdere Pierdere logistică, va fi mai ornamentat. Să începem. Pentru funcția de probabilitate vom folosi operatorul "daca atunci..."... Adică dacă Cel de-al-lea obiect aparține clasei , apoi pentru a calcula probabilitatea eșantionului folosim probabilitatea , dacă obiectul aparține clasei , apoi înlocuim în probabilitate . Iată cum arată funcția de probabilitate:
Să descriem pe degete cum funcționează. Să luăm în considerare 4 cazuri:
1. Dacă и , atunci probabilitatea de eșantionare va „merge”
2. Dacă и , atunci probabilitatea de eșantionare va „merge”
3. Dacă и , atunci probabilitatea de eșantionare va „merge”
4. Dacă и , atunci probabilitatea de eșantionare va „merge”
Este evident că în cazurile 1 și 3, când probabilitățile au fost corect determinate de algoritm, funcția de probabilitate va fi maximizat, adică exact asta ne-am dorit să obținem. Cu toate acestea, această abordare este destul de greoaie și în continuare vom lua în considerare o notație mai compactă. Dar mai întâi, să logaritmăm funcția de probabilitate cu o schimbare de semn, deoarece acum o vom minimiza.
Să înlocuim în schimb expresie :
Să simplificăm termenul potrivit sub logaritm folosind tehnici aritmetice simple și să obținem:
Acum este timpul să scapi de operator "daca atunci...". Rețineți că atunci când un obiect aparține clasei , apoi în expresia sub logaritm, în numitor, ridicat la putere , dacă obiectul aparține clasei , atunci $e$ este ridicat la putere . Prin urmare, notația pentru grad poate fi simplificată prin combinarea ambelor cazuri într-unul singur: . atunci funcția de eroare logistică va lua forma:
În conformitate cu regulile logaritmului, întoarcem fracția și stingem semnul "„(minus) pentru logaritm, obținem:
Aici este funcția de pierdere pierderi logistice, care este utilizat în setul de antrenament cu obiecte alocate claselor: и .
Ei bine, în acest moment îmi iau concediu și încheiem articolul.
Materiale auxiliare
1. literatură
1) Analiza de regresie aplicată / N. Draper, G. Smith - ed. a II-a. – M.: Finanțe și Statistică, 2 (traducere din engleză)
2) Teoria probabilității și statistică matematică / V.E. Gmurman - ed. a 9-a. - M.: Liceu, 2003
3) Teoria probabilității / N.I. Chernova - Novosibirsk: Universitatea de Stat din Novosibirsk, 2007
4) Analiza afacerilor: de la date la cunoaștere / Paklin N. B., Oreshkov V. I. - ed. a II-a. — Sankt Petersburg: Peter, 2
5) Știința datelor Știința datelor de la zero / Joel Gras - Sankt Petersburg: BHV Petersburg, 2017
6) Statistici practice pentru specialiștii în știința datelor / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Prelegeri, cursuri (video)
1)
2)
3)
4)
5)
3. Surse de internet
1)
2)
3)
4)
5)
6)