- Feature Matrix와 Target Vector 와의 상관 관계가 낮을 때, 타개 방법은? 1. 데이터 추가(결합) 2. 우회(대안 데이터 찾기) => 사람이 개입할 수 있는 부분이니까 능력을 키우자!!
< 하이퍼 파라미터 튜닝 (Optuna) >
- 분포에서 랜덤하게 값을 뽑는게 아니라 (min, max)를 주어서 알고리즘(TPE 등)으로 탐색하는 것.
- 더 스마트한 접근 : 베이지안 최적화(Bayesian Optimization)
- 핵심 아이디어 : 과거 평가 결과(prior information)를 활용하여 아직 평가되지 않은 하이퍼 파라미터 조합의 성능을 확률적으로 추정하고, 가장 유망한 지점을 다음 탐색 대상으로 선택하는 방식. P(B|A)
- Optuna 순서
1. 목적함수 정의 : Optuna가 해야할 일(Todo-list)들을 정의해놓은 함수.
2. Study 객체 생성 : 어떤 알고리즘으로 탐색할 지 정해줌.
3. 최적화 실행 : 하이퍼 파라미터 탐색. 튜닝을 반복 진행(Study 객체 실행)
- Callback Function : 일반 함수는 사용자가 호출해서 사용해야 하지만 Callback Function은 사용자가 정의해놓은 함수를 optuna가 알아서 호출하여 사용하는 방식
- Optuna의 효율적인 탐색 전략 : Sampling & Pruning
- Sampling(어디서 탐색할 것인가?) : TPE 알고리즘을 이용
- Pruning(언제 멈출 것인가?) : Early stopping 과 관련
📌 가변 키워드 인자(Kwargs) 혹은 키워드 언패킹(Unpacking) "**"
** : 딕셔너리에 담긴 하이퍼 파라미터 키-값(key-value) 쌍을 함수/클래스의 인자(keyword Arguments)로 풀어서 전달할 때 쓰임.
=> 쉽게 비유하자면, ** 는 "선물 상자의 포장지를 풀어서 안에 내용을 한꺼번에 던져주는 역할"을 함.
예시 :
1. 일반적인 방식 : 함수에 값을 전달할 때, 원래는 하나씩 이름을 지정해서 적어줘야 함.
# 일일이 입력하기
model = XGBClassifier(n_estimators=100, max_depth=5, learning_rate=0.01)
2. **(Unpacking) 방식 : 변수들을 딕셔너리({키:값}) 형태로 포장해두고, 함수를 부를 때 **params라고 쓰면 파이썬이 알아서 딕셔너리를 풀어 포장지 안의 내용물을 위 모양처럼 변환함.
# 1. 딕셔너리에 설정값을 담아줌(포장하기)
params = {
'n_estimators' : 100,
'max_depth' : 5,
'learning_rate' : 0.01
}
# 2. **를 붙여서 넘겨줌(포장풀기)
model = XGBClassifier(**params)
=> Optuna처럼 수십 가지의 하이퍼 파라미터 조합을 계속 만들어서 모델에 전달해야 할 때, 매번 긴 인자들을 일일이 타이핑하지 않고 params라는 딕셔너리로 깔끔하게 묶어서 관리!!
다시 한 번 Optuna 순서를 보면..
1. 목적함수 정의(규약준수)
- 호출할 때, 해줘야 할 것들 : ① 목적함수 호출(지정) ② trial 횟수(탐색 횟수 지정) ③ show_progress_bar(진행률)
2. Study 객체 생성
① maximize or minimize 설정 : 분류모델에서는 accuracy 는 값이 클수록 좋으니까 maximize 회귀모델은 minimize로 설정!!
② Sampler 정해주기 : TPESampler, CmaEsSampler, 등
< 설명 가능한 AI (SHAP) >
- 초기 머신러닝, 딥러닝 모델의 예측결과는 설명이 불가능했음. >> '블랙박스' 문제 대두 -> 2020년 쯤부터 '설명 가능한 AI'가 화두!
- 설명 가능성의 중요성 : 신뢰, 디버깅, 규제준수, 공정성
- 빠르고 민첩한 '정찰병 : LIME' vs 깊고 일관된 '현자 : SHAP' >> 주로 SHAP 사용!!
- LIME : 직관적이긴 하지만 국소적인 부분만 관찰함.
- SHAP : 핵심 => Shapley Value 게임 이론(논공행상)에 기반하여 각 특성에 '한계 기여도'를 계산함. 즉, 목표를 달성하는데 기여도가 높은 특성을 수치적으로 표현한 것이 Shapley Value
- Importance, Weight : 학습 과정 중 평가 / Shapley Value : 학습 과정 완료 후, 예측 단계에서 평가
- SHAP은 다양한 모델에 적용가능하고 버드뷰 시각을 제공함
- TreeSHAP(TreeExplainer)
- 대상 : 트리 기반 모델(RandomForest, XGBoost, LightGBM 등)
- DeepSHAP(DeepExplainer)
- 대상 : 딥러닝 모델
- KernelSHAP(KernelExplainer)
- 대상 : SMV
- TreeSHAP(TreeExplainer)
- 버드뷰를 제공한다는 의미는, 모델 전체가 변수들을 어떻게 바라보고 활용하는지 한눈에 굽어보는 시각을 제공.
- Force Plot을 보고 이해하자!!
- Force Plot : 특정 단일 샘플(데이터 1개)에 대해 각 특성(Feature)들이 예측값을 기본값(Base Value)에서 얼마나, 어떤 방향으로 밀어붙였는지(Force)를 시각화하는 SHAP의 대표적인 개별(Local) 시각화 도구임.