
[21] Cellect Epitope - Summary
| Point 1. 왜 이 프로젝트를 시작했나? |
| 항체 신약 개발에서 가장 어려운 단계 중 하나는 항체가 실제로 결합할 수 있는 항원의 Epitope를 찾는 일입니다. 이 과정은 현재도 대부분 Wet-lab 실험에 의존하고 있으며, 반복 실험으로 인한 높은 비용과 후보 선별에 소요되는 긴 개발 기간이라는 현실적인 한계를 안고 있습니다. 기존 AI 기반 epitope 예측 모델도 존재하지만 실제 실험 환경과 맥락을 충분히 반영하지 못한다는 점에서 현장 적용에는 한계가 있었습니다. |
| Point 2. Cellect Epitope의 접근 방식 |
| Cellect Epitope는 단순 예측 모델이 아니라 “이 Epitope가 왜 유력한가?”를 설명해주는 의사결정 보조 플랫폼입니다. 연구자는 단순 점수뿐 아니라 실험 조건, 구조적 노출 여부, 그리고 화학적 결합 가능성까지 함께 확인하며 납득 가능한 후보를 선택할 수 있습니다. |
| Point 3. 핵심 모델링 전략 |
| PLM 병행 전략: (a) ProtT5 - 기존 데이터 분포 내에서 epitope 패턴을 정밀 분석 (b) ESM-2 - 데이터베이스에 없는 신규 항원에 대한 일반화 성능 확보 → 정확도와 확장성을 동시에 확보하기 위한 이중 모델 전략 2-Stage Cascade 예측 파이프라인: (Stage 1) CatBoost - Recall 중심 필터링으로 유망 후보를 최대한 보존 (Stage 2) XGBoost - Precision 중심 선별로 실제 결합 가능성 높은 후보만 유지 → 실험 전 단계에서 후보 수를 효율적으로 압축 |
| Point 4. 예측 신뢰성을 높이기 위한 3단계 검증 |
| 1. 점수 기반 검증: 다단계 예측 결과를 통합한 Final Score 2. 구조 기반 검증: ESMFold 연동, epitope의 단백질 표면 노출 여부 확인 3. 화학적 검증: In-silico mutagenesis 및 소수성 지표 분석을 통한 hotspot 식별 |
| Point 5. 데이터 기반 성과 및 프로젝트의 가치 |
| 전체 후보 중 약 91% 선제 제거, True Positive 유지하면서 실험 대상 범위 대폭 축소, 실험 방식·질병 상태에 따른 결합 편차 학습 성공 → 연구 비용 절감 & 개발 기간 단축, 점수·구조·화학 지표 기반 설명 가능한 AI, 실제 연구 환경을 반영한 실무 중심 솔루션 |
| 구분 | 내용 | 링크 |
프로젝트 개요 및 설계 |
프로젝트 노션 | https://www.notion.so/teamsparta/2d52dc3ef514811a876af52264105da3 |
| SEPHO 팀 노션 | https://www.notion.so/teamsparta/4-2fc2dc3ef5148064873dcc776ea0ba95 | |
| 모델 및 결과 정리 | PPT (결과 보고서) | https://www.canva.com/design/DAG6VQIGPI8/hh5ZaGcGf7E2NPp4wGdoYQ/edit |
| 대시보드 | HuggingFace | https://huggingface.co/spaces/yunuk0/epitope |
| 문제 설명 | solution.py |
#138 Ax + By + C = 0으로 표현할 수 있는 n개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리려 합니다. 예를 들어, 직선 5개를 좌표 평면 위에 그린 후, 정수로 표현되는 교점에 별을 그리면 다음과 같습니다.![]() 위의 그림을 문자열로 나타낼 때, 별이 그려진 부분은 *, 빈 공간(격자선이 교차하는 지점)은 .으로 표현하면 다음과 같습니다. "....*...." "........." "........." "*.......*" "........." "........." "........." "........." "*.......*" 직선 A, B, C에 대한 정보가 담긴 배열 line이 매개변수로 주어집니다. 이때 모든 별을 포함하는 최소 사각형을 return 하도록 solution 함수를 완성해주세요. |
from itertools import combinations
import math
def solution(line):
dots_x = []
dots_y = []
for f1, f2 in combinations(line, 2):
a, b, e = f1
c, d, f = f2
if a * d - b * c == 0:
continue
x = (b * f - e * d) / (a * d - b * c)
y = (e * c - a * f) / (a * d - b * c)
if x == int(x) and y == int(y):
dots_x.append(int(x))
dots_y.append(int(y))
a = max(dots_x) - min(dots_x)
b = max(dots_y) - min(dots_y)
answer = [['.'] * (a + 1) for _ in range(b + 1)]
for i in range(len(dots_x)):
x = dots_x[i] - min(dots_x)
y = -(dots_y[i] - max(dots_y))
answer[y][x] = '*'
return [''.join(a) for a in answer]
|
'내일배움캠프 QAQC 3기 > 최종 프로젝트' 카테고리의 다른 글
| 최종 프로젝트 32일차: [22] Cellect Epitope – Technical Q&A (0) | 2026.02.11 |
|---|---|
| 최종 프로젝트 30일차: [20] 최종 결과물 - PPT (0) | 2026.02.09 |
| 최종 프로젝트 29일차: [19] 최종 결과물 - 대시보드 (5) (0) | 2026.02.06 |
| 최종 프로젝트 28일차: [18] 최종 결과물 - 대시보드 (4) (0) | 2026.02.05 |
| 최종 프로젝트 27일차: [17] 최종 결과물 - 대시보드 (3) (0) | 2026.02.04 |
