medsci-skills
medsci-skills 6.0: 다시 점검했더니 틀린 결과가 나왔습니다
6.0에서는 기능을 거의 늘리지 않고, 스킬을 줄이고 전체를 다시 점검했습니다. 표본수, 비식별화, 참고문헌 검증, 메타분석에서 틀린 결과를 내던 곳을 고쳤고, 이전 버전으로 얻은 결과 중 다시 확인해야 할 것을 정리했습니다.
6.0에서 한 일
9월에 스타 300개를 넘겼을 때, 앞으로는 기능을 늘리기보다 의학 연구에서 따로 확인해야 할 기준을 다듬겠다고 썼습니다. 6.0이 그 작업입니다. 새 기능은 거의 넣지 않았고, 있던 것을 줄인 뒤 처음부터 다시 점검했습니다.
스킬은 59개에서 54개가 됐습니다. 영상 데이터와 모델 개발 관련 스킬 12개를 7개로 합쳤고, 옛 이름은 v7 전까지 그대로 동작합니다. 각 스킬의 설명서(SKILL.md)는 모두 합쳐 약 15만 8천 단어에서 10만 9천 단어로 3분의 1 가까이 줄었습니다. 1,070줄이던 README는 181줄입니다. 설명서가 길면 에이전트가 중간의 지시를 놓치기 쉽고, 처음 온 사람은 무엇부터 해야 할지 찾기 어렵습니다.
점검에서 나온 오류
점검은 코드, 개인정보, 원문 대조, 통계, 개발 과정, 문서, 호스트 호환성, 비슷한 저장소와의 비교로 나눠 진행했습니다. 결과 숫자를 바꾸는 오류가 여럿 나왔습니다.
- 표본수 계산: 일부 공식이 필요한 대상자 수를 최대 4배 가까이 적게 냈습니다. 생존분석에서 위험비 0.7, 1:1 배정이면 사건 247개가 필요한데 62개로 계산하는 식이었습니다.
- 비식별화: 스캔이 판단하지 못한 열(자유 서술, ID처럼 생긴 숫자, 이름에 식별 단어가 들어간 열)을 안전하다고 표시했고, Enter만 누르면 그대로 남았습니다. 스캔 보고서에 실제 셀 값이 적히기도 했습니다.
- 참고문헌 검증: 존재하지 않는 DOI와 지어낸 제목을 단 참고문헌이 확인된 것으로 나올 수 있었습니다.
- 메타분석: R 템플릿이 평균 차이와 표준화 평균 차이를 비율처럼 지수 변환했습니다.
- 라디오믹스: 교차검증을 행 단위로 나눠서, 같은 환자의 병변이 학습과 검증 양쪽에 들어가 AUROC가 부풀 수 있었습니다.
- 통계 템플릿: 설문 가중 분석의 신뢰구간이 표본 설계를 반영하지 않아 지나치게 좁았고, Cox 회귀의 기본 설정이 위험비를 1 쪽으로 당겼습니다. 성향점수, 결정곡선 등에서도 몇 군데가 더 나왔습니다.
보안 문제 두 건(비식별화 보고서에 남던 개인정보, 문헌 검색·모델 뼈대 스크립트의 코드 주입 가능성)은 GitHub 보안 권고로 따로 공개했습니다.
같은 날 나온 여섯 군데
Claude로 만들고 Claude로 점검하면 같은 곳을 놓치는 경우를 여러 번 겪었습니다. 그래서 이번에는 OpenAI의 Codex에게 다시 검토를 맡겼습니다. 영역별 수정이 끝났다고 보고된 뒤 최종 변경 전체를 Codex가 다시 보았고, 그 단계에서만 17건이 더 나왔습니다. 통계 계산은 R의 표준 패키지(survey, MatchIt, lme4, dcurves 등)로 같은 데이터를 돌린 값과 직접 대조했고, 고친 오류마다 고치기 전 코드에서는 실패하는 시험을 붙였습니다.
그렇게 했는데도 6.0을 낸 날 Codex에게 저장소 전체를 다시 평가하게 했더니, 확인하지 않고 통과라고 말하는 곳이 여섯 군데 더 나왔습니다.
- 참고문헌 검증은 DOI가 실제로 있으면 인용된 제목을 비교하지 않았습니다. 진짜 DOI에 지어낸 제목을 붙여도 통과했습니다.
- 비식별화는 검토가 끝난 뒤 바뀐 데이터도 그대로 적용했습니다.
- 영상 전처리 점검은 빈 입력 파일에도 누수가 없다고 했습니다.
- 통계 해석 안내는 상관계수의 절댓값을 써서, 음의 관련이 증가처럼 읽혔습니다.
- 통계 템플릿 시험은 중간에 멈춰도 통과로 셌습니다.
- 설치 문서는 R이 필요 없다고 잘못 적고 있었습니다.
같은 날 6.0.1로 고쳤습니다. 고친 뒤에도 Codex에게 두 번 더 보게 했고, 실제 참고문헌 50개를 CrossRef와 PubMed에 조회해 고치기 전과 판정이 같은지 확인했습니다. 진짜 DOI에 지어낸 제목을 붙인 경우는 6.0.0에서는 통과했고 6.0.1에서는 걸렸습니다.
이전 버전으로 얻은 결과가 있다면
아래 결과를 이전 버전으로 얻으셨다면 6.0.1 이후 버전(지금 최신은 6.1.0)으로 한 번 더 돌려 보시기를 권합니다.
/calc-sample-size로 계산한 표본수 전부/deidentify에서 권장값을 그대로 받아들여 만든 파일. 분류되지 않았던 열을 다시 확인해 주십시오. 이전 버전의 스캔 보고서와 감사 기록은 원자료와 같은 곳에 두고, 비식별화한 결과와 함께 보관하지 않는 편이 안전합니다./meta-analysis템플릿으로 분석한 연속형 결과/verify-refs로 확인한 참고문헌 목록(6.0.0으로 확인한 목록 포함)/radiomics-ml템플릿의 교차검증 결과/analyze-stats템플릿으로 만든 설문 가중 OR과 신뢰구간, Cox 위험비, 성향점수 효과, 결정곡선- 검토한 뒤 원본 파일을 고치고 적용한 비식별화 결과, 음의 상관을 말로 풀어 쓴 문장
전체 목록은 6.0.0 릴리스 노트와 6.0.1 릴리스 노트 맨 앞에 있습니다.
업데이트는 설치한 방법대로 하시면 됩니다. npx로 설치했다면 npx medsci-skills@latest install, 수업용 설치 파일을 썼다면 바탕화면의 Update MedSci Skills 아이콘, Claude Code 플러그인이라면 /plugin에서 수동 업데이트입니다. 이름이 바뀐 스킬과 채널별 방법은 업그레이드 안내에 정리했습니다.
남은 한계
AI로 만든 도구를 AI로만 검토하는 데는 한계가 있습니다. Codex와 Claude는 서로 다른 회사의 모델이지만, 둘 다 제가 정한 범위 안에서 봅니다. 통계나 개인정보를 전문으로 하는 사람이 독립적으로 검토한 적은 아직 없습니다. 이 분야를 보시는 분이 한 부분이라도 봐주신다면 큰 도움이 되겠습니다.
처음 보는 분들의 기여
이번 버전에는 모르는 분들이 보낸 변경 두 건이 들어갔습니다. 이탈리아의 개인정보 형식(Codice Fiscale 등)을 인식하는 비식별화 언어 팩, 그리고 비교 대상이 부적절한 논문을 심사할 때 참고하는 예시 리뷰입니다.
저장소는 github.com/Aperivue/medsci-skills에 있습니다. 이전 버전 결과를 다시 돌려보시다가 이상한 점이 보이면 GitHub 이슈로 알려 주십시오.