mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-17 17:34:35 +08:00
fix naming and code style
This commit is contained in:
@@ -32,7 +32,7 @@ data_handler_config: &data_handler_config
|
|||||||
|
|
||||||
task:
|
task:
|
||||||
model:
|
model:
|
||||||
class: "HF_LGBModel"
|
class: "HFLGBModel"
|
||||||
module_path: "qlib.contrib.model.highfreq_gdbt_model"
|
module_path: "qlib.contrib.model.highfreq_gdbt_model"
|
||||||
kwargs:
|
kwargs:
|
||||||
objective: 'binary'
|
objective: 'binary'
|
||||||
|
|||||||
@@ -8,12 +8,23 @@ import pandas as pd
|
|||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
|
|
||||||
def calc_prec(
|
def calc_long_short_prec(
|
||||||
pred: pd.Series, label: pd.Series, date_col="datetime", quantile: float = 0.2, dropna=False, is_alpha=False
|
pred: pd.Series, label: pd.Series, date_col="datetime", quantile: float = 0.2, dropna=False, is_alpha=False
|
||||||
) -> Tuple[pd.Series, pd.Series]:
|
) -> Tuple[pd.Series, pd.Series]:
|
||||||
"""calculate the precision
|
"""
|
||||||
pred :
|
calculate the precision for long and short operation
|
||||||
pred
|
|
||||||
|
|
||||||
|
:param pred/label: index is **pd.MultiIndex**, index name is **[datetime, instruments]**; columns names is **[score]**.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
score
|
||||||
|
datetime instrument
|
||||||
|
2020-12-01 09:30:00 SH600068 0.553634
|
||||||
|
SH600195 0.550017
|
||||||
|
SH600276 0.540321
|
||||||
|
SH600584 0.517297
|
||||||
|
SH600715 0.544674
|
||||||
label :
|
label :
|
||||||
label
|
label
|
||||||
date_col :
|
date_col :
|
||||||
@@ -25,7 +36,7 @@ def calc_prec(
|
|||||||
long precision and short precision in time level
|
long precision and short precision in time level
|
||||||
"""
|
"""
|
||||||
if is_alpha:
|
if is_alpha:
|
||||||
label = label - label.mean(level=0)
|
label = label - label.mean(level=date_col)
|
||||||
if int(1 / quantile) >= len(label.index.get_level_values(1).unique()):
|
if int(1 / quantile) >= len(label.index.get_level_values(1).unique()):
|
||||||
raise ValueError("Need more instruments to calculate precision")
|
raise ValueError("Need more instruments to calculate precision")
|
||||||
|
|
||||||
@@ -41,13 +52,13 @@ def calc_prec(
|
|||||||
short = group.apply(lambda x: x.nsmallest(N(x), columns="pred").label).reset_index(level=0, drop=True)
|
short = group.apply(lambda x: x.nsmallest(N(x), columns="pred").label).reset_index(level=0, drop=True)
|
||||||
|
|
||||||
groupll = long.groupby(date_col)
|
groupll = long.groupby(date_col)
|
||||||
ll_ration = groupll.apply(lambda x: x > 0)
|
l_dom = groupll.apply(lambda x: x > 0)
|
||||||
ll_c = groupll.count()
|
l_c = groupll.count()
|
||||||
|
|
||||||
groups = short.groupby(date_col)
|
groups = short.groupby(date_col)
|
||||||
s_ration = groups.apply(lambda x: x < 0)
|
s_dom = groups.apply(lambda x: x < 0)
|
||||||
s_c = groups.count()
|
s_c = groups.count()
|
||||||
return (ll_ration.groupby(date_col).sum() / ll_c), (s_ration.groupby(date_col).sum() / s_c)
|
return (l_dom.groupby(date_col).sum() / l_c), (s_dom.groupby(date_col).sum() / s_c)
|
||||||
|
|
||||||
|
|
||||||
def calc_ic(pred: pd.Series, label: pd.Series, date_col="datetime", dropna=False) -> Tuple[pd.Series, pd.Series]:
|
def calc_ic(pred: pd.Series, label: pd.Series, date_col="datetime", dropna=False) -> Tuple[pd.Series, pd.Series]:
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ from qlib.data.dataset.handler import DataHandlerLP
|
|||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
|
|
||||||
class HF_LGBModel(ModelFT):
|
class HFLGBModel(ModelFT):
|
||||||
"""LightGBM Model"""
|
"""LightGBM Model for high frequency prediction"""
|
||||||
|
|
||||||
def __init__(self, loss="mse", **kwargs):
|
def __init__(self, loss="mse", **kwargs):
|
||||||
if loss not in {"mse", "binary"}:
|
if loss not in {"mse", "binary"}:
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from ..data.dataset.handler import DataHandlerLP
|
|||||||
from ..utils import init_instance_by_config, get_module_by_module_path
|
from ..utils import init_instance_by_config, get_module_by_module_path
|
||||||
from ..log import get_module_logger
|
from ..log import get_module_logger
|
||||||
from ..utils import flatten_dict
|
from ..utils import flatten_dict
|
||||||
from ..contrib.eva.alpha import calc_ic, calc_long_short_return, calc_prec
|
from ..contrib.eva.alpha import calc_ic, calc_long_short_return, calc_long_short_prec
|
||||||
from ..contrib.strategy.strategy import BaseStrategy
|
from ..contrib.strategy.strategy import BaseStrategy
|
||||||
|
|
||||||
logger = get_module_logger("workflow", "INFO")
|
logger = get_module_logger("workflow", "INFO")
|
||||||
@@ -169,8 +169,7 @@ class HFSignalRecord(SignalRecord):
|
|||||||
def generate(self):
|
def generate(self):
|
||||||
pred = self.load("pred.pkl")
|
pred = self.load("pred.pkl")
|
||||||
raw_label = self.load("label.pkl")
|
raw_label = self.load("label.pkl")
|
||||||
|
long_pre, short_pre = calc_long_short_prec(pred.iloc[:, 0], raw_label.iloc[:, 0], is_alpha=True)
|
||||||
long_pre, short_pre = calc_prec(pred.iloc[:, 0], raw_label.iloc[:, 0], is_alpha=True)
|
|
||||||
ic, ric = calc_ic(pred.iloc[:, 0], raw_label.iloc[:, 0])
|
ic, ric = calc_ic(pred.iloc[:, 0], raw_label.iloc[:, 0])
|
||||||
metrics = {
|
metrics = {
|
||||||
"IC": ic.mean(),
|
"IC": ic.mean(),
|
||||||
@@ -205,8 +204,9 @@ class HFSignalRecord(SignalRecord):
|
|||||||
self.get_path("ric.pkl"),
|
self.get_path("ric.pkl"),
|
||||||
self.get_path("long_pre.pkl"),
|
self.get_path("long_pre.pkl"),
|
||||||
self.get_path("short_pre.pkl"),
|
self.get_path("short_pre.pkl"),
|
||||||
|
self.get_path("long_short_r.pkl"),
|
||||||
|
self.get_path("long_avg_r.pkl"),
|
||||||
]
|
]
|
||||||
paths.extend([self.get_path("long_short_r.pkl"), self.get_path("long_avg_r.pkl")])
|
|
||||||
return paths
|
return paths
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user