제1회 신약개발 AI 경진대회

알고리즘 | 분자 구조 | 정형 | 회귀 | 바이오 | RMSE

  • moneyIcon 상금 : 2,900만원
  • 1,690명 마감

 

FingerPrint EDA

2023.09.24 13:07 2,295 조회 language

SMILES 같은 건 너무 어려울 거라 생각했는데, rdkit은 대단한 라이브러리네요.

1. 데이터 불러옵니다.

2. 각각의 분자 구조에서 RDkit, Atompair와 같은 다양한 fingerprint를 추출할 수 있고, Tanimoto Similarity 등으로 두 분자 간 유사도를 측정할 수 있습니다. 
  -  train 분자들의 유사도 분포와, test 분자들의 유사도 분포, train과 test 분자 간의 유사도 분포가 모두 비슷합니다.
  - 혹시라도 test 데이터의 분자들의 fingerprint 속성이 train과 확연히 다르다면 유사도 분포로 달라야 할텐데, 비슷한 것으로 보입니다.

  - 유사도, 거리의 개념을 활용하면 kNN 과 같은 일반적인 분류 알고리즘으로 확장할 수도 있습니다. 그런데 거리는 가까워도 HLM, MLM의 값이 크게 다른 경우가 많았습니다. 아마도 유사도는 모든 fingerprint(보통 2048개)를 활용하지만 실제 약물의 특성은 그 중 일부 요소의 영향이 크기 때문일 겁니다.
  
  - 유사도, 거리의 개념은 군집화(clustering)에도 활용 가능합니다. 두 fingerprint의 유사도 합을 활용해서 train 데이터를 10개 군집으로 나눠봤습니다. 
  - 군집별 평균 HLM, MLM으로 예측 값을 계산해봤지만 역시 별로입니다. 이유는 위의 kNN과 동일할 것 입니다.

3. fingerprint 들은 bit와 count로 구분되더라구요. bit는 0과 1로 count는 해당되는 패턴의 개수(count)로 표현됩니다. 
    다양한 fingerprint 들의 4-layer MLP를 구성했었는데, count의 경우 처리가 애매해서 bit를 썼습니다. 
    트리 기반 모형에는 count가 더 효율적일 것 같고, Descriptors.CalcMolDescriptors()로 이런저런 변수를 추가한 tree 기반의 xgboost를 붙여봅니다. 

코드
로그인이 필요합니다
0 / 1000
Statistics
2023.09.24 13:14

4. 앞선 예제 공유에서도 언급되었듯이, augmentation이 필요할 것 같은데 방법이 마땅치 않습니다. 
    기존 fingerprint에 잡음을 추가하는 것도 좋을 것 같긴한데, 찾다보니 어떤 논문에서 BRICS decomposition 언급이 있었고 한번 해봤습니다.
   자세히는 모르겠지만 측정한 분자 연결고리를 끊는 방법으로 보입니다.
   위에서 m과 res[2]를 비교해보면 꼬리 하나 잘려 있습니다. 

   앞서 2.에서 나온 유사도로 계산해보면 0.9의 값이 나오는데, 이것은 train에 있는 다른 분자 간의 유사도와 비교하면 매우 높은 값입니다. 
   그럼 이 잘린 분자를 활용해서 fingerprint를 augmentation을 할 수 있다는 것이 그 논문의 요지 인 것 같네요.
   잘 다루면 미묘한 성능 개선은 있었던 것 같은데, 아무래도 target 변수인 HLM, MLM이 워낙 변동이 커서 그런지 생각보다는 별로라고 생각이 드네요.

Statistics
2023.09.24 13:21

train의 HLM, MLM 전체 평균으로 제출했을 때의 스코어가 35.97였습니다.
분자 구조를 활용해도 target을 정확하게 설명하기가 어렵기 때문에 quantile regression으로 범위를 잡는 것도 좋을 것 같습니다.