Преживявайки логистична регресия

Преживявайки логистична регресия

В тази статия ще разгледаме теоретичните изчисления за преобразуването на функциите на линейната регресия в на функцията на обратното логистично преобразуване (известна също като функция на логистичния отговор). След това, използвайки арсенала на метода на максималната достоверност, в съответствие с модела на логистичната регресия, ще изведем функцията на загубата Logistic Loss, или с други думи, ще определим функция, с която в модела на логистичната регресия се подбират параметрите на вектора на теглата Преживявайки логистична регресия.

План на статията:

  1. Ще повторим за линейната зависимост между две променливи
  2. Идентифицираме необходимостта от преобразуване на на функциите на линейната регресия Преживявайки логистична регресия в функцията на логистичния отговор Преживявайки логистична регресия
  3. Ще извършим преобразувания и ще изведем функцията на логистичния отговор
  4. Ще се опитаме да разберем защо методът на най-малките квадрати е недостатъчен при подбор на параметри Преживявайки логистична регресия функции Logistic Loss
  5. Използваме метод на максимално правдоподобие за определяне функции за подбор на параметри Преживявайки логистична регресия:

    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 и Федя). Иначе казано, нашата линия разделя заемателите на два класа. Нека ги обозначим по следния начин: в класа Преживявайки логистична регресия ще отнесем онези заематели, които най-вероятно ще върнат кредита, а в класа Преживявайки логистична регресия или Преживявайки логистична регресия ще отнесем онези заематели, които най-вероятно няма да могат да върнат кредита.

Обобщим изводите от този прост пример. Нека вземем точка Преживявайки логистична регресия и като подставим координатите на точката в съответното уравнение на линията Преживявайки логистична регресия, нека разгледаме три варианта:

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

Сега, представете си, че имаме не два фактора, а десетки, а заемателите не са трима, а хиляди. Тогава вместо права ще имаме 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) Логистична регресия. Отворен курс ODS, Юрий Кашницки

4) Лекция 4, Евгений Соколов (от 47-ата минута на видео)

5) Логистична регресия, Вячеслав Воронцов

3. Интернет-източници

1) Линейни модели за класификация и регресия

2) Как лесно да разберем логистичната регресия

3) Логистична функция на грешката

4) Независими изпитвания и формула на Бернули

5) Баладата за ММП

6) Метод на максимално правдоподобие

7) Формули и свойства на логаритмите

8) Защо числото Преживявайки логистична регресия?

9) Линеен класификатор

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster