TASK 3 / SUBMISSION
Submit Task 3 predictions on the web.
No pre-registration, approval, access code, or account is required. Practice is open now; the development and test phases open when their datasets are published.
- Practice
- Scores + receipt
- Test
- Receipt only
HOW TO SUBMIT
Five steps from data to receipt
Task 3 is method-agnostic. You are scored on your predictions, not on how you produced them.
Step 1 of 5: Get the data.
Clone the Task 3 starter kit and run its prepare script. It downloads the 332 public cases and writes both the answered and unanswered copies.
For the two ranked phases, download
development_inputs.jsonlandtest_inputs.jsonlfrom YanAdjeNole/FinReason-Task3. Each holds 680 questions with the answers withheld, and no rule label.cd finreason_task3 pip install -r requirements.txt python scripts/prepare_public_dev.pyStep 2 of 5: Produce predictions.jsonl.
One JSON object per line, one line per case. Only three fields are required, and only
idis used to match your prediction to a case — predictions are matched byid, never by row order, so you may write the lines in any order.{"id": "DEV_000000", "extracted_value": "-1284", "calculated_value": "1284"}Number formatting is free:
-1,284,-1284and(1,284)are read as the same number. Emit"0"when your system cannot determine a value — never omit a line, because a missing id invalidates the whole submission rather than costing you one case.Both values must come from the filing materials shipped with the case. Each case is a real SEC filing and says so in its own identifiers, so you can work out which one it is — but reading either value out of a service that already publishes data-quality findings for that filing is not a solution to this task, and a submission produced that way is not a valid entry. See the Terms of Participation.
Step 3 of 5: Validate before you upload.
The validator catches missing, duplicate and unknown ids, missing fields, empty values and malformed JSON. Exit code
0means valid.python scripts/validate_submission.py \ --predictions predictions.jsonl \ --reference data/public_dev_inputs.jsonlYou can also score yourself locally against the practice answers, which are public. The rule-based judge is free, instant and offline:
python scripts/score_submission.py \ --predictions predictions.jsonl \ --gold data/public_dev.jsonl \ --judge deterministicStep 4 of 5: Upload.
Upload
predictions.jsonldirectly, or a ZIP containing exactly one root-level file namedpredictions.jsonl. The file must be UTF-8. Practice asks only for a Team Name; the development and test phases also ask for a Contact Email, which is never published and is stored only as a salted hash.Step 5 of 5: Read what comes back.
Practice returns the four rates immediately, broken down by DQC rule, plus a receipt. Development returns a provisional score at once and the official score when the judge finishes. Test returns an acceptance receipt and nothing else — no score, rank, or diagnostic is shown before the final results are released.
Each phase has a limit, and a submission counts only once it reaches scoring — a file rejected during validation costs nothing, so a format problem never spends an attempt.
Phase Limit Counted per Resets Practice 20 per hour Uploader Hourly Development 3 per day Team 00:00 UTC Test 3 in total Team Never Practice counts per uploader because it asks for no Contact Email and so has no team to count against. The test limit does not reset: three accepted test submissions is all a team gets.