Files
drift/labeling/process.py
T
Mark Aron Szulyovszky 75157c6285 feat(Labeling): purge overlapping events, sort dataframe at loading time (#226)
* feat(Labeling): purge overlapping events, sort dataframe at loading time

* fix(Linter): ran

* refactor(Labeling): moved purge_overlapping_events one abstraction level higher

* fix(Data): renamed class

* fix(Data): corrected parameter name

* fix(Config): parameters

* fix(Data): fixed path

* fix(Data): uncommented required code

* feat(EventFilters): use vol based CUSUM

* fix(Config): only retrain every 2000 samples

* fix(Config): filter out even more events

* fix(Inference): added remove_overlapping_events

* refactor(Types): simplified type hierarchy
2022-03-02 00:26:33 +01:00

35 lines
1.1 KiB
Python

from .types import EventFilter, EventLabeller, EventsDataFrame
from data_loader.types import ForwardReturnSeries, XDataFrame, ReturnSeries, ySeries
from .labellers.utils import purge_overlapping_events
def label_data(
event_filter: EventFilter,
event_labeller: EventLabeller,
X: XDataFrame,
returns: ReturnSeries,
remove_overlapping_events: bool,
) -> tuple[EventsDataFrame, XDataFrame, ySeries, ForwardReturnSeries]:
event_start_times = event_filter.get_event_start_times(returns)
print(
"| Filtered out ",
(1 - (len(event_start_times) / len(returns))) * 100,
"% of timestamps",
)
events = event_labeller.label_events(event_start_times, returns)
if remove_overlapping_events:
events = purge_overlapping_events(events)
print(
"| Purged ",
(1 - (len(events) / len(event_start_times))) * 100,
"% of overlapping events",
)
X = X.filter(items=events.index, axis=0)
y = events["label"]
forward_returns = events["returns"]
return events, X, y, forward_returns