회귀분석
회귀분석의 개념
- 회귀분석(Regression Analysis): 독립변수(설명변수)와 종속변수(반응변수) 간의 관계를 수학적 모델로 추정하는 통계 기법
- 독립변수: 종속변수를 설명하거나 예측하는 데 사용하는 변수(X)
- 종속변수: 설명하거나 예측할 대상(Y)
- "회귀(Regression)"는 프랜시스 골턴이 부모와 자식의 키 관계를 연구하며 평균으로 회귀하는 현상을 관찰한 데서 유래
회귀분석의 주요 목적
- 예측(Prediction)
- 새로운 독립변수 값이 주어졌을 때 종속변수의 값을 수학적 모델로 추정
- 예: 선박의 길이(
length)로 무게(weight) 예측
- 설명(Explanation)
- 독립변수와 종속변수의 선형 관계를 크기와 방향으로 설명
- 예: 선박 길이가 1단위 증가할 때 예측 무게의 평균 변화량 설명
선형 모형
- 종속변수 Y와 독립변수 X의 관계를 직선 방정식으로 표현
- Y: 종속변수, 예: 무게
- X: 독립변수, 예: 길이
- β0: y절편(Intercept)
- β1: 기울기, 회귀계수(Regression Coefficient)
- ϵ: 오차항(Error term)
최소제곱법
- 잔차(Residual): 실제값과 예측값의 차이
- 최소제곱법(Ordinary Least Squares, OLS): 잔차 제곱합이 최소가 되도록 β0와 β1을 추정
y절편의 의미
- y절편(Intercept): 독립변수 X가 0일 때 종속변수 Y의 기댓값(β0)
- X=0이 데이터 범위를 벗어나면 해석이 무의미할 수 있음
- 예: 선박 길이가 0일 때 무게의 추정치는 물리적 의미가 없음
회귀계수의 해석
- 회귀계수(Regression Coefficient): 회귀선의 기울기(β1)
- 해석: X가 1단위 증가할 때 예측되는 Y의 평균 변화량
- β1>0: 양의 선형 관계, X 증가 시 Y 증가
- β1<0: 음의 선형 관계, X 증가 시 Y 감소
- β1≈0: 선형 관계가 거의 없음
회귀계수의 유의성 검정
- 추정된 회귀계수가 통계적으로 유의미한지 알아보기 위한 가설 검정
- 귀무가설(H0): 회귀계수 β1은 0이다
- 두 변수 사이에 선형 관계가 없음
- 대립가설(H1): 회귀계수 β1은 0이 아니다
- 두 변수 사이에 선형 관계가 있음
- p-value가 0.05보다 작으면 귀무가설 기각
- 유의한 회귀계수만으로 인과관계가 성립하지는 않음
회귀계수 가설 검정 순서도
Mermaid 다이어그램 원문
flowchart TD
A["가설 설정<br/>귀무가설: β = 0<br/>대립가설: β ≠ 0"] --> B{"p-value < 0.05"}
B -- "예" --> C["β ≠ 0이라는 통계적 근거 있음"]
B -- "아니오" --> D["β ≠ 0이라고 판단할 근거 부족"]대화형 다이어그램을 불러오기 전에는 원문으로 표시됩니다.
결정계수
- 결정계수(R2, R-squared): 모형이 종속변수의 변동을 설명하는 비율
- 절편이 있는 OLS에서는 0에서 1 사이이며, 1에 가까울수록 설명력이 높음
- 단순 선형 회귀에서는 피어슨 상관계수(r)의 제곱과 같음
- "R2×100%만큼 종속변수의 분산을 설명"으로 해석
- 예: R2=0.3이면 "분산의 30%를 설명한다"
- RSS: 잔차 제곱합
- TSS: 종속변수와 평균의 차이를 제곱한 합
단순 선형 회귀 모형
statsmodels: 회귀계수, p-value, 결정계수 등 통계 결과표 제공length를 설명변수로,weight를 반응변수로 활용하여 모델링
from statsmodels.formula.api import ols
import pandas as pd
df_ship = pd.read_excel("ship.xlsx")
# "종속변수 ~ 독립변수" 형태의 수식을 적용하고 적합(fit) 수행
model = ols("weight ~ length", data=df_ship).fit()
model.summary()
- 추정식: weight≈11120+150.05×length
length의 회귀계수:150.0497- 길이가 1단위 증가할 때 예측 무게가 평균 약 150 증가
- p-value: 2.11×10−12
- β1=0이라는 귀무가설 기각
- R2:
0.397- 길이가 무게 분산의 39.7% 설명
상관계수와 결정계수
단순 선형 회귀에서는 R2=r2.
df_ship[["length", "weight"]].corr()
피어슨 상관계수는 0.630324.
0.630324 ** 2
결과는 0.3973으로 회귀분석의 R2와 같음.
반대로 R2의 제곱근으로 상관계수의 크기를 확인 가능.
import numpy as np
np.sqrt(0.397)
결과는 0.6301.
최적합 회귀선 시각화
seaborn의regplot은 산점도를 그리고 그 위에 추정된 회귀선과 신뢰구간 대역을 겹쳐서 표시
import seaborn as sns
# regplot으로 직관적인 선형 관계 관찰 및 시각화
sns.regplot(data=df_ship, x="length", y="weight")

회귀분석을 이용한 예측
length변수를 가진 새로운 데이터 만들기
df_new = pd.read_excel("new_ship.xlsx")
- 적합된 모형에 새 데이터를 입력하여 예측
model.predict(df_new)
예측값은 26122.02, 41126.99, 56131.96.
퀴즈
회귀분석의 기본 목적을 가장 잘 설명한 것은?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.