연속형 원인 변수가 연속형 결과 변수에 영향을 미치는지를 분석하여 레이블 변수를 예측하기 위한 목적
대표적인 오차 지표 : RMSE
→ 실제값과 예측값간에 전 구간에 걸친 평균적인 오차
normalize
특성치 X의 정규화
파이썬의 통계분석 모듈
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데이터셋 함께 레이블 데이터셋을 먼저 지정한다.
Ordinary Least Squares ; 최소제곱법
: 오차 제곱의 합 = 가장 이상적인 추세선
- 데이터들의 점들을 대표할 수 있는 선
- 분석하고자 하는 전체 데이터를 설명해주는 선
- 이 회귀 직선의 기존 데이터를 대표할 수 있도록 이상적으로 그리는 것이 회귀분석의 목적
→ 이상적인 추세선 = 잔차가 최소화된 선 = 실제값과 예측값의 사이가 작을수록 이상적
→ 잔차 = 실제값과 예측값의 차 [실제값 - 예측값]
multi_model_tr = sm.OLS(y_train,x_train_new).fit()
print(multi_model_tr.summary())
# 결과 요약 model.summary()
- 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())
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)
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)}')
Mean Absolute Error ; 절대 평균 오차
실제값과 예측값 차이에 절대값을 씌운뒤 평균을 낸 오차# import mean_absolutie_error from sklearn.metrics import mean_absolutie_error mean_absolute_error(y_test, pred_test)
Mean Squared Error ; 평균 제곱 오차
실제값과 예측값의 차이from sklearn.metrics import mean_squared_error mean_squared_error(y_test, pred_test)
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)
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)