Алгоритм логістичної регресії
Зазирнімо всередину моделі та реалізуймо алгоритм логістичної регресії. Оскільки функція logit() зі statsmodels є дуже складною, ви обмежитеся реалізацією простої логістичної регресії для одного набору даних.
Замість суми квадратів як метрику ми хочемо використовувати правдоподібність. Проте лог-правдоподібність обчислювально стабільніша, тож скористаємося нею. Насправді є ще одна зміна: оскільки ми хочемо максимізувати лог-правдоподібність, а minimize() за замовчуванням знаходить мінімум, зручніше обчислювати негативну лог-правдоподібність.
Значення лог-правдоподібності для кожного спостереження дорівнює $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
Потрібно обчислити метрику як негативну суму цих внесків лог-правдоподібності.
Пояснювальні значення (стовпець time_since_last_purchase у churn) доступні як x_actual.
Відповідні значення (стовпець has_churned у churn) доступні як y_actual.
logistic імпортовано з scipy.stats, а logit() і minimize() теж завантажені.
Ця вправа є частиною курсу
Середній рівень регресії зі statsmodels у Python
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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]))