I den här artikeln kommer vi att analysera de teoretiska beräkningarna av transformationen linjära regressionsfunktioner в invers logittransformationsfunktion (kallas annars logistisk svarsfunktion). Använd sedan arsenalen metoden för maximal sannolikhet, i enlighet med den logistiska regressionsmodellen härleder vi förlustfunktionen Logistisk förlust, eller med andra ord, vi kommer att definiera en funktion med vilken parametrarna för viktvektorn väljs i den logistiska regressionsmodellen .
Artikelöversikt:
- Låt oss upprepa det linjära sambandet mellan två variabler
- Låt oss identifiera behovet av transformation linjära regressionsfunktioner в logistisk responsfunktion
- Låt oss utföra transformationerna och produktionen logistisk responsfunktion
- Låt oss försöka förstå varför minsta kvadratmetoden är dålig när man väljer parametrar funktioner Logistisk förlust
- Vi använder metoden för maximal sannolikhet för att bestämma parametervalsfunktioner :
5.1. Fall 1: funktion Logistisk förlust för objekt med klassbeteckningar 0 и 1:
5.2. Fall 2: funktion Logistisk förlust för objekt med klassbeteckningar -1 и +1:
Artikeln är fylld med enkla exempel där alla beräkningar är lätta att göra muntligen eller på papper, i vissa fall kan en miniräknare krävas. Så gör dig redo :)
Den här artikeln är främst avsedd för datavetare med en inledande kunskapsnivå i grunderna för maskininlärning.
Artikeln kommer också att ge kod för att rita grafer och beräkningar. All kod är skriven på språket python 2.7. Låt mig förklara i förväg om "nyheten" i den använda versionen - detta är ett av villkoren för att ta den välkända kursen från Yandex på en lika välkänd utbildningsplattform online Coursera, och, som man kan anta, utarbetades materialet utifrån denna kurs.
01. Raklinjeberoende
Det är ganska rimligt att ställa frågan - vad har linjärt beroende och logistisk regression att göra med det?
Det är enkelt! Logistisk regression är en av modellerna som tillhör den linjära klassificeraren. Med enkla ord är uppgiften för en linjär klassificerare att förutsäga målvärden från variabler (regressorer) . Man tror att beroendet mellan egenskaperna och målvärden linjär. Därav namnet på klassificeraren - linjär. För att uttrycka det väldigt grovt så bygger den logistiska regressionsmodellen på antagandet att det finns ett linjärt samband mellan egenskaperna och målvärden . Detta är kopplingen.
Det finns det första exemplet i studion, och det handlar, korrekt, om det rätlinjiga beroendet av de storheter som studeras. I processen med att förbereda artikeln stötte jag på ett exempel som redan har satt många människor på kanten - strömberoendet på spänning ("Applied regressions analysis", N. Draper, G. Smith). Vi ska titta på det här också.
Enligt Ohms lag:
var - nuvarande styrka, - Spänning, - motstånd.
Om vi inte visste Ohms lag, då kunde vi hitta beroendet empiriskt genom att förändra och mäter , samtidigt som du stödjer fast. Då skulle vi se att beroendegrafen från ger en mer eller mindre rak linje genom origo. Vi säger "mer eller mindre" eftersom, även om förhållandet faktiskt är korrekt, kan våra mätningar innehålla små fel, och därför kanske punkterna på grafen inte faller exakt på linjen, utan kommer att spridas runt den slumpmässigt.
Diagram 1 "Beroende" från »
Kod för diagramritning
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. Behovet av att transformera den linjära regressionsekvationen
Låt oss titta på ett annat exempel. Låt oss föreställa oss att vi arbetar i en bank och vår uppgift är att bestämma sannolikheten för att låntagaren ska betala tillbaka lånet beroende på vissa faktorer. För att förenkla uppgiften kommer vi bara att överväga två faktorer: låntagarens månadslön och det månatliga återbetalningsbeloppet för lånet.
Uppgiften är mycket villkorad, men med detta exempel kan vi förstå varför det inte räcker att använda linjära regressionsfunktioner, och ta reda på vilka transformationer som behöver utföras med funktionen.
Låt oss återgå till exemplet. Det är underförstått att ju högre lön, desto mer kommer låntagaren att kunna avsätta månadsvis för att återbetala lånet. Samtidigt kommer detta förhållande att vara ganska linjärt för ett visst löneintervall. Låt oss till exempel ta ett löneintervall från 60.000 200.000 RUR till 3 5.000 RUR och anta att i det angivna löneintervallet är beroendet av storleken på den månatliga betalningen på lönens storlek linjärt. Låt oss säga att det för det angivna löneintervallet avslöjades att lönegraden inte kan falla under XNUMX och att låntagaren fortfarande måste ha XNUMX XNUMX RUR i reserv. Och bara i det här fallet kommer vi att anta att låntagaren kommer att betala tillbaka lånet till banken. Sedan kommer den linjära regressionsekvationen att ha formen:
där , , , - lön -te låntagaren, - betalning av lån -e låntagaren.
Ersätter lön och lånebetalning med fasta parametrar i ekvationen Du kan bestämma om du vill ge ut eller vägra ett lån.
Framöver noterar vi det med de givna parametrarna linjär regressionsfunktion, Använd i logistiska svarsfunktioner kommer att producera stora värden som kommer att komplicera beräkningar för att bestämma sannolikheterna för återbetalning av lån. Därför föreslås det att minska våra koefficienter, låt oss säga, med 25.000 XNUMX gånger. Denna omvandling av koefficienterna kommer inte att ändra beslutet att ge ut ett lån. Låt oss komma ihåg denna punkt för framtiden, men nu, för att göra det ännu tydligare vad vi pratar om, låt oss överväga situationen med tre potentiella låntagare.
Tabell 1 "Möjliga låntagare"
Kod för att generera tabellen
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']]
I enlighet med uppgifterna i tabellen vill Vasya, med en lön på 120.000 3.000 RUR, få ett lån så att han kan betala tillbaka det månadsvis med 5.000 XNUMX RUR. Vi bestämde att för att godkänna lånet måste Vasyas lön överstiga tre gånger betalningsbeloppet, och det måste fortfarande finnas XNUMX XNUMX RUR kvar. Vasya uppfyller detta krav: . Till och med 106.000 XNUMX RUR återstår. Trots att vid beräkning vi har minskat oddsen 25.000 XNUMX gånger blev resultatet detsamma – lånet kan godkännas. Fedya kommer också att få ett lån, men Lesha, trots att han får mest, måste dämpa aptiten.
Låt oss rita en graf för detta fall.
Diagram 2 ”Klassificering av låntagare”
Kod för att rita grafen
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()
Så, vår raka linje, konstruerad i enlighet med funktionen , skiljer "dåliga" låntagare från "bra". De låntagare vars önskningar inte sammanfaller med deras kapacitet ligger över gränsen (Lesha), medan de som, enligt parametrarna för vår modell, kan betala tillbaka lånet ligger under gränsen (Vasya och Fedya). Med andra ord kan vi säga så här: vår direktlinje delar upp låntagare i två klasser. Låt oss beteckna dem på följande sätt: till klass Vi kommer att klassificera de låntagare som är mest benägna att betala tillbaka lånet som eller Vi kommer att ta med de låntagare som med största sannolikhet inte kommer att kunna betala tillbaka lånet.
Låt oss sammanfatta slutsatserna från detta enkla exempel. Låt oss ta en poäng och att ersätta punktens koordinater i motsvarande ekvation för linjen , överväg tre alternativ:
- Om punkten är under linjen och vi tilldelar den till klassen , sedan värdet på funktionen kommer att vara positiv från до . Det betyder att vi kan anta att sannolikheten för att återbetala lånet är inom . Ju större funktionsvärde, desto högre sannolikhet.
- Om en punkt ligger över en linje och vi tilldelar den till klassen eller , då blir värdet på funktionen negativt från до . Då kommer vi att anta att sannolikheten för återbetalning av skulden är inom och ju större funktionens absoluta värde är, desto högre är vårt förtroende.
- Punkten ligger på en rät linje, på gränsen mellan två klasser. I det här fallet värdet på funktionen kommer att vara lika och sannolikheten för att återbetala lånet är lika med .
Låt oss nu föreställa oss att vi inte har två faktorer, utan dussintals, och inte tre, utan tusentals låntagare. Då får vi istället för en rak linje m-dimensionell plan och koefficienter vi kommer inte att tas ur tomma luften, utan härledas enligt alla regler, och på grundval av ackumulerade uppgifter om låntagare som har eller inte har betalat tillbaka lånet. Och faktiskt, notera att vi nu väljer låntagare med hjälp av redan kända koefficienter . Faktum är att den logistiska regressionsmodellens uppgift är just att bestämma parametrarna , vid vilken värdet av förlusten fungerar Logistisk förlust kommer att tendera till ett minimum. Men om hur vektorn beräknas , kommer vi att ta reda på mer i det femte avsnittet av artikeln. Under tiden återvänder vi till det förlovade landet - till vår bankman och hans tre kunder.
Tack vare funktionen vi vet vem som kan få lån och vem som behöver vägras. Men du kan inte gå till direktören med sådan information, eftersom de ville få från oss sannolikheten för återbetalning av lånet av varje låntagare. Vad ska man göra? Svaret är enkelt - vi måste på något sätt omvandla funktionen , vars värden ligger i intervallet till en funktion vars värden kommer att ligga i intervallet . Och en sådan funktion finns, kallas den logistisk svarsfunktion eller omvänd logit-transformation. Träffa:
Låt oss se steg för steg hur det fungerar logistisk responsfunktion. Observera att vi kommer att gå i motsatt riktning, d.v.s. vi kommer att anta att vi känner till sannolikhetsvärdet, som ligger i intervallet från до och sedan kommer vi att "avveckla" detta värde till hela intervallet av siffror från до .
03. Vi härleder den logistiska responsfunktionen
Steg 1. Konvertera sannolikhetsvärdena till ett intervall
Under omvandlingen av funktionen в logistisk responsfunktion Vi lämnar vår kreditanalytiker ifred och tar en rundtur bland bookmakers istället. Nej, vi kommer givetvis inte att satsa, det enda som intresserar oss där är meningen med uttrycket, till exempel är chansen 4 till 1. Oddsen, som är bekanta för alla spelarna, är förhållandet mellan "framgångar" och " misslyckanden”. I sannolikhetstermer är odds sannolikheten för att en händelse inträffar dividerat med sannolikheten för att händelsen inte inträffar. Låt oss skriva ner formeln för chansen att en händelse inträffar :
var - sannolikheten för att en händelse inträffar, — sannolikheten för att en händelse INTE inträffar
Till exempel, om sannolikheten att en ung, stark och lekfull häst med smeknamnet "Veterok" kommer att slå en gammal och slapp gammal kvinna som heter "Matilda" på ett lopp är lika med , då är chanserna att lyckas för "Veterok". к och vice versa, om vi känner till oddsen, kommer det inte att vara svårt för oss att beräkna sannolikheten :
Således har vi lärt oss att "översätta" sannolikhet till chanser, som tar värden från до . Låt oss ta ett steg till och lära oss att "översätta" sannolikheten till hela tallinjen från до .
Steg 2. Konvertera sannolikhetsvärdena till ett intervall
Det här steget är väldigt enkelt - låt oss ta logaritmen för oddsen till basen av Eulers tal och vi får:
Nu vet vi att om , beräkna sedan värdet kommer att vara väldigt enkelt och dessutom borde det vara positivt: . Detta är sant.
Av nyfikenhet, låt oss kolla vad om , då förväntar vi oss att se ett negativt värde . Vi kontrollerar: . Det är rätt.
Nu vet vi hur man konverterar sannolikhetsvärdet från до längs hela tallinjen från до . I nästa steg gör vi tvärtom.
För nu, vi noterar att i enlighet med reglerna för logaritm, att känna till värdet av funktionen , kan du beräkna oddsen:
Denna metod för att bestämma odds kommer att vara användbar för oss i nästa steg.
Steg 3. Låt oss härleda en formel att bestämma
Så vi lärde oss, att veta , hitta funktionsvärden . Men i själva verket behöver vi precis det motsatta - att veta värdet hitta . För att göra detta, låt oss vända oss till ett sådant koncept som den omvända oddsfunktionen, enligt vilken:
I artikeln kommer vi inte att härleda formeln ovan, men vi kommer att kontrollera den med siffrorna från exemplet ovan. Vi vet att med oddset 4 till 1 (), är sannolikheten för att händelsen inträffar 0.8 (). Låt oss göra ett byte: . Detta sammanfaller med våra tidigare beräkningar. Låt oss gå vidare.
I det sista steget drog vi slutsatsen det , vilket innebär att du kan göra ett byte i den omvända oddsfunktionen. Vi får:
Dividera både täljaren och nämnaren med , Sedan:
För säkerhets skull, för att vara säker på att vi inte har gjort ett misstag någonstans, låt oss göra en liten kontroll till. I steg 2 har vi för bestämt det . Sedan byter du ut värdet in i den logistiska responsfunktionen förväntar vi oss att få . Vi ersätter och får:
Grattis, kära läsare, vi har precis tagit fram och testat den logistiska responsfunktionen. Låt oss titta på grafen för funktionen.
Diagram 3 "Logistisk svarsfunktion"
Kod för att rita grafen
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()
I litteraturen kan du även hitta namnet på denna funktion som sigmoid funktion. Grafen visar tydligt att den huvudsakliga förändringen i sannolikheten för ett objekt som tillhör en klass sker inom ett relativt litet område , någonstans ifrån до .
Jag föreslår att du återvänder till vår kreditanalytiker och hjälper honom att beräkna sannolikheten för återbetalning av lån, annars riskerar han att bli utan bonus :)
Tabell 2 "Möjliga låntagare"
Kod för att generera tabellen
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']]
Så vi har bestämt sannolikheten för återbetalning av lån. I allmänhet verkar detta vara sant.
Sannolikheten att Vasya, med en lön på 120.000 3.000 RUR, kommer att kunna ge 100 0.3 RUR till banken varje månad är nära XNUMX%. Förresten måste vi förstå att en bank kan ge ut ett lån till Lesha om bankens policy till exempel ger utlåning till kunder med en sannolikhet för återbetalning av lån på mer än till exempel XNUMX. Det är bara det att i det här fallet kommer banken att skapa en större reserv för eventuella förluster.
Det bör också noteras att lönegraden på minst 3 och med en marginal på 5.000 XNUMX RUR togs från taket. Därför kunde vi inte använda vektorn av vikter i dess ursprungliga form . Vi behövde minska koefficienterna kraftigt, och i det här fallet dividerade vi varje koefficient med 25.000 XNUMX, det vill säga i huvudsak justerade vi resultatet. Men detta gjordes specifikt för att förenkla förståelsen av materialet i det inledande skedet. I livet behöver vi inte uppfinna och justera koefficienter, utan hitta dem. I nästa avsnitt av artikeln kommer vi att härleda ekvationerna med vilka parametrarna väljs .
04. Minsta kvadratmetod för att bestämma viktvektorn i den logistiska responsfunktionen
Vi känner redan till denna metod för att välja en vektor av vikter som minsta kvadratmetoden (LSM) och faktiskt, varför använder vi det då inte i binära klassificeringsproblem? Faktum är att ingenting hindrar dig från att använda MNC, endast denna metod i klassificeringsproblem ger resultat som är mindre exakta än Logistisk förlust. Det finns en teoretisk grund för detta. Låt oss först titta på ett enkelt exempel.
Låt oss anta att våra modeller (med MSE и Logistisk förlust) har redan börjat välja vektorn för vikter och vi stoppade beräkningen i något steg. Det spelar ingen roll om det är i mitten, i slutet eller i början, det viktigaste är att vi redan har några värden för viktvektorn och låt oss anta att viktvektorn i detta steg för båda modellerna finns det inga skillnader. Ta sedan de resulterande vikterna och byt ut dem i logistisk responsfunktion () för något objekt som tillhör klassen . Vi undersöker två fall när, i enlighet med den valda vektorn av vikter, vår modell är mycket felaktig och vice versa - modellen är mycket säker på att objektet tillhör klassen . Låt oss se vilka böter som kommer att utfärdas vid användning MNC и Logistisk förlust.
Kod för att beräkna påföljder beroende på vilken förlustfunktion som används
# класс объекта
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
Ett fall av en blunder — modellen tilldelar ett objekt till en klass med en sannolikhet på 0,01
Straff vid användning MNC kommer vara:
Straff vid användning Logistisk förlust kommer vara:
Ett fall av starkt förtroende — modellen tilldelar ett objekt till en klass med en sannolikhet på 0,99
Straff vid användning MNC kommer vara:
Straff vid användning Logistisk förlust kommer vara:
Detta exempel illustrerar väl att förlustfunktionen vid ett grovt fel Loggförlust straffar modellen betydligt mer än MSE. Låt oss nu förstå vad den teoretiska bakgrunden är för att använda förlustfunktionen Loggförlust i klassificeringsproblem.
05. Maximum likelihood-metod och logistisk regression
Som utlovat i början är artikeln full av enkla exempel. I studion finns ett annat exempel och gamla gäster - banklåntagare: Vasya, Fedya och Lesha.
För säkerhets skull, innan jag utvecklar exemplet, låt mig påminna dig om att vi i livet har att göra med ett träningsprov på tusentals eller miljontals objekt med tiotals eller hundratals funktioner. Men här är siffrorna tagna så att de lätt kan passa in i huvudet på en nybörjare som datavetare.
Låt oss återgå till exemplet. Låt oss föreställa oss att bankens direktör bestämde sig för att ge ut ett lån till alla i nöd, trots att algoritmen sa åt honom att inte utfärda det till Lesha. Och nu har det gått tillräckligt med tid och vi vet vilka av de tre hjältarna som betalade tillbaka lånet och vilka som inte gjorde det. Vad var att vänta: Vasya och Fedya betalade tillbaka lånet, men det gjorde inte Lesha. Låt oss nu föreställa oss att detta resultat kommer att vara ett nytt träningsprov för oss och samtidigt är det som om all data om faktorerna som påverkar sannolikheten för att återbetala lånet (låntagarens lön, storleken på den månatliga betalningen) har försvunnit. Sedan kan vi intuitivt anta att var tredje låntagare inte betalar tillbaka lånet till banken, eller med andra ord, sannolikheten för att nästa låntagare ska betala tillbaka lånet . Detta intuitiva antagande har teoretisk bekräftelse och bygger på metoden för maximal sannolikhet, ofta i litteraturen kallas det principen om maximal sannolikhet.
Låt oss först bekanta oss med begreppsapparaten.
Sannolikhet för provtagning är sannolikheten att få exakt ett sådant urval, att få exakt sådana observationer/resultat, d.v.s. produkten av sannolikheterna att erhålla vart och ett av provresultaten (till exempel om lånet från Vasya, Fedya och Lesha återbetalades eller inte återbetalades samtidigt).
Sannolikhetsfunktion relaterar sannolikheten för ett urval till värdena för distributionsparametrarna.
I vårt fall är träningsprovet ett generaliserat Bernoulli-schema, där den slumpmässiga variabeln endast tar två värden: eller . Därför kan sampelsannolikheten skrivas som en sannolikhetsfunktion av parametern enligt följande:
Ovanstående post kan tolkas på följande sätt. Den gemensamma sannolikheten att Vasya och Fedya kommer att återbetala lånet är lika med , är sannolikheten att Lesha INTE kommer att betala tillbaka lånet lika med (eftersom det INTE var återbetalningen av lånet som skedde), därför är den gemensamma sannolikheten för alla tre händelserna lika .
Maximal likelihood-metod är en metod för att uppskatta en okänd parameter genom att maximera sannolikhetsfunktioner. I vårt fall måste vi hitta ett sådant värde , vid vilken når sitt maximum.
Var kommer själva idén ifrån - att leta efter värdet av en okänd parameter vid vilken likelihood-funktionen når ett maximum? Upprinnelsen till idén härrör från idén att ett urval är den enda källan till kunskap som finns tillgänglig för oss om befolkningen. Allt vi vet om populationen finns representerat i urvalet. Allt vi kan därför säga är att ett urval är den mest exakta återspeglingen av populationen som är tillgänglig för oss. Därför måste vi hitta en parameter där det tillgängliga urvalet blir det mest sannolika.
Uppenbarligen har vi att göra med ett optimeringsproblem där vi måste hitta ytterpunkten för en funktion. För att hitta extremumpunkten är det nödvändigt att överväga första ordningens villkor, det vill säga likställa derivatan av funktionen till noll och lösa ekvationen med avseende på den önskade parametern. Att söka efter derivatan av en produkt av ett stort antal faktorer kan dock vara en lång uppgift; för att undvika detta finns det en speciell teknik - att byta till logaritmen sannolikhetsfunktioner. Varför är en sådan övergång möjlig? Låt oss vara uppmärksamma på det faktum att vi inte letar efter yttersta delen av själva funktionen, och extremumpunkten, det vill säga värdet på den okända parametern , vid vilken når sitt maximum. När man flyttar till en logaritm ändras inte extremumpunkten (även om själva extremumet kommer att skilja sig), eftersom logaritmen är en monoton funktion.
Låt oss, i enlighet med ovanstående, fortsätta att utveckla vårt exempel med lån från Vasya, Fedya och Lesha. Låt oss först gå vidare till logaritm för sannolikhetsfunktionen:
Nu kan vi enkelt särskilja uttrycket med :
Och slutligen, överväg första ordningens villkor - vi likställer derivatan av funktionen till noll:
Alltså vår intuitiva uppskattning av sannolikheten för återbetalning av lån var teoretiskt motiverad.
Bra, men vad ska vi göra med denna information nu? Om vi antar att var tredje låntagare inte lämnar tillbaka pengarna till banken, kommer den senare oundvikligen att gå i konkurs. Det stämmer, men bara när man bedömer sannolikheten för återbetalning av lån lika med Vi tog inte hänsyn till faktorerna som påverkar återbetalningen av lån: låntagarens lön och storleken på den månatliga betalningen. Låt oss komma ihåg att vi tidigare beräknade sannolikheten för återbetalning av lånet av varje kund, med hänsyn till samma faktorer. Det är logiskt att vi fick sannolikheter som skiljer sig från konstanten lika .
Låt oss definiera sannolikheten för prover:
Kod för beräkning av provsannolikheter
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)
Provsannolikhet vid ett konstant värde :
Provsannolikhet vid beräkning av sannolikheten för återbetalning av lån med hänsyn tagen till faktorer :
Sannolikheten för ett urval med en sannolikhet beräknad beroende på faktorerna visade sig vara högre än sannolikheten med ett konstant sannolikhetsvärde. Vad betyder det här? Detta tyder på att kunskap om faktorerna gjorde det möjligt att mer exakt välja sannolikheten för återbetalning av lån för varje kund. Därför vore det mer korrekt att vid utfärdandet av nästa lån använda den modell som föreslås i slutet av avsnitt 3 i artikeln för att bedöma sannolikheten för återbetalning av skulden.
Men alltså, om vi vill maximera prov sannolikhetsfunktion, varför inte använda någon algoritm som kommer att producera sannolikheter för Vasya, Fedya och Lesha, till exempel, lika med 0.99, 0.99 respektive 0.01. Kanske kommer en sådan algoritm att fungera bra på träningsprovet, eftersom det kommer att föra provets sannolikhetsvärde närmare , men för det första kommer en sådan algoritm med största sannolikhet att ha svårigheter med generaliseringsförmågan, och för det andra kommer denna algoritm definitivt inte att vara linjär. Och om metoder för att bekämpa överträning (lika svag generaliseringsförmåga) uppenbarligen inte ingår i planen för denna artikel, låt oss gå igenom den andra punkten mer i detalj. För att göra detta, svara bara på en enkel fråga. Kan sannolikheten för att Vasya och Fedya ska återbetala lånet vara densamma, med hänsyn till de faktorer som är kända för oss? Ur sund logiks synvinkel, naturligtvis inte, det kan den inte. Så Vasya kommer att betala 2.5% av sin lön per månad för att återbetala lånet, och Fedya - nästan 27,8%. Även i diagram 2 "Klientklassificering" ser vi att Vasya är mycket längre från linjen som skiljer klasserna åt än Fedya. Och slutligen vet vi att funktionen för Vasya och Fedya har olika värden: 4.24 för Vasya och 1.0 för Fedya. Nu, om Fedya, till exempel, tjänade en storleksordning mer eller bad om ett mindre lån, då skulle sannolikheterna för att återbetala lånet för Vasya och Fedya vara liknande. Linjärt beroende kan med andra ord inte luras. Och om vi faktiskt räknat ut oddsen , och inte tog dem ur luften, kan vi lugnt säga att våra värderingar bäst låter oss uppskatta sannolikheten för återbetalning av lånet av varje låntagare, men eftersom vi gick med på att anta att bestämning av koefficienterna utfördes enligt alla regler, då kommer vi att anta det - våra koefficienter tillåter oss att ge en bättre uppskattning av sannolikheten :)
Vi avviker dock. I det här avsnittet måste vi förstå hur vektorn av vikter bestäms , vilket är nödvändigt för att bedöma sannolikheten för återbetalning av lånet av varje låntagare.
Låt oss kort sammanfatta med vilken arsenal vi letar efter odds :
1. Vi antar att sambandet mellan målvariabeln (prediktionsvärde) och faktorn som påverkar resultatet är linjär. Av denna anledning används den linjär regressionsfunktion snäll , vars rad delar in objekt (klienter) i klasser и eller (kunder som kan betala tillbaka lånet och de som inte kan). I vårt fall har ekvationen formen .
2. Vi använder omvänd logitfunktion snäll för att bestämma sannolikheten för att ett objekt tillhör en klass .
3. Vi betraktar vår träningsuppsättning som en implementering av en generaliserad Bernoulli planerar, det vill säga för varje objekt genereras en slumpvariabel, som med sannolikhet (sin egen för varje objekt) tar värdet 1 och med sannolikhet - 0.
4. Vi vet vad vi behöver för att maximera prov sannolikhetsfunktion med hänsyn till de accepterade faktorerna så att det tillgängliga urvalet blir det mest troliga. Med andra ord måste vi välja parametrar där provet kommer att vara mest troligt. I vårt fall är den valda parametern sannolikheten för återbetalning av lån , vilket i sin tur beror på okända koefficienter . Så vi måste hitta en sådan vektor av vikter , där sannolikheten för provet kommer att vara maximal.
5. Vi vet vad vi ska maximera exempel på sannolikhetsfunktioner du kan använda metoden för maximal sannolikhet. Och vi kan alla knepiga knep för att arbeta med den här metoden.
Så här visar det sig vara ett drag i flera steg :)
Kom nu ihåg att vi i början av artikeln ville härleda två typer av förlustfunktioner Logistisk förlust beroende på hur objektklasser är designade. Det hände så att i klassificeringsproblem med två klasser betecknas klasserna som и eller . Beroende på notationen kommer utgången att ha en motsvarande förlustfunktion.
Fall 1. Klassificering av föremål i и
Tidigare, vid bestämning av sannolikheten för ett urval, där sannolikheten för skuldåterbetalning från låntagaren beräknades baserat på faktorer och givna koefficienter , tillämpade vi formeln:
Faktiskt är meningen logistiska svarsfunktioner för en given vektor av vikter
Då finns det inget som hindrar oss från att skriva sample likelihood-funktionen enligt följande:
Det händer att det ibland är svårt för vissa nybörjare analytiker att omedelbart förstå hur denna funktion fungerar. Låt oss titta på fyra korta exempel som kommer att reda ut allt:
1. Om (dvs. enligt träningsexemplet tillhör objektet klass +1) och vår algoritm bestämmer sannolikheten för att klassificera ett objekt till en klass lika med 0.9, då kommer denna del av provsannolikheten att beräknas enligt följande:
2. Om Och , då blir beräkningen så här:
3. Om Och , då blir beräkningen så här:
4. Om Och , då blir beräkningen så här:
Det är uppenbart att sannolikhetsfunktionen kommer att maximeras i fall 1 och 3 eller i det allmänna fallet - med korrekt gissade värden på sannolikheterna för att tilldela ett objekt till en klass .
På grund av det faktum att när man bestämmer sannolikheten för att tilldela ett objekt till en klass Vi känner bara inte till koefficienterna , då ska vi leta efter dem. Som nämnts ovan är detta ett optimeringsproblem där vi först måste hitta derivatan av sannolikhetsfunktionen med avseende på vektorn av vikter . Men först är det vettigt att förenkla uppgiften för oss själva: vi kommer att leta efter derivatan av logaritmen sannolikhetsfunktioner.
Varför efter logaritm, in logistiska felfunktioner, bytte vi skylten från på . Allt är enkelt, eftersom det i problem med att bedöma kvaliteten på en modell är vanligt att minimera värdet av en funktion, multiplicerade vi den högra sidan av uttrycket med och därför, istället för att maximera, minimerar vi nu funktionen.
Faktiskt, just nu, framför dina ögon, härleddes förlustfunktionen mödosamt - Logistisk förlust för ett träningsset med två klasser: и .
Nu, för att hitta koefficienterna, behöver vi bara hitta derivatan logistiska felfunktioner och sedan, med hjälp av numeriska optimeringsmetoder, såsom gradientnedstigning eller stokastisk gradientnedstigning, välj de mest optimala koefficienterna . Men med tanke på artikelns avsevärda volym föreslås det att du gör differentieringen på egen hand, eller så kanske detta blir ett ämne för nästa artikel med mycket aritmetik utan så detaljerade exempel.
Fall 2. Klassificering av föremål i и
Tillvägagångssättet här kommer att vara detsamma som med klasser и , men själva vägen till utgången av förlustfunktionen Logistisk förlust, kommer att vara mer utsmyckad. Låt oss börja. För sannolikhetsfunktionen kommer vi att använda operatören "om då...". Det vill säga om Det e objektet tillhör klassen , för att beräkna sannolikheten för urvalet använder vi sannolikheten , om objektet tillhör klassen , sedan ersätter vi med sannolikheten . Så här ser sannolikhetsfunktionen ut:
Låt oss beskriva på våra fingrar hur det fungerar. Låt oss överväga 4 fall:
1. Om и , då kommer provtagningssannolikheten att "gå"
2. Om и , då kommer provtagningssannolikheten att "gå"
3. Om и , då kommer provtagningssannolikheten att "gå"
4. Om и , då kommer provtagningssannolikheten att "gå"
Det är uppenbart att i fall 1 och 3, när sannolikheterna bestämts korrekt av algoritmen, sannolikhetsfunktion kommer att maximeras, det vill säga det är precis vad vi ville få. Detta tillvägagångssätt är dock ganska besvärligt och härnäst kommer vi att överväga en mer kompakt notation. Men först, låt oss logaritma sannolikhetsfunktionen med en förändring av tecken, eftersom vi nu kommer att minimera den.
Låt oss ersätta istället uttryck :
Låt oss förenkla den rätta termen under logaritmen med enkla aritmetiska tekniker och få:
Nu är det dags att göra sig av med operatören "om då...". Observera att när ett objekt tillhör klassen , sedan i uttrycket under logaritmen, i nämnaren, höjt till makten , om objektet tillhör klassen , då höjs $e$ till makten . Därför kan notationen för graden förenklas genom att kombinera båda fallen till ett: . Sedan logistisk felfunktion kommer att ha formen:
I enlighet med logaritmreglerna vänder vi bråket och sätter ut tecknet "" (minus) för logaritmen får vi:
Här är förlustfunktionen logistisk förlust, som används i träningsuppsättningen med objekt som tilldelats klasser: и .
Nåväl, vid det här laget tar jag ledigt och vi avslutar artikeln.
Hjälpmaterial
1. Litteratur
1) Tillämpad regressionsanalys / N. Draper, G. Smith - 2nd ed. – M.: Finans och statistik, 1986 (översättning från engelska)
2) Sannolikhetsteori och matematisk statistik / V.E. Gmurman - 9:e uppl. - M.: Högre skola, 2003
3) Sannolikhetsteori / N.I. Chernova - Novosibirsk: Novosibirsk State University, 2007
4) Affärsanalys: från data till kunskap / Paklin N. B., Oreshkov V. I. - 2nd ed. — St. Petersburg: Peter, 2013
5) Data Science Datavetenskap från grunden / Joel Gras - St. Petersburg: BHV Petersburg, 2017
6) Praktisk statistik för datavetenskapsspecialister / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Föreläsningar, kurser (video)
1)
2)
3)
4)
5)
3. Internetkällor
1)
2)
4)
7)
Källa: will.com