하하.. (감사하게도 팀장님께서 부여한) 연이은 휴가도 있었고, 딱히 회고를 하지 않았다.
======================
1. 커스텀 Loss Func 로 효과를 봤다. 특이한 점은 AUC 자체는 큰 변화가 없는데, precision, recall 값이 큰 차이를 보였다. 즉, 모델의 bias가 변했다는 것이다.
예를 들자면, 임밸런스한 데이터셋으로 학습을 하면, 99%가 정상 유저고 1%가 비정상 유저라면, 모델은 새로운 데이터에 대해서 정상 유저라고 판단할 경향이 높다. 왜냐하면 정상이라고 찍으면 99%가 정답이니까.
그런데 커스텀 로쓰로 이러한 판단에 대해서 더 큰 페널티를 준다면
( ex. Focal Loss, or Confusion Matrix 에 따라서 penalty에 차등을 줌 ) 이러한 경향성을 줄일 수 있다.
이때까지 총 4개의 Custom Loss Function 을 확인했는데
초기 버전인 v1, v2 는
v1 : 너무 작은 페널티를 줘서 경향성이 변하지 않았다.
v2 : 페널티에 대해서 약간의 추가 페널티 ( 10% ) 를 부여했지만, 정답에 가까운 경우 더더욱 적은 페널티를 부여하도록 ( 1-p ) or ( p ) 를 곱해서 부여했다. 이렇게 했더니 확실히 경향성이 변한 것을 확인할 수 있었다.
v3, v4 도 v2 에서 약간씩 변형을 줘서 학습중이다.
2. 직접 Custom Loss Func 을 적용하며 새롭게 느낀 점 : Custom Loss Func 에 분기점이 늘어날수록 그와 비례해서 학습 시간이 오래 걸린다.
3. 아직까지 완벽한 성능에 도달하지 못했다. 이른바 Qunatum 점프를 못했다.... 상당히 아쉽다.
======================
이러한 커스텀을 응용하면
1. 실질적인 회사 손해를 고려한 Loss Function 까지 설계 가능할 것으로 보인다.
2. AUC 까지 증가시키는 방법이 없을까? 한마디로 완벽한 성능을 어떻게 해야 찾을 수 있을까?
3. TabNet 을 응용해보면 더 좋지 않을까? 지금 까지의 결과는 Catboost 의 결과이다. 솔직히 AUC 85~90 의 성능정도는 이루고 싶다.
======================
08/23 추가 :
Custom Loss Function을 썼더니, 기존의 Fraud를 과소 추정하는 경향이 사라지고 오히려 과대 추정하는 경향이 생긴건 아닌가 하는 결과가 나왔다.