Пережовуючи логістичну регресію

Пережовуючи логістичну регресію

У цій статті ми будемо розбирати теоретичні викладки перетворення функції лінійної регресії в функцію зворотного логіт-перетворення (інакше кажуть, функцію логістичного відгуку). Потім, скориставшись арсеналом методу максимальної правдоподібності, відповідно до моделі логістичної регресії, виведемо функцію втрат Logistic Loss, або іншими словами, ми визначимо функцію, за допомогою якої в моделі логістичної регресії підбираються параметри вектора ваг Пережовуючи логістичну регресію.

План статті:

  1. Повторимо про прямолінійну залежність між двома змінними
  2. Виявимо необхідність перетворення функції лінійної регресії Пережовуючи логістичну регресію в функцію логістичного відгуку Пережовуючи логістичну регресію
  3. Проведемо перетворення та виведемо функцію логістичного відгуку
  4. Спробуємо зрозуміти, чим поганий метод найменших квадратів при доборі параметрів Пережовуючи логістичну регресію функції Logistic Loss
  5. використовуємо метод максимальної правдоподібності для визначення функції підбору параметрів Пережовуючи логістичну регресію:

    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()

Отже, наша пряма, побудована відповідно до функції Пережовуючи логістичну регресію, відокремлює «поганих» позичальників від «хороших» Ті позичальники, у кого бажання не збігаються з можливостями знаходяться вище за пряму (Льоша), ті ж, хто здатний згідно з параметрами нашої моделі, повернути кредит, перебувають під прямою (Вася та Федя). Інакше можна сказати так - наша пряма поділяє позичальників на два класи. Позначимо їх так: до класу Пережовуючи логістичну регресію віднесемо тих позичальників, які швидше за все повернуть кредит, до класу Пережовуючи логістичну регресію або Пережовуючи логістичну регресію віднесемо тих позичальників, які, швидше за все, не зможуть повернути кредит.

Узагальним висновки з цього простенького прикладу. Візьмемо крапку Пережовуючи логістичну регресію і, підставляючи координати точки у відповідне рівняння прямої Пережовуючи логістичну регресію, Розглянемо три варіанти:

  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['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) Логістична регресія. Відкритий курс ODS, Yury Kashnitsky

4) Лекція 4, Євген Соколов (з 47 хвилин відео)

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

3. Інтернет-джерела

1) Лінійні моделі класифікації та регресії

2) Як легко зрозуміти логістичну регресію

3) Логістична функція помилки

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

5) Балада про ММП

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

7) Формули та властивості логарифмів

8) Чому число Пережовуючи логістичну регресію?

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

Джерело: habr.com

Додати коментар або відгук