
[1] 프로젝트 개요 및 데이터 전처리
프로젝트 기획서 | Notion
Hosted by Notion Sites — The easiest way to get a website up and running.
www.notion.so
연속된 아미노산 서열로 이루어져 있어 peptide 백신 설계나 합성 항원 개발, 항체 스크리닝 과정에서 비교적 직접적으로 활용하기 쉬움
* 목표: 백신과 면역치료제 개발 과정에서 B-cell linear epitope를 보다 효율적으로 예측하기 위한 인공지능 모델을 개발하는 것
항원을 인식해 항체를 생성하고, 항체는 항원의 특정 서열 영역과 결합해 면역 반응을 유도
B세포 면역 반응의 핵심은 항체가 실제로 결합할 수 있는 epitope의 존재 여부로, 이 정보를 실험 이전 단계에서 예측할 수 있다면 백신 후보나 항체 치료제 타겟을 선별하는 과정에서 불필요한 실험을 줄이고 전체 개발 속도를 크게 높일 수 있다.
"B-cell Linear Epitope 존재 여부 예측 모델 개발"
실험 데이터를 바탕으로 특정 peptide 서열이 항체와 결합 가능한 epitope를 포함하고 있는지를 예측하는 모델을 구축
| 입력 | 실험에 사용된 peptide 서열 (epitope_seq), 항원의 전체 아미노산 서열 (antigen_seq), 메타데이터 (assay 정보, 질병 정보 등) |
| 출력 | 해당 peptide 내부에 B-cell epitope가 존재할 확률 (0: Negative, 1: Positive) |
* 한계: 실험 오차와 기록 노이즈 존재, 다양한 실험 기법이 섞여 있음, peptide 길이가 제각각, 면역 반응 자체가 본질적으로 불확실함
주요 변수 설명 및 결측치 처리
백신 데이터 | Notion
데이터 설명
www.notion.so
실험 결과를 암시하는 정보는 입력에서 차단하기 위해
1. 불필요한 변수 제거 (viz. number_of_tested, number_of_responses, antigen_code, qualitative_label, reference_*)
메타 정보 및 중복 변수 제거
2. Epitope 길이 필터링 (8-25aa) - 생물학적 타당 범위(Das&Frishman, 2025), 극단적 noise 제거, 모델 입력 안정성 확보
3. antigen_seq 기반 start_position이 맞지 않는 mismatch 1건(ID 356551) 제거
4. disease_state 결측치 제거 후 인덱스 재정렬
5. 컬럼명 변경 및 코드 변수명 통일
6. assay_group, assay_method, disease_type에 태깅 적용 (+ test 데이터 내 카테고리 확인)
Plan
Epitope 서열의 면역원성은 고정된 값이 아니라 어떤 실험 조건과 어떤 질병 맥락에서 관측되었는지에 따라 서로 다른 label로 기록될 수 있다. 따라서 각 변수가 label에 미치는 영향을 함께 고려하여 label noise의 구조와 epitope–context 간 상관관계를 이해해야 한다.
[1] label 신뢰도 분석
→ assay_group별 Positive 비율 계산, 동일 epitope의 assay_group 간 P/N 불일치 확인, 신뢰도 높은 assay_group 후보 정리
[2] 관측 변동성의 원인
→ assay_method별 Positive 비율 비교, 동일 epitope 기준 method 간 label 불일치율 계산, in vivo vs in vitro 결과 비교
[3] 면역 반응이 관측된 생물학적 맥락
→ disease_type별 Positive 비율 확인, 동일 epitope의 disease_type 간 label 변화 확인, 질병 의존적 반응 epitope 후보 정리
[+] 유사 epitope 분석 및 label noise의 주요 원인 가설 설립
→ 유사 epitope 정의 기준 결정, 유사 epitope 간 P/N 불일치 사례 수집, 불일치 원인(assay / method / disease) 매핑
| 문제 설명 | solution.py |
| #111 메리는 여름을 맞아 무인도로 여행을 가기 위해 지도를 보고 있습니다. 지도에는 바다와 무인도들에 대한 정보가 표시돼 있습니다. 지도는 1 x 1크기의 사각형들로 이루어진 직사각형 격자 형태이며, 격자의 각 칸에는 'X' 또는 1에서 9 사이의 자연수가 적혀있습니다. 지도의 'X'는 바다를 나타내며, 숫자는 무인도를 나타냅니다. 이때, 상, 하, 좌, 우로 연결되는 땅들은 하나의 무인도를 이룹니다. 지도의 각 칸에 적힌 숫자는 식량을 나타내는데, 상, 하, 좌, 우로 연결되는 칸에 적힌 숫자를 모두 합한 값은 해당 무인도에서 최대 며칠동안 머물 수 있는지를 나타냅니다. 어떤 섬으로 놀러 갈지 못 정한 메리는 우선 각 섬에서 최대 며칠씩 머물 수 있는지 알아본 후 놀러갈 섬을 결정하려 합니다. 지도를 나타내는 문자열 배열 maps가 매개변수로 주어질 때, 각 섬에서 최대 며칠씩 머무를 수 있는지 배열에 오름차순으로 담아 return 하는 solution 함수를 완성해주세요. 만약 지낼 수 있는 무인도가 없다면 -1을 배열에 담아 return 해주세요. |
from collections import deque
def solution(maps):
n, m = len(maps), len(maps[0])
visited = [[False]*m for _ in range(n)]
result = []
directions = [(1,0), (-1,0), (0,1), (0,-1)]
for i in range(n):
for j in range(m):
if maps[i][j] != 'X' and not visited[i][j]:
queue = deque([(i, j)])
visited[i][j] = True
total = int(maps[i][j])
while queue:
x, y = queue.popleft()
for dx, dy in directions:
nx, ny = x + dx, y + dy
if 0 <= nx < n and 0 <= ny < m:
if maps[nx][ny] != 'X' and not visited[nx][ny]:
visited[nx][ny] = True
queue.append((nx, ny))
total += int(maps[nx][ny])
result.append(total)
return sorted(result) if result else [-1]
|
'내일배움캠프 QAQC 3기 > 최종 프로젝트' 카테고리의 다른 글
| 최종 프로젝트 6일차: [3] EDA + Sliding Window (0) | 2026.01.06 |
|---|---|
| 최종 프로젝트 5일차: [2] Linear Epitope Prediction (0) | 2026.01.05 |
| 최종 프로젝트 4일차: 고장 데이터 분석과 수명 예측 (0) | 2026.01.02 |
| 최종 프로젝트 3일차: 개인 데이터 기반 챗봇 구현, 신뢰성 분석 기초 (0) | 2025.12.31 |
| 최종 프로젝트 1일차: OpenAI API와 LangChain 기초, RCF 기반 패턴 이상탐지와 예지 시스템 (0) | 2025.12.29 |