Skip to content

Data ​

The Numerai dataset is a tabular dataset that describes the global stock market over time.

At a high level, each row represents a stock at a point in time. The features describe attributes of the stock known at that time. Target columns measure future stock performance.

Eras ​

Each era groups observations from one point in time. In v6, the grouping column is date, not era; rows also include numerai_ticker.

Instead of treating each row as a single data point, you should strongly consider treating each era as a single data point. For this same reason, many of the metrics on Numerai are "per-era", for example mean correlation per-era.

Targets can cover overlapping future periods, so take care when applying cross validation. See this forum post for more information.

Features ​

There are many features in the dataset, ranging from fundamentals like P/E ratio, to technical signals like RSI, to market data like short interest, to secondary data like analyst ratings, and much more. Feature values for a given era represent attributes as of that point in time.

Each feature has been meticulously designed and engineered by Numerai to be predictive of the target or additive to other features. We have taken extreme care to make sure all features are point-in-time to avoid leakage issues.

While many features can be predictive of the targets on their own, their predictive power is known to be inconsistent over time. Therefore, we strongly advise against building models that rely too heavily on or are highly correlated to a small number of features as this can lead to inconsistent performance. See this forum post for more information.

The 1,017 new v6 numeric features use bins 0 through 4; missing feature-eras use the middle bin 2. The 22 restored original Signals numeric features retain their original values and can contain missing values. feature_country contains text; exclude it from numeric-only models such as the example below.

Targets ​

Targets are specifically engineered to match the strategy of the hedge fund and represent the future performance of a given stock relative to the given era.

Our hedge fund is neutral to many forms of "beta" - we remove our exposure to markets, countries, sectors, or common factors. This is because we are in search of "alpha" - returns that you can get from a stock that are not explained by broader trends (e.g. if the whole market goes up or down, we want to make money on specific stocks that over- or under-perform compared to the market). You can interpret the targets as representing these stock-specific returns.

We provide many targets that are different types of stock-specific returns. They differ in what is "residualized" (eg. neutral to market and country vs neutral to sector and factors) and time horizon (eg. 20 market days into the future vs 60 market days into the future).

In v6, the generic target column is an alias for target_jupiter_60, which measures returns over 60 business days. Code whose horizon matters should select an explicit column; generic target means "whatever this dataset version currently defines as its default" and is not a stable target identity.

Models trained on other targets can outperform or ensemble well with a model trained on the default target. Target selection is separate from live scoring: changing a dataset alias does not rewrite historical scores or choose the target for a tournament round. Each round's score configuration controls that round's scoring and payout target.

Recent validation dates can be published before their 60-day returns have matured. Their targets are null until the returns become available. Filter the exact target you selected rather than assuming every validation row is eligible:

python
TARGET_COL = "target"
validation = validation.dropna(subset=[TARGET_COL])

Downloading the Data ​

The best way to access the Numerai dataset is via the data API. There are many files available for download, but it's best to start by listing them.

Here is an example of how to list our files and versions in Python:

python
from numerapi import NumerAPI
napi = NumerAPI()
datasets = [path for path in napi.list_datasets() if path.startswith("v6.0/")]

You can also review the datasets available on our Data Page.

Unity data release ​

On October 16, 2026, Classic v6.0 becomes available to download, and public v5.0–v5.3 training and validation downloads are retired, including their benchmark and example-prediction files. V5.0–v5.3 live data remains available until November 6.

The initial v6.0 release is for data preparation, not live tournament participation. V6 submissions and model uploads open with the round opening November 6. V6 diagnostics are not enabled with the initial data release. Existing live rounds continue using their existing data and scoring rules until the live cutover; earlier rounds keep their original rules.

Versions ​

There are several versions in the data API because Numerai is constantly improving our dataset. In general, if you are building a new model you are encouraged to use the latest version. Minor versions usually preserve file compatibility. Major versions (i.e. v3 vs v4) may have large, breaking changes to the structure and/or contents of the datasets, so it's usually best to re-train your models when major versions are released.

Classic v6 data is available. It changes the stock universe: retrain on v6 rather than assuming a v5 model is compatible. v5–v5.3 non-live files are retired; their live files continue until November 6. v6 submissions and model uploads open with the first v6-only round on November 6. See Getting Started for the release schedule.

The data API also lists versions for Signals. This is a "bring your own data" tournament that you can read more about here.

Files ​

The Numerai dataset is made up of many different files in a few different formats. Visit the Numerai Data Page for a full list of files and short descriptions of each file. Here is how to get a small set of training features from the data API in Python:

python
import pandas as pd
import json

VERSION = "v6.0"

# Download and read the features json file
napi.download_dataset(f"{VERSION}/features.json")
feature_metadata = json.load(open(f"{VERSION}/features.json"))

# use the small feature set to reduce memory usage

small_feature_set = feature_metadata["feature_sets"]["small"]
TARGET_COL = "target"
columns = ["numerai_ticker", "date", TARGET_COL] + small_feature_set

# Download and read the training data
napi.download_dataset(f"{VERSION}/train.parquet")
training_data = pd.read_parquet(
    f"{VERSION}/train.parquet", columns=columns
).dropna(subset=[TARGET_COL])
assert not training_data.empty, "The training file has no mature target rows"

Formats ​

The main file format of our data API is Parquet, which works great for large columnar data - we highly encourage that you become familiar with Parquet if you are not already as it is a widely-used format in big data and data science.