분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
[DACON 답변요청] 본 팀이 실격된 이유를 설명해주시기 바랍니다
안녕하세요.
전 Kavengers라는 팀명으로 본 대회에 참가했던 김경환이라고 합니다.
어제 오후 경 데이콘 측으로부터 본 대회 입상권 팀 중 코드 평가 대상에서 제외되었다는 전달을받았습니다.
이에 대한 공식적인 설명을 듣기 위해 글을 쓰게 되었습니다.
본 팀은 public과 private 테스트 셋 모두에서 1등의 성적을 기록했습니다.
대회 규칙에 명시된 바와 같이 외부 데이터를 사용하지 않았고, 가계정 이용등 부정적인 방법을 전혀 사용하지 않았음을 먼저 말씀드립니다..
문제는 코드를 검토하는 과정에서 발생했습니다.
본 팀은 2일 전 데이콘으로부터 제출한 코드에 문제가 있다는 전화를 받았습니다.
데이콘 측이 지적 한 문제는 두 가지였습니다.
"""
(1) 본 팀이 사용했던 코드의 glob라는 함수가 리눅스에는 작동되지 않는다.
(2) 새로운 Test-set에 대한 예측 코드를 실행해야 하는 get_prediction이라는 함수에 test_folder_path라는 인자를 사용하지 않았다.
"""
라는 이유였습니다.
(1)번 사항은 저와 제 팀원의 원도우 환경에서 본 함수가 아무 문제 없이 작동하였지만, 데이콘 측은 자신들의 환경이 리눅스 이기에 특정 라인이 실행되지 않는다고 했습니다. 따라서, 리눅스 환경에서 본 코드를 시행해야하니 수정하여 보내라했고, 이 부분이 본 팀의 잘못이라 생각하진 않습니다. 특정 환경에서 검토를 진행하야 하니, 본 환경을 구축함에 이상이 없게 준비를 해달라는 명시는 사전에 공시되지 않았습니다.
(2)번 사항에 대해서, 본 팀은 최종 파일을 제출 할 때 test_folder_path라는 인자 없이도 결과물 재생산이 가능하게 구현하여 문제가 없다고 생각했습니다. 이 점은 제출 규범을 지키지 못한 점이기에 본 팀의 잘못임을 인지하고 해당 부분을 수정하여 그날 바로 최종본을 데이콘 측에 재전달을 하였습니다.
재전송하고 2일이 지난 오늘 오후, 데이콘은 다시 제출한 코드에 대해 실행이 불가능하단 이유로
내부 회의를 통해 본 팀의 코드 검토를 하지 않겠다고 전해왔습니다. 이와 더불어 모델의 가중치 파일이 누락되어서 예측 코드를 돌릴 수 없다 전했습니다. 하지만 제출한 코드를 순서대로 실행시킨다면 모델이 자동으로 생성되어 학습을 진행하고 예측파일을 만들며, 더욱이 데이콘의 제출 양식을 보면 모델 파일을 제출하란 언급은 그 어디에도 없습니다.
본 팀은 새로운 피쳐를 만드는 과정에서 (1) 칼럼들의 값이 완벽히 중복된 경우(ex column A와 column B의 값이 완벽하게 일치), 뒤에 등장하는 칼럼을 제거 한 후, (2)train과 test를 합친 테이블에 남아있는 모든 칼럼에 대하여 frequency encoding을 적용하여 피쳐를 만드는 작업을 수행하였습니다.
이번 대회의 평가처럼 각기 다른 Test 셋이 60초로 구성되어있지 않고, 달리 30초, 40초 등과 같이 변한다면 자연스레 frequency encoding을 통해 생성되는 칼럼의 값이 변하게 됩니다. 이로 인해 30, 40 ,50 60초 마다 학습, 예측에 사용되는 데이터의 값이 변하며, 당연히 각기 다른 데이터셋은 각각 새로운 모델로 학습이 진행되여야 합니다. 따라서 최종 전달 코드에는 모델을 전혀 첨부하지 않았고, 위에 서술한 내용이 평가에 문제가될 사항 아니라고 생각합니다.
본 팀은 최종 제출 전, 제출하려는 코드를 대회 내내 작업한 윈도우 환경에서 실행시켰보았고, 아무 문제없이 작동하는 것을 확인했습니다. 본 팀원들의 환경에서 재생산되는 코드를 새로운 리눅스 환경에서 작동되지 않는다는 이유로 수상 자격을 박탈해버리는 처우는 도무지 이해할 수 없습니다.
아래는 window에서 본 팀이 세팅한 환경이며 2020년 2월 20일 목요일 밤, 다시 돌려보아도 그 어떤 문제가 발생하지 않았습니다. 수번을 재생산해도 이상이 없는 코드가 왜 데이콘 측에 전달하고 나서 오류가 발생하는 코드가 되어버렸는지 이해할 수가 없고 납득이 가지 않습니다.
“
python 3.7.3
pandas : 0.24.2
numpy : 1.16.4
joblib: 0.13.2
tqdm : 4.32.1
scikit-learn : 0.22.1
lightgbm : 2.2.3
“
이후 데이콘 측은 본 팀이 2020년 2월 18일 화요일 제출한 코드에 대해서 아래와 같은 답변을 보내왔습니다.
납득할 수 없는 부분은 아래와 같습니다.
본 대회를 포함하여 과거 여러 번에 대회에서 치팅으로 얼룩진 대회를 보고도, 대회 중간중간에 갑작스럽게 평가방식이나 룰이 바뀌는 경우에도 지속적으로 발전하는 플랫폼이라 생각하며 참가했었고 응원했었습니다.
하지만 일방적인 소통방식이나 데이터에 대한 최소한의 설명도 없는 대회들이 계속 나오면서 실력을 키우기 위한 인원이나 수상을 위해 참가하는 인원들 모두에게 좋은 플랫폼은 아니라고 생각하게 됩니다.
본 팀의 코드를 다시 한번 검토해 주시고 어떤 부분이 잘못되어 실격이 되었는지 밝혀주시길 바랍니다.
검토 하시는 과정 중에서 본 팀의 접근 방식이나 코드에 추가적인 설명이 필요하다면 적극 협조하도록 하겠습니다.
답변 기다리고 있겠습니다.
안녕하세요
저희는 private 리더보드 2위에 랭크한 생물학적 수처리팀입니다.
글을 읽어보니, 저희팀의 실격 사유와 kavengers팀의 실격사유가 동일합니다. 본문의 2,3,4번의 사유입니다.
저희도 중복변수를 제거하고, 여러 변수들에 대해 frequency encoding을 진행하였습니다
새로운 test 데이터로 위의 preprocessing 과정을 거칠 시, 변수의 조합이 변하게 될 것입니다.
이에 코드 검토를 다시 한번 요청드립니다
혹시 필요하신 자료 혹은 설명이 있으시다면, 저희도 적극 협조하도록 하겠습니다.
너무 내용이 방대하여 다 읽지는 못하였는데..
내부평가기간에도 다시 제출 할 수 있게 한것은 형평성에 맞지 않는것 같습니다..
제출기간이 있고 평가기간이 정해져있는데 왜 다시 제출을 허용한 것인지 이해가 안됩니다..
"(2) 새로운 Test-set에 대한 예측 코드를 실행해야 하는 get_prediction이라는 함수에 test_folder_path라는 인자를 사용하지 않았다."
그리고 이 부분은 명백한 탈락사유이니 탈락이 맞는것 아닌가요..? 왜 다시 수정하여 다시 제출할 수 있게 한것인지 이해가 안됩니다...
마지막으로 전처리 방식의 문제로 데이터의 주어지는 "시간(30초,60초 등)"에따라 predict할때 모델을 재학습 시키다는 내용으로 저는 이해를 했는데...
최종평가에서는 60초가 아니라 다양한시간(30초,40초 등)이 주어 질 수 있다고 사전에 공지가 되었기때문에 이에 맞게 모델을 구축해야 했다고 생각이 듭니다..
최종제출파일의 양식에도 model을 load하여 predict를 하고 있지 재학습을 하고 있지는 않습니다. 즉, 양식을 지키지 않은것 아닌가요?
그리고 predict라는것은 학습을 시키는것이 아니라.. 예측을 하는것인데.. 예측하려 할때마다.. 다시 학습을 시켜야 된다면 모델의 정합성은 어떻게 검증 할것이며
과연 사용할 수 있는 모델이 맞을런지.. 의문이 듭니다... 스폰서분들에게도 의견을 구해야 할 상황이라 생각이 드네요..
삭제된 댓글입니다
어제로 내부평가가 종료되어 최종평가 결과가 나올 거라 생각되어 들어와 봤는데.. 최종평가 결과도 나오지 않고..
이슈들이 발생하고 있는것 같아 안타깝습니다..
최종평가 시에 다양한 시간이 주어진다는 것은 충분히 인지했었습니다. 피쳐 생성 부분을 살펴봐주시면, 제공되는 데이터셋에 따라 생성되는 피쳐들이 달라지게 작업을 진행했습니다. 피쳐들에 담겨 있는 값 또한 마찬가지입니다. 즉, 새로운 Test-set이 사용된다면 기존의 Train-set과 더불어 전처리와 피쳐엔지니어링을 진행하고 모델학습이 진행되는 식입니다
해당 사항을 염두하여, 데이터 셋의 시간이 어떻게 구성되더라도(30초, 34초, 49초, 54초 등) 이상이 없는 모델을 구축하였습니다. 정리하자면, 전처리, 모델 학습, 예측파일 생성에 문제가 없도록 하였습니다.
예시 파일을 살펴보면 최종제출파일에는 (1) 훈련코드, (2) 예측코드가 들어가 있어야 합니다. 이와 같은 구조로 훈련코드에서 모델 학습 후 weight를 저장하고, 예측코드에서 해당 weight를 불러와 결과물을 예측하도록 코드를 작성했습니다.
모델의 정합성 부분은 제시된 Train-set과 더불어 기존에 제공된 60초의 Test-set을 통해 전처리 및 피쳐엔지니어링을 진행한 후, 모델 학습, 예측을 했을 시 재현가능한 제출파일을 만들 수 있다면 문제가 없다고 생각합니다.
다양한시간의 데이터가 주어진다면 다양한 시간을 수용할 수 있는 모델을 구축하여야 되는것이 맞는 것이지요
다양한 시간 각각의 모델을 구축하는것은,
어느 시간이 나올지 알 수 없는 데이터 상황에서, 실제 예측하는 시점에 다시 학습을 하고 예측을 한다는 것은 맞지 않다고 봅니다.
학습시간이 얼마나 걸리는지는 모르겠으나,
실제상황에서는 예측하려는 데이터는 학습을 하는데 걸린 시간만큼 이미 시간이 지나버렸기 때문에,
상태변화를 예측한다는 것은 의미가 없어 질 것이기 때문입니다.
그리고 다시 말씀 드리듯이 아래의 사유는 명백한 탈락 사유 입니다.
"(2) 새로운 Test-set에 대한 예측 코드를 실행해야 하는 get_prediction이라는 함수에 test_folder_path라는 인자를 사용하지 않았다."
내부평가기간에 코드가 잘못되어었다고 수정을 하여 다시 제출하는것은
공정함에 전혀 맞지 않는 것이라고 생각합니다.
또한, (1번 사유)인 데이터가 1개인 경우가 명시 안되었다고 했는데, 명시가 안되었다면 당연히 1개인 경우도 감안해야 하지요.
1개 일 수 있다고 명시를 안했으니, 데이터 2개이상만 가능하다는 것은 어불 성설 입니다.
이 사유도 명백한 탈락 사유 입니다.
그리고 (4번 사유)인 리더보드 점수의 복원을 train을 통해 학습부터 시키면 복원을 할 수 있다고 하였는데, 이 또한 말이 되지 않습니다.
평가기간에 평가를 하는 것이지 다시 모델을 학습시켜 평가를 진행하는것이 아니라고 생각합니다.
모델학습에는 본문에서도 말했듯이 서버셋팅 등 각종 다양한 원인이 존재하게 되며,
이를 평가자가 다시 학습을 시켜야하고 다양한 원인으로 학습이 잘안되면 제출자에게 질의를 하는방식은
모든 제출자의 환경을 맞춰서 평가자가 학습을 시켜야 되는데 이는 불가능하기 때문입니다.
그래서 모델의 가중치값을 함께 제출하여 리더점수를 복원하는 것이지요.
또한, 모델을 학습하는 경우 오랜시간이 걸릴 수 있고 평가기간동안 학습을 다 시키지 못 할 수도 있습니다.
즉, 글쓴이의 주장은 평가자에게 코드를 주고 리더보드점수를 복원할 때 까지 잘 학습을 시켜보라는것과 같다고 생각합니다.
게다가 다양한 원인들로 재학습을 시켜도 리더보드점수 복원이 안되는 상황에서,
제출자가 환경셋팅이든 뭐든 안맞아서 그렇다고 계속해서 주장하면 어떻게 평가가 될 수 있을까요?
본문의 글쓴이 분 께서는 본인의 코드는 전혀 그렇지 않다고 말할 수 있겠지만,
평가에 있어서는 공정해야하기 때문에 다양한 경우를 고려하여 모든 제출자에게 동일한 평가를 진행해야 하기 때문입니다.
그리고 최종평가데이터의 시간을 보고 다시 학습을 시켜서 예측을 한다고 하였는데, 이 또한 공정함에 크게 어긋나는 행위입니다.
다른 제출자들은 실제 최종평가데이터의 시간이 어떻게 될지 모르는 상황에서 모든 시간을 수용할 수 있는 모델을 구축하였는데,
본글의 작성자 처럼 실제 최종평가데이터의 주어진 시간을 보고 재학습을시켜서 예측을 한다면 당연히 그 시간에 더 적합한 모델이 나올 것이며,
다른 제출자들은 알 수 없는 최종평가데이터의 주어진 시간이라는 정보를 추가로 얻게 되는것이기 때문입니다.
저는 이 대회는 참여하지 않았지만, 캐글과 데이콘 및 다양한 대회를 나간 경험으로 말씀드리면 대부분의 대회는 모델의 가중치가 아니라 제출한 코드가 점수가 복원이 되는지 아닌지를 확인하는게 맞습니다. 말씀하신대로 모델의 가중치 값을 함께 제출하는 것은 의미가 없는게, 실제로 코드를 돌렸는데 모델의 가중치 값이 나오지 않으면 리더보드 점수가 복원이 되지 않을것이고 그것은 그 나름대로 실격사유가 되기 때문입니다.
즉, 모델의 가중치 파일을 제출하지 않아도 코드가 돌아가서 제출한 submission파일과 점수가 같으면 문제가 되지 않는 것이죠
그리고 모든 제출자의 환경에 맞춰서 평가자가 학습 시키는게 불가능하다고 하셨는데, 그렇게 생각하면 대회의 코드를 받아서 검증하고 평가하는 이유가 전혀 없습니다. 애초에 코드 검증이 불가능한데 뭐하러 코드를 받고 검증을 합니까? 그리고 test_folder_path같이 path같은 경우나 환경 세팅같은 경우 모델의 점수에 영향을 주지 않는 부분은 다른 대회에서도 대부분 큰 문제로 보지않는 것같습니다.
예를들어, 빅콘테스트2018에서도 그랬고 COMPAS 김해시 화재 예측대회나 카카오 아레나 2차 브런치 글 추천대회 또한 코드를 검증하면서 비슷한 부분들이 있었습니다
그리고 캐글같은 다른 대회를 보면 code를 제출해서 순위를 겨루는 code competition이 있는데, 대부분의 캐글러들은 숨겨진 데이터를 잘 맞추기위해서 데이터에 따라 달라지는 부분을 고려해서 모델을 만듭니다. 위에서 말한 frequency encoding과 같은 부분인 것이죠. 그렇기에 Hwan님이 언급해주신 모든 부분들은 문제될 것이 없다고 생각합니다.
위의 상황들은 데이콘 측이 알아서 잘 판단할 문제이지만, 개인적인 생각으로는 위의 상황만 봐서는 모델의 가중치 파일을 제출하지 않아도 모델이 동일한 스코어를 내면 상관이 없어보이고 데이콘의 서버 세팅같은 문제는 대회 참여자가 고려할 상황은 아니라고 생각합니다.
일단 모델을 재학습시킨다는 부분 부터가 평가에 맞지 않는것이라는 것이죠,
코드를 제출하는것은 코드를 검증하기 위한 용도이고 평가는 평가를 위한 것입니다.
코드의 전처리와 같은 예외케이스의 검증과 같은 부분은 코드를 통해서 확인하면 되는 것이죠.
학습시간은 모든 제출자가 다를 수 있는 부분이고, 평가기간동안에도 재학습이 안된다면 어떻게 평가를 할수있을 것인가요?
이에 대해 공정함을 요구 하는 것입니다.
또한, 제가 다시 말씀드리듯이 명백한 탈락사유인 test_folder_path 같은 경우는 당연히 지켜져야 합니다.
코드를 제출할때 이를 지키지않으면 평가가 되지 않는다고 하였는데 이를 지키지 않는것은 공정함에 어긋나는 것이지요.
아무리 사소한 것이라도 공식적으로 운영대회는 평가에서는 예외를 두어서는 안될 것입니다.
그리고 다양한 시간이 주어 질 수 있는 상황에서,
글쓴이와 같이 실제 평가시에 주어지는 평가데이터의 시간에 맞게 재학습이 된다면,
모든 시간에 맞게 학습을 시켜 모델 가중치를 같이 제출한 참가자에게는 불이익이 가는것일 것입니다.
이 또한 공정하지 않는 것이지요.
다른 참가자들도 사소하다는 이유로 하나하나씩 이의를 제기한다면 주최즉은 평가를 할 수 없을 것입니다.
그리고 내부평가기간 종료일인 2.21로 하여 어떠한 사유로든 평가가 이루어지지 않았다면
당연히 최종평가대상에서 제외 되어야 할 것입니다.
그리고 TEAM-EDA(김현우)분께서는 참가자가 재학습을 위한 서버셋팅은 제가 고려할 상황이아니라고 하셨는데
본글의 글쓴이 부분도 데이콘의 주최즉에 탈락사유에 반박하는 글을 쓴것이고
TEAM-EDA(김현우)씨의 말대로라면 글쓴이도 데이콘의 주최측에 의견에 무조건 따라야 하겠죠.
2.21일로 내부평가기간이 종료되고 나와야함에도,
당연히 탈락하여야할 사유들과
공정함에 맞지않는 최종평가대상 데이터의 시간에 따른 재학습과 같은 사유로
최종결과가 미뤄지고 있는 상황이 이해가 되지않기에 참가자로써 글쓴이의 주장에 반박을 하는 것입니다.
글쓴이 요구사항으로 다른 참가자들이 오히려 불이익을 받는 상황은 절대 생기지 말아야 할것입니다.
또한, 이러한 이슈들로 인해 최종평가가 미뤄지고 있는 상황도 다른 참가자들에게 불이익을 주고 있다고 저는 생각합니다.
개인적으로 궁금한게 test_folder_path가 도대체 왜 실격사유로 생각하는 지가 궁금합니다. path 붙은거로 봐서는 파일이 저장되는 위치이거나 불러오는 위치 설정한거로 생각되는데 이게 달라진다고 결과가 달라지는 건지 도저히 이해할 수가 없습니다.
평가기간내에 안된다고 실격이라는데, 스태킹을 적용하는 사람들은 모델 1000개여도 만들어서 제출하는데 주최측에서 시간내에 못돌린다고 실격이라고 하면 누가 납득을 하겠습니까? 그리고 이러한 부분이 문제가 되면 애초에 데이콘 측에서 모델의 학습시간에 대해서 공지를 줘야하는게 맞다고 생각합니다. 금융문자대회같은 경우 같이 평가함수에 시간이 들어있거나 캐글의 대회처럼 9시간 학습 제한이 있듯이 말이죠
해당 토론 결과가 게시되었습니다.
참가해주신 Kavengers_팀에게 감사를 드립니다.
https://dacon.io/competitions/official/235551/talkboard/400413
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
안녕하세요 데이콘 입니다.
저희가 아직 부족한 부분도 있고 개선해야 될 부분도 앞으로 많다고 생각합니다.
하지만 위에 말씀하신 최선의 노력을 다해 신뢰성을 지키려고 노력하고 있습니다.
즉시 답변 드리지 못한점 죄송합니다.
Kavengers님 위에 써주신글에 대해서 데이콘팀 모두가 현 시간에 나와 토론을 하며 답변을 작성 중입니다.
이후에도 건전한 토론이 이루어 졌으면 합니다.
빠른 시일내에 답변 드리겠습니다.
감사합니다.
데이콘 드림