Open Discovery Challenge 四季 23,886 份評分分析:結合與選擇性接近滿分,ADMET 無人滿分
AI 신약 설계 챌린지 2만 3,886건의 점수표를 뜯어 보니: 만점에 닿은 축과 한 번도 닿지 못한 축
VIDRAFT 分析 Open Discovery Challenge 四季 23,886 份評分,發現排名提交中無人取得 ADMET 滿分。上位50名的 ADMET 得分率為25%至44%,最高分為11.92/15;部分賽季的結合與選擇性得分率則達91%至100%。
TL;DR
- 2026-10-23 08:33(KST)에 오픈 디스커버리 챌린지(ODC)의 공개 API에서 4개 시즌의 채점 결과를 전부 내려받았습니다. 기준물질을 뺀 채점 완료 제출은 2만 3,886건이고, 이 중 순위표에 오른 행은 2만 3,273건, 강등된 행은 613건입니다. 제출 계정은 131곳입니다.
- 순위표 상위 50위의 평균 득점률을 축별로 보면 결합과 선택성은 시즌 1, 2, 4에서 91~100%로 사실상 만점입니다. 반면 ADMET 축은 25~44% 에 머뭅니다. 순위에 오른 2만 3,273건 중 ADMET 15점 만점을 받은 제출은 0건이고, 최고점은 11.92점입니다.
- ADMET 점수가 상위 1%인 제출들은 총점 순위로는 상위 9.5~18.3%에 흩어져 있습니다(네 시즌 모두). 이 제출들은 결합·선택성·활동 축에서 상위 50위보다 낮은 점수를 받았습니다. 한 축을 올리면 다른 축이 내려가는 구조가 데이터에 보입니다.
- 강등 규칙을 빼고 총점만으로 줄을 세우면 시즌 1의 상위 50위 중 38개가 강등 대상이고, 원점수 1위(85.90점)는 공식 1위(84.72점)보다 높습니다. 순위표는 점수만이 아니라 필터로도 만들어집니다.
- 이해관계 고지: ODC는 저희(VIDRAFT, 허깅페이스 조직명 FINAL-Bench)가 운영하고 채점기도 저희 것입니다. 이 글의 점수는 계산 기반 예측이며 실험 측정이 아니고, 제3자 검증도 아닙니다. 모든 수치는 공개 API에서 읽은 값이고 아래 코드로 직접 다시 계산할 수 있습니다.
무엇을 내려받았고, 어떻게 셌나요?
ODC는 허깅페이스에서 운영하는 신약 후보 분자 리더보드입니다. 참가자는 원하는 AI로 분자를 설계해 SMILES 문자열로 제출하고, 채점기가 표적 단백질과의 결합, 인간 유사 단백질에 대한 선택성, 체내 안전성 예측(ADMET) 등을 합쳐 100점 만점으로 점수를 매깁니다. 챌린지 Space는 FINAL-Bench/Open-Discovery-Challenge입니다.
이 글에서 쓴 데이터는 Space가 공개하는 두 엔드포인트가 전부입니다.
-
/api/seasons: 시즌별 주제, 표적, 마감일, 상금, 축별 배점 -
/api/leaderboard?season=N: 시즌별 모든 채점 행. 행마다 6개 축 점수, 총점, 등급(tier), 공개 여부가 들어 있습니다.
제출 분자 자체는 대부분 보이지 않습니다. 채점 완료 2만 3,886건 중 public은 172건, 나머지 99.3%는 제출자가 비공개를 택했습니다. 그래서 이 글은 분자 구조가 아니라 점수 축만 다룹니다. 참가자 이름도 쓰지 않습니다.
행을 셀 때 세 가지를 구분했습니다.
-
기준물질(anchor): 채점기에 함께 올려 둔 비교 기준입니다.
visibility키가 없고 시즌마다 3~19개입니다(합계 39개). 분석에서 뺐습니다. - 채점 실패 행: 축 점수가 비어 있습니다. 도킹 측정 재시도를 소진했거나 채점 중 오류가 난 행으로, 합계 86건이고 뺐습니다.
-
강등 행(
tier2): 채점은 됐지만 순위에서 제외된 행입니다. 사유는 약이 될 수 없는 반응성 구조, 같은 구조의 중복 제출 같은 것입니다. 시즌 1에서 415건, 시즌 2에서 48건, 시즌 3에서 150건, 시즌 4에서 0건입니다. 순위 분석에서는 뺐고, 마지막 절에서 따로 다룹니다.
남는 순위 행은 시즌 1이 6,979건, 시즌 2가 7,004건, 시즌 3이 5,094건, 시즌 4가 4,196건입니다. 시즌 1은 9월 30일에 마감했고, 시즌 2(결핵, 상금 2,000달러)는 10월 31일, 시즌 3(샤가스병)은 11월 30일, 시즌 4(비마약성 진통)는 2027년 1월 31일에 마감합니다.
점수표는 어떻게 생겼나요?
6개 축의 배점은 시즌마다 다르고, 합은 항상 100점입니다.
| 시즌 | 활동 | 결합 | 선택성 | ADMET | 신규성 | 합성 |
|---|---|---|---|---|---|---|
| 1 말라리아 | 30 | 20 | 20 | 15 | 10 | 5 |
| 2 결핵 | 20 | 25 | 25 | 15 | 10 | 5 |
| 3 샤가스병 | 10 | 30 | 30 | 15 | 10 | 5 |
| 4 비마약성 진통 | 10 | 30 | 30 | 15 | 10 | 5 |
시즌이 뒤로 갈수록 활동 배점은 줄고, 결합과 선택성 배점이 늘어납니다. 시즌 3, 4에서는 결합과 선택성만 합쳐도 60점입니다. 반대로 ADMET(15), 신규성(10), 합성(5)은 시즌과 상관없이 같습니다. 이 고정된 30점이 뒤에서 중요해집니다.
참고로 행마다 6개 축의 합은 총점과 거의 같습니다. 시즌 1의 1,074개 행에서 최대 0.023점 차이가 있었지만 반올림 수준이라 총점을 그대로 썼습니다.
상위권은 어느 축에서 만점을 받나요?
순위 행을 총점으로 정렬해 상위 50위를 잡고, 축별 평균 점수를 그 축의 배점으로 나눴습니다(득점률).
| 시즌 | 활동 | 결합 | 선택성 | ADMET | 신규성 | 합성 |
|---|---|---|---|---|---|---|
| 1 말라리아 | 98% | 95% | 91% | 30% | 71% | 76% |
| 2 결핵 | 97% | 100% | 100% | 44% | 77% | 58% |
| 3 샤가스병 | 50% | 94% | 88% | 25% | 88% | 73% |
| 4 비마약성 진통 | 61% | 100% | 100% | 30% | 76% | 73% |
세 가지가 보입니다.
- 결합과 선택성은 시즌 2, 4에서 상위 50위 평균이 거의 100%입니다. 시즌 2에서 결합 만점(25점)을 받은 제출은 순위 행 7,004건 중 831건, 선택성 만점(25점)은 420건입니다. 이 구간에서는 더 세게 붙어도 점수가 오르지 않는 것으로 보입니다. 축 점수에 상한이 걸려 있다는 뜻이고, 이는 배점 설계의 성질이지 분자의 한계를 말하는 것이 아닙니다.
- 시즌 3, 4의 활동 축은 50%, 61%에서 멈춰 있습니다. 활동 배점이 10점으로 작은 시즌이라 상위권이 이 축을 포기했거나 못 채웠다고 읽을 수 있지만, 데이터만으로는 어느 쪽인지 가를 수 없습니다.
- 신규성과 합성은 58~88%로 중간입니다. 배점이 작아서 총점에 미치는 영향도 작습니다.
가장 눈에 띄는 것은 ADMET입니다. 15점짜리 축인데 상위 50위조차 25~44%만 받았습니다.
ADMET 축은 얼마나 안 채워졌나요?
ADMET은 용해도, 투과성, 독성 같은 여러 예측 항목을 묶은 축입니다. 시즌별로 분포를 보면 이렇습니다.
| 시즌 | 순위 행 중앙값 | 1위 제출 | 상위 1% 경계 | 관측 최고 |
|---|---|---|---|---|
| 1 | 3.52 | 3.76 | 8.43 | 11.92 |
| 2 | 4.26 | 7.03 | 7.98 | 11.46 |
| 3 | 2.88 | 3.97 | 6.26 | 11.60 |
| 4 | 3.56 | 5.21 | 8.41 | 9.33 |
2만 3,273건의 순위 행 중 15점 만점은 한 건도 없습니다. 관측 최고는 시즌 1의 11.92점입니다. 시즌 중앙값은 2.9~4.3점, 즉 배점의 19~28% 수준입니다. 그리고 공식 1위 제출들도 ADMET에서는 3.76점(시즌 1), 7.03점(시즌 2), 3.97점(시즌 3), 5.21점(시즌 4)을 받았습니다. 시즌 2의 1위가 그나마 높은 편입니다.
여기서 원인을 단정하지는 않겠습니다. 데이터가 말해 주는 것은 "ADMET이 약하다"가 아니라 "어느 제출도 이 축을 채우지 못했고, 1위들도 예외가 아니다" 까지입니다.
ADMET이 좋은 제출은 순위에서 어디에 있나요?
ADMET 점수 상위 1%(시즌 1 71건, 시즌 2 72건, 시즌 3 52건, 시즌 4 43건)를 따로 뽑아, 총점 순위의 중앙값이 어디인지 봤습니다.
총점 순위 상위 몇 %에 있는지가 시즌 1은 9.5%, 시즌 2는 18.3%, 시즌 3은 9.8%, 시즌 4는 18.1%입니다. ADMET 점수가 가장 높은 제출 한 건만 보면 더 극적입니다. 시즌 1에서는 6,979건 중 607위, 시즌 2에서는 7,004건 중 4,346위, 시즌 3에서는 5,094건 중 150위, 시즌 4에서는 4,196건 중 2,154위입니다.
다른 축을 같이 보면 모양이 드러납니다. ADMET 상위 1% 제출들의 다른 축 평균 득점률을 상위 50위와 비교하면 이렇습니다.
| 시즌 | 활동(상위1% ADMET / 상위50위) | 결합 | 선택성 |
|---|---|---|---|
| 1 | 60% / 98% | 81% / 95% | 52% / 91% |
| 2 | 62% / 97% | 80% / 100% | 69% / 100% |
| 3 | 4% / 50% | 92% / 94% | 41% / 88% |
| 4 | 36% / 61% | 92% / 100% | 75% / 100% |
ADMET이 좋은 제출은 활동, 결합, 선택성 중 하나 이상에서 크게 밀립니다. 특히 시즌 3에서 이 그룹의 활동 득점률은 4%입니다. 상관관계이고 인과는 아닙니다. 다만 한 축을 끌어올린 분자가 다른 축을 잃는 모양이 네 시즌 모두에서 반복됩니다. 상위권이 ADMET을 비워 둔 채 표적 축에 몰리는 것도 이 모양과 맞아떨어집니다.
1위가 아직 못 받은 점수는 어디에 있나요?
시즌별 공식 1위 제출이 축별로 받지 못한 점수를 더했습니다.
| 시즌 | 1위 총점 | 못 받은 점수 | 그중 ADMET | ADMET 비중 |
|---|---|---|---|---|
| 1 | 84.72 | 15.28 | 11.24 | 74% |
| 2 | 87.70 | 12.30 | 7.97 | 65% |
| 3 | 80.30 | 19.71 | 11.03 | 56% |
| 4 | 83.32 | 16.68 | 9.79 | 59% |
1위가 놓친 점수의 56~74%가 ADMET에 있습니다. 시즌 1과 2에서는 활동, 결합, 선택성 세 축이 이미 만점이라 남은 점수가 전부 ADMET, 신규성, 합성입니다.
간단한 산수를 하나 해 보겠습니다(illustrative, 다른 축을 고정한다고 가정). 시즌 1의 1위가 ADMET만 상위 1% 경계(8.43점)까지 올리면 총점은 84.72에 4.67을 더한 89.39점입니다. 하지만 앞 절에서 본 것처럼 현실에서는 ADMET을 올리는 과정에서 다른 축이 내려가는 경향이 있으므로, 이 계산은 상한선에 가까운 가정입니다.
상위 50위 안에서는 무엇이 순위를 가르나요?
남은 점수가 ADMET에 몰려 있다면 상위권 순위도 ADMET이 가를까요? 상위 50위 안에서 총점의 분산을 축별로 나눠 봤습니다. 각 축과 총점의 공분산을 총점 분산으로 나눈 몫이고, 여섯 축의 합이 100%입니다.
| 시즌 | 활동 | 결합 | 선택성 | ADMET | 신규성 | 합성 | 총점 표준편차 |
|---|---|---|---|---|---|---|---|
| 1 | 4% | 25% | 68% | 8% | 0% | -4% | 1.30 |
| 2 | 55% | -1% | 17% | 22% | -1% | 8% | 0.59 |
| 3 | 13% | 28% | 43% | 3% | 9% | 5% | 1.91 |
| 4 | 51% | 3% | 17% | 25% | 7% | -3% | 0.54 |
답은 "아니오"입니다. 상위 50위 안의 순위 차이는 대부분 활동, 결합, 선택성의 미세한 차이에서 나옵니다. 시즌 1은 선택성이 68%, 시즌 2와 4는 활동이 55%, 51%, 시즌 3은 선택성이 43%입니다. ADMET의 몫은 3~25%입니다.
두 관찰을 합치면 이렇습니다. 남은 점수는 ADMET에 있지만, 상위권 안에서는 ADMET을 올리는 것보다 표적 축의 소수점 차이를 다투는 쪽이 순위를 바꿉니다. 시즌 1의 상위 50위는 1위와 50위 총점이 84.72점과 80.18점으로 4.54점 벌어져 있고, 시즌 2는 87.70점과 85.64점으로 2.06점, 시즌 3은 80.30점과 73.19점으로 7.11점, 시즌 4는 83.32점과 80.92점으로 2.40점입니다.
강등 규칙을 빼면 순위가 어떻게 달라지나요?
강등 행(tier 2)까지 넣어 총점만으로 상위 50위를 뽑으면 이렇게 됩니다.
| 시즌 | 강등 행 | 원점수 상위 50위 중 강등 행 | 원점수 1위 | 공식 1위 |
|---|---|---|---|---|
| 1 | 415 | 38 | 85.90 | 84.72 |
| 2 | 48 | 10 | 87.70 | 87.70 |
| 3 | 150 | 26 | 80.96 | 80.30 |
| 4 | 0 | 0 | 83.32 | 83.32 |
시즌 1에서는 원점수 상위 50위 중 38개가 강등 대상입니다. 강등 사유 중 가장 많은 것은 약이 될 수 없는 반응성 구조(시즌 1에서만 아지리딘 287건)이고, 시즌 2, 3에서는 같은 구조를 다시 낸 중복 제출도 강등 사유로 나옵니다. 시즌 1과 3은 강등 행의 원점수가 공식 1위보다 높고, 시즌 2의 원점수 1위는 공식 1위와 같습니다.
의미는 단순합니다. 반응성이 큰 구조가 높은 총점을 받는 경우가 실제로 있었고, 그래서 강등 필터가 순위표의 일부입니다. 점수만 보고 "이 분자가 가장 좋다"고 말하면 안 되는 이유이기도 합니다. 반대로, 이 필터가 올바른 기준인지는 별개 문제입니다. 필터의 사유는 relegate_reason 필드에 그대로 남아 있어서 누구나 검토할 수 있습니다.
이 숫자를 어떻게 읽어야 하나요?
- 이 점수는 저희 채점기의 값입니다. 계산 기반 예측이고 실험 측정이 아닙니다. 점수가 높다고 약이 된다는 뜻이 아닙니다. 기준물질 중 최고점은 시즌 1이 50.88점, 시즌 2가 39.16점, 시즌 3이 36.14점, 시즌 4가 29.73점으로, 참가자 1위(80~88점)보다 훨씬 낮습니다. 이는 채점기가 무엇을 보상하는지에 관한 정보이지, 기존 물질보다 AI 설계 분자가 낫다는 증거가 아닙니다.
- 포화는 배점 설계의 성질일 수 있습니다. 결합과 선택성 축이 만점에 몰려 있다는 사실은 이 축들이 변별력을 잃었다는 신호일 수도 있습니다. 시즌 설계를 고칠 때 저희가 직접 살펴볼 대목입니다.
- 스냅샷입니다. 2026-10-23 08:33(KST) 기준입니다. 시즌 2, 3, 4는 아직 제출을 받고 있어 숫자가 계속 움직입니다. 스냅샷 직후에 코드를 다시 돌렸을 때는 같은 값이 나왔습니다.
- 상관이지 인과가 아닙니다. ADMET 상위 1% 그룹은 시즌별로 43~72건뿐입니다. 시즌 3처럼 표본이 작으면 한두 건이 평균을 크게 흔듭니다.
-
계정 수는
hf_user문자열 기준입니다. 한 사람이 여러 계정을 쓰는지는 알 수 없습니다.
직접 재현하려면?
아래 코드는 위 표의 상위 50위 득점률과 ADMET 최고점을 그대로 계산합니다. 표준 라이브러리만 씁니다.
import json, statistics as st, urllib.request
BASE = "https://final-bench-open-discovery-challenge.hf.space"
AXES = ["activity", "binding", "selectivity", "admet", "novelty", "synthesis"]
def get(path):
return json.load(urllib.request.urlopen(BASE + path, timeout=60))
for season in get("/api/seasons")["seasons"]:
n, w = season["number"], season["weights"]
rows = get(f"/api/leaderboard?season={n}")["entries"]
# 기준물질(anchor)은 visibility 키가 없고, 채점 실패 행은 axes 가 비어 있다
scored = [e for e in rows if "visibility" in e and e["axes"]]
ranked = sorted((e for e in scored if e["tier"] == 1), key=lambda e: -e["total"])
top50 = ranked[:50]
frac = {a: st.mean(e["axes"][a] for e in top50) / w[a] for a in AXES}
best_admet = max(e["axes"]["admet"] for e in ranked)
print(f"S{n} {season['topic']}: 순위 {len(ranked)}건(강등 {len(scored) - len(ranked)}건), 1위 {ranked[0]['total']:.2f}점")
print(" 상위50 득점률 " + " ".join(f"{a[:3]}={frac[a]:.0%}" for a in AXES))
print(f" ADMET 만점 {w['admet']} 중 최고 {best_admet:.2f}, 1위 제출 {ranked[0]['axes']['admet']:.2f}")
저희가 스냅샷 시각에 돌린 출력입니다.
S1 Malaria: 순위 6979건(강등 415건), 1위 84.72점
상위50 득점률 act=98% bin=95% sel=91% adm=30% nov=71% syn=76%
ADMET 만점 15 중 최고 11.92, 1위 제출 3.76
S2 Tuberculosis: 순위 7004건(강등 48건), 1위 87.70점
상위50 득점률 act=97% bin=100% sel=100% adm=44% nov=77% syn=58%
ADMET 만점 15 중 최고 11.46, 1위 제출 7.03
S3 Chagas disease: 순위 5094건(강등 150건), 1위 80.30점
상위50 득점률 act=50% bin=94% sel=88% adm=25% nov=88% syn=73%
ADMET 만점 15 중 최고 11.60, 1위 제출 3.97
S4 Non-opioid analgesia: 순위 4196건(강등 0건), 1위 83.32점
상위50 득점률 act=61% bin=100% sel=100% adm=30% nov=76% syn=73%
ADMET 만점 15 중 최고 9.33, 1위 제출 5.21
여러분이 돌린 값은 리더보드가 움직인 만큼 다를 수 있습니다. 시즌 1은 마감했으므로 거의 같게 나와야 합니다. 응용으로는 tier를 무시하고 정렬해 위 강등 표를 재현하거나, 상위 N을 바꿔 포화가 어디까지 이어지는지 볼 수 있습니다.
FAQ
오픈 디스커버리 챌린지는 무엇을 채점하나요?
제출된 분자(SMILES)를 활동, 결합, 선택성, ADMET, 신규성, 합성 가능성의 6개 축으로 100점 만점 채점합니다. 배점은 시즌마다 /api/seasons에 공개돼 있습니다.
만점 축이 많은데 1위도 100점이 안 되는 이유는 무엇인가요?
시즌 1, 2에서는 활동, 결합, 선택성이 거의 만점인데도 ADMET(15점), 신규성(10점), 합성(5점) 합계 30점 중 1위가 놓친 점수가 12~15점입니다. 그중 ADMET이 가장 큽니다.
ADMET 점수가 낮은 1위 분자는 약이 될 수 없나요?
알 수 없습니다. 점수는 계산 기반 예측이고, ADMET 축은 그중에서도 예측 항목의 묶음입니다. 이 글은 약효를 주장하지 않으며, 순위표가 무엇을 보상하는지만 설명합니다.
강등은 무엇이고 왜 순위에서 빼나요?
약이 될 수 없는 반응성 구조, 같은 구조의 중복 제출 같은 사유로 순위에서 제외하는 처리입니다. 시즌 1에서는 원점수 상위 50위의 38개가 강등 대상이었습니다. 사유는 relegate_reason에 남습니다.
지금도 참여할 수 있나요?
시즌 2(결핵, 상금 2,000달러)는 10월 31일, 시즌 3(샤가스병)은 11월 30일, 시즌 4(비마약성 진통)는 2027년 1월 31일에 마감합니다. 시즌별 분자량과 중원자 수 한도가 다르니 제출 전에 /api/seasons의 limits를 확인하세요.
Further reading
來源:DEV Community · dev.to