티스토리 뷰

반응형

선형 회귀 분석은 두 변수 간의 관계를 분석하는 통계 기법이다. 독립 변수 X와 종속 변수 Y 간에 선형적인 관계가 있다고 가정하고 이를 나타내는 직선의 방정식을 찾는다. 그 직선의 방정식은 Y = aX + b 형태로 표현되며, 여기서 a는 기울기, b는 Y절편이다.

선형 회귀 분석은 추정된 모델의 신뢰도를 측정하기 위해 여러 가지 방법을 사용한다. 가장 일반적인 것은 결정 계수(R-squared)이다. 이 값은 회귀 모델이 데이터의 변동성을 얼마나 잘 설명하는지를 측정한다. 결정 계수는 0에서 1 사이의 값을 가지며, 1에 가까울수록 모델이 데이터를 잘 설명한다는 것을 의미한다.

또 다른 중요한 통계는 p-값이다. p-값은 귀무 가설(예를 들어, 회귀 계수가 0이라는 가설)이 얼마나 타당한지를 측정한다. 일반적으로 p-값이 0.05 미만이면 귀무 가설을 기각하고, 해당 계수는 통계적으로 유의미하다고 본다.

이제 이를 파이썬으로 어떻게 구현하는지 살펴보자. 먼저, 'numpy'와 'statsmodels'라는 라이브러리가 필요하다. 아래는 간단한 선형 회귀 분석을 수행하는 코드다. (아래 python code 참조)

이 코드는 독립 변수 X와 종속 변수 Y가 주어졌을 때 선형 회귀 모델을 적합하고 결과를 출력한다. 출력 결과에는 각 계수의 추정치, 표준 오차, p-값 등이 포함된다. 이를 통해 각 변수가 모델에 얼마나 기여하는지, 그리고 그 기여가 통계적으로 유의미한지 알 수 있다.

Python Code :
import numpy as np
import statsmodels.api as sm
# 데이터 생성
X = np.random.random(100)  # X변수를 numpy를 이용한 ndarray로 만들기
Y = 3 * X + 2 + np.random.random(100)  # Y값을 numpy를 이용한 ndarray로 만들
# statsmodels를 이용한 선형 회귀
X = sm.add_constant(X) # 상수항(b)을 추가
model = sm.OLS(Y, X)
results = model.fit()
# 결과 출력
print(results.summary())

결과는 아래와 같이 출력이 된다.

위에서 설명한 R-squared 값이 0.899로 0~1 범위에서 1에 가까우니 위의 코드를 통해 결정된 회귀 모델이 변수와 결과값(X와 Y)의 관계를 상당히 잘 설명하는 것이라고 볼 수 있다.

그를 확인할 수 있는 또 하나의 값이 Prob.인데 위에서 설명한 p-값이다. 통상 0.05 이하이면 위의 회귀모델이 통계적으로 95% 이상의 신뢰도 구간에서 유의미하다고 볼 수 있는데 현재 생성된 값들의 경우 1.41e-50으로, 거의 0에 가까운 수치이다. 즉 매우 신뢰도 높은 선형회귀모델을 만들었다고 볼 수 있다. (X와 Y를 3x+2+C의 형태로 만들어낸 관계이므로 당연하지만).

마지막으로 선형회귀모델의 결과를 보면 x1 즉 ax+b에서 a값은 3.0026이고, b값은 2.5757로 확인이 된다. 즉 y=3.0026x + 2.5757이라는 성형 회귀 모델이 그 결과인 것이다.

간단하게, python을 이용해 선형회귀함수를 만들고 그 신뢰도가 어느정도 되는지를 통계적으로 알아보았다. 보통 선형회귀모델을 만들게 되면 어느정도가 이 모델이 현상을 나타낼 수 있는지를 설명하는데 애를 먹게 되는데 (예를 들어 교수님이 그 모델이 그래서 어느정도나 맞는건데? r-residual합이 그 값이면 그게 모델링이 잘 된거냐? 하는 질문을 방어하려면..) 통계적인 기법으로 간단하게 대답할 수 있으니 오피셜하게 대답하고 넘어가기에도 어렵지가 않다.

반응형
댓글