● 단순선형회귀
- 하나의 독립변수와 하나의 종속변수 사이의 관계를 모델링
● 다중선형회귀
- 여러 개의 독립 변수와 하나의 종속 변수 사이의 관계를 모델링
* 위에 이미지 결과 해석공부
1. 회귀 방정식 : y= 2.94x + 2.56
- 기울기(coeficient)가 2.94로, x가 1단위 증가할 때 y는 평균적으로
2.94 단위 증가
- y 절편(intercept)은 2.56으로 x가 0일 때 y의 예측값
2. R-squared 값 : 0.87
- 이 모델이 데이터의 변동성을 87% 설명한다는 뜻
- 상당히 좋은 적합도를 보여줌.
3. 평균 제곱 오차(Mean Squared Error) : 0.07
- 예측값과 실제값 간의 차이가 작아 모델의 예측 정확도가 높음
4. 그래프 해석 :
- 파란 점들은 실제 데이터,빨간 선은 예측 모델을 나타냄
- 대부분의 점들이 예측선 주변에 밀집해 있어 모델이 데이터를
잘 설명하고 있음을 보여줌
결론 : 모델은 x와 y 사이의 강한 양의 선형 관계를 잘 포착하고 있으며,
예측 성능도 우수한 것으로 보임
▶ R-squared
1. 설명력 :
- 통계적으로 '설명력'은 독립변수가 종속변수의 변동을
얼마나 잘 설명하는지를 나타낸다.
- 이는 총 변동 (SST) 중 회귀 모델로 설명되는 변동(SSR)의
비율을 의미
2. R-squared (r^2) :
- 공식 : SSR/SST = 1 - (SSE / SST)
- SSE : 오차 제곱합 (Sum of Squared Errors)
- SST : 총 제곱합(Total Sum of Squares)
- SSR : 회귀 제곱합 (Regression Sum of Squares)
R² = 1 - Σ(y_i - ŷ_i)² / Σ(y_i - ȳ)²
여기서 y_i는 실제값, ŷ_i는 예측값, ȳ는 y의 평균
3. R-squared 해석 :
- R² = 1 : 모델이 데이터의 모든 변동을 완벽하게 설명 (이상적인 경우)
- R² = 0 : 모델이 데이터의 변동을 전혀 설명하지 못함(평균으로 예측하는 것과 동일)
- 0 < R² < 1 : 모델이 데이터의 일부 변동을 설명함. 클수록 설명력이 높음
4. 주의 사항 :
1) R-squared는 독립변수가 추가될 때마다 증가하는 경향이 있어,
불필요한 변수 추가를 억제하지 못함
2) 이를 보완하기 위해 Adjusted R-squared를 사용하기도 함
3) R-squared가 높다고 해서 반드시 좋은 모델은 아님.
다른 평가 지표와 함께 고려해야 함
* R-squared는 모델의 전반적인 적합도를 평가하는데 유용하지만
다른 평가 지표 (예 : MSE, RMSE, MAE 등)와 함께 사용하여 모델의 성능을
종합적으로 평가하는 것이 좋음
▶ MSE(Mean Squared Error)
1. 정의 :
- 회귀 모델의 예측 오차를 측정하는 지표
- 실제 값과 예측 값 차이의 제곱을 평균한 값
2. 공식 :
MSE = (1/n) * Σ(y_i - ŷ_i)²
여기서 n은 데이터 포인트의 수
3. 구성 요소 :
- 오차(Error) : y_i - ŷ_i (실제값 - 예측값)
- 제곱오차 (Squared Error) : (y_i - ŷ_i)²
- 평균 (Mean) : 모든 제곱 오차의 합을 데이터 포인트 수로 나눔
4. MSE 해석 :
- MSE = 0 : 모델이 데이터를 완벽하게 예측 (이상적인 경우)
- MSE > 0 : 값이 작을수록 모델의 예측이 정확함
- 단위는 종속변수의 제곱 단위
5. 특징:
- 항상 비음수 값을 가짐
- 이상치에 민감함 (제곱 때문에 큰 오차가 강조됨)
- 모델 간 비교 시 유용하지만 , 절대적인 기준은 아님
6. 관련 지표 :
- RMSE (Root Mean Squared Error) : MSE의 제곱근
- MAE(Mean Absolute Error) : 절대 오차의 평균
7. 주의 사항 :
1) 단위가 제곱되어 있어 직관적인 해석이 어려울 수 있음
2) 이상치에 민감하므로 데이터 전처리가 중요함
3) 다른 데이터 셋이나 다른 단위의 모델과 직접 비교하기 어려움
8. 사용 :
- 모델 훈련 과정에서 최소화해야 할 손실 함수로 자주 사용됨
- 모델의 예측 정확도를 평가하는 데 사용 됨
- 다른 평가 지표 (R-squared, MAE 등)와 함께 사용하여 종합적인 평가 필요
* MSE는 모델의 예측 오차를 직접적으로 측정하는 유용한 지표이지만
단독으로 사용하기 보다는 다른 평가 지표와 함께 사용하여
모델의 성능을 종합적으로 평가하는 것이 좋음
▶ 선형회귀를 위한 이상적인 EDA
1. 데이터 품질 확인
2. 변수 간 관계 탐색
3. 데이터 분포 확인
4. 다중 공선성 검토
1. 데이터 품질확인
- info() : 데이터 타입 확인
- isnull().sum() : NAN 값 체크
2. 변수 간 관계 탐색
- df.corr()로 변수 간 상관관계 행렬을 계산
- seaborn의 heatmap으로 상관관계를 시각화
- 변수들 간의 상관관계를 색상으로 표현한 히트맵을 보여줌
3. 데이터 분포 확인 > 변환 시키기
- 모든 변수에 대해 히스토그램과 KDE(커널 밀도 추정) 플롯을 그림
- 4x4 그리드에 각 변수의 분포를 시각화
- 각 변수의 분포 형태를 확인할 수 있음
(KDE : 확률 밀도 함수를 추정하는 비모수적 방법)
예시코드)
plt.figure(figsize=(12, 10))
for i, column in enumerate(df.columns):
plt.subplot(4, 4, i+1)
sns.histplot(df[column], kde=True)
plt.title(column)
plt.tight_layout()
plt.show()
● 대표적인 변환 방법 (standardscaler, minmaxscaler 제외)
1. 로그 변환
- 왼쪽이나 오른쪽으로 치우친 분포에 효과적
예시 코드)
df['CRIM_log'] = np.log1p(df['CRIM'])
df['ZN_log'] = np.log1p(df['ZN'])
2. RobustScaler :
- 중앙값과 IQR을 사용하여 아웃라이어에 덜 민감한 스케일링을 수행
예시 코드)
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
df['AGE_robust'] = scaler.fit_transform(df[['AGE']])
3. 제곱근 변환(Square Root Transformation) :
- 로그 변환보다 약한 효과를 준다.
예시 코드)
df['RAD_sqrt'] = np.sqrt(df['RAD'])
* 이외에도 변환 방법이 다양하니 찾아보면서 데이터에 맞게 적용하기
4. 다중공선성 검토
- VIF(Variance Inflation Factor)를 계산하여 다중공선성을 평가
- y값을 제외한 모든 변수에 대해 VIF를 계산
- 각 독립변수의 VIF 값을 출력, 높은 VIF 값은 다중공선성을 나타냄
VIF : 다중 공선성 측정하는 통계적 방법
1. VIF의 정의 :
VIF = 1 / (1 - R²)
여기서 R²은 해당 변수를 다른 모든 독립변수로 회귀분석했을 때의 결정계수
2. 계산 과정 :
1) 한 독립변수를 선택하여 종속변수로 설정
2) 나머지 독립변수들을 사용하여 회귀분석을 수행
3) 이 회귀 분석의 R²을 구한다
4) VIF =1 / (1 - R²) 공식을 적용
5) 모든 독립변수에 대해 이 과정을 반복
3. 해석:
- VIF = 1 : 다중공선성 없음
- VIF > 1 : 변수들 간 상관관계 존재
* 일반적인 기준
- VIF < 5 : 문제 없음
- 5 < VIF < 10 : 약간의 다중공선성 우려
- VIF > 10 : 심각한 다중공선성 문제
4. 의미 :
- VIF는 다른 변수들과의 상관관계로 인해 해당 변수의 분산이
얼마나 팽창되었는지 나타냄
- 높은 VIF는 해당 변수가 다른 변수들과 강한 선형관계를 가짐을 의미
5. 해결 방안 :
- 변수제거 : VIF가 가장 높은 변수부터 순차적으로 제거해보기
- 주성분 분석(PCA) : 고차원의 데이터를 저차원으로 축소
- 정규화/표준화 : 변수들의 스케일 조정
- 변수 변환 : 로그 변환 등을 통해 선형성 개선
6. 추가 고려사항 :
- 모든 변수가 중요하다면, 릿지 회귀나 라쏘 회귀 같은 정규화 기법을 고려해볼 수 있다.
- 도메인 지식을 활용하여 중요 변수 선별이 필요할 수 있다.
* 그 다음에는 종속변수와 독립변수들의 산점도를 이용하여 관계를 시각화
▶ 선형회귀 모델링
1) 기본적으로 데이터 로드 및 전처리
2) 데이터 분할
3) 스케일링
- y_train, y_test는 스케일링 하지 않기, x_train, x_test 데이터만 진행
4) 기본 선형회귀 모델 적용하고 성능 평가
5) 계수확인
6) 특성 제거, 선택, 추가:
● RFE (Recursive Feature Elimination)방식 :
- 방법 : RFE는 반복적으로 특성의 중요도를 평가하고 가장 중요하지 않은
특성을 제거하는 과정을 거침
- 성능향상 이유 :
* 불필요한 특성을 제거하여 모델의 복잡성을 줄임
* 가장 중요한 특성만을 선택하여 노이즈를 줄이고
모델의 일반화 능력을 향상
* 오버피팅 위험을 감소
● Lasso를 사용한 특성 선택 :
- 방법 : Lasso회귀는 L1 정규화를 사용하여 덜 중요한 특성의 계수를 0으로 만듦
- 성능향상 이유 :
* 자동으로 특성 선택을 수행하여 중요한 특성만 남김
* 모델의 복잡성을 줄이고 해석 가능성을 높임
* 다중공선성 문제를 해결하는데 도움이 됨
● 다항 특성 추가 :
- 방법 : 기존 특성들의 2차항과 상호작용항을 추가
- 성능향상 이유 :
* 비선형 관계를 포착할 수 있어 모델의 표현력이 증가
* 특성 간의 상호작용을 고려
* 복잡한 패턴을 학습할 수 있어 더 정확한 예측 가능
7) 모델 바꿔서 성능 측정
ex) RandomForest 사용
- 방법 : 여러 개의 결정 트리를 생성, 그 결과를 평균내는 앙상블 기법
- 성능향상 이유 :
* 비선형 관계를 잘 포착할 수 있음
* 특성 간의 상호작용을 자동으로 고려함
* 앙상블 효과로 인해 과적합을 줄이고 일반화 성능이 향상
* 이상치에 강건
8) 교차검증
- 방법 : 데이터를 여러 부분으로 나누어 반복적으로 학습과 검증을 수행
- 성능향상 이유 :
* 모델의 일반화 성능을 더 정확하게 추정
* 과적합 여부를 판단하는 데 도움이 됨
* 데이터 분할에 따른 편향을 줄일 수 있다.
# 단계마다 데이터 특성과 도메인에 따른 다양한 방법들이 있으니
그것에 맞는 방법 적용해보면서 성능 측정해보기
'데이터분석 study > ML_ 심화' 카테고리의 다른 글
TIL_24.08.27_데이터 분리, 교차검증 (0) | 2024.08.27 |
---|---|
TIL_24.08.26_데이터 전처리(encoding, scaling) (0) | 2024.08.26 |
TIL_24.08.22_데이터 전처리(이상치, 결측치) (0) | 2024.08.22 |
TIL_24.08.16_EDA (0) | 2024.08.16 |
TIL_24.08.14_데이터분석 프로세스(수집) (0) | 2024.08.14 |