
В тази статия ще разгледаме теоретичните изчисления за преобразуването на функциите на линейната регресия в на функцията на обратното логистично преобразуване (известна също като функция на логистичния отговор). След това, използвайки арсенала на метода на максималната достоверност, в съответствие с модела на логистичната регресия, ще изведем функцията на загубата Logistic Loss, или с други думи, ще определим функция, с която в модела на логистичната регресия се подбират параметрите на вектора на теглата
.
План на статията:
- Ще повторим за линейната зависимост между две променливи
- Идентифицираме необходимостта от преобразуване на на функциите на линейната регресия
в функцията на логистичния отговор 
- Ще извършим преобразувания и ще изведем функцията на логистичния отговор
- Ще се опитаме да разберем защо методът на най-малките квадрати е недостатъчен при подбор на параметри
функции Logistic Loss - Използваме метод на максимално правдоподобие за определяне функции за подбор на параметри
:5.1. Случай 1: функция Logistic Loss за обекти с обозначени класове 0 и 1:

5.2. Случай 2: функция Logistic Loss за обекти с обозначени класове -1 и +1:

Статията изобилства от прости примери, в които всички изчисления са лесни за извършване устно или на хартия. В някои случаи може да е необходим калкулатор. Така че се подгответе 🙂
Тази статия е предимно насочена към специалисти по данни с начално ниво на познания в основите на машинното обучение.
В статията ще бъде предоставен и код за визуализация на графики и изчисления. Целият код е написан на езика python 2.7. Предварително ще поясня относно „новостта“ на използваната версия — това е едно от условията за преминаване на известен курс от Яндекс на не по-малко известна онлайн образователна платформа Coursera, и, както може да се предположи, материалът е подготвен вдъхновен от този курс.
01. Линейна зависимост
Напълно резонно е да зададем въпроса — каква връзка има линейната зависимост с логистичната регресия?
Всичко е просто! Логистичната регресия е един от моделите, които спадат към линейния класификатор. С прости думи, задачата на линейния класификатор е да предскаже целевите стойности
от променливите (регресори)
. При това се счита, че зависимостта между характеристиките
и целевите стойности
е линейна. Оттук идва и наименованието на класификатора — линейни. Ако много грубо обобщим, в основата на модела на логистичната регресия лежи предположението за наличие на линейна зависимост между характеристиките
и целевите стойности
. Ето я — връзката.
В студиото е първият пример, и той, правилно, е за линейната зависимост на изследваните величини. В процеса на подготовката на статията попаднах на пример, който е познат на много хора — зависимостта на тока от напрежението ("Прикладен регресионен анализ", Н.Дрейпер, Г.Смит). И тук ще го разгледаме.
В съответствие с според закона на Ома:
, където
— ток,
— напрежение,
— съпротивление.
Ако не бяхме знаели законът на Ома, можехме да открием зависимостта емпирично, изменяйки
и измервайки
, като същевременно поддържахме
фиксирана. Тогава щяхме да видим, че графикът на зависимостта
от
дава повече или по-малко права линия, минаваща през началото на координатната система. Казахме „повече или по-малко“, тъй като, въпреки че зависимостта е действително точна, нашите измервания може да съдържат малки грешки и поради това точките на графика вероятно няма да попаднат строго на линията, а ще бъдат разпръснати около нея случайно.
График 1 «Зависимост
от
»

Код за рисуване на графика
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 = 'Актуални резултати')
plt.xlabel('I', size = 16)
plt.ylabel('U', size = 16)
plt.legend(prop = {'size': 14})
plt.show()02. Необходимост от преобразувания на уравнението на линейна регресия
Нека разгледаме още един пример. Представете си, че работим в банка и пред нас стои задачата да определим вероятността за връщане на кредита от задълженото лице в зависимост от някои фактори. За улеснение на задачата, ще разгледаме само два фактора: месечната заплата на заемателя и месечния размер на вноската за погасяване на кредита.
Задачата е много условна, но в този пример ще можем да разберем защо за нейното решаване е недостатъчно само прилагане на функциите на линейната регресия, а също така ще разберем какви преобразувания с функцията е необходимо да се извършат.
Връщаме се към примера. Ясно е, че колкото по-висока е заплатата, толкова повече заемателят ще може месечно да насочва за погасяване на кредита. При това, за определен диапазон от заплати, тази зависимост ще бъде съвсем линейна. Например, нека вземем диапазон от заплати от 60.000лв. до 200.000лв. и да предположим, че в посочения диапазон на заплатите, зависимостта на размера на месечната вноска от размера на заплатата е линейна. Да предположим, че за посочения диапазон заплатите са установили, че съотношението между заплатата и вноската не може да пада под 3, а на заемателя трябва да останат 5.000лв. в резерв. И само в този случай, ще считаме, че заемателят ще върне кредита на банката. Тогава уравнението на линейната регресия ще има вида:

където
,
,
,
— заплата
-я на заемателя,
— вноската по кредита на
-я заемателя.
Заместването в уравнението на заплатата и вноската по кредита с фиксирани параметри
може да доведе до решение относно отпускането или отказването на кредита.
Извинявайте, но предварително ще отбележим, че при зададените параметри
функцията на линейната регресия, прилагана в функцията на логистичния отговор ще дава големи стойности, които ще затруднят изчисленията по определянето на вероятностите за погасяване на кредита. Затова предлагаме да намалим нашите коефициенти, да кажем, с 25 000 пъти. Това преобразуване в коефициентите няма да промени решението за отпускане на кредита. Нека запомним този момент за в бъдеще, а сега, за да стане още по-ясно за какво става въпрос, нека разгледаме ситуацията с трима потенциални заематели.
Таблица 1 „Потенциални заематели“

Код за генериране на таблицата
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']]В съответствие с данните от таблицата, Васya с заплата от 120 000 лв. иска да получи кредит, който да погасява всеки месец с 3 000 лв. Определихме, че за одобрение на кредита, размерът на заплатата на Васya трябва да надвишава три пъти размера на вноската, като остава още 5 000 лв. Това изискване Васya изпълнява:
. Остава дори 106 000 лв. Въпреки че при изчисленията
намалихме коефициентите
с 25 000 пъти, резултатът остава същият — кредитът може да бъде одобрен. Федя също ще получи кредит, а Леша, въпреки че печели най-много, ще трябва да увеличи своите финансови амбиции.
Нека начертаем графика за този случай.
График 2 „Класификация на заемателите“

Код за изчертаване на графика
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 = 'Решение - Кредит одобрен')
plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'],
's', color = 'red', markersize = 12, label = 'Решение - Отказ')
plt.xlabel('Заплата', size = 16)
plt.ylabel('Плащане', size = 16)
plt.legend(prop = {'size': 14})
plt.show()И така, нашата линия, построена в съответствие с функцията
, разделя „лошите“ заематели от „добрите“. Тези заематели, чиито желания не съвпадат с възможностите, се намират над линията (Леша), докато тези, които са в състояние според параметрите на нашия модел, да върнат кредита, са под линията (Васya и Федя). Иначе казано, нашата линия разделя заемателите на два класа. Нека ги обозначим по следния начин: в класа
ще отнесем онези заематели, които най-вероятно ще върнат кредита, а в класа
или
ще отнесем онези заематели, които най-вероятно няма да могат да върнат кредита.
Обобщим изводите от този прост пример. Нека вземем точка
и като подставим координатите на точката в съответното уравнение на линията
, нека разгледаме три варианта:
- Ако точката е под линията и я отнасяме към класа
, стойността на функцията
ще бъде положителен от
до
. Следователно можем да считаме, че вероятността за погасяване на кредита е в рамките на
. Колкото по-висока е стойността на функцията, толкова по-висока е вероятността. - Ако точката е над правата и я отнесем към класа
или
, стойността на функцията ще бъде отрицателна от
до
. Тогава ще считаме, че вероятността за погасяване на задължението е в рамките на
и, колкото по-голяма е по модул стойността на функцията, толкова по-висока е нашата увереност. - Точката е на правата, на границата между два класа. В такъв случай стойността на функцията
ще бъде равна на
и вероятността за погасяване на кредита е равна на
.
Сега, представете си, че имаме не два фактора, а десетки, а заемателите не са трима, а хиляди. Тогава вместо права ще имаме m-мерна плоскост и коефициентите
ще бъдат взети не от нищото, а изведени по всички правила, на база натрупаните данни за заемателите, които са върнали или не са върнали кредит. И наистина, забележете, в момента прилагаме критерии за заемателите с вече известни коефициенти
. Всъщност, задачата на модела на логистичната регресия точно се състои в това да определи параметрите
, при които стойността на функцията на загубите Logistic Loss ще стреми към минимално. Но за начина, по който се изчислява векторът
, ще научим в 5-та глава на статията. А засега се връщаме на обетованата земя — при нашия банкер и тримата му клиенти.
Благодарение на функцията
знаем кому можем да дадем кредит, а на кого трябва да откажем. Но с такава информация не можем да отидем при директора, тъй като от нас искаха вероятността за връщане на кредита от всеки заемател. Какво да правим? Отговорът е прост — трябва да преобразуваме функцията
, стойностите на която лежат в диапазона
, в функция, стойностите на която ще лежат в диапазона
. И такава функция съществува, нарича се функция на логистичния отговор или обратното логитно преобразуване. Запознайте се:

