장내 미생물 자료로 당뇨병 여부를 구별하는 모델을 시험할 때, 일부 측정값을 0으로 바꿔도 성능이 유지되는지 살펴볼 수 있다. 자료가 덜 완전해져도 예측이 버티는지 보는 시험이다. 여기에는 먼저 결정할 일이 있다. 어떤 미생물 항목은 그대로 두고, 어떤 항목을 바꿀 것인가.
내가 살핀 공개 미생물 벤치마크에서는 당뇨병 여부와 관련이 큰 항목을 골라 보호하는 방식이 쓰였다. 그런데 그 항목을 고르는 단계에서 평가 대상의 당뇨병 여부까지 참고하면, 모델 학습에 평가용 정답을 쓰지 않았더라도 시험 자료를 만드는 쪽에는 그 정답이 들어간다. 모델 학습에서 평가용 정답을 빼는 것만으로 성능 시험 전체가 정답과 무관해지지는 않는다. 이 경로가 점수에 얼마나 영향을 주는지 분리하는 비교를 만들었다.
먼저 했던 비교로는 분리하기 어려웠던 것
초기 작업에서는 전체 자료로 보호 항목을 고른 경우와 학습용 자료 안에서만 다시 고른 경우를 비교했다. 2026년 8월 31일 공개한 v0.2.0 프리프린트에는 여섯 자료에 걸친 반복 교차검증 결과가 담겨 있다.
그 비교에서는 보호 항목을 고르는 데 쓴 자료의 양이 달라지고, 항목 선택에 자료의 구성이나 분할의 영향도 함께 들어간다. 점수 차이가 나타나더라도 평가 대상의 정답을 참고한 효과만 떼어 내기는 어려웠다. 그래서 다음 버전에서는 자료의 양과 모델을 같게 두면서, 정답과 자료가 짝지어진 방식만 바꾸는 대조군을 만들었다.
여기서 ‘정답’은 각 자료 행에 붙은 당뇨병 여부를 뜻한다. 통계와 기계학습에서 결과변수 또는 label이라고 부르는 값이다.
정답의 배치만 바꾸는 paired-sham
주요 비교는 A와 B 두 조건이다. A에서는 모든 자료와 실제 정답표를 사용해 보호할 항목을 골랐다. B에서도 같은 자료를 사용하고 학습용 정답은 그대로 두되, 평가용 정답만 해당 평가 묶음 안에서 섞은 뒤 항목을 골랐다. 평가 묶음에 당뇨병 자료가 몇 개 있는지는 유지하면서, 어느 자료가 그 정답에 해당하는지만 끊은 것이다.
이 B 조건을 paired sham-label control이라고 부른다. 실제 평가 점수를 계산할 때는 두 조건 모두 원래 정답을 사용한다. 정답을 섞는 단계는 보호 항목을 고르는 과정에만 들어간다.
A와 B에는 같은 학습 모델, 같은 평가 자료, 같은 수의 보호 항목, 같은 목표 변화량을 적용했다. 두 점수의 차이인 Δ(A−B)는 이 조건들 아래에서 실제 자료–정답 짝을 참고한 효과를 나타낸다. 전체 자료를 보았기 때문에 생긴 차이나 모델을 다시 학습하면서 생긴 우연한 차이가 끼어들지 않게 한 비교다.
보조 조건도 남겼다. C는 바깥 학습 묶음만으로 항목을 고르고, D는 정답을 쓰지 않고 무작위로 같은 수의 항목을 보호한다. 합성 자료에는 미리 정한 신호 좌표를 먼저 보호하는 E 조건도 두었으며, 이 조건의 의미는 실제로 신호를 넣은 경우에만 해석했다. A−C와 A−B는 서로 다른 질문에 답하므로 하나의 ‘누수 점수’로 합치지 않았다.
신호가 없는 자료에서도 차이가 나는지 확인했다
당뇨병과 실제 미생물의 관계를 해석하기 전에, 애초에 예측할 관계가 없는 조건을 만들었다. 한쪽은 미생물 값과 무관하게 정답을 생성한 합성 자료다. 다른 쪽은 실제 자료의 수치와 구조를 그대로 두고 정답표 전체를 무작위로 섞은 대조 조건이다. 이때는 재배치한 정답표가 그 계산 실험의 평가 기준이 되며, B 조건에서는 그 표의 평가 묶음 안 배치를 다시 섞어 보호 항목을 고른다. 자료에 원래 있던 예측 관계를 없애는 단계와 A·B를 비교하는 단계를 구분했다.
합성 실험은 자료 크기 두 종류, 신호 조건 세 종류, 모델 두 종류의 12개 조합에 각각 200회씩, 총 2,400개 dataset–model 실행을 두었다. 실제 자료 기반 대조 실험은 자료 두 종류와 모델 두 종류에 각각 200회씩, 총 800개 실행이다. 이는 새 환자를 800명 모집했다는 뜻이 아니라 고정된 자료에서 정답표를 다시 배치한 계산 횟수다. 이전 예비 실험과 겹치지 않는 반복 번호 1000–1199만 확인용 분석에 사용했다.
예측 관계가 전혀 없는 합성 조건에서도 A−B의 평균 AUROC 차이는 네 조합에서 모두 양수였다. WT2D 크기의 자료에서는 random forest 0.1554, XGBoost 0.0690이었고, T2D 크기에서는 각각 0.1203과 0.0718이었다. AUROC는 두 집단을 구별하는 순위 성능을 나타낸다. 이 차이는 임상 진단 정확도가 그만큼 개선됐다는 수치가 아니다.
실제 자료의 행렬을 유지한 채 정답을 섞은 조건에서도 같은 방향의 차이가 나타났다.
| 고정한 자료 | 모델 | 평균 A−B AUROC |
|---|---|---|
| WT2D | random forest | 0.0578 |
| WT2D | XGBoost | 0.0213 |
| T2D | random forest | 0.0318 |
| T2D | XGBoost | 0.0122 |
미리 주 비교로 정한 WT2D/random forest의 95% bootstrap 구간은 0.0527–0.0630이었다. 나머지 세 조합에도 사전에 정한 다중비교 보정을 적용했다. 방향은 같았지만 크기는 달랐으므로, 모든 자료의 점수에서 일정한 값을 빼면 된다는 보정 공식으로 해석하지 않는다.
실제로 신호를 넣은 합성 조건도 따로 보았다. WT2D 크기에서는 첫 8개, T2D 크기에서는 첫 12개 항목의 절대량에 1 또는 2 log 단위의 신호를 넣었다. 신호가 강해지면 그 항목을 찾아 보호하는 비율이 높아졌지만 A−B 차이는 여전히 남았고, 크기는 조건에 따라 달랐다. 이 분석은 예측 신호와 평가 구성의 영향이 함께 있을 수 있음을 살피는 보조 실험이며, 생물학적 효과 크기를 모사한 것은 아니다. 원래 당뇨병 정답표를 사용한 개발 단계 분석은 확인용 결과에 포함하지 않았다.
같은 모델에 같은 양의 변화를 주었는가
앞의 점수 차이를 해석하려면, 보호할 항목 외에 다른 조건이 함께 바뀌지 않았는지 확인해야 한다. WT2D 자료는 96개 표본과 미생물 항목 381개이며 보호 항목 수는 18개다. T2D 자료는 344개 표본과 항목 572개, 보호 항목 36개로, 두 자료는 합치지 않고 각각 분석했다.
모델의 학습과 평가를 나누기 위해 자료를 섞은 뒤 당뇨병 여부의 비율이 비슷한 다섯 묶음으로 나누고, 한 묶음씩 평가용으로 남겨 나머지로 학습했다. 이것이 5분할 층화 교차검증이다. random forest와 XGBoost는 각각 100개 트리를 사용했으며, 각 학습 묶음에서 모델을 한 번만 학습한 뒤 모든 보호 조건에 같은 모델을 적용했다. 같은 자료를 두고도 모델을 다시 학습하면 예측이 달라질 수 있으므로, 이 비교에는 그 변동이 들어오지 않게 했다.
실제로 0이 된 칸까지 맞췄다
정답을 참고하는 보호 조건에서는 당뇨병 여부에 따른 항목값 차이를 평가하는 ANOVA 통계량으로 순위를 매겼다. 보호하지 않은 항목에는 거듭제곱 변환(power transformation)을 적용해 작은 값이 더 작아지도록 하고, 10⁻⁶보다 작아진 값은 0으로 처리한 뒤 각 행의 합을 다시 맞췄다.
얼마나 많은 값을 0으로 만들지도 고정했다. 자료 전체에서 0인 칸의 비율을 희소도라고 부르는데, 시작 희소도와 0.99 사이에 놓은 다섯 내부 격자점 중 네 번째를 목표로 삼았다. 실제 두 자료에서는 약 0.909와 0.937이었다.
보호 항목이 다르면 바꿀 수 있는 칸 수도 달라질 수 있어, 목표값만 같다고 충분하지는 않다. 모든 조건에서 실제로 늘어난 0의 개수와 가능한 변화량을 기록하면서, 목표와의 차이가 행렬 한 칸 이내인지 검사했다. 성능 점수는 자신을 학습에 쓰지 않은 모델에서 얻은 예측만 전부 모은 뒤 계산했다. 이런 out-of-fold 예측을 사용했으며, 다섯 평가 묶음의 AUROC를 단순 평균하지 않았다.
점수 차이의 흔들림은 무엇을 뜻하는가
한 번 만든 합성 자료나 한 번 섞은 정답표에서 나온 차이만으로 판단하지 않았다. 독립적인 합성 반복 또는 정답 재배치 한 번을 불확실성 계산의 단위로 삼고, 이 반복 결과들을 다시 뽑는 bootstrap을 10,000회 수행해 평균의 95% 구간을 구했다.
미리 주 비교로 정한 실제 자료 대조에서는 A−B가 양수인 방향을 보는 단측 검정을 사용했다. 나머지 세 조합은 여러 번 비교해서 우연히 차이가 잡힐 가능성을 고려하는 Holm 보정으로 묶었다. 이 구간은 고정한 자료·알고리즘 아래 계산의 변동을 나타낸다. 새로운 환자 집단을 뽑을 때 생길 불확실성까지 측정한 것은 아니다.
공개 자료로 확인할 수 있는 범위
v0.3에는 고정 프로토콜, 계산 코드, 파생 결과, 예측값과 변화량 기록, 별도로 구현한 검증 코드를 공개했다. 저장된 검증 기록에는 81개 검사의 통과와 합성 실험 36개의 결정적 재실행 일치가 남아 있다. 경험 자료 쪽 검증은 저장된 예측 확률에서 AUROC와 요약값을 다시 계산하는 범위이며, 모든 경험 모델을 처음부터 재학습한 검사는 아니다.
실험이 보여주는 것은 여기서 사용한 두 미생물 자료, 두 트리 모델, 하나의 0 증가 방식과 강도에서 평가 자료 구성에 정답의 영향이 남을 수 있다는 점이다. 미생물의 생물학적 역할이나 임상 효용, 원 연구자의 부정행위를 판정한 결과가 아니다. 실제 자료 하나를 점검할 때는 같은 분할 안에서 sham 배치를 여러 번 반복해 분할의 변동과 정답 배치의 변동도 구분할 필요가 있다.
이전 프리프린트 · v0.2.0에는 초기 반복 교차검증 비교가 담겨 있다. 위에서 설명한 paired-sham과 확인용 null 실험은 2026년 9월 3일 공개한 v0.3 원고와 코드·결과 자료에 별도로 들어 있다. 검증 코드도 같은 고정 버전으로 연결했다. 상류의 원본 미생물 행렬은 재배포하지 않고 출처 커밋과 파일 hash를 남겼다. 이전 프리프린트와 v0.3 공개 원고는 학술지 게재본이 아니다.
