
In questo articolo, analizzeremo le deduzioni teoriche della trasformazione della funzione di regressione lineare in la funzione di trasformazione logit inversa (nota anche come funzione di risposta logistica). Poi, utilizzando l'arsenale del metodo della massima verosimiglianza, conformemente al modello di regressione logistica, deriviamo la funzione di perdita Logistic Loss, in altre parole, definiremo la funzione attraverso la quale nel modello di regressione logistica vengono ottimizzati i parametri del vettore dei pesi
.
Piano dell'articolo:
- Ribadiamo la dipendenza lineare tra due variabili
- Identifichiamo la necessità di trasformare della funzione di regressione lineare
in la funzione di risposta logistica 
- Effettuiamo le trasformazioni e derivate la funzione di risposta logistica
- Cerchiamo di capire perché il metodo dei minimi quadrati sia inadeguato nella stima dei parametri
funzioni Logistic Loss - Usa il metodo della massima verosimiglianza per determinare della funzione di stima dei parametri
:5.1. Caso 1: funzione Logistic Loss per oggetti con designazione di classi 0 e 1:

5.2. Caso 2: funzione Logistic Loss per oggetti con designazione di classi -1 e +1:

L'articolo è ricco di esempi semplici, in cui tutti i calcoli possono essere facilmente effettuati a mente o su carta; in alcuni casi potrebbe essere richiesto un calcolatore. Quindi preparatevi 🙂
Questo articolo è principalmente dedicato a data scientist con una conoscenza rudimentale delle basi del machine learning.
L'articolo presenterà anche codice per la generazione di grafici e calcoli. Tutto il codice è scritto in python 2.7. Spiegherò in anticipo la "novità" della versione utilizzata: questo è uno dei requisiti per seguire il famoso corso di Yandex su una delle più note piattaforme di educazione online Coursera, e, come si può supporre, il materiale è stato preparato ispirandosi a questo corso.
01. Dipendenza lineare
È del tutto naturale porsi la domanda: che cosa c'entrano la dipendenza lineare e la regressione logistica?
È semplice! La regressione logistica è uno dei modelli che appartiene ai classificatori lineari. In parole semplici, il compito di un classificatore lineare è prevedere valori target
a partire da variabili (regressori)
. Si presume che ci sia una dipendenza
tra le caratteristiche
e i valori target
tra le caratteristiche
lineare. Da qui, per l'appunto, il nome del classificatore: lineare. Se dobbiamo generare un'idea molto generale, alla base del modello di regressione logistica c'è l'assunzione dell'esistenza di una dipendenza lineare tra le caratteristiche, così si stabilisce il legame.
Nello studio c'è il primo esempio, e lui, giustamente, riguarda la dipendenza lineare delle grandezze studiate. Durante la preparazione dell'articolo, mi sono imbattuto in un esempio che ha già stancato molti: la dipendenza della corrente elettrica dalla tensione. («Analisi della regressione applicata», N.Draper, G.Smith). Qui lo considereremo anche noi.
In conformità con legge di Ohm:
, dove
— corrente elettrica,
— tensione,
— resistenza.
Se non conoscessimo la legge di Ohm, potremmo trovare la dipendenza empiricamente, variando
e misurando
, mantenendo
costante. Allora vedremmo che il grafico della dipendenza
di
dà una linea più o meno retta che passa per l'origine. Abbiamo detto «più o meno», poiché, sebbene la dipendenza sia effettivamente precisa, le nostre misurazioni potrebbero contenere piccoli errori e quindi i punti sul grafico potrebbero non cadere esattamente sulla linea, ma essere distribuiti attorno ad essa in modo casuale.
Grafico 1 «Dipendenza
di
»

Codice per disegnare il grafico
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 = 'Risultati reali')
plt.xlabel('I', size = 16)
plt.ylabel('U', size = 16)
plt.legend(prop = {'size': 14})
plt.show()02. Necessità di trasformazioni dell'equazione di regressione lineare
Consideriamo un altro esempio. Immaginiamo di lavorare in una banca e di avere il compito di determinare la probabilità di rimborso di un prestito da parte di un debitore in base a determinati fattori. Per semplificare il compito, consideriamo solo due fattori: lo stipendio mensile del debitore e l'importo mensile del pagamento per il rimborso del prestito.
Il problema è molto ipotetico, ma con questo esempio potremo capire perché per risolverlo non è sufficiente applicare della funzione di regressione lineare, e scopriremo quali trasformazioni sono necessarie per la funzione.
Tornando all'esempio. È chiaro che più alta è la retribuzione, maggiore sarà l'importo che il prestatore potrà destinare mensilmente al rimborso del prestito. In questo caso, per un determinato intervallo di retribuzioni questa dipendenza sarà piuttosto lineare. Ad esempio, prendiamo un intervallo di stipendi da 60.000 ₽ a 200.000 ₽ e supponiamo che in tale intervallo di stipendi, la dipendenza dell'importo della rata mensile dall'importo della retribuzione sia lineare. Supponiamo che per l'intervallo degli stipendi indicati sia emerso che il rapporto tra stipendio e pagamento non può scendere sotto 3 e che al prestatore debbano rimanere 5.000 ₽. Solo in tal caso considereremo che il prestatore rimborserà il prestito alla banca. Pertanto, l'equazione della regressione lineare assumerà la forma:

