본문으로 바로가기

로지스틱 회귀 가정: 모델링 전에 꼭 확인해야 할 것들

로지스틱 회귀의 가정을 실무적으로 안내하고, Python과 R에서 위반을 잡아내는 진단과, 가정이 성립하지 않을 때의 대안을 다룹니다.
업데이트됨 2026년 6월 15일  · 15분 읽다

로지스틱 회귀 모델을 학습한 뒤, 계수를 신뢰할 수 있다고 어떻게 확신할 수 있을까요?

로지스틱 회귀는 간단하기로 유명합니다. scikit-learn에서는 .fit()를 호출하고 오즈비를 읽어 보면 거의 끝이죠. 하지만 많은 초보자가 모르는 사실은 이 모델에도 고유한 가정이 있고, 이를 따르지 않으면 계수가 오해를 불러일으키며 어떤 평가 지표도 알려주지 못하는 방식으로 예측이 빗나간다는 점입니다.

사실대로 말하면, 로지스틱 회귀는 선형 회귀보다 가정이 적고, 그마저도 확인하기가 쉽습니다. 출력값을 해석하기 전에 올바른 진단을 실행해 모델의 어느 부분을 신뢰할 수 있는지 알기만 하면 됩니다.

이 글에서는 로지스틱 회귀가 두는 모든 가정을 하나씩 살펴보며, Python과 R에서 확인하는 방법, 가정이 깨졌을 때 벌어지는 일, 그리고 가정을 따를 수 없을 때 선택할 대안을 안내합니다.

데이터 사이언스와 머신 러닝이 처음이라면, 단순 선형 회귀가정과 진단을 다룬 블로그 글을 먼저 읽어 보세요.

로지스틱 회귀란?

로지스틱 회귀는 범주형 결과의 확률을 예측하는 분류 모델입니다. 예측 변수를 입력하면 0과 1 사이의 숫자를 반환하는데, 이를 특정 클래스에 속할 확률로 읽을 수 있습니다.

대부분 이 모델을 이진 분류, 예를 들어 이탈/비이탈, 스팸/비스팸 등에 사용합니다. 다중 클래스와 서열형 로지스틱 회귀 같은 변형은 두 개 초과의 클래스를 다루지만, 사람들이 "로지스틱 회귀"라고 말할 때는 대개 이진 경우를 뜻합니다.

겉보기와 달리, 모델은 예측 변수의 선형 결합을 적합하고 그 결과를 로지스틱 함수에 통과시킵니다. 출력은 확률이며, 계수는 각 예측 변수가 로그 오즈를 어떻게 이동시키는지 알려줍니다.

로지스틱 회귀는 선형 회귀와 다르다는 점은 강조할 가치가 있습니다. 전자는 잔차의 정규성, 등분산성, 예측 변수와 타깃 간 선형성 같은 익숙한 가정을 가집니다. 로지스틱 회귀는 그런 가정을 하지 않습니다. 고유한 목록이 있으며, 선형 회귀의 가정을 그대로 적용하면 잘못된 결론에 이르게 됩니다.

로지스틱 회귀에 대한 자세한 내용은 Python 구현을 보여주는 블로그 글을 읽어 보세요.

로지스틱 회귀 가정이 중요한 이유

가정은 모델을 어떻게 사용할지와 직접 연결되기 때문에 중요합니다.

가정을 지키면 계수는 기대한 의미를 가집니다. 읽어낸 오즈비는 타당하며, 모델의 확률은 실제 결과와 잘 대응합니다. 가정을 지키지 않으면, 혼동 행렬이나 다른 어떤 지표도 보여주지 않는 방식으로 모든 것이 흔들립니다.

좋은 소식은 위반이 이진적이지 않다는 점입니다. 예를 들어 로그리트의 선형성 가정에서 가벼운 일탈이 있다고 해서 모델이 쓸모없어지지 않습니다. 오즈비가 약간 빗나가고 예측이 최선보다 못할 수 있다는 뜻일 뿐입니다. 많은 운영 모델이 완벽하지 않은 가정 검사를 안고도 잘 작동하며, 그 자체로 괜찮습니다.

피해야 할 것은 검사를 건너뛰는 것입니다. 진단 없이는 작은 문제인지 큰 문제인지, 예측이 실패할 때까지 알 방법이 없습니다.

로지스틱 회귀 가정 개요

각 가정으로 들어가기 전에, 확인해야 할 전체 목록을 보겠습니다.

가정 요구 사항 일반적 진단
독립 관측치 한 레코드가 다른 레코드에 영향을 주지 않음 연구 설계, 군내 상관(ICC)
적절한 결과 변수 이진이거나 올바른 변형으로 모델링 타깃 점검
로그리트의 선형성 예측 변수가 로그 오즈에서 선형 Box-Tidwell 검정, 스플라인
심각한 다중공선성 없음 예측 변수 간 강한 상관 없음 VIF, 상관 행렬
충분한 표본 크기 변수당 충분한 사건 수 EPV 경험 법칙
영향력이 큰 이상치 없음 단일 레코드가 적합을 왜곡하지 않음 Cook의 거리, 레버리지

로지스틱 회귀 가정 표

