품질관리(QAQC) 데이터 부트캠프(본캠프)

본캠프_15주차(화)_TIL(앙상블 기법, 베이직, 스탠다드)

Wat_zy 2025. 12. 23. 08:57

✅ 오늘 한 것

베이직, 실무에 쓰는 머신러닝 기초, 스탠다드


✏️ 오늘 배운 점

실무에 쓰는 머신러닝 기초

앙상블 기법

앙상블 기법

  • 여러 개의 모델을 조합하여 하나의 모델보다 더 좋은 예측 성능을 내는 방법
  • 왜 사용하는가?
    • 서로 다른 모델을 결함함으로써 오류를 줄일 수 있음
    • 개별 모델의 편향(Bias)과 분산(Variance)을 상호 보완

배깅

  • 원리
    • 학습 데이터를 무작위로 여러 부분 샘플(Bootstrap)로 나누어 각각 독립적으로 모델 학습
    • 예측 시에는 여러 모델의 결과를 평균(회귀) 혹은 다수결(분류)로 결정
  • 예시
    • 랜덤 포레스트(Random Forest) - 분류, 회귀 모두 가능 
      • 결정 트리 여러 개를 만들 때 각 트리에 사용하는 피처와 데이터 샘플을 무작위로 선택
  • 장점
    • 각 모델이 독립적으로 학습되므로 병렬 처리 가능 (학습 속도가 상대적으로 빠름)
    • 모델 간 상호 간섭이 적어 안정적
    • 과적합을 줄여주는 효과 (예측의 분산 감소)
  • 단점
    • 많은 수의 모델을 학습해야 하므로 메모리 사용량이 많아질 수 있음
    • 해석이 어려움
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

X = df.data
y = df.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

rf_model = RandomForestClassifier(n_estimators=100, max_depth=None, random_state=42)

rf_model.fit(X_train, y_train)

y_pred = rf_model.predict(X_test)

acc = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
report = classification_report(y_test, y_pred)

 

부스팅

  • 원리
    • 순차적으로 모델을 학습하면서 이전 모델이 만든 예측 오류를 보정하도록 설계
    • 각각의 모델은 이전 모델이 틀린 부분에 가중치를 더 둬서 학습
  • 대표 알고리즘
    1. XGBoost
    2. LightGBM
    3. CatBoost
  • 장점
    • 높은 정확도 달성 가능
    • 각 단계에서의 오류를 보정하기 때문에 복잡한 데이터 패턴을 잘 포착
  • 단점
    • 순차적으로 학습하므로 병렬화가 쉽지 않음
    • 하이퍼파라미터가 많고 튜닝이 까다로움
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
from lightGBM import LGBMClassifier

X = df.drop('Target', axis=1)
y = df['Target']

for col in cols:
	le = LabelEncoder()
    X[col] = le.fit_transfrom(X[col])
    
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

# XGBoost
xgb_model = XGBClassifier(random_state=42)
xgb_model.fit(X_train, y_train)
y_pred = xgb_model.predict(X_test)

accuracy_score(y_test, y_pred)
confusion_matrix(y_test, y_pred)
classification_report(y_test, y_pred)

# LightGBM
lgb_model = LGBMClassifier(random_state=42)
lgb_model.fit(X_train, y_train)
y_pred = lgb_model.predict(X_test)

accuracy_score(y_test, y_pred)
confusion_matrix(y_test, y_pred)
classification_report(y_test, y_pred)

 

과적합(Overfitting) vs 과소적합(Underfitting)

과적합

  • 학습 데이터에는 지나치게 최적화되었지만 새로운 데이터(테스트, 실제 환경)에는 성능이 떨어지는 현상

과소적합

  • 모델이 데이터의 패턴을 충분히 학습하지 못해 학습 데이터조차도 충분히 맞추지 못하는 현상

과적합의 원인

  • 모델의 파라미터(자유도)가 너무 많아서 복잡도 과다
  • 학습 데이터 수가 충분하지 않음
  • 너무 많은 에폭(딥러닝 등)으로 학습
  • 노이즈가 많은 훈련 데이터에서 패턴을 '과하게' 학습

