[Python] 회귀분석 예시의 모든 것, 기초부터 고급 기법까지 파이썬 예시 코드

데이터 분석 분야에서 회귀분석은 핵심적인 통계 기법 중 하나입니다. 변수 간의 관계를 이해하고 예측 모델을 구축하는 데 필수적인 도구인 회귀분석을 파이썬 코드와 함께 자세히 살펴보겠습니다. 이 글에서는 회귀분석의 기본 개념부터 실제 적용 사례까지 폭넓게 다루어, 데이터 분석가와 프로그래머들에게 실용적인 지식을 제공하고자 합니다.

회귀분석의 기초: 개념과 중요성

회귀분석은 독립변수와 종속변수 간의 관계를 모델링하는 통계적 방법입니다. 이 기법은 변수 간의 인과관계를 파악하고, 미래 값을 예측하는 데 사용됩니다. 비즈니스, 경제학, 의학 등 다양한 분야에서 의사결정을 지원하는 중요한 도구로 활용되고 있습니다.

회귀분석의 핵심 아이디어는 데이터 포인트들을 가장 잘 설명하는 선(또는 곡선)을 찾는 것입니다. 이 선은 최소제곱법을 통해 오차를 최소화하는 방식으로 결정됩니다.

단순 선형 회귀분석 예시와 해석

회귀분석 예시1

단순 선형 회귀는 가장 기본적인 형태의 회귀분석입니다. 하나의 독립변수와 하나의 종속변수 간의 선형 관계를 모델링합니다. 예를 들어, 광고 지출과 매출 간의 관계를 분석하는 경우를 살펴보겠습니다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 데이터 생성
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # 광고 지출 (단위: 만원)
y = np.array([2, 4, 5, 4, 6])  # 매출 (단위: 백만원)

# 모델 생성 및 학습
model = LinearRegression()
model.fit(X, y)

# 결과 출력
print(f"기울기: {model.coef_[0]:.2f}")
print(f"절편: {model.intercept_:.2f}")

# 그래프 그리기
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict(X), color='red')
plt.xlabel('광고 지출 (만원)')
plt.ylabel('매출 (백만원)')
plt.title('광고 지출과 매출의 관계')
plt.show()

이 코드는 광고 지출과 매출 간의 관계를 단순 선형 회귀로 모델링합니다. 결과 해석 시, 기울기는 광고 지출이 1만원 증가할 때 매출이 얼마나 증가하는지를 나타내며, 절편은 광고 지출이 0일 때의 예상 매출을 의미합니다.

다중 회귀분석: 복잡한 관계 이해하기

현실 세계의 많은 문제들은 여러 변수가 복합적으로 작용합니다. 다중 회귀분석은 이러한 복잡한 관계를 모델링하는 데 사용됩니다. 예를 들어, 집 가격을 예측하는 모델을 만들어 보겠습니다.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 가상의 데이터셋 생성
data = {
    '면적': [100, 150, 120, 180, 200, 160, 140, 130, 170, 190],
    '방 개수': [2, 3, 2, 4, 4, 3, 3, 2, 3, 4],
    '층수': [5, 7, 3, 8, 10, 6, 4, 5, 7, 9],
    '가격': [200, 300, 220, 350, 400, 320, 280, 250, 330, 380]
}
df = pd.DataFrame(data)

# 특성과 타겟 분리
X = df[['면적', '방 개수', '층수']]
y = df['가격']

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"평균 제곱 오차: {mse:.2f}")
print(f"R-squared 값: {r2:.2f}")

# 계수 출력
for feature, coef in zip(X.columns, model.coef_):
    print(f"{feature}: {coef:.2f}")

이 예시에서는 집의 면적, 방 개수, 층수를 이용해 가격을 예측하는 모델을 만들었습니다. 각 특성의 계수는 해당 특성이 가격에 미치는 영향력을 나타냅니다.

파이썬을 활용한 회귀분석 구현 방법

파이썬에서는 주로 scikit-learn 라이브러리를 사용하여 회귀분석을 구현합니다. 이 라이브러리는 사용하기 쉽고 강력한 기능을 제공합니다. 기본적인 구현 단계는 다음과 같습니다:

  1. 데이터 준비: 특성(X)과 타겟(y) 분리
  2. 데이터 분할: 훈련 세트와 테스트 세트로 나누기
  3. 모델 선택 및 학습: LinearRegression() 등의 모델 사용
  4. 예측 및 평가: 테스트 데이터로 성능 평가

추가로, 데이터 전처리, 특성 선택, 교차 검증 등의 기법을 적용하여 모델의 성능을 향상시킬 수 있습니다.

회귀분석 결과 시각화: 그래프와 차트 활용

회귀분석 결과를 시각화하면 모델의 성능과 데이터의 패턴을 직관적으로 이해할 수 있습니다. matplotlib과 seaborn 라이브러리를 사용하여 다양한 그래프를 그릴 수 있습니다.

