1. 학습
  2. /
  3. 강의
  4. /
  5. Python의 statsmodels로 배우는 중급 회귀

Connected

연습 문제

로지스틱 회귀 알고리즘

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

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

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

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

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

지침 1/2

undefined XP
    1
    2

함수 본문을 완성하세요.

  • coeffs를 각각 intercept와 slope로 언패킹하세요.
  • 예측 y 값을, 절편에 기울기와 실제 x 값을 곱한 값을 더한 뒤 로지스틱 CDF로 변환하여 계산하세요.
  • 로그가능도는 예측 y 값의 로그에 실제 y 값을 곱한 항과, (1 - 예측 y 값)의 로그에 (1 - 실제 y 값)을 곱한 항의 합으로 계산하세요.
  • 로그가능도의 음의 합을 계산하세요.
  • 로그가능도의 음의 합을 반환하세요.