# 고정한 최종 평가의 실측 결과

이 문서의 코드, 노트북, 폴더와 별도 자산 링크는 [전체 프로젝트 소스](/downloads/nlu-authorship-verification-source/)를 내려받습니다. 문서와 측정 자료는 개별 파일로 연결됩니다.

[English](./results.md) | [개요](../README.ko.md) | [평가 규칙](./evaluation.ko.md) | [재현](./reproduction.ko.md) | [보고서 대조](/downloads/nlu-authorship-verification-source/)

Kaggle에서 모델, 토크나이저, 소스, 분할과 보정값을 모두 고정한 뒤 최종 글 쌍 4,708개 전체를 평가했습니다. 제공된 데이터에서 문서를 분리해 학습 시드 한 번으로 수행한 실험입니다. Dongmyung Park과 Juho Kim의 최초 공동 개발 기간은 2026년 2월부터 5월로 유지합니다.

**명칭 안내:** custom focal은 최초 프로젝트에서 ASL 또는 ASLoss라고 부른 직접 구현 비대칭 이진 focal 손실입니다. 호환 식별자는 `custom_asl`로 유지하며, ASL의 이진 변형을 직접 구현해 학습한 실험이며, 공식 기본 설정이나 논문의 실험을 그대로 재현했다는 뜻은 아닙니다. [명칭과 구현의 비교](./loss-terminology.ko.md)에서 공식 버전, 보존한 이름과 수치 안정성 처리를 설명합니다. 그림과 고정한 원본 보고서는 focal 표기를 유지합니다.

## 분류 성능과 배포 선택

| 모델 | 원래 AB F1 | 선택한 순서의 F1 | 고정 파이프라인 F1 | 정확도 | 정답 |
|---|---:|---:|---:|---:|---:|
| 문체 앙상블 | 0.743335 | 0.743335 | 0.741498 | 74.1504% | 3,491 / 4,708 |
| Large CE (배포 모델) | 0.807724 | 0.808149 | 0.808383 | 80.8624% | 3,807 / 4,708 |
| Large 커스텀 ASL(클래스별 비대칭 이진 focal) | 0.808153 | 0.816451 | 0.815170 | 81.5208% | 3,838 / 4,708 |

![같은 최종 평가의 분류 결과, 선택한 CE의 길이 구간과 동일 저자 확률 ECE](./figures/frozen-evaluation.png)

첫 패널은 원래 AB와 임계값 0.5의 결과를 선택한 입력 순서와 보정 임계값까지 포함한 고정 파이프라인과 비교합니다. 보정만의 효과를 분리한 그림이 아닙니다. 셋째 패널은 선택된 입력 순서를 유지한 상태에서 temperature 적용 전과 후를 비교합니다. 길이 막대에는 실제 사례 수를 표시하며 200단어 이상은 5쌍뿐입니다.

원래 AB와 선택한 순서의 결과는 temperature 없이 임계값 0.5를 사용합니다. Large 두 개는 선택 집합에서 결정한 대칭 평균 logit을 사용하고, 문체 앙상블은 자체적으로 대칭인 표현의 AB 결과를 사용합니다. 고정 파이프라인에는 별도 보정 집합으로 정한 temperature와 분류 임계값을 적용합니다. 표의 F1은 두 클래스의 macro 평균이며, 전체 성능은 판정 보류 사례의 내부 이진 예측도 포함합니다.

배포용 Transformer는 CE를 유지합니다. 최종 평가 전에 보정값을 고정한 파이프라인을 모델 선택 3,139쌍에서 비교했을 때 CE는 0.801199, custom focal은 0.799145였습니다. Focal은 사전 채택 기준인 +0.002를 충족하지 못했습니다. 이후 최종 평가에서 focal이 F1 0.006787, 즉 0.6787%p와 정답 31쌍만큼 높았지만 모델을 다시 선택하지 않았습니다. 이 차이는 입력 순서와 보정 효과도 포함하므로 손실만의 효과나 focal의 보편적 우월성으로 해석하지 않습니다.

최초 Large F1 0.8348과 문체 모델 0.7702는 개발 집합에서 얻은 기록입니다. 당시 분할의 문서 재사용과 학습 및 개발 데이터를 함께 사용한 TF-IDF 적합을 공개했습니다. 평가 조건이 달라 새 점수와의 차이로 통제된 성능 증감을 주장할 수 없습니다. 이번에 같은 조건으로 새로 학습한 CE와 focal이 릴리스 내 통제 비교입니다.

## 확률 보정

| 모델 | ECE 이전 → 이후 | NLL 이전 → 이후 | Brier 이전 → 이후 | Temperature | 분류 임계값 |
|---|---:|---:|---:|---:|---:|
| stylometric | 0.032128 → 0.019479 | 0.481949 → 0.477097 | 0.162394 → 0.161535 | 0.834865 | 0.453506 |
| ce | 0.045364 → 0.024756 | 0.390351 → 0.379059 | 0.127160 → 0.124134 | 1.541728 | 0.497921 |
| custom_asl | 0.057828 → 0.033591 | 0.396182 → 0.380551 | 0.128212 → 0.124634 | 0.715183 | 0.531187 |

이전과 이후는 같은 모델, 같은 최종 평가 사례와 선택된 입력 순서를 사용합니다. 이전은 temperature 1입니다. Temperature와 분류 임계값은 보정 1,569쌍에서만 적합하고 최종 평가 전에 고정했습니다. 세 모델 모두 NLL, Brier와 10구간 ECE가 감소했습니다. 분류 정답은 일관되게 늘지 않았습니다. 선택한 순서에서 임계값 0.5를 적용한 결과와 비교하면 CE는 정답 1쌍이 늘었지만 focal은 6쌍, 문체 앙상블은 12쌍 줄었습니다. 확률 보정을 F1 향상이 보장되는 절차로 설명하지 않습니다.

ECE는 동일 저자 확률을 같은 폭의 10구간으로 나눠 평균 확률과 실제 동일 저자 비율의 차이를 측정합니다. 예측 클래스의 확신과 정답률을 비교하는 표와 다른 정의이며 두 표를 원본 보고서에 모두 보존했습니다.

## 판정 보류

| 모델 | 판정한 쌍 | 처리 비율 | 판정한 쌍의 정확도 | 보류한 쌍 | 80% / 90% 목표 |
|---|---:|---:|---:|---:|---|
| stylometric | 3,858 / 4,708 | 81.9456% | 79.3675% | 850 | 미달 |
| ce | 3,875 / 4,708 | 82.3067% | 86.3742% | 833 | 미달 |
| custom_asl | 3,902 / 4,708 | 82.8802% | 86.6735% | 806 | 미달 |

세 고정 정책 모두 처리 비율 80%는 넘겼지만, 최종 평가에서 판정한 사례의 정확도 90%에는 도달하지 못했습니다. 실패 결과를 보고 임계값을 바꾸지 않았습니다. CE는 판정한 3,875쌍 중 3,347쌍이 정답으로 정확도 86.3742%이며, 833쌍은 사용자에게 판정 보류로 표시합니다. 판정한 사례의 정확도는 처리 비율과 함께 제시하며, 보류 자체를 전체 분류의 정답으로 계산하지 않습니다.

## 입력 순서와 길이 분석

보정 전 임계값 0.5의 AB와 BA 예측은 CE 415쌍(8.8148%), focal 450쌍(9.5582%)에서 달랐습니다. 고정한 Large 대칭 추론에서는 입력을 교환한 확률 차이와 판단 불일치가 모두 0입니다. 문체 앙상블도 정확히 불변입니다. Large 대칭 추론에는 두 번의 순전파가 필요하므로 실행 비용을 별도로 측정합니다.

| 짧은 쪽 글의 단어 수 | 사례 수 | 문체 앙상블 F1 | CE F1 | Custom focal F1 |
|---|---:|---:|---:|---:|
| <50 | 1,988 | 0.693848 | 0.741795 | 0.746979 |
| 50–199 | 2,715 | 0.775839 | 0.856815 | 0.864755 |
| ≥200 | 5 | 0.761905 | 1.000000 | 1.000000 |

200단어 이상 구간은 사례가 5쌍뿐입니다. Large가 모두 맞힌 결과는 작은 구간의 관찰이며 긴 글의 안정적인 성능을 입증하지 않습니다. 모델을 실행하지 않은 입력 길이 검사에서는 최종 4,708쌍 중 197쌍(4.184%)이 합산 512토큰을 넘었습니다. 실제 실행에는 longest-first 잘라내기를 적용합니다. CE의 50단어 미만 구간 F1은 0.741795이고 50–199단어 구간은 0.856815였지만, 이 연관성만으로 개별 오분류의 원인을 입증하지 않습니다.

## 실제 학습 자원

새 RoBERTa-Large 두 개 모두 같은 6 epoch를 완료하고 각각 최적 5 epoch 체크포인트를 저장했습니다. 초기화 해시 `ffe7ba5e9107a846e6c9303dc914893535a441412c12fee323111b17a754acd3`, 기록한 6개 epoch 스케줄 해시, seed 378, microbatch 2, 유효 배치 32와 고정 최적화 조건을 공유합니다. 공통 종료 사유는 같은 6 epoch 상한입니다. FP16 overflow로 CE update 7회와 focal 6회를 건너뛰었으므로, 같은 시도 순서가 성공한 update 수까지 같다는 의미는 아닙니다.

