경진대회의 중요성
포트폴리오에 단순히 나 AI할 줄 안다라고 어필하는 것이 아니라, 어디서 어떻게 무얼 해서 성능 개선을 했는 지를 알려주는 게 더 어필할 수 있다.마치 애플 신제품 발표회처럼, 몇 퍼센트의 성능을 어떤 시도를 통해 올렸다는 것을 알려줘야 나중에라도 우리 회사에 도움이 될 수 있겠다고 확신을 줄 수 있다. 시간,score을 축으로 놓고 무슨 시도를 해서 score가 올라가고 내려갔는지를 그려보자. 이런 시도를 통해 내가 경진대회에서 1등을 했다는 것을 보여주면 실력을 인정받을 수 있다.
불균형 데이터
https://colab.research.google.com/drive/14AflpyNTYblQToAOuC0DuJE7lcz3ZjbD
Google Colab Notebook
Run, share, and edit Python notebooks
colab.research.google.com
- 불균형 데이터: target이 범주형 데이터, 범주별로 개수/비율 차이 많이 남.
- train_test_split , stratify, 분류 데이터에 꼭 쓰기
- yhat = model.predict_proba(testX) # 2dim matrix (data num, probability per class)
- 유사한 피쳐들이 있으면 안 좋은 피쳐임
언더샘플링 (Undersampling)
- 랜덤 언더샘플러: 요리할 때 재료가 너무 많으면, 필요한 양만 남기고 나머지는 버리는 것과 같아요. 예를 들어, 가지가 10개 있다고 하면, 5개만 사용하고 나머지는 버리는 거죠. 이렇게 하면 재료가 적어져 요리가 간단해지지만, 때로는 중요한 맛이 사라질 수 있어요.
- 한쪽 선택 (One-sided Selection): 요리에서 특정 한 쪽의 재료만 사용하기로 결정한 상황처럼, 예를 들어 당근과 감자가 있을 때, 감자만 골라서 쓰는 거죠. 이렇게 하면 조리가 간편해지지만, 요리의 다양성이 줄어들 수 있어요.
- 이웃 클리닝 룰 (Neighbourhood Cleaning Rule): 요리를 할 때 다른 재료와의 조화를 고려하여, 서로 겹치는 맛이 있는 재료를 정리하는 것과 비슷해요. 예를 들어, 비슷한 맛의 허브가 2개 있을 때 한 가지만 남기고 나머지를 빼는 거죠. 이렇게 하면 조화로운 맛을 유지할 수 있어요.
오버샘플링 (Oversampling)
- 랜덤 오버샘플러: 요리가 잘 되지 않아서 재료를 더 추가하는 것과 같아요. 예를 들어, 고기가 너무 딱딱하게 느껴질 때, 같은 재료(고기)를 더 추가하는 거죠. 이렇게 하면 더 풍부하고 부드러운 요리를 만들 수 있지만, 재료비가 늘어날 수 있어요.
- ADASYN: 특정 재료가 부족하면, 그것을 바탕으로 새로운 재료를 만들어 내는 것과 유사해요. 예를 들어, 특정한 향신료가 없으면, 비슷한 맛을 내는 과일이나 다른 재료로 대체해서 만드는 것처럼 부가적으로 새롭고 다양한 맛을 창출하는 방식이에요.
- SMOTE: 요리에서 여러 가지 재료를 혼합하여 새로운 조합의 맛을 만들어내는 방식과 같아요. 예를 들어, 다양한 고기와 채소를 섞어서 새로운 요리를 만드는 거죠. 이렇게 하면 맛의 다양성을 높이고 더 많은 사람들에게 맞춤형 요리를 제공할 수 있어요.
이와 같이 언더샘플링과 오버샘플링은 데이터의 비율을 조정하기 위해 재료를 조절하는 요리의 방법에 비유할 수 있습니다.
ML flow
데이터 전처리 -> 모델 학습 스코어 증
- (Required) EDA
- Data Preprocess
- train test data split
- (Required) Data cleaning
- null 값 제거
- (Optional) Feature 추가
- 통계 & 각 컬럼별 조합 & 테스트 일부 데이터 추출
- (Optional) 차원 축소
- 데이터가 sparse할 때 고려
- 범주형 data
- 범주형 데이터간의 상관 관계가 높은 변수만 적용
- (Optional) Scaling
- feature 값의 크기가 차이가 많이 날 때
- 수치형 data
- (Required) Data Encoding
- 범주형 > 수치형 데이터
- (Optional) imbalnce data
- resampling
- Do it at the end of process
- Modeling
- Model selection (Regression or Classification)
- (Required) Cross Validation (for all modeling)
- Increase model score
- No need to do train-test-data split
- Base Model
- Ensemble Model (Light GBM)
- HPO x
- Feature importance => Data preprocess
- Trial 1
- Data Preprocessing considering feature importance from base model
- HPO x
- continue until overfitting
- Trial 2
- Try all Ensemble model to train
- HPO x
- Select best models
- Trial 3
- HPO on best models
- Extract HP highly related to model score
- Select one or two best models
- Trial 4 (Bayesian Search)
- HPO with HP from Random Search
- Select the best model
- Submission
- (Optional) Thresholds
https://colab.research.google.com/drive/148aVR9wtPZMyFu-usagcnJSCp_KcL05i#scrollTo=QXc7dVOGV1pi
Google Colab Notebook
Run, share, and edit Python notebooks
colab.research.google.com
Cross Validation
Cross-validation(교차 검증)은 모델의 일반화 성능을 평가하기 위한 기법입니다. 주로 과적합(overfitting)을 피하고, 모델의 신뢰성을 향상시키기 위해 사용됩니다. 교차 검증의 일반적인 과정과 방법은 다음과 같습니다:
1. 기본 개념
- 데이터를 여러 개의 서브셋으로 나누어, 하나의 서브셋을 테스트 세트로 사용하고 나머지를 훈련 세트로 사용하는 방식입니다.
- 이 과정을 반복하면서 모델의 성능을 여러 번 평가하여 평균 성능을 산출합니다.
2. 일반적인 방식
K-fold Cross-Validation
- K-fold Cross-Validation은 데이터셋을 K개의 서로 겹치지 않는 부분으로 나누는 방식입니다.
- 과정:
- 데이터를 K개로 분할합니다.
- K번 반복하면서 각 번에 대해 한 개의 부분(K번째)을 테스트 세트로 사용하고, 나머지 K-1 개의 부분을 훈련 세트로 사용합니다.
- 각 반복에서 모델 성능을 측정하고, K번의 성능 평가 결과의 평균을 계산하여 최종 성능을 얻습니다.
- 날짜형 데이터 같은 건 쓰지말아야 한다.
Stratified K-fold Cross-Validation
- 클래스 불균형을 고려한 K-fold 방식입니다. 각 fold가 전체 데이터셋의 클래스 비율을 유지하도록 데이터를 분할합니다.
- 이는 특히 범주형 데이터에 유용하여, 각 클래스가 모두 충분히 대표될 수 있도록 합니다.
'개발공부 > SK Networks Family AI bootcamp 강의노트' 카테고리의 다른 글
20일차 [ 비지도 학습 (데이터 차원 축소 및 행렬 분해) ] (0) | 2025.02.12 |
---|---|
19일차 [ 다중분류 / 앙상블 / HPO ] (0) | 2025.02.11 |
18일차 [ 지도 학습 ] (0) | 2025.02.10 |
[플레이데이터 SK네트웍스 Family AI캠프 10기] 2월 1주차 회고 (0) | 2025.02.10 |
17일차 [data encoding, scaling] (0) | 2025.02.07 |