Нека разгледаме стъпка по стъпка как се получава функцията на логистичния отговор. Забележете, че ще вървим в обратна посока, т.е. ще предположим, че знаем стойността на вероятността, която лежи в пределите от
до
и след това ще „разгърнем“ тази стойност за цялата област от числа от
до
.
03. Извеждаме функцията на логистичния отговор
Стъпка 1. Преобразуваме стойностите на вероятността в диапазон 
За времето на трансформацията на функцията
в функцията на логистичния отговор
ще оставим на мира нашия кредитен анализатор, а вместо това ще разгледаме букмейкърските къщи. Не, разбира се, няма да правим залози, всичко, което ни интересува там, е смисълът на израза, например шанс 4 към 1. Шансовете, известни на всички залагащи играчи, представляват съотношението на „успехите“ към „неуспехите“. От гледна точка на вероятностите, шансовете — това е вероятността от настъпване на събитие, делена на вероятността, че събитието няма да настъпи. Записваме формулата за шанса на настъпването на събитието
:

, където
— вероятността за възникване на събитие,
— вероятността НИКАК не възникване на събитие
Например, ако вероятността, че млад, силен и бърз кон по прякор «Ветерок» ще победи стара и дрябнала старица на име «Матилда» е
, тогава шансовете за успех на «Ветерок» ще бъдат
к
и обратно, знаейки шансовете, не трябва да имаме трудности да изчислим вероятността
:

По този начин, научихме се да „превеждаме“ вероятността в шансове, които приемат стойности от
до
. Ще направим още една стъпка и ще се научим да „превеждаме“ вероятността в целия числов ред от
до
.
Стъпка 2. Преведем стойностите на вероятността в диапазон 
Тази стъпка е много проста — логаритмираме шансовете по основанието на числото на Ейлер
и получаваме:

Сега знаем, че ако
, тогава изчисляването на стойността
ще бъде много просто и, повече от това, тя трябва да бъде положителна:
. И така е.
От любопитство, проверете какво, ако
, тогава очакваме да видим отрицателна стойност
. Проверяваме:
. Всичко е вярно.
Сега знаем как да преведем стойността на вероятността от
до
в целия числов ред от
до
. В следващата стъпка ще направим всичко обратно.
А за сега, отбелязваме, че в съответствие с правилата на логаритмирането, знаейки стойността на функцията
, можем да изчислим шансовете:

Този метод за определяне на шансовете ще ни е полезен в следващата стъпка.
Стъпка 3. Изведем формулата за определяне на 
И така, научихме се, знаейки
, да намираме стойностите на функцията
. Въпреки това, наистина, всичко, което ни е нужно, е точно обратното — знаейки стойността
да намерим
. За това ще се обърнем към понятието за обратна функция на шансовете, съгласно което:

