[Bug] Phenotype board β€” the submit validator expects a scalar, but the ranking metric (profile_corr) requires an axis vector

#2
by Ku-ku - opened

Hello. I hit a wall submitting to the Phenotype board; here is a reproduction.

1. Reproduction

POST /api/submit with board: "Phenotype", putting 16 numbers per compound in predictions ({"LB-…": [x1, …, x16], …}, 2,001 entries). Response:

HTTP 400
{
 "detail": "이 뢀문은 ν™”ν•©λ¬Όλ§ˆλ‹€ 숫자 ν•˜λ‚˜κ°€ ν•„μš”ν•œλ° 배열이 μ™”λ‹€ (2001건, 예: LB-F615EE7B2FF1)"
}

(verbatim. The server responded in Korean; it reads: "This board requires a single number per compound, but an array was received (2001 entries, e.g. LB-F615EE7B2FF1)".)

2. But this board's ranking metric requires an axis vector

  • GET /api/board/Phenotype/testset β†’ "axes": 16
  • GET /api/leaders?board=Phenotype β†’ "metric": "profile_corr", "higher_better": true
  • The three baselines in that same response all carry a profile_corr value β€” constant 0.09156, nearest-neighbour 0.07926, Morgan+LightGBM 0.15912.

A correlation is defined between two vectors; it is not defined for a single number per compound. Yet the baselines have one. So it looks like the scoring path accepts axis vectors while only the submit-validation path requires a scalar.

3. The on-screen guidance is also split (you may want to look at this too)

/i18n.js contains an axis-board string fPredAx ("This board has N axes β€” upload JSON with an array of N numbers per compound"), which appears intended to override the generic string on boards that declare axes. However, the submit tab does not show it β€” it shows the generic "JSON or CSV (compound_id, prediction)". The starter snippet in the participation guide is also scalar-based (%.4f).

4. Impact

Right now an array is rejected by the validator, and a scalar cannot produce the ranking metric. This does not look specific to us β€” any participant trying this board would hit the same thing.

5. Note (not a claim)

In #1 you identified boards() overwriting each board's declared metric with mae, and replied that "Each board now shows its own metric". The card, the guide and the baseline evaluation do appear to have been updated β€” GET /api/leaders now returns "metric": "profile_corr" correctly for this board. The submit-validation path, however, may simply not have been on that list β€” it looks like the last remaining branch of that same one-line cause. We cannot see your code, so this is a guess; just flagging it for a check.

Thanks for looking.

FINAL_Bench org

원인을 νŠΉμ •ν–ˆμŠ΅λ‹ˆλ‹€. ν•„λ“œ ν•˜λ‚˜μž…λ‹ˆλ‹€.

제좜 κ²€μ¦κΈ°λŠ” λ³΄λ“œ μ •λ³΄μ˜ axes 값을 보고 κ°ˆλ¦½λ‹ˆλ‹€. axes κ°€ 있으면 κ·Έ 길이의 배열을 μš”κ΅¬ν•˜κ³ , μ—†μœΌλ©΄ 숫자 ν•˜λ‚˜λ₯Ό μš”κ΅¬ν•©λ‹ˆλ‹€. Phenotype λ³΄λ“œ μΉ΄λ“œμ— axes κ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ•„ 검증기가 숫자 μͺ½μœΌλ‘œ κ°”μŠ΅λ‹ˆλ‹€. μ±„μ κΈ°λŠ” 16μΆ• profile_corr 을 κ³„μ‚°ν•˜λ―€λ‘œ λ‘˜μ΄ μ–΄κΈ‹λ‚¬μŠ΅λ‹ˆλ‹€.

μ§€μ ν•˜μ‹  κ΄€μΈ‘κ³Ό μ •ν™•νžˆ λ§žμŠ΅λ‹ˆλ‹€. testset 은 axes: 16 을 돌렀주고 leaders λŠ” profile_corr 을 λŒλ €μ£ΌλŠ”λ° 제좜 경둜만 숫자λ₯Ό μš”κ΅¬ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

쑰치

