분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
[Private 1위 0.6581] | 소회의실 | Catboost
안녕하세요. 팀 소회의실 입니다.
아직 데이터분석을 배우고 있는 학생들이고 첫 데이콘 참여였는데 좋은 성적을 얻어서 정말 기분 좋네요 :)
저희가 logloss를 가장 크게 낮출 수 있었던 요소는 ID 변수를 만든 것과 catboost 모델을 이용한 것이었습니다. 랜덤포레스트, LGBM, XGB 모두 사용해봤고 Voting, Stacking 등 여러가지 기법을 시도했습니다만 파라미터 적용하지 않은 catboost에 모두 미치지 못했네요...
열심히도 했지만 운이 좋았던 것 같습니다.
무엇보다 코드공유, 토론 게시판에 글 올려주신 많은 분들 감사드립니다. 고민의 연속에서 많은 힌트를 얻을 수 있었습니다. 다음부터는 저도 적극적으로 참여하도록 하겠습니다.
모두 고생 많으셨습니다!
수정) 데이터 전처리 2. 이상치 제거 부분 설명에서
train['family_size'] > 8 인 데이터 제거 -> train['family_size'] > 7 인 데이터 제거 오타 수정했습니다.
좋은 대회 열어주셔서 감사합니다!
family_size: 7 인 이상치 제거를 한 이유가 있나요?
family_size=7인 데이터는 제거하지 않았고요, 9 15 20 인 데이터가 각각 한명인 동일인물 데이터라 이상치로 판단하고 제거했습니다. 중간 코드 설명엔 family_size > 8 이라고 써뒀었네요.. 수정하겠습니다. 감사합니다!
이번 대회 키포인트는 카테고리 변수의 조합을 통해 ID를 만드는 것 같네요. 1등 축하드리고 코드 공유 감사합니다:)
네 저도 그렇게 생각합니다. 읽어주셔서 감사합니다 :)
코드 공유 감사합니다. 많은 도움이 되었습니다.
1등 축하드립니다 !!!
베이스라인 코드 올려주신 점 저도 감사드립니다!
잘 읽었습니다. 훌륭하신 코드 잘 보고 갑니다 ㅎㅎ
도움이 되셨으면 좋겠네요. 감사합니다.
안녕하세요 코드 공유 잘 봤습니다.
한가지 의문이 드는데, ID 변수가 가장 성능에 도움이 되었다는 건
1. 중복된 같은 사람의 신용도는 거의 변하지 않고 비슷하다.
2. 학습 데이터와 테스트 데이터에 같은 사람이 많다.
이런 식으로 생각할 수도 있을까요?
결과가 잘 나온 건 잘 나온 거고,
데이터의 특성이나 의미를 생각해봤을 때 ID 변수가 좋았다는 것의 의미가 뭘까 한 번 생각해봤습니다.
안녕하세요, 소회의실 팀의 팀원입니다.
먼저 코드를 읽고 질문 달아주셔서 감사합니다.
질문을 읽고 나서 코드를 재검토해보고 다음과 같이 답변합니다.
1번. train data에서 가지고 체크했을 때 ID당 나오는 신용도의 종류수는 다음과 같습니다.
편의상, 중복되지 않은 ID도 포함하여 수치를 계산했습니다.
ID 개수의 총합: 8756 개
신용도가 1종류 : 5918
신용도가 2종류: 2336
신용도가 3종류: 502
ID당 신용도가 2종류 이상인 경우가 2800명 정도 된다는 것을 보았을 때, 중복된 사람의 신용도가 거의 변하지 않고 비슷하다고 말하기는 어려울 것 같습니다.
2번. testID(총 5585개) 중
train과 중복된 ID 개수: 4616개
중복되지 않은 ID 개수 : 969개
train과 중복되지 않은 test ID 969개의 경우 모두 -1로 배정되었기 때문에 이 경우에는 학습데이터와 테스트 데이터에 같은 사람이 많았으므로 test 학습에 유리하게 작용했을 것이라고 판단합니다.
안녕하세요
늦었지만 답변 감사드립니다!
삭제된 댓글입니다
ID 파생변수가 어떤 과정에서 만들어졌는지 질문해도 될까요?
기존에 머신러닝 feature engineering 기법에서 쓰였던 것인지 혹은 참고한 논문이나 문서가 있는지.. 궁금합니다!!
처음에는 토론게시판에서 중복된 사용자가 있다는 소스를 보고 그 사용자들을 걸러내기 위해 중복 사용자를 특정할 수 있는 피쳐가 있어야겠다는 생각에서 시작했습니다.
사용자를 조금 더 개인화(세분화)하여 특정하기 위해서는 저희가 아는 정보를 모두 동원해야 할 필요성을 느꼈고, 코드를 보시다시피 쉽게 생각해서 begin_month를 제외한 모든 피쳐를 문자열로 다 합친 후 인코딩했습니다.
논문에 있는지는 확인을 못해봤지만 사실 그 정도로 엄청 특이한 방법을 쓴 것은 아닙니다...
아하! 제가 초보라 생소하고 신기해서 질문드렸는데, 답변 감사드립니다! ㅎㅎ
삭제된 댓글입니다
잘 읽었습니다
안녕하세요, 공유 감사합니다. 궁금한 것이 음수 변수들을 절댓값 처리하신 이유가 있나요? 음수 변수 그대로 사용하시지 않은 이유가 궁금합니다. 성능에도 차이가 있으셨나요?
안녕하세요! 시간이 좀 지나서 기억이 가물가물한데요, begin_month 와 같은 컬럼의 경우 절대적인 근무기간= '정도'의 의미를 담기 위해서 절대값처리를 했습니다.
처리 유무에 따른 성능을 평가해보진 않았는데 크게 상관은 없을 것이라고 생각합니다.
1년반이 지났는데도 보시고 댓글 달아주셔서 감사드려요 :)
@Vale 님, 수상 축하드리고 (오래전이지만) 답변주셔서 감사합니다!
하나 더 여쭈면, 클러스터링 과정에서 k-means 하셨는데, kmeans.predict(kmeans_train) 여기서 predict가 가지는 의미가 뭔가요? 양의 정수로 나오던데 어떤 의미로 표현된건지 궁금합니다!
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
축하합니다.