2025 내일배움캠프 QAQC_2기

2025 내일배움캠프 QAQC_2기 본캠프 31일차

mingdoremi 2025. 6. 26. 09:13

안녕하세요! 오늘은 본캠프 31일차입니다!

 

오늘은 회귀분석 - 선형회귀에 대한 강의를 들었습니다.

선형회귀 이론

  • 공통
    • Y는 종속 변수, 결과 변수
    • X는 독립 변수, 원인 변수, 설명 변수
  • 통계학에서 사용하는 선형회귀 식 

    • beta0 : 편향(Bias)
    • beta1 : 회귀 계수
    • varepsilon : 오차(에러), 모델이 설명하지 못하는 Y의 변동성
  • 머신러닝/딥러닝에서 사용하는 선형회귀 식

  • w: 가중치
  • b: 편향(Bias)

회귀 평가지표 - MSE

  • 에러 정의방법
    • 방법1) 에러 = 실제 데이터 - 예측 데이터 로 정의하기
    • 방법2) 에러를 제곱하여 모두 양수로 만들기, 다 합치기
    • 방법3) 데이터만큼 나누기
  • 에러 정의 방법 수식화

Mean Squared Erorr(MSE)

  • 기타 평가 지표
    • RMSE: MSE에 Root를 씌워 제곱 된 단위를 다시 맞추기

MAE: 절대 값을 이용하여 오차 계산하기

선형회귀만의 평가 지표 - R Square

숫자를 예측하는 회귀분석에서, 선형회귀에서만 평가되는 지표가 1개 더 있어요. 그건 바로 R Square 지표입니다. R Square는 전체 모형에서 회귀선으로 설명할 수 있는 정도를 뜻합니다. 어떤 값을 “예측”한다는건 어림짐작으로 평균값보단 예측을 잘해야한다는 것을 의미

  • 3번의 데이터 값은 SST = 174^2, SSR = 169^2
    • 해당 값에 대한 설명력 = 94%
    • 단, 모든 데이터에 대해서 위 계산을 수행

머신러닝 오프닝 2회차 수업도 들었습니다!

1. 인코딩 (Encoding)

범주형 데이터를 숫자로 변환하는 과정

* 범주형 데이터 : 숫자처럼 연속적인 값이 아니라, 특정한 "범주(category)" 또는 "이름(label)"으로 표현되는 데이터입니다.

즉, 의미 있는 그룹으로 구분되는 값

 

왜 필요할까?

  • 머신러닝 모델은 숫자만 입력받을 수 있음
  • 문자열 그대로 넣으면 모델이 학습하지 못함

OneHotEncoding - 가장 많이 사용하는 방법

순서가 없는 범주형 변수를 다룰 때 가장 안전하고 효과적인 방법

  • 언제 사용하나요?
    • 성별, 혈액형처럼 순서가 없는 범주형 변수
    • 범주의 개수가 너무 많지 않을 때
  • 어떻게 동작하나요?
    • 각 범주를 새로운 열로 만들어 0과 1로 표시해요
    • 예: 혈액형(A, B, O) → A열(1,0,0), B열(0,1,0), O열(0,0,1)

★OneHotEncoding을 하려면 pandas에 있는 get_dummies를 사용!

 

Label Encoder - 문자형 데이터를 정수(숫자)로 변환하는 간단한 방법

순서가 있는 범주형 변수를 처리할 때 유용

 

언제 사용하나요?

  • low < medium < high, 초급 < 중급 < 고급 처럼 순서가 있는 범주형 변수
  • 또는 범주는 있지만 One-hot을 쓰기엔 너무 많은 경우
  • 트리 기반 모델(Random Forest, XGBoost 등)은 순서가 없어도 잘 처리 가능

어떻게 동작하나요?

  • 각 범주에 대해 고유한 정수값을 할당해요
  • 예: 만족도(만족, 보통, 불만) → 만족: 2, 보통: 1, 불만: 0

★LabelEncoder는 Scikitlearn에서 가져와서 선언 해줘야한다는 점 잊지 말기!

 

2. 스케일링 (Scaling)

머신러닝에서 수치형 데이터의 단위(스케일)를 맞추는 전처리 과정

 

왜 스케일링이 필요할까?

  • 머신러닝 모델은 입력 변수들의 크기 차이에 민감함
  • 스케일이 크거나 단위가 다른 변수는 모델이 편향되게 학습할 수 있음

예:

  • 키(cm): 160~190 ⇒ 최대값과 최소값의 차이는 30
  • 연봉(만원): 1,000~10,000 ⇒ 최대값과 최소값의 차이는 : 8000

→ 연봉이 압도적이므로 모델이 연봉만 보고 학습할 수 있음

 

StandardScaler (표준화)

각 값을 평균 0, 표준편차 1로 변환

 

언제 사용하나요?

  • 데이터가 정규분포에 가깝거나 대칭적일 때
  • 선형회귀, 로지스틱 회귀, SVM, KNN, PCA 등
  • 값의 분포 자체를 보존하고 싶을 때 ⇒ 데이터의 모양(분포 곡선)은 유지하면서, 중심만 0으로 옮기고 크기만 1로 맞춘다는 의미입니다.

!주의 이상치가 있으면 평균과 표준편차가 흔들릴 수 있음

 

MinMaxScaler (정규화)

각 값을 0~1 사이로 변환

 

언제 사용하나요?

  • 값의 범위를 일정한 크기로 맞춰야 할 때
  • 데이터 분포가 비정규형일때

!주의 이상치가 하나라도 있으면 전체 범위가 압축될 수 있음

 

3. 다중공선성 제거 (Multicollinearity)

 

다중공선성이란?

  • 독립 변수(Feature)들 간에 강한 상관관계가 있는 경우를 의미
  • 선형 모델에서는 다중공선성이 있으면 계수(Weight) 추정이 불안정해지고, 해석이 어려워짐
  • 그렇다면? 선형 모델이아닌 비선형모델에서는 다중공선성 처리가 필요한가? ⇒ 비선형 모델(랜덤 포레스트, XGBoost)은 선형 모델과 다르게 다중공선성의 영향을 받지 않거나, 적게 받는 경향이 있음→ 변수 간의 독립성을 가정하지 않으며, 다중공선성이 있어도 트리가 분할할 변수를 자동으로 선택하기 때문에 영향이 적음 하지만, 비선형 모델에서도 다중공선성이 문제될 수 있는 경우
    1. 불필요한 변수가 많아져 모델의 복잡도가 증가(과적합)
    2. 모델 해석(Feature Importance)이 왜곡될 가능성
    3. 훈련 데이터 효율성 저하
  • 랜덤 포레스트, XGBoost 같은 트리 기반 모델
  • 다중공선성이 심할 경우 모델 성능을 저하시킬 수 있으므로 적절한 처리가 필요

과적합 이란?

과적합(overfitting)은 머신러닝 모델이 학습 데이터에 지나치게 최적화되어, 새로운 데이터에 대한 예측 성능이 저하되는 현상을 말합니다.

즉, Train Data에대해서는 100점인데 Test Data에서는 그 보다 낮은 20점 이렇게 받는 것을 의미함

 

과적합이 발생하는 이유

  • 모델이 너무 복잡할 때: 너무 많은 파라미터가 있거나, 너무 깊은 신경망을 사용할 때 과적합이 발생할 수 있습니다. 이 모델은 훈련 데이터를 지나치게 잘 맞추려 하여, 실제로는 예측력이 떨어집니다.
  • 훈련 데이터가 부족할 때: 훈련 데이터가 적으면 모델이 그 데이터를 과도하게 학습하여, 새로운 데이터에 대한 일반화 능력이 떨어집니다.
  • 노이즈가 많은 데이터: 데이터에 잡음이나 이상치가 있을 때, 모델이 이 잡음까지 학습하게 되면 과적합이 일어납니다.

과적합을 방지하는 방법

  1. 모델의 복잡도 줄이기: 너무 많은 파라미터를 가진 모델 대신, 간단한 모델을 사용합니다.
  2. 더 많은 훈련 데이터 확보: 데이터가 많을수록 모델이 훈련 데이터에 과도하게 맞추는 것을 방지할 수 있습니다.
  3. 정규화(Regularization): L1, L2 정규화 같은 기법을 사용해 모델의 복잡도를 제어할 수 있습니다.
  4. 교차 검증: 모델을 여러 번 테스트하여 과적합 여부를 확인하고, 모델을 개선합니다.

VIF기반 변수제거

개념:

  • VIF(Variance Inflation Factor) 값이 높으면 해당 변수는 다른 변수들과 높은 상관관계를 가짐
  • 일반적으로 VIF 값이 10 이상이면 다중공선성이 높다고 판단하고 제거 고려

방법:

  1. 모든 변수에 대해 VIF를 계산
  2. VIF 값이 가장 높은 변수를 제거하고 다시 VIF 계산
  3. VIF 값이 10 이하가 될 때까지 반복

높은 상관관계를 가진 변수 제거

개념:

  • 피어슨 상관계수를 계산하여 상관계수 0.9 이상인 변수 쌍 중 하나를 제거

방법:

  1. 피어슨 상관행렬을 계산
  2. 상관계수가 0.9 이상인 변수 쌍을 찾음
  3. 도메인 지식이나 모델 성능을 고려하여 제거할 변수를 결정

PCA 분석

개념:

  • 다중공선성이 높은 변수를 직접 제거하지 않고, 새로운 축으로 변환하여 차원을 줄이는 방법
  • PCA(Principal Component Analysis)를 사용하여 주요 정보를 유지하면서 변수를 축소

예제: 2개의 강한 상관관계를 가진 변수 X, Y가 있을 때

  • X, Y 두 개의 변수를 사용하지 않고, X와 Y를 합친 새로운 축(PC1)을 만든다.
  • X와 Y의 중복 정보를 제거하면서도, 전체적인 데이터의 변동성을 최대한 유지한다.

방법:

  1. 주성분 개수(n_components)를 결정
  2. PCA를 적용하여 새로운 변수로 변환
  3. 변환된 변수를 모델에 사용

이점:

  • 다중공선성을 해결하면서도 데이터의 정보를 최대한 유지
  • 모델이 변수를 학습하는 데 효율적

!주의:

  • PCA 적용 후 해석력이 떨어질 수 있음
  • 변수 중요도를 직접 해석하기 어려움

다중공선성을 처리해야 하는 경우?

모델링의 목적이 ‘해석’인 경우

  • VIF 값만 보고 판단할 것이 아니라 도메인 지식이 있다면 변수간의 관계를 파악한 후 변수를 제거해야 합니다. ex) 음주량과 흡연량이 암에 미치는 영향

다중공선성을 처리하지 않아도 되는 경우?

모델링의 목적이 ‘예측’인 경우

  • 보다 정확한 예측을 하는 것이 목적이라면, 다중공선성을 신경 쓰지 않아도 됩니다.
  • 트리 기반 모델의 경우, 각 노드에 사용될 변수를 선택하는 기준에 영향을 주어 모델의 해석(변수 중요도)에 영향을 줄 수는 있습니다. 하지만, 예측 결과 자체에는 영향을 주지 않습니다.

4. 데이터 분할

  • 모델을 훈련하고 평가하기 위해 데이터를 훈련 데이터(Train)와 테스트 데이터(Test)로 나눈다.
  • 훈련 데이터: 모델 학습에 사용
  • 테스트 데이터: 모델이 본 적 없는 데이터로, 일반화 성능 평가

왜 나눠야 할까?

  • 모델이 훈련 데이터만 잘 맞추고 테스트 데이터에선 못 맞추는 과적합(overfitting)을 방지하기 위함
  • 일반화 성능(실제 상황에서 잘 작동하는지)을 객관적으로 평가

 

양이 너무 많아서 내일 더 복습해봐야겠어요!!

머신러닝 사실 아직 이해는 안되는데 계속 반복하다보면 머릿속에 들어오겠죠?!

 

오늘도 수고 많으셨습니다!!!