Files
Mark Aron Szulyovszky 2606639cc2 fix(Labelling): didn't forward shift forward returns previously, introduced major lookahead bias (#249)
* fix(Labelling): didn't forward shift forward returns previously, introduced major lookahead bias

* fix(Baseline): use the same config
2022-03-15 19:12:40 +01:00

53 lines
1.5 KiB
Python

import pandas as pd
from data_loader.types import ForwardReturnSeries
from labeling.types import EventsDataFrame
from typing import Callable
import numpy as np
def create_forward_returns(series: pd.Series, period: int) -> ForwardReturnSeries:
assert period > 0
indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=period)
return series.rolling(window=indexer).sum().shift(-1)
def purge_overlapping_events(events: EventsDataFrame) -> EventsDataFrame:
events = events.copy()
indicies_to_remove = []
last_event_end = events.iloc[0]["start"]
for index, row in events.iterrows():
if row["start"] < last_event_end:
indicies_to_remove.append(index)
else:
last_event_end = row["end"]
events.drop(indicies_to_remove, inplace=True)
return events
def discretize_binary(x):
return 1 if x > 0 else -1
def discretize_binary_zero_one(x):
return 1 if x > 0 else 0
def discretize_threeway(x):
return 0 if x == 0 else 1 if x > 0 else -1
def discretize_threeway_threshold(threshold: float) -> Callable:
def discretize(current_value):
lower_threshold = -threshold
upper_threshold = threshold
if np.isnan(current_value):
return np.nan
elif current_value <= lower_threshold:
return -1
elif current_value > lower_threshold and current_value < upper_threshold:
return 0
else:
return 1
return discretize