Trong bài viết này, chúng tôi sẽ phân tích các tính toán lý thuyết của phép biến đổi hàm hồi quy tuyến tính в hàm biến đổi logit nghịch đảo (còn gọi là hàm phản hồi logistic). Sau đó, sử dụng kho vũ khí phương pháp khả năng tối đa, theo mô hình hồi quy logistic, chúng ta rút ra hàm mất mát Mất hậu cần, hay nói cách khác, chúng ta sẽ định nghĩa một hàm mà các tham số của vectơ trọng số được chọn trong mô hình hồi quy logistic .
Đề cương bài viết:
- Chúng ta hãy lặp lại mối quan hệ tuyến tính giữa hai biến
- Hãy xác định nhu cầu chuyển đổi hàm hồi quy tuyến tính в chức năng phản ứng hậu cần
- Hãy thực hiện các phép biến đổi và đầu ra chức năng phản ứng hậu cần
- Chúng ta hãy cố gắng hiểu tại sao phương pháp bình phương tối thiểu lại tệ khi chọn tham số chức năng Mất hậu cần
- Chúng tôi sử dụng phương pháp khả năng tối đa để xác định chức năng lựa chọn tham số :
5.1. Trường hợp 1: hàm Mất hậu cần cho các đối tượng có chỉ định lớp 0 и 1:
5.2. Trường hợp 2: hàm Mất hậu cần cho các đối tượng có chỉ định lớp -1 и +1:
Bài viết có rất nhiều ví dụ đơn giản, trong đó tất cả các phép tính có thể dễ dàng thực hiện bằng miệng hoặc trên giấy, trong một số trường hợp, có thể cần phải có máy tính. Vậy hãy chuẩn bị :)
Bài viết này chủ yếu dành cho các nhà khoa học dữ liệu có trình độ kiến thức ban đầu về kiến thức cơ bản về học máy.
Bài viết cũng sẽ cung cấp mã để vẽ đồ thị và tính toán. Tất cả mã được viết bằng ngôn ngữ trăn 2.7. Hãy để tôi giải thích trước về tính “mới lạ” của phiên bản được sử dụng - đây là một trong những điều kiện để tham gia khóa học nổi tiếng từ Yandex trên một nền tảng giáo dục trực tuyến nổi tiếng không kém Courseravà, như người ta có thể giả định, tài liệu được chuẩn bị dựa trên khóa học này.
01. Sự phụ thuộc vào đường thẳng
Sẽ khá hợp lý khi đặt câu hỏi - sự phụ thuộc tuyến tính và hồi quy logistic có liên quan gì đến nó?
Thật đơn giản! Hồi quy logistic là một trong những mô hình thuộc phân loại tuyến tính. Nói một cách đơn giản, nhiệm vụ của bộ phân loại tuyến tính là dự đoán các giá trị đích từ các biến (biến hồi quy) . Người ta tin rằng sự phụ thuộc giữa các đặc điểm và giá trị mục tiêu tuyến tính. Do đó tên của bộ phân loại - tuyến tính. Nói một cách đại khái, mô hình hồi quy logistic dựa trên giả định rằng có mối quan hệ tuyến tính giữa các đặc điểm và giá trị mục tiêu . Đây là kết nối.
Có ví dụ đầu tiên trong studio, và nó chính xác là về sự phụ thuộc tuyến tính của các đại lượng đang được nghiên cứu. Trong quá trình chuẩn bị bài viết, tôi đã xem một ví dụ khiến nhiều người lo lắng - sự phụ thuộc của dòng điện vào điện áp (“Phân tích hồi quy ứng dụng”, N. Draper, G. Smith). Chúng ta cũng sẽ xem xét nó ở đây.
Theo Định luật Ohm:
Đâu - cường độ hiện tại, - Vôn, - sức chống cự.
Nếu chúng ta không biết Định luật Ohm, thì chúng ta có thể tìm thấy sự phụ thuộc theo kinh nghiệm bằng cách thay đổi và đo lường , đồng thời hỗ trợ đã sửa. Khi đó chúng ta sẽ thấy rằng đồ thị phụ thuộc từ cho một đường thẳng ít nhiều đi qua gốc tọa độ. Chúng tôi nói “nhiều hơn hoặc ít hơn” bởi vì, mặc dù mối quan hệ thực sự chính xác nhưng các phép đo của chúng tôi có thể có những lỗi nhỏ và do đó các điểm trên biểu đồ có thể không nằm chính xác trên đường thẳng mà sẽ nằm rải rác xung quanh nó một cách ngẫu nhiên.
Biểu đồ 1 “Sự phụ thuộc” từ »
Mã vẽ biểu đồ
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. Sự cần thiết phải biến đổi phương trình hồi quy tuyến tính
Hãy xem một ví dụ khác. Hãy tưởng tượng rằng chúng ta làm việc trong một ngân hàng và nhiệm vụ của chúng ta là xác định khả năng người đi vay hoàn trả khoản vay tùy thuộc vào các yếu tố nhất định. Để đơn giản hóa nhiệm vụ, chúng ta sẽ chỉ xem xét hai yếu tố: tiền lương hàng tháng của người đi vay và số tiền trả nợ hàng tháng.
Nhiệm vụ này rất có điều kiện, nhưng với ví dụ này chúng ta có thể hiểu tại sao nó không đủ để sử dụng hàm hồi quy tuyến tính, đồng thời tìm ra những phép biến đổi nào cần được thực hiện với hàm.
Hãy quay lại ví dụ. Điều này được hiểu rằng mức lương càng cao thì người đi vay càng có khả năng phân bổ hàng tháng để trả nợ. Đồng thời, đối với một mức lương nhất định, mối quan hệ này sẽ khá tuyến tính. Ví dụ: hãy lấy một phạm vi lương từ 60.000 RUR đến 200.000 RUR và giả sử rằng trong phạm vi lương được chỉ định, sự phụ thuộc của quy mô thanh toán hàng tháng vào quy mô của tiền lương là tuyến tính. Giả sử đối với phạm vi tiền lương được chỉ định, người ta tiết lộ rằng tỷ lệ lương trên số tiền thanh toán không thể giảm xuống dưới 3 và người đi vay vẫn phải có 5.000 RUR dự trữ. Và chỉ trong trường hợp này, chúng ta sẽ cho rằng người đi vay sẽ hoàn trả khoản vay cho ngân hàng. Khi đó, phương trình hồi quy tuyến tính sẽ có dạng:
đâu , , , - lương -người đi vay thứ - thanh toán khoản vay -người đi vay thứ
Thay thế tiền lương và tiền vay bằng các tham số cố định vào phương trình Bạn có thể quyết định phát hành hay từ chối một khoản vay.
Nhìn về phía trước, chúng tôi lưu ý rằng, với các thông số đã cho hàm hồi quy tuyến tính, Được dùng trong chức năng phản ứng hậu cần sẽ tạo ra những giá trị lớn làm phức tạp việc tính toán xác định xác suất trả nợ. Do đó, người ta đề xuất giảm hệ số của chúng tôi xuống 25.000 lần. Sự chuyển đổi hệ số này sẽ không làm thay đổi quyết định cho vay. Chúng ta hãy ghi nhớ điểm này trong tương lai, nhưng bây giờ, để làm rõ hơn những gì chúng ta đang nói đến, hãy xem xét tình huống với ba người đi vay tiềm năng.
Bảng 1 “Người vay tiềm năng”
Mã để tạo bảng
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']]
Theo dữ liệu trong bảng, Vasya, với mức lương 120.000 RUR, muốn nhận một khoản vay để có thể trả hàng tháng với mức 3.000 RUR. Chúng tôi xác định rằng để phê duyệt khoản vay, mức lương của Vasya phải vượt quá ba lần số tiền thanh toán và vẫn phải còn lại 5.000 RUR. Vasya đáp ứng yêu cầu này: . Thậm chí còn lại 106.000 RUR. Mặc dù thực tế là khi tính toán chúng tôi đã giảm tỷ lệ cược 25.000 lần, kết quả vẫn như nhau - khoản vay có thể được chấp thuận. Fedya cũng sẽ nhận được một khoản vay, nhưng Lesha, mặc dù nhận được nhiều nhất, nhưng sẽ phải kiềm chế cơn thèm ăn của mình.
Hãy vẽ đồ thị cho trường hợp này.
Biểu đồ 2 “Phân loại khách hàng vay”
Code vẽ đồ thị
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()
Vì vậy, đường thẳng của chúng ta được dựng theo hàm , phân biệt những người đi vay “xấu” với những người đi vay “tốt”. Những người đi vay có mong muốn không trùng với khả năng của họ nằm ở trên vạch (Lesha), trong khi những người, theo các thông số trong mô hình của chúng tôi, có khả năng trả khoản vay nằm ở dưới vạch (Vasya và Fedya). Nói cách khác, chúng ta có thể nói thế này: đường dây trực tiếp của chúng tôi chia người đi vay thành hai loại. Chúng ta hãy ký hiệu chúng như sau: đến lớp Chúng tôi sẽ phân loại những người đi vay có nhiều khả năng hoàn trả khoản vay nhất là hoặc Chúng tôi sẽ bao gồm những người đi vay có nhiều khả năng không thể trả được khoản vay.
Hãy để chúng tôi tóm tắt các kết luận từ ví dụ đơn giản này. Hãy lấy một điểm và thay tọa độ của điểm vào phương trình tương ứng của đường thẳng , hãy xem xét ba lựa chọn:
- Nếu điểm nằm dưới dòng và chúng ta gán nó cho lớp , thì giá trị của hàm sẽ tích cực từ để . Điều này có nghĩa là chúng ta có thể giả định rằng xác suất hoàn trả khoản vay nằm trong khoảng . Giá trị hàm càng lớn thì xác suất càng cao.
- Nếu một điểm nằm trên một đường thẳng và chúng ta gán nó vào lớp hoặc thì giá trị của hàm sẽ âm từ để . Sau đó chúng ta sẽ giả định rằng xác suất trả nợ nằm trong khoảng và giá trị tuyệt đối của hàm càng lớn thì độ tin cậy của chúng ta càng cao.
- Điểm nằm trên đường thẳng, nằm trên ranh giới giữa hai lớp. Trong trường hợp này, giá trị của hàm sẽ bằng nhau và xác suất hoàn trả khoản vay bằng .
Bây giờ, hãy tưởng tượng rằng chúng ta không có hai yếu tố mà là hàng chục, không phải ba mà là hàng nghìn người vay. Khi đó thay vì đường thẳng ta sẽ có m-chiều mặt phẳng và hệ số chúng tôi sẽ không bị loại khỏi không khí mà xuất phát theo tất cả các quy tắc và trên cơ sở dữ liệu tích lũy về những người đi vay đã hoặc chưa hoàn trả khoản vay. Và thực sự, hãy lưu ý rằng chúng tôi hiện đang lựa chọn người vay bằng cách sử dụng các hệ số đã biết . Trên thực tế, nhiệm vụ của mô hình hồi quy logistic chính xác là xác định các tham số , tại đó giá trị của hàm mất mát Mất hậu cần sẽ có xu hướng ở mức tối thiểu. Nhưng về cách tính vectơ , chúng ta sẽ tìm hiểu rõ hơn ở phần 5 của bài viết. Trong khi chờ đợi, chúng tôi trở lại miền đất hứa - với chủ ngân hàng của chúng tôi và ba khách hàng của ông ta.
Nhờ chức năng chúng tôi biết ai có thể được cho vay và ai cần phải bị từ chối. Nhưng bạn không thể đến gặp giám đốc với những thông tin như vậy, vì họ muốn nhận được từ chúng tôi xác suất hoàn trả khoản vay của mỗi người vay. Phải làm gì? Câu trả lời rất đơn giản - chúng ta cần biến đổi hàm bằng cách nào đó , có giá trị nằm trong khoảng đến một hàm có giá trị sẽ nằm trong phạm vi . Và một chức năng như vậy tồn tại, nó được gọi là hàm phản hồi logistic hoặc phép biến đổi logit nghịch đảo. Gặp:
Chúng ta hãy xem từng bước nó hoạt động như thế nào chức năng phản ứng hậu cần. Lưu ý rằng chúng ta sẽ đi theo hướng ngược lại, tức là chúng ta sẽ giả định rằng chúng ta biết giá trị xác suất nằm trong khoảng từ để và sau đó chúng ta sẽ “giải nén” giá trị này cho toàn bộ dãy số từ để .
03. Chúng tôi rút ra hàm phản hồi logistic
Bước 1. Chuyển đổi các giá trị xác suất thành một phạm vi
Trong quá trình chuyển đổi chức năng в chức năng phản ứng hậu cần Thay vào đó, chúng tôi sẽ để nhà phân tích tín dụng của mình yên tâm và đi tham quan các nhà cái. Không, tất nhiên, chúng tôi sẽ không đặt cược, tất cả những gì chúng tôi quan tâm là ý nghĩa của biểu thức, ví dụ: cơ hội là 4 ăn 1. Tỷ lệ cược quen thuộc với tất cả những người đặt cược là tỷ lệ “thành công” trên “ những thất bại”. Trong thuật ngữ xác suất, tỷ lệ cược là xác suất xảy ra sự kiện chia cho xác suất sự kiện không xảy ra. Hãy viết công thức tính xác suất xảy ra một sự kiện :
Đâu - xác suất xảy ra một sự kiện, - xác suất của một sự kiện KHÔNG xảy ra
Ví dụ: nếu xác suất để một con ngựa trẻ, khỏe mạnh và vui tươi có biệt danh là “Veterok” sẽ đánh bại một bà già già yếu tên là “Matilda” trong một cuộc đua là bằng: , thì cơ hội thành công của “Veterok” sẽ là к và ngược lại, biết tỷ lệ cược, chúng ta sẽ không khó để tính toán xác suất :
Vì vậy, chúng ta đã học cách “chuyển” xác suất thành cơ hội, lấy giá trị từ để . Hãy tiến thêm một bước nữa và học cách “chuyển” xác suất sang toàn bộ trục số từ để .
Bước 2. Chuyển đổi các giá trị xác suất thành một phạm vi
Bước này rất đơn giản - hãy lấy logarit của tỷ lệ cơ số của số Euler và chúng tôi nhận được:
Bây giờ chúng ta biết rằng nếu , sau đó tính giá trị sẽ rất đơn giản và hơn nữa, nó phải là số dương: . Điều này là đúng.
Vì tò mò, hãy kiểm tra xem nếu , thì chúng ta mong đợi sẽ thấy một giá trị âm . Chung ta kiểm tra: . Đúng rồi.
Bây giờ chúng ta biết cách chuyển đổi giá trị xác suất từ để dọc theo toàn bộ trục số từ để . Ở bước tiếp theo chúng ta sẽ làm ngược lại.
Hiện tại, chúng tôi lưu ý rằng theo quy tắc logarit, biết giá trị của hàm , bạn có thể tính toán tỷ lệ cược:
Phương pháp xác định tỷ lệ cược này sẽ hữu ích cho chúng ta trong bước tiếp theo.
Bước 3. Hãy suy ra công thức để xác định
Vì thế chúng tôi đã học, biết , tìm giá trị hàm . Tuy nhiên, trên thực tế, chúng ta cần điều ngược lại - biết giá trị để tìm . Để làm điều này, chúng ta hãy chuyển sang một khái niệm như hàm tỷ lệ nghịch đảo, theo đó:
Trong bài viết này, chúng tôi sẽ không rút ra công thức trên mà sẽ kiểm tra nó bằng cách sử dụng các con số từ ví dụ trên. Chúng tôi biết rằng với tỷ lệ cược là 4 trên 1 (), xác suất để sự kiện xảy ra là 0.8 (). Hãy thực hiện một sự thay thế: . Điều này trùng khớp với tính toán của chúng tôi được thực hiện trước đó. Tiếp tục nào.
Ở bước cuối cùng chúng tôi đã suy luận rằng , có nghĩa là bạn có thể thực hiện thay thế trong hàm tỷ lệ cược nghịch đảo. Chúng tôi nhận được:
Chia cả tử số và mẫu số cho , sau đó:
Để đề phòng, để đảm bảo rằng chúng tôi không mắc sai sót ở đâu, chúng tôi sẽ thực hiện thêm một kiểm tra nhỏ nữa. Ở bước 2, chúng tôi cho xác định rằng . Sau đó thay giá trị vào hàm phản hồi logistic, chúng tôi mong đợi nhận được . Chúng tôi thay thế và nhận được:
Xin chúc mừng bạn đọc thân mến, chúng tôi vừa rút ra và thử nghiệm hàm phản hồi logistic. Chúng ta hãy nhìn vào đồ thị của hàm số.
Biểu đồ 3 “Hàm phản hồi logistic”
Code vẽ đồ thị
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()
Trong tài liệu bạn cũng có thể tìm thấy tên của hàm này là hàm sigmoid. Biểu đồ cho thấy rõ sự thay đổi chính về xác suất của một đối tượng thuộc một lớp xảy ra trong một phạm vi tương đối nhỏ , ở đâu đó từ để .
Tôi khuyên bạn nên quay lại gặp nhà phân tích tín dụng của chúng tôi và giúp anh ta tính toán xác suất hoàn trả khoản vay, nếu không anh ta có nguy cơ không có tiền thưởng :)
Bảng 2 “Người vay tiềm năng”
Mã để tạo bảng
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']]
Vì vậy, chúng tôi đã xác định được khả năng hoàn trả khoản vay. Nói chung, điều này có vẻ đúng.
Quả thực, khả năng Vasya, với mức lương 120.000 RUR, có thể đưa 3.000 RUR cho ngân hàng mỗi tháng là gần 100%. Nhân tiện, chúng ta phải hiểu rằng ngân hàng có thể cấp một khoản vay cho Lesha nếu chính sách của ngân hàng cung cấp, chẳng hạn như cho vay đối với những khách hàng có xác suất hoàn trả khoản vay lớn hơn, chẳng hạn như 0.3. Chỉ là trong trường hợp này ngân hàng sẽ tạo ra một khoản dự trữ lớn hơn cho những tổn thất có thể xảy ra.
Cũng cần lưu ý rằng tỷ lệ lương trên thanh toán ít nhất là 3 và với biên độ 5.000 RUR đã được lấy từ mức trần. Vì vậy, chúng ta không thể sử dụng vectơ trọng số ở dạng ban đầu . Chúng tôi cần giảm đáng kể các hệ số và trong trường hợp này, chúng tôi chia mỗi hệ số cho 25.000, tức là về bản chất, chúng tôi đã điều chỉnh kết quả. Nhưng điều này được thực hiện đặc biệt để đơn giản hóa việc hiểu tài liệu ở giai đoạn đầu. Trong cuộc sống, chúng ta sẽ không cần phải phát minh, điều chỉnh các hệ số mà phải tìm ra chúng. Trong các phần tiếp theo của bài viết, chúng ta sẽ rút ra các phương trình mà các tham số được chọn .
04. Phương pháp bình phương tối thiểu xác định vectơ trọng số trong hàm phản hồi logistic
Chúng ta đã biết phương pháp này để chọn một vectơ trọng số như phương pháp bình phương tối thiểu (LSM) và trên thực tế, tại sao chúng ta không sử dụng nó trong các bài toán phân loại nhị phân? Quả thực, không có gì ngăn cản bạn sử dụng đa quốc gia, chỉ có phương pháp này trong bài toán phân loại mới cho kết quả kém chính xác hơn Mất hậu cần. Có cơ sở lý thuyết cho việc này. Đầu tiên chúng ta hãy xem một ví dụ đơn giản.
Giả sử rằng các mô hình của chúng tôi (sử dụng MSE и Mất hậu cần) đã bắt đầu chọn vectơ trọng số và chúng tôi đã dừng tính toán ở một bước nào đó. Không quan trọng ở giữa, ở cuối hay ở đầu, điều chính là chúng ta đã có một số giá trị của vectơ trọng số và giả sử rằng ở bước này, vectơ trọng số đối với cả hai mô hình không có sự khác biệt. Sau đó lấy các trọng số thu được và thay chúng vào chức năng phản ứng hậu cần () đối với một số đối tượng thuộc lớp . Chúng tôi kiểm tra hai trường hợp, theo vectơ trọng số đã chọn, mô hình của chúng tôi rất sai lầm và ngược lại - mô hình rất tự tin rằng đối tượng thuộc về lớp . Hãy xem mức phạt sẽ được đưa ra khi sử dụng đa quốc gia и Mất hậu cần.
Mã để tính hình phạt tùy thuộc vào hàm mất được sử dụng
# класс объекта
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
Một trường hợp sai lầm - mô hình gán một đối tượng cho một lớp với xác suất 0,01
Hình phạt khi sử dụng đa quốc gia sẽ là:
Hình phạt khi sử dụng Mất hậu cần sẽ là:
Một trường hợp tự tin mạnh mẽ - mô hình gán một đối tượng cho một lớp với xác suất 0,99
Hình phạt khi sử dụng đa quốc gia sẽ là:
Hình phạt khi sử dụng Mất hậu cần sẽ là:
Ví dụ này minh họa rõ ràng rằng trong trường hợp có lỗi tổng, hàm mất mát Mất nhật ký phạt người mẫu nhiều hơn đáng kể so với MSE. Bây giờ chúng ta hãy hiểu nền tảng lý thuyết của việc sử dụng hàm mất mát Mất nhật ký trong các vấn đề phân loại.
05. Phương pháp khả năng tối đa và hồi quy logistic
Như đã hứa ở phần đầu, bài viết có rất nhiều ví dụ đơn giản. Trong studio còn có một ví dụ khác và những vị khách cũ - những người vay ngân hàng: Vasya, Fedya và Lesha.
Đề phòng, trước khi phát triển ví dụ, hãy để tôi nhắc bạn rằng trong cuộc sống, chúng ta đang xử lý một mẫu huấn luyện gồm hàng nghìn hoặc hàng triệu đối tượng với hàng chục hoặc hàng trăm tính năng. Tuy nhiên, ở đây các con số được lấy để chúng có thể dễ dàng lọt vào đầu của một nhà khoa học dữ liệu mới vào nghề.
Hãy quay lại ví dụ. Hãy tưởng tượng rằng giám đốc ngân hàng đã quyết định cấp một khoản vay cho mọi người có nhu cầu, mặc dù thực tế là thuật toán đã đề xuất không cấp khoản vay đó cho Lesha. Và bây giờ đã đủ thời gian trôi qua và chúng ta biết ai trong ba anh hùng đã trả được khoản vay và ai không. Điều được mong đợi: Vasya và Fedya đã hoàn trả khoản vay, nhưng Lesha thì không. Bây giờ, hãy tưởng tượng rằng kết quả này sẽ là một mẫu đào tạo mới cho chúng ta, đồng thời, dường như tất cả dữ liệu về các yếu tố ảnh hưởng đến xác suất hoàn trả khoản vay (lương của người đi vay, quy mô thanh toán hàng tháng) đã biến mất. Khi đó, bằng trực giác, chúng ta có thể giả định rằng mỗi người đi vay thứ ba không hoàn trả khoản vay cho ngân hàng, hay nói cách khác, xác suất người đi vay tiếp theo sẽ trả được khoản vay . Giả định trực quan này có sự xác nhận về mặt lý thuyết và dựa trên phương pháp khả năng tối đa, thường trong văn học nó được gọi là nguyên tắc khả năng tối đa.
Đầu tiên, chúng ta hãy làm quen với bộ máy khái niệm.
Khả năng lấy mẫu là xác suất lấy được chính xác mẫu như vậy, thu được chính xác các quan sát/kết quả như vậy, tức là tích của xác suất đạt được từng kết quả mẫu (ví dụ: khoản vay của Vasya, Fedya và Lesha có được hoàn trả hay không được hoàn trả cùng một lúc).
Hàm khả năng liên hệ khả năng xảy ra của một mẫu với các giá trị của các tham số phân phối.
Trong trường hợp của chúng tôi, mẫu huấn luyện là sơ đồ Bernoulli tổng quát, trong đó biến ngẫu nhiên chỉ nhận hai giá trị: hoặc . Do đó, khả năng mẫu có thể được viết dưới dạng hàm khả năng của tham số như sau:
Mục trên có thể được hiểu như sau. Xác suất chung mà Vasya và Fedya sẽ trả được khoản vay là bằng , xác suất Lesha KHÔNG trả được khoản vay bằng (vì KHÔNG phải việc trả nợ đã diễn ra), do đó xác suất chung của cả ba sự kiện là bằng nhau .
Phương pháp khả năng tối đa là một phương pháp ước tính một tham số chưa biết bằng cách tối đa hóa hàm khả năng. Trong trường hợp của chúng tôi, chúng tôi cần tìm một giá trị như vậy tại đó đạt tới mức tối đa.
Ý tưởng thực tế đến từ đâu - tìm kiếm giá trị của một tham số không xác định mà tại đó hàm khả năng đạt đến mức tối đa? Nguồn gốc của ý tưởng này xuất phát từ ý tưởng rằng mẫu là nguồn kiến thức duy nhất mà chúng ta có được về dân số. Mọi thứ chúng ta biết về dân số đều được thể hiện trong mẫu. Do đó, tất cả những gì chúng tôi có thể nói là mẫu là sự phản ánh chính xác nhất về tổng thể mà chúng tôi có được. Vì vậy, chúng ta cần tìm một tham số mà tại đó mẫu có sẵn có khả năng xảy ra cao nhất.
Rõ ràng, chúng ta đang giải quyết một vấn đề tối ưu hóa trong đó chúng ta cần tìm điểm cực trị của hàm. Để tìm điểm cực trị, cần xét điều kiện bậc nhất, tức là cho đạo hàm của hàm bằng XNUMX và giải phương trình theo tham số mong muốn. Tuy nhiên, việc tìm đạo hàm của một tích của một số lượng lớn các thừa số có thể là một công việc lâu dài, để tránh điều này, có một kỹ thuật đặc biệt - chuyển sang logarit hàm khả năng. Tại sao có thể thực hiện được sự chuyển đổi như vậy? Chúng ta hãy chú ý đến thực tế là chúng ta không tìm kiếm cực trị của hàm sốvà điểm cực trị, tức là giá trị của tham số chưa biết tại đó đạt tới mức tối đa. Khi chuyển sang logarit, điểm cực trị không thay đổi (mặc dù bản thân điểm cực trị sẽ khác nhau), vì logarit là hàm đơn điệu.
Theo những điều trên, chúng ta hãy tiếp tục phát triển ví dụ của chúng tôi với các khoản vay từ Vasya, Fedya và Lesha. Đầu tiên chúng ta hãy chuyển sang logarit của hàm khả năng:
Bây giờ chúng ta có thể dễ dàng phân biệt biểu thức bằng cách :
Và cuối cùng, hãy xem xét điều kiện bậc nhất - chúng ta đánh đồng đạo hàm của hàm bằng XNUMX:
Vì vậy, ước tính trực quan của chúng tôi về xác suất hoàn trả khoản vay về mặt lý thuyết là hợp lý.
Tuyệt vời, nhưng chúng ta nên làm gì với thông tin này bây giờ? Nếu chúng ta cho rằng cứ người đi vay thứ ba không trả lại tiền cho ngân hàng thì người đi vay chắc chắn sẽ phá sản. Đúng vậy, nhưng chỉ khi đánh giá xác suất trả được khoản vay bằng Chúng tôi đã không tính đến các yếu tố ảnh hưởng đến việc trả nợ: tiền lương của người đi vay và số tiền thanh toán hàng tháng. Hãy nhớ rằng trước đây chúng tôi đã tính toán xác suất hoàn trả khoản vay của mỗi khách hàng, có tính đến các yếu tố tương tự này. Điều hợp lý là chúng ta thu được các xác suất khác với hằng số bằng nhau .
Hãy xác định khả năng của các mẫu:
Mã để tính toán khả năng lấy mẫu
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)
Khả năng lấy mẫu ở một giá trị không đổi :
Khả năng mẫu khi tính xác suất hoàn trả khoản vay có tính đến các yếu tố :
Khả năng của một mẫu có xác suất được tính toán tùy thuộc vào các yếu tố hóa ra lại cao hơn khả năng có một giá trị xác suất không đổi. Điều đó có nghĩa là gì? Điều này cho thấy rằng kiến thức về các yếu tố giúp lựa chọn chính xác hơn xác suất trả nợ cho mỗi khách hàng. Vì vậy, khi cho vay tiếp theo, sẽ đúng hơn nếu sử dụng mô hình đề xuất ở cuối phần 3 bài viết để đánh giá khả năng trả nợ.
Nhưng sau đó, nếu chúng ta muốn tối đa hóa hàm khả năng lấy mẫu, vậy thì tại sao không sử dụng một số thuật toán sẽ tạo ra xác suất cho Vasya, Fedya và Lesha, chẳng hạn, lần lượt bằng 0.99, 0.99 và 0.01. Có lẽ thuật toán như vậy sẽ hoạt động tốt trên mẫu huấn luyện vì nó sẽ đưa giá trị khả năng của mẫu gần hơn với , nhưng thứ nhất, thuật toán như vậy rất có thể sẽ gặp khó khăn về khả năng khái quát hóa, thứ hai, thuật toán này chắc chắn sẽ không tuyến tính. Và nếu các phương pháp chống tập luyện quá sức (khả năng khái quát yếu tương đương) rõ ràng không nằm trong kế hoạch của bài viết này, thì chúng ta hãy đi qua điểm thứ hai một cách chi tiết hơn. Để làm điều này, chỉ cần trả lời một câu hỏi đơn giản. Xác suất để Vasya và Fedya hoàn trả khoản vay có giống nhau không, có tính đến các yếu tố mà chúng ta đã biết? Từ quan điểm của logic âm thanh, tất nhiên là không, nó không thể. Vì vậy, Vasya sẽ trả 2.5% tiền lương mỗi tháng để trả khoản vay và Fedya - gần 27,8%. Cũng trong biểu đồ 2 “Phân loại khách hàng”, chúng ta thấy rằng Vasya ở xa ranh giới phân chia các lớp hơn Fedya rất nhiều. Và cuối cùng, chúng ta biết rằng hàm đối với Vasya và Fedya có các giá trị khác nhau: 4.24 đối với Vasya và 1.0 đối với Fedya. Bây giờ, nếu Fedya, chẳng hạn, kiếm được nhiều tiền hơn hoặc yêu cầu một khoản vay nhỏ hơn, thì xác suất hoàn trả khoản vay của Vasya và Fedya sẽ tương tự nhau. Nói cách khác, sự phụ thuộc tuyến tính không thể bị đánh lừa. Và nếu chúng ta thực sự tính toán tỷ lệ cược và không loại bỏ chúng khỏi không khí, chúng tôi có thể nói một cách an toàn rằng các giá trị của chúng tôi tốt nhất cho phép chúng tôi ước tính xác suất hoàn trả khoản vay của từng người vay, nhưng vì chúng tôi đồng ý giả định rằng việc xác định các hệ số được thực hiện theo tất cả các quy tắc, thì chúng tôi sẽ giả sử như vậy - hệ số của chúng tôi cho phép chúng tôi đưa ra ước tính xác suất tốt hơn :)
Tuy nhiên, chúng tôi lạc đề. Trong phần này chúng ta cần hiểu cách xác định vectơ trọng số , cần thiết để đánh giá khả năng hoàn trả khoản vay của mỗi người vay.
Hãy để chúng tôi tóm tắt ngắn gọn về kho vũ khí mà chúng tôi đang tìm kiếm tỷ lệ cược :
1. Chúng tôi giả định rằng mối quan hệ giữa biến mục tiêu (giá trị dự đoán) và yếu tố ảnh hưởng đến kết quả là tuyến tính. Vì lý do này nó được sử dụng hàm hồi quy tuyến tính loài , đường phân chia các đối tượng (khách hàng) thành các lớp и hoặc (những khách hàng có khả năng trả nợ và những khách hàng không có khả năng trả nợ). Trong trường hợp của chúng tôi, phương trình có dạng .
2. Chúng tôi sử dụng hàm logit nghịch đảo loài để xác định xác suất của một đối tượng thuộc một lớp .
3. Chúng tôi coi tập huấn luyện của mình là việc triển khai một quy trình tổng quát kế hoạch Bernoulli, nghĩa là, đối với mỗi đối tượng, một biến ngẫu nhiên được tạo ra với xác suất (của riêng nó đối với từng đối tượng) lấy giá trị 1 và với xác suất - 0.
4. Chúng tôi biết mình cần gì để tối đa hóa hàm khả năng lấy mẫu có tính đến các yếu tố được chấp nhận để mẫu có sẵn trở nên hợp lý nhất. Nói cách khác, chúng ta cần chọn các tham số mà tại đó mẫu sẽ hợp lý nhất. Trong trường hợp của chúng tôi, tham số được chọn là xác suất hoàn trả khoản vay , do đó phụ thuộc vào các hệ số chưa biết . Vì vậy chúng ta cần tìm một vectơ trọng số như vậy , tại đó khả năng xảy ra của mẫu sẽ là tối đa.
5. Chúng tôi biết cần tối đa hóa những gì hàm khả năng mẫu có thể sử dụng phương pháp khả năng tối đa. Và chúng tôi biết tất cả các thủ thuật phức tạp để thực hiện với phương pháp này.
Đây là cách nó trở thành một động thái gồm nhiều bước :)
Bây giờ hãy nhớ rằng ngay từ đầu bài viết chúng ta đã muốn rút ra hai loại hàm mất mát Mất hậu cần tùy thuộc vào cách các lớp đối tượng được chỉ định. Đã xảy ra trường hợp trong các bài toán phân loại hai lớp, các lớp được ký hiệu là и hoặc . Tùy theo ký hiệu mà đầu ra sẽ có hàm loss tương ứng.
Trường hợp 1. Phân loại đối tượng thành и
Trước đó, khi xác định khả năng của một mẫu trong đó xác suất trả nợ của người đi vay được tính toán dựa trên các yếu tố và hệ số cho trước. , ta áp dụng công thức:
Trên thực tế là ý nghĩa chức năng phản ứng hậu cần với một vectơ trọng số nhất định
Khi đó không có gì ngăn cản chúng ta viết hàm khả năng mẫu như sau:
Đôi khi, một số nhà phân tích mới vào nghề cảm thấy khó hiểu ngay cách thức hoạt động của chức năng này. Hãy xem 4 ví dụ ngắn sẽ làm sáng tỏ mọi thứ:
1. Nếu (tức là, theo mẫu huấn luyện, đối tượng thuộc lớp +1) và thuật toán của chúng tôi xác định xác suất phân loại một đối tượng vào một lớp bằng 0.9 thì phần khả năng mẫu này sẽ được tính như sau:
2. Nếu Và , thì phép tính sẽ như thế này:
3. Nếu Và , thì phép tính sẽ như thế này:
4. Nếu Và , thì phép tính sẽ như thế này:
Rõ ràng là hàm khả năng sẽ được tối đa hóa trong trường hợp 1 và 3 hoặc trong trường hợp tổng quát - với các giá trị được đoán chính xác của xác suất gán một đối tượng vào một lớp .
Do thực tế là khi xác định xác suất gán một đối tượng vào một lớp Chúng ta chỉ không biết các hệ số , sau đó chúng tôi sẽ tìm kiếm chúng. Như đã đề cập ở trên, đây là một bài toán tối ưu hóa trong đó trước tiên chúng ta cần tìm đạo hàm của hàm khả năng đối với vectơ trọng số . Tuy nhiên, trước tiên, hãy đơn giản hóa nhiệm vụ này: chúng ta sẽ tìm đạo hàm của logarit hàm khả năng.
Tại sao sau logarit, trong hàm lỗi logistic, chúng tôi đã thay đổi dấu hiệu từ trên . Mọi thứ đều đơn giản, vì trong các bài toán đánh giá chất lượng của một mô hình, người ta thường giảm thiểu giá trị của hàm, chúng ta nhân vế phải của biểu thức với và theo đó, thay vì tối đa hóa, bây giờ chúng ta tối thiểu hóa hàm số.
Thực ra, ngay bây giờ, trước mắt bạn, hàm mất mát đã được rút ra một cách tỉ mỉ - Mất hậu cần cho một tập huấn luyện có hai lớp: и .
Bây giờ để tìm các hệ số ta chỉ cần tìm đạo hàm hàm lỗi logistic và sau đó, sử dụng các phương pháp tối ưu hóa số, chẳng hạn như giảm độ dốc hoặc giảm độ dốc ngẫu nhiên, chọn các hệ số tối ưu nhất . Tuy nhiên, với khối lượng đáng kể của bài viết, bạn nên tự mình thực hiện phép phân tích, hoặc có lẽ đây sẽ là chủ đề cho bài viết tiếp theo với nhiều số học mà không có ví dụ chi tiết như vậy.
Trường hợp 2. Phân loại đối tượng thành и
Cách tiếp cận ở đây sẽ giống như với các lớp и , nhưng chính đường dẫn đến đầu ra của hàm mất mát Mất hậu cần, sẽ được trang trí công phu hơn. Bắt đầu nào. Đối với hàm khả năng, chúng ta sẽ sử dụng toán tử “nếu… thì…”... Đó là, nếu Đối tượng thứ thuộc về lớp , sau đó để tính khả năng xảy ra của mẫu chúng ta sử dụng xác suất , nếu đối tượng thuộc về lớp , sau đó chúng tôi thay thế vào khả năng . Hàm xác suất trông như thế này:
Hãy để chúng tôi mô tả trên ngón tay của chúng tôi cách nó hoạt động. Xét 4 trường hợp:
1. Nếu и , thì khả năng lấy mẫu sẽ “đi”
2. Nếu и , thì khả năng lấy mẫu sẽ “đi”
3. Nếu и , thì khả năng lấy mẫu sẽ “đi”
4. Nếu и , thì khả năng lấy mẫu sẽ “đi”
Rõ ràng là trong trường hợp 1 và 3, khi xác suất được xác định chính xác bằng thuật toán, hàm khả năng sẽ được tối đa hóa, nghĩa là đây chính xác là những gì chúng tôi muốn nhận được. Tuy nhiên, cách tiếp cận này khá cồng kềnh và tiếp theo chúng ta sẽ xem xét một ký hiệu nhỏ gọn hơn. Nhưng trước tiên, hãy logarit hàm khả năng thay đổi dấu, vì bây giờ chúng ta sẽ giảm thiểu nó.
Thay vào đó hãy thay thế biểu hiện :
Hãy đơn giản hóa số hạng đúng theo logarit bằng cách sử dụng các kỹ thuật số học đơn giản và nhận được:
Bây giờ là lúc để thoát khỏi nhà điều hành “nếu… thì…”. Lưu ý rằng khi một vật thuộc về lớp , thì trong biểu thức dưới logarit, ở mẫu số, được nâng lên quyền lực , nếu đối tượng thuộc về lớp , thì $e$ được nâng lên lũy thừa . Do đó, ký hiệu cho mức độ có thể được đơn giản hóa bằng cách kết hợp cả hai trường hợp thành một: . sau đó hàm lỗi logistic sẽ có dạng:
Theo quy tắc logarit, ta lật phân số và đặt dấu "" (trừ) cho logarit, ta được:
Đây là hàm mất mất mát hậu cần, được sử dụng trong tập huấn luyện với các đối tượng được gán cho các lớp: и .
Vâng, tại thời điểm này tôi xin nghỉ phép và chúng ta kết thúc bài viết.
Vật liệu phụ trợ
XUẤT KHẨU. Văn học
1) Phân tích hồi quy ứng dụng / N. Draper, G. Smith - tái bản lần thứ 2. – M.: Tài chính và Thống kê, 1986 (dịch từ tiếng Anh)
2) Lý thuyết xác suất và thống kê toán học / V.E. Gmurman - tái bản lần thứ 9. - M.: Trường Cao Đẳng, 2003
3) Lý thuyết xác suất / N.I. Chernova - Novosibirsk: Đại học bang Novosibirsk, 2007
4) Phân tích kinh doanh: từ dữ liệu đến kiến thức / Paklin N. B., Oreshkov V. I. - tái bản lần thứ 2. — St.Petersburg: Peter, 2013
5) Khoa học dữ liệu Khoa học dữ liệu từ đầu / Joel Gras - St. Petersburg: BHV Petersburg, 2017
6) Thống kê thực tế dành cho chuyên gia Khoa học dữ liệu / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Bài giảng, khóa học (video)
1)
2)
3)
4)
5)
3. Nguồn Internet
1)
2)
4)
6)
7)
8)