mirror of
https://github.com/webclinic017/drift.git
synced 2026-07-28 11:17:47 +00:00
2606639cc2
* fix(Labelling): didn't forward shift forward returns previously, introduced major lookahead bias * fix(Baseline): use the same config
67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
from sklearn.model_selection import train_test_split
|
|
|
|
from config.types import Config, RawConfig
|
|
from config.preprocess import preprocess_config
|
|
from config.presets import get_default_config, get_minimal_config
|
|
|
|
from data_loader.load import load_data
|
|
from data_loader.process import check_data
|
|
|
|
from labeling.process import label_data
|
|
|
|
from sklearn.metrics import accuracy_score
|
|
|
|
|
|
def run_sklearn_pipeline(raw_config: RawConfig):
|
|
config = preprocess_config(raw_config)
|
|
run_sklearn_training(config)
|
|
|
|
|
|
def run_sklearn_training(config: Config):
|
|
|
|
print("---> Load data, check for validity")
|
|
X, returns = load_data(
|
|
assets=config.assets,
|
|
other_assets=config.other_assets,
|
|
exogenous_data=config.exogenous_data,
|
|
target_asset=config.target_asset,
|
|
load_non_target_asset=config.load_non_target_asset,
|
|
own_features=config.own_features,
|
|
other_features=config.other_features,
|
|
exogenous_features=config.exogenous_features,
|
|
start_date=config.start_date,
|
|
)
|
|
|
|
assert check_data(X, config) == True, "Data is not valid."
|
|
|
|
print("---> Filter for significant events when we want to trade, and label data")
|
|
events, X, y, forward_returns = label_data(
|
|
event_filter=config.event_filter,
|
|
event_labeller=config.labeling,
|
|
X=X,
|
|
returns=returns,
|
|
remove_overlapping_events=config.remove_overlapping_events,
|
|
)
|
|
|
|
X_train, X_test, y_train, y_test = train_test_split(
|
|
X, y, test_size=0.2, random_state=42, shuffle=False
|
|
)
|
|
|
|
print("---> Train directional models")
|
|
|
|
for transformation in config.transformations:
|
|
X_train = transformation.fit_transform(X_train, y_train)
|
|
|
|
for transformation in config.transformations:
|
|
X_test = transformation.transform(X_test)
|
|
|
|
config.directional_model.fit(X_train, y_train)
|
|
preds = config.directional_model.predict(X_test)
|
|
print(accuracy_score(y_test, preds))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run_sklearn_pipeline(
|
|
raw_config=get_default_config(),
|
|
)
|