
Bird Game
Can you outsmart the falcons and predict where the dove will go next?
The Bird Game is a real-time forecasting game where players use probabilistic models to forecast the dove’s future location, based on the movement of the dove and the chasing falcons.
Submit forward density predictions to maximize accuracy and earn rewards!
It’s a blend of strategy, live data, and statistical forecasting.
Data
Your model must process a sequence of records that will be received in real time.
Each record provides:
-
time: The current time;
-
falcon_location: A location of one falcon;
-
dove_location: The current dove location;
-
falcon_id: The falcon identity;
-
falcon_wingspan: Range of each falcon. Wider wingspan, means a wider potential strike range.

The falcon locations are shown as colored dots on the figure above. Some falcons may provide useful information as to (track) the future location of the dove, or the uncertainty of the same, whereas others may not. Their utility, or otherwise, is for you to determine.
The game runs on live data, the feed will be available from Sunday 22:00 UTC to Friday 22:00 UTC.
Each day, around 21:00 UTC, there is a window lasting 5–30 minutes during which data may be delayed or unavailable.
Unexpected interruptions of the Data Feeds
As the game relies on real-time data, occasional outages may occur. During these periods, models will not receive new inputs. Once the feed resumes, there will be a burn-in period where fresh data is collected before model performance is evaluated again. This ensures fairness and allows models to recalibrate to current market conditions.
Game Rules
Start
-
Each player begins with a starting wealth of 800.
-
The game opens with a warmup phase where predictions are scored but no wealth is distributed—this is for players to calibrate their models.
-
Players can enter and exit the game at any time.
-
Players have a single active model they can update at any time.
Prediction Phase
-
For each prediction round, players automatically invest a fraction of their active wealth into the pot.
-
This amount is subtracted from their active wealth.
-
The total pot is inflated slightly by a game-defined inflation rate.
-
Players who skip a round are ineligible for likelihood-based prizes, and may also suffer a wealth penalty to be determined at the discretion of the organizers.
Scoring & Distribution
-
Once the true dove location is revealed, each prediction is scored using a likelihood function.
-
The pot is then distributed proportionally based on these likelihood scores.
-
More accurate predictions earn a larger share of the pot.
-
Player wealth will never go below 0.
Payouts
-
When a player’s wealth exceeds a defined wealth threshold, they receive a prize payout equal to 10% of their wealth.
-
This payout is treated like a withdrawal: it’s subtracted from their active wealth and moved to Realized Wealth.
-
Realized Wealth is paid out weekly to participants.
Winning
-
The player with the most Total Wealth (The sum of Active Wealth and Realized Wealth) wins the game.
Game State
Explanation of the game state parameters displayed for each player:
-
Total Wealth: The sum of a player’s Realized and Active Wealth.
-
Active Wealth: The in-game capital currently at stake and used to generate returns.
-
Realized Wealth: The portion of wealth that has been or will be paid out; no longer at risk or being used to generate returns.
-
Likelihood EWA: The exponentially weighted average of ex-post log-likelihood scores over time.
-
Recent Likelihood: The most recent ex-post log-likelihood of the player’s active model.
-
Longevity: The total number of observations since the player joined the game.
Probabilistic forecast
Probabilistic forecasting provides a distribution of possible future values rather than a single point estimate, allowing for uncertainty quantification. Instead of predicting only the most likely outcome, it estimates a range of potential outcomes along with their probabilities by outputting a probability distribution.
A probabilistic forecast models the conditional probability distribution of a future value given past observations
. This can be expressed as:
where represents the historical data up to time
. Instead of a single prediction
, the model estimates a full probability distribution
, which can take different parametric forms, such as a Gaussian:
where is the predicted mean and
represents the uncertainty in the forecast.
Probabilistic forecasting can be handled through various approaches, including variance forecasters, quantile forecasters, interval forecasters or distribution forecasters, each capturing uncertainty differently.
For example, you can try to forecast the target location by a gaussian density function (or a mixture), thus the model output follows the form:
{
"density": {
"name": "normal",
"params": {
"loc": y_mean,
"scale": y_var
}
},
"weight": weight
}
A mixture density, such as the gaussian mixture allows for capturing multi-modal distributions and approximate more complex distributions.

Mathematical Definition
The informal meaning of probabilistic forecast is a mixture of parametric univariate density functions where each is taken from a standard family (such as exponential, or gaussian).

A mixture of gaussian densities conspire to match a fat-tailed distribution.
Engineering Definition
The meaning of probabilistic forecast is made more precise by means of the Python density package which provides a dict specification of continuous univariate density function mixtures using the pydantic Python package. The function validatedensitydict will tell you whether or not your specification is valid.
Create your Tracker
A tracker is a framework that processes real-time data to track the dove’s movement and predict its future location. It considers inputs like the dove’s position and falcon locations to generate a probabilistic forecast.
To create your tracker, you need to define a class that implements the TrackerBase interface. Specifically, your class must implement the following methods:
-
tick(self, payload: dict) -> None
This method is called at every time step to process new payloads. Use this method to update your internal state or logic as needed. -
predict(self) -> dict
This method should return your prediction of the dove's location at a future time step. Ensure that the return format complies with the density_pdf specification.
You can refer to the Tracker examples for guidance.
Challenge your Tracker against the benchmark
To compare your Tracker's performance against the benchmark Tracker, use the test_run method provided in the TrackerBase class. This method evaluates your Tracker's efficiency over a series of time steps using density_pdf scoring. A higher score reflects more accurate predictions.
Additional Resources
-
Useful Python packages
Useful Links
Copyright © 2024 Crunch Lab Inc. All rights reserved.
36 Manchester Drive, Westfield, New Jersey, 07090, United States