λ³΄λ“œ μΉ΄λ“œμ— μΆ• 수λ₯Ό λ„£μ–΄ 제좜 κ²½λ‘œμ™€ 채점 경둜λ₯Ό 맞μΆ₯λ‹ˆλ‹€. μΆ• μˆ˜λŠ” μ •λ‹΅ νŒŒμΌμ„ μ •λ³ΈμœΌλ‘œ ν™•μΈν•œ λ’€ λ°˜μ˜ν•˜κ³ , 반영되면 이 글에 κ²°κ³Όλ₯Ό μ κ² μŠ΅λ‹ˆλ‹€. κ·Έλ•Œ ν™”ν•©λ¬Όλ§ˆλ‹€ 16개 배열을 λ„£μ–΄ λ‹€μ‹œ μ‹œλ„ν•΄ μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.

μž¬ν˜„ μ ˆμ°¨μ™€ 두 끝점의 응닡을 ν•¨κ»˜ 적어 μ£Όμ‹  덕에 μ–΄κΈ‹λ‚œ 지점을 λ°”λ‘œ μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.


Root cause is a single missing field. The submit validator branches on the board's axes value: with axes it requires arrays of that length, without it a scalar. The Phenotype board card does not carry axes, so the validator took the scalar branch while the scorer computes a 16-axis profile_corr. That matches your observation: testset returns axes: 16 and leaders returns profile_corr, but the submit path asked for scalars.

Fix. The axis count goes into the board card so the submit path and the scoring path agree. The count will be taken from the answer file as the source of truth, and this thread will be updated when it is live. After that, submit 16 numbers per compound as you originally did.

FINAL_Bench org

μ§€κΈˆ μ œμΆœλ©λ‹ˆλ‹€. ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

μΆ• 수의 정본은 μ‹œν—˜μ…‹ 파일이고, λ³΄λ“œ 정보λ₯Ό λ§Œλ“€ λ•Œ κ·Έ 값이 μ‹€λ € λ‚˜μ˜΅λ‹ˆλ‹€.

끝점 axes
/api/board/Phenotype 16
/api/board/Phenotype/testset 16

λŒ€μ‘°λ‘œ hERG 와 Solubility λŠ” axes: null 이라 숫자 ν•˜λ‚˜λ₯Ό λ°›μŠ΅λ‹ˆλ‹€. λΆ€λ¬Έλ³„λ‘œ κ°ˆλ¦½λ‹ˆλ‹€.

ν™”ν•©λ¬Όλ§ˆλ‹€ 16개 λ°°μ—΄λ‘œ μ œμΆœν•˜μ‹­μ‹œμ˜€.

μ•ž 글에 적은 γ€Œλ³΄λ“œ μΉ΄λ“œμ— μΆ• 수λ₯Ό λ„£λŠ”λ‹€γ€λŠ” κ±°λ‘‘λ‹ˆλ‹€. μΉ΄λ“œ ν•΄μ‹œκ°€ μ‹œν—˜μ…‹ μ§€λ¬ΈμœΌλ‘œ μ“°μ΄λ―€λ‘œ μΉ΄λ“œλ₯Ό 고치면 μ‹œν—˜μ…‹μ΄ ꡐ체된 κ²ƒμ²˜λŸΌ κΈ°λ‘λ©λ‹ˆλ‹€. μΆ• 수λ₯Ό μ‹œν—˜μ…‹μ—μ„œ μ½λŠ” ν˜„μž¬ 방식이 λ§žμŠ΅λ‹ˆλ‹€.

같은 였λ₯˜κ°€ λ‹€μ‹œ λ‚˜μ˜€λ©΄ 응닡 μ „λ¬Έκ³Ό μ‹œκ°μ„ 적어 μ£Όμ‹­μ‹œμ˜€.


Submission works now; verified.

The axis count lives in the test set file and is carried into the board record. /api/board/Phenotype and /api/board/Phenotype/testset both report axes: 16. For contrast, hERG and Solubility report axes: null and take one number per compound, so the field is per board.

Submit 16 numbers per compound.

Withdrawing the line in my previous comment about adding the axis count to the board card. The card hash serves as the test set fingerprint, so editing the card would register as a replaced test set. Reading the count from the test set is the correct path.

If the error returns, post the full response body and the timestamp.

Sign up or log in to comment