확인 목록은 이렇습니다. 이제부터는 각 가정을 Python과 R 진단과 함께 살펴보며, 위반 시 어떤 모습인지, 문제가 생기면 무엇을 할지 안내합니다.

로지스틱 회귀의 주요 가정

가정 1: 결과 변수는 이진(또는 적절히 모델링)이어야 함

표준 로지스틱 회귀는 이진 결과를 위해 만들어졌습니다. 타깃 변수는 정확히 두 범주를 가져야 하며, 모델은 이 경우를 중심으로 설계되어 있습니다.

대표적인 예는 이탈/비이탈, 질병 있음/없음입니다. 예/아니오 질문으로 표현할 수 있으면 잘 맞습니다.

결과가 두 개를 초과하면 다른 변형이 필요합니다. 다항 로지스틱 회귀는 고객 세그먼트나 제품 유형처럼 순서가 없는 범주를, 서열 로지스틱 회귀는 1~5 만족도처럼 수준 간 순서가 의미 있는 범주를 다룹니다.

다중 클래스를 이진 모델에 억지로 끼워 맞추면 합치면 안 되는 범주를 합치게 됩니다. 예를 들어 5수준 만족도를 "만족/불만족"으로 줄이면, 모델에 도움이 될 정보를 잃게 됩니다. 타깃의 형태에 맞는 변형을 선택하세요.

가정 2: 관측치는 독립이어야 함

데이터의 각 행은 다른 행이 이미 제공한 정보를 반복하지 않아야 합니다. 두 레코드가 이 가정을 어기는 방식으로 연결되어 있으면 표준 오차와 p-값이 본래 의미를 잃습니다.

모델링하지 않은 공통 구조를 관측치가 공유하면 가정이 무너집니다. 좋은 예는 동일 환자에 대한 반복 측정으로, 그 환자의 생물학을 공유합니다. 같은 교실에 묶인 학생들도 교사와 교실을 공유하므로 마찬가지입니다.

이를 무시하고 일반 로지스틱 회귀를 적합하면, 모델은 각 행을 새로운 정보로 취급해 표준 오차를 과도하게 줄입니다. 계수는 겉보기엔 괜찮아 보여도, p-값과 신뢰구간은 과신하게 됩니다.

표준 대안은 혼합효과 로지스틱 회귀와 GEE입니다. 혼합효과 모델은 그룹(환자, 교실)에 대한 랜덤 효과를 추가해 그룹 내 상관을 반영합니다. GEE(일반화 추정 방정식)는 랜덤 효과 없이도 보정된 표준 오차를 가진 모집단 평균 효과를 제공합니다.

그룹 내 변동에 관심이 있으면 혼합효과, 모집단 전반의 한계 효과가 필요하면 GEE를 선택하세요.

가정 3: 로그리트의 선형성

로지스틱 회귀에 대해 가장 많이 오해하는 가정입니다.

모델은 예측 변수가 결과와 선형 관계라고 가정하지 않습니다. 예측 변수가 결과의 로그 오즈와 선형 관계라고 가정합니다. 이는 다른 주장이고, 확인해야 할 것을 바꿉니다.

로그리트란

로그리트는 오즈의 자연로그입니다. 확률 p에 대해, 오즈는 p / (1 - p)이고, 로그리트는 그 비율의 로그입니다:

The logit

로그리트

로지스틱 회귀는 이 스케일에서 선형 방정식을 적합합니다:

Logistic regression formula

로지스틱 회귀 공식

오른쪽은 예측 변수에 선형입니다. 왼쪽은 확률이 아니라 로그 오즈입니다. 실제로 관심 있는 확률은 이 선형 결합을 로지스틱 함수에 통과시켜 복원하며, 이는 비선형입니다.

따라서 어떤 예측 변수와 확률 간 관계는 비선형입니다. 예측 변수와 로그 오즈 간 관계가 선형이어야 합니다.

실무에서 왜 중요한가

로그리트의 선형성이 어떤 예측 변수에서 성립하지 않으면, 그 변수의 계수는 곡선을 직선으로 요약한 값이 됩니다. 모델은 여전히 숫자를 내놓고, 그 숫자가 통계적으로 유의할 수도 있지만, 데이터의 실제 관계를 설명하지 못합니다.

예를 들어 age가 질병의 로그 오즈에 U자형 효과를 가질 수 있습니다. 양 끝단에서 위험이 높고 가운데에서 낮은 경우죠. age를 단일 선형 항으로 넣으면, 계수가 0에 가깝게 나와 나이가 중요하지 않다고 결론내릴 수 있습니다. 실제로는 중요합니다. 명세가 잘못된 것입니다.

로그리트의 선형성 점검

이 가정을 확인하는 방법은 몇 가지가 있습니다.

가장 빠른 점검은 시각적 검토입니다. 연속형 예측 변수를 분위수(10분위)로 구간화하고, 각 구간의 경험적 로그 오즈를 계산해 예측 변수와 함께 그립니다. 대략 직선이면 가정이 성립합니다. 분명한 곡선이면 성립하지 않습니다. 비공식적이지만 구간당 데이터가 충분할 때 잘 작동합니다.

