Pada artikel ini, kita akan menganalisis perhitungan teoritis transformasi fungsi regresi linier в fungsi transformasi logit terbalik (atau disebut fungsi respons logistik). Lalu, menggunakan persenjataan metode kemungkinan maksimum, sesuai dengan model regresi logistik, kita memperoleh fungsi kerugian Kerugian Logistik, atau dengan kata lain, kita akan mendefinisikan fungsi yang parameter vektor bobotnya dipilih dalam model regresi logistik .
Garis besar artikel:
- Mari kita ulangi hubungan linier antara dua variabel
- Mari kita identifikasi perlunya transformasi fungsi regresi linier в fungsi respons logistik
- Mari kita lakukan transformasi dan keluaran fungsi respons logistik
- Mari kita coba memahami mengapa metode kuadrat terkecil buruk saat memilih parameter fungsi Kerugian Logistik
- Gunakan metode kemungkinan maksimum untuk menentukan fungsi pemilihan parameter :
5.1. Kasus 1: fungsi Kerugian Logistik untuk objek dengan sebutan kelas 0 и 1:
5.2. Kasus 2: fungsi Kerugian Logistik untuk objek dengan sebutan kelas -1 и +1:
Artikel ini penuh dengan contoh-contoh sederhana di mana semua perhitungan mudah dilakukan secara lisan atau di atas kertas, dalam beberapa kasus, kalkulator mungkin diperlukan. Jadi bersiaplah :)
Artikel ini terutama ditujukan bagi data scientist yang memiliki pengetahuan tingkat awal tentang dasar-dasar pembelajaran mesin.
Artikel ini juga akan memberikan kode untuk menggambar grafik dan perhitungan. Semua kode ditulis dalam bahasa tersebut ular piton 2.7. Izinkan saya menjelaskan terlebih dahulu tentang "kebaruan" dari versi yang digunakan - ini adalah salah satu syarat untuk mengambil kursus terkenal dari Yandex pada platform pendidikan online yang sama terkenalnya Coursera, dan, seperti yang bisa diasumsikan, materi disiapkan berdasarkan kursus ini.
01. Ketergantungan garis lurus
Cukup masuk akal untuk mengajukan pertanyaan - apa hubungannya ketergantungan linier dan regresi logistik?
Itu mudah! Regresi logistik merupakan salah satu model yang termasuk dalam pengklasifikasi linier. Dengan kata sederhana, tugas pengklasifikasi linier adalah memprediksi nilai target dari variabel (regressor) . Hal ini diyakini adanya ketergantungan antar karakteristik dan nilai sasaran linier. Oleh karena itu nama pengklasifikasi - linier. Secara kasar, model regresi logistik didasarkan pada asumsi bahwa terdapat hubungan linier antar karakteristik dan nilai sasaran . Inilah hubungannya.
Ada contoh pertama di studio, dan ini benar, tentang ketergantungan bujursangkar dari besaran yang dipelajari. Dalam proses mempersiapkan artikel, saya menemukan contoh yang telah membuat banyak orang gelisah - ketergantungan arus pada tegangan (“Analisis regresi terapan”, N. Draper, G. Smith). Kami akan melihatnya di sini juga.
Menurut Hukum Ohm:
Dimana - kekuatan saat ini, - tegangan, - perlawanan.
Jika kita tidak mengetahuinya Hukum Ohm, maka kita dapat menemukan ketergantungannya secara empiris dengan mengubah dan mengukur , sambil mendukung tetap. Kemudian kita akan melihat grafik ketergantungannya dari memberikan garis yang kurang lebih lurus melalui titik asal. Kita mengatakan “lebih atau kurang” karena, meskipun hubungannya benar-benar akurat, pengukuran kita mungkin mengandung kesalahan kecil, dan oleh karena itu titik-titik pada grafik mungkin tidak tepat berada pada garis, namun tersebar di sekelilingnya secara acak.
Grafik 1 “Ketergantungan” dari »
Kode gambar bagan
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. Perlunya mentransformasikan persamaan regresi linier
Mari kita lihat contoh lainnya. Bayangkan kita bekerja di bank dan tugas kita adalah menentukan kemungkinan peminjam membayar kembali pinjamannya tergantung pada faktor-faktor tertentu. Untuk menyederhanakan tugas, kami hanya akan mempertimbangkan dua faktor: gaji bulanan peminjam dan jumlah pembayaran pinjaman bulanan.
Tugasnya sangat bersyarat, tetapi dengan contoh ini kita dapat memahami mengapa penggunaannya tidak cukup fungsi regresi linier, dan juga mencari tahu transformasi apa yang perlu dilakukan dengan fungsi tersebut.
Mari kembali ke contoh. Dapat dipahami bahwa semakin tinggi gajinya, semakin banyak pula yang dapat dialokasikan peminjam setiap bulannya untuk membayar kembali pinjamannya. Pada saat yang sama, untuk kisaran gaji tertentu, hubungan ini akan cukup linier. Sebagai contoh, mari kita ambil kisaran gaji dari 60.000 RUR hingga 200.000 RUR dan asumsikan bahwa dalam kisaran gaji yang ditentukan, ketergantungan besarnya pembayaran bulanan pada besarnya gaji adalah linier. Katakanlah untuk kisaran upah tertentu terungkap bahwa rasio gaji terhadap pembayaran tidak boleh kurang dari 3 dan peminjam masih harus memiliki cadangan 5.000 RUR. Dan hanya dalam kasus ini kita akan berasumsi bahwa peminjam akan membayar kembali pinjamannya kepada bank. Maka persamaan regresi liniernya akan berbentuk:
dimana , , , - gaji -peminjam, - pembayaran pinjaman -peminjam.
Mengganti pembayaran gaji dan pinjaman dengan parameter tetap ke dalam persamaan Anda dapat memutuskan apakah akan mengeluarkan atau menolak pinjaman.
Ke depan, kami mencatatnya, dengan parameter yang diberikan fungsi regresi linier, Digunakan dalam fungsi respons logistik akan menghasilkan nilai yang besar sehingga akan mempersulit perhitungan untuk menentukan probabilitas pelunasan pinjaman. Oleh karena itu, diusulkan untuk mengurangi koefisien kita, katakanlah, sebanyak 25.000 kali lipat. Transformasi koefisien ini tidak akan mengubah keputusan pemberian pinjaman. Mari kita ingat poin ini untuk masa depan, tapi sekarang, untuk memperjelas apa yang sedang kita bicarakan, mari kita pertimbangkan situasi dengan tiga calon peminjam.
Tabel 1 “Calon peminjam”
Kode untuk menghasilkan tabel
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']]
Sesuai dengan data pada tabel, Vasya dengan gaji 120.000 RUR ingin mendapat pinjaman agar bisa melunasinya setiap bulan sebesar 3.000 RUR. Kami memutuskan bahwa untuk menyetujui pinjaman tersebut, gaji Vasya harus melebihi tiga kali lipat jumlah pembayaran, dan masih harus ada sisa 5.000 RUR. Vasya memenuhi persyaratan ini: . Bahkan tersisa 106.000 RUR. Padahal saat menghitung kami telah mengurangi peluangnya 25.000 kali, hasilnya sama - pinjaman bisa disetujui. Fedya juga akan menerima pinjaman, tetapi Lesha, meskipun dia menerima paling banyak, harus menahan nafsu makannya.
Mari kita menggambar grafik untuk kasus ini.
Bagan 2 “Klasifikasi peminjam”
Kode untuk menggambar grafik
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()
Jadi, garis lurus kita, dikonstruksikan sesuai dengan fungsinya , memisahkan peminjam “buruk” dari peminjam “baik”. Peminjam yang keinginannya tidak sesuai dengan kemampuannya berada di atas garis (Lesha), sedangkan mereka yang, menurut parameter model kami, mampu membayar kembali pinjamannya, berada di bawah garis (Vasya dan Fedya). Dengan kata lain, kita dapat mengatakan ini: sambungan langsung kita membagi peminjam menjadi dua kelas. Mari kita nyatakan sebagai berikut: ke kelas Kami akan mengklasifikasikan peminjam yang kemungkinan besar akan membayar kembali pinjamannya sebagai или Kami akan memasukkan peminjam yang kemungkinan besar tidak akan mampu membayar kembali pinjamannya.
Mari kita rangkum kesimpulan dari contoh sederhana ini. Mari kita ambil satu poin dan, mensubstitusikan koordinat titik ke dalam persamaan garis yang sesuai , pertimbangkan tiga opsi:
- Jika titik tersebut berada di bawah garis dan kita menugaskannya ke kelas , maka nilai fungsinya akan menjadi positif dari untuk . Ini berarti kita dapat berasumsi bahwa kemungkinan pembayaran kembali pinjaman itu ada . Semakin besar nilai fungsinya, semakin tinggi probabilitasnya.
- Jika suatu titik berada di atas garis dan kita menugaskannya ke kelas или , maka nilai fungsinya akan negatif untuk . Kemudian kita asumsikan bahwa kemungkinan pelunasan utang ada dan, semakin besar nilai absolut dari fungsi tersebut, semakin tinggi keyakinan kita.
- Titiknya berada pada garis lurus, pada batas antara dua kelas. Dalam hal ini, nilai fungsinya akan sama dan kemungkinan membayar kembali pinjaman sama dengan .
Sekarang, mari kita bayangkan bahwa kita tidak mempunyai dua faktor, tapi puluhan, dan bukan tiga, tapi ribuan peminjam. Maka, alih-alih garis lurus, kita akan mendapatkan m-dimensi bidang dan koefisien kita tidak akan diambil begitu saja, tetapi diturunkan sesuai dengan semua aturan, dan berdasarkan akumulasi data peminjam yang telah atau belum melunasi pinjamannya. Dan memang, perhatikan bahwa kami sekarang memilih peminjam menggunakan koefisien yang sudah diketahui . Faktanya, tugas model regresi logistik justru menentukan parameter , di mana nilai fungsi kerugian Kerugian Logistik akan cenderung minimum. Tapi tentang bagaimana vektor dihitung , kita akan mengetahui lebih lanjut di bagian ke-5 artikel. Sementara itu, kami kembali ke tanah perjanjian - ke bankir kami dan ketiga kliennya.
Berkat fungsinya kita tahu siapa yang bisa diberi pinjaman dan siapa yang harus ditolak. Tetapi Anda tidak dapat menemui direktur dengan informasi seperti itu, karena mereka ingin mendapatkan dari kami kemungkinan pembayaran kembali pinjaman oleh setiap peminjam. Apa yang harus dilakukan? Jawabannya sederhana - kita perlu mengubah fungsinya , yang nilainya terletak pada kisaran tersebut ke fungsi yang nilainya terletak pada kisaran tersebut . Dan fungsi seperti itu ada, disebut fungsi respons logistik atau transformasi logit terbalik. Bertemu:
Mari kita lihat langkah demi langkah cara kerjanya fungsi respons logistik. Perhatikan bahwa kita akan berjalan ke arah yang berlawanan, yaitu. kita asumsikan kita mengetahui nilai probabilitas yang terletak pada kisaran dari untuk dan kemudian kita akan “melepaskan” nilai ini ke seluruh rentang angka untuk .
03. Kita peroleh fungsi respon logistik
Langkah 1. Ubah nilai probabilitas menjadi suatu rentang
Selama transformasi fungsi в fungsi respons logistik Kami akan meninggalkan analis kredit kami sendirian dan melakukan tur ke bandar taruhan. Tidak, tentu saja kami tidak akan memasang taruhan, yang menarik bagi kami hanyalah arti dari ungkapan tersebut, misalnya peluangnya adalah 4 banding 1. Peluang yang akrab bagi semua petaruh adalah rasio “keberhasilan” dengan “ kegagalan”. Dalam istilah probabilitas, peluang adalah peluang terjadinya suatu peristiwa dibagi dengan peluang tidak terjadinya peristiwa tersebut. Mari kita tuliskan rumus peluang terjadinya suatu peristiwa :
Dimana - kemungkinan terjadinya suatu peristiwa, — kemungkinan suatu peristiwa TIDAK terjadi
Misalnya, peluang seekor kuda muda, kuat, dan suka bermain yang dijuluki “Veterok” akan mengalahkan perempuan tua dan lembek bernama “Matilda” dalam suatu perlombaan adalah sama dengan , maka peluang sukses untuk “Veterok” akan besar к begitu pula sebaliknya, dengan mengetahui odds maka tidak akan sulit bagi kita untuk menghitung probabilitasnya :
Jadi, kita telah belajar untuk “menerjemahkan” probabilitas menjadi peluang, yang nilainya diambil untuk . Mari kita mengambil satu langkah lagi dan belajar “menerjemahkan” probabilitas ke seluruh garis bilangan untuk .
Langkah 2. Ubah nilai probabilitas menjadi suatu rentang
Langkah ini sangat sederhana - mari kita ambil logaritma odds ke basis bilangan Euler dan kami mendapatkan:
Sekarang kita tahu bahwa jika , lalu hitung nilainya akan sangat sederhana dan, terlebih lagi, harus positif: . Ini benar.
Karena penasaran, mari kita periksa bagaimana jika , maka kita berharap melihat nilai negatif . Kami memeriksa: . Itu benar.
Sekarang kita tahu cara mengonversi nilai probabilitas untuk sepanjang garis bilangan dari untuk . Pada langkah berikutnya kita akan melakukan yang sebaliknya.
Untuk saat ini, kita perhatikan sesuai dengan aturan logaritma, mengetahui nilai fungsinya , Anda dapat menghitung peluangnya:
Metode penentuan peluang ini akan berguna bagi kita pada langkah selanjutnya.
Langkah 3. Mari kita turunkan rumus untuk menentukan
Jadi kami belajar, mengetahui , temukan nilai fungsi . Namun, pada kenyataannya, kita memerlukan hal yang sebaliknya – mengetahui nilainya Temukan . Untuk melakukan ini, mari kita beralih ke konsep fungsi odds terbalik, yang menurutnya:
Pada artikel ini kami tidak akan menurunkan rumus di atas, tetapi kami akan memeriksanya menggunakan angka-angka dari contoh di atas. Kita tahu bahwa dengan odds 4 banding 1 (), peluang terjadinya suatu peristiwa adalah 0.8 (). Mari kita lakukan substitusi: . Hal ini sesuai dengan perhitungan yang kami lakukan sebelumnya. Mari kita lanjutkan.
Pada langkah terakhir kami menyimpulkan itu , yang berarti Anda dapat melakukan substitusi pada fungsi odds terbalik. Kita mendapatkan:
Bagilah pembilang dan penyebutnya dengan , Kemudian:
Untuk berjaga-jaga, untuk memastikan bahwa kami tidak melakukan kesalahan di mana pun, kami akan melakukan satu pemeriksaan kecil lagi. Pada langkah 2, kita untuk menentukan itu . Kemudian, substitusikan nilainya ke dalam fungsi respons logistik, yang kami harapkan dapat diperoleh . Kami mengganti dan mendapatkan:
Selamat, pembaca yang budiman, kami baru saja memperoleh dan menguji fungsi respons logistik. Mari kita lihat grafik fungsinya.
Grafik 3 “Fungsi respon logistik”
Kode untuk menggambar grafik
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()
Dalam literatur Anda juga dapat menemukan nama fungsi ini sebagai fungsi sigmoid. Grafik tersebut dengan jelas menunjukkan bahwa perubahan utama dalam probabilitas suatu objek termasuk dalam suatu kelas terjadi dalam rentang yang relatif kecil , di suatu tempat dari untuk .
Saya mengusulkan untuk kembali ke analis kredit kami dan membantunya menghitung kemungkinan pembayaran kembali pinjaman, jika tidak, ia berisiko dibiarkan tanpa bonus :)
Tabel 2 “Calon peminjam”
Kode untuk menghasilkan tabel
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']]
Jadi, kami telah menentukan kemungkinan pembayaran kembali pinjaman. Secara umum, hal ini tampaknya benar.
Memang, kemungkinan Vasya, dengan gaji 120.000 RUR, mampu memberikan 3.000 RUR ke bank setiap bulannya mendekati 100%. Omong-omong, kita harus memahami bahwa bank dapat memberikan pinjaman kepada Lesha jika kebijakan bank mengatur, misalnya, untuk memberikan pinjaman kepada klien dengan kemungkinan pembayaran kembali pinjaman lebih dari, katakanlah, 0.3. Hanya saja dalam hal ini bank akan membuat cadangan yang lebih besar untuk kemungkinan kerugian.
Perlu juga dicatat bahwa rasio gaji terhadap pembayaran minimal 3 dan dengan margin 5.000 RUR diambil dari batas atas. Oleh karena itu, kami tidak dapat menggunakan vektor bobot dalam bentuk aslinya . Kami perlu mengurangi koefisien secara signifikan, dan dalam hal ini kami membagi setiap koefisien dengan 25.000, yaitu, pada dasarnya, kami menyesuaikan hasilnya. Namun hal ini dilakukan khusus untuk mempermudah pemahaman materi pada tahap awal. Dalam hidup, kita tidak perlu menemukan dan menyesuaikan koefisien, namun menemukannya. Di bagian artikel selanjutnya kita akan mendapatkan persamaan yang digunakan untuk memilih parameter .
04. Metode kuadrat terkecil untuk menentukan vektor bobot dalam fungsi respons logistik
Kita sudah mengetahui metode pemilihan vektor bobot ini Sebagai metode kuadrat terkecil (LSM) dan faktanya, mengapa kita tidak menggunakannya dalam masalah klasifikasi biner? Memang, tidak ada yang menghalangi Anda untuk menggunakannya perusahaan multinasional, hanya metode ini dalam masalah klasifikasi yang memberikan hasil yang kurang akurat dibandingkan Kerugian Logistik. Ada landasan teori untuk hal ini. Pertama mari kita lihat satu contoh sederhana.
Mari kita asumsikan bahwa model kita (menggunakan MSE и Kerugian Logistik) sudah mulai memilih vektor bobot dan kami menghentikan penghitungan pada langkah tertentu. Tidak masalah apakah di tengah, di akhir, atau di awal, yang utama adalah kita sudah memiliki beberapa nilai vektor bobot dan asumsikan bahwa pada langkah ini, vektor bobot untuk kedua model tidak ada perbedaan. Kemudian ambil bobot yang dihasilkan dan gantikan ke dalamnya fungsi respons logistik () untuk beberapa objek milik kelas . Kami memeriksa dua kasus ketika, sesuai dengan vektor bobot yang dipilih, model kami sangat salah dan sebaliknya - model sangat yakin bahwa objek tersebut termasuk dalam kelas . Mari kita lihat denda apa saja yang akan dikeluarkan saat menggunakan perusahaan multinasional и Kerugian Logistik.
Kode untuk menghitung penalti tergantung pada fungsi kerugian yang digunakan
# класс объекта
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
Sebuah kasus kesalahan besar — model menugaskan suatu objek ke suatu kelas dengan probabilitas 0,01
Penalti saat digunakan perusahaan multinasional akan:
Penalti saat digunakan Kerugian Logistik akan:
Kasus kepercayaan diri yang kuat — model menugaskan suatu objek ke suatu kelas dengan probabilitas 0,99
Penalti saat digunakan perusahaan multinasional akan:
Penalti saat digunakan Kerugian Logistik akan:
Contoh ini menggambarkan dengan baik bahwa jika terjadi kesalahan besar, fungsi kerugian Kerugian Log menghukum model secara signifikan lebih dari MSE. Sekarang mari kita pahami apa latar belakang teoritis penggunaan fungsi kerugian Kerugian Log dalam masalah klasifikasi.
05. Metode kemungkinan maksimum dan regresi logistik
Seperti yang dijanjikan di awal, artikel ini penuh dengan contoh sederhana. Di studio ada contoh lain dan tamu lama - peminjam bank: Vasya, Fedya dan Lesha.
Untuk berjaga-jaga, sebelum mengembangkan contoh, izinkan saya mengingatkan Anda bahwa dalam hidup kita berhadapan dengan sampel pelatihan yang terdiri dari ribuan atau jutaan objek dengan puluhan atau ratusan fitur. Namun, di sini angka-angka tersebut diambil agar dapat dengan mudah dimasukkan ke dalam kepala data scientist pemula.
Mari kembali ke contoh. Mari kita bayangkan direktur bank memutuskan untuk memberikan pinjaman kepada semua orang yang membutuhkan, meskipun algoritmanya memerintahkan dia untuk tidak memberikannya kepada Lesha. Dan sekarang cukup waktu telah berlalu dan kita tahu yang mana dari ketiga pahlawan yang melunasi pinjamannya dan mana yang tidak. Apa yang diharapkan: Vasya dan Fedya melunasi pinjamannya, tetapi Lesha tidak melakukannya. Sekarang mari kita bayangkan bahwa hasil ini akan menjadi contoh pelatihan baru bagi kita dan, pada saat yang sama, seolah-olah semua data tentang faktor-faktor yang mempengaruhi kemungkinan pembayaran kembali pinjaman (gaji peminjam, jumlah pembayaran bulanan) telah hilang. Kemudian, secara intuitif, kita dapat berasumsi bahwa setiap peminjam ketiga tidak membayar kembali pinjamannya kepada bank, atau dengan kata lain, kemungkinan peminjam berikutnya akan melunasi pinjamannya. . Asumsi intuitif ini memiliki konfirmasi teoritis dan didasarkan pada metode kemungkinan maksimum, sering kali dalam literatur disebut prinsip kemungkinan maksimum.
Pertama, mari berkenalan dengan peralatan konseptual.
Kemungkinan pengambilan sampel adalah probabilitas untuk memperoleh sampel yang persis seperti itu, memperoleh pengamatan/hasil yang persis seperti itu, yaitu. produk dari probabilitas memperoleh masing-masing hasil sampel (misalnya, apakah pinjaman Vasya, Fedya dan Lesha dilunasi atau tidak dilunasi pada saat yang bersamaan).
Fungsi kemungkinan menghubungkan kemungkinan sampel dengan nilai parameter distribusi.
Dalam kasus kami, sampel pelatihan adalah skema Bernoulli umum, di mana variabel acak hanya mengambil dua nilai: или . Oleh karena itu, kemungkinan sampel dapat ditulis sebagai fungsi kemungkinan dari parameter sebagai berikut:
Entri di atas dapat diartikan sebagai berikut. Probabilitas gabungan bahwa Vasya dan Fedya akan membayar kembali pinjamannya adalah sama , kemungkinan Lesha TIDAK akan membayar kembali pinjamannya adalah (karena BUKAN pelunasan pinjaman yang terjadi), oleh karena itu peluang gabungan ketiga kejadian tersebut adalah sama .
Metode kemungkinan maksimum adalah metode untuk memperkirakan parameter yang tidak diketahui dengan cara memaksimalkan fungsi kemungkinan. Dalam kasus kita, kita perlu menemukan nilai tersebut dimana mencapai maksimum.
Dari mana ide sebenarnya berasal - untuk mencari nilai parameter yang tidak diketahui di mana fungsi kemungkinan mencapai maksimum? Asal usul gagasan ini berasal dari gagasan bahwa sampel adalah satu-satunya sumber pengetahuan yang tersedia bagi kita tentang populasi. Segala sesuatu yang kita ketahui tentang populasi terwakili dalam sampel. Oleh karena itu, yang dapat kami katakan hanyalah bahwa sampel adalah cerminan paling akurat dari populasi yang tersedia bagi kami. Oleh karena itu, kita perlu mencari parameter di mana sampel yang tersedia menjadi yang paling mungkin.
Jelasnya, kita sedang menghadapi masalah optimasi di mana kita perlu mencari titik ekstrem suatu fungsi. Untuk mencari titik ekstrem, perlu memperhatikan kondisi orde pertama, yaitu menyamakan turunan fungsi dengan nol dan menyelesaikan persamaan terhadap parameter yang diinginkan. Namun, mencari turunan suatu produk dari sejumlah besar faktor bisa menjadi tugas yang panjang; untuk menghindari hal ini, ada teknik khusus - beralih ke logaritma fungsi kemungkinan. Mengapa transisi seperti itu mungkin terjadi? Mari kita perhatikan fakta bahwa kita tidak mencari titik ekstrem dari fungsi itu sendiri, dan titik ekstrem, yaitu nilai parameter yang tidak diketahui dimana mencapai maksimum. Saat berpindah ke logaritma, titik ekstremnya tidak berubah (walaupun titik ekstremnya sendiri akan berbeda), karena logaritma adalah fungsi monotonik.
Mari kita, sesuai dengan penjelasan di atas, terus mengembangkan contoh kita dengan pinjaman dari Vasya, Fedya dan Lesha. Pertama mari kita lanjutkan ke logaritma fungsi kemungkinan:
Sekarang kita dapat dengan mudah membedakan ekspresi tersebut dengan :
Dan terakhir, perhatikan kondisi orde pertama - kita menyamakan turunan fungsi tersebut dengan nol:
Jadi, perkiraan intuitif kami tentang kemungkinan pembayaran kembali pinjaman secara teoritis dibenarkan.
Bagus, tapi apa yang harus kita lakukan dengan informasi ini sekarang? Jika kita berasumsi bahwa setiap peminjam ketiga tidak mengembalikan uangnya ke bank, maka bank tersebut pasti akan bangkrut. Itu benar, tetapi hanya ketika menilai kemungkinan pembayaran kembali pinjaman sama dengan Kami tidak memperhitungkan faktor-faktor yang mempengaruhi pembayaran kembali pinjaman: gaji peminjam dan jumlah pembayaran bulanan. Ingatlah bahwa sebelumnya kita menghitung kemungkinan pembayaran kembali pinjaman oleh setiap klien, dengan mempertimbangkan faktor-faktor yang sama. Adalah logis bahwa kita memperoleh probabilitas yang berbeda dari konstanta yang sama .
Mari kita tentukan kemungkinan sampel:
Kode untuk menghitung kemungkinan sampel
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)
Kemungkinan sampel pada nilai konstan :
Kemungkinan sampel saat menghitung kemungkinan pembayaran kembali pinjaman dengan mempertimbangkan faktor-faktor :
Probabilitas suatu sampel dengan probabilitas yang dihitung berdasarkan faktor ternyata lebih tinggi dibandingkan dengan probabilitas dengan nilai probabilitas konstan. Apa artinya ini? Hal ini menunjukkan bahwa pengetahuan tentang faktor-faktor tersebut memungkinkan untuk lebih akurat memilih kemungkinan pembayaran kembali pinjaman untuk setiap klien. Oleh karena itu, ketika mengeluarkan pinjaman berikutnya, akan lebih tepat jika menggunakan model yang diusulkan di akhir bagian 3 artikel untuk menilai kemungkinan pembayaran utang.
Tapi kemudian, jika kita ingin memaksimalkannya fungsi kemungkinan sampel, lalu mengapa tidak menggunakan beberapa algoritma yang akan menghasilkan probabilitas untuk Vasya, Fedya dan Lesha, misalnya masing-masing sebesar 0.99, 0.99 dan 0.01. Mungkin algoritme seperti itu akan bekerja dengan baik pada sampel pelatihan, karena akan mendekatkan nilai kemungkinan sampel , tetapi, pertama, algoritma seperti itu kemungkinan besar akan mengalami kesulitan dengan kemampuan generalisasi, dan kedua, algoritma ini pasti tidak linier. Dan jika metode untuk mengatasi overtraining (kemampuan generalisasi yang sama lemahnya) jelas tidak termasuk dalam rencana artikel ini, mari kita bahas poin kedua secara lebih rinci. Untuk melakukan ini, cukup jawab pertanyaan sederhana. Bisakah probabilitas Vasya dan Fedya membayar kembali pinjamannya sama, dengan mempertimbangkan faktor-faktor yang kita ketahui? Dari sudut logika yang masuk akal, tentu saja tidak, tidak bisa. Jadi Vasya akan membayar 2.5% dari gajinya per bulan untuk membayar kembali pinjamannya, dan Fedya - hampir 27,8%. Juga di grafik 2 “Klasifikasi klien” kita melihat bahwa Vasya berada jauh lebih jauh dari garis pemisah kelas daripada Fedya. Dan akhirnya kita mengetahui fungsinya untuk Vasya dan Fedya mengambil nilai yang berbeda: 4.24 untuk Vasya dan 1.0 untuk Fedya. Sekarang, jika Fedya, misalnya, memperoleh penghasilan yang lebih besar atau meminta pinjaman yang lebih kecil, maka kemungkinan pembayaran kembali pinjaman untuk Vasya dan Fedya akan sama. Dengan kata lain, ketergantungan linier tidak bisa dibohongi. Dan jika kita benar-benar menghitung peluangnya , dan tidak mengambilnya begitu saja, kita dapat dengan aman mengatakan bahwa nilai-nilai kita yang terbaik memungkinkan kami memperkirakan kemungkinan pembayaran kembali pinjaman oleh masing-masing peminjam, tetapi karena kami sepakat untuk berasumsi bahwa penentuan koefisien dilakukan sesuai dengan semua aturan, maka kami akan berasumsi demikian - koefisien kami memungkinkan kami memberikan perkiraan probabilitas yang lebih baik :)
Namun, kami ngelantur. Pada bagian ini kita perlu memahami bagaimana vektor bobot ditentukan , yang diperlukan untuk menilai kemungkinan pembayaran kembali pinjaman oleh setiap peminjam.
Mari kita rangkum secara singkat persenjataan apa yang kita gunakan untuk mencari peluang :
1. Kami berasumsi bahwa hubungan antara variabel target (nilai prediksi) dan faktor yang mempengaruhi hasil adalah linier. Untuk alasan ini digunakan fungsi regresi linier jenis , garis yang membagi objek (klien) menjadi beberapa kelas и или (klien yang mampu mengembalikan pinjaman dan yang tidak). Dalam kasus kami, persamaannya berbentuk .
2. Kami menggunakan fungsi logit terbalik jenis untuk menentukan probabilitas suatu objek termasuk dalam suatu kelas .
3. Kami menganggap rangkaian pelatihan kami sebagai implementasi dari yang digeneralisasi Skema Bernoulli, yaitu, untuk setiap objek, variabel acak dihasilkan, dengan probabilitas (miliknya sendiri untuk setiap objek) mengambil nilai 1 dan dengan probabilitas - 0.
4. Kita tahu apa yang perlu kita maksimalkan fungsi kemungkinan sampel dengan mempertimbangkan faktor-faktor yang diterima sehingga sampel yang tersedia menjadi yang paling masuk akal. Dengan kata lain, kita perlu memilih parameter yang sampelnya paling masuk akal. Dalam kasus kami, parameter yang dipilih adalah kemungkinan pembayaran kembali pinjaman , yang pada gilirannya bergantung pada koefisien yang tidak diketahui . Jadi kita perlu mencari vektor bobot tersebut , di mana kemungkinan pengambilan sampel akan maksimal.
5. Kita tahu apa yang harus dimaksimalkan fungsi kemungkinan sampel bisa digunakan metode kemungkinan maksimum. Dan kami mengetahui semua trik rumit untuk menggunakan metode ini.
Beginilah ternyata gerakan multi-langkah :)
Sekarang ingatlah bahwa di awal artikel kami ingin menurunkan dua jenis fungsi kerugian Kerugian Logistik tergantung pada bagaimana kelas objek ditetapkan. Kebetulan dalam masalah klasifikasi dengan dua kelas, kelas-kelas tersebut dinotasikan sebagai и или . Bergantung pada notasinya, output akan memiliki fungsi kerugian yang sesuai.
Kasus 1. Klasifikasi benda menjadi и
Sebelumnya, ketika menentukan probabilitas, sampel digunakan di mana probabilitas pelunasan utang oleh peminjam dihitung berdasarkan faktor dan koefisien yang diberikan. , kami menerapkan rumus:
Sebenarnya adalah maknanya fungsi respons logistik untuk vektor bobot tertentu
Maka tidak ada yang menghalangi kita untuk menulis fungsi kemungkinan sampel sebagai berikut:
Terkadang sulit bagi beberapa analis pemula untuk segera memahami cara kerja fungsi ini. Mari kita lihat 4 contoh singkat yang akan memperjelas:
1. Jika (yaitu, menurut sampel pelatihan, objek tersebut termasuk dalam kelas +1), dan algoritme kami menentukan kemungkinan mengklasifikasikan suatu objek ke dalam suatu kelas sama dengan 0.9, maka kemungkinan sampel ini akan dihitung sebagai berikut:
2. Jika Dan , maka perhitungannya menjadi seperti ini:
3. Jika Dan , maka perhitungannya menjadi seperti ini:
4. Jika Dan , maka perhitungannya menjadi seperti ini:
Jelas, fungsi kemungkinan akan dimaksimalkan dalam kasus 1 dan 3 atau dalam kasus umum - dengan nilai probabilitas yang ditebak dengan benar untuk menugaskan suatu objek ke kelas .
Karena kenyataan bahwa ketika menentukan probabilitas menugaskan suatu objek ke kelas Kami hanya tidak mengetahui koefisiennya , maka kita akan mencarinya. Seperti disebutkan di atas, ini adalah masalah optimasi di mana pertama-tama kita perlu mencari turunan dari fungsi kemungkinan terhadap vektor bobot. . Namun, pertama-tama masuk akal untuk menyederhanakan tugas kita sendiri: kita akan mencari turunan dari logaritma fungsi kemungkinan.
Mengapa setelah logaritma, in fungsi kesalahan logistik, kami mengubah tanda dari pada . Semuanya sederhana, karena dalam masalah penilaian kualitas suatu model, biasanya nilai suatu fungsi diminimalkan, kami mengalikan sisi kanan ekspresi dengan dan oleh karena itu, alih-alih memaksimalkan, sekarang kita meminimalkan fungsinya.
Sebenarnya, saat ini, di depan matamu, fungsi kerugian telah diperoleh dengan susah payah— Kerugian Logistik untuk set pelatihan dengan dua kelas: и .
Sekarang, untuk mencari koefisiennya, kita tinggal mencari turunannya saja fungsi kesalahan logistik dan kemudian, dengan menggunakan metode pengoptimalan numerik, seperti penurunan gradien atau penurunan gradien stokastik, pilih koefisien yang paling optimal . Namun mengingat volume artikelnya yang cukup besar, maka diusulkan untuk melakukan diferensiasi sendiri, atau mungkin ini akan menjadi topik artikel berikutnya dengan banyak aritmatika tanpa contoh detail seperti itu.
Kasus 2. Klasifikasi benda menjadi и
Pendekatannya di sini akan sama dengan kelas и , tetapi jalur itu sendiri ke keluaran fungsi kerugian Kerugian Logistik, akan lebih banyak hiasan. Mari kita mulai. Untuk fungsi kemungkinan kita akan menggunakan operator "jika kemudian...". Artinya, jika Objek ke- milik kelas , lalu untuk menghitung probabilitas sampel kita menggunakan probabilitas , jika objek tersebut termasuk dalam kelas , lalu kita substitusikan ke dalam kemungkinannya . Seperti inilah fungsi kemungkinannya:
Mari kita jelaskan dengan jari kita cara kerjanya. Mari kita pertimbangkan 4 kasus:
1. Jika и , maka kemungkinan pengambilan sampel akan “pergi”
2. Jika и , maka kemungkinan pengambilan sampel akan “pergi”
3. Jika и , maka kemungkinan pengambilan sampel akan “pergi”
4. Jika и , maka kemungkinan pengambilan sampel akan “pergi”
Jelas bahwa dalam kasus 1 dan 3, ketika probabilitas ditentukan dengan benar oleh algoritma, fungsi kemungkinan akan dimaksimalkan, itulah yang ingin kita dapatkan. Namun, pendekatan ini cukup rumit dan selanjutnya kita akan mempertimbangkan notasi yang lebih ringkas. Tapi pertama-tama, mari kita logaritma fungsi kemungkinan dengan perubahan tanda, karena sekarang kita akan meminimalkannya.
Mari kita gantikan saja ekspresi :
Mari sederhanakan suku yang tepat di bawah logaritma menggunakan teknik aritmatika sederhana dan dapatkan:
Sekarang saatnya menyingkirkan operator "jika kemudian...". Perhatikan bahwa ketika suatu objek milik kelas , lalu pada ekspresi di bawah logaritma, pada penyebut, diangkat ke kekuasaan , jika objek tersebut termasuk dalam kelas , lalu $e$ dipangkatkan . Oleh karena itu, notasi derajat dapat disederhanakan dengan menggabungkan kedua kasus tersebut menjadi satu: . Lalu fungsi kesalahan logistik akan berbentuk:
Sesuai dengan aturan logaritma, kita balikkan pecahan dan beri tanda "" (dikurangi) untuk logaritma, kita mendapatkan:
Berikut adalah fungsi kerugiannya kerugian logistik, yang digunakan dalam set pelatihan dengan objek yang ditugaskan ke kelas: и .
Baiklah, pada titik ini saya pamit dan kita akhiri artikelnya.
Bahan pendukung
1. Sastra
1) Analisis regresi terapan / N. Draper, G. Smith - edisi ke-2. – M.: Keuangan dan Statistik, 1986 (terjemahan dari bahasa Inggris)
2) Teori probabilitas dan statistik matematika / V.E. Gmurman - edisi ke-9. - M.: Sekolah Tinggi, 2003
3) Teori probabilitas / N.I. Chernova - Novosibirsk: Universitas Negeri Novosibirsk, 2007
4) Analisis bisnis: dari data ke pengetahuan / Paklin N.B., Oreshkov V.I. - edisi ke-2. — Sankt Peterburg: Peter, 2013
5) Ilmu Data Ilmu data dari awal / Joel Gras - St. Petersburg: BHV Petersburg, 2017
6) Statistik praktis untuk spesialis Ilmu Data / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Ceramah, kursus (video)
1)
2)
3)
4)
5)
3. Sumber internet
1)
2)
4)
5)