2021-12-28 22:50:09 +01:00
|
|
|
from fracdiff.sklearn import FracdiffStat
|
|
|
|
|
import pandas as pd
|
|
|
|
|
import numpy as np
|
2022-01-04 11:44:35 +01:00
|
|
|
from feature_extractors.utils import apply_log_if_necessary_series
|
2021-12-28 22:50:09 +01:00
|
|
|
|
|
|
|
|
def feature_fractional_differentiation(df: pd.DataFrame, period: int, is_log_return: bool) -> pd.Series:
|
2022-01-03 13:57:36 +01:00
|
|
|
frac_diff = FracdiffStat(window = period)
|
2021-12-28 22:50:09 +01:00
|
|
|
input_series = df["close"].to_numpy().reshape(-1, 1)
|
2022-01-03 13:57:36 +01:00
|
|
|
result = frac_diff.fit_transform(input_series)
|
2022-01-04 11:44:35 +01:00
|
|
|
return pd.Series(result.squeeze(), index = df.index)
|
|
|
|
|
|
|
|
|
|
def feature_fractional_differentiation_log(df: pd.DataFrame, period: int, is_log_return: bool) -> pd.Series:
|
|
|
|
|
series = feature_fractional_differentiation(df, period, is_log_return)
|
|
|
|
|
return apply_log_if_necessary_series(series, "fracdiff")
|
|
|
|
|
|