Tässä artikkelissa analysoimme muunnoksen teoreettisia laskelmia lineaariset regressiofunktiot в käänteinen logit-muunnosfunktio (jota kutsutaan myös logistiseksi vastefunktioksi). Sitten käyttämällä arsenaalia suurimman todennäköisyyden menetelmä, johdetaan tappiofunktio logistisen regressiomallin mukaisesti Logistinen menetyseli toisin sanoen määrittelemme funktion, jolla painovektorin parametrit valitaan logistisessa regressiomallissa .
Artikkelin pääpiirteet:
- Toistetaan kahden muuttujan välinen lineaarinen suhde
- Tunnistamme muutoksen tarpeen lineaariset regressiofunktiot в logistinen vastaustoiminto
- Suoritetaan muunnokset ja tulosteet logistinen vastaustoiminto
- Yritetään ymmärtää, miksi pienimmän neliösumman menetelmä on huono parametreja valittaessa tehtävät Logistinen menetys
- käyttö suurimman todennäköisyyden menetelmä määrittämistä varten parametrien valintatoiminnot :
5.1. Tapaus 1: toiminto Logistinen menetys kohteille, joissa on luokkamerkinnät 0 и 1:
5.2. Tapaus 2: toiminto Logistinen menetys kohteille, joissa on luokkamerkinnät -1 и +1:
Artikkeli on täynnä yksinkertaisia esimerkkejä, joissa kaikki laskelmat on helppo tehdä suullisesti tai paperilla; joissain tapauksissa voidaan tarvita laskinta. Joten valmistaudu :)
Tämä artikkeli on tarkoitettu ensisijaisesti datatieteilijöille, joilla on alustava tietotaso koneoppimisen perusteista.
Artikkelissa on myös koodi kaavioiden ja laskelmien piirtämiseen. Kaikki koodi on kirjoitettu kielellä python-2.7. Selitän etukäteen käytetyn version "uutuudesta" - tämä on yksi edellytyksistä tutun kurssin suorittamiselle. Yandex yhtä tunnetulla verkkokoulutusalustalla Coursera, ja kuten olettaa, materiaali on laadittu tämän kurssin perusteella.
01. Suorariippuvuus
On varsin järkevää esittää kysymys - mitä tekemistä lineaarisella riippuvuudella ja logistisella regressiolla on sen kanssa?
Se on yksinkertaista! Logistinen regressio on yksi lineaariseen luokittelijaan kuuluvista malleista. Yksinkertaisesti sanottuna lineaarisen luokittelijan tehtävänä on ennustaa tavoitearvoja muuttujista (regressorit) . Uskotaan, että ominaisuuksien välinen riippuvuus ja tavoitearvot lineaarinen. Tästä syystä luokittelijan nimi - lineaarinen. Hyvin karkeasti sanottuna logistinen regressiomalli perustuu olettamukseen, että ominaisuuksien välillä on lineaarinen suhde. ja tavoitearvot . Tämä on yhteys.
Studiossa on ensimmäinen esimerkki, ja se on oikein, tutkittavien suureiden suoraviivaisesta riippuvuudesta. Artikkelia valmistellessani törmäsin esimerkkiin, joka on jo saattanut monet ihmiset kärkeen - virran riippuvuus jännitteestä ("Sovellettu regressioanalyysi", N. Draper, G. Smith). Katsotaan se myös täällä.
Mukaan Ohmin laki:
Missä - virran voimakkuus, - Jännite, - vastustuskyky.
Jos emme tietäisi Ohmin laki, niin voimme löytää riippuvuuden empiirisesti muuttamalla ja mittaamalla , samalla kun tuet korjattu. Sitten näkisimme, että riippuvuuskaavio alkaen antaa enemmän tai vähemmän suoran viivan origon läpi. Sanomme "enemmän tai vähemmän", koska vaikka suhde on itse asiassa tarkka, mittauksemme voivat sisältää pieniä virheitä, ja siksi kaavion pisteet eivät välttämättä osu täsmälleen viivalle, vaan hajallaan sen ympärille satunnaisesti.
Kaavio 1 "Riippuvuus" alkaen »
Kaavion piirustuskoodi
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. Tarve muuttaa lineaarista regressioyhtälöä
Katsotaanpa toista esimerkkiä. Kuvitellaan, että työskentelemme pankissa ja tehtävämme on määrittää lainanottajan todennäköisyys maksaa laina takaisin tietyistä tekijöistä riippuen. Tehtävän yksinkertaistamiseksi otamme huomioon vain kaksi tekijää: lainanottajan kuukausipalkkaa ja kuukausittaisen lainan takaisinmaksun.
Tehtävä on hyvin ehdollinen, mutta tämän esimerkin avulla voimme ymmärtää, miksi sen käyttäminen ei riitä lineaariset regressiofunktiot, ja selvittää myös, mitä muunnoksia funktiolla on suoritettava.
Palataanpa esimerkkiin. On selvää, että mitä korkeampi palkka on, sitä enemmän lainanottaja voi varata kuukausittain lainan takaisinmaksuun. Samaan aikaan tietyllä palkkaalueella tämä suhde on melko lineaarinen. Otetaan esimerkiksi palkkaluokka 60.000 200.000 ruplasta 3 5.000 ruplaan ja oletetaan, että määritellyllä palkkaalueella kuukausierän suuruuden riippuvuus palkan koosta on lineaarinen. Oletetaan, että määritellylle palkkaluokille paljastui, että palkka-maksusuhde ei voi laskea alle XNUMX:n ja lainanottajalla on oltava vielä XNUMX ruplaa varassa. Ja vain tässä tapauksessa oletamme, että lainanottaja maksaa lainan takaisin pankille. Sitten lineaarinen regressioyhtälö saa muodon:
missä , , , - palkkaus - lainaaja, - lainan maksu -th lainaaja.
Palkan ja lainan maksun korvaaminen kiinteillä parametreilla yhtälöön Voit päättää, myönnätkö vai evätätkö lainan.
Tulevaisuudessa huomaamme, että annetuilla parametreilla lineaarinen regressiofunktio, käytetty logistiset vastaustoiminnot tuottaa suuria arvoja, jotka vaikeuttavat laskelmia lainan takaisinmaksun todennäköisyyksien määrittämiseksi. Siksi kertoimiamme ehdotetaan pienentäväksi vaikkapa 25.000 XNUMX kertaa. Tämä kertoimien muutos ei muuta päätöstä lainan myöntämisestä. Muistetaan tämä kohta tulevaisuutta varten, mutta nyt, jotta se selventäisi, mistä puhumme, tarkastellaan tilannetta kolmen potentiaalisen lainanottajan kanssa.
Taulukko 1 "Mahdolliset lainaajat"
Koodi taulukon luomiseksi
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']]
Taulukon tietojen mukaan Vasya, jonka palkka on 120.000 3.000 RUR, haluaa saada lainaa, jotta hän voi maksaa sen takaisin kuukausittain 5.000 XNUMX RUR:lla. Päätimme, että lainan hyväksymiseksi Vasyan palkan tulee ylittää kolme kertaa maksun määrä ja jäljellä on vielä XNUMX ruplaa. Vasya täyttää tämän vaatimuksen: . Jopa 106.000 XNUMX RUR on jäljellä. Siitä huolimatta, että laskettaessa olemme vähentäneet kertoimia 25.000 XNUMX kertaa, tulos oli sama - laina voidaan hyväksyä. Fedya saa myös lainan, mutta Lesha, huolimatta siitä, että hän saa eniten, joutuu hillitsemään ruokahaluaan.
Piirretään kaavio tätä tapausta varten.
Kaavio 2 "Lainaajien luokittelu"
Koodi kaavion piirtämiseen
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()
Joten, meidän suora, rakennettu funktion mukaisesti , erottaa "huonot" lainaajat "hyvistä". Ne lainanottajat, joiden toiveet eivät täsmää heidän kykyjensä kanssa, ovat linjan yläpuolella (Lesha), kun taas ne, jotka mallimme parametrien mukaan pystyvät maksamaan lainan takaisin, ovat linjan alapuolella (Vasya ja Fedya). Toisin sanoen voimme sanoa näin: suora linjamme jakaa lainanottajat kahteen luokkaan. Merkitään ne seuraavasti: luokkaan Luokittelemme ne lainanottajat, jotka todennäköisimmin maksavat lainan takaisin tai Otamme mukaan ne lainanottajat, jotka eivät todennäköisesti pysty maksamaan lainaa takaisin.
Tehdään yhteenveto tämän yksinkertaisen esimerkin päätelmistä. Otetaan kohta ja korvataan pisteen koordinaatit vastaavalla suoran yhtälöllä , harkitse kolmea vaihtoehtoa:
- Jos piste on viivan alla ja annamme sen luokalle , sitten funktion arvo on positiivista alkaen до . Tämä tarkoittaa, että voimme olettaa, että lainan takaisinmaksun todennäköisyys on sisällä . Mitä suurempi funktion arvo on, sitä suurempi on todennäköisyys.
- Jos piste on suoran yläpuolella ja annamme sen luokalle tai , niin funktion arvo on negatiivinen alkaen до . Sitten oletetaan, että velan takaisinmaksun todennäköisyys on sisällä ja mitä suurempi funktion itseisarvo on, sitä suurempi on luottamus.
- Piste on suoralla, kahden luokan välisellä rajalla. Tässä tapauksessa funktion arvo tulee olemaan tasa-arvoisia ja lainan takaisinmaksun todennäköisyys on yhtä suuri .
Kuvitellaan nyt, että meillä ei ole kahta tekijää, vaan kymmeniä, eikä kolme, vaan tuhansia lainaajia. Silloin meillä on suoran sijaan m-ulotteinen taso ja kertoimet meitä ei oteta tyhjästä, vaan johdetaan kaikkien sääntöjen mukaan ja kertyneen tiedon perusteella lainanottajista, jotka ovat maksaneet tai eivät ole maksaneet lainaa. Ja todellakin, huomaa, että valitsemme nyt lainaajia käyttämällä jo tunnettuja kertoimia . Itse asiassa logistisen regressiomallin tehtävänä on nimenomaan määrittää parametrit , jossa tappiofunktion arvo Logistinen menetys pyrkii minimiin. Mutta siitä, kuinka vektori lasketaan , saamme lisätietoja artikkelin 5. osiosta. Sillä välin palaamme luvattuun maahan - pankkiirimme ja hänen kolmen asiakkaansa luo.
Toiminnan ansiosta tiedämme kenelle lainaa voidaan antaa ja keneltä kieltäytyä. Mutta et voi mennä johtajalle tällaisilla tiedoilla, koska he halusivat saada meiltä todennäköisyyden, että jokainen lainanottaja maksaa lainan takaisin. Mitä tehdä? Vastaus on yksinkertainen - meidän on jotenkin muutettava funktiota , jonka arvot ovat alueella funktioon, jonka arvot ovat alueella . Ja sellainen funktio on olemassa, sitä kutsutaan logistinen vastefunktio tai käänteislogit-muunnos. Tavata:
Katsotaanpa vaihe vaiheelta, kuinka se toimii logistinen vastaustoiminto. Huomaa, että kävelemme vastakkaiseen suuntaan, ts. oletetaan, että tiedämme todennäköisyysarvon, joka on alueella alkaen до ja sitten "purkaamme" tämän arvon koko lukualueelle alkaen до .
03. Johdamme logistisen vastefunktion
Vaihe 1. Muunna todennäköisyysarvot alueiksi
Toiminnon muuntamisen aikana в logistinen vastaustoiminto Jätämme luottoanalyytikkomme rauhaan ja tutustumme sen sijaan vedonvälittäjiin. Ei, emme tietenkään lyö vetoa, kaikki mikä meitä kiinnostaa, on ilmaisun merkitys, esimerkiksi mahdollisuus on 4:1. Kaikille vedonlyöjille tutut kertoimet ovat ”onnistumisen” suhde ” epäonnistumisia”. Todennäköisyystermeillä kertoimet ovat tapahtuman todennäköisyys jaettuna todennäköisyydellä, ettei tapahtumaa tapahdu. Kirjataan ylös kaava tapahtuman mahdollisuudelle :
Missä - tapahtuman todennäköisyys, — todennäköisyys, että tapahtumaa EI tapahdu
Esimerkiksi, jos todennäköisyys, että nuori, vahva ja leikkisä hevonen nimeltä "Veterok" voittaa kilpailussa vanhan ja vetelän vanhan naisen nimeltä "Matilda", on yhtä suuri kuin , silloin "Veterokin" menestysmahdollisuudet ovat к ja päinvastoin, kun tiedämme kertoimet, meidän ei ole vaikeaa laskea todennäköisyyttä :
Siten olemme oppineet "kääntämään" todennäköisyyden mahdollisuuksiksi, joista arvot otetaan до . Otetaan vielä yksi askel ja opitaan "kääntämään" todennäköisyys koko lukuriville alkaen до .
Vaihe 2. Muunna todennäköisyysarvot alueiksi
Tämä vaihe on hyvin yksinkertainen - otetaan kertoimien logaritmi Eulerin luvun kantaan ja saamme:
Nyt tiedämme, että jos , laske sitten arvo on hyvin yksinkertainen ja lisäksi sen pitäisi olla positiivinen: . Tämä on totta.
Uteliaisuudesta katsotaan mitä jos , odotamme näkevämme negatiivisen arvon . Tarkistamme: . Oikein.
Nyt tiedämme, kuinka todennäköisyysarvo muunnetaan до koko numeroviivaa pitkin alkaen до . Seuraavassa vaiheessa teemme päinvastoin.
Toistaiseksi huomaamme, että logaritmin sääntöjen mukaisesti funktion arvon tunteminen , voit laskea kertoimet:
Tämä kertoimien määritysmenetelmä on hyödyllinen meille seuraavassa vaiheessa.
Vaihe 3. Johdetaan kaava määritettäväksi
Joten opimme, tietäen , etsi funktioarvot . Itse asiassa tarvitsemme kuitenkin juuri päinvastaista - arvon tuntemista löytää . Tätä varten käännytään sellaiseen käsitteeseen kuin käänteiskerroinfunktio, jonka mukaan:
Artikkelissa emme johda yllä olevaa kaavaa, vaan tarkistamme sen käyttämällä yllä olevan esimerkin numeroita. Tiedämme, että kertoimella 4-1 (), tapahtuman todennäköisyys on 0.8 (). Tehdään vaihto: . Tämä vastaa aiemmin tekemiämme laskelmia. Siirrytään eteenpäin.
Viimeisessä vaiheessa päätimme sen , mikä tarkoittaa, että voit tehdä korvauksen käänteiskerroinfunktiossa. Saamme:
Jaa sekä osoittaja että nimittäjä , Sitten:
Varmuudeksi, että emme ole tehneet virhettä missään, teemme vielä yhden pienen tarkistuksen. Vaiheessa 2 me varten päätti sen . Sitten arvon korvaaminen osaksi logistinen vastaustoiminto, odotamme saavamme . Korvaamme ja saamme:
Onnittelut, rakas lukija, olemme juuri johtaneet ja testanneet logistisen vastetoiminnon. Katsotaanpa funktion kuvaajaa.
Kaavio 3 "Logistinen vastefunktio"
Koodi kaavion piirtämiseen
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()
Kirjallisuudesta löydät myös tämän funktion nimen as sigmoiditoiminto. Kaavio osoittaa selvästi, että suurin muutos luokkaan kuuluvan objektin todennäköisyydessä tapahtuu suhteellisen pienellä alueella , jostain до .
Suosittelen palaamaan luottoanalyytikkomme luo ja auttamaan häntä laskemaan lainan takaisinmaksun todennäköisyys, muuten hän on vaarassa jäädä ilman bonusta :)
Taulukko 2 "Mahdolliset lainaajat"
Koodi taulukon luomiseksi
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']]
Olemme siis määrittäneet lainan takaisinmaksun todennäköisyyden. Yleisesti ottaen tämä näyttää olevan totta.
Todennäköisyys, että Vasya, jonka palkka on 120.000 3.000 RUR, pystyy antamaan pankille 100 0.3 RUR joka kuukausi, on lähes XNUMX%. Muuten meidän on ymmärrettävä, että pankki voi myöntää lainaa Leshalle, jos pankin politiikka määrää esimerkiksi lainaamisen asiakkaille, joiden lainan takaisinmaksun todennäköisyys on yli esimerkiksi XNUMX. Tässä tapauksessa pankki luo vain suuremman reservin mahdollisia tappioita varten.
On myös huomattava, että palkan ja maksun suhde vähintään 3 ja marginaali 5.000 RUR otettiin katosta. Siksi emme voineet käyttää painojen vektoria sen alkuperäisessä muodossaan . Meidän piti pienentää kertoimia suuresti, ja tässä tapauksessa jaoimme jokaisen kertoimen 25.000 XNUMX:lla, eli pohjimmiltaan korjasimme tulosta. Mutta tämä tehtiin erityisesti materiaalin ymmärtämisen yksinkertaistamiseksi alkuvaiheessa. Elämässä meidän ei tarvitse keksiä ja säätää kertoimia, vaan löytää ne. Artikkelin seuraavissa osissa johdetaan yhtälöt, joilla parametrit valitaan .
04. Pienimmän neliösumman menetelmä painojen vektorin määrittämiseksi logistisessa vastaustoiminnossa
Tiedämme jo tämän menetelmän painovektorin valitsemiseksi Kuin pienimmän neliösumman menetelmä (LSM) ja itse asiassa, miksi emme sitten käytä sitä binääriluokitteluongelmissa? Itse asiassa mikään ei estä sinua käyttämästä MNC, vain tämä menetelmä luokitteluongelmissa antaa tuloksia, jotka ovat vähemmän tarkkoja kuin Logistinen menetys. Tälle on olemassa teoreettinen perusta. Katsotaanpa ensin yksi yksinkertainen esimerkki.
Oletetaan, että mallimme (käyttäen MSE и Logistinen menetys) ovat jo aloittaneet painovektorin valinnan ja lopetimme laskennan jossain vaiheessa. Ei ole väliä keskellä, lopussa vai alussa, pääasia on, että meillä on jo joitain painojen vektorin arvoja ja oletetaan, että tässä vaiheessa painojen vektori molemmissa malleissa ei ole eroja. Ota sitten saadut painot ja korvaa ne logistinen vastaustoiminto () jollekin luokkaan kuuluvalle objektille . Tarkastelemme kahta tapausta, joissa valitun painovektorin mukaan mallimme on erittäin virheellinen ja päinvastoin - malli on hyvin varma, että kohde kuuluu luokkaan . Katsotaan mitä sakkoja käytetään MNC и Logistinen menetys.
Koodi sakkojen laskemiseen käytetyn tappiofunktion mukaan
# класс объекта
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
Tapaus virheestä — malli määrittää luokkaan objektin todennäköisyydellä 0,01
Käytössä sakko MNC tulee olemaan:
Käytössä sakko Logistinen menetys tulee olemaan:
Vahvan itseluottamuksen tapaus — malli määrittää luokkaan objektin todennäköisyydellä 0,99
Käytössä sakko MNC tulee olemaan:
Käytössä sakko Logistinen menetys tulee olemaan:
Tämä esimerkki havainnollistaa hyvin, että karkean virheen tapauksessa häviöfunktio Tukkuhäviö rankaisee mallia huomattavasti enemmän kuin MSE. Ymmärretään nyt mikä on häviöfunktion käytön teoreettinen tausta Tukkuhäviö luokitteluongelmissa.
05. Suurimman todennäköisyyden menetelmä ja logistinen regressio
Kuten alussa luvattiin, artikkeli on täynnä yksinkertaisia esimerkkejä. Studiossa on toinen esimerkki ja vanhat vieraat - pankkilainaajat: Vasya, Fedya ja Lesha.
Varmuudeksi, ennen kuin kehitän esimerkin, muistutan teitä siitä, että elämässä on kyse tuhansien tai miljoonien esineiden harjoitusnäytteestä, jossa on kymmeniä tai satoja ominaisuuksia. Tässä kuitenkin luvut on otettu niin, että ne mahtuvat helposti aloittelevan datatieteilijän päähän.
Palataanpa esimerkkiin. Kuvitellaan, että pankin johtaja päätti myöntää lainan kaikille sitä tarvitseville huolimatta siitä, että algoritmi käski häntä olemaan myöntämättä sitä Leshalle. Ja nyt on kulunut tarpeeksi aikaa ja tiedämme kumpi kolmesta sankarista maksoi lainan takaisin ja mikä ei. Mitä oli odotettavissa: Vasya ja Fedya maksoivat lainan takaisin, mutta Lesha ei. Kuvitellaan nyt, että tämä tulos on meille uusi koulutusnäyte ja samalla ikään kuin kaikki tieto lainan takaisinmaksun todennäköisyyteen vaikuttavista tekijöistä (lainaajan palkka, kuukausierän suuruus) olisi kadonnut. Tällöin voidaan intuitiivisesti olettaa, että joka kolmas lainanottaja ei maksa lainaa pankille takaisin, eli todennäköisyys, että seuraava lainanottaja maksaa lainan takaisin . Tällä intuitiivisella oletuksella on teoreettinen vahvistus ja se perustuu suurimman todennäköisyyden menetelmä, sitä kutsutaan usein kirjallisuudessa suurimman todennäköisyyden periaate.
Ensin tutustutaan käsitteelliseen laitteistoon.
Näytteenoton todennäköisyys on todennäköisyys saada täsmälleen tällainen näyte, saada täsmälleen tällaiset havainnot/tulokset, ts. kunkin otostuloksen saamisen todennäköisyyksien tulo (esimerkiksi maksettiinko Vasyan, Fedyan ja Leshan laina takaisin vai ei maksettu takaisin samaan aikaan).
Todennäköisyysfunktio liittyy näytteen todennäköisyyteen jakautumisparametrien arvoihin.
Meidän tapauksessamme harjoitusnäyte on yleistetty Bernoulli-kaavio, jossa satunnaismuuttuja saa vain kaksi arvoa: tai . Siksi otostodennäköisyys voidaan kirjoittaa parametrin todennäköisyysfunktioksi seuraavasti:
Yllä oleva merkintä voidaan tulkita seuraavasti. Yhteinen todennäköisyys, että Vasya ja Fedya maksavat lainan takaisin, on yhtä suuri , todennäköisyys sille, että Lesha EI maksa lainaa takaisin, on yhtä suuri (koska se EI ollut lainan takaisinmaksu), joten kaikkien kolmen tapahtuman yhteinen todennäköisyys on yhtä suuri .
Suurimman todennäköisyyden menetelmä on menetelmä tuntemattoman parametrin arvioimiseksi maksimoimalla todennäköisyysfunktiot. Meidän tapauksessamme meidän on löydettävä tällainen arvo missä saavuttaa maksiminsa.
Mistä varsinainen ajatus tulee - etsiä tuntemattoman parametrin arvoa, jolla todennäköisyysfunktio saavuttaa maksimin? Ajatuksen alkuperä juontaa juurensa ajatuksesta, että näyte on ainoa käytettävissämme oleva tietolähde väestöstä. Kaikki, mitä tiedämme väestöstä, on edustettuna otoksessa. Siksi voimme vain sanoa, että näyte on tarkin heijastus käytettävissämme olevasta populaatiosta. Siksi meidän on löydettävä parametri, jolla käytettävissä olevasta näytteestä tulee todennäköisin.
Ilmeisesti kyseessä on optimointiongelma, jossa meidän on löydettävä funktion ääripiste. Ääripisteen löytämiseksi on otettava huomioon ensimmäisen kertaluvun ehto, eli funktion derivaatta on rinnastettava nollaan ja ratkaistava yhtälö halutun parametrin suhteen. Useiden tekijöiden tulon derivaatan etsiminen voi kuitenkin olla pitkä tehtävä, tämän välttämiseksi on olemassa erityinen tekniikka - logaritmiin vaihtaminen todennäköisyysfunktiot. Miksi tällainen siirto on mahdollinen? Kiinnittäkäämme huomiota siihen, että emme etsi itse funktion ääripäätä, ja ääripiste, eli tuntemattoman parametrin arvo missä saavuttaa maksiminsa. Kun siirrytään logaritmiin, ääripiste ei muutu (vaikka ääripää itsessään eroaa), koska logaritmi on monotoninen funktio.
Jatketaanpa edellä olevan mukaisesti esimerkkimme kehittämistä Vasyan, Fedyan ja Leshan lainoilla. Ensin siirrytään asiaan todennäköisyysfunktion logaritmi:
Nyt voimme helposti erottaa lausekkeen :
Ja lopuksi, harkitse ensimmäisen asteen ehtoa - rinnastamme funktion derivaatan nollaan:
Näin ollen intuitiivinen arviomme lainan takaisinmaksun todennäköisyydestä oli teoriassa perusteltua.
Hienoa, mutta mitä tälle tiedolle nyt pitäisi tehdä? Jos oletetaan, että joka kolmas lainanottaja ei palauta rahojaan pankille, niin pankki menee väistämättä konkurssiin. Se on totta, mutta vain arvioitaessa lainan takaisinmaksun todennäköisyyttä Emme huomioineet lainan takaisinmaksuun vaikuttavia tekijöitä: lainanottajan palkkaa ja kuukausierän suuruutta. Muistakaamme, että olemme aiemmin laskeneet kunkin asiakkaan lainan takaisinmaksun todennäköisyyden ottaen huomioon nämä samat tekijät. On loogista, että saimme todennäköisyydet, jotka poikkeavat vakiosta yhtä suuresta .
Määritellään näytteiden todennäköisyys:
Koodi näytetodennäköisyyksien laskemiseen
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)
Otostodennäköisyys vakioarvolla :
Otostodennäköisyys laskettaessa lainan takaisinmaksun todennäköisyyttä tekijät huomioiden :
Tekijöiden mukaan lasketun todennäköisyyden otoksen todennäköisyys osoittautui suuremmiksi kuin todennäköisyys vakiotodennäköisyysarvolla. Mitä tämä tarkoittaa? Tämä viittaa siihen, että tekijöiden tuntemus mahdollisti kunkin asiakkaan lainan takaisinmaksun todennäköisyyden entistä tarkemmin. Siksi seuraavaa lainaa myönnettäessä olisi oikeampaa käyttää velan takaisinmaksun todennäköisyyden arvioimiseen artikkelin 3 kohdan lopussa ehdotettua mallia.
Mutta sitten, jos haluamme maksimoida näyte todennäköisyysfunktio, niin miksi et käyttäisi jotain algoritmia, joka tuottaa esimerkiksi Vasyalle, Fedyalle ja Leshalle todennäköisyydet, jotka ovat vastaavasti 0.99, 0.99 ja 0.01. Ehkä tällainen algoritmi toimii hyvin harjoitusnäytteessä, koska se tuo näytteen todennäköisyysarvon lähemmäksi , mutta ensinnäkin tällaisella algoritmilla on todennäköisesti vaikeuksia yleistyskyvyn kanssa, ja toiseksi tämä algoritmi ei todellakaan ole lineaarinen. Ja jos menetelmät ylikoulutuksen (yhtä heikon yleistyskyvyn) torjumiseksi eivät selvästikään sisälly tämän artikkelin suunnitelmaan, käydään läpi toinen kohta yksityiskohtaisemmin. Voit tehdä tämän vastaamalla yksinkertaiseen kysymykseen. Voiko Vasyan ja Fedjan lainan takaisinmaksun todennäköisyys olla sama, kun otetaan huomioon meille tunnetut tekijät? Hyvän logiikan näkökulmasta ei tietenkään, ei voi. Joten Vasya maksaa 2.5% palkastaan kuukaudessa lainan takaisinmaksuun ja Fedya - melkein 27,8%. Myös kaaviossa 2 “Asiakasluokitus” näemme, että Vasya on paljon kauempana luokkia erottavasta viivasta kuin Fedya. Ja lopuksi tiedämme, että toiminto Vasyalle ja Fedyalle on eri arvot: 4.24 Vasyalle ja 1.0 Fedyalle. Jos nyt esimerkiksi Fedya ansaitsisi suuruusluokkaa enemmän tai pyysi pienempää lainaa, niin Vasyan ja Fedian lainan takaisinmaksun todennäköisyys olisi sama. Toisin sanoen lineaarista riippuvuutta ei voida huijata. Ja jos todella laskemme kertoimet , eivätkä ottaneet niitä tyhjästä, voimme turvallisesti sanoa, että arvomme Parhaiten voimme arvioida jokaisen lainanottajan lainan takaisinmaksun todennäköisyyden, mutta koska sovimme olettavan, että kertoimien määrittäminen suoritettiin kaikkien sääntöjen mukaan, niin oletetaan niin - kertoimillamme voimme antaa paremman arvion todennäköisyydestä :)
Poikkeamme kuitenkin. Tässä osiossa meidän on ymmärrettävä, kuinka painojen vektori määritetään , joka on tarpeen kunkin lainanottajan lainan takaisinmaksun todennäköisyyden arvioimiseksi.
Tehdään lyhyesti yhteenveto, millä arsenaalilla etsimme kertoimia :
1. Oletetaan, että kohdemuuttujan (ennustearvon) ja tulokseen vaikuttavan tekijän välinen suhde on lineaarinen. Tästä syystä sitä käytetään lineaarinen regressiofunktio lomake , jonka rivi jakaa objektit (asiakkaat) luokkiin и tai (asiakkaat, jotka pystyvät maksamaan lainan takaisin ja ne, jotka eivät pysty). Meidän tapauksessamme yhtälöllä on muoto .
2. Käytämme käänteinen logit-funktio lomake määrittää todennäköisyys, että objekti kuuluu luokkaan .
3. Pidämme koulutuskokonaisuuttamme yleistyneen toteutuksena Bernoullin suunnitelmat, eli jokaiselle objektille generoidaan satunnaismuuttuja, joka todennäköisyydellä (oma jokaiselle kohteelle) ottaa arvon 1 ja todennäköisyydellä - 0.
4. Tiedämme, mitä meidän pitää maksimoida näyte todennäköisyysfunktio ottamalla huomioon hyväksytyt tekijät, jotta käytettävissä olevasta otoksesta tulee todennäköisin. Toisin sanoen meidän on valittava parametrit, joilla näyte on todennäköisin. Meidän tapauksessamme valittu parametri on lainan takaisinmaksun todennäköisyys , mikä puolestaan riippuu tuntemattomista kertoimista . Joten meidän on löydettävä tällainen painojen vektori , jolloin otoksen todennäköisyys on suurin.
5. Tiedämme mitä maksimoida näytetodennäköisyysfunktioita voi käyttää suurimman todennäköisyyden menetelmä. Ja me tiedämme kaikki hankalat temput työskennellä tällä menetelmällä.
Näin siitä tulee monivaiheinen liike :)
Muista nyt, että aivan artikkelin alussa halusimme johtaa kahden tyyppisiä tappiofunktioita Logistinen menetys riippuen siitä, kuinka objektiluokat on määritetty. Sattui niin, että kahden luokan luokittelutehtävissä luokat merkitään nimellä и tai . Merkinnästä riippuen lähdössä on vastaava häviöfunktio.
Tapaus 1. Objektien luokittelu и
Aiemmin määritettäessä todennäköisyyttä otos, jossa lainanottajan velan takaisinmaksun todennäköisyys laskettiin tekijöiden ja annettujen kertoimien perusteella. , sovelsimme kaavaa:
Todella on merkitys logistiset vastaustoiminnot tietylle painovektorille
Silloin mikään ei estä meitä kirjoittamasta esimerkkitodennäköisyysfunktiota seuraavasti:
Joskus joillekin aloitteleville analyytikoille on vaikea ymmärtää heti, kuinka tämä toiminto toimii. Katsotaanpa 4 lyhyttä esimerkkiä, jotka selventävät asioita:
1. Jos (eli harjoitusnäytteen mukaan objekti kuuluu luokkaan +1), ja algoritmimme määrittää todennäköisyyden luokitella objekti luokkaan yhtä suuri kuin 0.9, niin tämä otostodennäköisyys lasketaan seuraavasti:
2. Jos Ja , laskelma on seuraava:
3. Jos Ja , laskelma on seuraava:
4. Jos Ja , laskelma on seuraava:
On selvää, että todennäköisyysfunktio maksimoidaan tapauksissa 1 ja 3 tai yleisessä tapauksessa - oikein arvatuilla arvoilla objektin luokkaan määrittämisen todennäköisyyksiin .
Johtuen siitä, että määritettäessä todennäköisyyttä objektin määrittämiselle luokkaan Emme vain tiedä kertoimia , sitten etsimme niitä. Kuten edellä mainittiin, tämä on optimointiongelma, jossa ensin on löydettävä todennäköisyysfunktion derivaatta suhteessa painojen vektoriin . Ensin on kuitenkin järkevää yksinkertaistaa tehtävää itsellemme: etsitään logaritmin derivaatta todennäköisyysfunktiot.
Miksi logaritmin jälkeen, sisään logistiset virhetoiminnot, vaihdoimme merkin päälle . Kaikki on yksinkertaista, koska mallin laadun arviointiongelmissa on tapana minimoida funktion arvo, kerroimme lausekkeen oikean puolen ja vastaavasti maksimoimisen sijaan nyt minimoidaan funktio.
Itse asiassa juuri nyt, silmiesi edessä, tappiofunktio johdettiin huolella - Logistinen menetys harjoitussarjalle, jossa on kaksi luokkaa: и .
Nyt kertoimien löytämiseksi meidän on vain löydettävä derivaatta logistiset virhetoiminnot ja valitse sitten optimaaliset kertoimet käyttämällä numeerisia optimointimenetelmiä, kuten gradienttilaskua tai stokastista gradienttilaskua . Mutta ottaen huomioon artikkelin huomattavan määrän, ehdotetaan, että erottelu suoritetaan itse, tai ehkä tämä on aihe seuraavalle artikkelille, jossa on paljon aritmetiikkaa ilman tällaisia yksityiskohtaisia esimerkkejä.
Tapaus 2. Objektien luokittelu и
Lähestymistapa tässä on sama kuin luokissa и , vaan itse polku häviöfunktion ulostuloon Logistinen menetys, on koristeellisempi. Aloitetaan. Todennäköisyysfunktiossa käytämme operaattoria "jos sitten...". Eli jos Objekti kuuluu luokkaan , sitten otoksen todennäköisyyden laskemiseen käytämme todennäköisyyttä , jos objekti kuuluu luokkaan , sitten korvaamme todennäköisyydellä . Todennäköisyysfunktio näyttää tältä:
Kuvataanpa sormillamme, kuinka se toimii. Tarkastellaan 4 tapausta:
1. Jos и , niin näytteenoton todennäköisyys "menee"
2. Jos и , niin näytteenoton todennäköisyys "menee"
3. Jos и , niin näytteenoton todennäköisyys "menee"
4. Jos и , niin näytteenoton todennäköisyys "menee"
On selvää, että tapauksissa 1 ja 3, kun todennäköisyydet määritettiin oikein algoritmilla, todennäköisyysfunktio maksimoidaan, eli juuri tämän halusimme saada. Tämä lähestymistapa on kuitenkin melko hankala, ja seuraavaksi harkitsemme kompaktimpaa merkintää. Mutta ensin logaritoidaan todennäköisyysfunktio etumerkin muutoksella, koska nyt minimoimme sen.
Korvataan sen sijaan ilme :
Yksinkertaistetaan oikea termi logaritmin alla yksinkertaisilla aritmeettisilla tekniikoilla ja saadaan:
Nyt on aika päästä eroon operaattorista "jos sitten...". Huomaa, että kun objekti kuuluu luokkaan , sitten lausekkeessa logaritmin alla, nimittäjässä, nostettu valtaan , jos objekti kuuluu luokkaan , sitten $e$ nostetaan potenssiin . Siksi tutkinnon merkintää voidaan yksinkertaistaa yhdistämällä molemmat tapaukset yhdeksi: . sitten logistinen virhetoiminto tulee muodossa:
Logaritmin sääntöjen mukaisesti käännämme murto-osan ja laitamme merkin "" (miinus) logaritmille saamme:
Tässä on hävitysfunktio logistinen menetys, jota käytetään harjoitussarjassa luokkiin määritettyjen kohteiden kanssa: и .
No, tässä vaiheessa jätän lomani ja lopetamme artikkelin.
Apumateriaalit
1. Kirjallisuus
1) Sovellettu regressioanalyysi / N. Draper, G. Smith - 2. painos. – M.: Finance and Statistics, 1986 (käännös englannista)
2) Todennäköisyysteoria ja matemaattiset tilastot / V.E. Gmurman - 9. painos. - M.: Korkeakoulu, 2003
3) Todennäköisyysteoria / N.I. Chernova - Novosibirsk: Novosibirskin valtionyliopisto, 2007
4) Liiketoimintaanalytiikka: tiedosta tietoon / Paklin N. B., Oreshkov V. I. - 2nd ed. — Pietari: Pietari, 2013
5) Tietotiede Datatiede tyhjästä / Joel Gras - Pietari: BHV Petersburg, 2017
6) Käytännön tilastot tietotieteen asiantuntijoille / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Luennot, kurssit (video)
1)
2)
3)
4)
5)
3. Internet-lähteet
1)
2)
4)
6)
7)
Lähde: will.com