과적합 해결 방법

  • 정규화(Regularization) 기법
    • L1, L2 정규화: 가중치(모델 파라미터)에 패널티를 줘서 과도한 학습 억제
  • 드롭아웃(Dropout, 딥러닝에 주로 사용)
    • 학습 시 일부 뉴런을 확률적으로 비활성화 -> 과적합 완화
  • 데이터 증강(Data Augmentation)
    • 이미지 데이터의 경우, 회전·이동·반전 등으로 새 데이터 생성
    • 자연어 데이터에도 유사한 패턴으로 증강 가능
    • 신호 데이터의 경우 가우시안 노이즈를 추가하여 증강 가능
  • 조기 종료(Early Stopping)
    • 학습 도중 검증 손실이 증가하기 시작하면 학습 중단
  • 앙상블(Ensemble)
    • 서로 다른 모델을 결합하여 과적합 위험을 줄임

과소적합 해결 방법

  • 모델 복잡도 증가
  • 더 오래 학습
  • 모델 구조 변경 (더 깊은 신경망, 더 많은 트리 등)

하이퍼파라미터 튜닝

하이퍼파라미터

  • 모델이 학습을 시작하기 전에 사람이 설정해야 하는 값

하이퍼파라미터 튜닝을 위한 데이터 준비

  • 데이터셋 분할(Training/Validation/Test)
    • Training Set: 모델 학습에 직접 사용
    • Validation Set: 하이퍼파라미터 튜닝이나 모델 선택을 위해 사용
    • Test Set: 최종 성능 평가(훈련/검증 단계에 절대 포함되면 안 됨)
  • 교차 검증(Cross-Validation)
    • 데이터를 훈련 세트와 검증 세트로 여러 번 겹치지 않게 나누어 사용
    • K-Fold Cross-Validation:
      • 데이터를 K개의 폴드(Fold)로 나누어 순차적으로 한 폴드를 검증 세트로 사용하고 나머지를 훈련에 사용
      • 평균 성능을 최종 모델의 성능으로 봄
    • 장점: 데이터가 적은 상황에서도 안정적인 성능 평가 가능

튜닝 방법

  1. Grid Search
    • 미리 정의된 하이퍼파라미터 후보들의 모든 조합을 시도
    • 장점: 완전 탐색이므로 최적값을 놓치지 않음
    • 단점: 후보가 많아질수록 연산량이 급격히 증가
  2. Randomized Search
    • 임의로 샘플링된 하이퍼파라미터 조합을 일정 횟수만 시도
    • 장점: 다양한 영역을 빠르게 탐색 가능, 속도 빠름
    • 단점: 최적 조합을 정확히 찾지 못할 수도 있음
  3. 베이지안 최적화(Bayesian Optimization)
    • 과거의 탐색 결과를 바탕으로 가장 유망한 하이퍼파라미터 범위를 중점적으로 탐색
    • 장점: 탐색 시간이 더 짧고 효율적
    • 단점: 구현 복잡도가 높음

머신러닝 추가 개념

최적화 (Optimization)

  • 하이퍼파라미터 튜닝(GridSearchCV, RandomizedSearchCV 등)
  • 피처 엔지니어링(새로운 파생 변수 생성, 불필요한 변수 제거)
  • 과적합 방지(교차검증, 규제 적용, 드롭아웃 등)

배포 (Deployment)

  • 학습 완료 모델을 운영 환경에 배포
  • API 서버 구축, 클라우드(AWS, GCP) 또는 엣지 디바이스(임베디드 환경)
  • 지속적인 모니터링으로 모델 성능이 저하될 경우 재학습 주기 설정

MLOps(머신러닝 운영)란?

  • Machine Learning + DevOps 
  • 머신러닝 모델 개발부터 배포, 모니터링, 재학습, 롤백(Rollback) 등 전 과정을 자동화하고 효율적으로 운영하는 방법론

