mirror of
https://github.com/webclinic017/drift.git
synced 2026-08-06 15:47:52 +00:00
feat(Data): added various data loading config options, walk forward method draft (#9)
* feat(Eval): added format_data_for_backtest() * feat(Data): added many configurable parameters to load_files to reduce boilerplate and prepare for HPO * feat(Core): added walk forward method of training/testing * fix(Model): remove the unnecessary softmax activation from the keras models * feat(Core): added walk_forward_train_test()
This commit is contained in:
committed by
GitHub
parent
d4676e099b
commit
7aedb91069
@@ -1,5 +1,5 @@
|
||||
#%% Import all the stuff, load data, define constants
|
||||
from load_data import create_target_cum_forward_returns, create_target_pos_neg_classes, load_files, create_target_four_classes
|
||||
from load_data import load_files, create_target_classes
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from utils.sktime import from_df_to_sktime_data
|
||||
@@ -9,27 +9,46 @@ from sklearn.metrics import accuracy_score
|
||||
from sklearn.pipeline import Pipeline
|
||||
from sktime.classification.interval_based import (
|
||||
TimeSeriesForestClassifier,
|
||||
SupervisedTimeSeriesForest,
|
||||
|
||||
)
|
||||
from sktime.forecasting.model_selection import SlidingWindowSplitter
|
||||
from sktime.forecasting.model_selection import ForecastingRandomizedSearchCV
|
||||
|
||||
from sktime.forecasting.compose import make_reduction
|
||||
|
||||
from sklearn.tree import DecisionTreeClassifier
|
||||
from sklearn.metrics import confusion_matrix
|
||||
from sklearn.preprocessing import StandardScaler
|
||||
from sktime.forecasting.model_selection import (
|
||||
SlidingWindowSplitter,
|
||||
ForecastingGridSearchCV,
|
||||
)
|
||||
# from sktime.forecasting.model_evaluation import
|
||||
# from sklearnex import patch_sklearn
|
||||
# patch_sklearn()
|
||||
from utils.evaluate import print_classification_metrics, format_data_for_backtest
|
||||
from sklearn.ensemble import RandomForestRegressor
|
||||
from sklearnex import patch_sklearn
|
||||
patch_sklearn()
|
||||
|
||||
|
||||
ticket_to_predict = 'BTC_USD'
|
||||
print('Predicting: ', ticket_to_predict)
|
||||
|
||||
data = load_files(path='data/',
|
||||
own_asset=ticket_to_predict,
|
||||
load_other_assets=True,
|
||||
log_returns=True,
|
||||
add_date_features=True,
|
||||
own_technical_features='level2',
|
||||
other_technical_features='none',
|
||||
exogenous_features='none',
|
||||
index_column='int'
|
||||
)
|
||||
|
||||
data = load_files('data/', add_features=True, log_returns=True, narrow_format=False)
|
||||
data.reset_index(drop=True, inplace=True)
|
||||
data = data[[column for column in data.columns if not column.endswith('volume')]]
|
||||
data = data[[column for column in data.columns if column.startswith('BTC_ETH_')]]
|
||||
target_col = 'target'
|
||||
data = create_target_pos_neg_classes(data, 'BTC_ETH_returns', 1)
|
||||
returns_col = ticket_to_predict + '_returns'
|
||||
data = create_target_classes(data, returns_col, 1, 'two')
|
||||
|
||||
X = data
|
||||
X = data.drop(columns=[target_col])
|
||||
y = data[target_col]
|
||||
|
||||
X_train, X_test, y_train, y_test = temporal_train_test_split(X, y, test_size=0.2)
|
||||
@@ -45,11 +64,32 @@ X_test = from_df_to_sktime_data(X_test)
|
||||
# ])
|
||||
|
||||
# pipe.fit(X_train, y_train)
|
||||
# regressor = RandomForestRegressor(n_estimators=20)
|
||||
# model = DecisionTreeClassifier(random_state=1)
|
||||
model = TimeSeriesForestClassifier(n_estimators=50, random_state=1)
|
||||
model.fit(y = y_train, X = X_train)
|
||||
# forecaster = make_reduction(model, scitype="tabular-regressor")
|
||||
# nested_params = {"window_length": list(range(2,30)),
|
||||
# "estimator__max_depth": list(range(5,16))}
|
||||
# # "estimator__n_estimators": list(range(10,200))}
|
||||
#%%
|
||||
|
||||
model = TimeSeriesForestClassifier(n_estimators=200, random_state=1)
|
||||
model.fit(X_train, y_train)
|
||||
# cv = SlidingWindowSplitter(initial_window=40, window_length=30)
|
||||
# nrcv = ForecastingRandomizedSearchCV(forecaster, strategy="refit", cv=cv,
|
||||
# param_distributions=nested_params,
|
||||
# n_iter=5, random_state=42)
|
||||
# nrcv.fit(y = y_train, X = X_train, fh=np.array([1]))
|
||||
# print(nrcv.best_params_)
|
||||
# print(nrcv.best_score_)
|
||||
|
||||
# model = DecisionTreeClassifier(random_state=1)
|
||||
# model.fit(X_train, y_train)
|
||||
|
||||
# preds = nrcv.best_forecaster_.predict( X=X_test)
|
||||
# # print(preds)
|
||||
preds = model.predict(X_test)
|
||||
print(model.score(X_test, y_test))
|
||||
print(confusion_matrix(y_test, preds))
|
||||
print(print_classification_metrics(y_test, preds))
|
||||
|
||||
# backtest_data = format_data_for_backtest(data, returns_col, X_test, preds)
|
||||
# print(backtest_data)
|
||||
# %%
|
||||
|
||||
Reference in New Issue
Block a user