import seaborn as sns
import matplotlib.pyplot as plt

# 잔차 플롯
plt.figure(figsize=(10, 6))
plt.scatter(model.predict(X), model.predict(X) - y)
plt.xlabel('예측값')
plt.ylabel('잔차')
plt.title('잔차 플롯')
plt.axhline(y=0, color='r', linestyle='-')
plt.show()

# 회귀선과 데이터 포인트
sns.pairplot(df, x_vars=['면적', '방 개수', '층수'], y_vars='가격', height=5, aspect=0.8, kind='reg')
plt.show()

이러한 시각화는 모델의 가정이 충족되는지, 이상치가 있는지, 비선형 관계가 있는지 등을 파악하는 데 도움이 됩니다.

실제 비즈니스 사례로 보는 회귀분석의 응용

회귀분석은 다양한 비즈니스 문제에 적용될 수 있습니다. 예를 들어:

  1. 수요 예측: 과거 판매 데이터를 기반으로 미래 수요를 예측
  2. 가격 최적화: 다양한 요인을 고려하여 최적의 가격 책정
  3. 마케팅 효과 분석: 광고 지출과 매출 간의 관계 분석
  4. 리스크 평가: 금융 분야에서 대출 상환 가능성 예측

이러한 응용 사례들은 회귀분석이 실제 비즈니스 의사결정에 어떻게 기여하는지 보여줍니다.

회귀분석의 한계와 주의점

회귀분석은 강력한 도구지만, 몇 가지 한계와 주의점이 있습니다:

  1. 선형성 가정: 비선형 관계를 잘 포착하지 못할 수 있음
  2. 다중공선성: 독립변수 간 높은 상관관계가 있을 경우 문제 발생
  3. 이상치의 영향: 극단값이 결과를 크게 왜곡할 수 있음
  4. 인과관계 vs 상관관계: 회귀분석만으로는 인과관계를 증명할 수 없음

이러한 한계를 인식하고, 적절한 데이터 전처리와 모델 진단을 통해 보완해야 합니다.

고급 회귀 기법: 다항 회귀와 로지스틱 회귀

선형 회귀 외에도 다양한 고급 회귀 기법이 있습니다:

  1. 다항 회귀: 비선형 관계를 모델링할 때 사용
  2. 로지스틱 회귀: 분류 문제에 사용되는 회귀 기법
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

# 다항 회귀 예시
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([1, 4, 9, 16, 25])

degree = 2
polyreg = make_pipeline(PolynomialFeatures(degree), LinearRegression())
polyreg.fit(X, y)

plt.scatter(X, y)
plt.plot(X, polyreg.predict(X), color='red')
plt.title(f'{degree}차 다항 회귀')
plt.show()

이 코드는 2차 다항 회귀를 사용하여 비선형 관계를 모델링하는 예시입니다.

회귀분석 모델 평가: R-squared와 RMSE

회귀 모델의 성능을 평가하는 주요 지표로는 R-squared(결정계수)와 RMSE(평균 제곱근 오차)가 있습니다.

  • R-squared: 모델이 설명하는 분산의 비율을 나타냅니다. 1에 가까울수록 좋은 모델입니다.
  • RMSE: 예측값과 실제값의 차이를 나타내며, 작을수록 좋은 모델입니다.
from sklearn.metrics import mean_squared_error
import numpy as np

# R-squared와 RMSE 계산
r2 = r2_score(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))

print(f"R-squared: {r2:.2f}")
print(f"RMSE: {rmse:.2f}")

이러한 지표들을 통해 모델의 성능을 객관적으로 평가하고 개선할 수 있습니다.

머신러닝과 회귀분석의 융합

회귀분석 예시2

회귀분석은 머신러닝 시대에도 여전히 중요한 역할을 합니다. 최신 머신러닝 기법들과 결합하여 더욱 강력한 예측 모델을 만들 수 있습니다:

  1. 랜덤 포레스트 회귀: 여러 개의 의사결정 트리를 사용하여 예측
  2. 서포트 벡터 회귀: 비선형 관계를 고차원 공간에서 모델링
  3. 신경망 회귀: 딥러닝을 통한 복잡한 패턴 학습

이러한 고급 기법들은 전통적인 회귀분석의 한계를 극복하고, 더 정확하고 강건한 모델을 구축할 수 있게 해줍니다.

회귀분석은 데이터 과학과 머신러닝의 기초가 되는 중요한 기법입니다. 파이썬을 활용한 실습을 통해 회귀분석의 개념과 응용을 익히면, 복잡한 데이터 분석 문제를 해결하는 데 큰 도움이 될 것입니다. 지속적인 학습과 실전 적용을 통해 회귀분석 실력을 향상시키시기 바랍니다.

답글 남기기