42
features per row
500
training eras
124K
labelled rows
5
target levels
500 eras · 100,000 rows
Targets included. What you learn from.
120 eras · 24,000 rows
Targets included. What you check yourself against.
The live file for the open round is on your dashboard. It changes every round and carries no target or era column.
How hard, exactly
There is real signal, and a low ceiling.
These are validation correlations from our own acceptance run. A single feature barely moves; a linear model does better; only a nonlinear ensemble pulls ahead. The gap between guessing and the ceiling is the whole game, and the ceiling is around +0.06.
That same ensemble scores +0.155 in training but only +0.061 on validation and +0.060 live: the edge decays out of sample, exactly like a real one. Reproduce it with engine/evaluate.py.
The floor. No signal at all.
The strongest column on its own.
A linear model over everything.
Nonlinearity pays. The realistic ceiling.
The rows
A look at the data.
Each row is one obfuscated example in one era. The features are integers between zero and four; the target is what you are trying to order. In the live file, the target and era columns are gone. Those are the quiz.
| id | era | feature_000 | feature_001 | feature_002 | more features | target |
|---|---|---|---|---|---|---|
| 9b5de8bead7c3cc | era0000 | 2 | 0 | 1 | 0.75 | |
| 4d5d0cda6dae4d5 | era0000 | 4 | 4 | 1 | 0.50 | |
| f996f6fbbc984d4 | era0000 | 0 | 2 | 3 | 0.25 | |
| 77712dc8e97c736 | era0000 | 1 | 2 | 4 | 0.50 |
The target
Every era, the same shape.
The target takes five values, and within every era they always fall in a fixed 5 / 20 / 50 / 20 / 5 split. Extreme outcomes are rare; the middle is common. Getting the ordering of the extremes right is where the score is won.
Columns
Schema.
| column | type | meaning |
|---|---|---|
| id | text | Opaque row identifier. Unique, and it tells you nothing. |
| era | text | The moment a row belongs to. Absent from live files. |
| feature_000 … feature_041 | int8 | 42 columns, each an integer 0 to 4. You are never told what they measure. |
| target | float32 | One of 0, 0.25, 0.5, 0.75, 1.0. Absent from live files. |
Get started
Load it in three lines.
It is a plain parquet file; every ML stack reads it. Learn the target from the training rows, predict the live rows, and upload a two-column CSV of id and prediction from your dashboard.
That by-hand path stays first-class, or point an AI agent at a scoped key and let it pull each round, predict, and submit for you.
import pandas as pdtrain = pd.read_parquet("train.parquet")features = [c for c in train.columns if c.startswith("feature_")]# X = train[features] → y = train["target"]# fit any model, then predict live rows and upload id,prediction