Listing your submission forecast skill scores¶
Retrieve your submission skill scores and relative rank against other forecasters.
Scores are only available after the evaluation phase for the challenge has completed (it depends on measurement-data availability). For the methodology behind these scores, see Evaluation & Prizes.
API Endpoints¶
To interact with the Predico API and retrieve information about your submissions scores, you can use the following endpoints:
- GET
/api/v1/market/challenge/submission- Retrieve a list of your previous submissions (and respective challenges). - GET
/api/v1/market/challenge/submission-scores- Retrieve a list of your submissions scores and relative ranking to other forecasters.
Access Token Required
An access token must be included in the Authorization header of your request. If you haven't obtained an access token yet, please refer to the Authentication section.
Retrieving your historical submissions:¶
Here's how you can retrieve the list your past submissions.
# List your historical submissions:
response = requests.get(
url=f"{API_URL}/market/challenge/submission",
headers=headers,
timeout=30
)
# Check if the request was successful
if response.status_code == 200:
submissions = response.json()
else:
print("Failed to retrieve submissions.")
print(f"Status code: {response.status_code}")
For each submission, you can then retrieve the forecast skill scores:¶
# Select a submission and respective challenge:
selected_submission = submissions["data"][0]
submission_id = selected_submission['id']
challenge_id = selected_submission['market_session_challenge']
print("Selected Submission:")
print(f"Submission ID: {submission_id}")
print(f"Challenge ID: {challenge_id}")
# Request the submission scores for the selected challenge
response = requests.get(
url=f"{API_URL}/market/challenge/submission-scores",
params={'challenge': challenge_id},
headers=headers,
timeout=30
)
# Check if the request was successful
if response.status_code == 200:
submission_scores = response.json()
print(submission_scores)
else:
print("Failed to retrieve submission scores.")
JSON Example Response¶
If the response is empty for a given day, double-check the challenge identifier you are requesting.
Which metrics count?
Rankings and prize distribution use rmse (Q50) and winkler (Q10/Q90).
The response may include additional metrics (mae, pinball, …) for
reference. See Evaluation & Prizes for methodology.
Daily-score rows and penalties
Daily scores are now per (target_day, horizon, metric, variable),
aggregated across all of your submissions that physically covered the
day. A row with is_penalty: true means your day failed qualification
(Intraday slot-coverage failure or D+1/D+N session non-compliance) — your
score for that day was substituted with the peer Q75 value. See
Evaluation.
Click to view Example Response
json
{
"code": 200,
"data": {
"personal_metrics": [
{
"submission": "41ccbb67-1612-4045-8674-671e7631777d",
"variable": "q50",
"metric": "rmse",
"value": 54.162,
"rank": 1,
"total_participants": 3
},
{
"submission": "b7f2c123-8821-4901-9abc-1234abcd5678",
"variable": "q10",
"metric": "winkler",
"value": 120.445,
"rank": 2,
"total_participants": 3
}
],
"general_metrics": [
{
"submission__variable": "q50",
"metric": "rmse",
"avg_value": 511.077,
"min_value": 54.162,
"max_value": 1416.82,
"std_value": 640.465
},
{
"submission__variable": "q10",
"metric": "winkler",
"avg_value": 210.334,
"min_value": 120.445,
"max_value": 380.112,
"std_value": 95.231
}
]
}