Dans cet article, nous analyserons les calculs théoriques de la transformation fonctions de régression linéaire в fonction de transformation logit inverse (autrement appelée fonction de réponse logistique). Ensuite, en utilisant l'arsenal méthode du maximum de vraisemblance, conformément au modèle de régression logistique, nous dérivons la fonction de perte Perte logistique, ou en d'autres termes, nous définirons une fonction avec laquelle les paramètres du vecteur de poids sont sélectionnés dans le modèle de régression logistique .
Aperçu de l'article :
- Répétons la relation linéaire entre deux variables
- Identifions le besoin de transformation fonctions de régression linéaire в fonction de réponse logistique
- Réalisons les transformations et la sortie fonction de réponse logistique
- Essayons de comprendre pourquoi la méthode des moindres carrés est mauvaise lors de la sélection des paramètres fonctions Perte logistique
- Nous utilisons méthode du maximum de vraisemblance pour déterminer fonctions de sélection des paramètres :
5.1. Cas 1 : fonction Perte logistique pour les objets avec désignations de classe 0 и 1:
5.2. Cas 2 : fonction Perte logistique pour les objets avec désignations de classe -1 и +1:
L'article regorge d'exemples simples dans lesquels tous les calculs sont faciles à effectuer oralement ou sur papier ; dans certains cas, une calculatrice peut être nécessaire. Alors préparez-vous :)
Cet article s’adresse principalement aux data scientists ayant un niveau initial de connaissances sur les bases du machine learning.
L'article fournira également du code pour dessiner des graphiques et des calculs. Tout le code est écrit dans le langage python 2.7. Permettez-moi de vous expliquer par avance la "nouveauté" de la version utilisée - c'est l'une des conditions pour suivre le cours bien connu de Yandex sur une plateforme d'éducation en ligne tout aussi connue Coursera, et, comme on pourrait le supposer, le matériel a été préparé sur la base de ce cours.
01. Dépendance linéaire
Il est tout à fait raisonnable de se poser la question : qu'est-ce que la dépendance linéaire et la régression logistique ont à voir là-dedans ?
C'est simple! La régression logistique est l'un des modèles appartenant au classificateur linéaire. En termes simples, la tâche d'un classificateur linéaire est de prédire les valeurs cibles à partir de variables (régresseurs) . On pense que la dépendance entre les caractéristiques et valeurs cibles linéaire. D'où le nom du classificateur - linéaire. En gros, le modèle de régression logistique repose sur l’hypothèse qu’il existe une relation linéaire entre les caractéristiques et valeurs cibles . C'est la connexion.
Il y a le premier exemple en studio, et il s'agit, à juste titre, de la dépendance rectiligne des grandeurs étudiées. Au cours de la préparation de l'article, je suis tombé sur un exemple qui a déjà mis de nombreuses personnes en haleine : la dépendance du courant à la tension. (« Analyse de régression appliquée », N. Draper, G. Smith). Nous l'examinerons ici également.
Conformément à La loi d'Ohm :
Où - la force actuelle, - tension, - résistance.
Si nous ne savions pas La loi d'Ohm, alors nous pourrions trouver la dépendance empiriquement en changeant et mesurer , tout en soutenant fixé. Nous verrions alors que le graphe de dépendance à partir de donne une ligne plus ou moins droite passant par l’origine. Nous disons « plus ou moins » car, bien que la relation soit réellement exacte, nos mesures peuvent contenir de petites erreurs et, par conséquent, les points sur le graphique peuvent ne pas tomber exactement sur la ligne, mais seront dispersés autour d'elle de manière aléatoire.
Graphique 1 « Dépendance » à partir de »
Code de dessin de carte
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. La nécessité de transformer l'équation de régression linéaire
Regardons un autre exemple. Imaginons que nous travaillions dans une banque et que notre tâche soit de déterminer la probabilité que l'emprunteur rembourse le prêt en fonction de certains facteurs. Pour simplifier la tâche, nous ne considérerons que deux facteurs : le salaire mensuel de l’emprunteur et le montant mensuel du remboursement du prêt.
La tâche est très conditionnelle, mais avec cet exemple on peut comprendre pourquoi il ne suffit pas d'utiliser fonctions de régression linéaire, et découvrez également quelles transformations doivent être effectuées avec la fonction.
Revenons à l'exemple. Il est entendu que plus le salaire est élevé, plus l’emprunteur pourra allouer mensuellement pour rembourser le prêt. Dans le même temps, pour une certaine échelle salariale, cette relation sera assez linéaire. Par exemple, prenons une fourchette de salaire de 60.000 200.000 RUR à 3 5.000 RUR et supposons que dans la fourchette de salaire spécifiée, la dépendance du montant de la mensualité sur le montant du salaire est linéaire. Disons que pour la fourchette de salaire spécifiée, il a été révélé que le rapport salaire/paiement ne peut pas descendre en dessous de XNUMX et que l'emprunteur doit toujours avoir XNUMX XNUMX RUR en réserve. Et seulement dans ce cas, nous supposerons que l'emprunteur remboursera le prêt à la banque. Ensuite, l’équation de régression linéaire prendra la forme :
où , , , - salaire -ème emprunteur, - paiement du prêt -ème emprunteur.
Remplacer le salaire et le paiement du prêt par des paramètres fixes dans l'équation Vous pouvez décider d'accorder ou de refuser un prêt.
Pour l’avenir, nous constatons qu’avec les paramètres donnés fonction de régression linéaire, utilisé dans fonctions de réponse logistique produira des valeurs importantes qui compliqueront les calculs pour déterminer les probabilités de remboursement du prêt. Par conséquent, il est proposé de réduire nos coefficients, disons, de 25.000 XNUMX fois. Cette transformation des coefficients ne modifiera pas la décision d'accorder un prêt. Rappelons ce point pour l’avenir, mais maintenant, pour que ce dont nous parlons soit encore plus clair, considérons la situation de trois emprunteurs potentiels.
Tableau 1 « Emprunteurs potentiels »
Code pour générer la table
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']]
Conformément aux données du tableau, Vasya, avec un salaire de 120.000 3.000 RUR, souhaite bénéficier d'un prêt afin de pouvoir le rembourser mensuellement à 5.000 XNUMX RUR. Nous avons déterminé que pour approuver le prêt, le salaire de Vasya devait être supérieur à trois fois le montant du paiement et qu'il devait encore rester XNUMX XNUMX RUR. Vasya satisfait à cette exigence : . Il reste même 106.000 XNUMX RUR. Malgré le fait que lors du calcul nous avons réduit les chances 25.000 XNUMX fois, le résultat a été le même : le prêt peut être approuvé. Fedya recevra également un prêt, mais Lesha, malgré le fait qu'il en reçoive le plus, devra freiner ses appétits.
Traçons un graphique pour ce cas.
Graphique 2 « Classification des emprunteurs »
Code pour dessiner le graphique
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()
Ainsi, notre droite, construite selon la fonction , sépare les « mauvais » emprunteurs des « bons ». Les emprunteurs dont les désirs ne coïncident pas avec leurs capacités sont au-dessus de la ligne (Lesha), tandis que ceux qui, selon les paramètres de notre modèle, sont en mesure de rembourser le prêt sont en dessous de la ligne (Vasya et Fedya). En d’autres termes, nous pouvons dire ceci : notre ligne directe divise les emprunteurs en deux classes. Notons-les ainsi : en classe Nous classerons les emprunteurs les plus susceptibles de rembourser le prêt comme ou Nous inclurons les emprunteurs qui ne seront probablement pas en mesure de rembourser le prêt.
Résumons les conclusions de cet exemple simple. Prenons un point et, en substituant les coordonnées du point dans l'équation correspondante de la droite , envisagez trois options :
- Si le point est sous la ligne et que nous l'attribuons à la classe , alors la valeur de la fonction sera positif à partir de à . Cela signifie que nous pouvons supposer que la probabilité de remboursement du prêt est comprise entre . Plus la valeur de la fonction est grande, plus la probabilité est élevée.
- Si un point est au-dessus d'une ligne et que nous l'attribuons à la classe ou , alors la valeur de la fonction sera négative à partir de à . Nous supposerons alors que la probabilité de remboursement de la dette est comprise entre et plus la valeur absolue de la fonction est grande, plus notre confiance est élevée.
- Le point est sur une droite, à la limite entre deux classes. Dans ce cas, la valeur de la fonction sera égal et la probabilité de rembourser le prêt est égale à .
Imaginons maintenant que nous ayons non pas deux facteurs, mais des dizaines, et non pas trois, mais des milliers d’emprunteurs. Alors au lieu d’une ligne droite nous aurons m-dimensionnelle plan et coefficients nous ne serons pas sortis de nulle part, mais dérivés selon toutes les règles, et sur la base des données accumulées sur les emprunteurs qui ont ou non remboursé le prêt. Et en effet, notons que nous sélectionnons désormais les emprunteurs en utilisant des coefficients déjà connus . En fait, la tâche du modèle de régression logistique est précisément de déterminer les paramètres , à laquelle la valeur de la fonction de perte Perte logistique tendra vers le minimum. Mais à propos de la façon dont le vecteur est calculé , nous en saurons plus dans la 5ème section de l’article. En attendant, nous retournons à la terre promise : vers notre banquier et ses trois clients.
Grâce à la fonction nous savons qui peut bénéficier d’un prêt et qui doit être refusé. Mais vous ne pouvez pas vous adresser au directeur avec de telles informations, car ils voulaient obtenir de nous la probabilité de remboursement du prêt par chaque emprunteur. Ce qu'il faut faire? La réponse est simple : nous devons d'une manière ou d'une autre transformer la fonction , dont les valeurs se situent dans la plage à une fonction dont les valeurs seront comprises dans la plage . Et une telle fonction existe, elle s'appelle fonction de réponse logistique ou transformation logit inverse. Rencontrer:
Voyons étape par étape comment cela fonctionne fonction de réponse logistique. Notez que nous marcherons dans la direction opposée, c'est-à-dire nous supposerons que nous connaissons la valeur de probabilité, qui se situe dans la plage allant de à puis nous « déroulerons » cette valeur sur toute la plage de nombres de à .
03. Nous dérivons la fonction de réponse logistique
Étape 1. Convertissez les valeurs de probabilité en une plage
Lors de la transformation de la fonction в fonction de réponse logistique Nous allons laisser notre analyste crédit tranquille et faire un tour chez les bookmakers. Non, bien sûr, nous ne parierons pas, tout ce qui nous intéresse là-bas c'est le sens de l'expression, par exemple, la chance est de 4 contre 1. La cote, familière à tous les parieurs, est le rapport des « réussites » aux « réussites ». les échecs". En termes de probabilité, les probabilités sont la probabilité qu’un événement se produise divisée par la probabilité que l’événement ne se produise pas. Écrivons la formule de la probabilité qu'un événement se produise :
Où - probabilité qu'un événement se produise, — probabilité qu'un événement ne se produise PAS
Par exemple, si la probabilité qu'un cheval jeune, fort et joueur, surnommé « Veterok », batte une vieille femme flasque nommée « Matilda » lors d'une course est égale à , alors les chances de succès de "Veterok" seront к et vice versa, connaissant les probabilités, il ne nous sera pas difficile de calculer la probabilité :
Ainsi, nous avons appris à « traduire » la probabilité en chances, qui prennent des valeurs de à . Faisons un pas de plus et apprenons à « traduire » la probabilité sur la droite numérique entière de à .
Étape 2. Convertissez les valeurs de probabilité en une plage
Cette étape est très simple : prenons le logarithme des probabilités à la base du nombre d'Euler. et on obtient :
Maintenant nous savons que si , puis calculez la valeur sera très simple et, en plus, cela devrait être positif : . C'est vrai.
Par curiosité, vérifions et si , alors nous nous attendons à voir une valeur négative . Nous vérifions: . C'est exact.
Nous savons maintenant comment convertir la valeur de probabilité de à le long de toute la droite numérique à partir de à . À l'étape suivante, nous ferons le contraire.
Pour l'instant, notons que conformément aux règles du logarithme, connaître la valeur de la fonction , vous pouvez calculer les cotes :
Cette méthode de détermination des cotes nous sera utile dans la prochaine étape.
Étape 3. Dérivons une formule pour déterminer
Nous avons donc appris, sachant , trouver les valeurs des fonctions . Cependant, en fait, nous avons besoin exactement du contraire : connaître la valeur trouver . Pour ce faire, tournons-nous vers un concept tel que la fonction de cote inverse, selon laquelle :
Dans l'article, nous ne dériverons pas la formule ci-dessus, mais nous la vérifierons à l'aide des nombres de l'exemple ci-dessus. Nous le savons avec une probabilité de 4 contre 1 (), la probabilité que l'événement se produise est de 0.8 (). Faisons une substitution : . Cela coïncide avec nos calculs effectués précédemment. Allons-nous en.
Dans la dernière étape, nous avons déduit que , ce qui signifie que vous pouvez effectuer une substitution dans la fonction de cotes inverses. On a:
Divisez le numérateur et le dénominateur par , ensuite:
Juste au cas où, pour nous assurer que nous n’avons commis aucune erreur nulle part, nous ferons encore une petite vérification. À l'étape 2, nous pour déterminé que . Ensuite, en remplaçant la valeur dans la fonction de réponse logistique, nous nous attendons à obtenir . On remplace et on obtient :
Félicitations, cher lecteur, nous venons de dériver et de tester la fonction de réponse logistique. Regardons le graphique de la fonction.
Graphique 3 « Fonction de réponse logistique »
Code pour dessiner le graphique
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()
Dans la littérature, vous pouvez également trouver le nom de cette fonction sous la forme fonction sigmoïde. Le graphique montre clairement que le principal changement dans la probabilité qu'un objet appartienne à une classe se produit dans une plage relativement petite. , quelque part de à .
Je suggère de retourner voir notre analyste crédit et de l'aider à calculer la probabilité de remboursement du prêt, sinon il risque de se retrouver sans bonus :)
Tableau 2 « Emprunteurs potentiels »
Code pour générer la table
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']]
Nous avons donc déterminé la probabilité de remboursement du prêt. En général, cela semble être vrai.
En effet, la probabilité que Vasya, avec un salaire de 120.000 3.000 RUR, puisse donner 100 0.3 RUR à la banque chaque mois est proche de XNUMX %. Soit dit en passant, nous devons comprendre qu'une banque peut accorder un prêt à Lesha si la politique de la banque prévoit, par exemple, de prêter à des clients avec une probabilité de remboursement du prêt supérieure, disons, à XNUMX. C’est juste que dans ce cas, la banque créera une réserve plus importante pour d’éventuelles pertes.
Il convient également de noter que le rapport salaire/paiement d'au moins 3 et avec une marge de 5.000 XNUMX RUR a été retiré du plafond. Nous ne pouvons donc pas utiliser le vecteur de poids sous sa forme originale . Nous devions réduire considérablement les coefficients, et dans ce cas, nous avons divisé chaque coefficient par 25.000 XNUMX, c'est-à-dire que nous avons essentiellement ajusté le résultat. Mais cela a été fait spécifiquement pour simplifier la compréhension du matériel au stade initial. Dans la vie, nous n'aurons pas besoin d'inventer et d'ajuster des coefficients, mais de les trouver. Dans les prochaines sections de l'article, nous dériverons les équations avec lesquelles les paramètres sont sélectionnés .
04. Méthode des moindres carrés pour déterminer le vecteur de poids dans la fonction de réponse logistique
On connaît déjà cette méthode de sélection d'un vecteur de poids comme méthode des moindres carrés (LSM) et en fait, pourquoi ne l’utilisons-nous pas alors dans des problèmes de classification binaire ? En effet, rien ne vous empêche d'utiliser multinationale, seule cette méthode dans les problèmes de classification donne des résultats moins précis que Perte logistique. Il existe une base théorique à cela. Examinons d'abord un exemple simple.
Supposons que nos modèles (utilisant MSE и Perte logistique) ont déjà commencé à sélectionner le vecteur de poids et nous avons arrêté le calcul à un moment donné. Peu importe que ce soit au milieu, à la fin ou au début, l'essentiel est que nous ayons déjà quelques valeurs du vecteur de poids et supposons qu'à cette étape, le vecteur de poids pour les deux modèles, il n'y a aucune différence. Prenez ensuite les poids obtenus et remplacez-les par fonction de réponse logistique () pour un objet appartenant à la classe . Nous examinons deux cas où, conformément au vecteur de poids sélectionné, notre modèle est très erroné et vice versa - le modèle est très sûr que l'objet appartient à la classe . Voyons quelles amendes seront infligées lors de l'utilisation multinationale и Perte logistique.
Code pour calculer les pénalités en fonction de la fonction de perte utilisée
# класс объекта
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
Un cas de bévue — le modèle attribue un objet à une classe avec une probabilité de 0,01
Pénalité d'utilisation multinationale sera:
Pénalité d'utilisation Perte logistique sera:
Un cas de forte confiance — le modèle attribue un objet à une classe avec une probabilité de 0,99
Pénalité d'utilisation multinationale sera:
Pénalité d'utilisation Perte logistique sera:
Cet exemple illustre bien qu'en cas d'erreur grossière, la fonction de perte Perte de journal pénalise le modèle beaucoup plus que MSE. Comprenons maintenant quel est le contexte théorique de l'utilisation de la fonction de perte Perte de journal dans les problèmes de classification.
05. Méthode du maximum de vraisemblance et régression logistique
Comme promis au début, l’article regorge d’exemples simples. Dans le studio, il y a un autre exemple et d'anciens invités - des emprunteurs bancaires : Vasya, Fedya et Lesha.
Juste au cas où, avant de développer l'exemple, permettez-moi de vous rappeler que dans la vie, nous avons affaire à un échantillon d'apprentissage de milliers ou de millions d'objets avec des dizaines ou des centaines de fonctionnalités. Cependant, ici, les chiffres sont pris de manière à pouvoir facilement entrer dans la tête d'un data scientist novice.
Revenons à l'exemple. Imaginons que le directeur de la banque décide d'accorder un prêt à toutes les personnes dans le besoin, malgré le fait que l'algorithme lui ait dit de ne pas l'accorder à Lesha. Et maintenant, suffisamment de temps s'est écoulé et nous savons lequel des trois héros a remboursé le prêt et lequel ne l'a pas fait. Ce à quoi il fallait s'attendre : Vasya et Fedya ont remboursé le prêt, mais Lesha ne l'a pas fait. Imaginons maintenant que ce résultat soit pour nous un nouvel échantillon de formation et, en même temps, c'est comme si toutes les données sur les facteurs influençant la probabilité de remboursement du prêt (salaire de l'emprunteur, montant de la mensualité) avaient disparu. Ensuite, intuitivement, nous pouvons supposer qu'un emprunteur sur trois ne rembourse pas son prêt à la banque, ou en d'autres termes, la probabilité que le prochain emprunteur rembourse son prêt. . Cette hypothèse intuitive a une confirmation théorique et est basée sur méthode du maximum de vraisemblance, souvent dans la littérature on l'appelle principe du maximum de vraisemblance.
Commençons par nous familiariser avec l'appareil conceptuel.
Probabilité d'échantillonnage est la probabilité d'obtenir exactement un tel échantillon, d'obtenir exactement de telles observations/résultats, c'est-à-dire le produit des probabilités d'obtenir chacun des résultats de l'échantillon (par exemple, si le prêt de Vasya, Fedya et Lesha a été remboursé ou non en même temps).
Fonction de vraisemblance relie la vraisemblance d'un échantillon aux valeurs des paramètres de distribution.
Dans notre cas, l'échantillon d'apprentissage est un schéma de Bernoulli généralisé, dans lequel la variable aléatoire ne prend que deux valeurs : ou . Par conséquent, la vraisemblance de l’échantillon peut être écrite comme une fonction de vraisemblance du paramètre comme suit:
L'entrée ci-dessus peut être interprétée comme suit. La probabilité conjointe que Vasya et Fedya remboursent le prêt est égale à , la probabilité que Lesha ne rembourse PAS le prêt est égale à (puisque ce n'est PAS le remboursement du prêt qui a eu lieu), donc la probabilité conjointe des trois événements est égale .
Méthode du maximum de vraisemblance est une méthode pour estimer un paramètre inconnu en maximisant fonctions de vraisemblance. Dans notre cas, nous devons trouver une telle valeur à quel atteint son maximum.
D'où vient l'idée réelle : rechercher la valeur d'un paramètre inconnu à laquelle la fonction de vraisemblance atteint un maximum ? Les origines de l’idée proviennent de l’idée qu’un échantillon est la seule source de connaissances dont nous disposons sur la population. Tout ce que nous savons sur la population est représenté dans l’échantillon. Par conséquent, tout ce que nous pouvons dire, c’est qu’un échantillon constitue le reflet le plus précis de la population dont nous disposons. Par conséquent, nous devons trouver un paramètre pour lequel l’échantillon disponible devient le plus probable.
Évidemment, nous avons affaire à un problème d’optimisation dans lequel il faut trouver le point extrême d’une fonction. Pour trouver le point extrême, il est nécessaire de considérer la condition du premier ordre, c'est-à-dire d'assimiler la dérivée de la fonction à zéro et de résoudre l'équation par rapport au paramètre souhaité. Cependant, rechercher la dérivée d'un produit d'un grand nombre de facteurs peut être une tâche longue ; pour éviter cela, il existe une technique spéciale : passer au logarithme fonctions de vraisemblance. Pourquoi une telle transition est-elle possible ? Faisons attention au fait que nous ne recherchons pas l'extremum de la fonction elle-même, et le point extremum, c'est-à-dire la valeur du paramètre inconnu à quel atteint son maximum. Lors du passage à un logarithme, le point extrême ne change pas (bien que l'extremum lui-même diffère), car le logarithme est une fonction monotone.
Conformément à ce qui précède, continuons à développer notre exemple avec les prêts de Vasya, Fedya et Lesha. Passons d'abord à logarithme de la fonction de vraisemblance:
Maintenant, nous pouvons facilement différencier l'expression par :
Et enfin, considérons la condition du premier ordre - nous assimilons la dérivée de la fonction à zéro :
Ainsi, notre estimation intuitive de la probabilité de remboursement du prêt était théoriquement justifié.
Très bien, mais que devons-nous faire de ces informations maintenant ? Si l'on suppose qu'un emprunteur sur trois ne restitue pas l'argent à la banque, alors cette dernière fera inévitablement faillite. C'est vrai, mais seulement en évaluant la probabilité de remboursement du prêt égale à Nous n’avons pas pris en compte les facteurs influençant le remboursement du prêt : le salaire de l’emprunteur et le montant de la mensualité. Rappelons que nous avons préalablement calculé la probabilité de remboursement du prêt par chaque client en tenant compte de ces mêmes facteurs. Il est logique que nous obtenions des probabilités différentes de la constante égale .
Définissons la vraisemblance des échantillons :
Code de calcul des probabilités d'échantillon
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)
Échantillon de vraisemblance à valeur constante :
Exemple de vraisemblance lors du calcul de la probabilité de remboursement du prêt en tenant compte des facteurs :
La vraisemblance d'un échantillon avec une probabilité calculée en fonction des facteurs s'est avérée supérieure à la vraisemblance avec une valeur de probabilité constante. Qu'est-ce que cela signifie? Ceci suggère que la connaissance des facteurs a permis de sélectionner plus précisément la probabilité de remboursement du prêt pour chaque client. Ainsi, lors de l'émission du prochain prêt, il serait plus correct d'utiliser le modèle proposé à la fin de la section 3 de l'article pour évaluer la probabilité de remboursement de la dette.
Mais alors, si l’on veut maximiser fonction de vraisemblance d'échantillon, alors pourquoi ne pas utiliser un algorithme qui produira des probabilités pour Vasya, Fedya et Lesha, par exemple, égales à 0.99, 0.99 et 0.01, respectivement. Peut-être qu'un tel algorithme fonctionnera bien sur l'échantillon d'apprentissage, car il rapprochera la valeur de vraisemblance de l'échantillon de , mais, d'une part, un tel algorithme aura très probablement des difficultés de capacité de généralisation, et d'autre part, cet algorithme ne sera certainement pas linéaire. Et si les méthodes de lutte contre le surentraînement (capacité de généralisation tout aussi faible) ne sont clairement pas incluses dans le plan de cet article, revenons plus en détail sur le deuxième point. Pour ce faire, répondez simplement à une question simple. La probabilité que Vasya et Fedya remboursent le prêt pourrait-elle être la même, compte tenu des facteurs que nous connaissons ? Du point de vue de la logique, bien sûr que non, cela ne peut pas être le cas. Ainsi, Vasya paiera 2.5 % de son salaire par mois pour rembourser le prêt, et Fedya - près de 27,8 %. Également dans le graphique 2 « Classification des clients », nous voyons que Vasya est beaucoup plus éloignée de la ligne séparant les classes que Fedya. Et enfin, on sait que la fonction pour Vasya et Fedya prend des valeurs différentes : 4.24 pour Vasya et 1.0 pour Fedya. Maintenant, si Fedya, par exemple, gagnait un ordre de grandeur supérieur ou demandait un prêt plus petit, alors les probabilités de rembourser le prêt pour Vasya et Fedya seraient similaires. En d’autres termes, la dépendance linéaire ne peut être trompée. Et si nous calculions réellement les chances , et ne les avons pas sortis de nulle part, nous pouvons affirmer en toute sécurité que nos valeurs permettent au mieux d'estimer la probabilité de remboursement du prêt par chaque emprunteur, mais comme nous sommes convenus de supposer que la détermination des coefficients a été réalisé selon toutes les règles, alors nous le supposerons - nos coefficients nous permettent de donner une meilleure estimation de la probabilité :)
Cependant, nous nous éloignons. Dans cette section, nous devons comprendre comment le vecteur des poids est déterminé , ce qui est nécessaire pour évaluer la probabilité de remboursement du prêt par chaque emprunteur.
Résumons brièvement avec quel arsenal nous cherchons des cotes :
1. Nous supposons que la relation entre la variable cible (valeur de prédiction) et le facteur influençant le résultat est linéaire. C'est pour cette raison qu'il est utilisé fonction de régression linéaire espèce , dont la ligne divise les objets (clients) en classes и ou (clients qui sont en mesure de rembourser le prêt et ceux qui ne le sont pas). Dans notre cas, l'équation a la forme .
2. Nous utilisons fonction logit inverse espèce déterminer la probabilité qu'un objet appartienne à une classe .
3. Nous considérons notre ensemble de formation comme la mise en œuvre d'un Schémas de Bernoulli, c'est-à-dire que pour chaque objet une variable aléatoire est générée, qui avec probabilité (le sien pour chaque objet) prend la valeur 1 et avec probabilité - 0.
4. Nous savons ce que nous devons maximiser fonction de vraisemblance d'échantillon en tenant compte des facteurs acceptés afin que l'échantillon disponible devienne le plus plausible. En d’autres termes, nous devons sélectionner les paramètres pour lesquels l’échantillon sera le plus plausible. Dans notre cas, le paramètre retenu est la probabilité de remboursement du prêt , qui à son tour dépend de coefficients inconnus . Nous devons donc trouver un tel vecteur de poids , auquel la probabilité de l'échantillon sera maximale.
5. Nous savons quoi maximiser fonctions de vraisemblance d'échantillon peut être utilisé méthode du maximum de vraisemblance. Et nous connaissons toutes les astuces pour travailler avec cette méthode.
C'est ainsi que cela s'avère être un déménagement en plusieurs étapes :)
Rappelez-vous maintenant qu'au tout début de l'article nous voulions dériver deux types de fonctions de perte Perte logistique en fonction de la façon dont les classes d'objets sont désignées. Il se trouve que dans les problèmes de classification à deux classes, les classes sont notées и ou . Selon la notation, la sortie aura une fonction de perte correspondante.
Cas 1. Classification des objets en и
Auparavant, lors de la détermination de la probabilité d'un échantillon dans lequel la probabilité de remboursement de la dette par l'emprunteur était calculée sur la base de facteurs et de coefficients donnés , nous avons appliqué la formule :
En fait est le sens fonctions de réponse logistique pour un vecteur de poids donné
Alors rien ne nous empêche d’écrire la fonction de vraisemblance de l’échantillon comme suit :
Il arrive qu'il soit parfois difficile pour certains analystes novices de comprendre immédiatement le fonctionnement de cette fonction. Regardons 4 courts exemples qui clarifieront les choses :
1. si (c'est-à-dire que selon l'échantillon d'apprentissage, l'objet appartient à la classe +1), et notre algorithme détermine la probabilité de classer un objet dans une classe égal à 0.9, alors cet échantillon de vraisemblance sera calculé comme suit :
2. si Et , alors le calcul sera comme ceci :
3. si Et , alors le calcul sera comme ceci :
4. si Et , alors le calcul sera comme ceci :
Il est évident que la fonction de vraisemblance sera maximisée dans les cas 1 et 3 ou dans le cas général - avec des valeurs correctement devinées des probabilités d'assigner un objet à une classe .
En raison du fait que lors de la détermination de la probabilité d'attribuer un objet à une classe Nous ne connaissons que les coefficients , alors nous les chercherons. Comme mentionné ci-dessus, il s'agit d'un problème d'optimisation dans lequel nous devons d'abord trouver la dérivée de la fonction de vraisemblance par rapport au vecteur de poids. . Cependant, il est d'abord logique de se simplifier la tâche : nous chercherons la dérivée du logarithme fonctions de vraisemblance.
Pourquoi après le logarithme, en fonctions d'erreur logistique, nous avons changé le signe de sur . Tout est simple, puisque dans les problèmes d'évaluation de la qualité d'un modèle il est d'usage de minimiser la valeur d'une fonction, on multiplie le côté droit de l'expression par et par conséquent, au lieu de maximiser, nous minimisons maintenant la fonction.
En fait, à l'heure actuelle, sous vos yeux, la fonction de perte a été minutieusement dérivée - Perte logistique pour un ensemble de formations comprenant deux cours : и .
Maintenant, pour trouver les coefficients, il suffit de trouver la dérivée fonctions d'erreur logistique puis, à l'aide de méthodes d'optimisation numérique, telles que la descente de gradient ou la descente de gradient stochastique, sélectionnez les coefficients les plus optimaux . Mais, étant donné le volume considérable de l'article, il est proposé d'effectuer la différenciation par vous-même, ou peut-être que ce sera le sujet du prochain article avec beaucoup d'arithmétique sans exemples aussi détaillés.
Cas 2. Classification des objets en и
L'approche ici sera la même que pour les cours и , mais le chemin lui-même vers la sortie de la fonction de perte Perte logistique, sera plus orné. Commençons. Pour la fonction de vraisemblance, nous utiliserons l'opérateur "si donc..."... C'est-à-dire si Le ème objet appartient à la classe , puis pour calculer la vraisemblance de l'échantillon, nous utilisons la probabilité , si l'objet appartient à la classe , alors nous substituons à la vraisemblance . Voici à quoi ressemble la fonction de vraisemblance :
Décrivons sur nos doigts comment cela fonctionne. Considérons 4 cas :
1. si и , alors la probabilité d'échantillonnage "passera"
2. si и , alors la probabilité d'échantillonnage "passera"
3. si и , alors la probabilité d'échantillonnage "passera"
4. si и , alors la probabilité d'échantillonnage "passera"
Il est évident que dans les cas 1 et 3, lorsque les probabilités ont été correctement déterminées par l'algorithme, fonction de vraisemblance sera maximisé, c'est-à-dire que c'est exactement ce que nous voulions obtenir. Cependant, cette approche est assez lourde et nous considérerons ensuite une notation plus compacte. Mais d'abord, logarithmonons la fonction de vraisemblance avec un changement de signe, puisque nous allons maintenant la minimiser.
Remplaçons plutôt expression :
Simplifions le terme correct sous le logarithme en utilisant des techniques arithmétiques simples et obtenons :
Il est maintenant temps de se débarrasser de l'opérateur "si donc...". Notez que lorsqu'un objet appartient à la classe , puis dans l'expression sous le logarithme, au dénominateur, élevé au pouvoir , si l'objet appartient à la classe , alors $e$ est élevé à la puissance . Par conséquent, la notation du diplôme peut être simplifiée en combinant les deux cas en un seul : . puis fonction d'erreur logistique prendra la forme :
Conformément aux règles du logarithme, on retourne la fraction et on met le signe "" (moins) pour le logarithme, on obtient :
Voici la fonction de perte perte logistique, qui est utilisé dans l'ensemble de formation avec les objets attribués aux classes : и .
Eh bien, à ce stade, je prends congé et nous concluons l'article.
matières auxiliaires
1. Littérature
1) Analyse de régression appliquée / N. Draper, G. Smith - 2e éd. – M. : Finances et Statistiques, 1986 (traduction de l’anglais)
2) Théorie des probabilités et statistiques mathématiques / V.E. Gmurman - 9e éd. - M. : Ecole Supérieure, 2003
3) Théorie des probabilités / N.I. Chernova - Novossibirsk : Université d'État de Novossibirsk, 2007
4) Business Analytics : des données à la connaissance / Paklin N. B., Oreshkov V. I. - 2e éd. — Saint-Pétersbourg : Peter, 2013
5) Data Science Data science from scratch / Joel Gras - Saint-Pétersbourg : BHV Petersburg, 2017
6) Statistiques pratiques pour les spécialistes de la science des données / P. Bruce, E. Bruce - Saint-Pétersbourg : BHV Petersburg, 2018
2. Conférences, cours (vidéo)
1)
2)
3)
4)
5)
3. Sources Internet
1)
2)
3)
4)
6)
7)
Source: habr.com