В статията няма да извеждаме гореспоменатата формула, но ще проверим с цифрите от примера по-горе. Знаем, че при шансове 4 към 1 (
), вероятността за възникване на събитие е 0.8 (
). Направим подмяната:
. Това съвпада с нашите предишни изчисления. Продължаваме напред.
На предишната стъпка извършихме, че
, така че можем да направим замяна в обратната функция на шансовете. Получаваме:

Разделяме числителя и знаменателя на
, тогава:

На всяка цена, за да се уверим, че не сме сгрешили, ще направим още една малка проверка. На стъпка 2, ние за
определихме, че
. Тогава, като подменим стойността
в функцията на логистичния отговор, очакваме да получим
. Подменяме и получаваме: 
Честито, уважаеми читателю, току-що извъдихме и тестваме функцията на логистичния отговор. Нека погледнем графика на функцията.
График 3 «Функция на логистичния отговор»

Код за изчертаване на графика
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()В литературата също може да срещнете наименованието на тази функция като сигмоидна функция. От графика е ясно видно, че основното изменение на вероятността обектът да принадлежи на класа се случва в относително тесен диапазон
, около
до
.
Предлагам да се върнем към нашия кредитен аналитик и да му помогнем с изчисляването на вероятността за изплащане на кредитите, в противен случай той рискува да остане без премия 🙂
Таблица 2 «Потенциални заемачи»

Код за генериране на таблицата
proba = []
for i in df['f(w,x)']:
proba.append(round(logit(i),2))
df['Вероятност'] = proba
df[['Заемател', 'Заплата', 'Плащане', 'f(w,x)', 'Решение', 'Вероятност']]И така, вероятността за изплащане на кредита вече определихме. В общи линии, това изглежда като истина.
Всъщност, вероятността Вася с заплата от 120 000 Р да може да връща на банката 3 000 Р месечно е близка до 100%. Между другото, трябва да разберем, че банката може да предостави кредит и на Леша, ако политиката на банката предвижда, например, кредитиране на клиенти с вероятност за изплащане на кредита над, да речем, 0.3. Просто в такъв случай, банката ще формира по-голям резерв за възможни загуби.
Също така трябва да се отбележи, че съотношението заплата към плащане от минимум 3 с резерв от 5 000 Р беше взето произволно. Затова не можеше да се използва в оригиналния вид на вектора на теглата
. Необходимо беше да намалим значително коефициентите и в такъв случай разделихме всеки коефициент на 25 000, тоест по същество подстраховахме резултата. Но това беше направено нарочно, за да се улесни разбирането на материала на начален етап. В действителност, ще трябва да не си измисляме и коригираме коефициентите, а да ги намираме. Както в следващите раздели на статията ще извлечем уравнения, с помощта на които се подбират параметрите
.
04. Метод на най-малките квадрати при определяне на вектора на теглата
в логистичната функция на отговор
Такъв метод за подбор на вектора на теглата вече е известен
, като метод на най-малките квадрати (МНК) и всъщност, защо да не го използваме в задачите за бинарна класификация? В действителност, нищо не пречи да се използва МНК, само че този метод в задачите за класификация дава по-малко точни резултати от Logistic Loss. Има теоретично обосноваване за това. Нека първо разгледаме един прост пример.
Да предположим, че нашите модели (използващи MSE и Logistic Loss) вече започнаха подбора на вектора на теглата
и ние спряхме изчисленията на някакъв етап. Няма значение, в средата, в края или в началото, важното е, че вече имаме някакви стойности на вектора на теглата и да предположим, че на този етап векторите на теглата
и за двата модела нямат различия. Тогава ще вземем получените тегла и ще ги подменим в функцията на логистичния отговор (
) за някакъв обект, който принадлежи на класа
. Изследваме два случая, когато в съответствие с подбрания вектор на теглата нашият модел прави голяма грешка и обратно — моделът е много уверен, че обектът принадлежи на класа
. Да видим какви ще бъдат глобите, прилагани при използване на МНК и Logistic Loss.
Код за изчисляване на глобите в зависимост от използваната функция на загубите
# класс объекта
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Случай с груба грешка — моделът отнася обекта към класа
с вероятност 0,01
Глобата при използване МНК ще бъде:

