numerai-cli 1.1.4__tar.gz → 1.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {numerai_cli-1.1.4/numerai_cli.egg-info → numerai_cli-1.1.6}/PKG-INFO +1 -1
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/signals-python3/predict.py +5 -14
- numerai_cli-1.1.6/numerai/examples/signals-python3/train.py +5 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/tournament-python3/predict.py +1 -1
- {numerai_cli-1.1.4 → numerai_cli-1.1.6/numerai_cli.egg-info}/PKG-INFO +1 -1
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai_cli.egg-info/SOURCES.txt +2 -1
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/setup.py +1 -1
- numerai_cli-1.1.6/tests/test_signals_example.py +74 -0
- numerai_cli-1.1.4/numerai/examples/tournament-python3/train.py +0 -10
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/LICENSE +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/MANIFEST.in +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/README.md +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/__init__.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/__init__.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/constants.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/destroy_all.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/doctor.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/misc.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/node/__init__.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/node/config.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/node/deploy.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/node/destroy.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/node/test.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/setup.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/uninstall.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/upgrade.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/util/__init__.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/util/debug.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/util/docker.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/util/files.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/util/keys.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/cli/util/terraform.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/crypto-python3/Dockerfile +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/crypto-python3/predict.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/crypto-python3/requirements.txt +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/signals-python3/Dockerfile +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/signals-python3/requirements.txt +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/tournament-python3/Dockerfile +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/tournament-python3/requirements.txt +0 -0
- {numerai_cli-1.1.4/numerai/examples/signals-python3 → numerai_cli-1.1.6/numerai/examples/tournament-python3}/train.py +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/tournament-rlang/Dockerfile +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/tournament-rlang/install_packages.R +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/tournament-rlang/main.R +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/-inputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/-main.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/-outputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/aws/-inputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/aws/-locals.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/aws/-outputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/aws/cluster.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/aws/main.zip +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/aws/network.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/aws/aws/webhook.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/azure/cluster.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/azure/input.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/azure/locals.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/azure/outputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/azure/webhook.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/azure_cron_trigger.zip +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/azure_trigger.zip +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/input.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/main.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/outputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/azure/registry.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/-inputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/-main.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/-outputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/cloud-function.zip +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/gcp/-inputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/gcp/-locals.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/gcp/-outputs.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/gcp/cluster.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/gcp/webhook.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/gcp/workflow-source.yaml +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/registry.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/terraform/gcp/services.tf +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai_cli.egg-info/dependency_links.txt +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai_cli.egg-info/entry_points.txt +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai_cli.egg-info/requires.txt +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai_cli.egg-info/top_level.txt +0 -0
- {numerai_cli-1.1.4 → numerai_cli-1.1.6}/setup.cfg +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
""" Sample tournament model in python 3 """
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
-
import json
|
|
5
4
|
import logging
|
|
6
5
|
import joblib
|
|
7
6
|
import numerapi
|
|
@@ -11,9 +10,10 @@ import lightgbm as lgbm
|
|
|
11
10
|
logging.basicConfig(filename="log.txt", filemode="a")
|
|
12
11
|
|
|
13
12
|
TOURNAMENT = 11
|
|
14
|
-
DATA_VERSION = "signals/
|
|
13
|
+
DATA_VERSION = "signals/v3.0"
|
|
15
14
|
TARGET_COL = "target"
|
|
16
|
-
|
|
15
|
+
# Keep models trained on older Signals datasets separate from this version.
|
|
16
|
+
TRAINED_MODEL_PREFIX = f"./trained_model_{DATA_VERSION.replace('/', '_')}"
|
|
17
17
|
|
|
18
18
|
DEFAULT_MODEL_ID = None
|
|
19
19
|
DEFAULT_PUBLIC_ID = None
|
|
@@ -59,7 +59,7 @@ def train(napi, model_id, force_training=False):
|
|
|
59
59
|
num_leaves=2**5 - 1,
|
|
60
60
|
colsample_bytree=0.1,
|
|
61
61
|
)
|
|
62
|
-
model.fit(train_data[feature_cols], train_data[
|
|
62
|
+
model.fit(train_data[feature_cols], train_data[TARGET_COL])
|
|
63
63
|
|
|
64
64
|
logging.info("saving model")
|
|
65
65
|
joblib.dump(model, model_name)
|
|
@@ -72,16 +72,8 @@ def predict(napi, model):
|
|
|
72
72
|
predict_data = pd.read_parquet(f"{DATA_VERSION}/live.parquet").set_index(
|
|
73
73
|
'numerai_ticker'
|
|
74
74
|
)
|
|
75
|
-
feature_cols = [
|
|
76
|
-
col
|
|
77
|
-
for col in predict_data.columns
|
|
78
|
-
if col.startswith('feature_')
|
|
79
|
-
and col not in ("feature_country", "feature_exchange_code")
|
|
80
|
-
]
|
|
81
|
-
print(predict_data)
|
|
82
|
-
|
|
83
75
|
logging.info("generating predictions")
|
|
84
|
-
predictions = model.predict(predict_data[
|
|
76
|
+
predictions = model.predict(predict_data[model.feature_name_])
|
|
85
77
|
predictions = pd.DataFrame(
|
|
86
78
|
predictions, columns=["prediction"], index=predict_data.index
|
|
87
79
|
)
|
|
@@ -92,7 +84,6 @@ def submit(predictions, predict_output_path="predictions.csv", model_id=None):
|
|
|
92
84
|
logging.info("writing predictions to file and submitting")
|
|
93
85
|
include_index = predictions.index.name is not None
|
|
94
86
|
predictions.to_csv(predict_output_path, index=include_index)
|
|
95
|
-
print(predictions)
|
|
96
87
|
napi.upload_predictions(predict_output_path, model_id=model_id)
|
|
97
88
|
|
|
98
89
|
|
|
@@ -9,7 +9,7 @@ with open(path.join(this_directory, "README.md"), encoding="utf-8") as f:
|
|
|
9
9
|
|
|
10
10
|
setup(
|
|
11
11
|
name="numerai-cli",
|
|
12
|
-
version="1.1.
|
|
12
|
+
version="1.1.6",
|
|
13
13
|
description="A library for deploying Numer.ai Prediction Nodes.",
|
|
14
14
|
url="https://github.com/numerai/numerai-cli",
|
|
15
15
|
author="Numer.ai",
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""Checks for the deployable Signals example without downloading full datasets."""
|
|
2
|
+
|
|
3
|
+
import importlib.util
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
import runpy
|
|
6
|
+
import sys
|
|
7
|
+
import tempfile
|
|
8
|
+
import unittest
|
|
9
|
+
from unittest.mock import Mock, patch
|
|
10
|
+
|
|
11
|
+
import pandas as pd
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
EXAMPLE = Path(__file__).resolve().parents[1] / "numerai/examples/signals-python3/predict.py"
|
|
15
|
+
spec = importlib.util.spec_from_file_location("signals_example", EXAMPLE)
|
|
16
|
+
signals = importlib.util.module_from_spec(spec)
|
|
17
|
+
with patch("logging.basicConfig"):
|
|
18
|
+
spec.loader.exec_module(signals)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class SignalsExampleTest(unittest.TestCase):
|
|
22
|
+
def test_training_entry_point(self):
|
|
23
|
+
example_dir = EXAMPLE.parent
|
|
24
|
+
with patch.dict(sys.modules, {"predict": signals}), patch.object(signals, "train") as train:
|
|
25
|
+
runpy.run_path(str(example_dir / "train.py"), run_name="__main__")
|
|
26
|
+
train.assert_called_once_with(signals.napi, signals.MODEL_ID, force_training=True)
|
|
27
|
+
|
|
28
|
+
def test_train_and_predict_with_v3_data(self):
|
|
29
|
+
train_data = pd.DataFrame(
|
|
30
|
+
{
|
|
31
|
+
"feature_alpha": [0.1, 0.2],
|
|
32
|
+
"feature_beta": [0.3, 0.4],
|
|
33
|
+
"feature_country": ["US", "GB"],
|
|
34
|
+
"target": [0.2, 0.8],
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
live_data = pd.DataFrame(
|
|
38
|
+
{
|
|
39
|
+
"numerai_ticker": ["A", "B"],
|
|
40
|
+
"feature_beta": [0.5, 0.6],
|
|
41
|
+
"feature_alpha": [0.7, 0.8],
|
|
42
|
+
"feature_country": ["US", "GB"],
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
api = Mock()
|
|
46
|
+
model = Mock()
|
|
47
|
+
model.feature_name_ = ["feature_alpha", "feature_beta"]
|
|
48
|
+
model.predict.return_value = [0.1, 0.9]
|
|
49
|
+
|
|
50
|
+
def read_parquet(path):
|
|
51
|
+
return train_data if path.endswith("train.parquet") else live_data
|
|
52
|
+
|
|
53
|
+
with tempfile.TemporaryDirectory() as directory:
|
|
54
|
+
with (
|
|
55
|
+
patch.object(signals, "TRAINED_MODEL_PREFIX", f"{directory}/trained_model_signals_v3.0"),
|
|
56
|
+
patch.object(signals.pd, "read_parquet", side_effect=read_parquet),
|
|
57
|
+
patch.object(signals.lgbm, "LGBMRegressor", return_value=model),
|
|
58
|
+
patch.object(signals.joblib, "dump"),
|
|
59
|
+
):
|
|
60
|
+
trained_model = signals.train(api, "model-id")
|
|
61
|
+
predictions = signals.predict(api, trained_model)
|
|
62
|
+
|
|
63
|
+
self.assertEqual(
|
|
64
|
+
[call.args[0] for call in api.download_dataset.call_args_list],
|
|
65
|
+
["signals/v3.0/train.parquet", "signals/v3.0/live.parquet"],
|
|
66
|
+
)
|
|
67
|
+
self.assertEqual(list(model.fit.call_args.args[0].columns), model.feature_name_)
|
|
68
|
+
self.assertEqual(list(model.predict.call_args.args[0].columns), model.feature_name_)
|
|
69
|
+
self.assertEqual(predictions.index.name, "numerai_ticker")
|
|
70
|
+
self.assertEqual(predictions["prediction"].tolist(), [0.1, 0.9])
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
if __name__ == "__main__":
|
|
74
|
+
unittest.main()
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
""" An extra entry point specifically for training. Used when running locally """
|
|
2
|
-
|
|
3
|
-
import predict
|
|
4
|
-
|
|
5
|
-
train_data_path, predict_data_path, predict_output_path = predict.download_data()
|
|
6
|
-
|
|
7
|
-
model_id = predict.MODEL_ID
|
|
8
|
-
model_type = predict.MODEL
|
|
9
|
-
|
|
10
|
-
predict.train(train_data_path, model_id, model_type, force_training=True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/tournament-python3/requirements.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{numerai_cli-1.1.4 → numerai_cli-1.1.6}/numerai/examples/tournament-rlang/install_packages.R
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|