티스토리 뷰
1. 통계기초
1) ML : 지도학습(회귀, 분류) + 비지도학습(군집화, 변화, 연관) + 강화학습
독립변수, 종속변수가 존재할 때
- 회귀(Regression) : 예측하고 싶은 종속변수가 숫자(수치형 데이터)일 때 사용
- 분류(Classification): 예측하고 싶은 종속변수가 이름, 문자일 때 사용
2) 선형회귀 : 독립변수는 여러개 가능, 종속변수는 하나만
독립변수의 변화에 의한 종속변수의 변화를 설명하는 기준모델 만들고, 가중치 학습으로 fitted 모델 만듦
- X : 독립변수 = 예측변수(Predict) = 설명변수(Explanatory) = 특성(Feature)
- y : 종속변수 = 반응변수(Response) = 레이블(Label) = 타겟(Target)
※ 두 변수 모두 연속형변수일 때만 사용가능하므로, 독립변수가 범주형이라면 Dummy 변수로 변환 후 적용해야 함
df.dtypes # 범주형(object) 데이터 확인
df_dum = pd.get_dummies(df) # 더미변수
df_dum.head()
X = df_dum.drop("<종속변수명>", axis=1) # 독립변수 지정
y = df_dum["<종속변수명>"] # 종속변수 지정
3) 선형회귀에서의 중요 용어
- 예측값(Predict) : 선형회귀모델이 추정하는 값, 즉 line 상의 독립변수에 대한 종속변수 (y^)
- 잔차(Residual) : 표본집단에서의 회귀 예측값과 실제 관측값의 차이
- 오차(Error) : 모집단에서의 회귀 예측값과 실제 관측값의 차이
대부분 표본집단에서 회귀식을 얻으므로, 잔차를 이용해 회귀식의 최적 parameter 값들을 추정함
- 잔차제곱합(Residual Sum of Squares - RSS) : 회귀모델의 비용함수
- 학습 : 비용함수를 최소화하는 모델을 찾는 과정
- 외삽(Extrapolate) : 기존에 학습된 데이터의 범위를 넘어서는 값을 예측하는 것
- 기준모델 : 가장 간단하고 직관적이며, 최소한의 성능을 가지고 있어 첫 학습모델에 대한 성능 비교할 때 사용
2. 단순 선형회귀
단순 선형회귀 : 독립변수가 하나인 선형회귀 → 일차함수로 표현
🔸목적 : n개의 데이터를 통해 True line을 예측하는 Best fitted line을 찾는 것
🔸Good Fitted line ? 모든 data와 예측값의 차이 계산해서 차이가 적을수록 good
= b +
: 절편 계수 (Intercept) = 독립변수 X가 (모두) 0일 때 종속변수 y의 값
: 기울기 계수 (Slope) 또는 회귀 계수 = X의 변화에 따라 y가 반응하는 정도
- 기울기 계수가 양수 : X값이 커지면 y값도 증가하는 positive slope line 생성
- 기울기 계수 음수 : X값이 커지면 y값은 감소하는 negative slope line 생성
b0 = linear.intercept_ # 절편계수
b1 = linear.coef_ # 회귀계수
print("intercept:", b0)
beta = pd.DataFrame(b1, index=X.columns, columns=["slope"])
beta.sort_values("slope")
🔸Good model ?
현재 데이터(training data)를 잘 설명하는 모델
= 미래 데이터(test data)에 대한 예측 성능이 좋은 모델
= Training error을 minimize 하는 모델
🔸MSE (Mean Squard Error) : Fitted line의 효용 평가 지표
목표 : MSE, 즉 SSE를 최소로 만드는 b0, b1을 찾자!
🔸OLS (Ordinary Leat Squares) : b0, b1을 찾는 방법
3. 다중 선형회귀
다중 선형회귀 : 독립변수 (X) 가 2개 이상인 선형회귀 → 행렬식으로 표현
단순 회귀분석에 비해 정확한 예측이 가능하지만, 모형선택 문제 & 다중공선성 문제 발생
1) 모형선택 문제 : 어떠한 독립변수를 회귀모델에 포함시킬 것인지를 결정하는 문제
- 변수추가법 : 변수가 없는 상태에서 종속변수를 설명하는 기여도가 가장 높은 변수 하나씩 추가 (F-진입값)
- 변수제거법 : 변수가 모두 포함된 회귀모델에서 종속변수를 설명하는 기여도가 가장 낮은 변수 하나씩 제거 (F-제거값)
- 단계별 선택법 : 변수가 없는 상태에서 변수추가법으로 변수 1개 추가 후, 변수제거법으로 제거될 변수 조사
- 최적의 변수선택법 : 모든 가능한 회귀모델을 고려해 가장 좋은 모델을 선택하는 방법 (주로 MSE)
2) 다중공선성 문제 : 독립변수들 사이에 높은 상관관계가 존재해 예측값이 불안정하게 나타나는 현상
다중공선성 : 독립변수들 사이의 상호 의존도
높은 다중공선성이 존재하게 되면, 회귀계수의 부호가 바뀌거나 중요한 독립변수에 대한 회귀계수가 0에 가까운 값을 추정하게 되어 의미 없는 변수로 해석될 가능성이 있음 (예측값 불안정)
🔸OLS (Ordinary Leat Squares) : b 값을 행렬식으로 찾음
4. 성능평가지표
1) MAE (Mean Absolute Error)
- 절댓값으로 구한 것이므로 에러에 따른 손실이 선형적으로 올라갈 때 적합
- 이상치가 많을 때 적합
2) MSE (Mean Squared Error)
- 예측값과 실제값 차이의 면적의 합
- 특이값이 존재하면 수치가 많이 늘어남
3) RMSE (Root MSE)
- MSE는 에러에 제곱을 하기에 에러가 클수록 그에 따른 가중치가 높이 반영됨
- 에러에 따른 손실이 기하급수적으로 올라가는 상황에 적합
4) R^2 (결정계수)
- Coding 돌렸을 때 음수가 나오면 예측 잘못된 것
- 0.6 ~ 0.9 정도가 괜찮다!
+) F-statistic (검정 통계량)
: 두 모집단 간의 mean 값이 significantly different 한지 알아보고자 회귀분석에서 사용하는 값
T-test : 'single' variable이 statistically significant 한가?
statistically significant = 우연에 의해 일어난 것이 X
F-test : 'group' of variables가 jointly significant 한가?
F = variation between sample means / variation within the samples
표본집단들이 하나의 모집단에서 나왔다면 F-value 값이 작음
🔸R^2 VS F-statistic
공통점 : 추정한 모델이 적절한지 알려주는 통계량
R^2 : 데이터들이 fitted line에서 각각 얼마나 떨어져 있는지 분산을 더한 값들을 토대로 계산
0 ~ 1 값 → 값이 크면 예측 정확(보통 0.6~0.9), 값이 작으면 부정확
F-statistic : 데이터를 모아보니 선형(Linear)이 잘 되는가를 따지는 계산
0 ~ ∞ 값 → 값이 크면 선형 잘 X, 값이 작으면 선형 잘 O
[ StatsModels 라이브러리로 선형 회귀 분석 ]
import statsmodels.api as sm
model = sm.OLS(y_train, X_train)
results = model.fit()
results.summary()
- Model : OLS (Ordinary Least Squares)
- No.Observations : 전체표본 수 = 320
- Df Model : 독립변수의 개수 = 7
- Df Residuals : 전체표본 수 - (독립변수 개수 + 종속변수 개수) = 320 - (1+7) = 312
- R-squared : 결정계수 (전체 데이터 중 해당 회귀모델이 설명할 수 있는 데이터의 비율. 1에 가까울수록 좋음) = 0.826
- F-statistic : F통계량 (MSR/MSE) = 211.6
- Prob(F-statistic) : F통계량에 해당하는 P-value (0.05 이하라면 회귀모델 전체에 대해 통계적으로 유의미) = 1.99e-114
- coef : 계수 추정치
- P>|t| : 독립변수의 유의 확률 (95%의 신뢰도를 가져야 유의미하다고 판단하며 이 경우 유의 확률은 0.05보다 작은 값)
- Durbin-Watson : DW 검정 (잔차의 독립성을 확인할 수 있는 수치) = 1.968
보통 1.5~2.5 이면 독립으로 판단 = 적합한 회귀 모델
0이나 4에 가깝다면 잔차들이 자기상관을 가졌다는 의미 = 적합 X
(1) R^2와 F-statistic을 고려해 볼 때, 이 모델은 좋은 모델이라고 볼 수 있는가
전체 데이터 중 이 회귀모델이 설명할 수 있는 데이터의 비율, 즉 모델의 설명 성능을 나타내는 R^2 값은 0.826으로 1에 가까운 큰 수치를 나타내므로 좋은 모델이라고 할 수 있다. 또한, F통계량에 해당하는 p-value 값인 Prob(F-statisfic) 값이 0.05 이하이므로 통계적으로 유의미한 좋은 모델이라고 할 수 있다.
(2) 'University Rating'이 대학원 합격률에 미치는 영향 해석
독립변수의 유의 확률을 나타내는 p-value 값은 0.05보다 작아야 유의미하다고 해석할 수 있다. 그러나 'University Rating'의 p-value(P>|t|) 값은 0.561 이므로 통계적으로 종속변수(대학원 합격률)에 대해 유의미하지 않은 변수라고 볼 수 있다.
5. Underfitting / Overfitting
1) Underfitting (과소적합)
= High Bias + Low Variance → 데이터(train + test)를 잘 설명하지 못함
→ 해결법 : Model complexity 늘리기
2) Overfitting (과대적합)
= High Variance + Low Bias → train 데이터에 너무 의존적 (test 데이터 예측 bad)
→ 해결법 : 더 많은 데이터 사용(Data Augmentation) / Cross validaion / Regularization / Dropout
🔸Bias (편차), Variance (분산)
모델 학습의 최종 목표 : 보지 못한 데이터에 대해 좋은 성능 내는 것 (=측정 오차가 작은 것)
평균제곱오차 = 편차 + 분산 + 고정오차
Low Bias + Low Variance : Error 값이 작음
- Bias ↑ : 실제값과 예측값의 오차가 커짐
- Variance ↑ : 데이터 점들의 분산이 예측력을 떨어뜨림
모델에 더 많은 변수를 넣으면 (Model Complexity, 수용력, 차수↑), Variance ↑ + Bias ↓ (Overfitting)
Bias의 감소가 Variance의 증가와 같아지는 최적의 point 찾는 것이 최고지만 방법이 X
High Bias, High Variance 극복 how ?
: 모델에 새로운 변수를 추가하며 model의 복잡도는 증가 + High Variance는 줄이는 방법!
6. Regularization Shrinkage Method
Ridge & Lasso : "MSE와 Penalty항의 합을 최소로 만들자"
선형회귀와 다른 점 : Penalty항의 λ값을 변경하여 계수의 크기를 제어할 수 있음
큰 계수일 경우 Penalty를 줌으로써 High Variance를 막아 Overfitting 방지
→ Penalty 변수 축소 통해 다중공선성 방지 가능 & 계수 축소로 모델 복잡도 줄이기 가능
🔸MSE + λ * L-norm
- MSE(RSS)항이 작아지면, 라벨값과 예측값의 차이가 작아짐
- L-norm이 작아지면, 많은 가중치들이 0이 되거나 0에 가까워짐
🔸λ (lamda)
: 회귀 계수를 조정할 수 있는 Penalty Parameter (적절한 값 찾아야 함)
- Parameter Tuning (alpha값 조정)을 통해 편향과 분산의 균형이 잡힌 회귀모델 형성
- 0 ~ ∞ 값을 가짐
- 0일 경우 일반 선형회귀모델의 결과와 동일한 회귀계수 얻게 됨
- λ의 값을 키울수록 회귀계수에 대한 제약이 켜져 회귀계수들의 값이 줄어듦
- Overfitting 될 때, λ의 값을 키움으로써 Overfitting 구간을 벗어날 수 있음
-
-
-
1) Ridge Regression
- L2 Regularizaion 사용 (수식적인 해를 구할 수 있음)
- MSE + Penalty항(λ * 각 계수 제곱의 합)을 통해 계수의 크기도 함께 최소화
- 제곱항(그래프 상 : 두 원형의 접점)을 사용하므로 어떤 계수가 덜 중요하더라도 완전히 0으로 수렴하지는 X
- 주의점 : 변수의 크기가 결과에 큰 영향을 미치므로, 변수를 스케일링해 서로 크기가 비슷하도록 해주는 작업 (Scaling of Predictiors) 필요할 수 있음 (표준편차를 각 predictors마다 구해 나눠줌)
2) Lasso Regression
- L1 Regularizaion 사용
- MSE + Penalty항(λ * 각 계수 절댓값의 합)을 통해 계수의 크기도 함께 최소화
- 중요한 몇 개의 변수만 선택하고 나머지 변수의 계수들은 0으로 줄임 (Feature Selection)
- 변수를 자동으로 채택할 수 있어 일반적으로 많은 변수를 다룰 때 활용
ex) 변수의 개수가 아주 많아서 1/3정도 날리고 시작할 때 유용 (0이 많은 것 = sparse)
- 문제점 : 변수들끼리 correlate 하다면, 단 한개의 변수만 선택하고 다른 변수의 계수들은 0으로 바뀌므로 정보가 손실되어 정확성이 떨어질 수 있음 → Elastic Net Regression 등장
3) Elastic Net Regression
- Lasso + Ridge
- (변수가 많은) 큰 데이터셋에서 가장 잘 작동
-------------------------------------------------------------------------------------------------------
Q1) λ값을 크게 조절하여 High Variance 문제를 해결할 수 있다. (O, X)
A1) O, λ값을 키울수록 Overfitting (High Variance) 구간을 벗어날 수 있다.
Q2) 변수가 많을 때는 Ridge Regression을 사용하는 것이 좋다. (O, X)
A2) X, 변수가 많을 때는 Lasso Regression이 더 유용하다.