Глобата при използване Logistic Loss ще бъде:

Случай с висока увереност — моделът отнася обекта към класа
с вероятност 0,99
Глобата при използване МНК ще бъде:

Глобата при използване Logistic Loss ще бъде:

Този пример добре илюстрира, че при груба грешка функцията на загубите Log Loss глобява модела значително повече от MSE. Нека сега да разгледаме какви са теоретичните предпоставки за използване на функцията на загубите Log Loss в класификационните задачи.
05. Метод на максималната вероятност и логистична регресия
Както бе обещано в началото, статията изобилства от прости примери. В студиото имаме нов пример и стари гости — заемателите на банката: Васил, Федя и Леша.
За всеки случай, преди да развием примера, ще напомня, че в живота имаме работа с обучаваща извадка от хиляди или милиони обекта с десетки или стотици признаци. Въпреки това, тук цифрите са избрани по такъв начин, че лесно да се поберат в съзнанието на начинаещия датасайентист.
Връщаме се към примера. Да предположим, че директорът на банката решава да предостави кредит на всички нуждаещи се, независимо от факта, че алгоритъмът е подсказал да не го отпуска на Леша. И ето, изминало е достатъчно време и вече знаем кой от тримата героя е изплатил кредита, а кой не. Както се и очакваше: Васил и Федя са изплатили кредита, а Леша — не. Сега нека си представим, че този резултат ще бъде нашата нова обучаваща извадка и, в същото време, сякаш са изчезнали всички данни за факторите, влияещи на вероятността за изплащане на кредита (заплата на заемателя, размер на месечната вноска). Тогава интуитивно можем да предположим, че всеки трети заемател не връща кредита на банката или с други думи, вероятността за връщане на кредита от следващия заемател
. Това интуитивно предположение има теоретично потвърждение и се основава на метода на максималната вероятност, който често в литературата се нарича принцип на максималната вероятност.
Първо, нека се запознаем с понятийния апарат.
Вероятността на извадката — това е вероятността за получаване точно на такава извадка, получаване точно на такива наблюдения / резултати, т.е. произведение на вероятностите за получаване на всеки от резултатите на извадката (например, изплатен или не изплатен кредит от Васил, Федя и Леша едновременно).
Функцията на вероятността свързва вероятността на извадката със стойностите на параметрите на разпределението.
В нашия случай, обучаващата извадка представлява обобщена схема на Бернули, в която случайната променлива приема само две стойности:
или
. Следователно, вероятността на извадката може да бъде записана като функция на вероятността от параметър
по следния начин:


Тази записка може да се интерпретира по следния начин. Съвместната вероятност, че Вася и Федя ще погасат кредита, е равна на
, вероятността, че Леша НЯМА да погаси кредита, е равна на
(тъй като става въпрос именно за Непогасен кредит), следователно съвместната вероятност на всички три събития е равна на
.
Метод на максимално правдоподобие — това е метод за оценка на неизвестен параметър чрез максимизиране функция на правдоподобие. В нашия случай трябва да намерим такава стойност
, при която
достига максимума.
Откъде всъщност идва идеята – да търсим стойността на неизвестния параметър, при която функцията на правдоподобие достига максимума? Произходът на идеята произтича от представата, че извадката е единственият, достъпен за нас, източник на знание за генеральната популация. Всичко, което знаем за генеральната популация, е представено в извадката. Следователно, всичко, което можем да кажем, е, че извадката е най-точното отражение на генеральната популация, което имаме. Следователно, трябва да намерим такъв параметър, при който наличната извадка става най-вероятна.
Очевидно, имаме работа с оптимизационен проблем, в който трябва да намерим точка на екстремум на функция. За да намерим точката на екстремум, трябва да разгледаме условието от първи ред, т.е. да приравним производната на функцията на нула и да решим уравнението по отношение на търсения параметър. Но търсенето на производната на произведение от голямо количество множители може да се окаже продължително занимание; за да избегнем това, съществува специална техника — преминаване към логаритъм функция на правдоподобие. Защо е възможен такъв преход? Нека обърнем внимание на това, че търсим не самия екстремум на функцията
, а точката на екстремум, т.е. стойността на неизвестния параметър
, при която
достига максимума. При преминаване към логаритъм точката на екстремум не се променя (макар самият екстремум да е различен), тъй като логаритъмът е монотонна функция.
Нека, в съответствие с казаното по-горе, продължим да развиваме примера ни с кредитите на Вася, Федя и Леша. Първо, да преминем към логаритъм на функцията на правдоподобие:

