{ "cells": [ { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "# import sys\n", "# sys.path.append('..')\n", "# from scripts.metrics import compute_weekly_metrics_by_market_creator" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "all_trades = pd.read_parquet('../data/all_trades_profitability.parquet')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['trader_address', 'market_creator', 'trade_id', 'creation_timestamp',\n", " 'title', 'market_status', 'collateral_amount', 'outcome_index',\n", " 'trade_fee_amount', 'outcomes_tokens_traded', 'current_answer',\n", " 'is_invalid', 'winning_trade', 'earnings', 'redeemed',\n", " 'redeemed_amount', 'num_mech_calls', 'mech_fee_amount', 'net_earnings',\n", " 'roi', 'staking', 'nr_mech_calls'],\n", " dtype='object')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_trades.columns" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def compute_winning_metric_per_trader_per_market_creator(\n", " trader_address: str, week_traders_data: pd.DataFrame, market_creator: str = \"all\"\n", ") -> float:\n", " assert \"market_creator\" in week_traders_data.columns\n", " filtered_traders_data = week_traders_data.loc[\n", " week_traders_data[\"trader_address\"] == trader_address\n", " ]\n", " if market_creator != \"all\": # compute only for the specific market creator\n", " filtered_traders_data = filtered_traders_data.loc[\n", " filtered_traders_data[\"market_creator\"] == market_creator\n", " ]\n", " if len(filtered_traders_data) == 0:\n", " return None # No Data\n", " winning_perc = (\n", " filtered_traders_data[\"winning_trade\"].sum()\n", " / filtered_traders_data[\"winning_trade\"].count()\n", " * 100.0\n", " )\n", " return winning_perc" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def merge_winning_metrics_by_trader(\n", " trader: str, weekly_data: pd.DataFrame, week: str\n", ") -> pd.DataFrame:\n", " trader_metrics = []\n", " # computation as specification 1 for all market creators\n", " winning_metrics_all = {}\n", " winning_metric_all = compute_winning_metric_per_trader_per_market_creator(\n", " trader, weekly_data, market_creator=\"all\"\n", " )\n", " winning_metrics_all[\"winning_perc\"] = winning_metric_all\n", " winning_metrics_all[\"month_year_week\"] = week\n", " winning_metrics_all[\"market_creator\"] = \"all\"\n", " trader_metrics.append(winning_metrics_all)\n", " if week == \"Jul-21\":\n", " print(f\"trader = {trader}, win_perc for all ={winning_metric_all}\")\n", "\n", " # computation as specification 1 for quickstart markets\n", " winning_metrics_qs = {}\n", " winning_metric = compute_winning_metric_per_trader_per_market_creator(\n", " trader, weekly_data, market_creator=\"quickstart\"\n", " )\n", " if winning_metric:\n", " winning_metrics_qs[\"winning_perc\"] = winning_metric\n", " winning_metrics_qs[\"month_year_week\"] = week\n", " winning_metrics_qs[\"market_creator\"] = \"quickstart\"\n", " trader_metrics.append(winning_metrics_qs)\n", "\n", " # computation as specification 1 for pearl markets\n", " winning_metrics_pearl = {}\n", " winning_metric = compute_winning_metric_per_trader_per_market_creator(\n", " trader, weekly_data, market_creator=\"pearl\"\n", " )\n", " if winning_metric:\n", " winning_metrics_pearl[\"winning_perc\"] = winning_metric\n", " winning_metrics_pearl[\"month_year_week\"] = week\n", " winning_metrics_pearl[\"market_creator\"] = \"pearl\"\n", " trader_metrics.append(winning_metrics_pearl)\n", "\n", " result = pd.DataFrame.from_dict(trader_metrics, orient=\"columns\")\n", " # tqdm.write(f\"Total length of all winning metrics for this week = {len(result)}\")\n", " return result" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "def win_metrics_trader_level(weekly_data):\n", " winning_trades = (\n", " weekly_data.groupby([\"month_year_week\", \"market_creator\",\"trader_address\"], sort=False)[\n", " \"winning_trade\"\n", " ].sum()\n", " / weekly_data.groupby([\"month_year_week\", \"market_creator\",\"trader_address\"], sort=False)[\n", " \"winning_trade\"\n", " ].count()\n", " * 100\n", " )\n", " # winning_trades is a series, give it a dataframe\n", " winning_trades = winning_trades.reset_index()\n", " winning_trades.columns = winning_trades.columns.astype(str)\n", " winning_trades.columns = [\"month_year_week\", \"market_creator\", \"trader_address\", \"winning_trade\"]\n", " winning_trades.rename(columns={\"winning_trade\": \"winning_perc\"})\n", " return winning_trades" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from tqdm import tqdm\n", "\n", "market_all = all_trades.copy(deep=True)\n", "market_all[\"market_creator\"] = \"all\"\n", "\n", "# merging both dataframes\n", "final_traders = pd.concat([market_all, all_trades], ignore_index=True)\n", "final_traders = final_traders.sort_values(\n", " by=\"creation_timestamp\", ascending=True)\n", "\n", "\n", "winning_df = win_metrics_trader_level(final_traders)\n", "winning_df.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "winning_df = compute_winning_metrics_by_trader(all_trades)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "winning_pearl = winning_df.loc[winning_df[\"market_creator\"]==\"pearl\"]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "winning_pearl.head()" ] } ], "metadata": { "kernelspec": { "display_name": "hf_dashboards", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 2 }