4 minute read

🇺🇸 Read this post in English

앞선 글에서 남의 논문이 내놓은 숫자를 재봤습니다. 그러면서 질문이 하나 생겼습니다. 남의 숫자를 재보는 방법을 익혔으면 내 숫자도 같은 방법으로 재봐야 하지 않을까.

이번 글은 그 이야기입니다.

이 논문이 다루는 것

제가 쓰고 있는 논문은 유전자 변이 해석에 AI를 쓸 때 생기는 문제를 다룹니다. 암 조직에서 유전자에 생긴 변화를 찾아 그것이 암을 일으키는 변화인지 판정하는 일인데, 판정에 따라 어떤 약을 쓸지가 달라지므로 병원에서 실제로 쓰입니다.

문제는 이렇습니다. 임상 보고서 초안을 AI에게 맡기면 문장은 잘 씁니다. 그런데 근거로 붙인 인용이 실재하지 않는 논문일 수 있습니다. 원고에 이런 문장이 있습니다.

In a clinical report, a fabricated reference is a patient-safety and medico-legal hazard, because the assertion it appears to support cannot be checked.

임상 보고서에서 지어낸 인용은 환자 안전 문제이자 법적 문제라는 뜻입니다. 그 인용이 뒷받침하는 것처럼 보이는 주장을 확인할 방법이 없기 때문입니다.

그래서 이 시스템은 성능을 정확도가 아니라 정직성으로 잡았습니다.

A usable decision-support draft must instead be auditable line by line and must abstain rather than fabricate.

한 줄씩 감사할 수 있어야 하고, 지어내느니 기권해야 한다는 뜻입니다. 기권은 근거가 부족하면 판정을 내리지 않고 물러나는 동작입니다. 시험에서 모르는 문제를 찍지 않고 비워 두는 것과 같습니다. 정답률은 안 오르지만 틀린 답을 제출하지도 않습니다.

실제로 그렇게 만들었습니다. 근거 문서가 아예 없는 변이 10건을 넣었더니 시스템이 10건 전부 판단 보류로 처리했습니다.

원고도 같은 태도로 썼습니다

논문 본문 자체도 같은 규칙을 따랐습니다. 자기 성과를 부풀리지 않으려는 문장이 곳곳에 있습니다.

원고의 문장
not claimed as a novel classifier 규칙 엔진 부분은 새로 만든 것이 아니라고 못 박음
remains uncontrolled 통제하지 못한 요인을 통제 못 했다고 그대로 씀
not powered for an accuracy claim 표본이 작아 정확도를 주장할 수 없다고 미리 밝힘

논문에서 이런 문장은 손해입니다. 새롭지 않다고 스스로 적으면 심사에서 점수가 깎일 수 있습니다. 그런데도 적은 이유는, 시스템에 넣은 규칙을 글쓴이가 어기면 그 시스템을 믿을 이유가 없어지기 때문입니다.

출발점: 리뷰어가 남긴 한 문장

이 원고에는 리뷰 하네스를 돌린 기록이 있습니다. 원고를 학술지 심사자처럼 읽고 지적 사항과 점수를 내놓는 장치입니다.

2회차 리뷰가 재현성 항목에 5점 만점을 줬습니다. 근거는 이랬습니다.

Offline-from-snapshots, 90 tests, scripts named per result; spot-checked headline numbers reconcile with committed JSONs.

앞부분은 좋은 이야기입니다. 인터넷 없이 저장된 자료만으로 돌아가고, 시험 코드가 90개 있고, 결과마다 어떤 스크립트가 만들었는지 이름이 붙어 있다는 뜻입니다.

걸린 대목은 마지막입니다. spot-checked, 대표 수치 몇 개를 표본으로 확인했더니 저장된 결과 파일과 맞더라는 것입니다.

여기서 장면 하나가 겹쳤습니다. 모르는 문제를 비워 두라고 가르쳐 놓고, 정작 자기 답안지는 그렇게 썼는지 확인해 본 적이 없는 상황입니다.

무엇을 만들었나

원고의 모든 숫자를 저장된 결과 파일과 대조하는 검사기를 만들었습니다. 표본이 아니라 전수입니다.

원고에서 숫자를 전부 뽑는다
        ↓
저장된 결과 파일에서도 숫자를 전부 뽑는다
        ↓
원고의 숫자가 결과 파일에 있는지 하나씩 찾는다
        ↓
못 찾은 것만 따로 모아 보고한다

대조 대상은 저장소에 커밋해 둔 결과 파일입니다. 벤치마크 16개와 코호트 정보 4개, 합쳐서 20개입니다. 커밋되어 있다는 것은 시점이 고정되어 나중에 같은 파일을 다시 열 수 있다는 뜻입니다.

공정하게 재려고 두 가지를 조정했습니다. 원본이 0.8432인데 원고에 0.843으로 적혔으면 반올림을 인정했고, 0.05처럼 통계에서 관례로 쓰는 값은 대조 대상에서 뺐습니다.

결과

원고 고유 수치      120개
  근거 있음         93개 (78%)
  근거 못 찾음      27개 (22%)

못 찾은 27개는 본문에 41회 등장합니다.

