기초통계 (29) 다중선형회귀

생각하는 마리오네트·2021년 10월 25일
0

통계

목록 보기
35/41

📈 용어정리

  • 제곱근평균제곱오차(RMSE) : 회귀 시 평균제곱오차의 제곱근. 회귀모형을 평가 하는 데 가장 널리 사용되는 측정 지표다.
  • 잔차 표준오차(RSE) : 평균제곱오차와 동일하지만 자유도에 따라 보정된 값
  • R제곱(R-squared) : 0에서 1까지 모델에 의해 설명된 분산의 비율
  • t통계량(t-statistic) : 계수의 표준오차로 나눈 예측변수의 계수. 모델에서 변수의 중요도를 비교하는 기준이 된다.
    -가중회귀(weighted regression) : 다른 가중치를 가진 레코드들을 회귀하는 방법

📈 킹 카운티 주택정보 예제

  • 다중선형회귀분석을 활용해 볼 수 있는 대표적인 사례중 하나인 주택 가치를 추정하는것이 있다.
# 예제 데이터
subset = ['AdjSalePrice', 'SqFtTotLiving', 'SqFtLot', 'Bathrooms', 
          'Bedrooms', 'BldgGrade']
print(house[subset].head())          

  • 목표는 주어진 변수(feature, column)들로 판매 금액을 예측하는 것이다.
  • 다중선형회귀의 경우 LinearRegression으로 사용할 수 있다.
from sklearn.linear_model import LinearRegression

predictors = [ 'SqFtTotLiving', 'SqFtLot', 'Bathrooms', 
          'Bedrooms', 'BldgGrade']
outcome = 'AdjSalePrice'

house_lm = LinearRegression()
house_lm.fit(house[predictors], house[outcome])

print(f'Intercept: {house_lm.intercept_:.3f}') # 절편
print('Coefficients:') # 계수
for name, coef in zip(predictors, house_lm.coef_):
	print(f'{name}:{coef}')
  
>>>
  
Intercept: -521871.368
Coefficients:
SqFtTotLiving:228.83060360240796
SqFtLot:-0.06046682065307607
Bathrooms:-19442.840398321056
Bedrooms:-47769.95518521438
BldgGrade:106106.96307898083
  • 계수를 해석하는것은 단순선형회귀와 같다.
  • 예를 들어 (SqFtTotLiving)이 1제곱피트 추가하면 예상가격이 대략 229달러정도 증가할 것이다.

📈 모형 평가

  • 데이터 과학의 관점에서 가장 중요한 성능 지표는 바로 제곱근평균제곱오차(RMSE)이다.
  • RMSE는 평균제곱오차의 제곱근을 말한다.
  • 사이킷런은 회귀나 분류를 위한 여러 지표들을 제공한다. 여기에서 결정계수에 대한 RMSE와 r2_score를 얻기 위해 mean_squared_error를 사용한다.
from sklearn.metrics import r2_score, mean_squared_error
import numpy as np

fitted = house_lm.predict(house[predictors])
RMSE = np.sqrt(mean_squared_error(house[outcome], fitted))
r2 = r2_score(house[outcome], fitted)
print(f'RMSE: {RMSE:.0f}')
print(f'r2:{r2:.4f}')

>>>
RMSE: 261220
r2:0.5406
  • 파이썬에서 회귀모형에 대한 더 자세한 분석을 위해서는 statsmodels를 사용할 수 있다.
import statsmodels.api as sm
model = sm.OLS(house[outcome], house[predictors].assign(const=1)) # assign 메서드는 값이 1인 상수 열을 예측변수에 추가한다.(절편을 모델링하기 위해 필요)
results = model.fit()
results.summary()

  • 여기서 사용된 assign 메서드는 값이 1인 상수 열을 예측번수에 추가한다. 절편을 모델링하기 위함이다.

  • 유용한 지표는 결정계수라고도 부르는 R제곱 통계량이다. R제곱의 범위는 0에서 1까지이며 모델 데이터의 변동률을 측정한다(분산으로). 모델이 데이터에 얼마나 적합한지를 평가할 때, 회귀분석을 설명하기 위한 용도로 활용된다.

  • R제곱의 값이 1에 가까울수록 예측 정확도가 높은것이며, 수식은 다음과 같다. R2R^2 = (예측값 variance)/ (실제값 variance)

  • 자유도를 고려한 수정 R제곱(adjusted R-squared)값 또한 보여준다. 이것은 모델에 더 많은 예측변수를 추가하는 것에 대해 효과적으로 페널티를 가한다.

  • 또한 계수의 표준오차(SE)와 t통계량을 함께 출력한다.

  • t통계량, 그리고 늘 함께 따라다니는 p값은 계수가 통계적으로 유의미한 정도로서, 예측변수와 목표변수를 랜덤하게 재배치하였을 때 우연히 얻을 수 있는 범위를 어느 정도 벗어났는지를 측정한다.

profile
문제를해결하는도구로서의"데이터"

0개의 댓글