Thuật toán logistic regression
Hãy đi sâu vào bên trong và tự triển khai một thuật toán logistic regression. Vì hàm logit() của statsmodels khá phức tạp, bạn sẽ chỉ triển khai logistic regression đơn giản cho một bộ dữ liệu đơn.
Thay vì dùng tổng bình phương làm chỉ số đánh giá, chúng ta sẽ dùng likelihood. Tuy nhiên, log-likelihood ổn định hơn về mặt tính toán, nên ta sẽ dùng log-likelihood. Thực ra, còn một thay đổi nữa: vì ta muốn tối đa hóa log-likelihood, nhưng minimize() mặc định tìm giá trị nhỏ nhất, nên sẽ dễ hơn nếu ta tính log-likelihood âm (negative log-likelihood).
Giá trị log-likelihood cho mỗi quan sát là $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
Chỉ số cần tính là tổng âm của các phần đóng góp log-likelihood này.
Các giá trị biến giải thích (cột time_since_last_purchase của churn) có sẵn dưới tên x_actual.
Các giá trị phản hồi (cột has_churned của churn) có sẵn dưới tên y_actual.
logistic được nhập từ scipy.stats, và logit() cùng minimize() cũng đã được nạp.
Bài tập này là một phần của khóa học
Hồi quy trung cấp với statsmodels trong Python
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Complete the function
def calc_neg_log_likelihood(coeffs):
# Unpack coeffs
____, ____ = ____
# Calculate predicted y-values
y_pred = ____
# Calculate log-likelihood
log_likelihood = ____
# Calculate negative sum of log_likelihood
neg_sum_ll = ____
# Return negative sum of log_likelihood
return ____
# Test the function with intercept 10 and slope 1
print(calc_neg_log_likelihood([10, 1]))