dove
,
,
,
— retribuzione
- del prestatore,
— pagamento del prestito
- del prestatore.
Sostituendo nell'equazione stipendio e pagamento del prestito con parametri fissi
si può prendere una decisione sull'erogazione o sul rifiuto del prestito.
Anticipando, notiamo che, con i parametri dati,
la funzione di regressione lineare, applicata nella funzione di risposta logistica fornirà valori elevati, che complicheranno i calcoli per determinare le probabilità di rimborso del prestito. Pertanto, si propone di ridurre i nostri coefficienti, diciamo, di 25.000 volte. Da questa trasformazione nei coefficienti, la decisione sull'erogazione del prestito non cambierà. Ricordiamoci di questo aspetto per il futuro, e ora, per rendere le cose ancora più chiare, consideriamo la situazione di tre potenziali prestatore.
Tabella 1 "Potenziali prestatore"

Codice per generare la tabella
import pandas as pd
r = 25000.0
w_0 = -5000.0/r
w_1 = 1.0/r
w_2 = -3.0/r
data = {'Il prestatore':np.array(['Vasya', 'Fedya', 'Lesha']),
'Retribuzione':np.array([120000,180000,210000]),
'Pagamento':np.array([3000,50000,70000])}
df = pd.DataFrame(data)
df['f(w,x)'] = w_0 + df['Retribuzione']*w_1 + df['Pagamento']*w_2
decision = []
for i in df['f(w,x)']:
if i > 0:
dec = 'Approvato'
decision.append(dec)
else:
dec = 'Rifiuto'
decision.append(dec)
df['Decisione'] = decision
df[['Il prestatore', 'Retribuzione', 'Pagamento', 'f(w,x)', 'Decisione']]Secondo i dati della tabella, Vasya con uno stipendio di 120.000 ₽ vuole ottenere un prestito tale da rimborsarlo mensilmente con 3.000 ₽. Abbiamo determinato che per approvare il prestito, l'importo dello stipendio di Vasya deve superare di tre volte l'importo del pagamento, e devono rimanere altri 5.000 ₽. Questo requisito è soddisfatto da Vasya:
. Resta anche 106.000R. Nonostante abbiamo ridotto i coefficienti
di 25.000 volte, il risultato ottenuto è lo stesso: il prestito può essere approvato. Anche Fedya otterrà il prestito, mentre Alexey, nonostante guadagni di più, dovrà moderare le proprie aspettative.
Disegniamo un grafico per questo caso.
Grafico 2 «Classificazione dei mutuatari»
Codice per disegnare il grafico

