본문 바로가기
고민의 흔적../AI Agent 행동예측 해커톤

(연구일지 #1 대회 분석)Dacon AI Agent 행동 예측 대회

by sungjinp0805 2026. 7. 2.

대회 요구사항 분석

Dacon & 소중대 주최의 AI Agent 행동 예측 대회에 참가하게 되었다.

이번 대회의 예측 대상은 AI 코딩 에이전트가 다음에 수행할 14가지 행동이다.

 

탐색 계열

  1. 파일을 직접 확인하는 read_file,
  2. 코드나 텍스트 패턴을 찾는 grep_search,
  3. 디렉터리 구조를 확인하는 list_directory,
  4. 특정 확장자나 파일 패턴을 찾는 glob_pattern 

코드 변경

  1. 기존 파일을 수정하는 edit_file,
  2. 새 파일을 작성하는 write_file,
  3. diff 형태의 변경을 적용하는 apply_patch

실행 계열

  1. 셸 명령을 실행하는 run_bash,
  2. 테스트를 실행하는 run_tests,
  3. 린트나 타입 검사를 수행하는 lint_or_typecheck

그 외

  1. 사용자에게 추가 정보를 묻는 ask_user,
  2. 작업 계획을 세우는 plan_task,
  3. 웹에서 정보를 검색하는 web_search,
  4. 별도 도구를 사용하지 않고 답변만 하는 respond_only가 있다.

즉, 14개 클래스는 에이전트의 행동을 탐색, 수정, 실행, 질문, 계획, 검색, 응답으로 나눈 것이다.

 

입력 데이터는 크게 세 가지로 구성된다.

  • current_prompt
  • history
  • session_meta

심사 기준 분석

이번 대회는 예선과 본선의 평가 방식이 다르다. 예선에서는 Private 리더보드 점수 100%로 순위가 산정되며, 평가 산식은 Macro F1 Score다. 예선 단계에서는 모델 성능만 자동 집계되기 때문에, 제출 결과의 리더보드 점수가 곧 예선 평가 기준이 된다.

 

본선에서는 평가 항목이 세분화된다. Private 리더보드 점수 50%, 추론 속도 10%, 전문가 심사 40%가 반영된다. 전문가 심사에는 데이터 분석, 모델 검증, 모델 알고리즘, 전달력이 포함된다. 따라서 본선에서는 단순히 점수만 높이는 것뿐 아니라, 어떤 데이터를 어떻게 분석했고, 검증을 어떻게 설계했으며, 모델 개선 과정이 타당했는지를 설명하는 능력도 중요하다.

 

리더보드 점수는 예선과 본선에서 해석 방식이 다르다. 예선의 Private 리더보드 점수는 전체 테스트 데이터 기준으로 자동 평가된다. 본선의 Private 리더보드 점수는 예선 평가 종료 시점의 Public Score를 환산해 반영하는 방식이다. 따라서 현재 진행 중인 실험에서는 LB 점수 자체도 중요하지만, 제출 횟수 제한을 고려해 holdout 검증과 LB의 차이를 확인하면서 안정적인 개선 여부를 판단하는 것이 필요하다.

 

본선 평가에 추론 속도가 포함되어 있기 때문에, 모델 성능만 보고 접근하기는 어렵다. Macro F1을 올리기 위해 복잡한 모델을 사용하는 것도 가능하지만, 추론 시간이 길어지면 본선 평가에서 불리할 수 있다. 따라서 현재 실험에서는 성능 개선폭과 추론 비용을 함께 고려해야 한다.


Macro-F1기반 평가 방식 분석

Macro F1은 각 클래스별 F1 점수를 따로 계산한 뒤, 그 값을 단순 평균한 지표다.

F1은 precision과 recall을 함께 고려한 값이기 때문에, 특정 클래스를 얼마나 정확하게 예측했는지와 실제 해당 클래스 데이터를 얼마나 잘 찾아냈는지를 동시에 반영한다. 특히 Macro F1은 클래스별 데이터 개수와 상관없이 모든 클래스를 동일한 비중으로 평균내기 때문에, 데이터가 많은 클래스만 잘 맞히는 모델은 높은 점수를 받기 어렵다.

학습 데이터 불균형

주최측에서 학습용 데이터를 제공해주었는데 해당 데이터는 14개 행동 클래스가 균등하게 등장하는 구조가 아니었다. respond_only처럼 자주 등장하고 표현 패턴이 비교적 뚜렷한 클래스는 높은 F1을 보였지만, read_file, grep_search, glob_pattern, list_directory, web_search처럼 상대적으로 구분이 어렵거나 등장 패턴이 적은 클래스는 낮은 F1에 머물렀다. 즉, 전체적으로 많이 나오는 행동을 맞히는 것만으로는 충분하지 않았고, 비슷한 표현 안에서 세션 상태에 따라 갈리는 소수·혼동 클래스까지 구분해야 Macro F1을 올릴 수 있는 문제였다.


클래스 불균형이 있는 상황에서 전체 정확도보다 각 클래스별 성능이 중요하다.

데이터는 총 70,000개이며, 현재는 train 56,000개, holdout 14,000개로 나누어 실험하고 있다.
같은 세션의 step이 train과 validation에 동시에 들어가지 않도록 GroupKFold 방식으로 분할했다.

GroupKFold 폴드 접근

GroupKFold는 같은 group에 속한 데이터 샘플들이 train과 validation에 동시에 들어가지 않도록 나누는 검증 방식이다. 일반 KFold를 사용하면 같은 세션의 일부 step은 train에, 다른 step은 validation에 들어갈 수 있는데, 이 경우 모델이 세션 흐름을 사실상 본 상태에서 평가되므로 점수가 부풀려질 수 있다.

 

이번 대회에서는 하나의 session 안에 여러 step이 존재하므로 session_id를 group으로 두고 분할했다. 즉, 특정 세션은 한 fold에서 train 또는 validation 중 한쪽에만 포함되도록 만들었고, 이를 통해 새로운 세션에 대한 일반화 성능을 더 공정하게 평가하려고 했다. 


 

평가 시스템 및 Baseline모델 분석

주최측에서는 기본 baseline 모델을 제공한다. 테스트 삼아 2번 정도 제출해본 결과 baseline은 0.4358점 정도로 측정되었다.

 

이전에 참여했던 LLM 양자화 해커톤에서는 같은 모델을 제출해도 점수가 0.1점 이상 흔들리는 경우가 있었다. 제출 결과만으로는 개선이 실제 모델 성능 때문인지, 평가 과정의 변동성 때문인지 판단하기 어려웠다. 반면 이번 대회 예선은 제출 결과를 정답 라벨과 직접 비교해 Macro F1로 평가하는 구조다. 따라서 상대적으로 점수 변동이 적고, holdout 검증과 리더보드 결과를 비교하면서 가설을 세우고 검증하기에 더 안정적인 환경이라고 판단했다.

 

Baseline은 current_prompt만 사용한다.

구조는 다음과 같다.

TfidfVectorizer(current_prompt) + LogisticRegression

이번 실험에서는 총 70,000개 데이터 중 56,000개를 학습에 사용하고, 14,000개를 holdout으로 분리했다. 모델은 holdout 데이터를 보지 않은 상태로 학습되기 때문에, 이 데이터에서의 점수를 통해 새로운 세션에 대한 일반화 성능을 추정할 수 있다.

재현한 holdout 성능은 0.4104, LB는 약 0.43이었다.

 

baseline은 직전 대화만을 사용하고 history를 사용하지 않았기에 우선 제공하는 정보를 확인해보았다.

  • 직전 대화 흐름
  • 이전 assistant action 시퀀스
  • 열린 파일 목록
  • workspace 상태
  • CI 상태
  • token budget
  • plan 정보

이는 의사 결정에 크리티컬한 역할을 하는 요소들로 판단되었다.

AI Agent의 다음 행동은 이전 대화, 과거 action, 열린 파일, workspace 상태 같은 세션 정보와 함께 결정된다.

따라서 다음 글에서는 주최측 baseline을 재현한 뒤, baseline에서 사용하지 않던 history와 session_meta를 복원하며 고전 ML 기반으로 어디까지 성능을 올릴 수 있었는지 정리하려고 한다.