[CSAT-Solver] 프로젝트 소개와 EDA
⚠️ 안내: 이 글은 학습 기록용입니다. 오류나 보완 의견은 댓글로 알려주세요.
프로젝트의 전반적인 개요와 EDA결과 및 수립 전략에 대해 정리한 글 입니다.
프로젝트 소개
부스트캠프 AI Tech 8기에서 두번째로 진행한 팀프로젝트는 Small Language Model(SLM)을 사용하여 수능 국어·사회 영역 문제를 풀어내는 프로젝트였습니다. 총 869개의 평가 데이터에 대해 Macro F1 기준으로 평가되었으며, 프로젝트 기간은 2025.12.15 ~ 2026.01.06 (3주) 동안 진행하였습니다.
프로젝트 진행을 위해 Tesla V100-SXM2-32GB 서버 3개가 개발환경으로 주어졌습니다.
이번 프로젝트에서 저는 LLM 기반 데이터셋 증강, llama.cpp 서버 환경 구축, MoA 파이프라인 구현 및 실험 을 담당하였습니다.
프로젝트 방향성
첫번째 프로젝트를 거치면서 부족했던 점들을 고려해서 이번 프로젝트에서는 다음과 같은 내용을 지키려고 하였습니다.
- Data-Centric AI: 모델 아키텍처 수정보다 데이터의 품질과 다양성 확보를 선행
- Efficiency & Reproducibility: V100 GPU 환경의 한계를 극복하기 위해 양자화 기술과 메모리 효율적 학습 라이브러리 도입
- Hypothesis-Driven Experiment: 단순히 성능을 높이기 위한 무작위 실험이 아닌, 명확한 가설 기반 실험 설계
- Collaboration: 첫 번째 프로젝트에서 아쉬웠던 협업 방식을 되돌아보고, ML/AI 프로젝트 특성에 맞는 브랜치 전략과 실험 관리 체계를 구축
협업 방식: 브랜치 기반 실험 관리
첫 번째 프로젝트를 진행하면서 느낀 것 중 하나가, 웹 개발 프로젝트와 달리 ML/AI 프로젝트는 일반적인 Git 협업 방식이 잘 맞지 않는다는 점이었습니다. 웹 개발에서는 기능 단위로 브랜치를 나누고, 개발이 완료되면 main 브랜치에 병합하는 흐름이 일반적입니다. 하지만, ML/AI 프로젝트에서는 실험 결과와 중간 산출물을 공유해야 하지만, 모든 실험코드가 반드시 main 브랜치에 병합될 필요는 없기 때문에 기존 방식만으로는 관리가 다소 어려웠습니다.
첫 번째 시도: Semantic Versioning 기반 실험 브랜치 관리
초기에는 실험 브랜치를 보다 체계적으로 관리하기 위해, 브랜치명에 Semantic Versioning 개념을 적용하는 방식을 시도했습니다. 각자가 버전명을 기준으로 실험 브랜치를 생성하고, 성과가 좋은 경우에는 PR을 통해 반영하고, 실험 기록으로 남길 브랜치는 그대로 보존하는 구조를 구상했습니다.
버전: A.B.C
A (Major) : 0 → 1 (프로덕션 레벨 변동, ≈ main)
B (Minor) : 큰 변화 (아키텍처 변경이 있는 실험)
C (Patch) : 파라미터 튜닝 등 (아키텍처 변경 없는 실험)
─────────────────────────────────────────
세부 내용은 노션에 기록
다만 실제 운영 과정에서는 처음 구상한 방식과 다른 요소들이 일부 함께 사용되면서, 관리 기준이 점차 일관성을 잃는 문제가 발생했습니다.
원래는 브랜치명을 중심으로 실험 이력을 정리하려고 했지만, 사용 과정에서 커밋 태그(tag)까지 관리 수단으로 혼용되었고, 이로 인해 브랜치,커밋,태그 중 무엇을 기준으로 버전을 해석해야 하는지 모호해지는 상황이 생겼습니다.
또한, 버전 체계 안에서 기능(feature) 단위와 실험(experiment) 단위가 함께 반영되면서, minor는 모든 실험, patch는 bugfix에 사용하는 식으로 각 자리(major/minor/patch)가 하나의 일관된 기준 아래 확장되는 구조라기보다 서로 다른 성격의 변화를 동시에 담는 형태가 되었습니다. 결과적으로 브랜치명만 보고 실험의 성격과 변경 범위를 명확히 파악하기 힘들었고, 협업 과정에서 해석 차이가 생길 여지가 있었습니다.
해결: 목적 중심의 단순한 브랜치 전략
이후 핵심 목표를 다시 정의했습니다. 우리에게 필요한 것은 정교한 버저닝이 아니라, 실험 단위를 명확히 남기고 언제든 해당 실험 코드를 재현할 수 있도록 남기는 것 이었습니다.
이에 따라 복잡한 Versioning 체계 대신, 기존 Git 브랜치 전략을 ML 실험에 맞게 수정하는 방식을 선택했습니다. 구체적으로는 실험 하나당 브랜치 하나를 생성하고, 실험 종료 후에도 브랜치를 삭제하지 않고 남기는 방식 입니다.
feature/data_augmenting ← 데이터 증강 파이프라인
feature/qlora ← QLoRA 파인튜닝
feature/apply_cot ← Chain-of-Thought 적용
feature/unsloth ← Unsloth 최적화
feature/ensemble ← 앙상블
experiment/MoA ← Mixture of Agents
experiment/model_select_* ← 모델별 실험 (Qwen, Gemma, EXAONE, Llama, A.X 등)
이 방식의 장점은:
- 각 실험의 코드와 설정이 독립적으로 보존되어, 이후에도 실험 내용을 쉽게 추적하고 재현할 수 있음
- 실험이 실패하더라도 Develop 브랜치의 안정성에 영향 없이 자유롭게 시도 가능
- 브랜치 단위로 실험을 비교하고 논의하기 쉬워 협업 효율 향상
추가로 GitHub Issue도 기능 요청 및 버그 리포트 템플릿을 만들어, 작업 내용을 체계적으로 관리했습니다.
EDA 분석
모델링 전략 수립에 앞서, 제공된 학습 데이터(Train: 2,031개, Test: 869개)의 특성을 분석했습니다.
샘플 직접 확인
ID: generation-for-nlp-705
지문:
지급 준비율이 0.10이고 Mommy Morebucks는 당좌 예금 계좌에서 1백만 달러를 인출하여 냉장고에 현금으로 보관합니다.
질문:
이 인출이 시중에 유통되는 화폐에 어떤 영향을 미치겠습니까?
선택지 개수: 4
선택지:
1. 9백만 달러 감소
2. 1백만 달러 감소
3. 100,000달러 감소
4. 1백만 달러 증가
question_plus: None
answer: 1
ID: generation-for-nlp-2284
지문:
정부가 발표한 대입 제도 개선안의 후폭풍이 거세다. 이미 예고됐던 고교 내신 절대평가를 유보함에 따라 외국어고 등 특목고에 진학하면 불리해진다는 논란이 확산되고,
그동안 대학 원서접수를 대행해온 민간기업들은 정부가 원서접수 업무를 일방적으로 빼앗는 횡포를 부린다며 반발했다.○외고·자사고 갈까 말까28일 인터넷 공간에서는 대입 제도 개선안에 따라 외국어고 등 특목고 진학의 유불리에 대한 갑론을박이 벌어졌다.
특목고에 유리할 것으로 평가된 고교 내신 절대평가(성취평가)제를 2019학년도까지 유보하기로 했기 때문이다. 아이디 cook**는 “절대평가를 안 한다면 일반고가 약간 살아나겠다”고 예상했으며 ha**는 “2020년 이후에 절대평가 도입 여부가 결정된다면 내신 잘 받을 수 있는 일반고에 들어가는 게 낫다”고 평가했다.
자녀의 외고 입시를 준비해왔던 학부모 최모씨는 “절대평가를 한다는 정부의 말을 믿은 게 잘못”이라고 성토했다. 반면 suy**는 “강북지역 일반고에서 수석을 해도 연·고대 지원이 버거운 반면 대학들은 주관적으로 고교등급을 적용해 자사고와 외고의 낮은 등급을 일반고 1등급보다 더 쳐준다”며 특목고 진학 필요성을 강조했다.
서울 개포동 중학생 학부모인 양모씨는 “내신이 불리하더라도 대학들이 수능 위주의 정시모집을 늘릴 테니 외고가 더 유리할 수 있다”고 내다봤다. 입시 전문가들의 반응도 엇갈렸다.
오종운 이투스청솔 평가이사는 “특목고나 학군 좋은 지역으로의 지원이 감소할 것”이라고 전망한 반면 이만기 유웨이중앙교육 평가이사는 “대학에서는 학생부에 대한 신뢰가 떨어져 수능과 논술 비중을 높일 것이고 이는 특목고 우대로 이어질 것”이라고 내다봤다.
○원서접수 대행업체 반발정부가 2016학년도부터 공통원서접수시스템을 통해 대학 원서를 접수키로 한 데 대해 그동안 대학 원서접수를 대행해온 민간업체들은 “지난 15년간 피땀으로 일군 원서접수 사업을 정부가 일방적으로 뺏어가는 일방적 ‘갑’의 횡포를 부리고 있다”며 반발했다.
원서접수 시장을 양분해온 유웨이어플라이와 진학어플라이는 공동 보도자료를 내고 “정부가 민간 중소기업을 상대로 헌법에서 보장하는 기본적인 재산권을 포기시키는 초법적 규제 행위를 하고 있다”며 “관련 종사자 400명이 실직 등 생존권 문제에 직면했다”고 지적했다.
이들은 “기존 업체의 시스템을 활용하면 정부 예산 낭비 없이 상생을 통해 한국형 원서접수시스템 구축이 가능하다”고 주장했다. 이에 대해 심민철 교육부 대입제도과장은 “원서접수뿐 아니라 예비합격자의 대학 선호에 따라 합격자를 확정해주는 ‘합격자 일괄발표 시스템’ 등을 구축해 공공성과 수험생 편의를 높일 예정”이라고 설명했다.
교육계 일각에서는 또 “원서접수 대행업체가 확보된 수험생 정보를 활용해 입시컨설팅 사업도 한다는 의혹이 있다”며 “수험생 정보보호 차원에서도 공공기관이 원서접수를 통합 관리하는 게 맞다”고 반박했다.○입학사정관제 폐지 논란전형 간소화를 위해 입학사정관 전형을 학생부 전형에 통합시킨 데 대해 80개 대학 600여명 입학사정관의 모임인 한국대학입학사정관협의회는 “입학사정관 전형을 부활하라”고 주장했다.
이미경 회장(서울여대 입학사정관)은 “학생부 전형에 통합하면 대학들이 비교과와 면접 등 복잡한 요소보다는 교과 성적 위주로 평가하는 등 입학사정관이 참여할 공간이 줄어든다”며 “이명박 정부에서 입학사정관 역량강화 사업으로 예산을 지원하고 정규직을 50% 이상 확보하도록 규정했는데 이 규정이 모두 사라졌다”고 반발했다. 한국사 수능 필수화에 대해 지리학 및 지리교육 관련 학회들도 성명서를 내고 “한국사만이 세상을 가르치는 것은 아니다”고 반발했다.
질문:
대입 제도 개선안에 따라 외국어고 등 특목고 진학의 유불리에 대한 논란이 일어난 이유는 무엇인가?
선택지 개수: 5
선택지:
1. 고교 내신 절대평가 유보
2. 대학 원서접수 대행업체의 반발
3. 입학사정관제 폐지
4. 수능 위주의 정시모집 증가
5. 학생부 전형의 간소화
question_plus: None
answer: 1
가장 먼저 데이터를 직접 눈으로 살펴보면서 다음과 같은 특징을 발견했습니다.
- 지문에 중략이 들어있거나, 지문이 문제를 푸는 데 전혀 도움이 안 되는 경우가 존재
- 학습 데이터가 실제 수능과는 거리가 먼 경우가 많음
- “아이디 cook**“과 같은 인터넷 아이디, 한자, 괄호, ○/△ 등 특수 문자가 포함된 깨끗하지 않은 문장들
문제 주제 분류 (규칙 기반 & LLM 기반)
문제가 국어 영역인지 사회 영역인지를 분류하기 위해 규칙 기반 키워드 매칭과 LLM 기반 분류를 병행했습니다.
규칙 기반에서는 질문과 지문에서 국어 관련 키워드(이 글의 주제, 필자의 의도, 문맥상 등)와 사회 관련 키워드(왕, 조선, 헌법, 경제 등)를 탐지하여 점수화했습니다. LLM 기반에서는 “이해 및 추론”에 가까우면 국어, “지식 문제”에 가까우면 사회로 분류하도록 프롬프트를 설계했습니다.
# 규칙 기반 script
korean_indicators = [
# 독해 질문 패턴
'이 글의 주제', '글의 내용', '필자의 의도', '글쓴이의 관점',
'윗글', '이 글', '위 글', '다음 글',
'추론할 수 있는', '이해한 것', '적절한 것', '적절하지 않은',
'문맥상', '~을 의미하는', '바꿔 쓸 수 있는',
# 문법
'맞춤법', '띄어쓰기', '품사', '문법', '어법',
'주어', '서술어', '목적어', '부사어', '관형어',
'높임법', '시제', '피동', '사동',
# 문학
'시', '소설', '작품', '화자', '표현', '비유', '상징',
'서사', '서정', '인물', '배경', '갈등', '주제'
]
# 사회 문제 특징 (구체적 지식/사실)
social_indicators = [
# 역사 사실
'왕', '조선', '고려', '신라', '백제', '고구려',
'세종', '정조', '고종', '전쟁', '독립', '일제',
'조약', '개화', '개항', '년', '세기',
# 사회 개념/제도
'헌법', '법률', '정부', '국회', '대통령',
'경제', '시장', '수요', '공급', '가격',
'정치', '민주주의', '선거', '정당',
# 구체적 사실/연도
'이란', '~에서', '~에 의해', '~때', '~년'
]
# 질문 패턴 분석 (더 중요)
question_korean_patterns = [
'이 글', '윗글', '위 글', '다음 글', '필자', '글쓴이',
'추론', '이해', '해석', '의미', '내용으로 적절',
'문맥상', '바꿔', '표현'
]
question_social_patterns = [
'무엇', '누구', '어디', '언제', '몇',
'이유', '원인', '결과', '영향',
'옳은 것', '옳지 않은 것', '~인 것', '~한 것'
]
# 점수 계산 (질문 패턴에 가중치)
korean_score = sum(2 for kw in question_korean_patterns if kw in question)
korean_score += sum(1 for kw in korean_indicators if kw in text)
social_score = sum(2 for kw in question_social_patterns if kw in question)
social_score += sum(1 for kw in social_indicators if kw in text)
# 추가 휴리스틱: 지문이 매우 길면 국어 비문학일 가능성
if len(row['paragraph']) > 800:
korean_score += 2
# 연도 표기가 많으면 사회(역사)
if len(re.findall(r'\d{3,4}년', text)) >= 2:
social_score += 3
return '국어' if korean_score >= social_score else '사회'
# LLM 기반 프롬프트
text = f"지문: {row['paragraph'][:600]}...\n질문: {row['question']}"
prompt = f"""다음은 대한민국 수능 유형의 문제입니다. 이 문제가 **수능 국어** 과목인지 **수능 사회탐구** 과목인지 분류해주세요.
{text}
분류 기준:
- **국어**: 독해력/추론/표현/문법/문학 문제. 지문 내용이 사회/역사여도 "글을 읽고 이해하는" 문제면 국어입니다.
예: "이 글의 주제는?", "필자의 의도는?", "문맥상 의미는?", "표현 기법은?"
- **사회**: 역사적 사실/사회 개념/제도에 대한 지식 문제. 구체적 연도/인물/사건/개념을 묻습니다.
예: "조선시대 왕의 업적은?", "이 제도의 특징은?", "이 사건의 원인은?"

분류 결과, 사회 영역이 국어 영역의 약 2배 가량 많았습니다.
문제 유형 분석
정오 방향성(정답형/오답형/중립형)과 문제 형식(단순선택형/복수선택형/순서배열형 등)을 규칙 기반과 LLM 기반으로 분석했습니다.
# 규칙 기반 script
# 정오판단
if '옳은 것' in question or '적절한 것' in question or '바른 것' in question or '맞는 것' in question:
formats.append('정답형')
elif '옳지 않은 것' in question or '틀린 것' in question or '적절하지 않은 것' in question or '바르지 않은 것' in question or '사실이 아닌 것' in question or '아닌 것' in question:
formats.append('오답형')
elif '거리가 먼' in question:
formats.append('오답형')
else:
formats.append('중립형')
# 문제 유형
patterns = {
'순서배열형': r'순서|나열|시기.*순',
'빈칸채우기형': r'\(가\)|\(나\)|\(다\)|\(라\)|밑줄 친',
'복수선택형': r'모두 고르면|있는 것|ㄱ.*ㄴ.*ㄷ',
'비교형': r'공통|차이|비교',
'인과형': r'원인|이유|배경|결과|영향|계기',
'관계형': r'관계',
'사실확인형': r'사건|사실',
}
# LLM 기반 프롬프트
prompt = f"""다음 문제를 형태적 특성에 따라 분류해주세요.
질문: {question}
다음 두 가지 측면에서 분류해주세요:
1. 정오 방향성:
- 정답형: 옳은/적절한/바른/맞는 내용을 고르는 문제
- 오답형: 틀린/옳지않은/적절하지않은/거리가먼 내용을 고르는 문제
- 중립형: 정오 판단이 아닌 문제
2. 문제 형식:
- 단순선택형: 일반적인 선택지 중 하나를 고르는 문제
- 복수선택형: ㄱ,ㄴ,ㄷ 등 여러 개를 조합해서 선택하는 문제
- 순서배열형: 시간순서나 단계를 나열하는 문제
- 빈칸채우기형: (가), (나) 등의 빈칸이나 밑줄친 부분을 설명하는 문제
- 비교형: 공통점이나 차이점을 찾는 문제
- 인과형: 원인, 이유, 배경, 결과, 영향을 묻는 문제
- 관계형: 관계를 설명하는 문제
- 사실확인형: 사건이나 사실을 확인하는 문제
정오형 분포

