Teager Target Release

Numerai has released a new target named Teager, as well as 3 additional related targets: Agnes, Claudia, and Rowan. The payout and scoring target on Numerai will remain the Cyrus target. However, these new targets have been designed to improve the performance of models trained on them.

Teager is one of the most significant targets Numerai has released to date. It handles risk in a totally new way versus all previous Numerai targets making it uncorrelated and uniquely additive as a target to train on.

There are several new accompanying benchmark models. Their historical scores are available on the website and the predictions are available for download via the API.
More info on benchmark model predictions: https://docs.numer.ai/numerai-tournament/benchmark_models

The model trained on target_teager_v4_20 is doing particularly well over the last year: V42_LGBM_TEAGER20

Models trained on Teager tend to ensemble very well with models trained on Cyrus. A 50/50 blend of a target_cyrus_v4_20 model and a target_teager_v4_20 model improve the Cyrus correlation mean and Sharpe when compared to either a standalone Teager model or standalone Cyrus model.

An ensemble model of Cyrus and Teager leads to higher correlation Sharpe, higher mean correlation and lower maximum drawdown.

Happy modeling


Target heatmap

Target clustermap

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

targets = ['target_nomi_v4_20', 'target_nomi_v4_60', 'target_tyler_v4_20', 'target_tyler_v4_60', 'target_victor_v4_20', 'target_victor_v4_60', 'target_ralph_v4_20', 'target_ralph_v4_60', 'target_waldo_v4_20', 'target_waldo_v4_60', 'target_jerome_v4_20', 'target_jerome_v4_60', 'target_janet_v4_20', 'target_janet_v4_60', 'target_ben_v4_20', 'target_ben_v4_60', 'target_alan_v4_20', 'target_alan_v4_60', 'target_paul_v4_20', 'target_paul_v4_60', 'target_george_v4_20', 'target_george_v4_60', 'target_william_v4_20', 'target_william_v4_60', 'target_arthur_v4_20', 'target_arthur_v4_60', 'target_thomas_v4_20', 'target_thomas_v4_60', 'target_cyrus_v4_20', 'target_cyrus_v4_60', 'target_caroline_v4_20', 'target_caroline_v4_60', 'target_sam_v4_20', 'target_sam_v4_60', 'target_xerxes_v4_20', 'target_xerxes_v4_60', 'target_alpha_v4_20', 'target_alpha_v4_60', 'target_bravo_v4_20', 'target_bravo_v4_60', 'target_charlie_v4_20', 'target_charlie_v4_60', 'target_delta_v4_20', 'target_delta_v4_60', 'target_echo_v4_20', 'target_echo_v4_60', 'target_jeremy_v4_20', 'target_jeremy_v4_60', 'target_teager_v4_20', 'target_teager_v4_60', 'target_agnes_v4_20', 'target_agnes_v4_60', 'target_claudia_v4_20', 'target_claudia_v4_60', 'target_rowan_v4_20', 'target_rowan_v4_60']

# analyse the validation data, but we could do the same on the training data
df = pd.read_parquet('v4.2/validation_int8.parquet', columns=targets + ['era'])

# compute the mean of the era correlation of every target with any other target
corr = df.groupby('era').corr(method='spearman').mean(axis=0, level=1)

# arrange the order of the columns and rows (for visualization) so that they
# are sorted by correlation with the target 'target_cyrus_v4_20' 
corr = corr.sort_values(

plt.rcParams["figure.figsize"] = [24,24] # default is [6.4, 4.8]

ax = sns.heatmap(corr, annot=True)

sns.clustermap(corr, figsize=(36,36)).savefig('cluster.png')