diff --git a/config/presets.py b/config/presets.py index 75f7507..d84faaa 100644 --- a/config/presets.py +++ b/config/presets.py @@ -15,10 +15,10 @@ def get_default_config() -> RawConfig: return RawConfig( dimensionality_reduction_ratio=0.5, - n_features_to_select=30, + n_features_to_select=50, sliding_window_size=3800, retrain_every=1000, - scaler="minmax", # 'normalize' 'minmax' 'standardize' + scaler="minmax", # 'normalize' 'minmax' 'standardize' 'robust' assets=["fivemin_crypto"], target_asset="BTC_USD", other_assets=[], diff --git a/config/types.py b/config/types.py index 62c23df..a5b0feb 100644 --- a/config/types.py +++ b/config/types.py @@ -3,7 +3,7 @@ from typing import Literal, Optional from labeling.types import EventFilter from models.base import Model from data_loader.types import DataCollection, DataSource -from feature_extractors.types import FeatureExtractor, ScalerTypes +from feature_extractors.types import FeatureExtractor from labeling.types import EventFilter, EventLabeller from sklearn.base import BaseEstimator from dataclasses import dataclass @@ -15,7 +15,7 @@ class RawConfig(BaseModel): n_features_to_select: int sliding_window_size: int retrain_every: int - scaler: Literal["normalize", "minmax", "standardize"] + scaler: Literal["normalize", "minmax", "standardize", "robust"] assets: list[str] target_asset: str diff --git a/data_loader/get_prices.py b/data_loader/get_prices.py index 7116497..a883809 100644 --- a/data_loader/get_prices.py +++ b/data_loader/get_prices.py @@ -16,10 +16,6 @@ def get_crypto_price_crypto_compare( return df -ada = get_crypto_price_crypto_compare("ADA", "USD", 1500) -ada - - def get_crypto_price_av(symbol: str, exchange: str, start_date=None) -> pd.DataFrame: api_url = f"https://www.alphavantage.co/query?function=DIGITAL_CURRENCY_DAILY&symbol={symbol}&market={exchange}&apikey={AV_API_KEY}" raw_df = requests.get(api_url).json() diff --git a/feature_extractors/types.py b/feature_extractors/types.py index d32e3f1..dbdee87 100644 --- a/feature_extractors/types.py +++ b/feature_extractors/types.py @@ -6,4 +6,3 @@ IsLogReturn = bool FeatureExtractor = Callable[[pd.DataFrame, Period], Union[pd.DataFrame, pd.Series]] Name = str FeatureExtractorConfig = tuple[Name, FeatureExtractor, list[Period]] -ScalerTypes = Literal["normalize", "minmax", "standardize", "none"] diff --git a/transformations/retrieve.py b/transformations/retrieve.py index d96f99a..94fc99e 100644 --- a/transformations/retrieve.py +++ b/transformations/retrieve.py @@ -3,9 +3,9 @@ from .pca import PCATransformation from .sklearn import SKLearnTransformation from typing import Literal, Optional from models.model_map import default_feature_selector_classification -from sklearn.preprocessing import MinMaxScaler, Normalizer, StandardScaler +from sklearn.preprocessing import MinMaxScaler, Normalizer, StandardScaler, RobustScaler -ScalerTypes = Literal["normalize", "minmax", "standardize"] +ScalerTypes = Literal["normalize", "minmax", "standardize", "robust"] def get_rfe(n_feature_to_select: int) -> Optional[RFETransformation]: @@ -38,5 +38,9 @@ def get_scaler(type: ScalerTypes) -> SKLearnTransformation: return SKLearnTransformation(MinMaxScaler(feature_range=(-1, 1))) elif type == "standardize": return SKLearnTransformation(StandardScaler()) + elif type == "robust": + return SKLearnTransformation( + RobustScaler(with_centering=False, quantile_range=(0.10, 0.90)) + ) else: raise Exception("Scaler type not supported")