kyejin0412 님의 블로그
Week 18-7 BDA x 데이콘 최종과제 공모전 후기 본문
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번... 턱없이 부족했다.
- 다음에는 필요없는 컬럼을 골라낼 때 내 주관만으로 하지 말고, 기법과 섞으면 좋을 것 같다.
- 필터링 (주관): ID나 상식적으로 무관한 컬럼을 1차로 제거
- 탐색적 데이터 분석 (EDA): 상관계수 히트맵(Correlation Heatmap)이나 산점도를 그려보기
- 특성 중요도 (모델링): 랜덤 포레스트나 XGBoost 같은 모델을 가볍게 돌려 Feature Importance를 뽑아보고, 내가 버리려 했던 컬럼의 중요도가 높게 나오는지 확인
배운점
- 머신러닝을 할 때 train data, test data 모두 동일하게 전처리를 해야 한다. 컬럼이 같아야 학습된 내용을 test에 적용할 수 있다.
- 타겟 컬럼의 비율이 불균형하다면 scale_pos_weight로 균형을 맞춰줘야 성능이 개선된다.
- 머신러닝은 노가다다. 직접 튜닝해가며 성능을 개선시켜야 한다. 시간이 오래걸린다. 감안하고 작업하자.
- 이전 수강 분반명같은 컬럼을 원핫 인코딩하면 과적합될 가능성이 있다. 이런 컬럼은 이전에 수강을 했는지 여부로 새로운 컬럼을 만들자.
- 단일 변수만 보는 것보다 파생변수 생성을 하는 것이 성능 개선에 큰 도움이 된다. (A + B 컬럼으로 파생변수 생성)
- test data 전처리를 할 때 행 삭제를 해서는 안된다. test data의 모든 경우를 테스트하는 것이기 때문이다.
- train 데이터 전처리를 할 때 6번을 미리 고려하자. 삭제보단 대체가 나을 수 있다. (결측치도 패턴으로 학습)
- train 데이터에서 평균, 중앙값 등으로 결측치 대체를 했다면, test 데이터에서도 train에서 구한 값 그대로 결측치를 대체해야 한다. test 데이터에서 다시 계산을 하면 안된다!!
- 머신러닝 순서 :
train data 전처리
train data 학습/튜닝
train 전체 데이터로 평가
test data를 train data와 같은 방식으로 전처리
test 데이터에 모델 적용 - 전처리, 튜닝, 학습, 평가를 왔다갔다 하면서 성능개선을 시키는게 머신러닝이다!
'BDA' 카테고리의 다른 글
| [BDAI] 원데이 클래스 - SQL 기반 KPI 설정 (0) | 2026.03.29 |
|---|---|
| Week 15-1 BDA x 데이콘 공모전 - 데이터 전처리, RF (1) | 2026.01.26 |
| 2025 한국빅데이터학회 추계학술행사 - 빅데이터 기반의 Agent AI (0) | 2025.11.24 |
| [BDA] 1주차 - BDA를 선택하게 된 이유, 기대되는 점 (0) | 2025.09.22 |