- 정답형(옳은 것은?)과 중립형이 대부분
- 오답형(옳지 않은 것은?)의 비율이 매우 적음 → 데이터 증강 시 오답형 문제 보충 필요
문제 유형 분포

- 단순선택형이 압도적, 복수선택형(ㄱ,ㄴ,ㄷ)·순서배열형·빈칸채우기형은 부족
- 간혹 ____ 빈칸에 들어갈 것을 고르시오 같은 비정형 문제도 존재
길이 및 선택지 분포

| 길이 지표 | 지문 | 질문 | 선택지 합계 | 전체 입력 |
|---|---|---|---|---|
| 샘플 수 | 2,031 | 2,031 | 2,031 | 2,031 |
| 평균 | 735자 | 39자 | 62자 | 836자 |
| 중앙값 | 699자 | 37자 | 48자 | - |
| 최대 | 2,017자 | 152자 | 404자 | - |
- 전체 입력의 약 88% 이상이 지문에 의해 결정됨 → 모델 길이 리스크의 주 원인은 지문 길이
- train 데이터에는
question_plus(보기)가 없음
지문 길이 이상치 분석
지문 길이의 하위 5%(51자 이하)와 상위 5%(1,593자 이상)를 추출하여 살펴봤습니다.

# 하위 5%
ID: generation-for-nlp-440
지문:
(가) 도쿄에서 2․8 독립선언 발표 국내에서 6․10만 세 운동 발발
질문:
(가) 시기에 있었던 사실로 옳은 것은?
선택지 개수: 4
선택지:
1. 박상진 이 대한광복회를 조직하였다.
2. 일제가 국가총동원법 을 적용하였다.
3. 임병찬이 독립의 군부를 만들었다.
4. 상하이에서 대한민국 임시정부가 수립되었다.
question_plus: None
answer: 4
# 상위 5%
ID: generation-for-nlp-1391
지문:
수도권 1기 신도시인 부천 중동 한복판 ‘랜드마크(지역을 대표하는 시설이나 건물) 용지’ 개발 방향을 놓고 지역 내 갈등이 커지고 있다.
부천시청 바로 옆에 20여년간 방치돼 있는 3만4286㎡ 땅을 어떻게 개발하느냐를 두고 의견이 갈려서다. 부천시는 도시 가치를 높이기 위해 초고층 중심의 통합개발을 해야 한다는 입장이다.
반면 일부 시의원과 시민단체는 인구밀도가 전국 최고 수준인 부천에서 고밀도 개발은 맞지 않는다며 반대하고 있다. 개발안을 둘러싼 시의회 내 의견 대립은 최근 몸싸움으로까지 번져 검경이 수사에 나섰다.
○‘랜드마크 땅’ 개발 놓고 갈등 격화이 땅(원미구 중동 1153)은 원래 문화예술회관·호텔용 부지였다. 그러나 마땅한 사업자가 나서지 않아 2008년 특별계획구역으로 지정됐고, 2012년 민간 매각 승인이 났다.
3만4286㎡(18개 필지) 가운데 87%인 2만9772㎡가 시유지고 나머지는 개인 소유다. 땅은 세 구역으로 나뉘어 있다. 모델하우스 가건물이 들어서 있는 옛 호텔용 부지(8155㎡)와 옛 문예회관용 부지(1만5474㎡), 그 사이로 상가가 들어서 있다.
상가 땅은 시유지와 개인 토지가 뒤섞여 있다.부천시는 이 땅을 따로 개발해서는 사업성이 없다고 판단, 지난 6월 통합개발안을 마련했다. 용적률 1050%를 적용해 66~69층 아파트 4개 동(1480가구)과 40층 호텔(320실)을 짓는 안을 내놨다.
기부채납을 받아 1700석 규모 콘서트홀을 갖춘 문예회관 등을 함께 조성하겠다고 했다. 예상되는 시유지 매각대금은 3334억원으로 개별 매각 때보다 850억여원을 더 받을 수 있다는 설명도 곁들였다.개발안이 시의회로 넘어가면서 제동이 걸렸다.
김만수 부천시장과 뜻을 같이하는 시의회 내 다수당인 새정치민주연합과 달리 새누리당 측이 “주민 의견수렴 절차가 부족하고 사업성이 검증되지 않았다”며 반대해 안건 심의가 불발됐다. 부천시는 문예회관 부지만 따로 매각하기로 하고 15일 공고를 냈다.
그러나 이마저도 일부 시민단체의 반대에 부딪혔다. 교통정체, 학급 과밀화가 우려된다는 이유에서다. 부천은 인구밀도가 ㎢당 1만5910명(지난달 말 기준)으로 전국에서 두 번째로 높다.○부천시 “분양 여건 달라졌다”특별계획구역 통합개발 반대엔 ‘리첸시아 미분양 사태’에 대한 기억이 깔려 있다.
2012년 초 완공된 66층짜리 쌍둥이 주상복합 ‘리첸시아 중동’(572가구)은 부천의 랜드마크 단지로 기대를 모았다. 분양면적 160·193·208·215·260·344㎡(옛 48~104평형)의 대형 주상복합으로 부천지역 주거 수준을 끌어올린다는 야심찬 계획 아래 추진됐다. 그러나 부동산 경기 침체 속에 고전을 면치 못했다.
올초까지 두 번에 걸친 할인 분양 끝에 매매가는 분양가의 60% 선까지 떨어져 있다. 가격이 하락하면서 미분양은 대부분 해소되고 입주율도 90%를 넘었다고 인근 부동산 업계는 전했다. 160㎡는 6억4000만~7억3000만원, 193㎡는 6억8000만~7억7000만원 선에 호가가 형성돼 있다. 아직도 1층 상가는 상당부분 비어 있다.
부천시청 도시계획과 관계자는 “리첸시아 미분양 때문에 복합개발에 대한 거부감이 있는 것은 사실이지만 그때와는 상황이 다르다”고 말했다. 부천시는 특별계획구역 외에도 원미구 길주로1 일대(38만2743㎡)를 ‘영상문화단지’로 복합개발하기로 하고 사업자 공모를 진행 중이다. 상동호수공원 맞은편 녹지로 역시 20여년간 방치된 땅이다.
이 사업에는 롯데, 신세계, 이랜드, 한양 등을 비롯해 개발업체 엠디엠, STS개발 등
6곳이 사업참가 의향서를 냈다.
질문:
부천시가 통합개발안을 마련한 이유는 무엇인가?
선택지 개수: 5
선택지:
1. 인구밀도가 높아 사업성이 없기 때문에
2. 부천시청과 가까운 위치에 있기 때문에
3. 개별 매각 시 수익이 적기 때문에
4. 주민 의견 수렴이 충분히 이루어졌기 때문에
5. 리첸시아 미분양 사태를 피하기 위해서
- 지문이 짧은 문제들은 지문 자체에 정보가 거의 없어, 모델의 내부 지식에 의존해야 하는 경우가 많음
- 지문이 긴 문제들은 대부분 인터넷 기사 기반으로 만들어진 문제
선택지별 정답 분포

