다중선형회귀 Multiple Linear Regression
- 머신러닝모델을 만들 때 학습/테스트 데이터를 분리해야 하는 이유 설명 가능
- 다중선형회귀를 이해하고 사용 가능
- 과적합/과소적합을 일반화 관점에서 설명 가능
- 평향/분산의 트레이드오프 개념 이해, 일반화 관점에서 설명 가능
회귀 : 하나의 종속 변수와 두 개 이상의 독립 변수 사이에 나타나는 관계를 최소 제곱법으로 추정하는 방법.
1. 데이터 train/test data split
1-1 pd.read_csv('')
1-2 컬럼명 확인 : 성능평가를 위해 학습에 사용할 데이터 확인하는 것
df. columns
데이터 나누는 법
- 무작위로 선택해 나누는 방법이 일반적
- 시계열 데이터를 가지고 과거에서 미래를 예측하려고 하는 경우, 무작위로 데이터를 섞으면 절대 안됨. 이때는 훈련 데이터 보다 테스트 데이터가 미래의 것이어야 함
1-3 데이터 test/train 나누기
train/test 데이터를 sample 메소드를 사용, 마지막은 크기 확인

2. 다중선형회귀모델 학습
2-1. 기준 모델
2-1-1. SalePrice 평균

2-1-2. label 정의

2-1-3. Saleprice 평균값으로 예측(기준모델)
훈련데이터의 평균

2-1-4. 기준모델로 훈련 에러 MAE 계산
성능을 알아보기 위하여 계산하는 것

- x시험 데이터 X_test 를 넣어 예측한 y값들을 y_pred에 저장.
이는 추후에 시험 데이터에 있는 실제 정답, 즉 y_test와 비교해보기 위함
- 훈련은 y_pred = y_train.mean() * len(y_train)
mae = mean_absolute_error(y_train, y_pred)
- 테스트는 y_pred = y_train.mean() * len(y_test)
mae = mean_absolute_error(y_test, y_pred)

2-2. 단순선형회귀 모델 만들기
2-2-1 먼저 GrLivArea, SalePrice의 Scatterplot을 그리고 OLS 라인 그려 봅니다.

- 마지막에 ;을 붙임으로써 위에 이상한 글귀 없어짐.
2-2-2 sklearn으로 단순선형회귀모델 학습


기준모델과 비교했을때 에러가 줄어든 것 확인 가능
2-3. 2개 이상의 특성의 다중선형회귀 모델 만들기

하나의 특성을 사용한 단순선형회귀모델보다 테스트 오류가 더 줄어든 것 확인
eg.
회귀계수 해석하면서 모델 평가
- 단순선형회귀식: y=β0+β1x
- 다중선형회귀 식: y=β0+β1x1+β2x2
- 계수들(coefficients or parameters) β0 ~ β2 는 어떻게 구할까?


선형회귀는 다른 ML모델보다 학습이 빠르고, 설명력이 강함
But 과소적합Underfitting이 잘 일어나는 단점 있음
회귀모델 평가 지표 Evaluation Metrics

- 가장 많이 사용하는 지표
- 제곱을 하여 단위 스케일 변하여 오류를 정확하게 파악하기 힘들고, 이상치 확인이 힘듦

- 직관적으로 오류 확인 가능

- MSE의 단점을 개선한 방법

- 결정계수 1에 가까울수록 모델은 데이터를 잘 설명한다고 할 수 있음
= 1에 가까울수록 설명력이 높다
- SSR : 예측에 오류가 없다면 SSR = SST 라서 R-Squared가 1
과적합 Overfitting과 과소적합 Underfitting
- 테스트데이터에서 만들어내는 오차를 일반화 오차 라고 부름
- Train & Test 모두 좋은 성능을 내는 모델은 일반화가 잘 된 모델
- 모델이 너무 train에 과하게 학습(과적합)하지 않도록 하는 많은 일반화 방법들이 있음
- 과적합 : 모델이 train의 특수 성질을 과하게 학습해 일반화를 못해, test에서 오차가 커지는 현상 = 필요 이상으로 과하게 학습하여 오류가 커지는 것
- 과소적합 : train에 과적합도 못하고 일반화 성질도 학습하지 못해, trian/test 데이터 모두 오차가 크게 나오는 경우 = 모델이 너무 간단하여 훈련 데이터의 일반 성질을 훈련하지 (X)
- ML에서 과적합은 피할 수 없는 문제이고, 완전 극복 불가능.
대부분 학습 알고리즘은 이런 과적합을 완화시킬 수 있는 방법을 제공함
분산/편향 tradeoff
과/소적합은 오차의 편향Bias와 분산Variance개념과 관계 있음
- 분산이 높은 경우, 모델이 train 데이터의 노이즈에 민감하게 적합하여 test에서 일반화를 잘 못하는 경우 = 과적합 상태
- 편향이 높은 경우, 모델이 train 뎅터에서 특성과 타겟 변수의 관계를 잘 파악하지 못함 = 과소적합 상태
- 모델의 차수가 높을 수록 편향은 낮아지고, 분산은 높아짐
- 모델의 차수가 낮을 수록 편향은 높아지고, 분산은 낮아짐

- 단순선형모델로 학습하는 경우 (1), 데이터를 모두 지나가도록 곡선 피팅이 가능한 다형 모델로 학습하는 경우 (2)
-
선형 모델 예측은 학습 데이터에서 타겟값과 오차가 크다 = 편향이 높다 (과소적합) but 훈련/테스트 데이터에서 그 오차가 비슷함 = 분산이 낮다
-
곡선 피팅 모델에서는 학습 데이터에서 오차가 0에 가까움 = 편향이 낮다, but 테스트 데이터에서 오차가 많아짐 = 분산이 높다. 이렇게 한 데이터세트에서는 오차가 적은데 다른 데이터 세트에서는 오차가 많이 늘어나는 현상을 과적합이라고 함.
Good model?
편향도 적고, 분산도 적은 모델이 좋은 모델.


- 모델의 복잡성에 따라 성능 그래프를 그려 보면, 모델 복잡해질 수록 train 성능은 계속 증가, 하지만 val 성능은 어느정도 증가하다가 증가세가 멈추고 오히려 낮아지는 지점이 있음. 이 시점을 과적합이 일어나는 시멎으로 파악하고 더 복잡한 모델이 불필요함을 알 수 있음.
assignment
test = df[(df['date'] >= '2030-03-30')]
train = df.drop(test.index)
reference
다중선형회귀(Multiple Linear Regression)
https://hleecaster.com/ml-multiple-linear-regression-example/