본문 바로가기
데이터 AI 인사이트 👩🏻‍💻/KPMG 교육

비즈니스 애널리틱스 II (6) 회귀분석, XGBoost 등 최신 빅데이터 기법

by Hayley S 2025. 2. 13.

회귀 분석(Regression Analysis)

회귀 분석은 머신러닝과 통계학에서 가장 기본적이면서도 중요한 기법이다. 데이터의 패턴을 학습하여, 연속형 값(숫자)을 예측하는 데 사용된다. 머신러닝 모델 중에서도 가장 해석이 쉬우며, 데이터가 어떻게 변화하는지 설명하는 데 탁월하다.

회귀 분석이 중요한 이유는 "변수 간의 관계를 파악하고 미래 값을 예측" 하는 데 있다. 예를 들어, 고객의 소비 습관을 분석하고 마케팅 전략을 세울 때, 매출을 예측하는 모델이 필요하다. 단순한 가정이 아니라, 데이터 기반의 의사 결정을 내릴 수 있도록 도와주는 것이 회귀 분석의 역할이다.

실제 비즈니스에서의 활용 범위는 매우 넓다.
✅ 부동산 - 아파트 크기에 따른 가격 예측
✅ 금융 - 고객 신용 점수 기반 대출 승인 여부 예측
✅ 의료 - 환자의 혈압 수치를 BMI와 운동량을 이용해 예측
✅ 제조업 - 기계 부품의 마모도를 측정하고 고장 발생 시점을 예측


선형 회귀(Linear Regression)와 모델의 원리

선형 회귀는 가장 기본적인 회귀 모델이다. 독립 변수(X)와 종속 변수(Y)의 관계를 직선으로 표현하는 것이 핵심이다.
이 모델은 "X가 증가하면 Y도 일정한 비율로 증가하거나 감소한다"는 가정을 갖고 있다.

수식으로 표현하면 다음과 같다.

 

  • β0 (Intercept): Y축 절편, 즉 X가 0일 때 Y의 값
  • β1 (Coefficient): 기울기, 즉 X가 1 증가할 때 Y가 변하는 정도
  • ε (Error Term): 실제 값과 예측 값의 차이

 

이러한 선형 회귀는 데이터가 완전히 직선적인 관계를 가질 때 매우 높은 예측력을 발휘한다. 하지만 현실에서는 데이터가 노이즈(잡음)를 포함하고 있어서 모든 데이터가 완벽한 선형 관계를 갖는 경우는 드물다.

이를 극복하기 위해 잔차(residual)를 최소화하는 방식으로 최적의 직선을 찾는다.

 

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

# Generate sample data
np.random.seed(42)
X = np.random.rand(100, 1) * 10  # X data in the range of 0 to 10
y = 2.5 * X + np.random.randn(100, 1) * 2  # Linear relationship + some noise

# Train the model
model = LinearRegression()
model.fit(X, y)
y_pred = model.predict(X)

# Plot the graph
plt.scatter(X, y, label="Actual Data")  # Actual data
plt.plot(X, y_pred, color="red", linewidth=2, label="Regression Line")  # Regression line
plt.xlabel("X (Independent Variable)")
plt.ylabel("Y (Dependent Variable)")
plt.legend()
plt.title("Linear Regression Graph")
plt.show()

 

이 그래프를 보면 데이터가 대체로 직선적인 관계를 형성하는 것을 볼 수 있다. 선형 회귀 모델이 데이터 패턴을 학습하여 최적의 직선(회귀선, Regression Line)을 찾는 과정을 시각적으로 이해할 수 있다.


다항 회귀(Polynomial Regression) - 비선형 패턴 학습

현실에서는 데이터가 직선적인 관계를 갖지 않는 경우가 많다. 예를 들어, 자동차가 속도를 높일수록 연료 소비량이 급격히 증가하는 경우를 생각해보자. 이런 경우 단순한 선형 회귀로는 패턴을 제대로 학습할 수 없다.
이때 사용하는 것이 다항 회귀(Polynomial Regression) 이다.

다항 회귀는 다음과 같은 수식을 따른다.

 

  • 등 다항식 항을 추가하여 곡선 형태의 모델을 만든다.
  • 차수가 높아질수록 모델이 더 복잡한 패턴을 학습할 수 있다.
  • 하지만 너무 높은 차수를 사용하면 과적합(overfitting) 이 발생할 위험이 있다.

 