학습 데이터의 정답 분포를 분석한 결과, 극심한 클래스 불균형 현상이 발견되었습니다. 특히 5지선다형 문제의 경우, 1번이 정답인 비율이 전체의 약 61.7%를 차지하는 기형적인 분포를 보였습니다.
이러한 불균형은 모델이 문맥을 이해하고 정답을 추론하기보다, 단순히 1번을 선택하면 맞출 확률이 높다는 통계적 편향을 학습하게 만들 위험이 큽니다.
EDA를 바탕으로 시도해볼 수 있는 전략
- 데이터 증강 필요 — 사실 관계 확인형에 편중, 오답형·복수선택형·
<보기>활용 문제 등이 부족하여 유형 다양성 확보 필요 - 선지 shuffle 필수 — 1번 편향(61.7%)을 제거하여 모델이 실제 내용 기반으로 추론하도록 유도
- 외부 지식 주입 — 지문이 짧은 지식형 문제가 상당수 존재, 도메인 특화 데이터(한국사, 교과 지문 등)로 증강 필요
- 추론 능력 강화 — 단순 패턴 매칭이 아닌 논리적 추론이 필요, CoT 등 추론 전략 고려
마무리
ML/AI 프로젝트에서는 모델링 자체만큼이나 실험을 어떻게 관리하고 협업할 것인지에 대한 체계가 중요하다는 점을 다시 확인할 수 있었습니다. 협업 방식 측면에서는 처음 구상한 Semantic Versioning 기반 관리가 실제 실험 흐름과 맞지 않는다는 한계를 겪었지만, 그 과정을 통해 우리에게 정말 필요한 것이 무엇인지 더 분명하게 정리할 수 있었습니다.
EDA를 통해서는 학습 데이터가 단순히 “문제 수가 충분한 데이터”가 아니라, 실제 실험 방향에 직접적인 영향을 주는 여러 편향과 한계를 함께 가진 데이터라는 점을 확인할 수 있었습니다. 예를 들어 사회 영역 비중이 국어보다 약 2배 정도 높았고, 문제 유형 역시 고르게 분포되어 있지 않았습니다. 또한 오답형·복수선택형 문제와 <보기> 활용 문항이 부족했으며, 일부 문제는 지문이 지나치게 짧아 지문 이해보다 모델의 내부 지식에 더 의존하게 되는 특성이 있었습니다. 특히 5지선다형에서 1번이 정답인 비율이 약 61.7%에 달했다는 점은, 모델이 추론보다는 통계적 편향을 먼저 학습할 위험이 있다는 점을 보여주었습니다. 이런 분석은 단순한 데이터 요약이 아니라, 이후 데이터 증강이나 선택지 셔플, 추론 전략 보강 같은 후속 실험 방향을 정하는 근거가 되었습니다.보기>
이번 프로젝트는 비슷한 유형의 컴페티션을 두 번째로 경험한 사례였는데, 처음보다 전체 흐름을 조금 더 빠르게 파악할 수 있었다는 점이 의미 있었던 것 같습니다. 이전에는 무엇을 먼저 봐야 할지 감을 잡는 데에도 시간이 걸렸다면, 이번에는 데이터 구조와 문제 유형, 정답 분포 같은 요소들을 좀 더 여유 있게 살펴보며 EDA를 진행할 수 있었습니다. 완전히 익숙해졌다고 보기는 어렵지만, 적어도 막막함보다는 “어디를 먼저 의심하고 확인해야 하는지”에 대한 감각이 조금씩 생기고 있다는 점에서 개인적으로도 성장한 프로젝트였습니다.