MLOps(머신러닝 운영)은 왜 중요할까? 

  • 프로젝트 완성 -> 실제 운영 단계에서 지속적인 모니터링과 데이터/모델 업데이트가 필요

모델 해석 가능성

왜 필요한가?

  • 머신러닝, 특히 딥러닝 모델은 블랙박스처럼 동작
  • 의료/금융 등 규제 산업에서는 "왜 이런 결과가 나왔는지"에 대한 설명 요구

주요 기법

  • LIME(Local Interpretable Model-agnostic Explanations)
  • SHAP(Shapley Additive Explanations)
  • Feature Importance 시각화(트리 기반 모델)

스탠다드

SPC의 주요 Zone Rule

구간 이름 위치 (기준: 평균 μ) 설명
Zone A ±2σ ~ ±3σ 사이 심각한 경고
Zone B ±1σ ~ ±2σ 사이 경고
Zone C 평균 ~ ±1σ 사이 정상범위

 

Derivative (기울기, 변화량) 기반 탐지

  • 개념: 값 자체가 아니라, 변화량에 이상 탐지 적용
  • 활용 예시:
    • 5초 내에 온도가 10도 이상 급등 -> 이상
    • 전류가 1초에 3A 이상 급격히 상승

Moving Average + Change Point Detection

  • 기법: 일정 구간의 평균/분산과 현재 값 비교 -> 급변 시점 감지
  • 도구: ruptures(시계열 데이터에서 변화점을 감지하는 데 사용), changefinder, Bayesian Change Point(데이터의 통계적 성질(평균, 분산 등)이 변하는 시점을 찾아내는 것이 목적)
  • 이동 평균(Moving Average)
    • 최근 추세에 비해 너무 튀는 값 확인
  • ChangeFinder
    • 실시간 환경에 적합하고 통계 기반으로 설계된 알고리즘
  • CUSUM (Cumulative Sum Control Chart)
    • 평균이 갑자기 변하는 시점을 빠르게 포착
  • BOCPD (Bayesian Online Change Point Detection)
    • 시계열 데이터에서 변화점(분포가 바뀌는 지점)을 실시간으로 탐지

Variance-based Rule

  • 일정한 기간(슬라이딩 윈도우 또는 구간) 동안의 분산(혹은 표준편차)을 계산하고 그 분산이 사전에 설정한 임계값을 초과하였을 때 변화가 생겼다(또는 이상하다) 라고 판단하는 방식
  • 왜 분산을 기준으로 삼는가?
    • 정상 구간: 일반적으로 분산이 작고 일정
    • 이상 구간: 평균이 바뀌거나 급격한 값의 진동이 생기며 분산이 커짐
    • 따라서, 분산이 갑자기 튀는 지점을 이상 또는 변화점으로 탐

Guassian Tail Probability

  • 정규분포(Gaussian distribution)를 따르는 데이터에서 평균으로부터 특정 거리 이상 떨어진 값이 나올 확률
  • 이상치 탐지: 꼬리 확률이 매우 작으면 이상으로 판단
  • p-value 계산: 통계 검정에서 유의확률(p-value)을 계산할 때도 tail probability 사용
  • 확률적 스코어링: 확률 기반 이상 탐지에 사용

✏️ 오늘의 질문

1. 데이터를 처음부터 교차 검증을 수행하나요?

Train, Test를 먼저 나눈 이후 Train 데이터만을 가지고 교차 검증을 수행한다.

 

2. Train 데이터를 가지고 K-Fold 교차 검증을 수행하는 구체적인 과정은 어떻게 되나요? 

Train 데이터를 K개의 그룹(Fold)로 나누어 각 그룹 중 1개만을 검증용으로 사용하고, 나머지 K-1 그룹을 학습용으로 사용하여 점수를 산출하여 점수의 평균값을 이 모델의 성능으로 간주한다.


📌추가로 해야 할 점

베이직, 실무에 쓰는 머신러닝 기초, AI 서비스 개발