logo

[통계] 로지스틱 회귀분석

로지스틱 회귀분석

로지스틱 회귀분석은 선형 모형을 일반화한 비선형 회귀분석입니다. 로지스틱 회귀분석은 로지스틱 함수라는 S자 모양 함수를 씁니다. 이것을 다른 이름으로는 시그모이드(sigmoid) 라고도 하는데, 그리스 문자 시그마(sigma)를 닮았다(-oid)는 뜻입니다. 시그마가 S의 조상격 되는 글자거든요.

로지스틱 함수는 함수값이 0에서 1 사이로 나옵니다. -\infty로 가면 0에 가까워지고, \infty로 가면 1에 가까워지는 형태입니다.

로지스틱 회귀분석은 아래와 같은 형태로 분석을 하게 됩니다.

y=logistic(a+bx) y = \text{logistic}(a + bx)

yy는 확률로 해석을 합니다. 예를 들어 고객의 이탈을 예측하고 싶다면, 고객은 이탈을 하거나 말거나 둘 중에 하나입니다. 예측을 할 때는 이탈할 확률로 예측을 할 수 있습니다. 이때 로지스틱 회귀분석을 사용합니다.

=== "Python"

from statsmodels.formula.api import logit

ch = pd.read_excel('churn.xlsx)
m = logit('has_churned ~ join + last_purchase', ch).fit()

결과 요약

m.summary()

McFadden의 유사 R제곱

res.prsquared

AIC와 BIC

m.aic
m.bic

=== "R"

ch = readxl.read_excel('churn.xlsx)
m = glm(has_churned ~ join + last_purchase,
        family = binomial, data = ch)

결과 요약

summary(m)

AIC와 BIC는 별도로 확인

AIC(m)
BIC(m)
 

로지스틱 회귀 계수 해석하기

 

승산

Odds

πi1πi=P(yi=1xi)P(yi=0xi) \frac{\pi_i}{1-\pi_i} = \frac{P(y_i = 1|x_i)}{P(y_i = 0|x_i)}
  • πi\pi_i: 성공할 확률
  • 성공, 실패 확률이 같으면 1
  • 성공할 확률이 0.7이면 2.333
  • 즉 Odds가 1보다 크면 성공할 확률이 더 크고 1보다 작으면 실패할 확률이 더 큰 것을 의미함
 

승산비

Odds ratio

odds(x+1)odds(x)=F(x+1)1F(x+1)F(x)1F(x)=eβ0+β1(x+1)eβ0+β1x=eβ1 \frac{\text{odds}(x+1)}{\text{odds}(x)} = \frac{\frac{F(x+1)}{1-F(x+1)}}{\frac{F(x)}{1-F(x)}} = \frac{e^{\beta_0+\beta_1(x+1)}}{e^{\beta_0+\beta_1x}} = e^{\beta_1}
  • eβ1e^{\beta_1}: x가 1만큼 증가했을 때 승산이 어떻게 변하는가를 나타냄
  • eβ1e^{\beta_1} = 1 이라면
    • 분자와 분모가 같다는 뜻
    • odds(x+1)\text{odds}(x+1)odds(x)\text{odds}(x)가 같다는 뜻
    • x가 변했음에도 불구하고 성공과 실패 확률이 변함이 없다는 뜻
    • 즉, 변수가 확률에 어떠한 영향도 미치지 않음
  • eβ1e^{\beta_1} > 1 이라면
    • 분자가 더 커야 함
    • x가 1만큼 커졌을 때 성공 확률이 늘어난 경우
    • 성공 확률에 긍정적인 영향을 미치는 경우
  • eβ1e^{\beta_1} < 1 이라면
    • 분모가 더 커야 함
    • x가 1만큼 커졌을 때 성공 확률이 떨어진 경우
    • 성공 확률에 부정적인 영향을 미치는 경우

!!! question 암 데이터에서 diagnosis를 예측하는 로지스틱 회귀분석을 해보세요. 독립변수로는 area_worst, smoothness_worst, symmetry_worst, fractal_dimension_worst 4가지를 사용하세요.

(01) area_worst의 기울기는 얼마입니까?

(02) 위 모형의 정확도는 얼마입니까? (M을 양성으로 간주, 소수점 셋째 자리에서 반올림)

(03) 위 모형의 정밀도는 얼마입니까? (M을 양성으로 간주, 소수점 셋째 자리에서 반올림)

(04) 위 모형의 재현도는 얼마입니까? (M을 양성으로 간주, 소수점 셋째 자리에서 반올림)

(05) 위의 모형을 모형 1이라 하고, 여기에서 fractal_dimension_worst를 제외한 모형을 모형 2라고 할 때 어떤 모형이 더 로그우도가 높습니까?

  • 모형1
  • 모형2
  • 알 수 없다

(06) 모형1과 모형2를 비교할 때, 어떤 모형이 더 나은 모형이라고 할 수 있습니까?

  • 모형1
  • 모형2
  • 알 수 없다

!!! question

A/B 테스팅 데이터를 다운받아 분석을 해보십시오.

독립변수는 weekendgroup을 사용하고 종속변수는 click으로 하여 로지스틱 회귀분석을 해보세요.

단, 데이터에서 분할하여 80%는 추정용으로 사용하고, 나머지 20%는 테스트용으로 사용하세요. (random_state=1234로 설정)

모형 1은 click ~ weekend + group로, 모형 2는 click ~ weekend + group + weekend:group으로 분석하세요.

(01) AIC와 BIC로 비교할 때 어떤 모형이 더 나은 모형입니까?

  • 모형 1
  • 모형 2
  • 알 수 없다

(02) 테스트 데이터를 이용해서 모형 1과 모형 2의 정확도(accuracy)를 평가해보세요. (문턱값 0.5) 어떤 모형의 정확도가 더 높습니까?

  • 모형 1
  • 모형 2
  • 알 수 없다

(03) 모형2의 기울기를 해석해보세요. 어떤 결론을 내릴 수 있습니까? (weekend=1이 주말)

  • 주중에도 A안, 주말에도 A안이 더 클릭이 많이 된다
  • 주중에는 A안, 주말에는 B안이 더 클릭이 많이 된다
  • 주중에는 B안, 주말에는 A안이 더 클릭이 많이 된다
  • 주중에도 B안, 주말에도 B안이 더 클릭이 많이 된다

!!! question 종속변수가 범주형인 지도학습은?

  • 회귀 분석
  • 범주 분석
  • 분류 분석
  • 비지도 학습

!!! question 2개의 범주를 가진 변수를 예측하는 경우에 대한 설명으로 잘못된 것은?

  • 이항 분류라고 한다
  • 로지스틱 회귀분석을 적용한다
  • 한 개의 더미변수를 예측한다
  • 긍정적인 경우를 양성이라고 한다

!!! question 로지스틱 회귀분석에서 출력값이 0.8입니다. 그 의미는?

  • 더미변수에서 0으로 표시하는 범주에 해당할 확률이 80%
  • 더미변수에서 1로 표시하는 범주에 해당할 확률이 80%

!!! question 로지스틱 회귀분석에서 기울기에 대한 설명으로 잘못된 것은

  • 기울기가 +이면 독립변수가 증가할 수록 확률도 증가한다
  • 기울기가 -이면 독립변수가 증가할 수록 확률도 감소한다
  • 기울기의 크기가 클 수록 독립변수의 증가에 대해 확률의 변화가 크다
  • 기울기가 0.1이면 독립변수가 1 증가할 때 확률도 0.1 증가한다
 

예측

=== "Python"

import numpy as np
prob = res.predict(df)  # 확률 예측
y_pred = numpy.where(prob > 0.5, 1, 0)  # 문턱값보다 크면 1, 아니면 0으로 예측
y_test = df.has_churn  # 실제값

=== "R"

prob = predict(m, df, type = "response")  # 확률 예측
y_pred = ifelse(prob > 0.5, 1, 0)  # 문턱값보다 크면 1, 아니면 0으로 예측
y_test = df<InlineMath math={`has_churn  # 실제값
Next
통계