В тази статия ще анализираме теоретичните изчисления на трансформацията функции на линейна регресия в функция за обратна логит трансформация (иначе наричана функция на логистичен отговор). След това, използвайки арсенала метод на максимална вероятност, в съответствие с логистичния регресионен модел, извеждаме функцията на загубата Логистична загуба, или с други думи, ще дефинираме функция, с която се избират параметрите на тегловния вектор в логистичния регресионен модел .
Описание на статията:
- Нека повторим линейната зависимост между две променливи
- Нека идентифицираме необходимостта от трансформация функции на линейна регресия в функция за логистичен отговор
- Нека извършим трансформациите и изхода функция за логистичен отговор
- Нека се опитаме да разберем защо методът на най-малките квадрати е лош при избора на параметри функции Логистична загуба
- употреба метод на максимална вероятност за определяне функции за избор на параметри :
5.1. Случай 1: функция Логистична загуба за обекти с класови обозначения 0 и 1:
5.2. Случай 2: функция Логистична загуба за обекти с класови обозначения -1 и +1:
Статията е пълна с прости примери, в които всички изчисления се правят лесно устно или на хартия; в някои случаи може да се наложи калкулатор. Така че се пригответе :)
Тази статия е предназначена предимно за специалисти по данни с начално ниво на познания в основите на машинното обучение.
Статията също така ще предостави код за чертане на графики и изчисления. Целият код е написан на езика python 2.7. Позволете ми да обясня предварително за „новостта“ на използваната версия - това е едно от условията за преминаване на добре познатия курс от Yandex на също толкова добре позната платформа за онлайн обучение 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 RUR до 3 5.000 RUR и приемем, че в посочения диапазон на заплатите зависимостта на размера на месечното плащане от размера на заплатата е линейна. Да кажем, че за посочения диапазон от заплати беше разкрито, че съотношението заплата към плащане не може да падне под XNUMX и кредитополучателят все още трябва да има резерв от XNUMX рубли. И само в този случай ще приемем, че кредитополучателят ще изплати заема на банката. Тогава уравнението на линейната регресия ще приеме формата:
където , , , - заплата -ти кредитополучател, - плащане на заема -ти кредитополучател.
Заместване на заплата и плащане на кредит с фиксирани параметри в уравнението Можете да решите дали да издадете или да откажете заем.
Гледайки напред, отбелязваме, че с дадените параметри функция на линейна регресия, използвано в функции за логистичен отговор ще произведе големи стойности, които ще усложнят изчисленията за определяне на вероятностите за изплащане на заема. Затова се предлага да намалим нашите коефициенти, да речем, 25.000 XNUMX пъти. Тази трансформация в коефициентите няма да промени решението за издаване на заем. Нека запомним тази точка за в бъдеще, но сега, за да стане още по-ясно за какво говорим, нека разгледаме ситуацията с трима потенциални кредитополучатели.
Таблица 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 рубли. Установихме, че за да одобрим заема, заплатата на Вася трябва да надвишава три пъти сумата на плащането и все още трябва да остават XNUMX RUR. Вася отговаря на това изискване: . Остават дори 106.000 XNUMX RUR. Въпреки факта, че при изчисляване намалихме коефициентите 25.000 XNUMX пъти, резултатът беше един и същ - кредитът може да бъде одобрен. Федя също ще получи заем, но Леша, въпреки факта, че получава най-много, ще трябва да ограничи апетита си.
Нека начертаем графика за този случай.
Графика 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-измерен равнина и коефициенти няма да бъдем извадени от нищото, а изведени по всички правила и на базата на натрупани данни за кредитополучателите, които са или не са погасили кредита. И наистина, имайте предвид, че сега избираме кредитополучатели, като използваме вече известни коефициенти . Всъщност задачата на логистичния регресионен модел е именно да определи параметрите , при която стойността на функцията на загубите Логистична загуба ще клони към минимума. Но за това как се изчислява векторът , ще разберем повече в 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 RUR да може да дава 100 RUR на банката всеки месец е близо до 0.3%. Между другото, трябва да разберем, че банката може да издаде заем на Леша, ако политиката на банката предвижда например кредитиране на клиенти с вероятност за изплащане на заема над, да речем, XNUMX. Просто в този случай банката ще създаде по-голям резерв за евентуални загуби.
Трябва също да се отбележи, че съотношението заплата към плащане от най-малко 3 и с марж от 5.000 RUR е взето от тавана. Следователно не можахме да използваме вектора на теглата в оригиналната му форма . Трябваше да намалим значително коефициентите и в този случай разделихме всеки коефициент на 25.000 XNUMX, тоест по същество коригирахме резултата. Но това беше направено специално, за да се опрости разбирането на материала в началния етап. В живота няма да има нужда да измисляме и настройваме коефициенти, а да ги намираме. В следващите раздели на статията ще изведем уравненията, с които се избират параметрите .
04. Метод на най-малките квадрати за определяне на вектора на теглата във функцията за логистичен отговор
Вече знаем този метод за избор на вектор от тегла като метод на най-малките квадрати (LSM) и всъщност, защо тогава не го използваме в проблеми с двоична класификация? Всъщност нищо не ви пречи да използвате MNC, само този метод при задачи за класификация дава резултати, които са по-малко точни от Логистична загуба. Има теоретична основа за това. Нека първо да разгледаме един прост пример.
Да приемем, че нашите модели (използвайки MSE и Логистична загуба) вече са започнали да избират вектора на теглата и спряхме изчислението на някаква стъпка. Няма значение дали в средата, в края или в началото, основното е, че вече имаме някои стойности на вектора на теглата и нека приемем, че на тази стъпка векторът на теглата и за двата модела няма разлики. След това вземете получените тежести и ги заменете с функция за логистичен отговор () за някакъв обект, който принадлежи на класа . Разглеждаме два случая, когато в съответствие с избрания вектор от тегла нашият модел е много сгрешен и обратното - моделът е много уверен, че обектът принадлежи към класа . Да видим какви глоби ще бъдат издадени при използване MNC и Логистична загуба.
Код за изчисляване на неустойки в зависимост от използваната функция за загуба
# класс объекта
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
Санкция при използване MNC ще бъде:
Санкция при използване Логистична загуба ще бъде:
Случай на силно доверие — моделът присвоява обект на клас с вероятност 0,99
Санкция при използване MNC ще бъде:
Санкция при използване Логистична загуба ще бъде:
Този пример илюстрира добре, че в случай на груба грешка функцията на загуба Загуба на регистрационен файл наказва модела значително повече от 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. Ние знаем какво да максимизираме примерни функции на вероятността Можете да използвате метод на максимална вероятност. И ние знаем всички трудни трикове за работа с този метод.
Ето как се оказва многоетапно движение :)
Спомнете си, че в самото начало на статията искахме да изведем два типа функции на загуба Логистична загуба в зависимост от това как са обозначени класовете обекти. Случи се така, че в задачи за класификация с два класа, класовете се означават като и или . В зависимост от нотацията изходът ще има съответна функция на загуба.
Казус 1. Класификация на обектите в и
По-рано, при определяне на вероятността от извадка, в която вероятността за изплащане на дълга от кредитополучателя се изчислява въз основа на фактори и дадени коефициенти , приложихме формулата:
Всъщност е смисълът функции за логистичен отговор за даден вектор от тегла
Тогава нищо не ни пречи да напишем примерната функция на вероятността, както следва:
Случва се понякога за някои начинаещи анализатори да е трудно веднага да разберат как работи тази функция. Нека да разгледаме 4 кратки примера, които ще изяснят всичко:
1. ако (т.е. според обучителната извадка обектът принадлежи към клас +1) и нашия алгоритъм определя вероятността за класифициране на обект към клас равно на 0.9, тогава тази част от вероятността на извадката ще бъде изчислена, както следва:
2. ако И , тогава изчислението ще бъде така:
3. ако И , тогава изчислението ще бъде така:
4. ако И , тогава изчислението ще бъде така:
Очевидно е, че функцията на вероятността ще бъде максимизирана в случаи 1 и 3 или в общия случай - с правилно познати стойности на вероятностите за присвояване на обект на клас .
Поради факта, че при определяне на вероятността за присвояване на обект към клас Не знаем само коефициентите , тогава ще ги търсим. Както бе споменато по-горе, това е проблем за оптимизация, при който първо трябва да намерим производната на функцията на вероятността по отношение на вектора на теглата . Първо обаче има смисъл да опростим задачата за себе си: ще търсим производната на логаритъма функции на вероятността.
Защо след логаритъм, в функции за логистична грешка, сменихме знака от на . Всичко е просто, тъй като при проблеми с оценката на качеството на модел е обичайно да се минимизира стойността на функция, ние умножихме дясната страна на израза по и съответно вместо да максимизираме, сега минимизираме функцията.
Всъщност точно сега, пред очите ви, функцията на загубата беше старателно изведена - Логистична загуба за учебен комплект с два класа: и .
Сега, за да намерим коефициентите, просто трябва да намерим производната функции за логистична грешка и след това, използвайки числени методи за оптимизация, като градиентно спускане или стохастично градиентно спускане, изберете най-оптималните коефициенти . Но предвид значителния обем на статията се предлага да извършите диференциацията сами или може би това ще бъде тема за следващата статия с много аритметика без толкова подробни примери.
Казус 2. Класификация на обектите в и
Подходът тук ще бъде същият като при класовете и , но самият път до изхода на функцията за загуба Логистична загуба, ще бъде по-богато украсен. Да започваме. За функцията на вероятността ще използваме оператора „ако... тогава...“. Тоест, ако Обектът принадлежи към класа , тогава за изчисляване на вероятността за извадката използваме вероятността , ако обектът принадлежи към класа , след което заместваме във вероятността . Ето как изглежда функцията на вероятността:
Нека опишем на пръсти как работи. Нека разгледаме 4 случая:
1. ако и , тогава вероятността за вземане на проби ще „отиде“
2. ако и , тогава вероятността за вземане на проби ще „отиде“
3. ако и , тогава вероятността за вземане на проби ще „отиде“
4. ако и , тогава вероятността за вземане на проби ще „отиде“
Очевидно е, че в случаи 1 и 3, когато вероятностите са правилно определени от алгоритъма, функция на вероятността ще бъде максимизиран, тоест точно това искахме да получим. Този подход обаче е доста тромав и по-нататък ще разгледаме по-компактна нотация. Но първо, нека логаритмуваме функцията на вероятността с промяна на знака, тъй като сега ще я минимизираме.
Нека заместим вместо това изразяване :
Нека опростим правилния член под логаритъма с помощта на прости аритметични техники и да получим:
Сега е време да се отървете от оператора „ако... тогава...“. Имайте предвид, че когато обект принадлежи към класа , след това в израза под логаритъма, в знаменателя, издигнат до властта , ако обектът принадлежи към класа , тогава $e$ се повдига на степен . Следователно нотацията за степента може да бъде опростена чрез комбиниране на двата случая в един: , след това функция за логистична грешка ще приеме формата:
В съответствие с правилата на логаритъма обръщаме фракцията и поставяме знака "" (минус) за логаритъм, получаваме:
Ето функцията на загубата логистична загуба, който се използва в набора за обучение с обекти, присвоени на класове: и .
Е, на този етап си тръгвам и приключваме статията.
Помощни материали
1. Литература
1) Приложен регресионен анализ / Н. Дрейпър, Г. Смит - 2-ро изд. – М.: Финанси и статистика, 1986 (превод от английски)
2) Теория на вероятностите и математическа статистика / V.E. Гмурман - 9-то изд. - М.: Висше училище, 2003
3) Теория на вероятностите / N.I. Чернова - Новосибирск: Новосибирски държавен университет, 2007
4) Бизнес анализи: от данни към знания / Паклин Н. Б., Орешков В. И. - 2-ро изд. — Санкт Петербург: Питър, 2013
5) Наука за данни Наука за данни от нулата / Джоел Грас - Санкт Петербург: BHV Петербург, 2017 г.
6) Практическа статистика за специалисти по Data Science / П. Брус, Е. Брус - Санкт Петербург: BHV Петербург, 2018 г.
2. Лекции, курсове (видео)
1)
2)
3)
4)
5)
3. Интернет източници
1)
2)
3)
4)
6)
7)
8)
Източник: www.habr.com