Box-Tidwell 검정은 각 연속형 예측 변수와 그 자연로그의 상호작용 항을 추가합니다. 상호작용이 통계적으로 유의하면 그 변수에서 로그리트 선형성 가정이 위배됩니다. 이 검정은 0 이하 값에 로그를 취할 수 없으므로 엄밀히 양수인 예측 변수에만 적용되며, 다른 유의성 검정과 마찬가지로 표본 크기에 민감합니다.

스플라인도 방법입니다. 선형성이 유지되는지 확인하는 대신, 선형 항을 제한적 삼차 스플라인 같은 유연한 기저함수로 대체해 모델이 필요한 형태를 적합하도록 합니다. 스플라인이 선형 항보다 훨씬 잘 맞으면(우도비 검정이나 AIC로 판단), 선형 명세가 지나치게 제한적이었다는 근거가 됩니다. 스플라인은 해결책이기도 합니다. 선형성이 실패할 때 최종 모델에 유지하는 것이 종종 최선입니다.

선형성이 실패하면 무엇을 할까

가정이 어떤 예측 변수에서 실패하면 옵션은 두 가지입니다.

  • 예측 변수를 변환(로그나 제곱근 변환 등)해 로그 오즈에서 관계가 선형에 가깝도록 만듭니다
  • 스플라인을 사용하고 약간 더 복잡한 모델을 수용합니다

둘 다 로지스틱 회귀 계열 안에 머무르며, 실제로 유의한 예측 변수를 제외하는 것보다 훨씬 낫습니다.

가정 4: 심각한 다중공선성이 없어야 함

로지스틱 회귀는 어느 정도까지 상관된 예측 변수를 처리합니다. 그 선을 넘으면 모델이 테스트 지표로는 파악하기 어려운 방식으로 이상 동작하기 시작합니다.

다중공선성은 두 개 이상의 예측 변수가 같은(또는 매우 유사한) 정보를 가질 때 발생합니다. 예를 들어, 같은 모델에 인치 단위 키와 센티미터 단위 키를 모두 넣거나, 총매출과 고객당 매출을 고객 수와 함께 넣는 경우입니다.

다중공선성이 있으면 두 가지 문제가 생깁니다.

  • 계수가 불안정해짐: 한두 행을 더하거나 빼면, 공선성이 있는 예측 변수의 계수가 크게 흔들리거나 부호가 뒤집힐 수 있습니다. 모델은 여전히 작동하지만, 개별 계수는 의미를 잃습니다.
  • 표준 오차가 팽창함: 예측 변수 하나당 독립 정보가 줄어들면, 각 계수에 대한 확신이 떨어집니다. p-값이 올라가고, 실제 효과가 유의하지 않게 보일 수 있습니다.

예측 자체는 보통 괜찮습니다. 예측 확률만 중요하다면, 경미한~중간 정도의 다중공선성은 문제를 잘 일으키지 않습니다. "손상"은 계수와 그에 대한 추론에 집중됩니다.

두 가지 점검은 상관 행렬과 분산 팽창 계수(VIF)입니다. 상관 행렬은 첫 관문으로, 절댓값 0.8 또는 0.9를 넘는 쌍을 특히 보세요. 다만 상관 행렬은 쌍wise 공선성만 포착하고, 세 개 이상 예측 변수가 집합적으로 중복되는 다중 공선성은 잡지 못합니다.

VIF는 그 다중 경우를 위한 것입니다. 각 예측 변수에 대해, 다른 변수들과의 공선성으로 인해 그 계수 분산이 얼마나 팽창하는지 측정합니다. VIF가 1이면 공선성이 없고, 5까지는 대개 괜찮으며, 10을 넘으면 모델 내 다른 변수들과 중복된다는 강한 신호입니다.

VIF가 경고하면 가장 쉬운 해결책은 공선성 변수 중 하나를 제거하거나 합계나 비율 같은 단일 특징으로 결합하는 것입니다. 모두 유지하고 싶다면, 정규화(릿지 또는 엘라스틱넷)가 선택 없이도 계수를 안정화합니다.

가정 5: 적절한 표본 크기

로지스틱 회귀는 작은 표본에서도 작동하지만 다소 신뢰성이 떨어집니다. 계수가 과도하게 흔들리고, 드문 클래스의 효과는 추정하기 거의 불가능해집니다.

로지스틱 회귀에서 중요한 표본 크기는 전체 행 수가 아닙니다. 사건 수(소수 클래스 관측치)입니다. 행이 100,000개이고 사기가 50건이면, 모델이 학습하려는 현상의 예가 50개뿐이므로 소표본 문제입니다.

여기서 변수당 사건 수(EPV)가 등장합니다. EPV는 소수 클래스 관측치 수를 모델의 예측 변수 수로 나눈 값입니다. 사기 50건과 예측 변수 10개라면 EPV는 5입니다.

과거 경험 법칙은 EPV 10 이상이었습니다. 최근 시뮬레이션 연구는 적정 수치가 데이터의 효과 크기와 사용하는 정규화 정도에 따라 달라진다고 보여줍니다. 어떤 설정에서는 EPV 5도 괜찮고, 다른 설정에서는 20 이상이 필요할 수 있습니다.

핵심은 EPV를 경고 신호로 대하는 것입니다. 10 미만이면 추정치가 불안정할 수 있으므로 Firth 로지스틱 회귀나 릿지 같은 벌점법을 고려하세요. 5 미만이면, 개별 계수를 신뢰하기 전에 데이터를 더 모으거나 모델을 단순화하세요.

