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 |
|