* feat(Project): use 5 minute data, running training in parallel, sped up cusum filter by 10x with numba
* fix(WalkForward): inference mini-batch parallelization
* fix(WalkForward): don't use the parallel version of any of the functions
* feat(CI): download the data required
* fix(Project): 5min_crypto folder added
* fix(Evaluate): make sure we have numerical stability in returns
* feat(Models): use SKLearn models directly to enable composability
* feat(Inference): batched inference now working, added forecasting_horizon
* fix(Inference): works again
* fix(Inference)
* chore(Models): remove unused Ensemble model
* fix(Labeller): don't just forward shift returns, also take the sum of the data happened until then
* Update test.yml
* refactor(Training): added InferenceResult & TrainedModel types
* refactor(Pipeline): introduced TrainingOutcome, BetSizingWithMetaOutcome, etc.
* fix(Pipeline): getting it to compile
* refactor(WalkForward): separate preprocessing step
* feat(Pipeline): separate out transformations processing step
* refactor(Pipeline): use the Directional model terminology, put bet_sizing into pipeline instead of hiding it in a step
* refactor(WalkForward): moved functions to separate folder
* fix(WalkForward): use sparse array to store models, process transformations in parallel (lot faster)
* fix(Tests): and evaluation
* fix(Tests): for realz
* fix(Inference): preloading everything now, renamed primary models to directional models
* fix(BetSizing): was running transformations on the wrong data, oops
* fix(BetSizing): concatenated on the wrong axis accidentally
* fix(Reporting): able to use the new Stats type
* fix(BetSizing): renamed int column names
* fix(Portfolio): name the column properly
* fix(Reporting): rename the correct Series, lol
* fix(Inference): walk_forwad_inference() can deal with models not being aligned with the starting index
* fix(WalkForward): accidentally using the wrong index
* fix(WalkForward): use the correct indicies to fetch last model/transformations
* fix(CI): changed the name of the results
* refactor(Config): use a Config object instead of dictionary of dictionaries!
* fix(Config): use default_ensemble_config
* fix(Portfolio): fixed portfolio construction
* refactor(Naming): use `primary_models` & `meta_labeling_models`
* refactor(Naming): using primary * meta_labeling across config and in pipeline
* feat(Pipeline): added back Ensemble models
* fix(Pipeline): compiler error
* fix(Config): typo
* chore(Pipeline): removed unused averaging step
* revert the changes in discretizing
* chore(Pipeline): remove sharpe improvement logging
* fix(Pipeline): ensemble predictions should be a pd.Series instead of a DataFrame
* fix(Pipeline): discard unnecessary ensemble_probabilities
* fix(Pipeline): fixes regarding various meta-labeling ensemble bugs
* fix(Reporting): use the new naming convention
* fix(Reporting): use the right variable
* feat(Sweep): new sweep for ensemble models
* fix(Sweep): config reference
* fix(Config): simplified dev config
* fix(Models): use the faster LR model
* fix(Models): use LGBM in the meta-labeling model for speed
* fix(Selection): always use the first model for feature selection, commented out caching from select_features() as it's close to redundant in terms of speed
* feature(MetaLabeling): added hacky prototype
* fix(MetaLabeling): drop index until first valid X & y
* fix(MetaLabeling): transform both X & y before feature selection
* fix(MetaLabeling): got feature selection to work
* fix(MetaLabeling): correct values for meta_y
* feat(MetaLabeling): created predictions multiplied by bet sizes
* feat(Pipeline): print out averaged result
* fix(Evaluation): correctly deal with non-discretized data
* fix(Pipeline): use the right column names
* refactor(Pipeline): move out meta-labeling
* refactor(Pipeline): complete refactoring
* feat(CI): post results to PR
* fix(Pipeline): use the correct filename
* chore(Config): removed now redundant feature_selection flag
* feat(Models): added SVC
* fix(Pipeline): accidentally switched two return values
* feat(Sweep): prepared sweep_meta.yaml, moved report_results() into a separate file
* fix(Pipeline): wrong function name
* fix(Sweep): yaml + run_sweep
* fix(Sweep): typo in name
* fix(Reporting): only save averaged results
* feat(MetaLabeling): use optional meta-labeling step for every lvl1 models, before averaging
* feat(Reporting): print out sharpe improvement in meta-labeling step
* fix(Sweep): adjusted config, defaulted to good defaults
* fix(Sweep): adjusted sweep