클래스 불균형은 관련 있지만 별개의 문제입니다.

사례의 99%가 한 클래스인 데이터셋도 절대적 사건 수 기준으로는 EPV가 충분할 수 있습니다. 변하는 것은 결과의 기준율이지 EPV가 아닙니다. 불균형 데이터는 보수적인 확률 추정치를 만들어내는 경향이 있고, 정확도는 쓸모없는 지표가 됩니다. 이를 극복하려면 정확도 대신 로그 손실이나 브라이어 점수로 평가하고, 균형 잡힌 의사결정이 필요하면 클래스 가중치나 임곗값 튜닝을 고려하세요.

가정 6: 영향력이 큰 이상치가 없어야 함

로지스틱 회귀는 예측 변수가 정규 분포를 따른다고 가정하지 않습니다. 왜도가 있는 예측 변수와 카운트 변수도 자체로는 문제없습니다. 모델이 신경 쓰는 것은 어떤 단일 관측치가 적합된 계수에 과도한 영향을 주는지입니다.

영향력 있는 관측치는, 제거했을 때 모델이 의미 있게 달라지는 점입니다. 잔차 이상치와는 다릅니다. 잔차가 커도 영향력이 낮을 수 있고, 반대로 영향력이 큰데 잔차가 크지 않을 수도 있습니다.

서로 다른 측면을 보는 몇 가지 진단을 쓰세요.

  • 레버리지는 관측치의 예측 변수 값이 나머지 데이터와 얼마나 다른지 측정합니다. 레버리지 자체가 영향력을 뜻하지는 않습니다. 예측 변수로 기대되는 결과와 실제 결과가 맞지 않으면 영향력이 있을 잠재력이 있다는 의미입니다
  • Cook의 거리는 레버리지와 잔차를 하나의 수치로 결합해, 관측치를 제거했을 때 적합된 계수가 얼마나 바뀔지 추정합니다. 큰 Cook의 거리 값은 조사할 가치가 있는 점을 강조합니다. 일반적 기준은 4/n(n은 표본 크기) 이상이거나, 데이터셋에서 가장 큰 몇 개의 Cook의 거리를 보는 것입니다
  • 잔차 진단은 레버리지와 Cook의 거리가 잡지 못하는 경우에 유용합니다. 편차 잔차와 피어슨 잔차는 모델이 적합하기 어려워하는 관측치를 표시합니다. 잔차가 큰 점은 레버리지가 보통이어도 살펴볼 가치가 있습니다. 다른 예측 변수로는 그 사례를 설명할 수 없다는 신호이기 때문입니다

영향력 있는 점을 발견하면, 그 점이 실제인지 오류인지가 핵심입니다. 데이터 입력 오류는 수정하거나 제거합니다. 실제지만 특이한 사례는 남기고, 결론이 그 점에 의존함을 기록하세요. 영향력이 크다는 이유만으로 제외하지는 마세요. 그렇게 하면 학습 데이터에는 맞지만 그 밖에는 맞지 않는 모델이 됩니다.

로지스틱 회귀 가정에 대한 흔한 오해

로지스틱 회귀 가정을 둘러싼 혼란의 대부분은 선형 회귀의 점검 목록을 그대로 쓰면서 생깁니다. 선형 회귀의 가정은 널리 알려져 어디서나 가르치며, 로지스틱 회귀에도 어울리지 않는 곳에 나타납니다. 여기 가장 흔한 네 가지를 바로잡습니다.

로지스틱 회귀는 정규분포 변수를 요구한다

거짓입니다. 로지스틱 회귀는 모델의 어떤 변수에도 정규성 가정을 두지 않습니다.

결과는 정규가 아니라 이진이어야 하며, 이는 가정 1에서 다뤘습니다. 예측 변수 또한 정규를 가정하지 않으며, 데이터가 가진 어떤 형태도 가능합니다. 중요한 것은 각 예측 변수와 로그 오즈 간 관계이지, 단일 변수의 주변 분포가 아닙니다.

로지스틱 회귀는 등분산성을 요구한다

이 역시 거짓입니다. 등분산성(예측값 범위 전반에서 잔차 분산이 일정함)은 로지스틱 회귀에 적용되지 않는 선형 회귀의 가정입니다.

로지스틱 회귀에서 결과의 분산은 예측 확률 자체에 달려 있습니다. 베르누이 결과의 분산은 p(1 - p)로, p = 0.5 부근에서 가장 크고 0과 1에 가까울수록 가장 작습니다. 분산은 일정하지 않으며, 모델은 이를 최대화하는 우도 함수로 반영합니다.

따라서 로지스틱 회귀를 적합할 때, 예측 확률마다 분산이 달라도 가정을 위반하는 것이 아닙니다. 모델이 그렇게 작동하도록 설계되었기 때문입니다.

예측 변수는 정규분포여야 한다

거짓입니다. 로지스틱 회귀는 예측 변수의 분포에 대한 가정을 두지 않습니다.