대응 학습 parent는 23,025.254초, 즉 실제 경과 6.3959시간이 걸렸습니다. 배정 worker 합산은 45,993.036초, 즉 12.7758시간이며 GPU를 배정받은 상태의 준비와 동기화 대기도 포함합니다. 고정 평가까지의 전체 wrapper 실행은 27,171.02초, 즉 실제 경과 7.5475시간입니다. 이 측정 범위는 계정의 공식 GPU 할당량 차이나 GPU 연산만의 가동 시간을 뜻하지 않습니다. 대응 학습 9시간과 전체 커널 10시간 상한을 지켰고 이후 GPU 품질 실험은 추가하지 않았습니다.

전체 학습 실행의 제한된 profile 단계에서는 worker마다 최대 할당 GPU 메모리 6.09 GiB를 기록했습니다. 모든 epoch를 통틀어 측정한 최대치나 로컬 CPU 프로세스 메모리로 해석하지 않습니다. 별도 문체 실험은 120분 상한 안에서 95.06분에 끝났습니다. 선택한 0.25 / 0.75 앙상블은 50/50 파일럿보다 선택 F1이 0.005056 높았고, 더 큰 설정은 이를 넘지 못해 채택하지 않았습니다.

## 근거와 해석 범위

[릴리스 요약](../reports/release-summary.json), [전체 평가 고정 기록](../reports/evaluation-freeze.json), [모델 선택](../reports/selection.json), [보정](/downloads/nlu-authorship-verification-source/), [원본 순서의 최종 예측](/downloads/nlu-authorship-verification-source/), [대응 학습 보고서](../reports/training-report.json)와 [실행 시간](../reports/execution-timing.json)에 정확한 값과 연결을 보존했습니다. 전체 wrapper 시간에는 실행 대기와 관리된 환경 설치가 포함되지 않으며, 보존한 원본 completion 타이머는 학습 단계만 측정합니다. 함께 고정한 식별자는 `e8fc94ee17d7ea575ecf8002e3d104d1ec70600b68cc59239f1189b0b955f924`입니다.

[완료한 bootstrap](../reports/evaluation-bootstrap.json)은 seed 378로 문서 연결 요소 3,207개를 함께 표집하는 사전 계획의 대응 표집 1,000회를 수행했습니다. 조건부 95% percentile 구간은 다음과 같습니다.

| 고정 모델 | Macro F1 구간 | 정확도 구간 |
|---|---:|---:|
| 문체 앙상블 | 0.723662–0.758584 | 72.3666%–75.8585% |
| CE | 0.792243–0.821863 | 79.2428%–82.2157% |
| Custom focal | 0.799702–0.828075 | 79.9990%–82.8109% |

보정된 focal에서 CE를 뺀 대응 F1 차이는 0.006787이며 구간은 0.000063–0.013471입니다. 제공된 데이터와 관찰한 문서 그룹, 학습 한 번을 조건으로 고정 파이프라인 전체를 비교하는 보고용 구간입니다. 손실만의 효과, 여러 학습 시드나 새로운 저자와 분야의 변동을 추정하거나 과거 데이터 사용 이력을 제거하지 않으며, 배포 모델을 다시 선택할 근거로 사용하지 않습니다. 저장 모델의 CPU 재검증과 비로그인 공개 전달은 Kaggle 평가와 별도로 검증했습니다.

## 완료한 CPU 재검증

저장 모델 검증은 학습과 Kaggle의 고정 평가와 별개로 수행합니다. 모델 세 개 모두 Windows와 Ubuntu 24.04 WSL2에서 4,708쌍 전체 추론을 완료했습니다. 여섯 번 모두 원본 순서의 이진 분류, 판정 보류, F1과 정확도가 일치했습니다. 문체 앙상블은 두 환경에서 원래 허용 오차도 충족했지만 Large 두 개의 GPU 참조 확률 비교는 다음과 같이 실패했습니다.

| 모델과 CPU 환경 | 전체 CLI 시간 | 원래 AB/BA 확률 최대 차이 | 보정 확률 최대 차이 | 원래 엄격한 판정 |
|---|---:|---:|---:|---|
| CE, Windows | 136.02분 | 5.430759e-5 | 1.789985e-5 | 실패 |
| CE, Linux | 163.21분 | 1.272707e-5 | 8.806712e-6 | 실패 |
| Custom focal, Windows | 146.82분 | 3.015516e-4 | 1.800454e-4 | 실패 |
| Custom focal, Linux | 161.44분 | 1.838595e-4 | 1.096225e-4 | 실패 |

