KaggleUXLog

:beginner: :shipit:

This project is maintained by LegenDad

TalkingData AdTracking Fraud Detection Challenge - Part2



Part1은 LB Score 0.96대 진입까지의 경험이었고,
Part2는 0.97~0.979 점수로 모델 성능 개선 및 대회 마무리까지의 경험기이다.


성능 개선 실패의 경험


0.97대 진입을 만들어 준 파생변수 : NextClick

Model
Size
Valid AUC
LB Score
LGBM with Categorical Features 1천만 0.92 0.96
LGBM with NextClick 1천만 0.97 0.9715
LGBM with NextClick 5천만 0.97 0.9765
LGBM with NextClick ALL 0.97 0.9735

이렇게 성능 향상을 유도한 변수지만, 만들기가 쉽지 않았다.
python을 활용한 경우는 커널에 정보가 있었지만, R은 없어서 직접 만들어 보았는데…
train_sample 데이터로 해당 변수 생성하고 모델링까지의 과정이
기존 코드로 3분이면 끝나는 과정이 30분이 걸렸다.
그래도 일단 해본다는 마음으로 train 데이터에 적용했지만,
오랜 시간을 기다려도 변수 생성이 되지 않았다.
이틀을 더 시도했지만, 결과는 마찬가지…

포기할 수 는 없어서,
Kaggle Discusion에 질문을 남겨보았다.

 tdiff <- function(tdiff) {
  vc <- NULL
  for (x in 1:length(tdiff)) {
    interval <- interval(tdiff[x], tdiff[x+1])
    diffsecond <- as.integer(seconds(interval))
    vc <- append(vc, diffsecond)
  }
  vc <- ifelse(is.na(vc), 0, vc)
  vc <- append(vc, 0)
  return(vc)
}

위 코드 보여주고, 도움을 기다렸다.

그 결과 1시간 이내로 문제점을 해결할 수 있는, 댓글들이 달렸다.
답을 주신 분들이 고마워서 약간 소개글을 남겨본다.

이렇게 NextClick 변수 활용에 성공했고,
만드는 법을 익혔으니 PrevClick 까지 활용을 하게 되었다.

Model
Size
Valid AUC
LB Score
LGBM with NextClick 1천만 0.97 0.9715
LGBM with NextClick 5천만 0.98 0.9765
LGBM with NextClick ALL 0.98 0.9735
LGBM with Next_Prev_Click 1천만 0.97 0.9709
LGBM with Next_Prev_Click 5천만 0.98 0.9768
LGBM with Next_Prev_Click ALL 0.98 0.9735

아주 약간의 상승을 보여줬다.


0.9768에서 0.98로 턱걸이 : All Data의 과적합 해결하기


위 테이블 보면 알겠지만, 5천만을 샘플로 훈련했을 때 결과가 제일 좋았고,

오히려 전체 훈련데이터를 사용하면 overfitting으로 score가 하락했다.

해결법은 정말 간단했다.
기존에는 train, test 별도로 파생변수 생성을 진행했지만,
생각해보면 이렇게 만들면 test에서 만들어지는 파생변수들이
train 변수들과의 흐름이 끊어지고 새로 만들어지게 된다.
파생변수 만드는 과정 이전에 train, test를 하나로 병합해서 진행하면,
변수들의 흐름이 유지되고, 코드를 줄일 수 있게 된다.

Code Here

Model
Size
Valid AUC
LB Score
LGBM with NextClick 5천만 0.98 0.9765
LGBM with NextClick ALL 0.98 0.9735
LGBM with Next_Prev_Click 5천만 0.98 0.9768
LGBM with Next_Prev_Click ALL 0.98 0.9735
LGBM with TR_Te_ALL 5천만 0.98 0.9777
LGBM with TR_Te_ALL ALL 0.98 0.9789

대회 마무리

이렇게 만든 점수를 최종으로 0.98 턱걸이를 하였으나,
마감 3시간 전, 갑자기 300등~350등 정도 등수 하락이 발생
노력의 결과가 급하락하였고, 원치 않은 상황이지만 등수 복귀를 시도…
결과는 Bronze Medal 확보로 마무리되었다.