연속형, 이진, 카운트, 범주형 예측 변수를 같은 모델에 섞어 쓸 수 있습니다. 왜도가 큰 변수도, 두꺼운 꼬리도 괜찮습니다. 모델은 주변 형태에 신경 쓰지 않습니다. 관심사는 로그리트의 선형성(가정 3)뿐이며, 이는 분포 형태가 아닌 관계 형태에 대한 가정입니다.

예측 변수의 왜도가 문제를 만든다면, 보통은 로그리트 선형성이나 영향력 큰 이상치 때문입니다.

잔차는 정규분포여야 한다

거짓입니다. 로지스틱 회귀의 잔차에 정규성 가정은 없습니다.

선형 회귀는 추론 방식의 일부로 잔차가 0을 중심으로 정규 분포한다고 가정합니다. 로지스틱 회귀는 이항 우도에 대한 최대우도추정을 사용하며, 잔차의 분포는 결과(0 또는 1)와 적합된 확률에 의해 결정됩니다. 정규가 아니며, 그럴 필요도 없습니다.

따라서 로지스틱 회귀에서 잔차 진단(가정 6)을 확인할 때는, 종 모양을 찾는 것이 아니라 영향력 있는 관측치와 모델이 설명하지 못하는 점을 찾는 것입니다.

Python에서 로지스틱 회귀 가정 확인하기

진단은 statsmodels로 진행하겠습니다. Scikit-learn도 로지스틱 회귀를 적합하지만 VIF, 영향 통계, 잔차 진단을 기본 제공하지 않습니다.

예시 설정

세 개의 예측 변수(age, income, spending score)를 가진 합성 이탈 데이터셋을 생성하겠습니다. 다중공선성 진단이 작동하도록 age와 income은 의도적으로 상관되게 합니다.

import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf

np.random.seed(42)
n = 1000

age = np.random.normal(40, 12, n).clip(18, 80)
income = 30000 + 1500 * age + np.random.normal(0, 8000, n)
spending_score = np.random.uniform(1, 100, n)
logit_p = -3 + 0.04 * age + 0.02 * spending_score
p = 1 / (1 + np.exp(-logit_p))
y = np.random.binomial(1, p)

df = pd.DataFrame({
    "churned": y,
    "age": age,
    "income": income,
    "spending_score": spending_score,
})

model = smf.glm(
    "churned ~ age + income + spending_score",
    data=df, family=sm.families.Binomial()
).fit()
print(model.summary())

Model summary

모델 요약

요약에는 계수, 표준 오차, z-통계량, p-값이 제공됩니다. agespending_score가 의미 있는 예측 변수로 나타납니다. income의 계수가 미미한 이유는 결과가 소득에 직접 의존하지 않기 때문입니다. 그 겉보기 효과는 age가 흡수합니다.

VIF로 다중공선성 확인

statsmodels로 매우 쉽게 계산할 수 있습니다.

from statsmodels.stats.outliers_influence import variance_inflation_factor

