1. 회귀분석 개요
- 여러 개의 독립변수와 한 개의 종속변수 간의 상관관계를 모델링하는 기법을 통칭
- 예를 들어 온도, 습도, 일조량, 이산화탄소 농도, 풍속 등의 독립변수와 사과의 당도라는 종속변수가 어떤 관계를 나타내는지 모델링하고 예측하는 것임
$$\hat{Y} = w_{0} + w_{1} * X_{1} + w_{2} * X_{2} + ... + w_{n} * X_{n}$$
다중회귀분석 식
- 선형 회귀
- $\hat{Y}$: 종속변수 $w_{n}$과 $X_{n}$ 값에 의해 예측되는 값(종속변수)
- $X_{n}(n \geq 0)$: Y를 예측하기 위한 특성의 실제값(독립변수)
- $w_{n}(n \geq 0)$: 각 독립변수 별 중요도를 설정하기 위한 가중치
- $w_{0}$: 절편(intercept)
- 지도학습은 분류와 회귀로 나뉘는데, 회귀의 예측값은 연속형 숫자값이고 분류는 카테고리와 같은 이산형 클래스값임.
- 회귀분석의 분류는 아래와 같음
독립변수 개수 | 종속변수와 독립변수 간 관계 |
1개: 단일 회귀 | 선형: 선형 회귀 |
n개: 다중 회귀 | 비선형: 비선형 회귀 |
2. 단일선형회귀
- 단일선형회귀(단순선형회귀)는 독립변수와 종속변수가 각각 하나인 선형회귀임
- 이해를 위해 사과의 가격을 결정하는 요인이 사과의 당도뿐이라고 가정
- 당도와 가격의 실제값은 아래와 같음
- 일반적으로 사과 가격은 사과의 당도가 높으면 올라가는 경향이 있기에 선형(직선)의 형태로 관계를 표현할 수 있음
- 즉 예측값은 $\hat{Y} = w_{0} + w_{1} * X_{1}$로 모델링 가능
- 실제 사과 가격은 이 예측값(1차 함수 값)에서 실제 값만큼의 오류를 빼거나 더한 값이 됨
- 즉 실제 사과 값은 ${Y} = w_{0} + w_{1} * X_{1} + Error$가 됨
- 실제값과 예측값(회귀 모델) 간 차이인 오류값을 잔차라고 부름
- 최적의 회귀모델을 찾는다는 것은 이 잔차의 합이 최소가 되는 모델을 찾는다는 의미와 동일
- 잔차는 $+$와 $-$를 모두 가질 수 있기에 단순히 더하다간 잔차가 크게 줄어들 수 있음
- 따라서 잔차에 절댓값을 취해서 더하거나(MAE, Mean Absolute Error), 제곱값을 더하는 방식(RSS, Residual Sum of Square)를 택함. 즉 $Error^{2} = RSS$
- 잔차의 합이 최소가 되는 회귀계수($w_{n}$)를 찾는 것이 곧 최적의 모델을 찾는 것임
- 아래는 예시 코드
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 재현성 유지를 위해 랜덤 시드 설정
np.random.seed(42)
# 100개의 랜덤 당도(10~15 사이의 값) 생성
sugar_content = np.random.uniform(10, 15, 1000)
# 당도와 가격 간의 관계 (기울기를 줄이고 절편을 높임)
# 가격 = 1.5 * 당도 + 5 + (랜덤 오차)
# 가상의 실제값 데이터를 만드는 과정
price = 1.5 * sugar_content + 5 + np.random.normal(0, 1, 1000)
# 데이터프레임으로 정리
data = pd.DataFrame({
'Sugar Content': sugar_content,
'Price': price
})
y_target = data['Price']
X_data = data[['Sugar Content']]
# train set과 test set 분리
X_train, X_test, y_train, y_test = train_test_split(X_data, y_target, test_size = 0.3, random_state = 156)
# LinearRegression 객체로 학습/예측/평가 수행
lr = LinearRegression()
# train set으로 학습 수행
lr.fit(X_train, y_train)
# X_test로 예측 수행
y_preds = lr.predict(X_test)
# mse와 r2로 모델 평가
mse = mean_squared_error(y_test, y_preds)
r2 = r2_score(y_test, y_preds)
# 정보 출력
print(f'MSE: {mse:.2f}')
print(f'r2: {r2:.2f}')
print(f'절편값: {lr.intercept_:.2f}')
print('회귀 계수값:', np.round(lr.coef_, 2))
# 그래프 설정
plt.figure(figsize=(8, 6))
# 데이터 산점도 (점의 색은 baby blue, 원형 마커, 투명도 0.7)
plt.scatter(X_test, y_test, color='#89CFF0', marker='o', alpha=0.7, label="Actual Data")
# 회귀선 생성
x_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1, 1) # X 범위 설정
y_range = lr.predict(x_range) # 회귀선 예측 값
# 회귀선 플로팅 (색상: darkblue)
plt.plot(x_range, y_range, color='darkblue', linewidth=2, label="Regression Line")
# 그래프 제목 및 라벨 설정
plt.xlabel("Sugar Content")
plt.ylabel("Price")
plt.title("Linear Regression: Sugar Content vs. Price")
plt.legend()
plt.show()
'그로스 마케팅' 카테고리의 다른 글
[ 멋쟁이사자처럼부트캠프 그로스마케팅 부트캠프 ] 6가지 인지편향과 AARRR 프레임워크 (0) | 2025.03.20 |
---|---|
[ 멋쟁이사자처럼부트캠프 그로스마케팅 부트캠프 ] 분류 모델 평가 (1) | 2025.03.12 |
[ 멋쟁이사자처럼부트캠프 그로스마케팅 부트캠프 ] 마케팅 데이터 주요 지표 (4) | 2025.02.26 |
[ 멋쟁이사자처럼부트캠프 그로스마케팅 부트캠프 ] 그래프의 종류와 목적 (2) | 2025.02.25 |
[ 멋쟁이사자처럼부트캠프 그로스마케팅 부트캠프 ] EDA(탐색적 데이터 분석) (0) | 2025.02.20 |