[Python] 회귀 분석의 가정 정리 및 시각화 - 선형성, 독립성, 등분산성, 정규성
회귀 분석을 수행할 때, 특정 가정을 만족해야 결과의 신뢰성을 확보할 수 있다. 대표적인 가정으로는 선형성(Linearity), 독립성(Independence), 등분산성(Homoscedasticity), 정규성(Normality)이 있다. 이러한 가정을 검토하는 것은 모델의 성능을 평가하고 문제를 사전에 방지하는 중요한 과정이다.
특히, ADsP에서 그래프를 주고 무슨 가정을 위반했는지를 묻는 질문이 나오는데, 자주 헷갈려서 완전히 정리하고 비교해보고자 한다.
코드는 게시글의 마지막에 링크를 첨부할 테니, 깃허브에 가서 볼 수 있을 것이다.
1. 선형성(Linearity)
선형 회귀 모델은 독립 변수(X)와 종속 변수(Y) 간의 관계가 선형이라고 가정한다. 만약 이 가정이 위배되면, 모델이 적절한 예측을 수행하기 어려워진다. 선형성을 검토하는 방법으로는 산점도(Scatter Plot)와 회귀선(Regression Line)을 활용하는 것이 일반적이다.
선형성이 만족되는 경우:
- 데이터가 직선 형태를 따른다.
- 잔차가 랜덤하게 분포한다.
선형성이 위배되는 경우:
- 데이터가 곡선 형태를 보인다.
- 잔차가 특정 패턴을 보이며 분포한다.
선형성 만족 | 선형성 위배 |
![]() |
![]() |
2. 독립성(Independence)
독립성 가정은 잔차(Residuals) 간에 자기상관이 없어야 한다는 의미이다. 잔차 간에 패턴이 존재하면, 독립성 가정이 위배된 것으로 볼 수 있다. 이는 시계열 데이터에서 특히 중요한 요소다.
독립성을 검토하는 방법:
- 잔차 플롯(Residual Plot): 잔차가 랜덤하게 분포하는지 확인한다.
- 자기상관 검토(Auto-correlation Plot): 특정 패턴이 존재하는지 분석한다.
독립성이 위배되는 경우:
- 잔차가 특정 방향으로 움직이는 경향을 보인다.
- 잔차가 순차적으로 증가하거나 감소하는 패턴을 보인다.
독립성 만족 |
![]() |
일반적으로 독립성 같은 경우는, VIF라는 자기상관계수를 활용해서 비교한다.
VIF에 대해서는 다음에 다시 다뤄보도록 한다.
3. 등분산성(Homoscedasticity)
등분산성이란 회귀 모델에서 잔차의 분산이 일정해야 한다는 가정이다. 이 가정이 깨지면, 모델이 특정 값에서 더 높은 오류를 범할 가능성이 커진다.
등분산성을 검토하는 방법:
- 잔차 vs 예측값 그래프(Residuals vs Fitted Plot): 예측값과 잔차 사이의 패턴을 분석한다.
- 변동성이 증가하는지 확인: 특정 구간에서 잔차의 크기가 커지는지 체크한다.
등분산성이 위배되는 경우:
- 잔차의 분포가 일정하지 않고 점점 커지거나 작아지는 패턴을 보인다.
- 특정 구간에서만 잔차가 집중된다.
등분산성 만족 | 등분산성 위배 |
![]() |
![]() |
4. 정규성(Normality)
정규성 가정은 잔차가 정규 분포를 따라야 한다는 의미이다. 잔차가 정규성을 만족하지 않으면, 회귀 모델의 가정이 깨질 수 있으며, 이는 신뢰 구간과 가설 검정 결과에 영향을 미친다.
정규성을 검토하는 방법:
- Q-Q Plot (Quantile-Quantile Plot): 잔차가 정규 분포를 따르는지 시각적으로 검토한다.
- 히스토그램: 잔차의 분포가 종형(Bell Shape)을 따르는지 확인한다.
- Shapiro-Wilk Test: 정규성 가정을 검증하는 통계적 방법이다.
정규성이 위배되는 경우:
- 잔차가 특정 방향으로 치우쳐 있거나, 극단적인 값(Outliers)이 많다.
- Q-Q Plot에서 데이터가 직선을 따르지 않는다.
정규성 만족 | 정규성 위배 |
![]() |
![]() |
결론
회귀 분석의 정확성을 높이기 위해서는 선형성, 독립성, 등분산성, 정규성 등의 가정을 충족해야 한다. 위 가정이 위배되는 경우, 적절한 변환(예: 로그 변환, 다항 회귀 적용 등) 또는 다른 모델을 고려해야 한다. 데이터를 시각화하고, 통계적 방법을 사용하여 가정을 검토하는 것이 중요한 과정이다.
본 게시글에 사용된 코드는 아래의 주소에서 확인할 수 있다.
https://github.com/UnknwonD/PythonStudy/blob/main/Python-MachineLearning/Regression.ipynb
PythonStudy/Python-MachineLearning/Regression.ipynb at main · UnknwonD/PythonStudy
Contribute to UnknwonD/PythonStudy development by creating an account on GitHub.
github.com