확률값의 사전 절대 허용 오차는 `1e-5`를 유지했습니다. Linux CE의 보정 확률은 기준 안에 있었지만 원래 입력 순서의 차이는 넘었습니다. Custom focal의 보정 확률은 두 환경 각각 4,708쌍 중 1쌍에서 기준을 넘었으며 이진 분류와 판정 보류는 모두 일치했습니다. 결과를 확인한 뒤 허용 오차, 모델, 보정값이나 참조를 바꾸지 않았습니다. 전체 재검증 시간은 CPU 스레드 4와 배치 4로 CLI 작업까지 측정했으며, 스레드 1과 배치 1을 사용하는 별도 지연 시간 측정과 구분합니다.

두 transformer 경로는 eager attention과 FP32 저장 가중치를 사용하고 추론에 autocast를 적용하지 않습니다. CPU와 GPU의 부동소수점 연산 차이가 가능한 설명이지만 특정 원인을 입증하지는 못했습니다. 같은 조건의 CPU 자원 측정을 완료했으며 범위와 수치는 아래에 제시합니다. 두 운영체제는 같은 물리적 노트북을 사용하므로 독립된 외부 검증이 아닙니다. 별도 [공개 다운로드 검증](../reports/model-download-verification.json)에서는 같은 바이트의 Kaggle 버전 1 파일 21개 전체를 로그인 없이 HTTP 200으로 내려받아 크기와 SHA256을 확인했습니다. 원래 CPU 검증 기록은 로컬 파일에서 시작한 출처를 유지하며 공개 전달을 확인하기 위해 추론을 다시 하거나 참조를 바꾸지 않았습니다.

저자와 도메인 ID가 없어 새로운 저자와 분야의 일반화를 확인하지 못했습니다. 과거 원본 데이터 사용, 측정하지 않은 유사 문서, 512토큰 잘라내기, 짧은 글에서의 성능과 판정 보류 목표 미달을 한계로 남깁니다. 제공된 글 쌍의 라벨을 예측하는 시스템이며 임의의 글로 사람의 신원을 입증하는 도구는 아닙니다.

## 실측 CPU 지연 시간과 메모리

메모리 64 GB인 같은 i7-11800H 노트북에서 Windows 세 모델을 순서대로 측정한 뒤 Ubuntu WSL2를 측정했습니다. 새 CLI 프로세스마다 같은 선택 집합의 첫 32쌍, CPU 스레드 1, 배치 1, 준비 예측 5회와 시간 측정 3회 반복을 사용했습니다. Large의 고정 정책에는 AB와 BA 두 번의 추론, 전처리와 보정이 포함되며 모델 로딩은 별도로 측정했습니다.

| 환경과 모델 | 글 쌍 p50 (ms) | 글 쌍 p95 (ms) | 모델 로딩 (s) | 최대 상주 메모리 (GiB) |
|---|---:|---:|---:|---:|
| Windows, Stylometric | 29.17 | 73.28 | 3.21 | 0.272 |
| Windows, Large CE | 3601.84 | 5845.42 | 9.96 | 1.571 |
| Windows, Large custom focal | 3550.39 | 5777.96 | 9.27 | 1.571 |
| Linux, Stylometric | 24.68 | 74.45 | 2.69 | 0.320 |
| Linux, Large CE | 3436.91 | 5735.41 | 5.75 | 1.699 |
| Linux, Large custom focal | 3403.69 | 5915.93 | 5.33 | 1.701 |

무작위로 뽑지 않은 선택 집합 32쌍을 같은 컴퓨터에서 측정한 결과입니다. 전체 입력의 지연 시간을 보장하거나 운영체제 캐시를 비운 측정으로 해석하지 않습니다. Windows PeakWorkingSetSize와 Linux GNU time의 maxRSS는 라이브러리, 모델과 전처리를 포함한 전체 프로세스의 상주 메모리 최대치입니다. Windows PeakPagefileUsage는 프로세스의 커밋 메모리이며 디스크 스와핑 양이 아닙니다. 운영체제별 집계 방식도 달라 메모리 비교에는 한계가 있습니다.

Windows와 Linux CPU 사이의 확률 비교는 변경하지 않은 `1e-5` 기준에서 실패했습니다. 이진 분류와 판정 보류는 모두 일치했습니다. [CPU 요약](../reports/cpu-reproduction.json)에 여섯 번의 원본 평가, 엄격한 실패 판정, 확장 보고서 비교와 같은 조건의 자원 측정 기록을 연결했습니다. 자원 측정의 정상 종료로 수치 재현 판정을 바꾸지 않습니다.