Сега можем лесно да диференцираме израза по
:

И накрая, да разгледаме условието от първи ред — да приравним производната на функцията на нула:

Така че, нашата интуитивна оценка за вероятността за погасение на кредита
беше теоретично обоснована.
Отлично, но какво да правим с такава информация? Ако смятаме, че всеки трети заемател няма да върне парите на банката, то последната неизбежно ще фалира. Така е, но при оценка на вероятността за погасение на кредита с стойност
Не взехме предвид факторите, влияещи на възстановяване на кредита: заплата на заемщика и размер на месечната вноска. Нека си припомним, че по-рано изчислихме вероятността за възстановяване на кредита от всеки клиент, като взехме предвид именно тези фактори. Логично е, че и вероятностите, които получихме, са различни от константата равна
.
Нека да определим правдоподобността на извадките:
Код за изчисления на правдоподобността на извадките
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)Правдоподобността на извадката при константна стойност
:

Правдоподобността на извадката при изчислението на вероятността за погасяване на кредита с оглед на факторите
:


Правдоподобността на извадката с вероятност, изчислена в зависимост от факторите, се оказа по-висока от правдоподобността при константна стойност на вероятността. Какво означава това? То означава, че знанията за факторите позволиха по-точно да се определи вероятността за погасяване на кредита за всеки клиент. Следователно, при отпускането на следващия кредит, по-добре е да се използва моделът за оценка на вероятността за погасяване на задълженията, предложен в края на 3-та част на статията.
Но тогава, ако ни е необходимо да максимизираме функцията на правдоподобността на извадката, защо да не използваме някакъв алгоритъм, който ще генерира вероятности за Вася, Федя и Леша, например, равни на 0.99, 0.99 и 0.01 съответно. Вероятно такъв алгоритъм ще се представи добре при обучителната извадка, тъй като ще приближи стойността на правдоподобността на извадката до
, но, от една страна, такъв алгоритъм вероятно ще има трудности с обобщаващата способност, а от друга страна, този алгоритъм със сигурност няма да бъде линейен. И докато методите за справяне с преобучаването (като слаба обобщаваща способност) явно не влизат в плана на тази статия, по втората точка нека да разгледаме по-подробно. За това е достатъчно да се отговори на един прост въпрос. Може ли вероятността за погасяване на кредита от Вася и Федя да бъде еднаква, имайки предвид известните ни фактори? От здравата логика, разбира се, не може. Заключението е, че за погасяването на кредита Вася ще дава 2.5% от заплатата си на месец, а Федя — почти 27.8%. Също така на графика 2 „Класификация на клиентите“ виждаме, че Вася е значително по-далеч от линията, разделяща класовете, отколкото Федя. И накрая, знаем, че функцията
За Вася и Федя приемат различни стойности: 4.24 за Вася и 1.0 за Федя. Ето ако Федя, например, печелеше значително повече или търсеше по-малък кредит, вероятностите за погасяване на кредита от Вася и Федя щяха да бъдат сходни. С други думи, линейната зависимост не може да бъде измамена. И ако наистина изчислим коефициентите
, а не ги вземем наизуст, можем смело да заявим, че нашите стойности
най-добре позволяват да оценим вероятността от погасяване на кредита от всеки заемополучател, но тъй като се съгласихме да считаме, че определянето на коефициентите
е проведено по всички правила, така и ще мислим — нашите коефициенти дават най-добрата оценка на вероятността 🙂
Обаче отклонихме темата. В тази част трябва да разберем как се определя векторът на теглата
, който е необходим за оценка на вероятността за връщане на кредита от всеки заемополучател.
Кратко резюмираме с какъв арсенал сме на разположение за търсене на коефициентите
:
1. Предполагаем, че зависимостта между целевата променлива (прогнозната стойност) и фактора, оказващ влияние на резултата, е линейна. Поради тази причина се прилага функцията на линейната регресия от вида
, чиято линия разделя обектите (клиентите) на класове
и
или
(клиенти, способни да погасят кредита и неспособни). В нашия случай уравнението има вида
.
2. Използваме функция на обратно логистично преобразуване от вида
за определяне на вероятността за принадлежност на обекта към класа
.
3. Ние разглеждаме нашия обучителен набор като реализация на обобщената Бернулева схема, т.е. за всеки обект се генерира случайна величина, която с вероятност
(съответстваща за всеки обект) приема стойност 1 и с вероятност
– 0.
4. Знаем, че трябва да максимизираме функцията на правдоподобността на извадката с оглед на приетите фактори, за да направим наличния набор най-правдоподобен. С други думи, трябва да намерим такива параметри, при които наборът ще бъде най-правдоподобен. В нашия случай търсеният параметър е вероятността за погасяване на кредита
, която от своя страна зависи от неизвестните коефициенти
. Значи, необходимо е да намерим такъв вектор на теглата
, при който правдоподобността на набора ще бъде максимална.
5. Знаем, че за максимизацията на функцията на правдоподобността на набора можете да използвате метод на максимално правдоподобие. И знаем всички хитри трикове за работа с този метод.
Така се получава многоходовка 🙂
А сега да си припомним, че в самото начало на статията искахме да извлечем два вида функции на загубите Logistic Loss в зависимост от начина на обозначаване на класовете на обектите. Според традицията, в задачите за класификация с два класа, класовете се обозначават като
и
или
. В зависимост от обозначението, на изхода ще бъде съответстваща функция на загубите.
Случай 1. Класификация на обектите на
и 
В началото, при определяне на вероятността за погасяване на дълг от заемателя, която се изчислява в зависимост от фактори и зададени коефициенти,
, приложихме формулата:

