결과가 예/아니오일 때
선형회귀는 숫자를 예측합니다. 그러나 모형화할 가치가 있는 질문 상당수는 이진입니다: 고객이 이탈하는가, 환자가 회복하는가, 이메일이 클릭되는가. 0/1 결과에 직선을 적합하면 곧바로 무너집니다 - 그 직선은 −0.3이나 1.4 같은 말이 안 되는 확률을 태연히 예측합니다.
로지스틱 회귀는 결과의 확률 을 로그오즈(로짓) 변환을 통해 모형화함으로써 이를 해결합니다: log(p / (1 − p)) = 절편 + 기울기 × x. 로그오즈 척도는 수직선 전체를 오가므로 선형 방정식이 자연스럽게 들어맞고, 되돌려 사상하면 모든 예측이 익숙한 S자 곡선을 따라 (0, 1) 안으로 압축됩니다. 이 기법의 대가는 계수가 로그오즈 척도에 놓인다는 점이며, 로지스틱 회귀를 읽는 일의 전부는 그것을 사람이 이해할 수 있는 무언가로 되돌리는 것입니다.
적합하기: family = binomial과 함께 쓰는 glm()
glm()(일반화선형모형)은 lm()의 큰형이고, family = binomial이 로지스틱 회귀를 선택합니다. mtcars에서 am은 변속기 종류(1 = 수동, 0 = 자동)를 기록합니다 - 연비가 좋은 차가 수동인 경향이 있을까요?
출력을 읽기 전에 두 가지를 짚고 갑시다. 첫째, family = binomial은 선택 사항이 아닙니다 - 빠뜨리면 glm()이 조용히 최소제곱을 적합합니다. 둘째, 반응변수는 반드시 이진이어야 합니다: 0/1, 논리형, 또는 두 수준의 팩터여야 합니다(R은 두 번째 수준의 확률을 모형화합니다).
이제 summary를 블록별로 봅시다:
- Coefficients -
mpg의 Estimate는 약 0.31이며 이는 로그오즈 기울기입니다: mpg가 1 늘어날 때마다 수동일 로그오즈에 0.31이 더해집니다. 양수는 "확률을 높인다", 음수는 "낮춘다"는 뜻입니다 - 부호를 넘어서면 이 척도에서는 누구의 직관도 통하지 않으며, 그래서 다음 절이 존재합니다. - z value와 Pr(>|z|) - 회귀의 t-검정과 같은 논리입니다(Estimate ÷ Std. Error 후 "이것이 0일 수 있는가?"에 대한 p값). 다만 정규 근사를 쓰므로 t가 아니라 z입니다. 여기서 p ≈ 0.011로, mpg와 변속기 종류의 연관성이 잡음일 가능성은 낮습니다.
- Null deviance vs Residual deviance - 이탈도(deviance)는 glm 세계의 적합 불량 지표입니다(작을수록 좋습니다). Null deviance(자유도 31에서 43.2)는 절편만 있는 모형이고, residual deviance(자유도 30에서 29.7)가 여러분의 모형입니다. 자유도 하나어치 설명변수로 약 13.6이 줄어든 것이 "R-squared가 올라갔다"에 해당하는 glm식 표현입니다.
- AIC - 적합도와 복잡도의 균형을 매기는 모형 비교 점수이며 낮을수록 좋습니다. 혼자서는 의미가 없고 같은 데이터의 후보 모형들 사이에서 유용합니다.
로그오즈에서 오즈비로: exp(coef())
지수를 취하면 계수가 덧셈적인 로그오즈 척도에서 곱셈적인 오즈 척도로 옮겨 갑니다:
exp(0.307) ≈ 1.36이며, 외워 둘 정직한 문장 형식은 이렇습니다: "mpg가 1 늘어날 때마다 수동 변속기의 오즈가 약 1.36배가 된다." 오즈비가 1보다 크면 오즈를 높이고, 1보다 작으면 낮추며, 정확히 1이면 효과가 없습니다 - 그래서 오즈비에 대한 신뢰구간 판정은 "구간이 1 을 제외하는가?"입니다(0이 아닙니다. 0은 로그오즈 척도에서의 경계였죠).
용어에 주의하세요: 오즈는 확률이 아닙니다. 오즈 = p / (1 − p)이므로 확률 0.75는 오즈 3입니다. 오즈 에 1.36을 곱하는 것은 확률 에 1.36을 곱하는 것과 다르며, 결과가 흔할수록 그 격차가 커집니다. 드문 결과에 대한 오즈비 2는 "위험이 대략 두 배"처럼 동작하지만, 발생률이 50%인 결과에서는 결코 그렇지 않습니다. 결과가 드물지 않다면 오즈비를 위험비 표현("1.36배 더 그럴 가능성이 높다")으로 절대 보고하지 마세요.
예측 확률: type = "response" 함정
실무에서 가장 흔한 로지스틱 회귀 버그입니다:
첫 번째 호출은 기본값인 type = "link" 를 반환합니다 - 음수 값까지 포함해 로그오즈 척도의 예측이죠. 두 번째는 실제 확률을 반환합니다. "확률"이 음수이거나 1을 넘는다면 이것이 이유입니다. 블록을 실행해 보세요: 15 mpg 자동차는 수동일 가능성이 사실상 없고, 30 mpg 자동차는 수동일 가능성이 매우 높으며, S자 곡선이 그 중간을 통과합니다.
분류: 임계값과 혼동표
확률은 절단값을 정하면 예측 범주가 됩니다 - 기본 선택은 0.5입니다 - 그리고 정직한 성적표는 예측 대 실제 표입니다:
대각선 칸이 올바른 판정이고, 대각선 밖의 두 칸이 서로 다른 두 종류의 실수입니다(자동을 수동으로 예측하는 것과 그 반대). 전체 정확도만 보면 모형을 심하게 미화할 수 있습니다 - 고객의 95%가 이탈하지 않는다면 "아무도 이탈하지 않는다고 예측하기"가 95점을 받으면서 이탈자를 하나도 잡지 못하죠 - 그러니 언제나 두 종류의 오류를 모두 보세요. 그리고 0.5는 관례이지 법칙이 아닙니다: 두 실수의 비용이 다르다면 임계값을 그에 맞게 옮기세요.
정직성을 위한 단서 하나: 이 표는 모형을 적합할 때 쓴 바로 그 데이터로 채점하므로 모형에 유리합니다. 진짜 평가는 모형이 본 적 없는 데이터를 따로 남겨 둡니다.
여러 설명변수
lm()과 정확히 같습니다 - +로 항을 추가하고, 모든 해석에 "다른 변수를 고정한 채"라는 단서가 붙습니다:
이제 지수를 취한 각 계수는 다른 설명변수가 같은 자동차들 사이에서 해당 변수가 한 단위 증가할 때의 오즈 배수입니다. 장치는 확장되지만 선형회귀에서의 주의 사항도 함께 확장됩니다: 상관된 설명변수들은 서로의 계수를 재배치합니다.
주의 사항
- 완전분리(complete separation). 어떤 설명변수가 결과를 완벽하게 가른다면(어떤 mpg 이상은 모두 수동, 미만은 모두 자동), 최대가능도 계수는 무한대가 되려 합니다. R은 경고를 냅니다 -
glm.fit: fitted probabilities numerically 0 or 1 occurred- 그리고 터무니없는 표준오차와 함께 거대한 계수를 보고합니다. 그 숫자를 그대로 내보내지 마세요. 모형을 단순화하거나 데이터를 더 모으거나 벌점화 방법(brglm2나logistf패키지)을 쓰세요. - 충분한 사건 수. 제약이 되는 것은 전체 행 수가 아니라 더 드문 결과의 개수입니다. 오래된 경험칙은 설명변수당 사건 10–15개 정도를 요구합니다. 여기의 자동차 32대 예제는 원리를 가르치기 위한 것이지 출판 가능한 표본 크기의 본보기가 아닙니다.
- 오즈비는 위험비가 아닙니다 - 결과가 흔할 때 특히 그렇습니다. 위에서 다뤘지만, 여러분이 놓쳐도 심사자는 잡아낼 것이므로 다시 강조합니다.
핵심 정리
- 이진 결과 →
glm(y ~ x, data = df, family = binomial).family를 절대 잊지 마세요. - 원래 계수는 로그오즈입니다.
exp(coef(fit))이 오즈비를 주며, 그 구간의 귀무값은 1입니다. - 문장 형식: "x가 한 단위 증가할 때마다 결과의 오즈가 exp(b)배가 된다."
- 확률에는
predict(..., type = "response")를 쓰세요 - 기본값은 로그오즈를 반환하며 이것이 1순위 혼동입니다. - 임계값으로 분류하고 혼동표로 판단하세요. 정확도만으로는 거짓말이 될 수 있습니다.
- 분리 경고를 주시하고, 사건 수를 세고, 오즈비를 위험비처럼 포장하지 마세요.
다음 주제: 지금까지 본 모든 구간의 배후 장치 - t.test(), confint(), prop.test()로 만드는 신뢰구간입니다.
자주 묻는 질문
R에서 로지스틱 회귀는 어떻게 수행하나요?
glm()과 family = binomial을 사용합니다: fit <- glm(am ~ mpg, data = mtcars, family = binomial) 후 summary(fit)을 실행하세요. 반응변수는 반드시 이진이어야 합니다 - 0/1, TRUE/FALSE, 또는 두 수준의 팩터입니다. family = binomial을 빠뜨리면 조용히 일반 선형회귀가 적합됩니다.
R에서 glm 계수는 어떻게 해석하나요?
원래 계수는 로그오즈 척도에 있는데, 아무도 그 척도로 생각하지 않습니다. exp(coef(fit))으로 지수를 취해 오즈비를 얻으세요: 어떤 설명변수의 값이 1.36이라면 그 변수가 한 단위 증가할 때마다 결과의 오즈가 약 1.36배가 된다는 뜻입니다. 1보다 크면 오즈를 높이고, 1보다 작으면 낮추며, 정확히 1이면 효과가 없습니다.
R에서 glm의 예측 확률은 어떻게 얻나요?
predict(fit, newdata, type = "response")를 사용하세요. 이것이 1순위 함정입니다: 기본값인 type = "link"는 확률이 아니라 로그오즈를 반환합니다 - 그러니 "확률"이 음수이거나 1을 넘는다면 type = "response"를 잊은 것입니다.
오즈와 확률의 차이는 무엇인가요?
확률은 전체 시행 대비 성공이고, 오즈는 실패 대비 성공입니다. 확률 0.75는 오즈 3(실패 하나당 성공 셋)에 해당합니다. 로지스틱 회귀의 오즈비는 확률이 아니라 오즈를 곱하며, 결과가 흔할수록 오즈비는 대응하는 위험비보다 훨씬 커질 수 있으니 하나를 다른 하나처럼 제시하지 마세요.