다항 회귀의 실무 활용 예제

  • 자동차 연료 소비량 예측 - 자동차 속도(X)가 증가하면 연료 소비량(Y)이 기하급수적으로 증가하는 패턴을 학습
  • 부동산 시장 분석 - 아파트 면적이 커질수록 가격이 일정 수준에서 포화되는 현상 반영
  • 의료 데이터 분석 - 나이(X)와 질병 발생 확률(Y)의 비선형적인 관계 모델링

 

from sklearn.preprocessing import PolynomialFeatures

# Generate polynomial features (degree 2)
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)

# Train the model
poly_model = LinearRegression()
poly_model.fit(X_poly, y)
y_poly_pred = poly_model.predict(X_poly)

# Plot the graph
plt.scatter(X, y, label="Actual Data")  # Actual data
plt.scatter(X, y_poly_pred, color="red", label="Polynomial Regression", alpha=0.6)  # Polynomial regression predictions
plt.xlabel("X (Independent Variable)")
plt.ylabel("Y (Dependent Variable)")
plt.legend()
plt.title("Polynomial Regression Graph")
plt.show()

 

다항 회귀는 선형 회귀보다 더 복잡한 패턴을 학습할 수 있으며, 특히 비선형 데이터에서 강력한 성능을 발휘한다.

다항 회귀는 선형적인 관계가 아닌 경우에 사용되며, 데이터의 곡선 패턴을 학습할 수 있다.


XGBoost 및 최신 빅데이터 기법 (Gradient Boosting, Random Forest 등)

머신러닝에서 XGBoost는 가장 강력하고 널리 사용되는 알고리즘 중 하나다. Gradient Boosting 기반의 트리(Decision Tree) 모델로, 빠르고 강력한 성능을 제공하며, 특히 빅데이터 처리에 최적화되어 있다. 기업에서는 XGBoost를 사용해 대출 승인 예측, 고객 이탈 분석, 질병 진단, 주가 예측, 이상 탐지(Anomaly Detection) 등을 수행한다.

XGBoost는 Gradient Boosting을 최적화한 알고리즘으로, 트리 기반 모델의 단점을 극복하고 성능을 극대화한 모델이다. 기본적으로 여러 개의 결정 트리(Decision Tree)를 조합하여 강력한 예측 성능을 내는 부스팅(Boosting) 방식을 사용한다.

📌 Gradient Boosting vs. XGBoost

학습 방식 하나의 트리가 순차적으로 학습됨 병렬 학습 및 최적화
학습 속도 느림 빠름 (최적화된 계산 방식)
과적합 방지 기본 L2 정규화 적용 안됨 L1, L2 정규화 적용 (과적합 방지)
결측값 처리 지원 안 함 자동 처리 기능 제공
사용 편의성 수동 튜닝 필요 자동화 기능 강함

즉, XGBoost는 기존 Gradient Boosting의 단점을 해결하고 더욱 강력한 모델을 만들기 위한 최적화된 버전이라고 할 수 있다.

 

XGBoost의 핵심 원리 (Boosting 알고리즘 이해)

Boosting은 여러 개의 약한 학습기(Weak Learner)를 조합하여 강력한 예측 모델을 만드는 앙상블 기법이다. 이 과정에서 이전 트리의 오류를 보완하는 방식으로 새로운 트리를 계속 추가하며 점진적으로 모델을 개선해 나간다.

Boosting 과정
1️⃣ 첫 번째 결정 트리(Weak Learner)를 학습

  • 데이터를 학습하고 예측을 수행
  • 오차(Residual Error)를 계산

2️⃣ 오차를 보완하는 새로운 트리 학습

  • 두 번째 트리는 첫 번째 트리의 예측 오류를 최소화하는 방향으로 학습
  • 이 과정을 반복하여 점점 더 예측 성능을 향상

3️⃣ 최종적으로 모든 트리의 결과를 합쳐 예측

  • 여러 개의 결정 트리의 예측 결과를 평균 또는 가중치 방식으로 결합
  • 결과적으로 강력한 예측 모델이 만들어짐

