cyberosa commited on
Commit
a042cec
·
1 Parent(s): cd58ecc

correction in the computation of num mech calls and roi formula

Browse files
Files changed (1) hide show
  1. 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
- total_num_mech_calls = trader_data.num_mech_calls.sum()
 
 
 
19
  agg_metrics["bet_amount"] = total_bet_amounts
20
- agg_metrics["nr_mech_calls"] = total_num_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
- total_net_earnings = trader_data.net_earnings.sum()
26
- agg_metrics["net_earnings"] = total_net_earnings
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
- + (total_num_mech_calls * DEFAULT_MECH_FEE)
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