시작하기무료로 시작하기

로지스틱 회귀 알고리즘

이제 내부 동작을 살펴보며 로지스틱 회귀 알고리즘을 직접 구현해 보겠습니다. statsmodelslogit() 함수는 매우 복잡하므로, 여기서는 하나의 데이터셋에 대한 단순 로지스틱 회귀만 구현합니다.

평가지표로 제곱합을 쓰는 대신, 가능도(likelihood)를 사용하겠습니다. 다만 로그가능도(log-likelihood)가 수치적으로 더 안정적이므로 이를 사용하지요. 한 가지 더: 우리는 로그가능도를 최대화해야 하지만 minimize()는 기본적으로 최소값을 찾습니다. 따라서 계산을 쉽게 하려면 로그가능도에 마이너스를 붙인, 즉 음의 로그가능도를 최소화하면 됩니다.

각 관측치에 대한 로그가능도 값은 다음과 같습니다. $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$

우리가 계산할 지표는 이 로그가능도 항들의 음의 합입니다.

설명 변수 값(churntime_since_last_purchase 열)은 x_actual로 제공됩니다. 반응 변수 값(churnhas_churned 열)은 y_actual로 제공됩니다. scipy.stats에서 logistic이 임포트되어 있고, logit()minimize()도 로드되어 있습니다.

이 연습은 강의의 일부입니다

Python의 statsmodels로 배우는 중급 회귀

강의 보기

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

# 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]))
코드 편집 및 실행