salary = np.arange(60000,240000,20000) payment = (-w_0-w_1*salary)/w_2fig, 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 = 'Decisione - Prestito approvato') plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'], 's', color = 'red', markersize = 12, label = 'Decisione - Rifiuto del prestito') plt.xlabel('Stipendio', size = 16) plt.ylabel('Pagamento', size = 16) plt.legend(prop = {'size': 14}) plt.show()
Quindi, la nostra retta, costruita secondo la funzione, separa i mutuatari “cattivi” da quelli “buoni”. I mutuatari il cui desiderio non corrisponde alle possibilità si trovano sopra la retta (Alexey), mentre quelli che sono in grado, secondo i parametri del nostro modello, di restituire il prestito, si trovano sotto la retta (Vasya e Fedya). Possiamo dire che la nostra retta divide i mutuatari in due classi. Indichiamo la classe
a cui appartengono quei mutuatari che probabilmente restituiranno il prestito, e alla classe
a cui appartengono quei mutuatari che probabilmente non saranno in grado di restituire il prestito.
o
Riassumiamo le conclusioni di questo semplice esempio. Prendiamo un punto
e, sostituendo le coordinate del punto nell'equazione corrispondente della retta
, consideriamo tre varianti:
Se il punto si trova sotto la retta e lo classifichiamo nella classe
- , allora il valore della funzione
sarà positivo da
. Quindi possiamo considerare che la probabilità di estinguere il prestito si trova entro
fino a
. Maggiore è il valore della funzione, maggiore è la probabilità.
Se il punto si trova sopra la retta e lo classifichiamo nella classe - , allora il valore della funzione sarà negativo da
o
. In tal caso considereremo che la probabilità di estinguere il debito si trova entro
fino a
e, quanto maggiore è il valore assoluto della funzione, maggiore è la nostra sicurezza.
Il punto si trova sulla retta, al confine tra due classi. In questo caso, il valore della funzione - sarà uguale a
e la probabilità di estinguere il prestito è pari a
Ora, immaginiamo che non abbiamo due fattori, ma decine, e che i mutuatari non sono tre, ma migliaia. In questo caso, invece della retta avremo
.
Ora, immaginiamo che non abbiamo due fattori, ma decine, e non tre debitori, ma migliaia. Allora, invece di una retta, avremo m-мерная piano e coefficienti
avremo preso non dal nulla, ma calcolati secondo tutte le regole, basandoci sui dati accumulati sui debitori che hanno restituito o meno il prestito. E in effetti, notate bene, stiamo attualmente selezionando i debitori con coefficienti già noti
. In realtà, il compito del modello di regressione logistica è proprio quello di determinare i parametri
, per i quali il valore della funzione di perdita Logistic Loss tenderà a un minimo. Ma di come si calcola il vettore
, scopriremo nel 5° capitolo dell'articolo. Nel frattempo, torniamo sulla terra promessa — al nostro banchiere e ai suoi tre clienti.
Grazie alla funzione
sappiamo a chi possiamo concedere un prestito e a chi dobbiamo negare. Ma con queste informazioni non possiamo andare dal direttore, poiché ci si aspettava di ottenere la probabilità di rimborso del prestito da parte di ciascun debitore. Cosa fare? La risposta è semplice: dobbiamo in qualche modo trasformare la funzione
, i cui valori ricadono nell'intervallo
in una funzione i cui valori ricadranno nell'intervallo
. E tale funzione esiste, viene chiamata funzione di risposta logistica o trasformazione logit inversa. Ecco a voi:

Vediamo passo dopo passo come si ottiene la funzione di risposta logistica. Notiamo che procederemo all'inverso, cioè presumiamo di conoscere il valore della probabilità, che ricade nell'intervallo da
fino a
e poi 'srotoleremo' questo valore su tutta l'area dei numeri da
fino a
.
03. Estraiamo la funzione di risposta logistica
Passo 1. Trasformeremo i valori di probabilità nell'intervallo 
Per il tempo della trasformazione della funzione
in la funzione di risposta logistica
lasceremo in pace il nostro analista di credito e invece passeremo attraverso i bookmaker. No, naturalmente non piazzeremo scommesse, tutto ciò che ci interessa è il significato dell'espressione, ad esempio, una possibilità di 4 a 1. Le quote, familiari a tutti i giocatori che scommettono, sono il rapporto tra 'successi' e 'insuccessi'. Dal punto di vista delle probabilità, le quote sono la probabilità di un evento divisa per la probabilità che l'evento non si verifichi. Scriviamo la formula della probabilità che un evento si verifichi
:

, dove
— probabilità che si verifichi l'evento,
— probabilità che NON si verifichi l'evento
Ad esempio, se la probabilità che un giovane, forte e vivace cavallo soprannominato 'Vento' superi nella corsa una vecchia e decrepita signora di nome 'Matilda' è
, le probabilità di successo di «Veterok» saranno
al
e viceversa, conoscendo le probabilità, non sarà difficile calcolare la probabilità
:

In questo modo, abbiamo imparato a «tradurre» la probabilità in probabilità, che assumono valori da
fino a
. Facciamo un altro passo e impariamo a «tradurre» la probabilità su tutto il numero lineare da
fino a
.
Passo 2. Tradurremo i valori di probabilità in un intervallo 
Questo passo è molto semplice: faremo il logaritmo delle probabilità in base al numero di Eulero
e otterremo:

Ora sappiamo che se
, calcolare il valore
sarà molto semplice e, inoltre, dovrebbe essere positivo:
. È proprio così.
Per pura curiosità, verifichiamo che se
, allora ci aspettiamo di vedere un valore negativo
. Verifichiamo:
. Esatto.
Ora sappiamo come tradurre il valore della probabilità da
fino a
su tutta la linea numerica da
fino a
. Nel passo successivo faremo tutto al contrario.
Nel frattempo, notiamo che secondo le regole di logaritmizzazione, conoscendo il valore della funzione
, si possono calcolare le probabilità:

Questo metodo di determinazione delle probabilità ci sarà utile nel passo successivo.
Passo 3. Deriviamo la formula per determinare 
Dunque, abbiamo imparato che conoscendo
, possiamo trovare i valori della funzione
. Tuttavia, in realtà abbiamo bisogno esattamente del contrario: conoscendo il valore
trovare
. Per fare ciò, ci riferiamo a un concetto come la funzione inversa delle probabilità, secondo cui:

