kyejin0412 님의 블로그

Week 18-7 BDA x 데이콘 최종과제 공모전 후기 본문

BDA

Week 18-7 BDA x 데이콘 최종과제 공모전 후기

kyejin0412 2026. 2. 23. 17:23

 

BDA의 최종과제는

1. 최종보고서 제출

2. 데이콘 성능 f1-score 0.42 이상

 

결과부터 말하면 난 성능이 0.39가 최대였어서 수료를 못할 것 같다...ㅜㅜ 어제 새벽 4시까지 했는데 너무 아쉽다.

수료조건이 너무 까다로운 거 아닙니까 BDA!!

수업참여, 과제 다 열심히 했어도 최종과제 모델 성능이 안 나오면 수료를 못 한다니 너무 가혹한듯....

그래도 이번 공모전을 진행하면서 머신러닝에 대해 배운 점은 꽤 있는 것 같다. 이제부터 정리해보겠다.


 

공모전 소개

https://dacon.io/competitions/official/236664/overview/description

 

데이콘 x BDA 제 2회 학습자 수료 예측 AI 경진대회 - DACON

분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.

dacon.io

 

[주제]

학습자의 수료 여부를 예측하는 AI 알고리즘 개발

[설명]

BDA 9기 학습자 데이터를 분석하여 10기 학습자의 수료 여부를 예측하는 AI 알고리즘 개발

 

[데이터셋]

Dataset Info.(Updated 26.02.10)

  • 1. train.csv [파일]
  • ID : 샘플별 고유 ID
  • generation : BDA 기수
  • school1 : 대학교
  • major type : 복수전공 여부
  • major1_1 : 제1전공
  • major1_2 : 제2전공
  • major_data : 제1전공 전공자 여부
  • 제 1전공에 '컴퓨터', '인공지능', 'AI', '소프트웨어', '데이터', '통계', '산업경영', '산업' 이 포함되면 True
  • job : 현재 직무
  • class1~4 : 수강 분반
  • re_registration : 학기당 새로운 학회원을 모집할 때 재등록 여부
  • contest_award : 공모전 수상 경력
  • nationality : 내/외국인 여부
  • inflow_route : 유입 경로
  • whyBDA : BDA를 선택한 이유
  • what_to_gain : BDA에서 얻고싶은 것
  • hope_for_group : 조별활동 희망 여부
  • previous_class_3~9 : 각 기수를 수강했을 시 분반
  • major_field : 전공 분야
  • desired_career_path : 희망 진로
  • completed_semester : 대학교 이수학기
  • project_type : 팀/개인 중 프로젝트에 참여하고 싶은 형태
  • time_input : 하루에 BDA에 투입 가능한 시간
  • desired_job : 희망 직무
  • certificate_acquisition : 취득한 자격증
  • desired_certificate : 취득을 희망하는 자격증
  • desired_job_except_data : 데이터 외 희망 직무
  • incumbents_level : 어느 정도 연차의 현직자를 원하는지
  • incumbents_lecture : 어떤 주제의 현직자 강의를 원하는지
  • incumbents_company_level : 강연 현직자가 어느정도 규모의 회사를 다니는 사람이었으면 좋겠는지
  • incumbents_lecture_type : 온, 오프라인 중 원하는 현직자 강연 형태
  • incumbents_lecture_scale : 원하는 현직자 강의 규모
  • '3~50명 내외의 강의 리스너와 1명의 현직자' 는 '30~50명 내외의 강의 리스너와 1명의 현직자'를 의미합니다.
  • incumbents_lecture_scale_reason : 현직자 강의 규모 선택 이유
  • interested_company : 관심있는 기업명
  • expected_domain : 희망하는 도메인
  • contest_participation : 데이터 관련 대회 경험
  • idea_contest : 아이디어 공모전에 대한 경험
  • onedayclass_topic : 원데이 클래스 주제
  • completed : (TARGET) 수료 여부(0 - 미수료 , 1 - 수료)

