Käesolevas artiklis analüüsime teisenduse teoreetilisi arvutusi lineaarse regressiooni funktsioonid в pöördlogiti teisendusfunktsioon (muidu nimetatakse logistilise vastuse funktsiooniks). Seejärel, kasutades arsenali maksimaalse tõenäosuse meetod, tuletame vastavalt logistilise regressiooni mudelile kadufunktsiooni Logistiline kaotusehk teisisõnu defineerime funktsiooni, millega logistilises regressioonimudelis valitakse kaaluvektori parameetrid .
Artikli ülevaade:
- Kordame lineaarset seost kahe muutuja vahel
- Teeme kindlaks ümberkujundamise vajaduse lineaarse regressiooni funktsioonid в logistilise reageerimise funktsioon
- Teeme teisendused ja väljundi logistilise reageerimise funktsioon
- Proovime mõista, miks vähimruutude meetod on parameetrite valimisel halb funktsioonid Logistiline kaotus
- Me kasutame maksimaalse tõenäosuse meetod määramiseks parameetrite valiku funktsioonid :
5.1. Juhtum 1: funktsioon Logistiline kaotus klassitähistustega objektidele 0 и 1:
5.2. Juhtum 2: funktsioon Logistiline kaotus klassitähistustega objektidele -1 и +1:
Artikkel on täis lihtsaid näiteid, kus kõiki arvutusi on lihtne teha suuliselt või paberil; mõnel juhul võib vaja minna kalkulaatorit. Nii et olge valmis :)
See artikkel on mõeldud eelkõige andmeteadlastele, kellel on algteadmised masinõppe põhitõdedest.
Artiklist leiate ka koodi graafikute ja arvutuste tegemiseks. Kogu kood on kirjutatud keeles püüton 2.7. Lubage mul eelnevalt selgitada kasutatud versiooni "uudsust" - see on üks tingimusi tuntud kursuse läbimiseks. Yandex sama tuntud veebipõhisel haridusplatvormil Coursera, ja nagu arvata võib, koostati materjal selle kursuse põhjal.
01. Sirgejooneline sõltuvus
Täiesti mõistlik on esitada küsimus – mis seos on sellega lineaarsel sõltuvusel ja logistilisel regressioonil?
See on lihtne! Logistiline regressioon on üks mudeleid, mis kuuluvad lineaarsesse klassifikaatorisse. Lihtsamalt öeldes on lineaarse klassifikaatori ülesanne sihtväärtusi ennustada muutujatest (regressorid) . Usutakse, et omaduste vaheline sõltuvus ja sihtväärtusi lineaarne. Sellest ka klassifikaatori nimi – lineaarne. Väga jämedalt öeldes põhineb logistilise regressiooni mudel eeldusel, et tunnuste vahel on lineaarne seos. ja sihtväärtusi . See on ühendus.
Stuudios on esimene näide ja see räägib õigesti uuritavate suuruste sirgjoonelisest sõltuvusest. Artikli ettevalmistamise käigus puutusin kokku näitega, mis on juba paljusid inimesi segadusse ajanud - voolu sõltuvus pingest ("Rakenduslik regressioonanalüüs", N. Draper, G. Smith). Vaatame seda ka siin.
Kooskõlas Ohmi seadus:
Kus - voolutugevus, - Pinge, - vastupanu.
Kui me ei teaks Ohmi seadus, siis saaksime sõltuvuse leida empiiriliselt muutes ja mõõtmine , toetades samal ajal fikseeritud. Siis näeksime, et sõltuvusgraafik pärit annab enam-vähem sirge läbi alguspunkti. Me ütleme "enam-vähem", sest kuigi seos on tegelikult täpne, võivad meie mõõtmised sisaldada väikseid vigu ja seetõttu ei pruugi graafiku punktid täpselt joonele langeda, vaid on selle ümber juhuslikult hajutatud.
Graafik 1 "Sõltuvus" pärit »
Diagrammi joonistamise kood
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. Lineaarse regressiooni võrrandi teisendamise vajadus
Vaatame teist näidet. Kujutagem ette, et töötame pangas ja meie ülesandeks on kindlaks teha laenuvõtja laenu tagasimaksmise tõenäosus sõltuvalt teatud teguritest. Ülesande lihtsustamiseks võtame arvesse ainult kahte tegurit: laenuvõtja kuupalka ja igakuise laenu tagasimakse summat.
Ülesanne on väga tingimuslik, kuid selle näite abil saame aru, miks selle kasutamisest ei piisa lineaarse regressiooni funktsioonidja saate ka teada, milliseid teisendusi tuleb funktsiooniga läbi viia.
Tuleme tagasi näite juurde. On arusaadav, et mida kõrgem on palk, seda rohkem on laenuvõtjal võimalik igakuiselt laenu tagasimaksmiseks eraldada. Samas on teatud palgavahemiku puhul see suhe üsna lineaarne. Näiteks võtame palgavahemiku 60.000 200.000 kuni 3 5.000 RUR ja eeldame, et määratud palgavahemikus on kuumakse suuruse sõltuvus palga suurusest lineaarne. Oletame, et määratud palgavahemiku puhul selgus, et palga ja maksete suhe ei saa langeda alla XNUMX ja laenuvõtjal peab olema veel XNUMX RUR reservis. Ja ainult sel juhul eeldame, et laenuvõtja maksab laenu pangale tagasi. Seejärel on lineaarse regressiooni võrrand järgmine:
kus , , , - palk - kolmas laenuvõtja, - laenumakse -th laenuvõtja.
Palga ja laenumakse asendamine fikseeritud parameetritega võrrandisse Saate otsustada, kas laenu väljastada või sellest keelduda.
Tulevikku vaadates märgime, et antud parameetritega lineaarse regressiooni funktsioon, kasutatakse logistilise reageerimise funktsioonid annab suuri väärtusi, mis raskendavad arvutusi laenu tagasimaksmise tõenäosuse määramiseks. Seetõttu tehakse ettepanek vähendada meie koefitsiente näiteks 25.000 XNUMX korda. See koefitsientide ümberkujundamine ei muuda laenu väljastamise otsust. Pidagem seda tulevikku silmas pidades meeles, kuid nüüd, et oleks veelgi selgem, millest me räägime, kaalume olukorda kolme potentsiaalse laenuvõtjaga.
Tabel 1 "Potentsiaalsed laenuvõtjad"
Kood tabeli genereerimiseks
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']]
Vastavalt tabeli andmetele soovib 120.000 3.000 RUR suuruse palgaga Vasya laenu saada, et saaks selle igakuiselt tagasi maksta 5.000 rubla ulatuses. Tegime kindlaks, et laenu kinnitamiseks peab Vasja palk ületama kolmekordset maksesummat ning alles peab jääma XNUMX RUR. Vasya vastab sellele nõudele: . Järele jääb isegi 106.000 XNUMX RUR. Vaatamata sellele, et arvutamisel oleme koefitsiente vähendanud 25.000 XNUMX korda, tulemus oli sama – laenu saab kinnitada. Fedya saab ka laenu, kuid Lesha peab hoolimata sellest, et ta saab kõige rohkem, oma isusid ohjeldama.
Joonistame selle juhtumi jaoks graafiku.
Joonis 2 “Laenuvõtjate klassifikatsioon”
Kood graafiku joonistamiseks
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()
Niisiis, meie sirgjoon, mis on konstrueeritud vastavalt funktsioonile , eraldab "halvad" laenuvõtjad "headest". Need laenuvõtjad, kelle soovid ei kattu nende võimalustega, on joonest kõrgemal (Lesha), samas kui need, kes meie mudeli parameetrite järgi suudavad laenu tagasi maksta, on joonest allpool (Vasya ja Fedya). Teisisõnu võime öelda nii: meie otseliin jagab laenuvõtjad kahte klassi. Tähistagem neid järgmiselt: klassi Klassifitseerime need laenuvõtjad, kes kõige tõenäolisemalt laenu tagasi maksavad või Kaasame need laenuvõtjad, kes suure tõenäosusega laenu tagasi maksta ei suuda.
Võtame selle lihtsa näite järeldused kokku. Võtame punkti ja punkti koordinaatide asendamine sirge vastava võrrandiga , kaaluge kolme võimalust:
- Kui punkt on joone all ja omistame selle klassile , siis funktsiooni väärtus on positiivne alates kuni . See tähendab, et võime eeldada, et laenu tagasimaksmise tõenäosus on sees . Mida suurem on funktsiooni väärtus, seda suurem on tõenäosus.
- Kui punkt asub sirgest kõrgemal ja omistame selle klassile või , siis on funktsiooni väärtus negatiivne alates kuni . Siis eeldame, et võla tagasimaksmise tõenäosus on sees ja mida suurem on funktsiooni absoluutväärtus, seda suurem on meie usaldus.
- Punkt asub sirgel, kahe klassi vahelisel piiril. Sel juhul funktsiooni väärtus saab olema võrdne ja laenu tagasimaksmise tõenäosus on võrdne .
Kujutagem nüüd ette, et meil pole mitte kahte tegurit, vaid kümneid ja mitte kolm, vaid tuhandeid laenuvõtjaid. Siis on meil sirge asemel m-mõõtmeline tasapind ja koefitsiendid meid ei võeta tühjast ilmast, vaid tuletatakse kõigi reeglite järgi ja kogutud andmete alusel laenu tagasimaksnud või mittemaksnud laenuvõtjate kohta. Ja tõepoolest, pange tähele, et me valime nüüd laenuvõtjaid juba teadaolevate koefitsientide abil . Tegelikult on logistilise regressiooni mudeli ülesanne just parameetrite määramine , mille juures kaotusfunktsiooni väärtus Logistiline kaotus kipub miinimumini. Aga sellest, kuidas vektorit arvutatakse , saame rohkem teada artikli 5. jaotisest. Vahepeal pöördume tagasi tõotatud maale – oma pankuri ja tema kolme kliendi juurde.
Tänu funktsioonile me teame, kellele saab laenu anda ja kellele tuleb keelduda. Kuid te ei saa sellise teabega direktori juurde minna, sest nad tahtsid meilt saada iga laenuvõtja laenu tagasimaksmise tõenäosust. Mida teha? Vastus on lihtne – me peame funktsiooni kuidagi ümber muutma , mille väärtused jäävad vahemikku funktsioonile, mille väärtused jäävad vahemikku . Ja selline funktsioon on olemas, seda nimetatakse logistilise vastuse funktsioon või logiti pöördteisendus. Tutvuge:
Vaatame samm-sammult, kuidas see toimib logistilise reageerimise funktsioon. Pange tähele, et me kõnnime vastupidises suunas, st. eeldame, et teame tõenäosuse väärtust, mis asub vahemikus alates kuni ja siis "keerame" selle väärtuse lahti kogu arvude vahemikust kuni .
03. Tuletame logistilise vastuse funktsiooni
1. samm. Teisendage tõenäosusväärtused vahemikku
Funktsiooni ümberkujundamise ajal в logistilise reageerimise funktsioon Jätame oma krediidianalüütiku rahule ja teeme selle asemel ringkäigu kihlveokontorites. Ei, muidugi, me ei tee panuseid, kõik, mis meid seal huvitab, on väljendi tähendus, näiteks võimalus on 4:1. Koefitsiendid, mis on kõigile panustajatele tuttavad, on „edu“ ja „edu“ suhe. ebaõnnestumised”. Tõenäosuse mõistes on koefitsient sündmuse toimumise tõenäosus jagatud sündmuse mittetoimumise tõenäosusega. Kirjutame üles sündmuse toimumise võimaluse valem :
Kus - sündmuse toimumise tõenäosus, — sündmuse EI toimumise tõenäosus
Näiteks kui tõenäosus, et noor, tugev ja mänguhimuline hobune hüüdnimega “Veterok” võidab võidusõidul vana ja lõtv vana naise nimega “Matilda”, on võrdne , siis on Veteroki eduvõimalused к ja vastupidi, teades koefitsiente, ei ole meil raske tõenäosust arvutada :
Seega oleme õppinud tõenäosust "tõlkima" võimalusteks, millest lähtuvad väärtused kuni . Astume veel ühe sammu ja õpime tõenäosust “tõlkima” tervele arvureale alates kuni .
2. samm. Teisendage tõenäosusväärtused vahemikku
See samm on väga lihtne – võtame koefitsientide logaritmi Euleri arvu alusele ja saame:
Nüüd teame, et kui , seejärel arvutage väärtus on väga lihtne ja pealegi peaks see olema positiivne: . See on tõsi.
Uudishimust uurime, mis siis, kui , siis eeldame negatiivset väärtust . Kontrollime: . See on õige.
Nüüd teame, kuidas teisendada tõenäosusväärtust kuni piki kogu arvurida alates kuni . Järgmises etapis teeme vastupidist.
Praeguseks märgime, et vastavalt logaritmi reeglitele, teades funktsiooni väärtust , saate arvutada koefitsiendid:
See koefitsientide määramise meetod on meile kasulik järgmises etapis.
3. etapp. Tuletame määramiseks valemi
Nii et me õppisime, teades , leidke funktsiooni väärtused . Kuid tegelikult vajame täpselt vastupidist – väärtuse tundmist leidma . Selleks pöördume sellise kontseptsiooni nagu pöördkoefitsientide funktsioon, mille kohaselt:
Artiklis me ülaltoodud valemit ei tuleta, vaid kontrollime seda ülaltoodud näite numbrite abil. Teame, et koefitsiendiga 4:1 (), on sündmuse toimumise tõenäosus 0.8 (). Teeme asendused: . See langeb kokku meie varem tehtud arvutustega. Liigume edasi.
Viimases etapis järeldasime selle , mis tähendab, et saate pöördkoefitsientide funktsioonis asendada. Saame:
Jagage nii lugeja kui ka nimetaja arvuga , Siis:
Igaks juhuks, veendumaks, et me pole kuskil eksinud, teeme veel ühe väikese kontrolli. 2. sammus me jaoks määras selle . Seejärel asendage väärtus logistilise reageerimise funktsiooni, loodame saada . Asendame ja saame:
Õnnitleme, kallis lugeja, just tuletasime ja testisime logistilise reageerimise funktsiooni. Vaatame funktsiooni graafikut.
Graafik 3 "Logistilise reageerimise funktsioon"
Kood graafiku joonistamiseks
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()
Kirjandusest leiate ka selle funktsiooni nimetuse as sigmoidne funktsioon. Graafik näitab selgelt, et põhiline muutus klassi kuulumise tõenäosuses toimub suhteliselt väikeses vahemikus , kuskilt kuni .
Soovitan pöörduda tagasi meie krediidianalüütiku juurde ja aidata tal välja arvutada laenu tagasimaksmise tõenäosus, vastasel juhul on oht jääda ilma boonusest :)
Tabel 2 "Potentsiaalsed laenuvõtjad"
Kood tabeli genereerimiseks
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']]
Seega oleme määranud laenu tagasimaksmise tõenäosuse. Üldiselt tundub see tõsi olevat.
Tõepoolest, tõenäosus, et 120.000 3.000 RUR suuruse palgaga Vasya suudab iga kuu pangale 100 rubla anda, on peaaegu 0.3%. Muide, peame mõistma, et pank võib Leshale laenu väljastada, kui panga poliitika näeb ette näiteks laenu andmist klientidele, mille laenu tagasimaksmise tõenäosus on suurem kui näiteks XNUMX. Asi on selles, et sel juhul loob pank suurema reservi võimalike kahjude jaoks.
Samuti tuleb märkida, et laest võeti palga ja väljamaksete suhe vähemalt 3 ja marginaaliga 5.000 RUR. Seetõttu ei saanud me kasutada kaalude vektorit selle algsel kujul . Meil oli vaja koefitsiente kõvasti vähendada ja sel juhul jagasime iga koefitsiendi 25.000 XNUMX-ga ehk sisuliselt korrigeerisime tulemust. Kuid seda tehti spetsiaalselt selleks, et lihtsustada materjali mõistmist algetapis. Elus ei pea me koefitsiente välja mõtlema ja kohandama, vaid need leidma. Artikli järgmistes osades tuletame võrrandid, millega parameetrid valitakse .
04. Vähimruutude meetod kaalude vektori määramiseks logistilise reageerimise funktsioonis
Me juba teame seda kaaluvektori valimise meetodit kui vähimruutude meetod (LSM) ja tegelikult, miks me ei kasuta seda binaarse klassifikatsiooni ülesannetes? Tõepoolest, miski ei takista teid kasutamast MNC, annab ainult see meetod klassifitseerimisprobleemides tulemusi, mis on vähem täpsed kui Logistiline kaotus. Sellel on teoreetiline alus. Vaatame kõigepealt ühte lihtsat näidet.
Oletame, et meie mudelid (kasutades MSE и Logistiline kaotus) on juba alustanud kaaluvektori valimist ja me lõpetasime arvutamise mingil etapil. Pole vahet, kas keskel, lõpus või alguses, peaasi, et meil on juba mõned kaaluvektori väärtused ja oletame, et selles etapis on kaalude vektor mõlema mudeli puhul pole erinevusi. Seejärel võtke saadud raskused ja asendage need logistilise reageerimise funktsioon () mõne objekti puhul, mis kuulub klassi . Uurime kahte juhtumit, kui vastavalt valitud kaaluvektorile on meie mudel väga ekslik ja vastupidi - mudel on väga kindel, et objekt kuulub klassi . Vaatame, millised trahvid kasutamisel väljastatakse MNC и Logistiline kaotus.
Kood trahvide arvutamiseks sõltuvalt kasutatavast kahjufunktsioonist
# класс объекта
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
Juhtum eksimisest — mudel määrab klassile objekti tõenäosusega 0,01
Karistus kasutamise eest MNC saab:
Karistus kasutamise eest Logistiline kaotus saab:
Tugeva enesekindluse juhtum — mudel määrab klassile objekti tõenäosusega 0,99
Karistus kasutamise eest MNC saab:
Karistus kasutamise eest Logistiline kaotus saab:
See näide illustreerib hästi, et jämevea korral on kahjufunktsioon Logikadu karistab mudelit oluliselt rohkem kui MSE. Saame nüüd aru, mis on kadufunktsiooni kasutamise teoreetiline taust Logikadu klassifikatsiooniprobleemides.
05. Maksimaalse tõenäosuse meetod ja logistiline regressioon
Nagu alguses lubatud, on artikkel täis lihtsaid näiteid. Stuudios on veel üks näide ja vanad külalised - pangalaenuvõtjad: Vasya, Fedya ja Lesha.
Enne näite väljatöötamist tuletan igaks juhuks meelde, et elus on meil tegemist tuhandetest või miljonitest kümnete või sadade funktsioonidega objektidest koosneva õppenäidisega. Siin on aga numbrid võetud selleks, et need algajale andmeteadlasele kergesti pähe ära mahuksid.
Tuleme tagasi näite juurde. Kujutagem ette, et panga direktor otsustas kõigile abivajajatele laenu väljastada, hoolimata asjaolust, et algoritm käskis tal seda Leshale mitte väljastada. Ja nüüd on juba piisavalt aega möödas ja me teame, kes kolmest kangelasest maksis laenu tagasi ja kes mitte. Mida oli oodata: Vasya ja Fedja maksid laenu tagasi, Lesha aga mitte. Kujutagem nüüd ette, et see tulemus on meie jaoks uus koolitusnäidis ja samas on justkui kadunud kõik andmed laenu tagasimaksmise tõenäosust mõjutavate tegurite kohta (laenusaaja palk, kuumakse suurus). Siis võime intuitiivselt eeldada, et iga kolmas laenuvõtja ei maksa pangale laenu ehk teisisõnu tõenäosus, et järgmine laenuvõtja maksab laenu tagasi. . Sellel intuitiivsel eeldusel on teoreetiline kinnitus ja see põhineb maksimaalse tõenäosuse meetod, sageli kirjanduses nimetatakse seda maksimaalse tõenäosuse põhimõte.
Kõigepealt tutvume kontseptuaalse aparaadiga.
Valimi võtmise tõenäosus on tõenäosus saada täpselt selline valim, saada täpselt sellised vaatlused/tulemused, s.t. iga näidistulemuse saamise tõenäosuse korrutis (näiteks kas Vasya, Fedja ja Lesha laen maksti tagasi või ei makstud samal ajal tagasi).
Tõenäolisuse funktsioon seob valimi tõenäosuse jaotusparameetrite väärtustega.
Meie puhul on treeningvalimiks üldistatud Bernoulli skeem, milles juhuslik muutuja võtab ainult kaks väärtust: või . Seetõttu saab valimi tõenäosuse kirjutada parameetri tõenäosusfunktsioonina järgmiselt:
Ülaltoodud kirjet saab tõlgendada järgmiselt. Ühine tõenäosus, et Vasya ja Fedja maksavad laenu tagasi, on võrdne , on tõenäosus, et Lesha EI maksa laenu tagasi, võrdne (kuna tegemist EI olnud laenu tagasimaksmisega), siis on kõigi kolme sündmuse ühine tõenäosus võrdne .
Maksimaalse tõenäosuse meetod on meetod tundmatu parameetri hindamiseks maksimeerimise teel tõenäosusfunktsioonid. Meie puhul peame sellise väärtuse leidma kus saavutab maksimumi.
Kust tuleb tegelik idee – otsida tundmatu parameetri väärtust, mille juures tõenäosusfunktsioon saavutab maksimumi? Idee päritolu tuleneb ideest, et valim on ainus meile kättesaadavate teadmiste allikas elanikkonna kohta. Valimis on esindatud kõik, mida me üldkogumi kohta teame. Seetõttu võime vaid öelda, et valim peegeldab meile saadaolevat üldkogumit kõige täpsemini. Seetõttu peame leidma parameetri, mille puhul saadaolev valim muutub kõige tõenäolisemaks.
Ilmselgelt on meil tegemist optimeerimisprobleemiga, mille puhul peame leidma funktsiooni äärmuspunkti. Ekstreemumipunkti leidmiseks on vaja arvestada esimest järku tingimust, st võrdsustada funktsiooni tuletis nulliga ja lahendada võrrand soovitud parameetri suhtes. Kuid paljude tegurite korrutise tuletise otsimine võib olla pikk ülesanne, selle vältimiseks on spetsiaalne tehnika - logaritmile üleminek tõenäosusfunktsioonid. Miks on selline üleminek võimalik? Pöörakem tähelepanu asjaolule, et me ei otsi funktsiooni enda ekstreemumit, ja äärmuspunkt, st tundmatu parameetri väärtus kus saavutab maksimumi. Logaritmile üleminekul ekstreemumipunkt ei muutu (kuigi ekstreemum ise erineb), kuna logaritm on monotoonne funktsioon.
Jätkame vastavalt ülaltoodule oma näite arendamist Vasya, Fedya ja Lesha laenudega. Kõigepealt liigume edasi tõenäosusfunktsiooni logaritm:
Nüüd saame väljendit hõlpsasti eristada :
Ja lõpuks, kaaluge esimest järku tingimust - võrdsustame funktsiooni tuletise nulliga:
Seega meie intuitiivne hinnang laenu tagasimaksmise tõenäosusele oli teoreetiliselt õigustatud.
Suurepärane, aga mida me peaksime selle teabega nüüd tegema? Kui eeldada, et iga kolmas laenuvõtja ei tagasta raha pangale, siis viimane läheb paratamatult pankrotti. See on õige, kuid ainult laenu tagasimaksmise tõenäosuse hindamisel Me ei võtnud arvesse laenu tagasimaksmist mõjutavaid tegureid: laenuvõtja töötasu ja kuumakse suurust. Meenutagem, et eelnevalt arvutasime iga kliendi laenu tagasimaksmise tõenäosuse, võttes arvesse samu tegureid. On loogiline, et saime konstantsest võrdsest erinevad tõenäosused .
Määratleme proovide tõenäosuse:
Kood valimi tõenäosuse arvutamiseks
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)
Valimi tõenäosus konstantsel väärtusel :
Näidistõenäosus laenu tagasimaksmise tõenäosuse arvutamisel, võttes arvesse tegureid :
Teguritest sõltuvalt arvutatud tõenäosusega valimi tõenäosus osutus suuremaks kui konstantse tõenäosuse väärtusega tõenäosus. Mida see tähendab? See viitab sellele, et teadmine teguritest võimaldas täpsemalt valida iga kliendi laenu tagasimaksmise tõenäosust. Seetõttu oleks järgmise laenu väljastamisel õigem kasutada võla tagasimaksmise tõenäosuse hindamiseks artikli punkti 3 lõpus pakutud mudelit.
Aga siis, kui tahame maksimeerida tõenäosusfunktsiooni näidis, siis miks mitte kasutada mõnda algoritmi, mis loob näiteks Vasya, Fedya ja Lesha tõenäosused vastavalt 0.99, 0.99 ja 0.01. Võib-olla toimib selline algoritm koolitusvalimis hästi, kuna see lähendab valimi tõenäosuse väärtuse , kuid esiteks on sellisel algoritmil suure tõenäosusega raskusi üldistusvõimega ja teiseks ei ole see algoritm kindlasti lineaarne. Ja kui ületreeningu (sama nõrk üldistusvõime) vastu võitlemise meetodid selle artikli plaanis selgelt ei sisaldu, siis käsitleme teist punkti üksikasjalikumalt. Selleks vastake lihtsalt lihtsale küsimusele. Kas meile teadaolevaid tegureid arvestades võib Vasya ja Fedja laenu tagasimaksmise tõenäosus olla sama? Heliloogika seisukohalt muidugi mitte, ei saa. Seega maksab Vasya laenu tagasimaksmiseks 2.5% oma palgast kuus ja Fedya - peaaegu 27,8%. Ka graafikul 2 “Klientide klassifikatsioon” näeme, et Vasya on klasse eraldavast joonest palju kaugemal kui Fedja. Ja lõpuks, me teame, et funktsioon Vasya ja Fedya jaoks on erinevad väärtused: Vasya jaoks 4.24 ja Fedja jaoks 1.0. Kui nüüd näiteks Fedja teeniks suurusjärgu võrra rohkem või küsiks väiksemat laenu, siis oleks Vasja ja Fedja laenu tagasimaksmise tõenäosus sarnane. Teisisõnu, lineaarset sõltuvust ei saa petta. Ja kui me tegelikult koefitsiendid välja arvutasime , ja ei võtnud neid tühjaks, võiks julgelt öelda, et meie väärtused kõige paremini võimaldab meil hinnata laenu tagasimaksmise tõenäosust iga laenuvõtja poolt, kuid kuna nõustusime eeldama, et koefitsientide määramine viidi läbi kõigi reeglite järgi, siis eeldame nii - meie koefitsiendid võimaldavad tõenäosust paremini hinnata :)
Siiski kaldume kõrvale. Selles jaotises peame mõistma, kuidas kaalude vektorit määratakse , mis on vajalik iga laenuvõtja laenu tagasimaksmise tõenäosuse hindamiseks.
Teeme lühidalt kokkuvõtte, millise arsenaliga koefitsiente otsime :
1. Eeldame, et sihtmuutuja (ennustusväärtuse) ja tulemust mõjutava teguri vaheline seos on lineaarne. Sel põhjusel kasutatakse seda lineaarse regressiooni funktsioon omamoodi , mille rida jagab objektid (kliendid) klassideks и või (kliendid, kes on võimelised laenu tagasi maksma ja need, kes ei suuda). Meie puhul on võrrandil vorm .
2. Me kasutame logiti pöördfunktsioon omamoodi klassi kuulumise tõenäosuse määramiseks .
3. Peame oma koolituskomplekti üldistatud teostuseks Bernoulli skeemidst iga objekti jaoks genereeritakse juhuslik muutuja, mis tõenäosusega (iga objekti jaoks oma) võtab väärtuse 1 ja tõenäosusega - 0.
4. Me teame, mida me peame maksimeerima tõenäosusfunktsiooni näidis võttes arvesse aktsepteeritud tegureid, et saadaolev valim muutuks kõige usutavamaks. Teisisõnu peame valima parameetrid, mille puhul valim on kõige usutavam. Meie puhul on valitud parameeter laenu tagasimaksmise tõenäosus , mis omakorda sõltub tundmatutest koefitsientidest . Seega peame leidma sellise kaalude vektori , mille puhul valimi tõenäosus on maksimaalne.
5. Teame, mida maksimeerida tõenäosusfunktsioonide näidised saate seda kasutada maksimaalse tõenäosuse meetod. Ja me teame kõiki selle meetodiga töötamise keerulisi nippe.
Nii saabki see mitmeastmeline käik :)
Pidage meeles, et artikli alguses tahtsime tuletada kahte tüüpi kahjufunktsioone Logistiline kaotus olenevalt sellest, kuidas objektiklassid on määratud. Juhtus nii, et kahe klassiga klassifikatsiooniülesannetes tähistatakse klasse kui и või . Olenevalt tähistusest on väljundil vastav kadufunktsioon.
Juhtum 1. Objektide liigitamine и
Varem valimi tõenäosuse määramisel arvutati laenuvõtja võla tagasimaksmise tõenäosus tegurite ja antud koefitsientide alusel. , rakendasime valemit:
Tegelikult on tähendus logistilise reageerimise funktsioonid antud kaaluvektori jaoks
Siis ei takista miski meil näidis tõenäosusfunktsiooni järgmiselt kirjutamast:
Juhtub, et mõnikord on mõnel algajal analüütikul raske selle funktsiooni toimimisest kohe aru saada. Vaatame 4 lühikest näidet, mis selgitavad asju:
1. kui (st koolitusnäidise järgi kuulub objekt klassi +1) ja meie algoritm määrab objekti klassi klassifitseerimise tõenäosuse võrdne 0.9, siis arvutatakse see valimi tõenäosus järgmiselt:
2. kui Ja , siis on arvutus järgmine:
3. kui Ja , siis on arvutus järgmine:
4. kui Ja , siis on arvutus järgmine:
On ilmne, et tõenäosusfunktsioon maksimeeritakse juhtudel 1 ja 3 või üldjuhul - objekti klassi määramise tõenäosuse õigesti äraarvatud väärtustega .
Tulenevalt sellest, et objekti klassi määramise tõenäosuse määramisel Me ei tea ainult koefitsiente , siis otsime need üles. Nagu eespool mainitud, on see optimeerimisülesanne, mille puhul peame esmalt leidma tõenäosusfunktsiooni tuletise kaalude vektori suhtes . Esmalt on aga mõttekas ülesannet enda jaoks lihtsustada: otsime logaritmi tuletist tõenäosusfunktsioonid.
Miks pärast logaritmi, sisse logistilised veafunktsioonid, muutsime märgi alates edasi . Kõik on lihtne, kuna mudeli kvaliteedi hindamise ülesannetes on tavaks funktsiooni väärtust minimeerida, korrutasime avaldise parema poole ja vastavalt sellele, maksimeerimise asemel, nüüd minimeerime funktsiooni.
Tegelikult, just praegu, teie silme all, tuletati kaotusfunktsioon hoolikalt - Logistiline kaotus kahe klassiga treeningkomplekti jaoks: и .
Nüüd, koefitsientide leidmiseks peame lihtsalt leidma tuletise logistilised veafunktsioonid ja seejärel, kasutades arvulisi optimeerimismeetodeid, nagu gradiendi laskumine või stohhastiline gradiendi laskumine, valige kõige optimaalsemad koefitsiendid . Kuid artikli märkimisväärset mahtu arvestades tehakse ettepanek diferentseerimine ise läbi viia või võib-olla on see järgmise artikli teema, kus on palju aritmeetikat ilma selliste üksikasjalike näideteta.
Juhtum 2. Objektide liigitamine и
Siin on lähenemisviis sama, mis klasside puhul и , vaid tee ise kadufunktsiooni väljundisse Logistiline kaotus, saab olema uhkem. Alustame. Tõenäosuse funktsiooni jaoks kasutame operaatorit "kui siis..."... See tähendab, et kui th objekt kuulub klassi , siis valimi tõenäosuse arvutamiseks kasutame tõenäosust , kui objekt kuulub klassi , siis asendame tõenäosusega . Nii näeb tõenäosusfunktsioon välja:
Kirjeldagem sõrmedel, kuidas see toimib. Vaatleme 4 juhtumit:
1. kui и , siis valimi võtmise tõenäosus "läheb"
2. kui и , siis valimi võtmise tõenäosus "läheb"
3. kui и , siis valimi võtmise tõenäosus "läheb"
4. kui и , siis valimi võtmise tõenäosus "läheb"
On ilmne, et juhtudel 1 ja 3, kui tõenäosused olid algoritmiga õigesti määratud, tõenäosusfunktsioon maksimeeritakse, see tähendab, et see on täpselt see, mida me tahtsime saada. See lähenemisviis on aga üsna tülikas ja järgmisena kaalume kompaktsemat tähistust. Kuid kõigepealt logaritme tõenäosusfunktsiooni märgi muutusega, kuna nüüd minimeerime selle.
Asendame hoopis väljend :
Lihtsustame õiget terminit logaritmi all lihtsate aritmeetikatehnikate abil ja saame:
Nüüd on aeg operaatorist lahti saada "kui siis...". Pange tähele, et kui objekt kuulub klassi , siis avaldises logaritmi all, nimetajas, võimule tõstetud , kui objekt kuulub klassi , siis tõstetakse $e$ astmeni . Seetõttu saab kraadi märkimist lihtsustada, ühendades mõlemad juhtumid üheks: . Siis logistilise vea funktsioon toimub järgmisel kujul:
Vastavalt logaritmi reeglitele pöörame murdosa ümber ja paneme välja märgi "" (miinus) logaritmi jaoks saame:
Siin on kaotusfunktsioon logistiline kaotus, mida kasutatakse treeningkomplektis klassidele määratud objektidega: и .
Noh, siinkohal võtan puhkuse ja lõpetame artikli.
Abimaterjalid
1. Kirjandus
1) Rakenduslik regressioonanalüüs / N. Draper, G. Smith – 2. väljaanne. – M.: Rahandus ja statistika, 1986 (tõlge inglise keelest)
2) Tõenäosusteooria ja matemaatiline statistika / V.E. Gmurman – 9. väljaanne. - M.: Kõrgkool, 2003
3) Tõenäosusteooria / N.I. Tšernova - Novosibirsk: Novosibirski Riiklik Ülikool, 2007
4) Ärianalüütika: andmetest teadmisteni / Paklin N. B., Oreshkov V. I. - 2nd ed. — Peterburi: Peeter, 2013
5) Andmeteadus Andmeteadus nullist / Joel Gras - St. Petersburg: BHV Petersburg, 2017
6) Praktiline statistika andmeteaduse spetsialistidele / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Loengud, kursused (video)
1)
2)
3)
4)
5)
3. Interneti-allikad
1)
2)
4)
6)
7)
Allikas: www.habr.com