Бұл мақалада біз түрлендірудің теориялық есептеулерін талдаймыз сызықтық регрессия функциялары в кері логистикалық түрлендіру функциясы (басқаша логистикалық жауап функциясы деп аталады). Содан кейін арсеналды пайдалану максималды ықтималдық әдісі, логистикалық регрессия үлгісіне сәйкес біз жоғалту функциясын аламыз Логистикалық шығын, немесе басқаша айтқанда, логистикалық регрессия үлгісінде салмақ векторының параметрлері таңдалатын функцияны анықтаймыз. .
Мақаланың қысқаша мазмұны:
- Екі айнымалы арасындағы сызықтық байланысты қайталайық
- Трансформация қажеттілігін анықтайық сызықтық регрессия функциялары в логистикалық жауап функциясы
- Түрлендірулер мен шығыстарды орындайық логистикалық жауап функциясы
- Параметрлерді таңдау кезінде ең кіші квадраттар әдісі неге нашар екенін түсінуге тырысайық функциялары Логистикалық шығын
- Біз қолданамыз максималды ықтималдық әдісі анықтау үшін параметрді таңдау функциялары :
5.1. 1-жағдай: функция Логистикалық шығын класс белгілері бар объектілер үшін 0 и 1:
5.2. 2-жағдай: функция Логистикалық шығын класс белгілері бар объектілер үшін -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 рубльге дейінгі жалақы диапазонын алайық және көрсетілген жалақы диапазонында айлық төлем мөлшерінің жалақы мөлшеріне тәуелділігі сызықтық деп есептейік. Айлық жалақының көрсетілген диапазоны үшін жалақының төлемге қатынасы XNUMX-тен төмен түспейтіні және қарыз алушының резервінде әлі де XNUMX рубль болуы керек екендігі анықталды делік. Және тек осы жағдайда ғана қарыз алушы банкке несиені қайтарады деп есептейміз. Сонда сызықтық регрессия теңдеуі келесі формада болады:
қайда , , , - жалақы - қарыз алушы, - несие төлеу - қарыз алушы.
Жалақы мен несие төлемін белгіленген параметрлермен теңдеуде ауыстыру Несие беру немесе одан бас тарту туралы шешім қабылдауға болады.
Болашаққа қарап, біз берілген параметрлермен атап өтеміз сызықтық регрессия функциясы, ішінде қолданылады логистикалық жауап беру функциялары несиені өтеу ықтималдығын анықтау үшін есептеулерді қиындататын үлкен мәндер шығарады. Сондықтан біздің коэффициенттерімізді, айталық, 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 XNUMX рубль төлей алатындай етіп алғысы келеді. Біз несиені мақұлдау үшін Васяның жалақысы төлем сомасынан үш есе асуы керек екенін және әлі де XNUMX XNUMX рубль қалуы керек екенін анықтадық. Вася бұл талапты қанағаттандырады: . Тіпті 106.000 XNUMX рубль қалды. Есептеу кезінде бұған қарамастан мүмкіндіктерді азайттық 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()
Сонымен, функцияға сәйкес салынған түзу сызығымыз , «жаман» қарыз алушыларды «жақсылардан» бөледі. Қалауы мүмкіндіктеріне сәйкес келмейтін қарыз алушылар сызықтан жоғары (Леша), ал біздің үлгінің параметрлері бойынша несиені өтей алатындар сызықтан төмен (Вася мен Федя). Басқаша айтқанда, біз мынаны айта аламыз: біздің тікелей желі қарыз алушыларды екі сыныпқа бөледі. Оларды былай белгілейік: сыныпқа Несиені өтеу ықтималдығы жоғары қарыз алушыларды санатқа жатқызамыз немесе Біз несиені өтей алмайтын қарыз алушыларды қосамыз.
Осы қарапайым мысалдан қорытындыларды қорытындылайық. Бір нүктені алайық және нүктенің координаталарын түзудің сәйкес теңдеуіне ауыстыру , үш нұсқаны қарастырыңыз:
- Егер нүкте түзудің астында болса және оны сыныпқа тағайындаймыз , содан кейін функцияның мәні бастап оң болады қарай . Бұл несиені өтеу ықтималдығы шегінде деп болжауға болатынын білдіреді . Функция мәні неғұрлым үлкен болса, ықтималдық соғұрлым жоғары болады.
- Егер нүкте сызықтан жоғары болса және оны сыныпқа тағайындаймыз немесе , онда функцияның мәні бастап теріс болады қарай . Сонда біз қарызды өтеу ықтималдығы шегінде деп есептейміз және функцияның абсолютті мәні неғұрлым көп болса, соғұрлым біздің сенімділігіміз жоғары болады.
- Нүкте түзу сызықта, екі кластың шекарасында. Бұл жағдайда функцияның мәні тең болады және несиені қайтару ықтималдығы тең .
Енді бізде екі емес, ондаған, үш емес, мыңдаған қарыз алушы бар деп елестетіп көрейік. Сонда түзу сызықтың орнына бізде болады м-өлшемді жазықтық және коэффициенттер бізді ауадан шығармайды, бірақ барлық ережелерге сәйкес және несиені өтеген немесе өтемеген қарыз алушылар туралы жинақталған деректер негізінде алынған. Шынында да, біз қазірдің өзінде белгілі коэффициенттерді пайдаланып қарыз алушыларды таңдап жатқанымызды ескеріңіз . Шын мәнінде, логистикалық регрессия моделінің міндеті дәл параметрлерді анықтау болып табылады , онда жоғалту функциясының мәні Логистикалық шығын минимумға бейім болады. Бірақ вектор қалай есептелетіні туралы , мақаланың 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 рубль беру ықтималдығы XNUMX% -ға жақын. Айтпақшы, егер банк саясаты, мысалы, несиені қайтару ықтималдығы, айталық, XNUMX-тен асатын клиенттерге несие беруді қарастырса, банк Лешаға несие бере алатынын түсінуіміз керек. Тек бұл жағдайда банк ықтимал шығындар үшін көбірек резерв жасайды.
Сондай-ақ, жалақының төлемге қатынасы кем дегенде 3 және 5.000 XNUMX рубль маржамен төбеден алынғанын атап өткен жөн. Сондықтан салмақтар векторын бастапқы түрінде пайдалана алмадық . Бізге коэффициенттерді айтарлықтай азайту керек болды және бұл жағдайда біз әрбір коэффициентті 25.000 XNUMX-ға бөлдік, яғни мәні бойынша нәтижені түзеттік. Бірақ бұл бастапқы кезеңде материалды түсінуді жеңілдету үшін арнайы жасалды. Өмірде бізге коэффициенттерді ойлап табудың және түзетудің қажеті жоқ, бірақ оларды табу керек. Мақаланың келесі бөлімдерінде біз параметрлер таңдалатын теңдеулерді шығарамыз .
04. Салмақтардың векторын анықтаудың ең кіші квадраттар әдісі логистикалық жауап функциясында
Біз салмақтар векторын таңдаудың бұл әдісін бұрыннан білеміз , сияқты Ең кіші квадраттар әдісі (LSM) және шын мәнінде, неге біз оны екілік жіктеу мәселелерінде қолданбаймыз? Шынында да, пайдалануға ештеңе кедергі болмайды MNC, классификациялық есептердегі осы әдіс қана дәлдігі төмен нәтижелер береді Логистикалық шығын. Мұның теориялық негізі бар. Алдымен бір қарапайым мысалды қарастырайық.
Біздің үлгілеріміз (пайдалану КМК и Логистикалық шығын) салмақтар векторын таңдай бастады және біз бір қадамда есептеуді тоқтаттық. Ортасында, соңында немесе басында маңызды емес, ең бастысы, бізде салмақтар векторының кейбір мәндері бар және осы қадамда салмақ векторы деп есептейік. екі модель үшін де айырмашылықтар жоқ. Содан кейін алынған салмақтарды алыңыз және оларды ауыстырыңыз логистикалық жауап функциясы () сыныпқа жататын кейбір нысан үшін . Таңдалған салмақ векторына сәйкес біздің модель өте қателескен және керісінше екі жағдайды қарастырамыз - модель объектінің классқа жататынына өте сенімді. . Қолданған кезде қандай айыппұлдар салынатынын көрейік 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 болады:
Қолдану үшін айыппұл Логистикалық шығын болады:
Бұл мысал өрескел қате болған жағдайда жоғалту функциясын жақсы көрсетеді Log Los қарағанда модельді айтарлықтай көп жазалайды КМК. Енді жоғалту функциясын қолданудың теориялық негізі не екенін түсінейік Log Los жіктеу мәселелерінде.
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) Ықтималдықтар теориясы және математикалық статистика / В.Е. Гмурман - 9-шы басылым. - М.: Жоғары мектеп, 2003 ж
3) Ықтималдық теориясы / Н.И. Чернова - Новосибирск: Новосибирск мемлекеттік университеті, 2007 ж
4) Бизнес-аналитика: деректерден білімге дейін / Паклин Н.Б., Орешков В.И. - 2-ші басылым. — Санкт-Петербург: Петр, 2013 ж
5) Деректер туралы ғылым нөлден бастап деректер ғылымы / Джоэль Грас - Санкт-Петербург: BHV Санкт-Петербург, 2017 ж.
6) Деректер ғылымының мамандарына арналған практикалық статистика / П. Брюс, Э. Брюс – Санкт-Петербург: BHV Petersburg, 2018 ж.
2. Дәрістер, курстар (бейне)
1)
2)
3)
4)
5)
3. Интернет көздері
1)
2)
3)
4)
6)
7)
Ақпарат көзі: www.habr.com