우리아이 영양 간식

공개된 블로그지만, 아무도 보지 않았으면 하는 블로그

카테고리 없음

2021-07-28 3일차 회고

iam_sw_ 2021. 7. 29. 07:30

깜빡하고 2일차 회고에 빠트린 내용이 있다.

 

예전에는 예측 모델로 GLM (그중에서도 다중(다변량) 선형 회귀)을 썼었고, 통계 모델(포아송 분포, 감마분포)를 썼었는데,

 

이젠 머신러닝을 사용한다. 

 

왜냐? 우선 통계 모델은 근간이 미래에 일어나는 이벤트가 `특정한 분포를 따를것이라고 가정`하고 예측하는데, 실제론 대부분 그렇지 않더라. 는 것이다.

 

이젠 머신러닝으로 목적에 맞는 error를 줄이는 학습을 해서 얻은 모델로 예측을 하는데 훨씬 더 잘 맞는다. 

 

======

 

 

 

오늘 처음으로 ML 서버 할당 받았다.

 

Jupyter Notebook ( Jupyter Hub, Jupyter Lab ) 환경에서 개발을 할 듯 하다.

 

Colab 에서 개발을 하곤 했는데, (사실 대부분 비슷하지만) 우선 가장 큰 차이로

1. 실시간 CPU 사용량 모니터링

2. 실시간 Memory 사용량 모니터링

기능이 안되서 답답하다.

 

추가 Extension 기능이 있으면 좋겠는데, 좀 찾아봐야 겠다.

 

차주부터 본 업무(?)를 들어가게 되는데, 우선 가장 먼저 생각중인건,

 

1. Train, Valid, Test 셋 나누는 문제

- 가장 먼저 Test 셋의 경우 최근 n일 혹은 n주 정도가 되지 않을까 싶다.

- Train, Valid 분리의 경우 일반적인 Stratified K Fold 를 가장 먼저 시도하지 않을까 싶다.

그런데 내가 걱정하는게 있다. Fold 별 Feature 분포가 일정한지

( 일종의 Group K fold 처럼 균일한 분포가 이상적이라고 생각하기 때문에 )

Train&Valid VS Test 데이터 간 Feature 분포가 비슷한지

( 테스트의 경우 주어진 데이터 가운데 최근 n일 이므로 Seasonality로 인하여 데이터 분포가 다르고 이로 인하여 예측력이 떨어지질 수도 있는 잠재적인 Risk가 존재한다. )

- 예를 들어 10개 Fold를 구성했을때, Stratified K Fold 와 앞선 Fold + 그룹핑까지 가미하여 피쳐의 더 균일한 분배가 된 Fold 를 비교해야 하는데,

비교 척도로 Fold별 Feature간 KL Divergence 를 구해봐야 하려나 고민이다.

앗, 조금 찾아보니 카이스퀘어 검증을 하면 된다고 한다.

( 특정 변수가 목적 변수에 독립인지 아닌지만 판별하는지 알았는데, 목적에 따라 다르게 사용할 수 있다고 한다. )

https://bioinformaticsandme.tistory.com/139

참고자료) [NDC] 어머님, A/B 테스트를 댁으로 들이십시오 - 〈DevPlay〉 A/B 테스트 플랫폼 개발기 https://www.youtube.com/watch?v=iN-pQXQRzjI

 

 

 

2. 모델의 Robust 강화

- 이 경우, Train & Valid 데이터 셋(의 수치형 데이터)에 대해서 정규분포를 따르는 (random seed에 따라 달라지는) 랜덤 노이즈를 추가할 생각이다.

 

3. Custom Loss Func

- 기본적인 Loss Func 적용을 해보고 더 나아가서

- 목적변수 값이 1인 데이터를 오분류 했을때 더 큰 penality를 주는 Custom Loss Func

- 혹은 Focal Loss를 적용해볼 생각이다.

 

4. ( 중요 ) H2O 에서 Optuna 와 같은 하이퍼 파라미터 튜닝 라이브러리가 적용될 것인지가 가장 가장 관건일 것 같다.

 

5. 기본적으로 모델은 GBM, XGB, LGBM 모델 3개를 쓸 것 같다. 

- 모델별로 10개 K fold 간 Criteria의 Mean, Std 를 계산해서 A/B 테스트를 통해 유의미한 성능 개선이 있는지가 중요할 것이다.