같은 RNA-seq 데이터를 OpenAI 플러그인으로 다시 돌려봤습니다
AI와 함께하는 생명과학 연구 · 3편
안녕하세요, 테라입니다.
928개와 920개.
같은 데이터를 두 가지 도구로 분석했을 때 나온 유의 유전자 수입니다. 회사에서 전사체 분석을 하던 시절에도 이런 순간이 종종 있었습니다. 파이프라인을 바꾸거나 패키지 버전이 올라간 뒤 결과를 다시 돌리면, 숫자가 조금씩 어긋났습니다.
숫자가 다르면 설명이 필요합니다. 그 설명을 찾는 일은 도구가 대신해주지 않았습니다.
지난 글에서는 Claude Science로 공개 RNA-seq 데이터를 찾고, 분석하고, 해석까지 시켜본 이야기를 했습니다. 그 글 끝에 적은 질문 중 하나가 이것이었습니다. "결과가 내 설명과 다를 때, 설명을 바꿀 것인가 근거를 다시 볼 것인가?"
이번에는 같은 데이터를 OpenAI에서 제공하는 도구로 분석해 보았습니다. 오늘은 플러그인을 고르는 데서부터, 여덟 개 차이가 어디서 왔는지 따라간 과정까지 이야기하려고 합니다. 지난 Claude Science와 어떤 차이점이 있는지 이야기해 보겠습니다.
플러그인 목록에서 "Life Science"를 검색했습니다
OpenAI의 경우는 새로운 플랫폼을 설치하는 것이 아닌, ChatGPT와 Codex의 플러그인 목록에서 필요한 것을 골라 설치하는 방식이었습니다.
그림 1. 플러그인 목록에서 "Life Science"로 검색한 화면. 데이터베이스 조회, 문헌 검색, NGS 분석, 단백질 실험 관리 등 생명과학 관련 플러그인이 따로따로 올라와 있습니다.
Rosalind Workbench는 연구 예제가 모여 있는 작업 공간이고, Life Sciences NGS Analysis에는 RNA-seq 차등발현을 비롯한 분석 절차가 "스킬"이라는 형태로 들어 있습니다. 스킬은 분석 절차를 적어둔 안내서와 실행 코드의 묶음이라고 이해하면 됩니다. 설치하면 대화 중에 "이 스킬로 분석해줘"라고 불러 쓸 수 있습니다.
이번 계산은 Codex 대화 안에서 NGS Analysis 1.0.3의 스킬과 실행기를 사용하는 방식으로 진행했습니다. 미리 밝혀둘 것이 있습니다. OpenAI가 따로 소개한 GPT-Rosalind라는 전문 모델을 사용하지 않았습니다. 플러그인을 설치하는 것과 그 모델에 접근할 권한을 얻는 것은 별개였습니다. Workbench의 예제 카드를 눌러 새 작업을 시작한 것도 아니고, 대화에서 직접 스킬을 불러 썼습니다.
공식 문서를 읽고, 필요한 패키지를 설치했습니다
설치했다고 바로 분석이 시작되지는 않았습니다. 스킬의 공식 문서를 먼저 읽어야 했습니다. 어떤 입력 형식을 받는지, 컴퓨터에 어떤 도구가 있어야 하는지, 결과가 어디에 어떤 이름으로 남는지가 거기 적혀 있었습니다.
문서가 안내하는 흐름은 이랬습니다. 입력 파일을 점검하고, 컴퓨터에 있는 분석 도구를 확인한 뒤, 로컬에서 분석을 실행해 결과표와 로그를 남긴다. 읽어보니 회사에서 하던 순서와 크게 다르지 않았습니다. 다만 Claude Science가 R과 DESeq2가 설치된 전용 환경을 스스로 준비해주었던 것과 달리, 여기서는 제 컴퓨터의 환경을 그대로 쓰는 구조였습니다.
분석 과정에서는 limma 패키지 설치가 필요했고, 설치를 진행한 이후 limma와 그에 딸린 statmod가 프로젝트 전용 위치에 추가됐습니다. 기존 환경은 건드리지 않았습니다. 그러고 나서야 실행이 끝까지 갔습니다.
데이터는 같게, 조건은 밝혀두고
사용한 데이터는 지난 글과 같은 GSE307424입니다. 폐암 세포주(NCI-H1693)에 PRT3789를 처리하고 6시간·48시간·72시간에 유전자 발현을 측정한 18개 표본. 이번에도 원시 시퀀싱 파일이 아니라 공개된 유전자 발현표에서 시작했습니다.
파일은 NCBI 서버에서 새로 내려받았고, 지난번 파일과 해시값이 일치했습니다. 43,236개 유전자 가운데 지난번과 같은 기준으로 저발현 유전자를 걸러 16,400개를 남겼습니다. 여기까지가 "같은 재료"를 확인하는 과정이었습니다.
조건도 적어둡니다. 이번에는 R과 DESeq2가 설치된 기존 환경을 그대로 썼습니다. 그래서 새 컴퓨터에 처음부터 환경을 꾸리는 경험이나, 두 서비스의 준비 시간을 나란히 비교한 시험은 아닙니다. 저는 지난 결과를 이미 알고 있었고, Codex도 같은 대화에서 그 맥락을 읽었습니다. 눈을 가리고 한 시험이 아닙니다.
한 가지 더. 데이터를 내려받고, 표본 이름을 해석해 표로 바꾸고, 필터를 적용하고, 분석 전 품질 점검을 하는 준비 작업은 Codex가 했습니다. 스킬의 실행기에 넣기 전에 데이터가 멀쩡한지 먼저 보는 단계입니다.
그림 2. 스킬 실행 전에 Codex가 따로 그린 품질 점검 PCA. 파란색이 대조군, 빨간색이 약물 처리군이고 모양이 시점입니다(동그라미 6시간, 세모 48시간, 네모 72시간). 이 그림은 플러그인의 공식 산출물이 아니라 Codex의 준비 작업입니다.
그 과정에서 표본 이름을 잘못 읽은 것과 작업 경로 오류를 고친 이력이 있습니다. 개입 없이 매끄럽게 끝난 실행이 아니었습니다.
결과를 보려면 도구를 하나 더 설치해야 했습니다
분석이 끝나자 시점별 차등발현 표, 정규화 행렬, PCA와 표본 거리 그림, 실행 로그가 폴더에 생겼습니다. 지난 Claude Science에서는 결과 그림과 해석이 대화 안에 보고서로 바로 나타났는데, 여기서는 파일이 남았습니다.
그림 3·4. NGS Analysis 플러그인의 공식 실행기가 만든 분석 결과 이미지. 왼쪽은 PCA, 오른쪽은 표본 간 거리 열지도이며 손대지 않은 원본 그대로입니다.
플러그인은 이 결과들을 브라우저에서 한 화면으로 살펴볼 수 있는 검토용 노트북도 함께 만들어줍니다. Marimo라는 오픈소스 노트북 도구로 열리는데, 이것도 처음에는 열리지 않았습니다. 필요한 패키지가 없었습니다.
다시 설치를 승인했습니다. Marimo와 표를 읽는 데 필요한 pandas 등을 별도 환경에 추가하자 화면이 열렸습니다. 이미 계산된 결과를 불러오는 것이어서 분석을 처음부터 다시 돌릴 필요는 없었습니다.
화면에는 네 종류의 품질 점검 그림이 있었습니다. 위의 PCA와 표본 거리 열지도, 그리고 평균과 분산의 관계, 표본별 라이브러리 크기. 그 아래로 분석 설계와 표본 지표, 세 시점의 차등발현 결과 표가 이어졌습니다. 표에 검색과 정렬 메뉴가 있어서 결과 파일을 하나씩 여는 것보다 훑어보기가 편했습니다.
몇 가지 불편한 점이 있어요. 하나, 그림 3에서 본 표본 이름 겹침과 범례 잘림은 화면에서도 그대로였습니다. 공개용으로 쓰려면 따로 정리가 필요했습니다. 둘, 이 검토 화면의 큰 결과 표는 앞 200행까지만 불러왔습니다. Marimo 자체의 제한이 아니라 플러그인이 만든 노트북의 설정입니다.
편해진 것은 "한곳에서 훑어보기"였고, 전체를 확인하려면 원본 결과표를 열어야 했습니다.
928개와 920개 사이
이제 숫자입니다. 세 시점에서 유의하게 달라진 유전자 수를 나란히 놓았습니다.
| 시점 | 지난 Claude Science 분석 | OpenAI 플러그인 기본 실행 | 지난 조건에 맞춘 보완 실행 |
|---|---|---|---|
| 6시간 | 928 | 920 | 928 |
| 48시간 | 7,045 | 7,045 | 7,045 |
| 72시간 | 7,230 | 7,230 | 7,230 |
48시간과 72시간은 같았습니다. 6시간만 여덟 개 차이가 났습니다.
"거의 같으니 됐다"고 넘어갈 수도 있었습니다. 그런데 회사 시절 버릇이 남아서, 왜 다른지를 봤습니다.
먼저 설정이 달랐습니다. 플러그인의 기본 실행기는 처리군과 시점을 합친 여섯 개 조건으로 모델을 세웁니다. 지난 분석은 시간과 처리를 따로 두고 둘의 상호작용까지 보는 설계였습니다. 유의 기준을 정하는 방식도 달랐습니다. 최종 집계는 양쪽 다 조정 p값 0.05로 했지만, 그 앞 단계에서 유전자를 걸러내는 기준(독립 필터)이 기본값 0.1로 잡혀 있었습니다.
그래서 유의 기준만 맞춰봤습니다. 927개가 나왔습니다. 928개와 하나 차이입니다. 그런데 유전자 하나하나를 대조하니 판정이 다른 유전자가 11개였습니다. 개수가 비슷하다고 같은 유전자인 것은 아니었습니다. 기본 실행 920개도 마찬가지였습니다. 개수 차이는 8이지만 판정이 바뀐 유전자는 10개였습니다.
"같은 개수인가"와 "같은 유전자인가"는 다른 질문이었습니다.
설계까지 지난번과 똑같이 맞춰 다시 계산하자 세 시점 모두 판정이 바뀐 유전자가 0개가 됐습니다. 효과 크기와 p값도 소수점 아래 아주 먼 자리에서만 달랐습니다. 파일이 바이트 단위로 같은 것은 아니지만, "같은 재료, 같은 요리법이면 같은 결과"라는 것은 이번에도 확인했습니다.
표본 하나를 빼면 결론이 바뀌는가
지난 분석에 있었던 두 가지도 보완 코드로 다시 했습니다.
시간과 처리의 상호작용 검정에서는 지난번과 같은 4,213개 유전자가 유의했습니다. 이 검정은 플러그인 기본 실행기가 직접 제공하지 않아서 따로 계산했습니다.
민감도 분석은 48시간 대조군 표본 하나를 빼고 17개로 다시 돌리는 것이었습니다.
| 시점 | 18표본 | 17표본 | 유의성을 잃은 유전자 | 새로 유의해진 유전자 |
|---|---|---|---|---|
| 6시간 | 928 | 991 | 13 | 76 |
| 48시간 | 7,045 | 6,222 | 1,101 | 278 |
| 72시간 | 7,230 | 7,311 | 78 | 159 |
전체 패턴은 비슷했습니다. 그런데 48시간에서 1,101개 유전자가 유의성을 잃었습니다. 지난 글에서 "평균적으로 안정적이라는 말과 개별 유전자가 모두 안정적이라는 말은 다르다"고 적었는데, 그 말을 숫자로 다시 본 셈입니다. 이 결과만으로 그 표본을 빼야 한다고 판단하지는 않았습니다. 표본을 빼려면 실험 기록 같은 다른 근거가 있어야 합니다.
지난 글에서 살펴본 항원 처리·제시 관련 유전자들(TAP1, HLA-A/B/C, PSMB8/9)의 후반 상승과, B2M이 유의하지 않다는 결과도 다시 나왔습니다. 그렇지만 이건 같은 데이터를 같은 방법으로 다시 계산한 것입니다. 새로운 생물학적 발견도, 단백질이나 세포 기능에 대한 증거도 아닙니다. 측정한 것은 여전히 mRNA입니다.
Claude Science와 달랐던 세 가지
| Claude Science (지난 글) | OpenAI NGS Analysis 플러그인 (이번 글) | |
|---|---|---|
| 시작 방식 | 프로젝트 하나를 열고 대화로 시작 | 플러그인 목록에서 골라 설치, 대화에서 스킬로 호출 |
| 분석 환경 | R·DESeq2 전용 환경을 대화 안에서 준비 | 스킬 공식 문서를 읽고 내 컴퓨터에 부족한 패키지(limma 등)를 직접 설치 |
| 결과 확인 | 그림·표·해석이 대화 안에 보고서로 표시 | 결과 파일이 폴더에 남고, 검토 도구(Marimo)를 설치해 브라우저에서 확인 |
어느 쪽이 낫다는 이야기는 아닙니다. 하나는 환경까지 맡기는 방식이고, 하나는 내 환경 위에서 절차를 빌려 쓰는 방식입니다. 무엇을 직접 챙겨야 하는지가 다를 뿐입니다.
이 경험의 조건을 밝혀둡니다
지난 글과 같은 이유로 조건을 적습니다.
같은 R 환경을 재사용했고, 지난 결과를 알고 있는 상태에서 진행했습니다. 그래서 두 서비스 중 어느 쪽이 더 정확한지, 성능 순위가 어떤지는 이 경험으로 말할 수 없습니다. 처음 분석하는 사람이 혼자 해낼 수 있는지, 시간이 얼마나 줄어드는지도 재지 않았습니다. 새 컴퓨터에서 환경을 처음부터 꾸리는 시험, 원시 시퀀싱 파일에서 다시 정량하는 작업, 정식 경로 분석도 하지 않았습니다.
그래도 남은 것은 있습니다. 지난 글에서 Claude Science가 결과표를 연구 질문으로 이어주는 모습을 봤다면, 이번에는 같은 데이터를 다른 도구에 넣었을 때 어디서 사람의 판단이 필요한지를 봤습니다. 빠진 패키지를 설치할지, 설정 차이를 어떻게 맞출지, 200행만 보이는 화면을 어디까지 믿을지, 8개 차이를 넘어갈지 파고들지. 계산은 도구가 했지만, 이 판단들은 연구자가 해야 합니다.
마무리
정리하면 이렇습니다.
- OpenAI는 생명과학 기능을 플러그인과 스킬로 제공합니다. 설치하면 대화에서 불러 쓸 수 있지만, 공식 문서를 읽고 부족한 분석 패키지(limma)와 결과 검토 도구(Marimo)를 직접 설치해야 실행과 확인이 가능했습니다.
- 같은 데이터에서 나온 유의 유전자 928개와 920개의 차이는 분석 설계와 필터 설정에서 왔고, 조건을 맞추자 판정이 바뀐 유전자는 0개였습니다. 개수가 비슷한 것과 같은 유전자인 것은 다른 이야기였습니다.
- 상호작용 검정과 민감도 분석은 플러그인 범위 밖이어서 따로 코드를 썼습니다. 같은 R 환경에서 결과를 알고 진행한 단일 사례이므로 도구 간 정확도나 순위는 말할 수 없습니다.
지난 글에서는 결과표를 받은 뒤 스스로에게 묻는 네 가지를 적었습니다. 이번에는 도구를 바꿔 같은 분석을 할 때 확인하게 된 것들을 덧붙입니다.
다른 도구로 같은 분석을 다시 할 때 확인하는 네 가지
- 재료가 같은가? (파일 해시, 필터 기준, 남은 유전자 수)
- 요리법이 같은가? (설계식, 유의 기준, 그 앞 단계의 필터 설정)
- 개수가 같다고 같은 유전자인가? (유전자별 판정 대조)
- 화면에 보이는 것이 전부인가? (표시 행 수, 포함되지 않은 분석)
여러분은 분석 도구를 고를 때, 결과가 나오는 속도와 결과가 만들어진 과정을 확인하는 편의성 중 어느 쪽을 중요하게 보시나요?
이 글은 2026년 9월 22일 OpenAI Life Sciences NGS Analysis 1.0.3 플러그인을 Codex 대화에서 사용한 기록을 바탕으로 썼습니다. GPT-Rosalind 모델을 사용한 시험은 아닙니다. 기존 R 4.5.3·DESeq2 1.50.2 환경을 재사용했고, 지난 Claude Science 분석 결과를 알고 있는 상태에서 진행한 단일 사례입니다. 제품 간 성능 비교, 초보자의 독립 수행, 시간 절감 측정은 아닙니다. 사용한 데이터는 GEO GSE307424의 공개 유전자 발현표입니다.
AI와 함께 일하는 방식을 배우는 곳





댓글
댓글 쓰기