안녕하세요! 오늘은 본캠프 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)은 선형 모델과 다르게 다중공선성의 영향을 받지 않거나, 적게 받는 경향이 있음→ 변수 간의 독립성을 가정하지 않으며, 다중공선성이 있어도 트리가 분할할 변수를 자동으로 선택하기 때문에 영향이 적음 하지만, 비선형 모델에서도 다중공선성이 문제될 수 있는 경우
- 불필요한 변수가 많아져 모델의 복잡도가 증가(과적합)
- 모델 해석(Feature Importance)이 왜곡될 가능성
- 훈련 데이터 효율성 저하
- 랜덤 포레스트, XGBoost 같은 트리 기반 모델
- 다중공선성이 심할 경우 모델 성능을 저하시킬 수 있으므로 적절한 처리가 필요
과적합 이란?
과적합(overfitting)은 머신러닝 모델이 학습 데이터에 지나치게 최적화되어, 새로운 데이터에 대한 예측 성능이 저하되는 현상을 말합니다.
즉, Train Data에대해서는 100점인데 Test Data에서는 그 보다 낮은 20점 이렇게 받는 것을 의미함
과적합이 발생하는 이유
- 모델이 너무 복잡할 때: 너무 많은 파라미터가 있거나, 너무 깊은 신경망을 사용할 때 과적합이 발생할 수 있습니다. 이 모델은 훈련 데이터를 지나치게 잘 맞추려 하여, 실제로는 예측력이 떨어집니다.
- 훈련 데이터가 부족할 때: 훈련 데이터가 적으면 모델이 그 데이터를 과도하게 학습하여, 새로운 데이터에 대한 일반화 능력이 떨어집니다.
- 노이즈가 많은 데이터: 데이터에 잡음이나 이상치가 있을 때, 모델이 이 잡음까지 학습하게 되면 과적합이 일어납니다.
과적합을 방지하는 방법
- 모델의 복잡도 줄이기: 너무 많은 파라미터를 가진 모델 대신, 간단한 모델을 사용합니다.
- 더 많은 훈련 데이터 확보: 데이터가 많을수록 모델이 훈련 데이터에 과도하게 맞추는 것을 방지할 수 있습니다.
- 정규화(Regularization): L1, L2 정규화 같은 기법을 사용해 모델의 복잡도를 제어할 수 있습니다.
- 교차 검증: 모델을 여러 번 테스트하여 과적합 여부를 확인하고, 모델을 개선합니다.
VIF기반 변수제거
개념:
- VIF(Variance Inflation Factor) 값이 높으면 해당 변수는 다른 변수들과 높은 상관관계를 가짐
- 일반적으로 VIF 값이 10 이상이면 다중공선성이 높다고 판단하고 제거 고려
방법:
- 모든 변수에 대해 VIF를 계산
- VIF 값이 가장 높은 변수를 제거하고 다시 VIF 계산
- VIF 값이 10 이하가 될 때까지 반복
높은 상관관계를 가진 변수 제거
개념:
- 피어슨 상관계수를 계산하여 상관계수 0.9 이상인 변수 쌍 중 하나를 제거
방법:
- 피어슨 상관행렬을 계산
- 상관계수가 0.9 이상인 변수 쌍을 찾음
- 도메인 지식이나 모델 성능을 고려하여 제거할 변수를 결정
PCA 분석
개념:
- 다중공선성이 높은 변수를 직접 제거하지 않고, 새로운 축으로 변환하여 차원을 줄이는 방법
- PCA(Principal Component Analysis)를 사용하여 주요 정보를 유지하면서 변수를 축소
예제: 2개의 강한 상관관계를 가진 변수 X, Y가 있을 때
- X, Y 두 개의 변수를 사용하지 않고, X와 Y를 합친 새로운 축(PC1)을 만든다.
- X와 Y의 중복 정보를 제거하면서도, 전체적인 데이터의 변동성을 최대한 유지한다.
방법:
- 주성분 개수(n_components)를 결정
- PCA를 적용하여 새로운 변수로 변환
- 변환된 변수를 모델에 사용
이점:
- 다중공선성을 해결하면서도 데이터의 정보를 최대한 유지
- 모델이 변수를 학습하는 데 효율적
!주의:
- PCA 적용 후 해석력이 떨어질 수 있음
- 변수 중요도를 직접 해석하기 어려움
다중공선성을 처리해야 하는 경우?
→ 모델링의 목적이 ‘해석’인 경우
- VIF 값만 보고 판단할 것이 아니라 도메인 지식이 있다면 변수간의 관계를 파악한 후 변수를 제거해야 합니다. ex) 음주량과 흡연량이 암에 미치는 영향
다중공선성을 처리하지 않아도 되는 경우?
→ 모델링의 목적이 ‘예측’인 경우
- 보다 정확한 예측을 하는 것이 목적이라면, 다중공선성을 신경 쓰지 않아도 됩니다.
- 트리 기반 모델의 경우, 각 노드에 사용될 변수를 선택하는 기준에 영향을 주어 모델의 해석(변수 중요도)에 영향을 줄 수는 있습니다. 하지만, 예측 결과 자체에는 영향을 주지 않습니다.
4. 데이터 분할
- 모델을 훈련하고 평가하기 위해 데이터를 훈련 데이터(Train)와 테스트 데이터(Test)로 나눈다.
- 훈련 데이터: 모델 학습에 사용
- 테스트 데이터: 모델이 본 적 없는 데이터로, 일반화 성능 평가
왜 나눠야 할까?
- 모델이 훈련 데이터만 잘 맞추고 테스트 데이터에선 못 맞추는 과적합(overfitting)을 방지하기 위함
- 일반화 성능(실제 상황에서 잘 작동하는지)을 객관적으로 평가
양이 너무 많아서 내일 더 복습해봐야겠어요!!
머신러닝 사실 아직 이해는 안되는데 계속 반복하다보면 머릿속에 들어오겠죠?!
오늘도 수고 많으셨습니다!!!
'2025 내일배움캠프 QAQC_2기' 카테고리의 다른 글
| 2025 내일배움캠프 QAQC_2기 본캠프 33일차 (0) | 2025.06.27 |
|---|---|
| 2025 내일배움캠프 QAQC_2기 본캠프 32일차 (0) | 2025.06.26 |
| 2025 내일배움캠프 QAQC_2기 본캠프 30일차 (0) | 2025.06.24 |
| 2025 내일배움캠프 QAQC_2기 본캠프 29일차 (0) | 2025.06.23 |
| 2025 내일배움캠프 QAQC_2기 본캠프 28일차 (0) | 2025.06.20 |