Multiple Regression


Linear Models


1. Train / Test Data 분리

Q . Train과 Test 데이터를 분리하는 이유는?
A . Train 데이터로 훈련한 모델이 예측 성능을 제대로 평가할 수 있는지 Test 데이터로 확인하는 작업이 필요하다. Test 데이터는 훈련을 마친 모델에 1번만 수행해 최종적으로 확인하는 용도로 사용한다.

  • 일반적으로, 무작위로 분리
  • 시계열 데이터인 경우, 테스트 데이터는 "미래"이어야 한다
# sample 메소드 사용하여 분리
train = df.sample(frac=0.75,random_state=1)
test = df.drop(train.index)

2. Multiple Linear Regression Model( 다중선형회귀모델 )

다중선형회귀모델

  • 독립변수 2개
  • 기준모델 : 평균
  • 모델해석 : 회귀계수

Q . 선형회귀의 장점은?

  • 장점 : 선형회귀는 다른 ML 모델에 비해 상대적으로 학습이 빠르고 설명력이 강하다.
  • 단점 : 선형 모델이므로 과소적합(underfitting)이 잘 일어난다.
  • 다중선형회귀모델 : feature( 특성 ) 2개 이상
from sklearn.linear_model import LinearRegression

model = LinearRegression()

features = ['GrLivArea', 
            'OverallQual']
X_train = train[features]
X_test = test[features]

# 모델 fit
model.fit(X_train, y_train)
y_pred = model.predict(X_train)
mae = mean_absolute_error(y_train, y_pred)
print(f'훈련 에러: {mae:.2f}')
# 훈련 에러: 29129.58

# 테스트 데이터에 적용
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
print(f'테스트 에러: {mae:.2f}')
# 테스트 에러: 27598.31
  • 테스트 오류가 더 줄어든 것을 확인할 수 있다.
# 시각화
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import style

style.use('seaborn-talk')
fig = plt.figure()

# for 3d plot
ax = fig.gca(projection='3d')

ax.scatter(train['GrLivArea'], train['OverallQual'], train['SalePrice'])
ax.set_xlabel('GrLivArea', labelpad=12)
ax.set_ylabel('OverallQual', labelpad=10)
ax.set_zlabel('SalePrice', labelpad=20)

plt.suptitle('Housing Prices', fontsize=15)
plt.show()

# plotly로 시각화 할 경우
 px.scatter_3d(
     train,
     x='GrLivArea', 
     y='OverallQual', 
     z='SalePrice',  
     title='House Prices'
 )

3. Regression Coefficient( 회귀계수 )

  • 단순선형회귀식 : y=β0+β1xy = \beta_0 + \beta_1 x

  • 다중선형회귀식 : y=β0+β1x1+β2x2y = \beta_0 + \beta_1x_1 + \beta_2x_2

  • 절편( intercept ), 계수들( coefficients ) : model.intercept_, model.coef_

b0 = model.intercept_
b1, b2 = model.coef_

4. 회귀모델 평가지표

  • MSE (Mean Squared Error) = 1ni=1n(yiyi^)2\frac{1}{n}\sum_{i=1}^{n}(y_{i} - \hat{y_{i}})^{2}

  • MAE (Mean absolute error) = 1ni=1nyiyi^\frac{1}{n}\sum_{i=1}^{n}\left | y_{i} - \hat{y_{i}} \right |

  • RMSE (Root Mean Squared Error) = MSE\sqrt{MSE}

  • R2, R-squared (Coefficient of determination) = 1i=1n(yiyi^)2i=1n(yiyiˉ)2=1SSESST=SSRSST1 - \frac{\sum_{i=1}^{n}(y_{i} - \hat{y_{i}})^{2}}{\sum_{i=1}^{n}(y_{i} - \bar{y_{i}})^{2}} = 1 - \frac{SSE}{SST} = \frac {SSR}{SST}

  • 참고

    • SSE(Sum of Squares Error, 관측치와 예측치 차이): i=1n(yiyi^)2\sum_{i=1}^{n}(y_{i} - \hat{y_{i}})^{2}
    • SSR(Sum of Squares due to Regression, 예측치와 평균 차이): i=1n(yi^yiˉ)2\sum_{i=1}^{n}(\hat{y_{i}} - \bar{y_{i}})^{2}
    • SST(Sum of Squares Total, 관측치와 평균 차이): i=1n(yiyiˉ)2\sum_{i=1}^{n}(y_{i} - \bar{y_{i}})^{2} , SSE + SSR
# 회귀방정식 평가지표
mse = mean_squared_error(y, y_pred)
mae = mean_absolute_error(y, y_pred)
rmse = mse ** 0.5
r2 = r2_score(y, y_pred)

5. 과적합 & 과소적합

Q . 모델 선정에서 일반화( generalization )란?
A . 훈련 데이터뿐만 아니라 테스트 데이터에서 좋은 성능을 내는 모델을 일반화가 잘 되었다고 말한다.

5.1 Overfitting( 과적합 )

Q . 과적합이란?
A . 모델이 훈련데이터에만 과하게 적합하여 테스트데이터에서 오차가 크게 나타나 일반화를 못하는 현상을 말한다.

  • 분산이 높다 = 과적합, 모델이 학습 데이터의 노이즈에 민감하게 적합하여 일반화가 안된 경우

  • 모델이 너무 복잡하면 훈련데이터 성능은 계속 증가하는데 검증데이터 성능은 올라가다가 떨어진다. 이 경우에는, 중간에 멈추어 적합한 모델을 찾아야한다.

5.2 Underfitting( 과소적합 )

Q . 과소적합이란?
A . 모델이 훈련데이터뿐만 아니라 테스트데이터에서 오차가 크게 나타나 일반화를 못하는 현상을 말한다. 훈련데이터에서도 과적합이 아닌 현상이다.

  • 편향이 높다 = 과소적합, 모델이 학습 데이터에서 feature와 target 변수의 관계를 파악하지 못한 경우

Quiz

Q . 디즈니플러스에서 시철률 추세를 예측하는 회귀모델을 만들었습니다. 모델이 RMSE가 너무 높은 반면 95% 시간대에서 예측오차는 1% 밖에 되지 않습니다. 예측오차를 보면 좋은 모델인데 RMSE가 너무 높은 이유는 뭘까요? 또, 문제를 어떻게 해결해야 할까요?
A .



👉 과정 한눈에 보기

profile
기록하지 않으면 기록되지 않는다.

0개의 댓글