27개가 무엇인가

조심해야 할 지점입니다. 27개가 틀렸다는 뜻이 아닙니다. 하나씩 열어 보니 세 갈래였습니다.

갈래 개수
성능 지표(계산해서 나온 값) 21개 0.443, 0.671, 0.714
본문에서 계산한 퍼센트 5개 21.4, 25.0, 58.9
표본 수 1개 n = 56

성능 지표 21개는 원자료를 가공해 얻은 값입니다. 정확도는 맞힌 개수를 전체로 나눠 계산하니 결과 파일에 그 형태로 저장되어 있지 않은 것이 자연스럽습니다. 문제는 다른 데 있습니다. 그 계산을 어디서 했는지가 원고에도 저장소에도 안 적혀 있습니다.

퍼센트 5개가 더 걸립니다. 21.4라는 값은 본문에 다섯 번 나오는데, 무엇을 무엇으로 나눈 값인지 알 수 없습니다. 분모가 없는 비율은 크기를 가늠할 수 없습니다. 100건 중 21건과 14건 중 3건은 같은 21.4%지만 무게가 다릅니다.

사람 심사자와 기계 검사가 같은 곳을 짚었습니다

1회차 리뷰에서 반드시 고치라고 한 지적이 다섯 개 있었습니다. 그중 둘이 정확히 이 자리였습니다.

심사자가 읽고 지적한 것 검사기가 세어 잡은 것
수치마다 신뢰구간을 붙이라 성능 지표 21개에 구간이 없음
잠정 판정의 방향을 밝히라 21.4가 다섯 번 나오는데 분모가 없음

신뢰구간은 이 값이 어느 범위에 있을 것 같은지를 나타내는 표기입니다. 0.843이라고만 쓰면 정밀해 보이지만, 표본이 작으면 실제로는 0.76에서 0.93 사이 어딘가일 수 있습니다.

한쪽은 읽어서 찾았고 다른 쪽은 세어서 찾았습니다. 방법이 전혀 다른데 결론이 겹쳤습니다.

배운 것

하나, 기권 장치를 두 군데는 넣고 한 군데는 안 넣었습니다.

대상 근거가 없을 때
시스템의 변이 판정 기권한다
원고의 자기 주장 못 박는다
원고의 수치 아무 표시 없이 그냥 적힌다

왜 숫자만 빠졌는지 생각해 봤습니다. 숫자는 근거가 있어 보이기 때문입니다. 소수점 세 자리까지 적혀 있으면 어딘가에서 정확히 계산된 것처럼 읽힙니다. 문장은 정말인가 하고 의심하게 되는데, 숫자는 그런 의심을 잘 안 받습니다. 심사자가 재현성에 만점을 주면서 표본 확인으로 끝낸 것도 같은 이유로 보입니다.

의심받지 않는 형식이 검수를 통과시킵니다.

둘, 22%는 오류율이 아니라 추적 실패율입니다.

27개가 틀렸다는 것이 아니라 맞는지 확인할 경로가 없다는 뜻입니다. 이 둘을 섞으면 “내 논문에 오류가 22% 있다”는 잘못된 문장이 만들어집니다.

검사기를 만들 때 놓치기 쉬운 지점이 여기입니다. 프로그램은 찾았다와 못 찾았다만 구분합니다. 그 못 찾았다가 무엇을 뜻하는지는 프로그램이 정하지 않습니다. 검사기가 내놓는 판정의 의미는 만든 사람이 정의해야 합니다.

셋, 규칙은 그것이 필요하다고 느낀 자리에만 생깁니다.

지어낸 인용이 환자 안전 문제가 된다는 것은 절실했습니다. 그래서 그 자리에는 기권 장치를 넣었습니다. 논문 수치의 출처는 그만큼 절실하게 느껴지지 않았고, 그래서 장치가 없었습니다. 원칙을 만들어 두었다고 해서 그 원칙이 저절로 다른 자리까지 가지는 않습니다.

출발점

두 주를 지나고 보니 처음 질문이 바뀌었습니다.

검수는 AI가 틀리지 않게 만드는 장치가 아니라, 무엇을 자동으로 거절하고 무엇을 정답과 대조하며 무엇을 모른다고 표시할지 미리 정하는 장치였습니다.

그리고 그 세 번째 칸이 제일 자주 비어 있습니다. 모른다고 표시하는 것은 성능을 깎아 보이게 만들기 때문입니다.

다음

  • 성능 지표 21개의 계산 스크립트를 만듭니다. 지금은 값만 있고 과정이 없습니다.
  • 퍼센트에 분모를 붙입니다. 21.4%가 아니라 21.4%(12/56)로 씁니다.
  • 원고에도 기권 표시를 넣습니다. 계산 근거가 아직 없는 수치는 그렇다고 적습니다.

검사기는 다시 돌릴 수 있게 저장소에 넣어 뒀습니다. 원고를 고칠 때마다 27이 줄어드는지 확인하면 됩니다.

논문은 아직 발표 전이라 연구 결과 자체는 이 글에 담지 않았습니다. 여기 적은 것은 검수 과정에 관한 사실뿐입니다.

Updated: