[머신러닝] 머신러닝 빌드업 03

Data_Student·2024년 11월 26일
0

머신러닝

목록 보기
7/10

Python 머신러닝 빌드업 - 3회차

  • 머신 러닝 모델링의 전체적인 과정을 이해
  • 머신 러닝 모델을 학습하고 결과를 해석할 때 주의할 점을 인지

1. 문제 정의

  • 모델로 해결하고 싶은 문제가 무엇인지 확실하게 정의

    • 타겟이 있는 데이터인지? 그렇지 않은지?
    • 타겟이 있다면 분류 문제인가? 예측 문제인가?
    • 타겟이 없는 데이터에서 어떤 가치를 뽑아내고 싶은가?
  • 문제에 대한 나의 접근 방식 설정

    • 가설 설정
    • 모델 설정

2. 데이터 전처리

1) 데이터 수집

  • 문제 해결에 사용하기 위한 데이터를 수집, 데이터가 잘 정리가 되어 있는 경우도 있고, 그렇지 않은 경우도 있음
    • 지금 바로 확보해서 분석 가능한 데이터인지?
    • 당장 확보는 어렺지만 노력하면 획득 가능한 데이터인지?
    • 확보하기 어려운 데이터인지?

2) 데이터 클리닝

  • 분석에 적합한 형태로 데이터를 정제하고 가공하는 단계
    • 데이터 타입 확인
    • 결측치 처리 및 이상치 제거
    • 정규화(Normalization) 필요하다면 정규화 진행

3) 피쳐 엔지니어링 (Feature Engineering)

  • 피쳐 엔지니어링은 다양한 독립변수 중에서 분석에 활용하기 위한 변수를 적절하게 선택하거나 필요에 따라 새로운 변수를 생성하는 과정
    • 도메인 지식 등을 활용
    • 탐색적 데이터 분석(EDA)을 통해 변수 상관관계 분석

4) 데이터 분할

  • 분석에 사용하기 위한 데이터를 나눈 작업
    • 보통 : Train/Test 데이터로 구분하거나 Train/Validation/Test 데이터로 구분
      • Train : Test 비중은 보통 6:4 또는 7:3 정도
      • 시계열 데이터의 경우는 특정 시점을 기준으로 데이터 구분
    • 한 번에 학습하기에 데이터 양이 많다면 batch 단위로 구분

3. 모델링

1) 학습에 사용할 모델을 선택하고 모델을 생성

  • 지도 학습

    • 선형 회귀 (예측)
    • 로지스틱 회귀 (분류)
    • 나이브 베이즈 (분류)
    • 서포트 벡터 머신 (분류, 예측)
    • 랜덤포레스트 (분류, 예측)
    • 다층 퍼셉트론 (분류, 예측)
  • 비지도 학습 - 군집 분석

    • 주성분 분석
    • 계층적 군집화
    • K-meas군집화
    • DBSCAN
  • 모델 작성

    • 대부분의 머신러닝 모델은 sklearn을 활용하여 구현
      • 모델에 익숙해지기 전에는 sklearn 공식 문서를 보면서 익히는 것이 좋음

2) 학습 데이터를 이용해 모델을 학습

3) 테스트 데이터를 이용해 모델을 이용한 예측을 진행

4) 성능 지표를 활용해 모델의 성능을 평가

  • 분류 모델
    • 정확도(Accuracy)
    • 정밀도(Precision)
    • 재현율(Recall)
  • 예측 모델
    • MSE(Mean Squared Error)
    • RMSE(Root Mean Squared Error)
    • MAE(Mean Absolute Error)
  • 군집 분석의 경우 군집화된 결과물을 직업 확인하며 성능을 평가

5) 모델 성능을 끌어올리기 위해 모델의 하이퍼파라미터 값을 변경하며 위 과정을 반복

  • 하이퍼 파라미터(Hyper Parameter)
    • 모델을 학습하기 전에 사용자가 직접 값을 설정해줘야 하는 변수
    • 동일한 모델이더라도 어떤 값을 설정하느냐에 따라 모델 성능이 달라질 수 있음
  • 하이퍼 파라미터 탐색 방식
    • Grid Search, Random Search 등의 방식을 이용
    • Grid Search : 모든 조합 시도 / 체계적, 모든 가능성 고려 / 계산량 많음, 고차원에서 비효율적 / 하이퍼파라미터 개수가 작고, 정확한 최적값을 찾을 때 활용
    • Random Search : 랜덤 샘플링 / 효율적, 적은 계산량 / 최적값을 찾지 못할 가능성 / 하이퍼파라미터 개수가 많고, 빠르게 좋은 결과를 얻고 싶을 때 활용
  • 모델을 학습하고 평가할 때 과적합(Overfitting)을 주의
  • 오버피팅(과적합)

    • 머신 러닝 모델이 학습 데이터에 과도하게 맞춰져서 새로운 데이터에 대해 일반화가 떨어지는 현상
      • 묻지도 따지지도 않고 성능 지표를 줄이는 것에 집중
      • 머신러닝의 목적이 예측과 일반화 성능 향상으로 오버피팅(과적합)은 치명적
  • 오버피팅을 방지하는 방법

    1) 모델 단순화

    • 모델 학습에 사용하는 독립변수를 일부러 추려서 활용하면 일반화 성능을 높일 수 있음

    2) 데이터 증강

    • 보다 다양하고 많은 양의 데이터를 활용해서 모델을 학습하면 일반화 성능을 높일 수 있음

    3) 모델 학습에 규제 적용

    • 모델 학습 시 L1, L2 규제를 적용하면 과적합 방지에 도움
      • L1 규제 (Lasso) : 일부 변수의 가중치를 0으로 만들어 피쳐를 선택 효과를 가짐
      • L2 규제 (Ridge) : 모든 변수의 가중치를 작게 만드는 효과가 있어 과적합 방지하고 모델의 일반화 성능 향상

    4) 모델 테스트 시 교차검증 사용

    • K-Fold 교차 검증
      • 전체 데이터를 K개의 서로 다른 조각(Fold)로 나누어 이를 학습 데이터와 검증 데이터로 번갈아서 사용하는 방식
      • K번의 데이터 조합으로 모델을 학습 및 평가하기 때문에 오버피팅(과적합)을 방지하는데 도움

4. 배포

  • 데이터 팀에서는 실제 데이터에 바로 머신 러닝 모델을 적용하여 문제 해결에 해결하는 경우가 많으며, 학습된 모델을 서비스화 하는 것을 배포라고 함

  • 실시간으로 모델을 사용할 필요가 없는 경우에는 모델의 결과물을 분석하여 인사이트를 도출하는 작업

  • 모델의 결과를 해석할 때 고려해야 할 점

    • 변수의 중요도

    • 변수의 중요도를 확인하는 여러 방법들

    1) 회귀 모델(Regresstion)의 계수

    • 회귀모델과 로지스틱 회귀 모델의 경우 계수의 절댓값이 클수록 해당 변수가 중요하다고 할 수 있음
    • 이 때 변수 별 값의 크기(Scale)가 계수값에 영향을 주기 때문에, 정규화(Normalization)를 한 상태에서 비교하는 것이 옳음

    2) 의사결정나무 기반 모델의 Feature Importance

    • 여러 개의 의사결정나무의 합으로 이루어진 랜덤 포레스트(Random Forest)나 XGBoost 같은 모델의 경우
    • 노드를 분리할 때 어떤 변수가 많이 사용되었는지를 이용해 변수의 중요도를 측정

    3) SHAP(SHapley Additive exPlanations)

    • 게임 이론의 샤플리(Shapley) 값을 기반으로 각 특징이 예측에 얼마나 기여했는지를 설명하는 방법
    • 전체 모델에 대한 변수 중요도 뿐만 아니라 개별 데이터에 대해서 각 변수의 영향력을 분석
  • 성능 지표에 대한 해석

    • 모델의 성능을 평가하는 지표의 종류는 다양
    • 이 중에서 모델로 해결하고자 하는 문제에 맞는 평가 지표를 설정하고 비교하는 것이 중요
    • 적절한 평가 지표를 설정하고, 평가 지표의 값이 모델을 일반화하여 사용할 수 있는지를 판단( 배경 지식 + 도메인 지식 필요 )
      • 예) 원/달러 가격 예측 모델 RMSE 값이 100정도라면 잘 나온 것일까?
      • 예) 환자 데이터를 사용해 특정 질병을 진단하는 모델인데 정확도(Accuracy)가 높은 모델이 재현율(Recall)이 높은 모델보다 좋을까? 등

0개의 댓글