В действителност,
това е стойността на функцията на логистичния отговор
при зададен вектор на теглата. 
Тогава нищо не ни пречи да запишем функцията на вероятността така:

Има случаи, когато на някои начинаещи analysts им е трудно да разберат как работи тази функция. Нека разгледаме 4 кратки примера, които ще изяснят всичко:
1. Ако
(т.е. в съответствие с обучаващата извадка, обектът принадлежи към клас +1), а нашият алгоритъм
определя вероятността за принадлежност на обекта към класа
равна на 0.9, тогава този фрагмент от вероятността ще се изчислява така:

2. Ако
, а
, следователно изчислението ще бъде такова:

3. Ако
, а
, следователно изчислението ще бъде такова:

4. Ако
, а
, следователно изчислението ще бъде такова:

Ясно е, че функцията на вероятността ще бъде максимизирана в случаите 1 и 3 или общо — при правилно познати стойности на вероятностите за принадлежност на обекта към класа.
.
С оглед на факта, че при определянето на вероятността обектът принадлежи към класа
не знаем само коефициентите,
така че ние ще ги търсим. Както беше споменато по-горе, това е задача за оптимизация, при която първо ни е необходимо да намерим производната на функцията на вероятността по вектора на теглата.
Но предварително е смислено да опростим задачата: производната ще търсим по логаритъма. функция на правдоподобие.

