프로젝트 1주차 타임라인 (Tue Dec 30 2025)


[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]

 

+ Recent posts