작업 2유형 : 선형회귀 모델

SOOYEON·2022년 5월 18일
0

빅데이터분석기사

목록 보기
10/36

선형회귀 모델

연속형 원인 변수가 연속형 결과 변수에 영향을 미치는지를 분석하여 레이블 변수를 예측하기 위한 목적

  • 대표적인 오차 지표 : RMSE
    → 실제값과 예측값간에 전 구간에 걸친 평균적인 오차

  • normalize
    특성치 X의 정규화


  • intercept
    x 가 0일 때 Y의 기본값인 상수 (B0)를 모델에 반영할지 여부

statmodel

파이썬의 통계분석 모듈

import statsmodels.api as sm

# add_constant 상수항 변수를 더함
x_train_new = sm.add_constant(X_train)  
x_test_new = sm.add_constant(X_test)

x_train_new.head()
# 결과값을 확인해보면 'const' 라는 변수가 모두 1로 지정되어있다.

다음 sm.OLS를 적용하고 바로 훈련 fit() 시킨다.
※ 주의할 점 : y데이터 셋과 x데이터셋 함께 레이블 데이터셋을 먼저 지정한다.

OLS

Ordinary Least Squares ; 최소제곱법
: 오차 제곱의 합 = 가장 이상적인 추세선


추세선 (=회귀직선)

  • 데이터들의 점들을 대표할 수 있는 선
  • 분석하고자 하는 전체 데이터를 설명해주는 선
  • 이 회귀 직선의 기존 데이터를 대표할 수 있도록 이상적으로 그리는 것이 회귀분석의 목적

→ 이상적인 추세선 = 잔차가 최소화된 선 = 실제값과 예측값의 사이가 작을수록 이상적
→ 잔차 = 실제값과 예측값의 차 [실제값 - 예측값]

multi_model_tr = sm.OLS(y_train,x_train_new).fit()
print(multi_model_tr.summary())
# 결과 요약 model.summary()

R-squared

  • R-squared : 0.546 = 회귀직선 (예측값)과 실제값이 54.6% 수준으로 일치
    선에 몰려있는 정도를 100으로 산출한 지수 == 설명력
  • coef = 각 X변수가 1 증가할 때 Y가 변화하는 정도, == 기울기
    ex ) income이 증가할 때 house_value 값이 5.558e+4 =약 5.6만 달러 증가함을 의미
  • P > |t| = 통계적으로 유의미한가(significant) 검증
    0.05보다 작으면 유의한 영향을 미치는 변수로 판단
# 테스트 데이터 분석
multi_model_ts = sm.OLS(y_test, x_test_new).fit()
print(multi_model_ts.summary())

sklearn 적용

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_scaled_train, y_train)

# tr
pred_train = model.predict(X_scaled_train)
model.score(X_scaled_train, y_train)

# ts
pred_test = model.predict(X_scaled_test)
model.score(X_scaled_test, y_test)

RMSE

Root Mean Squared Error
실제값과 예측값 간의 평균적인 오차

import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(pred_train, y_train)
MSE_test = mean_squared_error(pred_test, y_test)

print(f'Train data RMSE : {np.sqrt(MSE_train)}')
print(f'Test data RMSE : {np.sqrt(MSE_test)}')

MAE

Mean Absolute Error ; 절대 평균 오차
실제값과 예측값 차이에 절대값을 씌운뒤 평균을 낸 오차

# import mean_absolutie_error
from sklearn.metrics import mean_absolutie_error
mean_absolute_error(y_test, pred_test)

MSE

Mean Squared Error ; 평균 제곱 오차
실제값과 예측값의 차이

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test, pred_test)

MAPE

Mean Absolute Percentage Error ; 평균 절대 오차 비율
실제값 대비 오차 (실제값 - 예측값) 정도를 백분율로 나타낸 지표

※ 일반적인 선형회귀 모델보다는 시계열 데이터에서 주로 사용

# MAPE
def MAPE(y_test, y_pred):
	return np.mean(np.abs((y_test - y_pred) / y_test)) * 100

MAPE(y_test, pred_test)

MPE

Mean Percentage Error ; 평균 오차 비율
0을 기준으로 실제값보다 예측값이 더 큰지, 작은지 등을 알 수 있다.

def MPE(y_test, y_pred):
	return np.mean((y_test - pred_test) / y_test) * 100
    
MPE(y_test, pred_test)

0개의 댓글