X = sm.add_constant(df[["age", "income", "spending_score"]])
vif = pd.DataFrame({
    "feature": X.columns,
    "VIF": [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
})
print(vif[vif["feature"] != "const"])

VIF output

VIF 출력

ageincome의 VIF는 약 5.5로, 경미한 다중공선성을 보여줍니다. spending_score는 1에 가깝고, 이는 바람직합니다. 다른 변수와의 공선성으로 분산이 팽창하지 않습니다. 5 초과는 경미한 경고, 10 초과는 즉시 해결해야 할 심각한 문제입니다. 여기서는 ageincome 중 하나를 제거하거나 하나의 특징으로 결합하는 것이 좋습니다.

Box-Tidwell로 로그리트 선형성 확인

Box-Tidwell 검정은 각 연속형 예측 변수와 그 자연로그 간 상호작용 항을 추가합니다. 유의한 상호작용은 해당 변수에서 비선형 로그 오즈 관계를 표시합니다.

df_bt = df.copy()
for col in ["age", "income", "spending_score"]:
    df_bt[f"{col}_logx"] = df_bt[col] * np.log(df_bt[col])

bt_formula = (
    "churned ~ age + income + spending_score + "
    "age_logx + income_logx + spending_score_logx"
)
bt_model = smf.glm(
    bt_formula, data=df_bt, family=sm.families.Binomial()
).fit()

interactions = ["age_logx", "income_logx", "spending_score_logx"]
print(bt_model.pvalues[interactions])

Box-Tidwell output

Box-Tidwell 출력

이 p-값 중 하나라도 0.05 미만이면 해당 변수에서 로그리트 선형성 가정이 의심됩니다. 여기서는 로그리트를 선형으로 생성했으므로 상호작용이 유의하지 않아야 합니다. 실제 데이터에서는 유의 결과를 해당 예측 변수에 대한 경험적 로그 오즈 도표로 이어가고, 변환 또는 스플라인 중 무엇이 적절한지 결정하세요.

영향 진단

statsmodels는 get_influence()를 통해 Cook의 거리와 레버리지에 접근할 수 있습니다.

influence = model.get_influence()
cooks_d = influence.cooks_distance[0]
leverage = influence.hat_matrix_diag

flagged = pd.DataFrame({
    "cooks_d": cooks_d,
    "leverage": leverage,
}).sort_values("cooks_d", ascending=False).head(10)
print(flagged)

Influence diagnostics output

영향 진단 출력

조사할 가치가 있는 Cook의 거리 임계값은 대략 4/n입니다. 행이 1000개면 0.004입니다. 이를 훨씬 넘는 값은 자세히 살펴보세요. 이 데이터셋에서는 가장 큰 Cook의 거리도 절대값으로 작아, 보통 바람직한 결과입니다.

이제 분포를 읽기 쉽게 시각화를 만들어 보겠습니다.

Influence diagnostics visualized

영향 진단 시각화

점선 임계값을 훌쩍 넘는 점들이 조사 대상입니다. 일부 있지만 많지는 않습니다.

잔차 진단

편차 잔차는 모델이 적합하기 어려워하는 관측치를 알려줍니다.

deviance_resid = model.resid_deviance
fitted = model.fittedvalues

resid_df = pd.DataFrame({
    "fitted": fitted,
    "deviance": deviance_resid,
}).sort_values("deviance", key=abs, ascending=False).head(10)
print(resid_df)

Residual diagnostics output

잔차 진단 출력

큰 양의 편차 잔차는 모델이 낮은 확률을 부여했지만 실제로는 양성인 사례입니다. 큰 음의 잔차는 그 반대입니다. 위 영향 진단과 교차 확인하세요. 예측이 나쁘고 영향력도 큰 사례가 가장 살펴볼 가치가 있습니다.

R에서 로지스틱 회귀 가정 확인하기

R은 이러한 진단을 더 촘촘히 내장 지원합니다. 대부분은 base R의 glm()car 패키지로 해결됩니다.

예시 설정

Python 예시와 같은 유형의 합성 데이터셋을 생성하되, age와 income을 의도적으로 상관되게 하겠습니다.

set.seed(42)
n <- 1000

age <- pmin(pmax(rnorm(n, mean = 40, sd = 12), 18), 80)
income <- 30000 + 1500 * age + rnorm(n, sd = 8000)
spending_score <- runif(n, min = 1, max = 100)
logit_p <- -3 + 0.04 * age + 0.02 * spending_score
p <- 1 / (1 + exp(-logit_p))
churned <- rbinom(n, size = 1, prob = p)

df <- data.frame(churned, age, income, spending_score)

model <- glm(churned ~ age + income + spending_score,
             data = df, family = binomial)
summary(model)

Model summary output

모델 요약 출력

summary(model) 출력에는 계수, 표준 오차, z-통계량, p-값이 제공됩니다. agespending_score가 의미 있어 보이고, income의 효과는 age가 흡수할 것입니다.

VIF로 다중공선성 확인

car 패키지는 어떤 glm에도 vif()를 제공합니다.

library(car)

vif(model)

VIF output in R

R의 VIF 출력

ageincome은 VIF가 약 5.7로, 데이터에 내재된 다중공선성을 보여줄 것입니다. spending_score는 1에 가깝습니다. Python과 마찬가지로 5 초과는 주의, 10 초과는 명확한 문제입니다.

Box-Tidwell로 로그리트 선형성 확인

car::boxTidwell 함수는 선형 회귀를 위해 설계되었으므로, 로지스틱 회귀에서는 상호작용 항을 수동으로 추가해 다시 적합하는 것이 가장 좋습니다.

df_bt <- df
df_bt$age_logx <- df_bt$age * log(df_bt$age)
df_bt$income_logx <- df_bt$income * log(df_bt$income)
df_bt$spending_score_logx <- df_bt$spending_score * log(df_bt$spending_score)

bt_model <- glm(
  churned ~ age + income + spending_score +
    age_logx + income_logx + spending_score_logx,
  data = df_bt, family = binomial
)

interactions <- c("age_logx", "income_logx", "spending_score_logx")
summary(bt_model)$coefficients[interactions, ]

Box-Tidwell output in R

R의 Box-Tidwell 출력

출력은 각 상호작용 항의 계수와 p-값을 보여줍니다. 유의한 p-값은 해당 예측 변수에서 로그리트 선형성 가정 위반을 표시합니다. 합성 데이터에서는 선형성을 기각하지 않아야 합니다. 실제 데이터에서는 유의한 변수를 경험적 로그 오즈 도표로 이어가거나(splines 패키지의) 스플라인 모델을 적합하세요.

영향 진단

R은 base에 cooks.distance()hatvalues()를 제공하므로 서드파티 패키지가 필요 없습니다.

cooks_d <- cooks.distance(model)
leverage <- hatvalues(model)

influence_df <- data.frame(
  index = seq_along(cooks_d),
  cooks_d = cooks_d,
  leverage = leverage
)
head(influence_df[order(-influence_df$cooks_d), ], 10)

Influence diagnostics in R

R의 영향 진단

Cook의 거리 임계값은 Python과 같습니다. 4/n, 즉 1000행 데이터셋에서는 0.004입니다. 이를 크게 넘는 점은 조사할 가치가 있습니다. 빠른 시각 점검을 위해 base R의 plot(model, which = 4)만으로도 Cook의 거리 플롯을 그릴 수 있습니다.

R의 영향 진단 시각화

잔차 진단

R의 residuals()는 glm의 편차 잔차를 제공합니다.

deviance_resid <- residuals(model, type = "deviance")
fitted_vals <- fitted(model)

resid_df <- data.frame(
  fitted = fitted_vals,
  deviance = deviance_resid
)
head(resid_df[order(-abs(resid_df$deviance)), ], 10)

Residual diagnostics in R

R의 잔차 진단

절댓값이 큰 편차 잔차는 모델의 예측이 빗나간 사례입니다. 위 Cook의 거리 플래그와 교차 확인해, 적합이 나쁘고 영향력도 큰 관측치를 찾으세요.

모든 정보를 한 번에 보려면, influence.measures(model)가 Cook의 거리, 레버리지, DFBETA 등 몇 가지 영향 통계를 한 표로 반환합니다. 적합된 glm의 표준 진단을 가장 빠르게 훑어보는 방법입니다.

가정이 위반되면 어떻게 될까?

대부분의 가정 위반은 모델이 작동하지 않을 정도로 망가뜨리지는 않습니다. 무엇을 봐야 알 수 있는 미묘한 방식으로 이상 동작을 일으킵니다.

주로 네 가지 결과가 나타납니다.

  1. 계수의 불안정성: 데이터의 작은 변화(몇 행 추가/삭제, 특징 공학의 미세 변경)로 계수가 크게 바뀌거나 부호가 뒤집힙니다. 다중공선성이 그렇고, 예측 변수 수에 비해 표본이 너무 작을 때도 그렇습니다
  2. 보정 악화: 모델의 예측 확률이 실제 비율과 어긋납니다. 어떤 그룹에 30% 이탈을 예측하지만 실제로는 15%입니다. 정확도는 괜찮아 보일 수 있어도 확률이 틀립니다. 로그리트 선형성 위반과 영향력 큰 이상치가 이에 기여합니다
  3. 오해를 부르는 추론: 가장 알아채기 어렵습니다. 모델은 여전히 멀쩡해 보이는 표준 오차와 p-값을 냅니다. 상관된 관측치는 표준 오차를 과소추정하고, 잘못된 예측 변수 명세는 과대추정합니다. 어쨌든 얻은 p-값은 의도한 의미를 갖지 않습니다
  4. 예측 품질 저하: 실무에서 가장 작게 나타나는 경우가 많지만, 가장 눈에 띄는 증상입니다. 예측은 계수보다 보통 더 잘 버티기 때문에, 정확도만 보는 팀은 경고 신호를 놓치기 쉽습니다.

실상, 위반이 모델을 쓸모없게 만드는 일은 드뭅니다. 모델의 일부를 신뢰할 수 없게 만들며, 어떤 부분이 불신뢰적인지는 어떤 가정이 깨졌느냐에 달려 있습니다. 그래서 진단이 중요합니다.

로지스틱 회귀 가정이 실패할 때의 대안

진단이 로지스틱 회귀 안에서 해결할 수 없는 문제를 가리키면, 다음 선택은 해당 가정을 두지 않는 모델입니다.

일반화 가법 모형(GAM)이 첫 후보입니다. GAM은 로지스틱 링크와 해석 가능한 가법 구조를 유지하면서, 선형 항을 각 예측 변수의 매끈한 함수로 대체합니다. 단일 숫자 대신 "형태를 가진 계수"를 얻어 로그리트 선형성 문제를 해결합니다. GAM은 여전히 점검하고 해석할 만큼 모수적이어서, 선형성 가정이 성립할 수 없을 때 로지스틱 회귀의 좋은 상위 대안입니다.

트리 기반 모델은 더 유연한 대안입니다. 랜덤 포레스트와 그래디언트 부스팅은 예측 변수 분포나 관계 형태에 대한 가정을 두지 않습니다. 다중공선성을 처리하고 비선형성까지 포착할 수 있습니다. 로지스틱 회귀가 주는 쉬운 계수 해석은 제공하지 않지만, 데이터에 비선형 구조나 명시하지 않은 상호작용이 있을 때 예측 측면에서 우수한 성능을 보이는 경향이 있습니다.

GAM과 트리 기반 모델 중 선택은 모델에서 무엇을 필요로 하느냐에 달려 있습니다.

  • 해석 가능성이 우선이고 각 예측 변수가 로그 오즈에 미치는 영향을 보고 싶다면 GAM을 선택하세요
  • 예측 품질이 우선이고 투명성이 다소 낮아도 된다면 그래디언트 부스팅 트리를 선택하세요

로지스틱 회귀의 가정은 무시하는 것보다 확인하는 것이 더 쉽다는 점도 주목할 만합니다. 변환, 스플라인, 정규화, 더 나은 표본으로 문제를 해결할 수 있다면, 로지스틱 회귀의 해석 가능성과 추론 출력이 더 유연한 모델로 전환했을 때보다 대개 우수합니다.

그러니 진단이 정말로 가정이 성립하지 않는다고 말할 때에만 GAM이나 트리로 이동하세요. 단지 로지스틱 회귀가 최신 알고리즘이 아니라는 이유로 옮기지는 마세요.

로지스틱 회귀 모델링 모범 사례

마지막으로, 항상 신뢰할 수 있는 모델을 얻기 위한 간단한 목록입니다.

  • 해석 전에 가정 점검: 계수를 읽기 전에 VIF, Box-Tidwell, 영향 진단을 실행하세요. 나중에 확인하면 검증하지 않은 숫자를 변호하게 됩니다. 회의에서 그런 상황은 피하세요
  • 표본이 작으면 정규화 사용: EPV가 낮거나 예측 변수가 상관되면 릿지나 엘라스틱넷으로 계수를 안정화하세요. 작은 편향으로 큰 분산 감소를 얻는 교환이며, 보통 좋은 선택입니다
  • 보지 못한 데이터로 검증: 테스트 세트를 홀드아웃하거나 교차 검증을 사용하세요. 예측 변수가 많거나 희귀 사건이 있을 때 로지스틱 회귀도 과적합 여지가 있어, 학습 성능은 실제보다 좋게 보입니다
  • 보정 평가: 정확도는 예측 확률이 실제 비율과 맞는지 숨깁니다. 로그 손실이나 브라이어 점수로 평가하고, 확률이 비즈니스 의사결정에 중요할 때는 보정 플롯을 보세요

결론

사실 로지스틱 회귀는 적합하기 꽤 관대한 모델 중 하나입니다.

왜도 있는 예측 변수와 불균형 결과를 잘 견디며, 잔차 모양에도 신경 쓰지 않습니다. 다만 로그 오즈와의 관계가 잘못 명세되었거나, 같은 정보를 가진 예측 변수가 모여 있는 것은 용납하지 않습니다.

그래서 로그리트 선형성과 다중공선성은 반드시 확인해야 할 두 가지 가정입니다. 이 둘은 어떤 테스트 지표로도 잡히지 않는 방식으로 모델을 왜곡합니다. 다른 네 가지 가정도 중요하지만, 이 둘에 특히 집중해야 합니다.

안전하게 가려면, 평가와 동시에 진단을 실행하세요. 예측도 잘하고 가정 검사도 통과한 모델은 자신 있게 제시할 수 있습니다. 그 이하라면, 모델을 학습했을 뿐 제대로 검증하지는 않은 것입니다.

복잡해 보인다면 실제로 그렇기 때문입니다. 훌륭한 머신 러닝 엔지니어가 되려면 배울 것이 많습니다. Machine Learning Scientist in Python 트랙에 등록해 보세요. 85시간의 학습으로 2026년 취업 준비를 마칠 수 있습니다.

FAQs

로지스틱 회귀에도 가정이 있나요?

그렇습니다. 로지스틱 회귀는 선형 회귀보다 가정이 적지만, 가정이 전혀 없는 것은 아닙니다. 주요 가정은 결과 변수의 형태, 관측치의 독립성, 로그 오즈의 선형성, 높은 다중공선성이나 영향력이 큰 점의 부재를 포함합니다.

로지스틱 회귀의 가장 중요한 가정은 무엇인가요?

가장 중요한 두 가지는 로그 오즈의 선형성과 높은 다중공선성의 부재입니다. 로지스틱 회귀는 예측 변수와 결과 간 선형 관계를 가정하지 않지만, 예측 변수와 로그 오즈 간 선형 관계는 가정한다는 점이 자주 오해됩니다. 다중공선성은 정확도에는 영향을 주지 않으면서 계수를 왜곡하고 표준 오차를 팽창시키므로, 예측 성능만 보는 점검으로는 숨을 수 있습니다.

로지스틱 회귀 가정을 위반하면 어떻게 되나요?

어떤 가정이 깨졌는지에 달려 있습니다. 로그리트 선형성 위반이나 강한 다중공선성은 정확도는 그대로 두면서 계수를 조용히 손상시켜, 눈치채기 쉽지 않습니다. 독립성 실패는 표준 오차를 과대/과소추정해 p-값을 신뢰할 수 없게 만듭니다. 대부분의 위반은 모델을 무용지물로 만들지 않지만, 정확도만으로는 드러나지 않는 방식으로 일부를 신뢰할 수 없게 만듭니다.

로지스틱 회귀는 정규분포 예측 변수가 필요한가요?

아니요. 로지스틱 회귀는 예측 변수의 분포에 대한 가정을 두지 않습니다. 연속형, 범주형, 왜도가 큰 변수, 두꺼운 꼬리 변수를 같은 모델에 섞어도 문제없습니다. 중요한 것은 각 예측 변수와 로그 오즈 간 관계이지, 예측 변수 자체의 주변 형태가 아닙니다.

로지스틱 회귀에서 좋은 VIF 임계값은 무엇인가요?

일반적으로 VIF가 5 이하이면 대체로 괜찮고, 5~10 사이는 조사할 가치가 있는 중간 수준의 다중공선성을 의미하며, 10 초과는 하나 이상의 예측 변수가 중복되었음을 알리는 신호입니다. 표본 크기와 요구 정밀도에 따라 해석이 달라지므로 엄격한 규칙이라기보다 관례입니다. 어떤 예측 변수의 VIF가 높고 표준 오차가 데이터 부분집합마다 불안정하다면, 공선성이 문제를 일으킨다는 증거가 됩니다.

주제

DataCamp와 함께 학습하세요

courses

R로 시작하는 회귀 분석

4
77.1K
R에서 회귀 분석을 구현, 분석 및 해석하여 주택 가격과 광고 클릭률을 예측합니다.
자세히 보기Right Arrow
강좌 시작
더 보기Right Arrow