In dit artikel zullen we de theoretische berekeningen van de transformatie analyseren lineaire regressiefuncties в inverse logit-transformatiefunctie (ook wel logistieke responsfunctie genoemd). Gebruik vervolgens het arsenaal maximale waarschijnlijkheidsmethodeIn overeenstemming met het logistische regressiemodel leiden we de verliesfunctie af Logistiek verlies, of met andere woorden, we zullen een functie definiëren waarmee de parameters van de gewichtsvector worden geselecteerd in het logistische regressiemodel .
Artikeloverzicht:
- Laten we de lineaire relatie tussen twee variabelen herhalen
- Laten we de noodzaak van transformatie identificeren lineaire regressiefuncties в logistieke responsfunctie
- Laten we de transformaties en uitvoer uitvoeren logistieke responsfunctie
- Laten we proberen te begrijpen waarom de kleinste kwadratenmethode slecht is bij het selecteren van parameters functies Logistiek verlies
- We gebruiken maximale waarschijnlijkheidsmethode voor het bepalen van parameterselectiefuncties :
5.1. Geval 1: functie Logistiek verlies voor objecten met klasseaanduidingen 0 и 1:
5.2. Geval 2: functie Logistiek verlies voor objecten met klasseaanduidingen -1 и +1:
Het artikel staat vol met eenvoudige voorbeelden waarin alle berekeningen gemakkelijk mondeling of op papier kunnen worden gemaakt; in sommige gevallen kan een rekenmachine nodig zijn. Dus maak je klaar :)
Dit artikel is in de eerste plaats bedoeld voor datawetenschappers met een initieel kennisniveau in de basisprincipes van machine learning.
Het artikel bevat ook code voor het tekenen van grafieken en berekeningen. Alle code is geschreven in de taal python 2.7. Laat me van tevoren uitleggen wat de “nieuwigheid” van de gebruikte versie is - dit is een van de voorwaarden voor het volgen van de bekende cursus van Yandex op een even bekend online onderwijsplatform Coursera, en, zoals je zou kunnen aannemen, werd het materiaal op basis van deze cursus voorbereid.
01. Rechtlijnige afhankelijkheid
Het is heel redelijk om de vraag te stellen: wat hebben lineaire afhankelijkheid en logistische regressie ermee te maken?
Het is makkelijk! Logistieke regressie is een van de modellen die tot de lineaire classificator behoren. In eenvoudige woorden: de taak van een lineaire classificator is het voorspellen van doelwaarden uit variabelen (regressors) . Er wordt aangenomen dat de afhankelijkheid tussen de kenmerken en streefwaarden lineair. Vandaar de naam van de classificator: lineair. Heel grof gezegd gaat het logistische regressiemodel uit van de aanname dat er een lineair verband bestaat tussen de kenmerken en streefwaarden . Dit is de verbinding.
Er is het eerste voorbeeld in de studio, en dat gaat, terecht, over de rechtlijnige afhankelijkheid van de grootheden die worden bestudeerd. Tijdens het voorbereiden van het artikel kwam ik een voorbeeld tegen dat al veel mensen op scherp heeft gezet: de afhankelijkheid van stroom en spanning (“Toegepaste regressieanalyse”, N. Draper, G. Smith). Wij zullen het hier ook bekijken.
In overeenstemming met De wet van Ohm:
Waar - huidige sterkte, - Spanning, - weerstand.
Als wij het niet wisten De wet van Ohm, dan zouden we de afhankelijkheid empirisch kunnen vinden door te veranderen en meten , terwijl je steunt vast. Dan zouden we zien dat de afhankelijkheidsgrafiek van geeft een min of meer rechte lijn door de oorsprong. We zeggen ‘min of meer’ omdat, hoewel de relatie feitelijk accuraat is, onze metingen kleine fouten kunnen bevatten en daarom de punten in de grafiek misschien niet precies op de lijn vallen, maar er willekeurig omheen verspreid zijn.
Grafiek 1 “Afhankelijkheid” van »
Diagramtekencode
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. De noodzaak om de lineaire regressievergelijking te transformeren
Laten we naar een ander voorbeeld kijken. Laten we ons voorstellen dat we bij een bank werken en dat het onze taak is om de waarschijnlijkheid te bepalen dat de lener de lening terugbetaalt, afhankelijk van bepaalde factoren. Om de taak te vereenvoudigen, zullen we slechts twee factoren in overweging nemen: het maandsalaris van de lener en het maandelijkse aflossingsbedrag van de lening.
De taak is erg voorwaardelijk, maar met dit voorbeeld kunnen we begrijpen waarom het niet genoeg is om te gebruiken lineaire regressiefuncties, en ontdek ook welke transformaties met de functie moeten worden uitgevoerd.
Laten we terugkeren naar het voorbeeld. Het is duidelijk dat hoe hoger het salaris, hoe meer de lener maandelijks kan besteden om de lening terug te betalen. Tegelijkertijd zal deze relatie voor een bepaalde salarisschaal tamelijk lineair zijn. Laten we bijvoorbeeld een salarisbereik nemen van 60.000 RUR tot 200.000 RUR en aannemen dat in het opgegeven salarisbereik de afhankelijkheid van de hoogte van de maandelijkse betaling en de hoogte van het salaris lineair is. Laten we zeggen dat voor het gespecificeerde loonbereik is gebleken dat de salaris-betalingsverhouding niet onder de 3 kan komen en dat de lener nog steeds 5.000 RUR in reserve moet hebben. En alleen in dit geval gaan we ervan uit dat de lener de lening aan de bank zal terugbetalen. Vervolgens zal de lineaire regressievergelijking de vorm aannemen:
waar , , , - terugbellen -de lener, - betaling van de lening -de lener.
Het vervangen van salaris- en leningbetalingen door vaste parameters in de vergelijking U kunt zelf beslissen of u een lening verstrekt of weigert.
Vooruitkijkend merken we dat, met de gegeven parameters lineaire regressiefunctie, gebruikt in logistieke responsfuncties zal grote waarden opleveren die berekeningen om de waarschijnlijkheid van terugbetaling van leningen te bepalen, zullen bemoeilijken. Daarom wordt voorgesteld om onze coëfficiënten, laten we zeggen, met 25.000 keer te verlagen. Deze transformatie van de coëfficiënten zal de beslissing om een lening uit te geven niet veranderen. Laten we dit punt voor de toekomst onthouden, maar laten we nu, om het nog duidelijker te maken waar we het over hebben, eens kijken naar de situatie met drie potentiële kredietnemers.
Tabel 1 “Potentiële kredietnemers”
Code voor het genereren van de tabel
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']]
In overeenstemming met de gegevens in de tabel wil Vasya, met een salaris van 120.000 RUR, een lening ontvangen zodat hij deze maandelijks kan terugbetalen tegen 3.000 RUR. We hebben vastgesteld dat om de lening goed te keuren, het salaris van Vasya hoger moet zijn dan drie keer het bedrag van de betaling, en dat er nog 5.000 RUR over moet zijn. Vasya voldoet aan deze eis: . Er blijft zelfs 106.000 RUR over. Ondanks het feit dat bij het berekenen we hebben de kansen verkleind 25.000 keer was het resultaat hetzelfde: de lening kan worden goedgekeurd. Fedya krijgt ook een lening, maar Lesha zal, ondanks het feit dat hij het meeste ontvangt, zijn eetlust moeten beteugelen.
Laten we voor dit geval een grafiek tekenen.
Grafiek 2 “Classificatie van kredietnemers”
Code voor het tekenen van de grafiek
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()
Dus onze rechte lijn, gebouwd in overeenstemming met de functie , scheidt ‘slechte’ leners van ‘goede’ leners. De leners wier wensen niet samenvallen met hun mogelijkheden bevinden zich boven de lijn (Lesha), terwijl degenen die, volgens de parameters van ons model, in staat zijn de lening terug te betalen, zich onder de lijn bevinden (Vasya en Fedya). Met andere woorden, we kunnen dit zeggen: onze directe lijn verdeelt leners in twee klassen. Laten we ze als volgt aanduiden: naar klasse We classificeren de leners van wie de kans het grootst is dat ze de lening zullen terugbetalen of We nemen de kredietnemers mee die de lening waarschijnlijk niet kunnen terugbetalen.
Laten we de conclusies uit dit eenvoudige voorbeeld samenvatten. Laten we een punt nemen en het vervangen van de coördinaten van het punt in de overeenkomstige vergelijking van de lijn overweeg dan drie opties:
- Als het punt onder de lijn ligt, wijzen we het toe aan de klas en vervolgens de waarde van de functie zal positief zijn vanaf naar . Dit betekent dat we ervan uit kunnen gaan dat de kans op terugbetaling van de lening binnen de perken ligt . Hoe groter de functiewaarde, hoe groter de waarschijnlijkheid.
- Als een punt boven een lijn ligt, wijzen we het toe aan de klas of , dan zal de waarde van de functie negatief zijn naar . Dan gaan we ervan uit dat de kans op schuldaflossing binnen is en hoe groter de absolute waarde van de functie, hoe groter ons vertrouwen.
- Het punt ligt op een rechte lijn, op de grens tussen twee klassen. In dit geval de waarde van de functie zal gelijk zijn en de kans op terugbetaling van de lening is gelijk aan .
Laten we ons nu voorstellen dat we niet twee factoren hebben, maar tientallen, en niet drie, maar duizenden leners. Dan zullen we in plaats van een rechte lijn hebben m-dimensionaal vlak en coëfficiënten we worden niet uit het niets gehaald, maar afgeleid volgens alle regels, en op basis van verzamelde gegevens over kredietnemers die de lening wel of niet hebben terugbetaald. En inderdaad, merk op dat we nu leners selecteren op basis van reeds bekende coëfficiënten . In feite is de taak van het logistische regressiemodel precies het bepalen van de parameters , waarbij de waarde van de verliesfunctie Logistiek verlies zal naar het minimum neigen. Maar over hoe de vector wordt berekend , we zullen meer te weten komen in het 5e deel van het artikel. Intussen keren we terug naar het beloofde land: naar onze bankier en zijn drie klanten.
Dankzij de functie wij weten wie een lening kan krijgen en wie geweigerd moet worden. Maar je kunt met dergelijke informatie niet naar de directeur gaan, omdat ze van ons de waarschijnlijkheid van terugbetaling van de lening door elke lener wilden krijgen. Wat moeten we doen? Het antwoord is simpel: we moeten de functie op de een of andere manier transformeren , waarvan de waarden binnen het bereik liggen naar een functie waarvan de waarden binnen het bereik liggen . En zo'n functie bestaat, heet het logistieke responsfunctie of inverse-logit-transformatie. Ontmoeten:
Laten we stap voor stap zien hoe het werkt logistieke responsfunctie. Merk op dat we in de tegenovergestelde richting lopen, d.w.z. we gaan ervan uit dat we de waarschijnlijkheidswaarde kennen, die in het bereik ligt van naar en dan zullen we deze waarde "ontspannen" tot het hele bereik van getallen naar .
03. We leiden de logistieke responsfunctie af
Stap 1. Converteer de waarschijnlijkheidswaarden naar een bereik
Tijdens de transformatie van de functie в logistieke responsfunctie We laten onze kredietanalist met rust en gaan in plaats daarvan langs de bookmakers. Nee, natuurlijk zullen we geen weddenschappen plaatsen, het enige dat ons interesseert is de betekenis van de uitdrukking, de kans is bijvoorbeeld 4 op 1. De kansen, bekend bij alle gokkers, zijn de verhouding tussen “successen” en “ mislukkingen”. In waarschijnlijkheidstermen zijn odds de waarschijnlijkheid dat een gebeurtenis plaatsvindt, gedeeld door de waarschijnlijkheid dat de gebeurtenis niet plaatsvindt. Laten we de formule opschrijven voor de kans dat een gebeurtenis plaatsvindt :
Waar - waarschijnlijkheid dat een gebeurtenis plaatsvindt, — waarschijnlijkheid dat een gebeurtenis NIET plaatsvindt
Als bijvoorbeeld de kans dat een jong, sterk en speels paard met de bijnaam ‘Veterok’ tijdens een race een oude, slappe oude vrouw genaamd ‘Matilda’ zal verslaan, gelijk is aan , dan zijn de kansen op succes voor “Veterok” groot к en omgekeerd, als we de kansen kennen, zal het voor ons niet moeilijk zijn om de waarschijnlijkheid te berekenen :
We hebben dus geleerd waarschijnlijkheid te ‘vertalen’ in kansen, waar waarden uit worden gehaald naar . Laten we nog een stap zetten en leren de waarschijnlijkheid te 'vertalen' naar de gehele getallenlijn naar .
Stap 2. Converteer de waarschijnlijkheidswaarden naar een bereik
Deze stap is heel eenvoudig: laten we de logaritme van de kansen naar de basis van het getal van Euler brengen en wij krijgen:
Nu weten we dat als en bereken vervolgens de waarde zal heel eenvoudig zijn en bovendien positief moeten zijn: . Dit is waar.
Laten we uit nieuwsgierigheid eens kijken wat als , dan verwachten we een negatieve waarde . Wij controleren: . Dat is juist.
Nu weten we hoe we de waarschijnlijkheidswaarde moeten omrekenen naar langs de gehele getallenlijn vanaf naar . In de volgende stap doen we het tegenovergestelde.
Voor nu merken we op dat dit in overeenstemming is met de regels van de logaritme, waarbij we de waarde van de functie kennen , kun je de kansen berekenen:
Deze methode om de odds te bepalen zal voor ons nuttig zijn bij de volgende stap.
Stap 3. Laten we een formule afleiden om te bepalen
Dus we leerden, wetende , zoek functiewaarden . In feite hebben we echter precies het tegenovergestelde nodig: de waarde kennen vind . Om dit te doen, gaan we naar een concept als de inverse odds-functie, volgens welke:
In het artikel gaan we bovenstaande formule niet afleiden, maar controleren we deze aan de hand van de getallen uit bovenstaand voorbeeld. We weten dat met een kans van 4 op 1 (), is de kans dat de gebeurtenis plaatsvindt 0.8 (). Laten we een vervanging maken: . Dit komt overeen met onze eerder uitgevoerde berekeningen. Laten we verder gaan.
In de laatste stap hebben we dat afgeleid , wat betekent dat u een vervanging kunt uitvoeren in de inverse odds-functie. We krijgen:
Deel zowel de teller als de noemer door , Dan:
Voor het geval dat, om er zeker van te zijn dat we nergens een fout hebben gemaakt, doen we nog een kleine controle. In stap 2, wij voor bepaalde dat . Vervang vervolgens de waarde in de logistieke responsfunctie, verwachten we te krijgen . We vervangen en krijgen:
Gefeliciteerd, beste lezer, we hebben zojuist de logistieke responsfunctie afgeleid en getest. Laten we naar de grafiek van de functie kijken.
Grafiek 3 “Logistieke responsfunctie”
Code voor het tekenen van de grafiek
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()
In de literatuur kun je de naam van deze functie ook vinden als sigmoïde functie. De grafiek laat duidelijk zien dat de belangrijkste verandering in de waarschijnlijkheid dat een object tot een klasse behoort, binnen een relatief klein bereik plaatsvindt , ergens vandaan naar .
Ik stel voor terug te gaan naar onze kredietanalist en hem te helpen de waarschijnlijkheid van terugbetaling van de lening te berekenen, anders loopt hij het risico zonder bonus te zitten :)
Tabel 2 “Potentiële kredietnemers”
Code voor het genereren van de tabel
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']]
Daarom hebben we de waarschijnlijkheid van terugbetaling van de lening bepaald. Over het algemeen lijkt dit waar te zijn.
De kans dat Vasya, met een salaris van 120.000 RUR, elke maand 3.000 RUR aan de bank kan geven, is bijna 100%. Overigens moeten we begrijpen dat een bank een lening aan Lesha kan verstrekken als het beleid van de bank bijvoorbeeld voorziet in het verstrekken van leningen aan klanten met een waarschijnlijkheid van terugbetaling van de lening van meer dan bijvoorbeeld 0.3. Alleen zal de bank in dit geval een grotere reserve aanleggen voor mogelijke verliezen.
Er moet ook worden opgemerkt dat de salaris-betalingsverhouding van minimaal 3 en met een marge van 5.000 RUR van het plafond werd gehaald. Daarom konden we de vector van gewichten niet in zijn oorspronkelijke vorm gebruiken . We moesten de coëfficiënten aanzienlijk verlagen, en in dit geval deelden we elke coëfficiënt door 25.000, dat wil zeggen dat we in wezen het resultaat hebben aangepast. Maar dit werd specifiek gedaan om het begrip van het materiaal in de beginfase te vereenvoudigen. In het leven zullen we geen coëfficiënten hoeven uit te vinden en aan te passen, maar ze moeten vinden. In de volgende secties van het artikel zullen we de vergelijkingen afleiden waarmee de parameters worden geselecteerd .
04. Kleinstekwadratenmethode voor het bepalen van de vector van gewichten in de logistieke responsfunctie
We kennen deze methode voor het selecteren van een vector van gewichten al hoe kleinste kwadratenmethode (LSM) en waarom gebruiken we het eigenlijk niet bij binaire classificatieproblemen? Niets belet u inderdaad om te gebruiken MNC, geeft alleen deze methode bij classificatieproblemen resultaten die minder nauwkeurig zijn dan Logistiek verlies. Hiervoor bestaat een theoretische basis. Laten we eerst eens naar een eenvoudig voorbeeld kijken.
Laten we aannemen dat onze modellen (met behulp van MSE и Logistiek verlies) zijn al begonnen met het selecteren van de gewichtsvector en we stopten de berekening op een gegeven moment. Het maakt niet uit of in het midden, aan het einde of aan het begin, het belangrijkste is dat we al enkele waarden hebben van de vector van gewichten en laten we aannemen dat in deze stap de vector van gewichten voor beide modellen zijn er geen verschillen. Neem vervolgens de resulterende gewichten en vervang ze door deze logistieke responsfunctie () voor een object dat tot de klasse behoort . We onderzoeken twee gevallen waarin, in overeenstemming met de geselecteerde gewichtsvector, ons model zich zeer vergist en omgekeerd: het model heeft er alle vertrouwen in dat het object tot de klasse behoort . Laten we eens kijken welke boetes er worden opgelegd bij gebruik MNC и Logistiek verlies.
Code om boetes te berekenen, afhankelijk van de gebruikte verliesfunctie
# класс объекта
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
Een gevalletje blunder — het model wijst een object toe aan een klasse met een waarschijnlijkheid van 0,01
Straf op gebruik MNC zal zijn:
Straf op gebruik Logistiek verlies zal zijn:
Een geval van sterk vertrouwen — het model wijst een object toe aan een klasse met een waarschijnlijkheid van 0,99
Straf op gebruik MNC zal zijn:
Straf op gebruik Logistiek verlies zal zijn:
Dit voorbeeld illustreert goed dat bij een grove fout de verliesfunctie optreedt Log verlies bestraft het model aanzienlijk meer dan MSE. Laten we nu begrijpen wat de theoretische achtergrond is van het gebruik van de verliesfunctie Log verlies bij classificatieproblemen.
05. Methode voor maximale waarschijnlijkheid en logistische regressie
Zoals in het begin beloofd, staat het artikel vol met eenvoudige voorbeelden. In de studio is er nog een voorbeeld en oude gasten - bankleners: Vasya, Fedya en Lesha.
Voor het geval dat, voordat ik het voorbeeld uitwerk, wil ik u eraan herinneren dat we in het leven te maken hebben met een trainingsvoorbeeld van duizenden of miljoenen objecten met tientallen of honderden kenmerken. Hier zijn de cijfers echter zo genomen dat ze gemakkelijk in het hoofd van een beginnende datawetenschapper passen.
Laten we terugkeren naar het voorbeeld. Laten we ons voorstellen dat de directeur van de bank besloot een lening te verstrekken aan iedereen in nood, ondanks het feit dat het algoritme hem vertelde deze niet aan Lesha te verstrekken. En nu is er genoeg tijd verstreken en weten we welke van de drie helden de lening heeft terugbetaald en welke niet. Wat te verwachten was: Vasya en Fedya betaalden de lening terug, maar Lesha niet. Laten we ons nu voorstellen dat dit resultaat een nieuw trainingsvoorbeeld voor ons zal zijn en tegelijkertijd is het alsof alle gegevens over de factoren die van invloed zijn op de waarschijnlijkheid van terugbetaling van de lening (het salaris van de lener, de hoogte van de maandelijkse betaling) zijn verdwenen. Dan kunnen we intuïtief aannemen dat elke derde lener de lening niet aan de bank terugbetaalt, of met andere woorden: de waarschijnlijkheid dat de volgende lener de lening terugbetaalt. . Deze intuïtieve veronderstelling heeft theoretische bevestiging en is hierop gebaseerd maximale waarschijnlijkheidsmethode, wordt het in de literatuur vaak genoemd principe van maximale waarschijnlijkheid.
Laten we eerst kennis maken met het conceptuele apparaat.
Waarschijnlijkheid van de steekproef is de waarschijnlijkheid om precies zo'n monster te verkrijgen, om precies zulke waarnemingen/resultaten te verkrijgen, d.w.z. het product van de kansen om elk van de steekproefresultaten te verkrijgen (bijvoorbeeld of de lening van Vasya, Fedya en Lesha wel of niet tegelijkertijd werd terugbetaald).
Waarschijnlijkheidsfunctie relateert de waarschijnlijkheid van een steekproef aan de waarden van de distributieparameters.
In ons geval is de trainingssteekproef een gegeneraliseerd Bernoulli-schema, waarin de willekeurige variabele slechts twee waarden aanneemt: of . Daarom kan de steekproefwaarschijnlijkheid worden geschreven als een waarschijnlijkheidsfunctie van de parameter следующим обрахом:
Bovenstaande vermelding kan als volgt worden geïnterpreteerd. De gezamenlijke kans dat Vasya en Fedya de lening zullen terugbetalen is gelijk aan , is de kans dat Lesha de lening NIET terugbetaalt gelijk aan (aangezien het NIET de terugbetaling van de lening was), is de gezamenlijke waarschijnlijkheid van alle drie de gebeurtenissen dus gelijk .
Methode voor maximale waarschijnlijkheid is een methode voor het schatten van een onbekende parameter door te maximaliseren waarschijnlijkheidsfuncties. In ons geval moeten we een dergelijke waarde vinden , waarbij bereikt zijn maximum.
Waar komt het eigenlijke idee vandaan: zoeken naar de waarde van een onbekende parameter waarbij de waarschijnlijkheidsfunctie een maximum bereikt? De oorsprong van het idee komt voort uit het idee dat een steekproef de enige bron van kennis is die voor ons beschikbaar is over de populatie. Alles wat we weten over de populatie is vertegenwoordigd in de steekproef. Daarom kunnen we alleen maar zeggen dat een steekproef de meest nauwkeurige weerspiegeling is van de populatie die voor ons beschikbaar is. Daarom moeten we een parameter vinden waarbij het beschikbare monster het meest waarschijnlijk wordt.
Het is duidelijk dat we te maken hebben met een optimalisatieprobleem waarbij we het uiterste punt van een functie moeten vinden. Om het uiterste punt te vinden, is het noodzakelijk om de voorwaarde van de eerste orde in overweging te nemen, dat wil zeggen de afgeleide van de functie gelijk te stellen aan nul en de vergelijking op te lossen met betrekking tot de gewenste parameter. Het zoeken naar de afgeleide van een product van een groot aantal factoren kan echter een langdurige taak zijn; om dit te voorkomen is er een speciale techniek: overschakelen naar de logaritme waarschijnlijkheidsfuncties. Waarom is zo’n transitie mogelijk? Laten we er op letten dat we niet op zoek zijn naar het uiterste van de functie zelfen het uiterste punt, dat wil zeggen de waarde van de onbekende parameter , waarbij bereikt zijn maximum. Wanneer u naar een logaritme gaat, verandert het uiterste punt niet (hoewel het uiterste zelf wel zal verschillen), aangezien de logaritme een monotone functie is.
Laten we, in overeenstemming met het bovenstaande, ons voorbeeld blijven ontwikkelen met leningen van Vasya, Fedya en Lesha. Laten we eerst verder gaan logaritme van de waarschijnlijkheidsfunctie:
Nu kunnen we de uitdrukking gemakkelijk differentiëren door :
En ten slotte, overweeg de voorwaarde van de eerste orde: we stellen de afgeleide van de functie gelijk aan nul:
Aldus onze intuïtieve inschatting van de waarschijnlijkheid van terugbetaling van de lening theoretisch gerechtvaardigd was.
Mooi, maar wat moeten we nu met deze informatie? Als we aannemen dat elke derde lener het geld niet terugbetaalt aan de bank, dan zal deze onvermijdelijk failliet gaan. Dat klopt, maar alleen bij het beoordelen van de waarschijnlijkheid van terugbetaling van de lening gelijk aan We hebben geen rekening gehouden met de factoren die van invloed zijn op de terugbetaling van leningen: het salaris van de lener en de hoogte van de maandelijkse betaling. Laten we niet vergeten dat we eerder de waarschijnlijkheid van terugbetaling van de lening door elke klant hebben berekend, rekening houdend met dezelfde factoren. Het is logisch dat we kansen hebben verkregen die verschillen van de constante gelijke .
Laten we de waarschijnlijkheid van steekproeven definiëren:
Code voor het berekenen van steekproefwaarschijnlijkheden
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)
Steekproefwaarschijnlijkheid bij een constante waarde :
Steekproefwaarschijnlijkheid bij het berekenen van de waarschijnlijkheid van terugbetaling van een lening, rekening houdend met factoren :
De waarschijnlijkheid van een steekproef met een op basis van de factoren berekende waarschijnlijkheid bleek groter dan de waarschijnlijkheid met een constante waarschijnlijkheidswaarde. Wat betekent dit? Dit suggereert dat kennis over de factoren het mogelijk maakte om de waarschijnlijkheid van terugbetaling van de lening voor elke klant nauwkeuriger te selecteren. Daarom zou het juister zijn om bij het uitgeven van de volgende lening het model te gebruiken dat aan het einde van sectie 3 van het artikel wordt voorgesteld om de waarschijnlijkheid van schuldaflossing te beoordelen.
Maar dan, als we willen maximaliseren steekproefwaarschijnlijkheidsfunctie, waarom dan niet een algoritme gebruiken dat kansen voor Vasya, Fedya en Lesha oplevert, bijvoorbeeld gelijk aan respectievelijk 0.99, 0.99 en 0.01. Misschien zal een dergelijk algoritme goed presteren op de trainingssteekproef, omdat het de waarschijnlijkheidswaarde van de steekproef dichterbij brengt , maar ten eerste zal een dergelijk algoritme hoogstwaarschijnlijk moeite hebben met het generalisatievermogen, en ten tweede zal dit algoritme zeker niet lineair zijn. En als methoden voor het bestrijden van overtraining (even zwak generalisatievermogen) duidelijk niet zijn opgenomen in het plan van dit artikel, laten we dan het tweede punt in meer detail bespreken. Om dit te doen, beantwoordt u gewoon een eenvoudige vraag. Kan de kans dat Vasya en Fedya de lening terugbetalen hetzelfde zijn, rekening houdend met de ons bekende factoren? Vanuit het oogpunt van gezonde logica natuurlijk niet, dat kan niet. Dus Vasya zal 2.5% van zijn salaris per maand betalen om de lening terug te betalen, en Fedya - bijna 27,8%. Ook in grafiek 2 “Klantclassificatie” zien we dat Vasya veel verder verwijderd is van de scheidingslijn tussen de klassen dan Fedya. En ten slotte weten we dat de functie voor Vasya en Fedya heeft verschillende waarden: 4.24 voor Vasya en 1.0 voor Fedya. Als Fedya bijvoorbeeld een orde van grootte meer zou verdienen of om een kleinere lening zou vragen, dan zouden de kansen op terugbetaling van de lening voor Vasya en Fedya vergelijkbaar zijn. Met andere woorden: lineaire afhankelijkheid kan niet voor de gek worden gehouden. En als we de kansen daadwerkelijk hadden berekend , en ze niet uit de lucht gehaald hebben, we kunnen gerust zeggen dat dit onze waarden zijn ons het beste in staat stellen de waarschijnlijkheid van terugbetaling van de lening door elke lener in te schatten, maar omdat we ermee instemden aan te nemen dat de bepaling van de coëfficiënten is uitgevoerd volgens alle regels, dan gaan we ervan uit dat - onze coëfficiënten ons in staat stellen een betere schatting van de waarschijnlijkheid te geven :)
Wij dwalen echter af. In deze sectie moeten we begrijpen hoe de vector van gewichten wordt bepaald , wat nodig is om de waarschijnlijkheid van terugbetaling van de lening door elke kredietnemer te beoordelen.
Laten we het kort samenvatten met welk arsenaal we op zoek gaan naar kansen :
1. We gaan ervan uit dat de relatie tussen de doelvariabele (voorspellingswaarde) en de factor die het resultaat beïnvloedt lineair is. Om deze reden wordt het gebruikt lineaire regressiefunctie vriendelijk , waarvan de lijn objecten (clients) in klassen verdeelt и of (klanten die de lening kunnen terugbetalen en klanten die dat niet kunnen). In ons geval heeft de vergelijking de vorm .
2. Wij gebruiken inverse logit-functie vriendelijk om de waarschijnlijkheid te bepalen dat een object tot een klasse behoort .
3. Wij beschouwen onze trainingsset als een implementatie van een algemene Bernoulli-plannen, dat wil zeggen dat voor elk object een willekeurige variabele wordt gegenereerd, die met waarschijnlijkheid is (zijn eigen voor elk object) heeft de waarde 1 en met waarschijnlijkheid - 0.
4. We weten wat we moeten maximaliseren steekproefwaarschijnlijkheidsfunctie rekening houdend met de geaccepteerde factoren, zodat het beschikbare monster het meest plausibel wordt. Met andere woorden, we moeten parameters selecteren waarbij het monster het meest plausibel zal zijn. In ons geval is de geselecteerde parameter de waarschijnlijkheid van terugbetaling van de lening , die op zijn beurt afhangt van onbekende coëfficiënten . We moeten dus zo'n vector van gewichten vinden , waarbij de waarschijnlijkheid van de steekproef maximaal zal zijn.
5. We weten wat we moeten maximaliseren steekproefwaarschijnlijkheidsfuncties kan gebruiken maximale waarschijnlijkheidsmethode. En we kennen alle lastige trucjes om met deze methode te werken.
Zo blijkt het een stapsgewijze zet te zijn :)
Bedenk nu dat we helemaal aan het begin van het artikel twee soorten verliesfuncties wilden afleiden Logistiek verlies afhankelijk van hoe objectklassen worden aangewezen. Het gebeurde zo dat bij classificatieproblemen met twee klassen de klassen worden aangeduid als и of . Afhankelijk van de notatie heeft de uitvoer een overeenkomstige verliesfunctie.
Geval 1. Classificatie van objecten in и
Eerder bij het bepalen van de waarschijnlijkheid van een steekproef, waarbij de waarschijnlijkheid van schuldaflossing door de kredietnemer werd berekend op basis van factoren en gegeven coëfficiënten , hebben we de formule toegepast:
Werkelijk is de betekenis logistieke responsfuncties voor een gegeven vector van gewichten
Niets weerhoudt ons er dan van om de steekproefwaarschijnlijkheidsfunctie als volgt te schrijven:
Het komt voor dat het voor sommige beginnende analisten soms moeilijk is om meteen te begrijpen hoe deze functie werkt. Laten we eens kijken naar vier korte voorbeelden die de zaken zullen verduidelijken:
1. als (dat wil zeggen, volgens het trainingsvoorbeeld behoort het object tot klasse +1) en ons algoritme bepaalt de waarschijnlijkheid dat een object in een klasse wordt geclassificeerd gelijk is aan 0.9, dan wordt dit deel van de steekproefkans als volgt berekend:
2. als En , dan ziet de berekening er als volgt uit:
3. als En , dan ziet de berekening er als volgt uit:
4. als En , dan ziet de berekening er als volgt uit:
Het is duidelijk dat de waarschijnlijkheidsfunctie zal worden gemaximaliseerd in de gevallen 1 en 3 of in het algemene geval - met correct geraden waarden van de kansen om een object aan een klasse toe te wijzen .
Vanwege het feit dat bij het bepalen van de waarschijnlijkheid van het toewijzen van een object aan een klasse We kennen alleen de coëfficiënten niet , dan gaan we ze zoeken. Zoals hierboven vermeld, is dit een optimalisatieprobleem waarin we eerst de afgeleide van de waarschijnlijkheidsfunctie moeten vinden met betrekking tot de vector van gewichten . Het is echter eerst zinvol om de taak voor onszelf te vereenvoudigen: we gaan op zoek naar de afgeleide van de logaritme waarschijnlijkheidsfuncties.
Waarom na logaritme, in logistieke foutfuncties, we hebben het bord veranderd van op . Alles is eenvoudig, omdat het bij problemen bij het beoordelen van de kwaliteit van een model gebruikelijk is om de waarde van een functie te minimaliseren. We hebben de rechterkant van de uitdrukking vermenigvuldigd met en dienovereenkomstig minimaliseren we nu de functie in plaats van te maximaliseren.
Eigenlijk werd op dit moment, voor uw ogen, de verliesfunctie nauwgezet afgeleid - Logistiek verlies voor een trainingsset met twee klassen: и .
Om de coëfficiënten te vinden, hoeven we alleen maar de afgeleide te vinden logistieke foutfuncties en vervolgens, met behulp van numerieke optimalisatiemethoden, zoals gradiëntdaling of stochastische gradiëntdaling, de meest optimale coëfficiënten selecteren . Maar gezien de aanzienlijke omvang van het artikel wordt voorgesteld om de differentiatie zelf uit te voeren, anders wordt dit misschien een onderwerp voor het volgende artikel met veel rekenkunde zonder zulke gedetailleerde voorbeelden.
Geval 2. Classificatie van objecten in и
De aanpak zal hier hetzelfde zijn als bij lessen и , maar het pad zelf naar de uitvoer van de verliesfunctie Logistiek verlies, zal sierlijker zijn. Laten we beginnen. Voor de waarschijnlijkheidsfunctie gebruiken we de operator "als dan...". Dat wil zeggen, als Het e-object behoort tot de klasse Vervolgens gebruiken we de waarschijnlijkheid om de waarschijnlijkheid van de steekproef te berekenen , als het object tot de klasse behoort , dan vervangen we de waarschijnlijkheid . Zo ziet de waarschijnlijkheidsfunctie eruit:
Laten we met onze vingers beschrijven hoe het werkt. Laten we 4 gevallen bekijken:
1. als и , dan zal de steekproefkans “gaan”
2. als и , dan zal de steekproefkans “gaan”
3. als и , dan zal de steekproefkans “gaan”
4. als и , dan zal de steekproefkans “gaan”
Het is duidelijk dat in de gevallen 1 en 3, wanneer de kansen correct werden bepaald door het algoritme, waarschijnlijkheidsfunctie zal worden gemaximaliseerd, dat wil zeggen: dit is precies wat we wilden bereiken. Deze aanpak is echter nogal omslachtig en vervolgens zullen we een compactere notatie overwegen. Maar laten we eerst de waarschijnlijkheidsfunctie logaritme maken met een verandering van teken, aangezien we deze nu zullen minimaliseren.
Laten we in plaats daarvan vervangen uitdrukking :
Laten we de juiste term onder de logaritme vereenvoudigen met behulp van eenvoudige rekenkundige technieken en het volgende krijgen:
Nu is het tijd om van de operator af te komen "als dan...". Merk op dat wanneer een object behoort tot de klasse , dan in de uitdrukking onder de logaritme, in de noemer, tot de macht verheven , als het object tot de klasse behoort , dan wordt $e$ tot de macht verheven . Daarom kan de notatie voor de graad worden vereenvoudigd door beide gevallen in één te combineren: . Dan logistieke foutfunctie zal de vorm aannemen:
In overeenstemming met de logaritmeregels draaien we de breuk om en plaatsen we het teken "" (minus) voor de logaritme krijgen we:
Hier is de verliesfunctie logistiek verlies, die wordt gebruikt in de trainingsset met objecten die aan klassen zijn toegewezen: и .
Welnu, op dit punt neem ik afscheid en sluiten we het artikel af.
Hulpmaterialen
1. Literatuur
1) Toegepaste regressieanalyse / N. Draper, G. Smith - 2e ed. – M.: Financiën en Statistiek, 1986 (vertaling uit het Engels)
2) Kansrekening en wiskundige statistiek / V.E. Gmurman - 9e druk. - M.: Hogere school, 2003
3) Kansrekening / N.I. Tsjernova - Novosibirsk: Staatsuniversiteit van Novosibirsk, 2007
4) Bedrijfsanalyse: van data naar kennis / Paklin N. B., Oreshkov V. I. - 2e ed. — Sint-Petersburg: Peter, 2013
5) Data Science Datawetenschap vanaf het begin / Joel Gras - St. Petersburg: BHV Petersburg, 2017
6) Praktische statistieken voor Data Science-specialisten / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Lezingen, cursussen (video)
1)
2)
3)
4)
5)
3. Internetbronnen
1)
2)
4)
6)