Nell'articolo non deriviamo la formula sopra menzionata, ma verifichiamo con i numeri dell'esempio precedente. Sappiamo che con probabilità pari a 4 a 1 (
), la probabilità che si verifichi l'evento è pari a 0.8 (
). Facciamo la sostituzione:
. Questo corrisponde ai nostri calcoli effettuati in precedenza. Andiamo oltre.
Nel passo precedente abbiamo dedotto che
, il che significa che possiamo fare una sostituzione nella funzione inversa delle probabilità. Otterremo:

Dividiamo sia il numeratore che il denominatore per
, allora:

Per ogni evenienza, per assicurarci di non aver commesso errori, facciamo un'altra piccola verifica. Al passo 2, abbiamo determinato che
. Allora, sostituendo il valore
nella funzione di risposta logistica, ci aspettiamo di ottenere
. Sostituiamo e otteniamo:
Congratulazioni, caro lettore, abbiamo appena derivato e testato la funzione di risposta logistica. Diamo un'occhiata al grafico della funzione. 
Grafico 3 «Funzione di risposta logistica»
Grafico 3 «Funzione di risposta logistica»

salary = np.arange(60000,240000,20000) payment = (-w_0-w_1*salary)/w_2fig, 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 = 'Decisione - Prestito approvato') plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'], 's', color = 'red', markersize = 12, label = 'Decisione - Rifiuto del prestito') plt.xlabel('Stipendio', size = 16) plt.ylabel('Pagamento', size = 16) plt.legend(prop = {'size': 14}) plt.show()
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()Nella letteratura si può anche incontrare il nome di questa funzione come funzione sigmoide. Dal grafico è evidente che la principale variazione della probabilità di appartenenza di un oggetto a una classe avviene su un intervallo relativamente ristretto
, da qualche parte tra
fino a
.
Propongo di tornare al nostro analista creditizio e aiutarlo a calcolare la probabilità di rimborso dei prestiti, altrimenti rischia di rimanere senza premio 🙂
Tabella 2 «Debitori potenziali»

Codice per generare la tabella
proba = []
for i in df['f(w,x)']:
proba.append(round(logit(i),2))
df['Probabilità'] = proba
df[['Il debitore', 'Stipendio', 'Pagamento', 'f(w,x)', 'Decisione', 'Probabilità']]Quindi, abbiamo determinato la probabilità di rimborso del prestito. In generale, sembra che sia vero.
Infatti, la probabilità che Vasya, con uno stipendio di 120.000R, possa restituire mensilmente 3.000R alla banca si avvicina al 100%. A proposito, dobbiamo capire che la banca può concedere un prestito anche a Lesha se nella politica della banca è previsto, ad esempio, di finanziare i clienti con una probabilità di rimborso del prestito superiore a, diciamo, 0.3. In questo caso, la banca semplicemente costituirà un riservo più grande per le potenziali perdite.
Va notato che il rapporto stipendio/pagamento non inferiore a 3 e con un margine di 5.000R è stato scelto arbitrariamente. Pertanto, non potevamo utilizzare il vettore dei pesi nella sua forma iniziale
. Era necessario ridurre significativamente i coefficienti e in tal caso abbiamo diviso ogni coefficiente per 25.000, quindi, in sostanza, abbiamo adattato il risultato. Ma questo è stato fatto appositamente per semplificare la comprensione del materiale nella fase iniziale. Nella vita reale, invece, dovremo non inventare e adattare i coefficienti, ma trovarli. Proprio nei prossimi paragrafi dell'articolo squarceremo le equazioni grazie alle quali vengono selezionati i parametri
.
04. Il metodo dei minimi quadrati nella determinazione del vettore dei pesi
nella funzione di risposta logistica
È già noto un tale metodo di selezione del vettore dei pesi
, come metodo dei minimi quadrati (MNC) e quindi, perché non utilizzarlo nei compiti di classificazione binaria? Infatti, nulla impedisce di utilizzarlo MOLK, solo che questo metodo nelle attività di classificazione produce risultati meno accurati rispetto a Logistic Loss. Questo ha una giustificazione teorica. Iniziamo dando un’occhiata a un semplice esempio.
Supponiamo che i nostri modelli (utilizzando MSE e Logistic Loss) abbiano già iniziato a selezionare il vettore dei pesi
e abbiamo interrotto il calcolo a un certo passo. Non importa se nel mezzo, alla fine o all'inizio, ciò che conta è che abbiamo già dei valori del vettore dei pesi e supponiamo che a questo passo, i vettori dei pesi
per entrambi i modelli non abbiano differenze. Prendiamo quindi i pesi ottenuti e sostituiamoli in la funzione di risposta logistica (
) per un qualche oggetto che appartiene alla classe
. Esaminiamo due casi, quando in base al vettore dei pesi selezionato il nostro modello commette un errore significativo e viceversa: il modello è molto sicuro che l'oggetto appartenga alla classe
. Vediamo quali penalità verranno «assegnate» utilizzando MOLK e Logistic Loss.
Codice per il calcolo delle penalità in base alla funzione di perdita utilizzata
# класс объекта
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_2Caso di errore grave — il modello classifica l'oggetto nella classe
con una probabilità di 0,01
La penalità utilizzando MOLK sarà:

