Data

The data a model runs on.

Free, no signup, no rate limit. Synthetic and generated by us. We say so plainly, because a dataset nobody can verify is worth less than an honest one. It is obfuscated and genuinely hard, and the edge decays out of sample, the way a real one would.

42

features per row

500

training eras

124K

labelled rows

5

target levels

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.

Random guess+0.0046

The floor. No signal at all.

Best single feature+0.0277

The strongest column on its own.

Ridge, all 42 features+0.0535

A linear model over everything.

Gradient-boosted trees+0.0611

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.

iderafeature_000feature_001feature_002more featurestarget
9b5de8bead7c3ccera00002010.75
4d5d0cda6dae4d5era00004410.50
f996f6fbbc984d4era00000230.25
77712dc8e97c736era00001240.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.

0.00
5%
0.25
20%
0.50
50%
0.75
20%
1.00
5%

Columns

Schema.

columntypemeaning
idtextOpaque row identifier. Unique, and it tells you nothing.
eratextThe moment a row belongs to. Absent from live files.
feature_000 … feature_041int842 columns, each an integer 0 to 4. You are never told what they measure.
targetfloat32One 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.

load.py
import pandas as pd
train = 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