이 방식 덕분에 XGBoost는 오차가 큰 데이터에도 강한 적응력을 가지며 매우 높은 예측 성능을 보인다.

 

XGBoost의 주요 특징

XGBoost는 단순한 Gradient Boosting보다 훨씬 강력한 성능을 갖춘 이유가 있다.

(1) Regularization (정규화, 과적합 방지)
일반적인 Gradient Boosting은 과적합(overfitting) 문제를 일으키기 쉽다.
XGBoost는 이를 해결하기 위해 L1 및 L2 정규화(Regularization) 기법을 적용한다.

  • L1 정규화 (Lasso): 불필요한 변수를 제거하여 모델을 간결하게 만듦
  • L2 정규화 (Ridge): 모델이 너무 복잡해지는 것을 방지

(2) 결측값 자동 처리 (Missing Value Handling)
XGBoost는 결측값이 있는 데이터도 자동으로 처리한다. 일반적인 머신러닝 모델은 결측값을 처리하지 않으면 오류가 발생하지만, XGBoost는 데이터의 패턴을 학습하여 결측값이 있는 경우에도 최적의 분할을 자동으로 수행한다.

(3) 병렬 처리 및 빠른 학습 속도
XGBoost는 기존 Gradient Boosting보다 훨씬 빠르게 학습할 수 있도록 설계되었다. 특히 트리를 병렬로 생성하고 연산을 최적화하여 대용량 데이터에서도 효율적으로 동작한다. 이 덕분에 수천만 개 이상의 데이터도 빠르게 학습할 수 있으며, 빅데이터 환경에서도 널리 사용된다.

(4) Early Stopping (조기 종료 기능)
XGBoost는 학습 중 성능이 더 이상 개선되지 않으면 자동으로 학습을 중단하는 조기 종료(Early Stopping) 기능을 제공한다. 이 기능 덕분에 불필요한 학습을 방지하고 최적의 모델을 빠르게 찾을 수 있다.

XGBoost가 실제로 어떻게 동작하는지 확인해보자.
아래 코드는 "광고비를 기반으로 매출을 예측하는 회귀 모델" 을 만드는 실습 예제다.

import numpy as np
import xgboost as xgb
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 데이터 생성 (광고비 vs 매출 예측)
np.random.seed(42)
X = np.random.rand(100, 1) * 100  # 광고비 (0~100만 원)
y = 5 * X + np.random.randn(100, 1) * 20  # 매출 (노이즈 추가)

# 데이터 분할 (80% 훈련, 20% 테스트)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# XGBoost 회귀 모델 생성
xgb_model = xgb.XGBRegressor(objective="reg:squarederror", n_estimators=100)
xgb_model.fit(X_train, y_train)

# 예측 수행
y_pred = xgb_model.predict(X_test)

# 성능 평가
mse = mean_squared_error(y_test, y_pred)
print(f"XGBoost 회귀 모델의 MSE: {mse:.4f}")

# 그래프 출력
plt.scatter(X_test, y_test, label="실제 매출 데이터", color="blue", alpha=0.6)
plt.scatter(X_test, y_pred, label="XGBoost 예측값", color="red", alpha=0.6)
plt.xlabel("광고비 (만원)")
plt.ylabel("매출 (만원)")
plt.legend()
plt.title("XGBoost 회귀 분석 결과")
plt.show()

 

XGBoost 모델이 광고비와 매출 간의 관계를 학습하여 높은 예측 성능을 보인다. XGBoost는 전통적인 선형 회귀 모델보다 더 정교한 패턴을 학습할 수 있다.

 

XGBoost의 실무 활용 예제

📌 금융 산업 (대출 승인 모델)

은행은 고객의 신용 점수를 기반으로 대출 승인 여부를 결정해야 한다.
XGBoost는 신용 점수, 소득 수준, 연체 이력 등을 학습하여 대출 승인 확률을 정확하게 예측할 수 있다.

📌 이커머스 (추천 시스템)

온라인 쇼핑몰은 고객의 이전 구매 이력을 학습하여 개인화된 상품 추천 모델을 구축할 수 있다.

📌 의료 산업 (질병 진단 모델)

XGBoost는 환자의 혈압, 콜레스테롤 수치, 생활 습관 데이터를 학습하여 심장병 발생 위험을 예측하는 데 활용된다.