1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-14 16:26:55 +08:00

update format

This commit is contained in:
Alex Wang
2021-03-22 15:37:54 +08:00
parent 1ad237f89f
commit 3bf6c7f95f
2 changed files with 24 additions and 16 deletions

View File

@@ -7,15 +7,18 @@ import pandas as pd
from typing import Tuple
def calc_prec(pred: pd.Series, label: pd.Series, date_col="datetime", quantile: float = 0.2, dropna=False, is_alpha=False) -> Tuple[pd.Series, pd.Series]:
""" calculate the precision
def calc_prec(
pred: pd.Series, label: pd.Series, date_col="datetime", quantile: float = 0.2, dropna=False, is_alpha=False
) -> Tuple[pd.Series, pd.Series]:
"""calculate the precision
pred :
pred
label :
label
date_col :
date_col
Returns
-------
(pd.Series, pd.Series)
@@ -23,29 +26,28 @@ def calc_prec(pred: pd.Series, label: pd.Series, date_col="datetime", quantile:
"""
if is_alpha:
label = label - label.mean(level=0)
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")
df = pd.DataFrame({"pred": pred, "label": label})
if dropna:
df.dropna(inplace = True)
df.dropna(inplace=True)
group = df.groupby(level=date_col)
N = lambda x: int(len(x) * quantile)
# find the top/low quantile of prediction and treat them as long and short target
long = group.apply(lambda x: x.nlargest(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)
ll_ration = groupll.apply(lambda x: x > 0)
ll_c = groupll.count()
groups = short.groupby(date_col)
s_ration = groups.apply(lambda x: x < 0)
s_c = groups.count()
return (ll_ration.groupby(date_col).sum()/ll_c), (s_ration.groupby(date_col).sum()/s_c)
return (ll_ration.groupby(date_col).sum() / ll_c), (s_ration.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]: