Spaces:
Runtime error
Runtime error
cyberosa
commited on
Commit
Β·
330cbe3
1
Parent(s):
db08a72
Added explanation text for divergence
Browse files- app.py +5 -3
- notebooks/closed_markets.ipynb +3 -3
- notebooks/divergence.ipynb +321 -0
- tabs/market_plots.py +2 -74
- tabs/trader_plots.py +13 -22
app.py
CHANGED
|
@@ -22,8 +22,6 @@ from tabs.trader_plots import (
|
|
| 22 |
|
| 23 |
from tabs.market_plots import (
|
| 24 |
plot_kl_div_per_market,
|
| 25 |
-
plot_kl_div_with_off_by,
|
| 26 |
-
plot_kl_div_per_market2,
|
| 27 |
)
|
| 28 |
|
| 29 |
|
|
@@ -203,7 +201,10 @@ with demo:
|
|
| 203 |
with gr.Row():
|
| 204 |
trade_details_text = get_metrics_text()
|
| 205 |
with gr.Row():
|
| 206 |
-
|
|
|
|
|
|
|
|
|
|
| 207 |
|
| 208 |
with gr.TabItem("ποΈWeekly winning trades % per trader"):
|
| 209 |
with gr.Row():
|
|
@@ -211,6 +212,7 @@ with demo:
|
|
| 211 |
with gr.Row():
|
| 212 |
metrics_text = get_metrics_text()
|
| 213 |
with gr.Row():
|
|
|
|
| 214 |
winning_metric = plot_winning_metric_per_trader(weekly_winning_metrics)
|
| 215 |
|
| 216 |
demo.queue(default_concurrency_limit=40).launch()
|
|
|
|
| 22 |
|
| 23 |
from tabs.market_plots import (
|
| 24 |
plot_kl_div_per_market,
|
|
|
|
|
|
|
| 25 |
)
|
| 26 |
|
| 27 |
|
|
|
|
| 201 |
with gr.Row():
|
| 202 |
trade_details_text = get_metrics_text()
|
| 203 |
with gr.Row():
|
| 204 |
+
with gr.Column(scale=3):
|
| 205 |
+
kl_div_plot = plot_kl_div_per_market(closed_markets=closed_markets)
|
| 206 |
+
with gr.Column(scale=1):
|
| 207 |
+
interpretation = get_interpretation_text()
|
| 208 |
|
| 209 |
with gr.TabItem("ποΈWeekly winning trades % per trader"):
|
| 210 |
with gr.Row():
|
|
|
|
| 212 |
with gr.Row():
|
| 213 |
metrics_text = get_metrics_text()
|
| 214 |
with gr.Row():
|
| 215 |
+
|
| 216 |
winning_metric = plot_winning_metric_per_trader(weekly_winning_metrics)
|
| 217 |
|
| 218 |
demo.queue(default_concurrency_limit=40).launch()
|
notebooks/closed_markets.ipynb
CHANGED
|
@@ -1899,20 +1899,20 @@
|
|
| 1899 |
},
|
| 1900 |
{
|
| 1901 |
"cell_type": "code",
|
| 1902 |
-
"execution_count":
|
| 1903 |
"metadata": {},
|
| 1904 |
"outputs": [
|
| 1905 |
{
|
| 1906 |
"name": "stdout",
|
| 1907 |
"output_type": "stream",
|
| 1908 |
"text": [
|
| 1909 |
-
"
|
| 1910 |
]
|
| 1911 |
}
|
| 1912 |
],
|
| 1913 |
"source": [
|
| 1914 |
"P = np.array([1.0, 0.0])\n",
|
| 1915 |
-
"Q = np.array([0.
|
| 1916 |
"print(kl_divergence(P,Q))"
|
| 1917 |
]
|
| 1918 |
},
|
|
|
|
| 1899 |
},
|
| 1900 |
{
|
| 1901 |
"cell_type": "code",
|
| 1902 |
+
"execution_count": 16,
|
| 1903 |
"metadata": {},
|
| 1904 |
"outputs": [
|
| 1905 |
{
|
| 1906 |
"name": "stdout",
|
| 1907 |
"output_type": "stream",
|
| 1908 |
"text": [
|
| 1909 |
+
"0.5108256237659907\n"
|
| 1910 |
]
|
| 1911 |
}
|
| 1912 |
],
|
| 1913 |
"source": [
|
| 1914 |
"P = np.array([1.0, 0.0])\n",
|
| 1915 |
+
"Q = np.array([0.60, 0.05])\n",
|
| 1916 |
"print(kl_divergence(P,Q))"
|
| 1917 |
]
|
| 1918 |
},
|
notebooks/divergence.ipynb
CHANGED
|
@@ -0,0 +1,321 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 1,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [
|
| 8 |
+
{
|
| 9 |
+
"name": "stderr",
|
| 10 |
+
"output_type": "stream",
|
| 11 |
+
"text": [
|
| 12 |
+
"/Users/cyberosa/.pyenv/versions/hf_dashboards/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
|
| 13 |
+
" from .autonotebook import tqdm as notebook_tqdm\n"
|
| 14 |
+
]
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"source": [
|
| 18 |
+
"import pandas as pd\n",
|
| 19 |
+
"import gradio as gr\n",
|
| 20 |
+
"import plotly.express as px\n",
|
| 21 |
+
"import plotly.graph_objects as go\n",
|
| 22 |
+
"from plotly.subplots import make_subplots\n",
|
| 23 |
+
"import matplotlib.pyplot as plt\n",
|
| 24 |
+
"import seaborn as sns"
|
| 25 |
+
]
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"cell_type": "code",
|
| 29 |
+
"execution_count": 2,
|
| 30 |
+
"metadata": {},
|
| 31 |
+
"outputs": [],
|
| 32 |
+
"source": [
|
| 33 |
+
"div_data = pd.read_parquet(\"../data/closed_markets_div.parquet\")"
|
| 34 |
+
]
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"cell_type": "code",
|
| 38 |
+
"execution_count": 3,
|
| 39 |
+
"metadata": {},
|
| 40 |
+
"outputs": [
|
| 41 |
+
{
|
| 42 |
+
"data": {
|
| 43 |
+
"text/html": [
|
| 44 |
+
"<div>\n",
|
| 45 |
+
"<style scoped>\n",
|
| 46 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
| 47 |
+
" vertical-align: middle;\n",
|
| 48 |
+
" }\n",
|
| 49 |
+
"\n",
|
| 50 |
+
" .dataframe tbody tr th {\n",
|
| 51 |
+
" vertical-align: top;\n",
|
| 52 |
+
" }\n",
|
| 53 |
+
"\n",
|
| 54 |
+
" .dataframe thead th {\n",
|
| 55 |
+
" text-align: right;\n",
|
| 56 |
+
" }\n",
|
| 57 |
+
"</style>\n",
|
| 58 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
| 59 |
+
" <thead>\n",
|
| 60 |
+
" <tr style=\"text-align: right;\">\n",
|
| 61 |
+
" <th></th>\n",
|
| 62 |
+
" <th>currentAnswer</th>\n",
|
| 63 |
+
" <th>id</th>\n",
|
| 64 |
+
" <th>openingTimestamp</th>\n",
|
| 65 |
+
" <th>market_creator</th>\n",
|
| 66 |
+
" <th>opening_datetime</th>\n",
|
| 67 |
+
" <th>first_outcome_prob</th>\n",
|
| 68 |
+
" <th>second_outcome_prob</th>\n",
|
| 69 |
+
" <th>kl_divergence</th>\n",
|
| 70 |
+
" <th>off_by_perc</th>\n",
|
| 71 |
+
" </tr>\n",
|
| 72 |
+
" </thead>\n",
|
| 73 |
+
" <tbody>\n",
|
| 74 |
+
" <tr>\n",
|
| 75 |
+
" <th>315</th>\n",
|
| 76 |
+
" <td>no</td>\n",
|
| 77 |
+
" <td>0x29462bf8c8f24772cd6da03878a4aee5c5813474</td>\n",
|
| 78 |
+
" <td>1724976000</td>\n",
|
| 79 |
+
" <td>pearl</td>\n",
|
| 80 |
+
" <td>2024-08-30 02:00:00</td>\n",
|
| 81 |
+
" <td>0.9416</td>\n",
|
| 82 |
+
" <td>0.0584</td>\n",
|
| 83 |
+
" <td>2.840439</td>\n",
|
| 84 |
+
" <td>94.16</td>\n",
|
| 85 |
+
" </tr>\n",
|
| 86 |
+
" <tr>\n",
|
| 87 |
+
" <th>323</th>\n",
|
| 88 |
+
" <td>yes</td>\n",
|
| 89 |
+
" <td>0x0ad9d4edb0a401ec9a5b4f2ccf7942d28c29d4e3</td>\n",
|
| 90 |
+
" <td>1724976000</td>\n",
|
| 91 |
+
" <td>quickstart</td>\n",
|
| 92 |
+
" <td>2024-08-30 02:00:00</td>\n",
|
| 93 |
+
" <td>0.0499</td>\n",
|
| 94 |
+
" <td>0.9501</td>\n",
|
| 95 |
+
" <td>2.997734</td>\n",
|
| 96 |
+
" <td>95.01</td>\n",
|
| 97 |
+
" </tr>\n",
|
| 98 |
+
" </tbody>\n",
|
| 99 |
+
"</table>\n",
|
| 100 |
+
"</div>"
|
| 101 |
+
],
|
| 102 |
+
"text/plain": [
|
| 103 |
+
" currentAnswer id \\\n",
|
| 104 |
+
"315 no 0x29462bf8c8f24772cd6da03878a4aee5c5813474 \n",
|
| 105 |
+
"323 yes 0x0ad9d4edb0a401ec9a5b4f2ccf7942d28c29d4e3 \n",
|
| 106 |
+
"\n",
|
| 107 |
+
" openingTimestamp market_creator opening_datetime first_outcome_prob \\\n",
|
| 108 |
+
"315 1724976000 pearl 2024-08-30 02:00:00 0.9416 \n",
|
| 109 |
+
"323 1724976000 quickstart 2024-08-30 02:00:00 0.0499 \n",
|
| 110 |
+
"\n",
|
| 111 |
+
" second_outcome_prob kl_divergence off_by_perc \n",
|
| 112 |
+
"315 0.0584 2.840439 94.16 \n",
|
| 113 |
+
"323 0.9501 2.997734 95.01 "
|
| 114 |
+
]
|
| 115 |
+
},
|
| 116 |
+
"execution_count": 3,
|
| 117 |
+
"metadata": {},
|
| 118 |
+
"output_type": "execute_result"
|
| 119 |
+
}
|
| 120 |
+
],
|
| 121 |
+
"source": [
|
| 122 |
+
"div_data.loc[div_data[\"off_by_perc\"]>=90]"
|
| 123 |
+
]
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"cell_type": "code",
|
| 127 |
+
"execution_count": 5,
|
| 128 |
+
"metadata": {},
|
| 129 |
+
"outputs": [
|
| 130 |
+
{
|
| 131 |
+
"data": {
|
| 132 |
+
"text/html": [
|
| 133 |
+
"<div>\n",
|
| 134 |
+
"<style scoped>\n",
|
| 135 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
| 136 |
+
" vertical-align: middle;\n",
|
| 137 |
+
" }\n",
|
| 138 |
+
"\n",
|
| 139 |
+
" .dataframe tbody tr th {\n",
|
| 140 |
+
" vertical-align: top;\n",
|
| 141 |
+
" }\n",
|
| 142 |
+
"\n",
|
| 143 |
+
" .dataframe thead th {\n",
|
| 144 |
+
" text-align: right;\n",
|
| 145 |
+
" }\n",
|
| 146 |
+
"</style>\n",
|
| 147 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
| 148 |
+
" <thead>\n",
|
| 149 |
+
" <tr style=\"text-align: right;\">\n",
|
| 150 |
+
" <th></th>\n",
|
| 151 |
+
" <th>currentAnswer</th>\n",
|
| 152 |
+
" <th>id</th>\n",
|
| 153 |
+
" <th>openingTimestamp</th>\n",
|
| 154 |
+
" <th>market_creator</th>\n",
|
| 155 |
+
" <th>opening_datetime</th>\n",
|
| 156 |
+
" <th>first_outcome_prob</th>\n",
|
| 157 |
+
" <th>second_outcome_prob</th>\n",
|
| 158 |
+
" <th>kl_divergence</th>\n",
|
| 159 |
+
" <th>off_by_perc</th>\n",
|
| 160 |
+
" </tr>\n",
|
| 161 |
+
" </thead>\n",
|
| 162 |
+
" <tbody>\n",
|
| 163 |
+
" <tr>\n",
|
| 164 |
+
" <th>52</th>\n",
|
| 165 |
+
" <td>no</td>\n",
|
| 166 |
+
" <td>0x927beda324bfd4514a7b64ab5594451fdaf4796e</td>\n",
|
| 167 |
+
" <td>1722816000</td>\n",
|
| 168 |
+
" <td>quickstart</td>\n",
|
| 169 |
+
" <td>2024-08-05 02:00:00</td>\n",
|
| 170 |
+
" <td>0.8792</td>\n",
|
| 171 |
+
" <td>0.1208</td>\n",
|
| 172 |
+
" <td>2.113619</td>\n",
|
| 173 |
+
" <td>87.92</td>\n",
|
| 174 |
+
" </tr>\n",
|
| 175 |
+
" <tr>\n",
|
| 176 |
+
" <th>293</th>\n",
|
| 177 |
+
" <td>yes</td>\n",
|
| 178 |
+
" <td>0x90bb15982f2b5a5f044ad8ff49fe20daddfb8ca7</td>\n",
|
| 179 |
+
" <td>1724803200</td>\n",
|
| 180 |
+
" <td>quickstart</td>\n",
|
| 181 |
+
" <td>2024-08-28 02:00:00</td>\n",
|
| 182 |
+
" <td>0.1166</td>\n",
|
| 183 |
+
" <td>0.8834</td>\n",
|
| 184 |
+
" <td>2.149006</td>\n",
|
| 185 |
+
" <td>88.34</td>\n",
|
| 186 |
+
" </tr>\n",
|
| 187 |
+
" <tr>\n",
|
| 188 |
+
" <th>315</th>\n",
|
| 189 |
+
" <td>no</td>\n",
|
| 190 |
+
" <td>0x29462bf8c8f24772cd6da03878a4aee5c5813474</td>\n",
|
| 191 |
+
" <td>1724976000</td>\n",
|
| 192 |
+
" <td>pearl</td>\n",
|
| 193 |
+
" <td>2024-08-30 02:00:00</td>\n",
|
| 194 |
+
" <td>0.9416</td>\n",
|
| 195 |
+
" <td>0.0584</td>\n",
|
| 196 |
+
" <td>2.840439</td>\n",
|
| 197 |
+
" <td>94.16</td>\n",
|
| 198 |
+
" </tr>\n",
|
| 199 |
+
" <tr>\n",
|
| 200 |
+
" <th>323</th>\n",
|
| 201 |
+
" <td>yes</td>\n",
|
| 202 |
+
" <td>0x0ad9d4edb0a401ec9a5b4f2ccf7942d28c29d4e3</td>\n",
|
| 203 |
+
" <td>1724976000</td>\n",
|
| 204 |
+
" <td>quickstart</td>\n",
|
| 205 |
+
" <td>2024-08-30 02:00:00</td>\n",
|
| 206 |
+
" <td>0.0499</td>\n",
|
| 207 |
+
" <td>0.9501</td>\n",
|
| 208 |
+
" <td>2.997734</td>\n",
|
| 209 |
+
" <td>95.01</td>\n",
|
| 210 |
+
" </tr>\n",
|
| 211 |
+
" </tbody>\n",
|
| 212 |
+
"</table>\n",
|
| 213 |
+
"</div>"
|
| 214 |
+
],
|
| 215 |
+
"text/plain": [
|
| 216 |
+
" currentAnswer id \\\n",
|
| 217 |
+
"52 no 0x927beda324bfd4514a7b64ab5594451fdaf4796e \n",
|
| 218 |
+
"293 yes 0x90bb15982f2b5a5f044ad8ff49fe20daddfb8ca7 \n",
|
| 219 |
+
"315 no 0x29462bf8c8f24772cd6da03878a4aee5c5813474 \n",
|
| 220 |
+
"323 yes 0x0ad9d4edb0a401ec9a5b4f2ccf7942d28c29d4e3 \n",
|
| 221 |
+
"\n",
|
| 222 |
+
" openingTimestamp market_creator opening_datetime first_outcome_prob \\\n",
|
| 223 |
+
"52 1722816000 quickstart 2024-08-05 02:00:00 0.8792 \n",
|
| 224 |
+
"293 1724803200 quickstart 2024-08-28 02:00:00 0.1166 \n",
|
| 225 |
+
"315 1724976000 pearl 2024-08-30 02:00:00 0.9416 \n",
|
| 226 |
+
"323 1724976000 quickstart 2024-08-30 02:00:00 0.0499 \n",
|
| 227 |
+
"\n",
|
| 228 |
+
" second_outcome_prob kl_divergence off_by_perc \n",
|
| 229 |
+
"52 0.1208 2.113619 87.92 \n",
|
| 230 |
+
"293 0.8834 2.149006 88.34 \n",
|
| 231 |
+
"315 0.0584 2.840439 94.16 \n",
|
| 232 |
+
"323 0.9501 2.997734 95.01 "
|
| 233 |
+
]
|
| 234 |
+
},
|
| 235 |
+
"execution_count": 5,
|
| 236 |
+
"metadata": {},
|
| 237 |
+
"output_type": "execute_result"
|
| 238 |
+
}
|
| 239 |
+
],
|
| 240 |
+
"source": [
|
| 241 |
+
"div_data.loc[div_data[\"kl_divergence\"]>=2.0]"
|
| 242 |
+
]
|
| 243 |
+
},
|
| 244 |
+
{
|
| 245 |
+
"cell_type": "code",
|
| 246 |
+
"execution_count": null,
|
| 247 |
+
"metadata": {},
|
| 248 |
+
"outputs": [],
|
| 249 |
+
"source": []
|
| 250 |
+
},
|
| 251 |
+
{
|
| 252 |
+
"cell_type": "code",
|
| 253 |
+
"execution_count": null,
|
| 254 |
+
"metadata": {},
|
| 255 |
+
"outputs": [],
|
| 256 |
+
"source": [
|
| 257 |
+
"all_markets = closed_markets.copy(deep=True)\n",
|
| 258 |
+
" all_markets[\"market_creator\"] = \"all\"\n",
|
| 259 |
+
"\n",
|
| 260 |
+
" # merging both dataframes\n",
|
| 261 |
+
" final_markets = pd.concat([div_data, all_markets], ignore_index=True)\n",
|
| 262 |
+
" final_markets = final_markets.sort_values(by=\"opening_datetime\", ascending=True)\n",
|
| 263 |
+
"\n",
|
| 264 |
+
" # Create the main figure and axis\n",
|
| 265 |
+
" fig, ax1 = plt.subplots(figsize=(10, 6))\n",
|
| 266 |
+
"\n",
|
| 267 |
+
" # Create the boxplot using seaborn\n",
|
| 268 |
+
" sns.boxplot(\n",
|
| 269 |
+
" data=closed_markets,\n",
|
| 270 |
+
" x=\"month_year_week\",\n",
|
| 271 |
+
" y=\"kl_divergence\",\n",
|
| 272 |
+
" ax=ax1,\n",
|
| 273 |
+
" hue=\"market_creator\",\n",
|
| 274 |
+
" order=[\"pearl\", \"quickstart\", \"all\"],\n",
|
| 275 |
+
" )\n",
|
| 276 |
+
"\n",
|
| 277 |
+
" # Set labels and title for the main axis\n",
|
| 278 |
+
" ax1.set_xlabel(\"Week\")\n",
|
| 279 |
+
" ax1.set_ylabel(\"KL Divergence\")\n",
|
| 280 |
+
" ax1.set_title(\"KL Divergence Boxplot with Off-by Percentage\")\n",
|
| 281 |
+
"\n",
|
| 282 |
+
" # Create a secondary y-axis\n",
|
| 283 |
+
" ax2 = ax1.twinx()\n",
|
| 284 |
+
"\n",
|
| 285 |
+
" # Plot the off_by_perc values on the secondary y-axis\n",
|
| 286 |
+
" for i, week in enumerate(closed_markets[\"month_year_week\"].unique()):\n",
|
| 287 |
+
" off_by_perc = closed_markets[closed_markets[\"month_year_week\"] == week][\n",
|
| 288 |
+
" \"off_by_perc\"\n",
|
| 289 |
+
" ]\n",
|
| 290 |
+
" ax2.scatter([i] * len(off_by_perc), off_by_perc, color=\"red\", alpha=0.01)\n",
|
| 291 |
+
"\n",
|
| 292 |
+
" # Set label for the secondary y-axis\n",
|
| 293 |
+
" ax2.set_ylabel(\"Off-by Percentage\")\n",
|
| 294 |
+
"\n",
|
| 295 |
+
" # Adjust the layout and display the plot\n",
|
| 296 |
+
" plt.tight_layout()"
|
| 297 |
+
]
|
| 298 |
+
}
|
| 299 |
+
],
|
| 300 |
+
"metadata": {
|
| 301 |
+
"kernelspec": {
|
| 302 |
+
"display_name": "hf_dashboards",
|
| 303 |
+
"language": "python",
|
| 304 |
+
"name": "python3"
|
| 305 |
+
},
|
| 306 |
+
"language_info": {
|
| 307 |
+
"codemirror_mode": {
|
| 308 |
+
"name": "ipython",
|
| 309 |
+
"version": 3
|
| 310 |
+
},
|
| 311 |
+
"file_extension": ".py",
|
| 312 |
+
"mimetype": "text/x-python",
|
| 313 |
+
"name": "python",
|
| 314 |
+
"nbconvert_exporter": "python",
|
| 315 |
+
"pygments_lexer": "ipython3",
|
| 316 |
+
"version": "3.12.2"
|
| 317 |
+
}
|
| 318 |
+
},
|
| 319 |
+
"nbformat": 4,
|
| 320 |
+
"nbformat_minor": 2
|
| 321 |
+
}
|
tabs/market_plots.py
CHANGED
|
@@ -30,6 +30,8 @@ def plot_kl_div_per_market(closed_markets: pd.DataFrame) -> gr.Plot:
|
|
| 30 |
xaxis_title="Markets closing Week",
|
| 31 |
yaxis_title="KullbackβLeibler divergence",
|
| 32 |
legend=dict(yanchor="top", y=0.5),
|
|
|
|
|
|
|
| 33 |
)
|
| 34 |
|
| 35 |
fig.update_xaxes(tickformat="%b %d\n%Y")
|
|
@@ -83,77 +85,3 @@ def plot_kl_div_with_off_by(closed_markets: pd.DataFrame) -> gr.Plot:
|
|
| 83 |
return gr.Plot(
|
| 84 |
value=fig,
|
| 85 |
)
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
def plot_kl_div_per_market2(closed_markets: pd.DataFrame) -> gr.Plot:
|
| 89 |
-
|
| 90 |
-
# adding the total
|
| 91 |
-
all_markets = closed_markets.copy(deep=True)
|
| 92 |
-
all_markets["market_creator"] = "all"
|
| 93 |
-
|
| 94 |
-
# merging both dataframes
|
| 95 |
-
final_markets = pd.concat([closed_markets, all_markets], ignore_index=True)
|
| 96 |
-
final_markets = final_markets.sort_values(by="opening_datetime", ascending=True)
|
| 97 |
-
|
| 98 |
-
# Create the figure with secondary y-axis
|
| 99 |
-
fig = make_subplots(specs=[[{"secondary_y": True}]])
|
| 100 |
-
|
| 101 |
-
# Add box plots for KL divergence
|
| 102 |
-
for creator in ["pearl", "quickstart", "all"]:
|
| 103 |
-
fig.add_trace(
|
| 104 |
-
go.Box(
|
| 105 |
-
x=final_markets[final_markets["market_creator"] == creator][
|
| 106 |
-
"month_year_week"
|
| 107 |
-
],
|
| 108 |
-
y=final_markets[final_markets["market_creator"] == creator][
|
| 109 |
-
"kl_divergence"
|
| 110 |
-
],
|
| 111 |
-
name=creator,
|
| 112 |
-
boxmean=True,
|
| 113 |
-
marker_color={
|
| 114 |
-
"pearl": "purple",
|
| 115 |
-
"quickstart": "goldenrod",
|
| 116 |
-
"all": "darkgreen",
|
| 117 |
-
}[creator],
|
| 118 |
-
),
|
| 119 |
-
secondary_y=False,
|
| 120 |
-
)
|
| 121 |
-
fig.add_trace(
|
| 122 |
-
go.Scatter(
|
| 123 |
-
x=final_markets[final_markets["market_creator"] == creator][
|
| 124 |
-
"month_year_week"
|
| 125 |
-
],
|
| 126 |
-
y=final_markets[final_markets["market_creator"] == creator][
|
| 127 |
-
"off_by_perc"
|
| 128 |
-
],
|
| 129 |
-
opacity=0.01,
|
| 130 |
-
showlegend=False,
|
| 131 |
-
hoverinfo="skip",
|
| 132 |
-
),
|
| 133 |
-
secondary_y=True,
|
| 134 |
-
)
|
| 135 |
-
# Update layout
|
| 136 |
-
fig.update_layout(
|
| 137 |
-
xaxis_title="Markets closing Week",
|
| 138 |
-
# legend=dict(yanchor="top", y=0.5, xanchor="left", x=-0.5),
|
| 139 |
-
legend=dict(yanchor="top", y=0.5),
|
| 140 |
-
boxmode="group",
|
| 141 |
-
width=1000, # Adjusted for better fit on laptop screens
|
| 142 |
-
height=600, # Adjusted for better fit on laptop screens
|
| 143 |
-
)
|
| 144 |
-
# Update y-axes
|
| 145 |
-
fig.update_yaxes(
|
| 146 |
-
title_text="KullbackβLeibler divergence", secondary_y=False, side="left"
|
| 147 |
-
)
|
| 148 |
-
fig.update_yaxes(
|
| 149 |
-
title_text="Off by percentage between probabilities",
|
| 150 |
-
secondary_y=True,
|
| 151 |
-
side="right",
|
| 152 |
-
)
|
| 153 |
-
|
| 154 |
-
# Update x-axis
|
| 155 |
-
fig.update_xaxes(tickformat="%b %d\n%Y")
|
| 156 |
-
|
| 157 |
-
return gr.Plot(
|
| 158 |
-
value=fig,
|
| 159 |
-
)
|
|
|
|
| 30 |
xaxis_title="Markets closing Week",
|
| 31 |
yaxis_title="KullbackβLeibler divergence",
|
| 32 |
legend=dict(yanchor="top", y=0.5),
|
| 33 |
+
width=1000, # Adjusted for better fit on laptop screens
|
| 34 |
+
height=600, # Adjusted for better fit on laptop screens
|
| 35 |
)
|
| 36 |
|
| 37 |
fig.update_xaxes(tickformat="%b %d\n%Y")
|
|
|
|
| 85 |
return gr.Plot(
|
| 86 |
value=fig,
|
| 87 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tabs/trader_plots.py
CHANGED
|
@@ -26,28 +26,19 @@ def get_metrics_text() -> gr.Markdown:
|
|
| 26 |
|
| 27 |
def get_interpretation_text() -> gr.Markdown:
|
| 28 |
interpretation_text = """
|
| 29 |
-
##
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
* Very wrong prediction closing at [0.01, 0.99] or [0.99, 0.01]
|
| 43 |
-
* Y β 6.9078
|
| 44 |
-
* Extremely wrong prediction closing at [0.001, 0.999] or [0.999, 0.001]
|
| 45 |
-
|
| 46 |
-
### Edge cases:
|
| 47 |
-
* Y β 13.8155
|
| 48 |
-
* Near-certain wrong prediction closing at [1e-6, 0.999999] or [0.999999, 1e-6]
|
| 49 |
-
* Y = 20 (capped)
|
| 50 |
-
* Represents cases where the market prediction was essentially opposite to the outcome.
|
| 51 |
"""
|
| 52 |
return gr.Markdown(interpretation_text)
|
| 53 |
|
|
|
|
| 26 |
|
| 27 |
def get_interpretation_text() -> gr.Markdown:
|
| 28 |
interpretation_text = """
|
| 29 |
+
## Meaning of KL-divergence values
|
| 30 |
+
* Y = 0.05129
|
| 31 |
+
* Market accuracy off by 5%
|
| 32 |
+
* Y = 0.1053
|
| 33 |
+
* Market accuracy off by 10%
|
| 34 |
+
* Y = 0.2876
|
| 35 |
+
* Market accuracy off by 25%
|
| 36 |
+
* Y = 0.5108
|
| 37 |
+
* Market accuracy off by 40%
|
| 38 |
+
* Y = 1.2040
|
| 39 |
+
* Market accuracy off by 70%
|
| 40 |
+
* Y = 2.3026
|
| 41 |
+
* Market accuracy off by 90%
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
"""
|
| 43 |
return gr.Markdown(interpretation_text)
|
| 44 |
|