※ 본 대회는 기존 1회 대회와 달리, 중도 탈퇴를 예측하는 것이 아니라 학습 과정을 끝까지 완료하여 ‘수료’에 도달한 학습자를 예측하는 것을 목표로 합니다.

 

  • 2. test.csv [파일]
  • ID : 샘플별 고유 ID
  • completed 칼럼 존재하지 않음.
  • 그 외 train.csv 파일과 구성 동일
  •  
  • sample_submission.csv [파일] - 제출 양식
  • ID : 샘플별 고유 ID
  • completed : (TARGET) 수료 여부(0, 1)

 

실수 회고

  • train 데이터 전처리를 할 때, 결측치 삭제나 이상치 삭제를 했다. train만 보면 문제가 안되지만, test 데이터에 같은 방식으로 전처리를 해야 했는데 test데이터는 삭제를 하면 안돼서 모델학습을 다 했다가 train 데이터 전처리를 다시 했다...
  • 파생변수를 안 만들었다. 단일변수로만 하려다보니 '이전 수강분반' 컬럼이 과적합이 돼서 '이전 수강 여부' 컬럼을 추가하고 분반명은 다 drop해서 다시 했다.
  • 튜닝이 이렇게 오래 걸릴 줄 몰랐다. XGB 모델은 성능이 좋다그랬고, GPT의 도움을 받으면서 몇 번 손보면 금방 목표 성능이 나올 줄 알았는데 오산이었다. 또한 혼자서도 잘할 수 있을 거라고 자신했는데, 팀으로 참여한 사람들의 점수가 확실히 높았다. 다음에는 팀플을 믿어보는 것도 나쁘지 않을 것 같다. (팀플에 질려서 혼자 하고 싶었던 1인..)
  • 데이콘에 하루 제출가능 횟수가 정해져 있을 줄 몰랐다. 나한테 주어진 시험횟수는 5번... 턱없이 부족했다.
  • 다음에는 필요없는 컬럼을 골라낼 때 내 주관만으로 하지 말고, 기법과 섞으면 좋을 것 같다.
    1. 필터링 (주관): ID나 상식적으로 무관한 컬럼을 1차로 제거
    2. 탐색적 데이터 분석 (EDA): 상관계수 히트맵(Correlation Heatmap)이나 산점도를 그려보기
    3. 특성 중요도 (모델링): 랜덤 포레스트나 XGBoost 같은 모델을 가볍게 돌려 Feature Importance를 뽑아보고, 내가 버리려 했던 컬럼의 중요도가 높게 나오는지 확인

 

배운점

  1. 머신러닝을 할 때 train data, test data 모두 동일하게 전처리를 해야 한다. 컬럼이 같아야 학습된 내용을 test에 적용할 수 있다.
  2. 타겟 컬럼의 비율이 불균형하다면 scale_pos_weight로 균형을 맞춰줘야 성능이 개선된다.
  3. 머신러닝은 노가다다. 직접 튜닝해가며 성능을 개선시켜야 한다. 시간이 오래걸린다. 감안하고 작업하자.
  4. 이전 수강 분반명같은 컬럼을 원핫 인코딩하면 과적합될 가능성이 있다. 이런 컬럼은 이전에 수강을 했는지 여부로 새로운 컬럼을 만들자.
  5. 단일 변수만 보는 것보다 파생변수 생성을 하는 것이 성능 개선에 큰 도움이 된다. (A + B 컬럼으로 파생변수 생성)
  6. test data 전처리를 할 때 행 삭제를 해서는 안된다. test data의 모든 경우를 테스트하는 것이기 때문이다.
  7. train 데이터 전처리를 할 때 6번을 미리 고려하자. 삭제보단 대체가 나을 수 있다. (결측치도 패턴으로 학습)
  8. train 데이터에서 평균, 중앙값 등으로 결측치 대체를 했다면, test 데이터에서도 train에서 구한 값 그대로 결측치를 대체해야 한다. test 데이터에서 다시 계산을 하면 안된다!!
  9. 머신러닝 순서 :
    train data 전처리
    train data 학습/튜닝
    train 전체 데이터로 평가
    test data를 train data와 같은 방식으로 전처리
    test 데이터에 모델 적용
  10. 전처리, 튜닝, 학습, 평가를 왔다갔다 하면서 성능개선을 시키는게 머신러닝이다!