Защо след логаритмирането, в функцията на логистичната грешка,ние сменихме знака на
на
. Всичко е просто, тъй като в задачите за оценка на качеството на модела е прието да минимизираме стойността на функцията, затова умножихме дясната част на израза по
и следователно вместо максимизиране, сега минимизираме функцията.
Всъщност, пред вас беше трудно извлечена функция на загубите — Logistic Loss за обучаваща извадка с два класа:
и
.
Сега за намирането на коефициентите, ни трябва само да намерим производната функцията на логистичната грешка, и след това, използвайки числени методи за оптимизация, като градиентен спуск или стохастичен градиентен спуск, да открием най-оптималните коефициенти.
Но, предвид вече не малкия обем на статията, предлагам да извършите диференциране сами или, може би, това ще бъде темата на следващата статия с много аритметика, без толкова подробни примери.
Случай 2. Класификация на обекти на
и 
Подходът тук ще бъде същият, както и с класовете,
и
, но самият път към извеждането на функцията на загубите Logistic Loss, ще бъде по-обигран. Затова да започнем. Ще използваме оператор «ако…, то…». Тоест, ако
-ият обект принадлежи на класа
, то за изчисление на вероятността използваме вероятността
, ако обектът принадлежи на класа
, то в вероятността поставяме
Така изглежда функцията на максимална правдоподобност:

Нека разясним как работи това. Ще разгледаме 4 случая:
1. Ако
и
, тогава правдоподобността на извадката "работи" 
2. Ако
и
, тогава правдоподобността на извадката "работи" 
3. Ако
и
, тогава правдоподобността на извадката "работи" 
4. Ако
и
, тогава правдоподобността на извадката "работи" 
Очевидно е, че в 1 и 3 случай, когато вероятностите са били правилно определени от алгоритъма, функцията на правдоподобността ще бъде максимизирана, т.е. именно това искахме да постигнем. Въпреки това, този подход е достатъчно обемен и по-нататък ще разгледаме по-компактна форма. Но за начало, логаритмизираме функцията на правдоподобността, заменяйки знака, тъй като сега ще я минимизираме.

Заместим вместо
израз
:

Оптимизираме дясното слагаемо под логаритъма, използвайки прости аритметични техники и получаваме:

А сега е време да се отървем от оператора «ако…, то…». Забележете, че когато обектът
принадлежи към класа
, тогава в израза под логаритъма, в знаменателя,
е повдигнат на степен
, ако обектът принадлежи на класа
, така че $e$ е повдигнат на степен
. Следователно, записа на степента може да се опрости – да комбинираме двата случая в един:
. Тогава функцията на логистична загуба приема вида:

Съгласно правилата за логаритмизация, обръщаме дробта и извеждаме знака "
" (минус) пред логаритъма, получаваме:

Пред вас е функцията на загубата logistic Loss, която се прилага в обучаващи извадки с обекти, принадлежащи на класове:
и
.
На този етап се разделям и приключваме статията.
Предишната работа на автора – «Превеждаме уравнението на линейната регресия в матрична форма»
Допълнителни материали
1. Литература
1) Прикладен регресионен анализ / Н. Дрейпер, Г. Смит – 2-ро издание – М.: Финанси и статистика, 1986 (превод от английски)
2) Теория на вероятностите и математическа статистика / В.Е. Гмурман – 9-то издание – М.: Висша школа, 2003
3) Теория на вероятностите / Н.И. Чернова – Новосибирск: Новосибирски държавен университет, 2007
4) Бизнес-анализ: от данни до знания / Паклин Н. Б., Орешков В. И. – 2-ро издание – Санкт-Петербург: Питер, 2013
5) Data Science Наука за данните от нулата / Джоел Грас – Санкт-Петербург: БХВ Петербург, 2017
6) Практическа статистика за специалисти в Data Science / П.Брюс, Е.Брюс – Санкт-Петербург: БХВ Петербург, 2018
2. Лекции, курсове (видео)
1)
2)
3)
4)
5)
3. Интернет-източници
1)
2)
3)
4)
5)
6)
7)
8)
Източник: habr.com

в функцията на логистичния отговор 
функции Logistic Loss
:

, стойността на функцията
ще бъде положителен от
до
. Следователно можем да считаме, че вероятността за погасяване на кредита е в рамките на
. Колкото по-висока е стойността на функцията, толкова по-висока е вероятността.
или
, стойността на функцията ще бъде отрицателна от
до
. Тогава ще считаме, че вероятността за погасяване на задължението е в рамките на
и, колкото по-голяма е по модул стойността на функцията, толкова по-висока е нашата увереност.
ще бъде равна на
и вероятността за погасяване на кредита е равна на
.


в логистичната функция на отговор
и 
и 