Spaces:
Runtime error
Runtime error
cyberosa
commited on
Commit
Β·
a042cec
1
Parent(s):
cd58ecc
correction in the computation of num mech calls and roi formula
Browse files- scripts/metrics.py +27 -31
scripts/metrics.py
CHANGED
|
@@ -4,6 +4,17 @@ from tqdm import tqdm
|
|
| 4 |
DEFAULT_MECH_FEE = 0.01 # xDAI
|
| 5 |
|
| 6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
def compute_metrics(
|
| 8 |
trader_address: str, trader_data: pd.DataFrame, live_metrics: bool = False
|
| 9 |
) -> dict:
|
|
@@ -15,22 +26,31 @@ def compute_metrics(
|
|
| 15 |
agg_metrics = {}
|
| 16 |
agg_metrics["trader_address"] = trader_address
|
| 17 |
total_bet_amounts = trader_data.collateral_amount.sum()
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
| 19 |
agg_metrics["bet_amount"] = total_bet_amounts
|
| 20 |
-
agg_metrics["nr_mech_calls"] =
|
| 21 |
agg_metrics["staking"] = trader_data.iloc[0].staking
|
| 22 |
agg_metrics["nr_trades"] = len(trader_data)
|
| 23 |
if live_metrics:
|
| 24 |
return agg_metrics
|
| 25 |
-
|
| 26 |
-
agg_metrics["
|
| 27 |
-
agg_metrics["earnings"] = trader_data.earnings.sum()
|
| 28 |
total_fee_amounts = trader_data.mech_fee_amount.sum()
|
| 29 |
total_costs = (
|
| 30 |
total_bet_amounts
|
| 31 |
+ total_fee_amounts
|
| 32 |
-
+ (
|
| 33 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
agg_metrics["roi"] = total_net_earnings / total_costs
|
| 35 |
return agg_metrics
|
| 36 |
|
|
@@ -62,31 +82,6 @@ def compute_trader_metrics_by_market_creator(
|
|
| 62 |
return metrics
|
| 63 |
|
| 64 |
|
| 65 |
-
def compute_trader_metrics_by_trader_family(
|
| 66 |
-
trader_address: str, traders_data: pd.DataFrame, trader_family: str = "all"
|
| 67 |
-
) -> dict:
|
| 68 |
-
"""This function computes for a specific time window (week or day) the different metrics:
|
| 69 |
-
roi, net_earnings, earnings, bet_amount, nr_mech_calls and nr_trades.
|
| 70 |
-
The global roi of the trader agent by computing the individual net profit and the individual costs values
|
| 71 |
-
achieved per market and dividing both.
|
| 72 |
-
It is possible to filter by trader family: quickstart_agent, pearl_agent, non_agent, all
|
| 73 |
-
"""
|
| 74 |
-
assert "trader_family" in traders_data.columns
|
| 75 |
-
filtered_traders_data = traders_data.loc[
|
| 76 |
-
traders_data["trader_address"] == trader_address
|
| 77 |
-
]
|
| 78 |
-
if trader_family != "all": # compute only for the specific trader family
|
| 79 |
-
filtered_traders_data = filtered_traders_data.loc[
|
| 80 |
-
filtered_traders_data["trader_family"] == trader_family
|
| 81 |
-
]
|
| 82 |
-
if len(filtered_traders_data) == 0:
|
| 83 |
-
# tqdm.write(f"No data. Skipping trader family {trader_family}")
|
| 84 |
-
return {} # No Data
|
| 85 |
-
|
| 86 |
-
metrics = compute_metrics(trader_address, filtered_traders_data)
|
| 87 |
-
return metrics
|
| 88 |
-
|
| 89 |
-
|
| 90 |
def merge_trader_weekly_metrics(
|
| 91 |
trader: str, weekly_data: pd.DataFrame, week: str
|
| 92 |
) -> pd.DataFrame:
|
|
@@ -232,6 +227,7 @@ def compute_daily_metrics_by_market_creator(
|
|
| 232 |
merge_trader_daily_metrics(trader, filtered_data, day, live_metrics)
|
| 233 |
)
|
| 234 |
print("End computing all daily metrics by market creator")
|
|
|
|
| 235 |
return pd.concat(contents, ignore_index=True)
|
| 236 |
|
| 237 |
|
|
|
|
| 4 |
DEFAULT_MECH_FEE = 0.01 # xDAI
|
| 5 |
|
| 6 |
|
| 7 |
+
def compute_total_nr_mech_calls_per_trader(trader_data: pd.DataFrame) -> int:
|
| 8 |
+
"""Function to compute the total number of mech calls for alll markets
|
| 9 |
+
that the trader bet upon"""
|
| 10 |
+
nr_mech_calls_per_market = (
|
| 11 |
+
trader_data.groupby("title")["num_mech_calls"]
|
| 12 |
+
.max()
|
| 13 |
+
.reset_index(name="nr_mech_calls_per_market")
|
| 14 |
+
)
|
| 15 |
+
return nr_mech_calls_per_market.nr_mech_calls_per_market.sum()
|
| 16 |
+
|
| 17 |
+
|
| 18 |
def compute_metrics(
|
| 19 |
trader_address: str, trader_data: pd.DataFrame, live_metrics: bool = False
|
| 20 |
) -> dict:
|
|
|
|
| 26 |
agg_metrics = {}
|
| 27 |
agg_metrics["trader_address"] = trader_address
|
| 28 |
total_bet_amounts = trader_data.collateral_amount.sum()
|
| 29 |
+
total_nr_mech_calls_all_markets = compute_total_nr_mech_calls_per_trader(
|
| 30 |
+
trader_data
|
| 31 |
+
)
|
| 32 |
+
|
| 33 |
agg_metrics["bet_amount"] = total_bet_amounts
|
| 34 |
+
agg_metrics["nr_mech_calls"] = total_nr_mech_calls_all_markets
|
| 35 |
agg_metrics["staking"] = trader_data.iloc[0].staking
|
| 36 |
agg_metrics["nr_trades"] = len(trader_data)
|
| 37 |
if live_metrics:
|
| 38 |
return agg_metrics
|
| 39 |
+
total_earnings = trader_data.earnings.sum()
|
| 40 |
+
agg_metrics["earnings"] = total_earnings
|
|
|
|
| 41 |
total_fee_amounts = trader_data.mech_fee_amount.sum()
|
| 42 |
total_costs = (
|
| 43 |
total_bet_amounts
|
| 44 |
+ total_fee_amounts
|
| 45 |
+
+ (total_nr_mech_calls_all_markets * DEFAULT_MECH_FEE)
|
| 46 |
)
|
| 47 |
+
total_net_earnings = total_earnings - total_costs
|
| 48 |
+
previous_net_earnings = trader_data.net_earnings.sum()
|
| 49 |
+
# if previous_net_earnings > total_net_earnings:
|
| 50 |
+
# print(
|
| 51 |
+
# f"case for trader {trader_address} where previous net_earnings was higher {previous_net_earnings} > {total_net_earnings} "
|
| 52 |
+
# )
|
| 53 |
+
agg_metrics["net_earnings"] = total_net_earnings
|
| 54 |
agg_metrics["roi"] = total_net_earnings / total_costs
|
| 55 |
return agg_metrics
|
| 56 |
|
|
|
|
| 82 |
return metrics
|
| 83 |
|
| 84 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
def merge_trader_weekly_metrics(
|
| 86 |
trader: str, weekly_data: pd.DataFrame, week: str
|
| 87 |
) -> pd.DataFrame:
|
|
|
|
| 227 |
merge_trader_daily_metrics(trader, filtered_data, day, live_metrics)
|
| 228 |
)
|
| 229 |
print("End computing all daily metrics by market creator")
|
| 230 |
+
print(f"length of contents = {len(contents)}")
|
| 231 |
return pd.concat(contents, ignore_index=True)
|
| 232 |
|
| 233 |
|