У цій статті ми будемо розбирати теоретичні викладки перетворення функції лінійної регресії в функцію зворотного логіт-перетворення (інакше кажуть, функцію логістичного відгуку). Потім, скориставшись арсеналом методу максимальної правдоподібності, відповідно до моделі логістичної регресії, виведемо функцію втрат Logistic Loss, або іншими словами, ми визначимо функцію, за допомогою якої в моделі логістичної регресії підбираються параметри вектора ваг .
План статті:
- Повторимо про прямолінійну залежність між двома змінними
- Виявимо необхідність перетворення функції лінійної регресії в функцію логістичного відгуку
- Проведемо перетворення та виведемо функцію логістичного відгуку
- Спробуємо зрозуміти, чим поганий метод найменших квадратів при доборі параметрів функції Logistic Loss
- використовуємо метод максимальної правдоподібності для визначення функції підбору параметрів :
5.1. Випадок 1: функція Logistic Loss для об'єктів із позначенням класів 0 и 1:
5.2. Випадок 2: функція Logistic Loss для об'єктів із позначенням класів -1 и +1:
Стаття рясніє простими прикладами, де всі розрахунки легко зробити усно чи папері, у деяких випадках може знадобитися калькулятор. Так що підготуйтеся 🙂
Ця стаття більшою мірою розрахована на датасайнтистів з початковим рівнем знань в основах машинного навчання.
У статті також буде наведено код для відображення графіків та розрахунків. Весь код написаний мовою пітон 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 = 'Actual results')
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']]
Відповідно до даних таблиці, Вася при зарплаті 120.000Р хоче отримати такий кредит, щоб щомісячного гасити його по 3.000Р. Нами було визначено, що для схвалення кредиту розмір заробітної плати Васі повинен перевищувати в три рази розмір платежу, і щоб ще залишалося 5.000р. Цій вимогі Вася задовольняє: . Залишається навіть 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 = '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()
Отже, наша пряма, побудована відповідно до функції , відокремлює «поганих» позичальників від «хороших» Ті позичальники, у кого бажання не збігаються з можливостями знаходяться вище за пряму (Льоша), ті ж, хто здатний згідно з параметрами нашої моделі, повернути кредит, перебувають під прямою (Вася та Федя). Інакше можна сказати так - наша пряма поділяє позичальників на два класи. Позначимо їх так: до класу віднесемо тих позичальників, які швидше за все повернуть кредит, до класу або віднесемо тих позичальників, які, швидше за все, не зможуть повернути кредит.
Узагальним висновки з цього простенького прикладу. Візьмемо крапку і, підставляючи координати точки у відповідне рівняння прямої , Розглянемо три варіанти:
- Якщо точка знаходиться під прямою, і ми відносимо її до класу , то значення функції буде позитивним від до . Значить ми можемо вважати, що ймовірність погашення кредиту знаходиться в межах . Чим більше значення функції, тим вища ймовірність.
- Якщо точка знаходиться над прямою і ми відносимо її до класу або , то значення функції буде негативним від до . Тоді ми вважатимемо, що ймовірність погашення заборгованості знаходиться в межах і що більше за модулем значення функції, то вище наша впевненість.
- Крапка знаходиться на прямій, на межі між двома класами. У такому разі значення функції буде одно та ймовірність погашення кредиту дорівнює .
Тепер уявімо, що у нас не два фактори, а десятки, позичальників не три, а тисячі. Тоді замість прямої у нас буде 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['Probability'] = proba
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision', 'Probability']]
Отже, можливість повернення кредиту ми визначили. Загалом це схоже на правду.
Справді, ймовірність того, що Вася при зарплаті в 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 становитиме:
Цей приклад добре ілюструє, що при грубій помилці функція втрат Журнал втрати штрафує модель значно сильніше, ніж MSE. Давайте тепер розберемося, якими є теоретичні передумови використання функції втрат Журнал втрати у завданнях класифікації.
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. Класифікація об'єктів на и
Раніше, щодо правдоподібності вибірки, у якому ймовірність погашення заборгованості позичальником розраховувалася виходячи з чинників і заданих коефіцієнтів , ми застосували формулу:
Насправді - Це значення функції логістичного відгуку при заданому векторі ваг
Тоді нам ніщо не заважає записати функцію правдоподібності вибірки так:
Буває так, що іноді, деяким аналітикам-початківцям складно відразу зрозуміти, як ця функція працює. Давайте розглянемо 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)
4)
6)
7)
8)
Джерело: habr.com