Files
drift/tests/test_walk_forward.py
T
Mark Aron Szulyovszky cc7061b456 feat(Core): ensemble models, correct forward returns calculation, scaling, only train from when asset returns are available, major bug fixed in walk_forward_train_test (#35)
* fix(Core): correct forward returns calculation, classifiers are now working again, only train from when asset returns are available

* feat(Utils): added get_first_valid_return_index()

* feat(Ensemble): return models from `run_whole_pipeline`

* feat(Ensemble): added ensemble step, fixed walk_forward_train_test predictions index confusion,

* chore(Pipeline): remove unnecessary extra ensemble results dataframe

* refactor(Core): removed unnecessary ensemble_train_predict, moved run_single_asset_trainig_pipeline to a separate file

* feat(Training): added scaling on expanding window (the past) to walk_forward_train_test(), now printing out mean sharpe ratio

* feat(CI): added environment.yml file

* chore(Environment): update env.yml

* feat(CI): added testing workflow

* fix(CI): renamed enviroment.yml

* fix(Tests): added missing new parameter to walk_forward_train_test()
2021-12-17 14:32:17 +01:00

55 lines
1.3 KiB
Python

import pytest
import numpy as np
import pandas as pd
from training.walk_forward import walk_forward_train_test
from sklearn.base import BaseEstimator
no_of_rows = 100
def __generate_test_data(no_of_rows):
no_columns = 6
X = [[row] * no_columns for row in range(no_of_rows)]
assert X[0][0] == 0
assert X[1][0] == 1
assert X[2][0] == 2
assert X[3][0] == 3
X = pd.DataFrame(X)
y = [row+1 for row in range(no_of_rows)]
assert y[0] == 1
assert y[1] == 2
assert y[2] == 3
y = pd.Series(y)
return X, y
def test_walk_forward_train_test():
X, y = __generate_test_data(no_of_rows)
window_length = 10
class StubModel(BaseEstimator):
def fit(self, X, y):
assert len(X) == window_length
for i in range(len(X)):
assert X[i][0] + 1 == y[i]
def predict(self, X):
return np.array([X[0][0] + 1])
model = StubModel()
scaler = None
models, predictions = walk_forward_train_test(
model_name='test',
model=model,
X=X,
y=y,
target_returns=y,
window_size=window_length,
retrain_every=10,
scaler=scaler)
for i in range(window_length, no_of_rows):
predictions[i] == y[i]