La penalità utilizzando Logistic Loss sarà:

Caso di forte sicurezza — il modello classifica l'oggetto nella classe
con una probabilità di 0,99
La penalità utilizzando MOLK sarà:

La penalità utilizzando Logistic Loss sarà:

Questo esempio illustra bene che in caso di errore grave, la funzione di perdita Log Loss penalizza significativamente di più il modello rispetto a MSE. Ora cerchiamo di capire quali sono le presupposizioni teoriche per l'uso della funzione di perdita Log Loss nelle attività di classificazione.
05. Metodo della massima verosimiglianza e regressione logistica
Come promesso all'inizio, l'articolo è ricco di esempi semplici. Qui abbiamo un altro esempio e i vecchi ospiti — i mutuatari della banca: Vasya, Fedya e Lesha.
Per ogni evenienza, prima di sviluppare l'esempio, ricordo che nella vita reale abbiamo a che fare con un insieme di addestramento composto da migliaia o milioni di oggetti con decine o centinaia di caratteristiche. Tuttavia, qui i numeri sono stati scelti in modo che possano essere facilmente compresi da un principiante nel data science.
Torniamo all'esempio. Immaginiamo che il direttore della banca abbia deciso di concedere prestiti a tutti coloro che ne hanno bisogno, nonostante l'algoritmo suggerisse di non concederlo a Lesha. E così è passato abbastanza tempo ed è stato reso noto chi dei tre eroi ha rimborsato il prestito e chi no. Come ci si aspettava: Vasya e Fedya hanno rimborsato il prestito, mentre Lesha no. Ora immaginiamo che questo risultato diventi per noi un nuovo campione di addestramento e, nel frattempo, sembra che siano scomparsi tutti i dati sui fattori che influenzano la probabilità di restituzione del prestito (stipendio del mutuatario, importo della rata mensile). Quindi, intuitivamente, possiamo supporre che ogni terzo mutuatario non restituisca il prestito alla banca, o in altre parole, che la probabilità che un mutuatario successivo restituisca il prestito
. Questa supposizione intuitiva ha una conferma teorica e si basa su metodo della massima verosimiglianza, spesso nella letteratura viene chiamato principio di massima verosimiglianza.
Iniziamo a familiarizzare con il gergo tecnico.
La verosimiglianza del campione è la probabilità di ottenere proprio quel campione, di ottenere proprio quelle osservazioni / risultati, cioè il prodotto delle probabilità di ottenere ciascuno dei risultati del campione (ad esempio, rimborsato o non rimborsato prestito da Vasya, Fedya e Lesha contemporaneamente).
La funzione di verosimiglianza collega la verosimiglianza del campione con i valori dei parametri di distribuzione.
Nel nostro caso, il campione di addestramento rappresenta uno schema generalizzato di Bernoulli, in cui la variabile casuale può assumere solo due valori:
o
. Di conseguenza, la verosimiglianza del campione può essere scritta come funzione di verosimiglianza del parametro
nel seguente modo:


La registrazione sopra citata può essere interpretata in questo modo. La probabilità congiunta che Vasya e Fedya rimborsino il prestito è pari a
, la probabilità che Lesha NON rimborsi il prestito è pari a
(poiché si è verificato proprio il NON rimborso del prestito), quindi la probabilità congiunta di tutti e tre gli eventi è pari a
.
Il metodo della massima verosimiglianza - è un metodo per stimare un parametro sconosciuto massimizzando della funzione di verosimiglianza. Nel nostro caso, è necessario trovare un valore tale
, per cui
raggiunge un massimo.
Da dove nasce l'idea di cercare il valore di un parametro sconosciuto per il quale la funzione di verosimiglianza raggiunge il massimo? Le radici di quest'idea derivano dalla comprensione che il campione è l'unica fonte di conoscenza disponibile sulla popolazione generale. Tutto ciò che sappiamo sulla popolazione generale è rappresentato nel campione. Pertanto, ciò che possiamo dire è che il campione è la riflessione più accurata della popolazione generale a nostra disposizione. Di conseguenza, dobbiamo trovare un parametro per il quale il campione esistente diventa il più probabile.
Chiaramente, ci troviamo di fronte a un problema di ottimizzazione in cui è necessario trovare un punto di estremo della funzione. Per calcolare il punto di estremo, bisogna considerare la condizione di primo ordine, cioè eguagliare la derivata della funzione a zero e risolvere l'equazione rispetto al parametro ricercato. Tuttavia, cercare la derivata di un prodotto di un numero elevato di fattori può risultare un compito lungo, per evitarlo esiste un metodo speciale: passare al logaritmo. della funzione di verosimiglianza. Perché è possibile questo passaggio? Notiamo che non stiamo cercando l'estremo della funzione
, ma un punto di estremo, ovvero quel valore del parametro sconosciuto
, per cui
raggiunge il massimo. Nel passaggio al logaritmo, il punto di estremo non cambia (anche se l'estremo stesso sarà diverso), poiché il logaritmo è una funzione monotona.
Dunque, in conformità con quanto detto, continuiamo a sviluppare il nostro esempio con i prestiti di Vasya, Fedya e Lesha. Per iniziare, passiamo al logaritmo della funzione di verosimiglianza.:

Ora possiamo facilmente derivare l'espressione rispetto a
:

E infine, considerando la condizione di primo ordine, eguagliamo la derivata della funzione a zero:

Pertanto, la nostra stima intuitiva della probabilità di rimborso del prestito
è stata teoricamente giustificata.
Ottimo, ma cosa dobbiamo fare ora con tali informazioni? Se consideriamo che ogni terzo prestatore non restituirà i soldi alla banca, quest'ultima inevitabilmente andrà in bancarotta. Così va, ma semplicemente valutando la probabilità di rimborso del prestito come pari a
non abbiamo considerato i fattori che influenzano il rimborso del prestito: lo stipendio del mutuatario e l'importo della rata mensile. Ricordiamo che in precedenza abbiamo calcolato la probabilità di rimborso del prestito per ogni cliente considerando questi stessi fattori. È logico che anche le probabilità siano diverse dalla costante pari a
.
Definiamo la verosimiglianza dei campioni:
Codice per il calcolo delle verosimiglianze dei campioni
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 'Verosimiglianza del campione per un valore costante di p=2/3:', round(likelihood(y,p_const),3)
print '****************************************************************************************************'
print 'Verosimiglianza del campione per il valore di p calcolato:', round(likelihood(y,p_log_response),3)Verosimiglianza del campione per un valore costante
:

Verosimiglianza del campione nel calcolo della probabilità di rimborso del prestito tenendo conto dei fattori
:


La verosimiglianza del campione con la probabilità calcolata in base ai fattori è risultata superiore a quella della verosimiglianza con un valore costante di probabilità. Cosa significa questo? Questo significa che la conoscenza dei fattori ha permesso di calcolare con maggiore precisione la probabilità di rimborso del prestito per ciascun cliente. Pertanto, al momento di erogare un nuovo prestito, sarà più corretto utilizzare il modello di valutazione della probabilità di rimborso del debito proposto alla fine del terzo capitolo dell'articolo.
Ma allora, se dobbiamo massimizzare la funzione di verosimiglianza del campione, perché non usare qualche algoritmo che fornisca probabilità per Vasya, Fedya e Lesha, ad esempio, pari a 0,99, 0,99 e 0,01 rispettivamente. Potrebbe essere che tale algoritmo si comporti bene sul campione di addestramento, poiché avvicinerebbe il valore della verosimiglianza del campione a
, ma, in primo luogo, un algoritmo del genere avrà, molto probabilmente, difficoltà nella capacità di generalizzazione; in secondo luogo, questo algoritmo non sarà sicuramente lineare. E se i metodi per combattere l'overfitting (la debole capacità di generalizzazione) non fanno chiaramente parte del piano di questo articolo, approfondiamo il secondo punto. Per questo, basta rispondere a una semplice domanda. Può la probabilità di rimborso del prestito da parte di Vasya e Fedya essere la stessa tenendo conto dei fattori noti? Dal punto di vista della logica, naturalmente no, non può. Così, per il rimborso del prestito, Vasya destinerà il 2,5% del suo stipendio al mese, mentre Fedya quasi il 27,8%. Inoltre, nel grafico 2 “Classificazione dei clienti”, vediamo che Vasya si trova notevolmente più distante dalla linea che separa le classi rispetto a Fedya. E infine, sappiamo che la funzione
per Vasya e Fedya assume valori diversi: 4,24 per Vasya e 1,0 per Fedya. Ecco, se per caso Fedya guadagnasse ordini di grandezza di più o chiedesse un prestito inferiore, allora le probabilità di rimborso del prestito per Vasya e Fedya sarebbero simili. In altre parole, non si può ingannare una dipendenza lineare. E se davvero calcolassimo i coefficienti
, e non li prendessimo a caso, potremmo affermare con certezza che i nostri valori
ci consentono di valutare meglio la probabilità di rimborso del prestito da parte di ogni mutuatario, ma poiché abbiamo concordato di considerare che la definizione dei coefficienti
sia stata condotta secondo tutte le regole, continueremo a considerare — i nostri coefficienti forniscono la migliore valutazione della probabilità 🙂
Tuttavia, ci siamo distratti. In questa sezione dobbiamo capire come viene definito il vettore dei pesi
, necessario per valutare la probabilità di rimborso del prestito da parte di ciascun mutuatario.
Riassumiamo brevemente con quale arsenale ci presentiamo alla ricerca dei coefficienti
:
1. Presumiamo che la dipendenza tra la variabile target (valore da prevedere) e il fattore che influisce sul risultato sia lineare. Per questo motivo si applica la funzione di regressione lineare di tipo
, la cui linea divide gli oggetti (clienti) in classi
e
o
(clienti in grado di rimborsare il prestito e clienti non in grado). Nel nostro caso, l'equazione ha la forma
.
2. Utilizziamo la funzione di trasformazione logistica inversa di tipo
per determinare la probabilità che un oggetto appartenga a una classe
.
3. Consideriamo il nostro campione di addestramento come un'implementazione generalizzata schemi di Bernoulli, ovvero per ogni oggetto viene generata una variabile casuale, che con una probabilità
(specifica per ogni oggetto) assume valore 1 e con una probabilità
– 0.
4. Sappiamo che dobbiamo massimizzare la funzione di verosimiglianza del campione tenendo conto dei fattori considerati affinché il campione esistente diventi il più plausibile possibile. In altre parole, dobbiamo trovare i parametri tali per cui il campione sia il più plausibile possibile. Nel nostro caso, il parametro da determinare è la probabilità di rimborso del prestito
, che a sua volta dipende da coefficienti sconosciuti
. quindi è necessario trovare un vettore di pesi
, per il quale la verosimiglianza del campione sarà massima.
5. Sappiamo che per massimizzare la funzione di verosimiglianza del campione può essere utilizzato il metodo della massima verosimiglianza. E conosciamo tutti i trucchi per lavorare con questo metodo.
Ecco che si presenta una strategia complessa 🙂
E ora ricordiamo che all'inizio dell'articolo volevamo derivare due tipi di funzione di perdita Logistic Loss in base a come vengono etichettate le classi degli oggetti. È consuetudine, nelle attività di classificazione a due classi, etichettare le classi come
e
o
. A seconda dell'etichettatura, ne risulterà la corrispondente funzione di perdita.
Caso 1. Classificazione degli oggetti in
e 
In precedenza, nella determinazione della verosimiglianza del campione, in cui la probabilità di rimborso del debito da parte del mutuatario veniva calcolata tenendo conto dei fattori e coefficienti dati
, abbiamo applicato la formula:

In realtà
è il valore della funzione di risposta logistica
dato il vettore di pesi 
Quindi non ci sono ostacoli a scrivere la funzione di verosimiglianza del campione in questo modo:

Talvolta, alcuni analisti principianti possono avere difficoltà a comprendere immediatamente come funzioni questa funzione. Esaminiamo 4 brevi esempi che chiariranno tutto:
1. Se
(ossia, in conformità con il campione di addestramento, l'oggetto appartiene alla classe +1), e il nostro algoritmo
determina la probabilità che l'oggetto appartenga alla classe
uguale a 0.9, quindi questo frammento della verosimiglianza del campione verrà calcolato come segue:

2. Se
, ma
, quindi il calcolo sarà il seguente:

3. Se
, ma
, quindi il calcolo sarà il seguente:

4. Se
, ma
, quindi il calcolo sarà il seguente:

È evidente che la funzione di verosimiglianza raggiungerà il massimo nei casi 1 e 3 o, in generale, quando i valori di probabilità di assegnazione dell'oggetto alla classe sono correttamente indovinati.
.
In relazione al fatto che nella determinazione della probabilità di assegnazione dell'oggetto alla classe
non conosciamo solo i coefficienti
, quindi li cercheremo. Come accennato sopra, si tratta di un compito di ottimizzazione, in cui inizialmente dobbiamo trovare la derivata della funzione di verosimiglianza rispetto al vettore dei pesi
. Tuttavia, prima di tutto ha senso semplificare il problema: cercheremo la derivata del logaritmo della funzione di verosimiglianza.

Perché dopo aver applicato il logaritmo, in la funzione di errore logit, abbiamo cambiato il segno da
in
. È semplice, poiché nei compiti di valutazione della qualità del modello è consuetudine minimizzare il valore della funzione, quindi abbiamo moltiplicato il lato destro dell'espressione per
e di conseguenza, anziché massimizzare, ora minimizziamo la funzione.
In verità, adesso, sotto i vostri occhi, è stata faticosamente derivata la funzione di perdita — Logistic Loss per il campione di addestramento con due classi:
e
.
Ora, per trovare i coefficienti, ci basta calcolare la derivata la funzione di errore logit e poi, utilizzando metodi numerici di ottimizzazione, come il gradiente discendente o il gradiente discendente stocastico, trovare i coefficienti ottimali
. Tuttavia, considerando già il non trascurabile volume dell'articolo, si propone di eseguire la differenziazione autonomamente oppure, forse, questo sarà oggetto di un prossimo articolo con molte più operazioni aritmetiche senza esempi così dettagliati.
Caso 2. Classificazione di oggetti su
e 
L'approccio qui sarà lo stesso che con le classi
e
, ma il percorso verso l'output della funzione di perdita Logistic Loss, sarà più tortuoso. Iniziamo. Useremo per la funzione di verosimiglianza l'operatore «se…, allora…». Cioè, se
-esimo oggetto appartiene alla classe
, allora per calcolare la verosimiglianza del campione utilizziamo la probabilità
, se l'oggetto appartiene alla classe
, allora sostituiamo nel modello di verosimiglianza
. Ecco come appare la funzione di verosimiglianza:

Spieghiamo a grandi linee come funziona. Consideriamo 4 casi:
1. Se
e
, quindi nella verosimiglianza del campione «andrà» 
2. Se
e
, quindi nella verosimiglianza del campione «andrà» 
3. Se
e
, quindi nella verosimiglianza del campione «andrà» 
4. Se
e
, quindi nella verosimiglianza del campione «andrà» 
È evidente che nel caso 1 e 3, quando le probabilità sono state correttamente stabilite dall'algoritmo, la funzione di verosimiglianza sarà massimizzata, cioè proprio questo volevamo ottenere. Tuttavia, questo approccio è piuttosto macchinoso e in seguito esamineremo una notazione più compatta. Ma prima di tutto, logaritmiamo la funzione di verosimiglianza sostituendo il segno, poiché ora minimizzeremo.

Sostituiamo invece di
l'espressione
:

Semplifichiamo il termine a destra del logaritmo, utilizzando semplici procedimenti aritmetici e otteniamo:

È ora di liberarsi dell'operatore «se…, allora…». Notiamo che quando l'oggetto
appartiene alla classe
, nel'espressione sotto il logaritmo, al denominatore,
viene elevato alla potenza
, se l'oggetto appartiene alla classe
, quindi $e$ viene elevato alla potenza
. Di conseguenza, la notazione dell'esponente può essere semplificata - unendo entrambi i casi in uno:
. Allora la funzione di errore logistico assumerà la seguente forma:

Secondo le regole del logaritmo, invertiamo la frazione e portiamo il segno "
" (meno) fuori dal logaritmo, ottenendo:

Davanti a voi c'è la funzione di perdita logistic Loss, che viene utilizzata nel set di dati di addestramento con oggetti appartenenti ai seguenti classi:
e
.
Bene, a questo punto mi congedo e concludiamo l'articolo.
Il precedente lavoro dell'autore - "Rendiamo l'equazione di regressione lineare in forma matriciale"
Materiale di supporto
1. Letteratura
1) Analisi della regressione applicata / N. Draper, G. Smith - 2ª ed. - Mosca: Finanze e statistica, 1986 (traduzione dall'inglese)
2) Teoria della probabilità e statistica matematica / V.E. Gmurman - 9ª ed. - Mosca: Alta scuola, 2003
3) Teoria della probabilità / N.I. Cernova - Novosibirsk: Università statale di Novosibirsk, 2007
4) Business analytics: dai dati alla conoscenza / Paklin N.B., Oreshkov V.I. - 2ª ed. - San Pietroburgo: Piter, 2013
5) Data Science - Scienza dei dati da zero / Joel Grass - San Pietroburgo: BHV Pietroburgo, 2017
6) Statistica pratica per specialisti Data Science / P.Bryce, E.Bryce - San Pietroburgo: BHV Pietroburgo, 2018
2. Lezioni, corsi (video)
1)
2)
3)
4)
5)
3. Fonti online
1)
2)
3)
4)
5)
6)
7)
8)
Fonte: habr.com

in la funzione di risposta logistica 
funzioni Logistic Loss
:

sarà positivo da
. Quindi possiamo considerare che la probabilità di estinguere il prestito si trova entro
fino a
. Maggiore è il valore della funzione, maggiore è la probabilità.
Se il punto si trova sopra la retta e lo classifichiamo nella classe
o
. In tal caso considereremo che la probabilità di estinguere il debito si trova entro
fino a
e, quanto maggiore è il valore assoluto della funzione, maggiore è la nostra sicurezza.
Il punto si trova sulla retta, al confine tra due classi. In questo caso, il valore della funzione
e la probabilità di estinguere il prestito è pari a
Ora, immaginiamo che non abbiamo due fattori, ma decine, e che i mutuatari non sono tre, ma migliaia. In questo caso, invece della retta avremo
.


nella funzione di risposta logistica
e 
e 