External Learning & Competitions

[2024][Basic][P2] Real and Fake Job Postings

중간에 멈춘 BERT 실행을 다시 읽고, 중복 description을 묶은 분할에서 TF-IDF·LinearSVC 기준선을 만들었다.

Platform
Kaggle
진행 기간
2024-08-11–2024-08-27
Host
sw.baek_00
Metric
Accuracy
모델 조건
사전학습 BERT를 사용하며 다른 모델은 사용하지 않는 조건
Kaggle P2 Real and Fake Job Postings 대회 개요 화면
당시 화면에서 BERT 사용 조건과 Accuracy 평가 방식을 다시 확인했다.

남아 있던 실행 위치

Notebook에는 train 12,516개, test 5,364개를 읽은 기록이 있었지만 학습은 352 step 중 51 step에서 멈춰 있었다. 완성된 BERT 결과처럼 쓰지 않고, 실제로 남은 전처리와 중간 학습 출력까지만 과거 기록으로 봤다.

중복 문장을 먼저 묶었다

같은 description이 train과 validation에 동시에 들어가면 모델이 문장을 외워도 높은 점수를 받을 수 있다. exact duplicate description을 하나의 group으로 묶은 뒤 train, calibration, holdout으로 나눴다.

새 기준선

word·character TF-IDF와 class-weighted LinearSVC를 사용하고 calibration split에서 F1 threshold를 골랐다. holdout accuracy 0.9896, balanced accuracy 0.9307, F1 0.8879, average precision 0.9187이 나왔다. 불균형 데이터라 accuracy 하나보다 fake class의 precision과 recall을 함께 봤다.

API Key 처리

예전 Notebook에는 평문 API Key가 들어 있었다. 원본 파일은 올리지 않았고 공개용 코드는 환경변수에서 값을 읽도록 바꿨다. 기존 키는 소유자 계정에서 폐기하고 다시 발급해야 한다. 위 숫자는 로컬 holdout 결과이며 Kaggle leaderboard 점수가 아니다.

다시 실행하면서 바꾼 점

남아 있던 Notebook 결과와 새 로컬 홀드아웃 결과를 비교했다. description-grouped stratified train/calibration/holdout; 8,009/2,003/2,504 rows; seed 42 조건에서 word+character TF-IDF + class-weighted LinearSVC; threshold selected on calibration F1을 사용했다.

당시 Notebook
train 12,516 rows; test 5,364 rows; training stopped at 51/352 steps (14%)
단순 기준선
accuracy 0.9525; balanced accuracy 0.5000; F1 0.0000; recall 0.0000
수정한 모델
accuracy 0.9896; balanced accuracy 0.9307; F1 0.8879; precision 0.9115; recall 0.8655; AP 0.9187

동일 description은 한 분할에만 배치했습니다. 원본 노트북의 평문 API 키는 개선본에 포함하지 않았지만 소유자가 기존 키를 폐기·재발급해야 합니다. Kaggle 업로드와 leaderboard 평가는 미검증입니다.

예전 Notebook에는 평문 API Key가 들어 있었다. 그 파일은 올리지 않고 공개 예제는 환경변수에서 값을 읽도록 고쳤다. 기존 키는 소유자 계정에서 폐기하고 새로 발급해야 한다.

재실행 코드와 정제한 Notebook 보기

위 수치는 문서화한 로컬 분할에서 얻었다. 로그인된 Kaggle 제출 이력·점수·순위까지 다시 확인한 값은 아니다.

논문 첫 페이지 미리보기