mirror of
https://github.com/velocitatem/PHANTOM.git
synced 2026-05-31 08:33:36 +00:00
chore: updated figure models and scripts
This commit is contained in:
@@ -3,7 +3,7 @@ alpha,revenue_delta,revenue_delta_pct,reward_delta,reward_delta_pct,volatility_d
|
|||||||
0.1,-14962.041501283413,-4.410637208586118,-14303.760282736213,-4.531344436782669,0.0011858665298920962,0.0,-0.004133727080174038
|
0.1,-14962.041501283413,-4.410637208586118,-14303.760282736213,-4.531344436782669,0.0011858665298920962,0.0,-0.004133727080174038
|
||||||
0.2,-16153.416666167905,-4.826514761457546,-15398.621298776357,-4.9418165571901715,0.00200624274016295,0.0,-0.0033201883450373615
|
0.2,-16153.416666167905,-4.826514761457546,-15398.621298776357,-4.9418165571901715,0.00200624274016295,0.0,-0.0033201883450373615
|
||||||
0.3,-17294.9275360335,-5.382423616385397,-16544.91845114401,-5.533399709364953,-0.0011022484400295268,0.0,-0.0029151149203366505
|
0.3,-17294.9275360335,-5.382423616385397,-16544.91845114401,-5.533399709364953,-0.0011022484400295268,0.0,-0.0029151149203366505
|
||||||
0.4,-19661.294346174283,-6.250307313590199,-18728.35578200908,-6.3953153560217535,3.582812967113658e-05,0.0,-0.0038123361988749577
|
0.4,-19543.8750398212,-6.215299839915013,-18613.487687777204,-6.35858461426586,-2.7530592947980215e-05,0.0,-0.0038561140856475523
|
||||||
0.5,-16411.03168918495,-5.3630681206030015,-15638.77510066732,-5.4888928630525315,0.00015428950526953644,0.0,-0.00439661338956944
|
0.5,-16411.03168918495,-5.3630681206030015,-15638.77510066732,-5.4888928630525315,0.00015428950526953644,0.0,-0.00439661338956944
|
||||||
0.6,-14729.668247641937,-5.069964928178309,-13912.22417824401,-5.148827377884945,-0.002735776807082743,0.0,-0.004310129386364658
|
0.6,-14729.668247641937,-5.069964928178309,-13912.22417824401,-5.148827377884945,-0.002735776807082743,0.0,-0.004310129386364658
|
||||||
0.7,-21160.81910514756,-7.351404104505076,-20171.762105623755,-7.525169314210056,-0.0008903632602569461,0.0,-0.0026198461183787186
|
0.7,-21160.81910514756,-7.351404104505076,-20171.762105623755,-7.525169314210056,-0.0008903632602569461,0.0,-0.0026198461183787186
|
||||||
|
|||||||
|
@@ -7,7 +7,7 @@ alpha,mode,runs,revenue_mean,reward_mean,supra_mean,volatility_mean,coi_leakage_
|
|||||||
0.2,defended,35,318527.35122792586,296199.77820822067,0.0,0.07048630468445288,0.11265850300394666,137.2758153292305
|
0.2,defended,35,318527.35122792586,296199.77820822067,0.0,0.07048630468445288,0.11265850300394666,137.2758153292305
|
||||||
0.3,baseline,30,321322.30327214615,299000.9636054795,0.0,0.07085669473747759,0.11527347603412934,136.4452630715689
|
0.3,baseline,30,321322.30327214615,299000.9636054795,0.0,0.07085669473747759,0.11527347603412934,136.4452630715689
|
||||||
0.3,defended,44,304027.37573611265,282456.0451543355,0.0,0.06975444629744806,0.11235836111379269,136.4704115371568
|
0.3,defended,44,304027.37573611265,282456.0451543355,0.0,0.06975444629744806,0.11235836111379269,136.4704115371568
|
||||||
0.4,baseline,33,314565.2423109539,292844.914432166,0.0,0.07031811881503117,0.11300307992768284,136.72547178046122
|
0.4,baseline,33,314447.8230046008,292730.04633793415,0.0,0.07038147753765028,0.11304685781445543,136.70817144219887
|
||||||
0.4,defended,38,294903.9479647796,274116.55865015695,0.0,0.0703539469447023,0.10919074372880788,136.75671002806396
|
0.4,defended,38,294903.9479647796,274116.55865015695,0.0,0.0703539469447023,0.10919074372880788,136.75671002806396
|
||||||
0.5,baseline,33,306000.80625751516,284916.7489847879,0.0,0.06938663916591635,0.11118137138243217,136.9528780620641
|
0.5,baseline,33,306000.80625751516,284916.7489847879,0.0,0.06938663916591635,0.11118137138243217,136.9528780620641
|
||||||
0.5,defended,35,289589.7745683302,269277.9738841206,0.0,0.06954092867118589,0.10678475799286273,136.65018588845163
|
0.5,defended,35,289589.7745683302,269277.9738841206,0.0,0.06954092867118589,0.10678475799286273,136.65018588845163
|
||||||
|
|||||||
|
@@ -1,11 +1,14 @@
|
|||||||
{
|
{
|
||||||
"bundle": "engine/studies/results/wandb_sweep_bundles/bundle_20260317_093826",
|
"bundle": "engine/studies/results/wandb_sweep_bundles/bundle_20260317_122818",
|
||||||
"focus_cohort": "max_alpha_coverage",
|
"focus_cohort": "max_alpha_coverage",
|
||||||
|
"focus_sweep_id": "i88nw811",
|
||||||
|
"focus_run_count": 768,
|
||||||
|
"git_commit": "e62e842faad79b143f5555d187075e85c8926363",
|
||||||
"alpha_cells": 11,
|
"alpha_cells": 11,
|
||||||
"alpha_min": 0.0,
|
"alpha_min": 0.0,
|
||||||
"alpha_max": 1.0,
|
"alpha_max": 1.0,
|
||||||
"mean_revenue_delta_pct": -4.787221975639986,
|
"mean_revenue_delta_pct": -4.784039478033151,
|
||||||
"mean_reward_delta_pct": -4.91730667541704,
|
"mean_reward_delta_pct": -4.913967517075595,
|
||||||
"zone_summary": [
|
"zone_summary": [
|
||||||
{
|
{
|
||||||
"zone": "high_alpha_0_7_plus",
|
"zone": "high_alpha_0_7_plus",
|
||||||
@@ -18,10 +21,10 @@
|
|||||||
{
|
{
|
||||||
"zone": "low_alpha_below_0_7",
|
"zone": "low_alpha_below_0_7",
|
||||||
"alpha_cells": 7,
|
"alpha_cells": 7,
|
||||||
"revenue_delta_pct_mean": -5.201949225367208,
|
"revenue_delta_pct_mean": -5.196948157699325,
|
||||||
"reward_delta_pct_mean": -5.324947138914036,
|
"reward_delta_pct_mean": -5.319699890091765,
|
||||||
"coi_leakage_delta_mean": -0.0037041938968711296,
|
"coi_leakage_delta_mean": -0.003710447880695786,
|
||||||
"volatility_delta_mean": 0.00011102505536893832
|
"volatility_delta_mean": 0.00010197380928049306
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
zone,alpha_cells,revenue_delta_pct_mean,reward_delta_pct_mean,coi_leakage_delta_mean,volatility_delta_mean
|
zone,alpha_cells,revenue_delta_pct_mean,reward_delta_pct_mean,coi_leakage_delta_mean,volatility_delta_mean
|
||||||
high_alpha_0_7_plus,4,-4.0614492886173466,-4.2039358642972955,-0.0018236753956396637,0.00026289072427068336
|
high_alpha_0_7_plus,4,-4.0614492886173466,-4.2039358642972955,-0.0018236753956396637,0.00026289072427068336
|
||||||
low_alpha_below_0_7,7,-5.201949225367208,-5.324947138914036,-0.0037041938968711296,0.00011102505536893832
|
low_alpha_below_0_7,7,-5.196948157699325,-5.319699890091765,-0.003710447880695786,0.00010197380928049306
|
||||||
|
|||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"normality": {
|
||||||
|
"test": "jarque_bera",
|
||||||
|
"available": true,
|
||||||
|
"statistic": 362.38850707984324,
|
||||||
|
"p_value": 2.0339278125496517e-79
|
||||||
|
},
|
||||||
|
"heteroskedasticity": {
|
||||||
|
"test": "breusch_pagan",
|
||||||
|
"available": true,
|
||||||
|
"lm_stat": 6.0366025380616275,
|
||||||
|
"df": 1,
|
||||||
|
"p_value": 0.014012224810767138
|
||||||
|
},
|
||||||
|
"influence": {
|
||||||
|
"max_leverage": 0.03769234230180875,
|
||||||
|
"mean_leverage": 0.021052631578947392,
|
||||||
|
"high_leverage_threshold": 0.042105263157894736,
|
||||||
|
"high_leverage_count": 0,
|
||||||
|
"max_cooks_distance": 0.29121755538277183,
|
||||||
|
"high_cooks_threshold": 0.042105263157894736,
|
||||||
|
"high_cooks_count": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
sweep_id,sweep_full_id,run_id,run_name,state,run_url,created_at,runtime,downloaded_files,history_rows,selected_for_clone,download_error,alpha,n_products,eta_ux,lambda_coi,baseline_mode,no_robust,study_mode,eval_revenue_mean,eval_reward_mean,eval_stress_revenue_worst,eval_stress_reward_worst,eval_supra_share_mean,eval_supra_penalty_mean,eval_volatility_mean,eval_upward_volatility_mean,eval_coi_level_mean,eval_coi_leakage_mean,objective_score,mode
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,0yph6ddt,sweep/ppo/sb3/cpu/default/a0.7/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/0yph6ddt,2026-03-15T13:48:47Z,7579.766959963,0,0,0,,0.7,100.0,0.0,0.05,True,True,baseline,285875.15518050164,266287.2051805016,274356.50146499986,255620.24146499988,0.0,0.0,0.0711188680417482,0.0,137.42722406640746,0.1099719716550294,255620.24146499988,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,bjwmxlf4,sweep/ppo/sb3/cpu/default/a0.9/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/bjwmxlf4,2026-03-15T13:48:49Z,7514.003863569,0,0,0,,0.9,100.0,0.0,0.05,True,True,baseline,267194.6114143838,248902.78141438385,258791.60782635584,241079.0878263559,0.0,0.0,0.0706779448814682,0.0,137.4716591479769,0.1060063717489262,241079.0878263559,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,afod7srx,sweep/ppo/sb3/cpu/default/a0/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/afod7srx,2026-03-15T13:48:55Z,8428.923550896,0,0,0,,0.0,100.0,0.0,0.15,True,True,baseline,331626.71399641165,307929.2839964116,301903.22363424243,278909.22363424255,0.0,0.0,0.0699106903089938,0.0,134.44341240328637,0.1239456985672444,278909.22363424255,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,czbwbw4o,sweep/ppo/sb3/cpu/default/a0.3/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/czbwbw4o,2026-03-15T13:48:55Z,8019.834460958,0,0,0,,0.3,100.0,0.0,0.05,True,True,baseline,325062.60932028474,302657.9893202848,313580.73955351143,292103.1195535114,0.0,0.0,0.0700934793925504,0.0,137.30226556155992,0.1156304945350146,292103.1195535114,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,spncr5i5,sweep/ppo/sb3/cpu/default/a0.4/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/spncr5i5,2026-03-15T13:48:57Z,7984.536208498,0,0,0,,0.4,100.0,0.0,0.3,True,True,baseline,313890.156459866,292317.566459866,301905.6061551721,281189.2661551722,0.0,0.0,0.0700585666613017,0.0,137.27393385978286,0.1140225013120235,281189.2661551722,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,9utcbgal,sweep/ppo/sb3/cpu/default/a0.6/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/9utcbgal,2026-03-15T13:48:58Z,7794.573495005,0,0,0,,0.6,100.0,0.0,0.3,True,True,baseline,296881.4938150014,276559.4338150014,282693.0664052287,263321.0864052287,0.0,0.0,0.0689497793839256,0.0,137.65459475595475,0.1116745762120893,263321.0864052287,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,6uhc0zfi,sweep/ppo/sb3/cpu/default/a0.1/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/6uhc0zfi,2026-03-15T13:48:59Z,8739.343652451,5,5000,1,,0.1,100.0,0.0,0.3,True,True,baseline,345607.36851277394,321934.388512774,330271.9018417394,307619.2418417394,0.0,0.0,0.0688978199434404,0.0,137.65927138408344,0.1180576040723697,307619.2418417394,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,mid9h16o,sweep/ppo/sb3/cpu/default/a0.3/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/mid9h16o,2026-03-15T13:48:59Z,7934.709025792,0,0,0,,0.3,100.0,0.0,0.15,True,True,baseline,321120.1030044527,298922.9430044526,312002.2572538445,290604.6972538445,0.0,0.0,0.0725338635316591,0.0,136.9642983472208,0.1152504371251349,290604.6972538445,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,hm8geh95,sweep/ppo/sb3/cpu/default/a0.3/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/hm8geh95,2026-03-15T13:49:01Z,8324.170881475,0,0,0,,0.3,100.0,0.0,0.05,True,True,baseline,321120.1030044527,298922.9430044526,312002.2572538445,290604.6972538445,0.0,0.0,0.0725338635316591,0.0,136.9642983472208,0.1152504371251349,290604.6972538445,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,2k3bx48e,sweep/ppo/sb3/cpu/default/a0.7/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/2k3bx48e,2026-03-15T13:49:03Z,7579.046562713,0,0,0,,0.7,100.0,0.0,0.3,True,True,baseline,288003.5379862045,268208.7279862045,274205.49798255006,255466.81798255,0.0,0.0,0.0732015803628115,0.0,137.25851714050424,0.1065894678006264,255466.81798255,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,mlcllxuf,sweep/ppo/sb3/cpu/default/a0.3/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/mlcllxuf,2026-03-15T15:28:13Z,8048.447950291,0,0,0,,0.3,100.0,0.0,0.05,True,True,baseline,325062.60932028474,302657.9893202848,313580.73955351143,292103.1195535114,0.0,0.0,0.0700934793925504,0.0,137.30226556155992,0.1156304945350146,292103.1195535114,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,gsx5p3xl,sweep/ppo/sb3/cpu/default/a0.7/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/gsx5p3xl,2026-03-15T15:29:00Z,7666.062008427,0,0,0,,0.7,100.0,0.0,0.3,True,True,baseline,286859.8032779717,267231.9932779717,273198.5349293896,254530.3349293896,0.0,0.0,0.0694378534785247,0.0,137.6169536272908,0.1086813731317916,254530.3349293896,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,dh2sidg0,sweep/ppo/sb3/cpu/default/a0.8/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/dh2sidg0,2026-03-15T15:31:51Z,7450.114589126,0,0,0,,0.8,100.0,0.0,0.3,True,True,baseline,277537.1135308166,258574.23353081665,260525.6140973399,242761.4740973399,0.0,0.0,0.0691119185711536,0.0,137.63850710873982,0.1055234893030045,242761.4740973399,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,izb1xfjn,sweep/ppo/sb3/cpu/default/a0.4/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/izb1xfjn,2026-03-15T15:38:35Z,8138.431632101,0,0,0,,0.4,100.0,0.0,0.05,True,True,baseline,313890.156459866,292317.566459866,301905.6061551721,281189.2661551722,0.0,0.0,0.0700585666613017,0.0,137.27393385978286,0.1140225013120235,281189.2661551722,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,h5v0bjkk,sweep/ppo/sb3/cpu/default/a1/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/h5v0bjkk,2026-03-15T15:53:08Z,7430.137394885,0,0,0,,1.0,100.0,0.0,0.05,True,True,baseline,258250.4083985968,240558.37839859675,257579.27605596423,239906.35605596425,0.0,0.0,0.0710781742010645,0.0,137.43891114039735,0.1034797519569495,239906.35605596425,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,oo9x7mtj,sweep/ppo/sb3/cpu/default/a0/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/oo9x7mtj,2026-03-15T17:08:57Z,8434.676111878,0,0,0,,0.0,100.0,0.0,0.15,True,True,baseline,331626.71399641165,307929.2839964116,301903.22363424243,278909.22363424255,0.0,0.0,0.0699106903089938,0.0,134.44341240328637,0.1239456985672444,278909.22363424255,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,2tnqjvsr,sweep/ppo/sb3/cpu/default/a0.2/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/2tnqjvsr,2026-03-15T17:10:41Z,8326.316856098,0,0,0,,0.2,100.0,0.0,0.3,True,True,baseline,333463.32883383776,310606.38883383776,322375.37087837915,300349.6308783791,0.0,0.0,0.0694238399850746,0.0,137.6206723870474,0.1176551945750585,300349.6308783791,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,uwl4b1t4,sweep/ppo/sb3/cpu/default/a0.6/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/uwl4b1t4,2026-03-15T17:11:41Z,7730.138244902,0,0,0,,0.6,100.0,0.0,0.15,True,True,baseline,293934.0132863448,273673.5532863448,278235.2158621181,259045.3158621181,0.0,0.0,0.0702286844227449,0.0,137.02187396075487,0.1108792101893818,259045.3158621181,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,mq08631s,sweep/ppo/sb3/cpu/default/a0.7/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/mq08631s,2026-03-15T17:11:46Z,7830.903683379,0,0,0,,0.7,100.0,0.0,0.3,True,True,baseline,286859.8032779717,267231.9932779717,273198.5349293896,254530.3349293896,0.0,0.0,0.0694378534785247,0.0,137.6169536272908,0.1086813731317916,254530.3349293896,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,oenf81vs,sweep/ppo/sb3/cpu/default/a0.9/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/oenf81vs,2026-03-15T17:14:03Z,7571.420325966,0,0,0,,0.9,100.0,0.0,0.15,True,True,baseline,268129.28805568966,249777.98805568964,259354.03651639624,241657.8165163962,0.0,0.0,0.0692141212557269,0.0,137.56737533812094,0.1028102128114812,241657.8165163962,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,imvig8ea,sweep/ppo/sb3/cpu/default/a0.9/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/imvig8ea,2026-03-15T17:26:17Z,7548.356923917,0,0,0,,0.9,100.0,0.0,0.05,True,True,baseline,269095.26288012683,250709.3028801269,257985.06236888352,240343.2023688835,0.0,0.0,0.0687681637998595,0.0,137.63174822647662,0.1040919495927453,240343.2023688835,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,kc46mwot,sweep/ppo/sb3/cpu/default/a0.9/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/kc46mwot,2026-03-15T17:36:54Z,7402.437478922,0,0,0,,0.9,100.0,0.0,0.3,True,True,baseline,269095.26288012683,250709.3028801269,257985.06236888352,240343.2023688835,0.0,0.0,0.0687681637998595,0.0,137.63174822647662,0.1040919495927453,240343.2023688835,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,6c5g20m0,sweep/ppo/sb3/cpu/default/a0.4/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/6c5g20m0,2026-03-15T17:39:15Z,7987.751960449,0,0,0,,0.4,100.0,0.0,0.05,True,True,baseline,314792.9405088838,293199.96050888376,304000.02795477153,283160.5079547715,0.0,0.0,0.0706474903672308,0.0,137.54347765167836,0.1134114537317883,283160.5079547715,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,zmfirgme,sweep/ppo/sb3/cpu/default/a0.6/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/zmfirgme,2026-03-15T17:39:38Z,7729.43292327,0,0,0,,0.6,100.0,0.0,0.3,True,True,baseline,296881.4938150014,276559.4338150014,282693.0664052287,263321.0864052287,0.0,0.0,0.0689497793839256,0.0,137.65459475595475,0.1116745762120893,263321.0864052287,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,5w978f6n,sweep/ppo/sb3/cpu/default/a0.2/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/5w978f6n,2026-03-15T17:42:23Z,8196.563842857,0,0,0,,0.2,100.0,0.0,0.3,True,True,baseline,328662.28105387173,305848.95105387166,316489.4913151873,294621.8913151873,0.0,0.0,0.0726481757500429,0.0,136.60489081120323,0.115056283050696,294621.8913151873,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,v6yuq532,sweep/ppo/sb3/cpu/default/a0.3/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/v6yuq532,2026-03-15T18:27:32Z,8171.524047551,0,0,0,,0.3,100.0,0.0,0.3,True,True,baseline,325536.3728999571,303203.77289995714,311530.19009115506,290169.93009115505,0.0,0.0,0.0690101249418158,0.0,137.57976469566975,0.115140125484157,290169.93009115505,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,wzs4h708,sweep/ppo/sb3/cpu/default/a1/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/wzs4h708,2026-03-15T18:44:40Z,7213.500579862,0,0,0,,1.0,100.0,0.0,0.3,True,True,baseline,258250.4083985968,240558.37839859675,257579.27605596423,239906.35605596425,0.0,0.0,0.0710781742010645,0.0,137.43891114039735,0.1034797519569495,239906.35605596425,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,drjegsa8,sweep/ppo/sb3/cpu/default/a0.8/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/drjegsa8,2026-03-15T18:53:51Z,7642.750902648,0,0,0,,0.8,100.0,0.0,0.05,True,True,baseline,278042.9708277731,258987.21082777312,265119.53279206343,246979.39279206347,0.0,0.0,0.069699479796535,0.0,137.47635104131075,0.1063946886684759,246979.39279206347,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,np3fvzwt,sweep/ppo/sb3/cpu/default/a0.9/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/np3fvzwt,2026-03-15T18:57:50Z,7300.325366337,0,0,0,,0.9,100.0,0.0,0.3,True,True,baseline,269095.26288012683,250709.3028801269,257985.06236888352,240343.2023688835,0.0,0.0,0.0687681637998595,0.0,137.63174822647662,0.1040919495927453,240343.2023688835,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,kk0sqa97,sweep/ppo/sb3/cpu/default/a0.1/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/kk0sqa97,2026-03-15T19:06:17Z,8525.177181009,0,0,0,,0.1,100.0,0.0,0.3,True,True,baseline,341404.1205957663,317885.0305957663,329505.50925893825,306817.3492589383,0.0,0.0,0.0685274095002656,0.0,137.33021724658855,0.1206998447923596,306817.3492589383,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,i0rpx1kf,sweep/ppo/sb3/cpu/default/a0.2/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/i0rpx1kf,2026-03-15T19:20:36Z,8356.73493734,0,0,0,,0.2,100.0,0.0,0.05,True,True,baseline,333463.32883383776,310606.38883383776,322375.37087837915,300349.6308783791,0.0,0.0,0.0694238399850746,0.0,137.6206723870474,0.1176551945750585,300349.6308783791,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,lqmaq5g2,sweep/ppo/sb3/cpu/default/a1/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/lqmaq5g2,2026-03-15T20:02:28Z,7470.274064026,0,0,0,,1.0,100.0,0.0,0.05,True,True,baseline,246584.29279154172,229303.12279154177,244564.78814724492,227386.888147245,0.0,0.0,0.0692074374069363,0.0,135.2844805658817,0.1093837602765936,227386.888147245,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,2umearxm,sweep/ppo/sb3/cpu/default/a0.5/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/2umearxm,2026-03-15T20:09:56Z,7829.406313163,0,0,0,,0.5,100.0,0.0,0.3,True,True,baseline,303325.5596877454,282520.29968774534,291965.65710567136,271937.69710567134,0.0,0.0,0.0686525035124021,0.0,137.57073544790862,0.1132342695408356,271937.69710567134,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,k7pirqxy,sweep/ppo/sb3/cpu/default/a1/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/k7pirqxy,2026-03-15T20:33:53Z,7216.626889631,0,0,0,,1.0,100.0,0.0,0.15,True,True,baseline,254537.24517731377,236935.99517731369,254471.2696855663,236912.16968556636,0.0,0.0,0.0703905833083271,0.0,136.6143424312229,0.1038838810036006,236912.16968556636,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,algnjce4,sweep/ppo/sb3/cpu/default/a0.6/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/algnjce4,2026-03-15T20:54:24Z,7739.30650029,0,0,0,,0.6,100.0,0.0,0.05,True,True,baseline,296881.4938150014,276559.4338150014,282693.0664052287,263321.0864052287,0.0,0.0,0.0689497793839256,0.0,137.65459475595475,0.1116745762120893,263321.0864052287,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,vqe2dmcq,sweep/ppo/sb3/cpu/default/a0.4/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/vqe2dmcq,2026-03-15T21:08:22Z,7815.774646473,0,0,0,,0.4,100.0,0.0,0.05,True,True,baseline,316543.04043212667,294899.01043212664,299980.59649797506,279386.7564979751,0.0,0.0,0.067603468946279,0.0,137.7846896269947,0.1128739206843639,279386.7564979751,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,0xlvpawh,sweep/ppo/sb3/cpu/default/a0.3/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/0xlvpawh,2026-03-15T21:16:04Z,7997.68392245,0,0,0,,0.3,100.0,0.0,0.15,True,True,baseline,325062.60932028474,302657.9893202848,313580.73955351143,292103.1195535114,0.0,0.0,0.0700934793925504,0.0,137.30226556155992,0.1156304945350146,292103.1195535114,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,bofuxayn,sweep/ppo/sb3/cpu/default/a0.7/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/bofuxayn,2026-03-15T21:18:05Z,7486.102336723,0,0,0,,0.7,100.0,0.0,0.05,True,True,baseline,285875.15518050164,266287.2051805016,274356.50146499986,255620.24146499988,0.0,0.0,0.0711188680417482,0.0,137.42722406640746,0.1099719716550294,255620.24146499988,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,rujnezt7,sweep/ppo/sb3/cpu/default/a0.5/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/rujnezt7,2026-03-15T21:20:23Z,7936.01356938,0,0,0,,0.5,100.0,0.0,0.15,True,True,baseline,305342.590984541,284402.02098454104,287794.11179162114,267934.8717916211,0.0,0.0,0.0698329564541014,0.0,137.34875112178105,0.1110975441706762,267934.8717916211,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,f9e6wtv0,sweep/ppo/sb3/cpu/default/a0.7/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/f9e6wtv0,2026-03-15T22:07:04Z,8030.825365422,0,0,0,,0.7,100.0,0.0,0.05,True,True,baseline,288003.5379862045,268208.7279862045,274205.49798255006,255466.81798255,0.0,0.0,0.0732015803628115,0.0,137.25851714050424,0.1065894678006264,255466.81798255,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,r8hsz3ko,sweep/ppo/sb3/cpu/default/a0.7/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/r8hsz3ko,2026-03-15T22:13:06Z,7691.998775531,0,0,0,,0.7,100.0,0.0,0.3,True,True,baseline,286859.8032779717,267231.9932779717,273198.5349293896,254530.3349293896,0.0,0.0,0.0694378534785247,0.0,137.6169536272908,0.1086813731317916,254530.3349293896,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,yukg46hv,sweep/ppo/sb3/cpu/default/a1/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/yukg46hv,2026-03-15T23:03:27Z,7094.861108483,0,0,0,,1.0,100.0,0.0,0.15,True,True,baseline,254537.24517731377,236935.99517731369,254471.2696855663,236912.16968556636,0.0,0.0,0.0703905833083271,0.0,136.6143424312229,0.1038838810036006,236912.16968556636,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,e5tciezz,sweep/ppo/sb3/cpu/default/a0.7/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/e5tciezz,2026-03-16T00:16:08Z,7569.145925588,0,0,0,,0.7,100.0,0.0,0.05,True,True,baseline,285875.15518050164,266287.2051805016,274356.50146499986,255620.24146499988,0.0,0.0,0.0711188680417482,0.0,137.42722406640746,0.1099719716550294,255620.24146499988,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,1rop5sf9,sweep/ppo/sb3/cpu/default/a0.3/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/1rop5sf9,2026-03-16T00:21:00Z,8354.617713686,0,0,0,,0.3,100.0,0.0,0.05,True,True,baseline,321120.1030044527,298922.9430044526,312002.2572538445,290604.6972538445,0.0,0.0,0.0725338635316591,0.0,136.9642983472208,0.1152504371251349,290604.6972538445,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,7muxpseb,sweep/ppo/sb3/cpu/default/a0.2/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/7muxpseb,2026-03-16T00:21:21Z,8514.602541985,0,0,0,,0.2,100.0,0.0,0.05,True,True,baseline,333463.32883383776,310606.38883383776,322375.37087837915,300349.6308783791,0.0,0.0,0.0694238399850746,0.0,137.6206723870474,0.1176551945750585,300349.6308783791,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,304dyypp,sweep/ppo/sb3/cpu/default/a0.4/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/304dyypp,2026-03-16T00:37:04Z,7949.736292204,0,0,0,,0.4,100.0,0.0,0.3,True,True,baseline,313890.156459866,292317.566459866,301905.6061551721,281189.2661551722,0.0,0.0,0.0700585666613017,0.0,137.27393385978286,0.1140225013120235,281189.2661551722,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,zbw7nmeo,sweep/ppo/sb3/cpu/default/a0.1/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/zbw7nmeo,2026-03-16T00:53:02Z,8423.598177489,0,0,0,,0.1,100.0,0.0,0.05,True,True,baseline,340941.7898046945,317438.6698046944,328185.5337341634,305593.15373416344,0.0,0.0,0.0709483560344898,0.0,137.21682561970587,0.1186714838821206,305593.15373416344,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,oxu7rm37,sweep/ppo/sb3/cpu/default/a0.9/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/oxu7rm37,2026-03-16T00:53:31Z,7464.830361968,0,0,0,,0.9,100.0,0.0,0.3,True,True,baseline,268129.28805568966,249777.98805568964,259354.03651639624,241657.8165163962,0.0,0.0,0.0692141212557269,0.0,137.56737533812094,0.1028102128114812,241657.8165163962,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,m78p26vk,sweep/ppo/sb3/cpu/default/a0/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/m78p26vk,2026-03-16T00:56:58Z,8717.289024041,5,1004,1,,0.0,100.0,0.0,0.15,True,True,baseline,348861.1454509751,324713.0754509751,335967.6160126648,312660.3160126648,0.0,0.0,0.0674835742466741,0.0,136.8813175598437,0.118985751213389,312660.3160126648,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,65zzmszh,sweep/ppo/sb3/cpu/default/a1/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/65zzmszh,2026-03-16T01:14:03Z,7326.553384609,0,0,0,,1.0,100.0,0.0,0.3,True,True,baseline,246584.29279154172,229303.12279154177,244564.78814724492,227386.888147245,0.0,0.0,0.0692074374069363,0.0,135.2844805658817,0.1093837602765936,227386.888147245,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,47xraqt6,sweep/ppo/sb3/cpu/default/a0.9/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/47xraqt6,2026-03-16T01:22:01Z,7299.814264453,0,0,0,,0.9,100.0,0.0,0.3,True,True,baseline,269095.26288012683,250709.3028801269,257985.06236888352,240343.2023688835,0.0,0.0,0.0687681637998595,0.0,137.63174822647662,0.1040919495927453,240343.2023688835,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,mibyt0bf,sweep/ppo/sb3/cpu/default/a0.9/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/mibyt0bf,2026-03-16T01:34:44Z,7541.153639959,0,0,0,,0.9,100.0,0.0,0.3,True,True,baseline,267194.6114143838,248902.78141438385,258791.60782635584,241079.0878263559,0.0,0.0,0.0706779448814682,0.0,137.4716591479769,0.1060063717489262,241079.0878263559,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,8ww25eu1,sweep/ppo/sb3/cpu/default/a0.4/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/8ww25eu1,2026-03-16T01:45:51Z,8003.812511886,0,0,0,,0.4,100.0,0.0,0.3,True,True,baseline,313890.156459866,292317.566459866,301905.6061551721,281189.2661551722,0.0,0.0,0.0700585666613017,0.0,137.27393385978286,0.1140225013120235,281189.2661551722,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,cxdz0iyj,sweep/ppo/sb3/cpu/default/a0.6/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/cxdz0iyj,2026-03-16T01:50:19Z,7623.493600288,0,0,0,,0.6,100.0,0.0,0.3,True,True,baseline,293934.0132863448,273673.5532863448,278235.2158621181,259045.3158621181,0.0,0.0,0.0702286844227449,0.0,137.02187396075487,0.1108792101893818,259045.3158621181,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,1aeqr4sw,sweep/ppo/sb3/cpu/default/a1/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/1aeqr4sw,2026-03-16T01:58:10Z,7156.375097998,0,0,0,,1.0,100.0,0.0,0.3,True,True,baseline,254537.24517731377,236935.99517731369,254471.2696855663,236912.16968556636,0.0,0.0,0.0703905833083271,0.0,136.6143424312229,0.1038838810036006,236912.16968556636,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,7sgqchvk,sweep/ppo/sb3/cpu/default/a0.9/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/7sgqchvk,2026-03-16T02:09:14Z,7268.202978965,0,0,0,,0.9,100.0,0.0,0.15,True,True,baseline,267194.6114143838,248902.78141438385,258791.60782635584,241079.0878263559,0.0,0.0,0.0706779448814682,0.0,137.4716591479769,0.1060063717489262,241079.0878263559,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,3s777ena,sweep/ppo/sb3/cpu/default/a0.5/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/3s777ena,2026-03-16T02:14:54Z,7762.769931002,0,0,0,,0.5,100.0,0.0,0.05,True,True,baseline,303325.5596877454,282520.29968774534,291965.65710567136,271937.69710567134,0.0,0.0,0.0686525035124021,0.0,137.57073544790862,0.1132342695408356,271937.69710567134,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,oxsvuh5p,sweep/ppo/sb3/cpu/default/a0.1/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/oxsvuh5p,2026-03-16T02:27:01Z,8529.692612353,0,0,0,,0.1,100.0,0.0,0.15,True,True,baseline,340941.7898046945,317438.6698046944,328185.5337341634,305593.15373416344,0.0,0.0,0.0709483560344898,0.0,137.21682561970587,0.1186714838821206,305593.15373416344,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,4unnwl9l,sweep/ppo/sb3/cpu/default/a0.7/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/4unnwl9l,2026-03-16T02:34:01Z,7780.065361146,0,0,0,,0.7,100.0,0.0,0.15,True,True,baseline,286859.8032779717,267231.9932779717,273198.5349293896,254530.3349293896,0.0,0.0,0.0694378534785247,0.0,137.6169536272908,0.1086813731317916,254530.3349293896,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,qlfu6ts4,sweep/ppo/sb3/cpu/default/a0.1/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/qlfu6ts4,2026-03-16T02:46:52Z,8357.276406226,0,0,0,,0.1,100.0,0.0,0.3,True,True,baseline,340941.7898046945,317438.6698046944,328185.5337341634,305593.15373416344,0.0,0.0,0.0709483560344898,0.0,137.21682561970587,0.1186714838821206,305593.15373416344,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,ya2bb56z,sweep/ppo/sb3/cpu/default/a1/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/ya2bb56z,2026-03-16T03:04:37Z,7161.126998896,0,0,0,,1.0,100.0,0.0,0.15,True,True,baseline,254537.24517731377,236935.99517731369,254471.2696855663,236912.16968556636,0.0,0.0,0.0703905833083271,0.0,136.6143424312229,0.1038838810036006,236912.16968556636,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,9hrjmcaf,sweep/ppo/sb3/cpu/default/a0.1/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/9hrjmcaf,2026-03-16T03:13:29Z,8543.819880598,5,1004,1,,0.1,100.0,0.0,0.15,True,True,baseline,345607.36851277394,321934.388512774,330271.9018417394,307619.2418417394,0.0,0.0,0.0688978199434404,0.0,137.65927138408344,0.1180576040723697,307619.2418417394,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,bdz7jpg9,sweep/ppo/sb3/cpu/default/a0.4/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/bdz7jpg9,2026-03-16T03:19:29Z,8156.512730959,0,0,0,,0.4,100.0,0.0,0.15,True,True,baseline,313890.156459866,292317.566459866,301905.6061551721,281189.2661551722,0.0,0.0,0.0700585666613017,0.0,137.27393385978286,0.1140225013120235,281189.2661551722,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,4e8bw9fr,sweep/ppo/sb3/cpu/default/a0.4/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/4e8bw9fr,2026-03-16T03:23:44Z,7900.988162577,0,0,0,,0.4,100.0,0.0,0.3,True,True,baseline,313890.156459866,292317.566459866,301905.6061551721,281189.2661551722,0.0,0.0,0.0700585666613017,0.0,137.27393385978286,0.1140225013120235,281189.2661551722,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,rudposqg,sweep/ppo/sb3/cpu/default/a0.8/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/rudposqg,2026-03-16T04:16:36Z,7803.944972672,0,0,0,,0.8,100.0,0.0,0.15,True,True,baseline,277186.5585556976,258169.5585556976,260819.58418764165,242908.9641876417,0.0,0.0,0.0684627361221973,0.0,137.3260908975896,0.1077409453905398,242908.9641876417,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,r24xwwl9,sweep/ppo/sb3/cpu/default/a0.1/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/r24xwwl9,2026-03-16T04:43:43Z,8571.635566955,0,0,0,,0.1,100.0,0.0,0.15,True,True,baseline,340941.7898046945,317438.6698046944,328185.5337341634,305593.15373416344,0.0,0.0,0.0709483560344898,0.0,137.21682561970587,0.1186714838821206,305593.15373416344,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,34c0wzgt,sweep/ppo/sb3/cpu/default/a0.5/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/34c0wzgt,2026-03-16T04:43:54Z,7912.776898111,0,0,0,,0.5,100.0,0.0,0.05,True,True,baseline,306631.1127310434,285624.6727310434,292140.0218133485,272205.32181334845,0.0,0.0,0.0706121906603894,0.0,137.48236407441985,0.112886126809283,272205.32181334845,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,7bvonhab,sweep/ppo/sb3/cpu/default/a0.2/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/7bvonhab,2026-03-16T04:59:24Z,8276.510250338,0,0,0,,0.2,100.0,0.0,0.15,True,True,baseline,333463.32883383776,310606.38883383776,322375.37087837915,300349.6308783791,0.0,0.0,0.0694238399850746,0.0,137.6206723870474,0.1176551945750585,300349.6308783791,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,4f7j1z4p,sweep/ppo/sb3/cpu/default/a0/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/4f7j1z4p,2026-03-16T05:37:06Z,8672.519975981,5,1004,1,,0.0,100.0,0.0,0.3,True,True,baseline,352771.72255003714,328513.3625500371,337718.8770159761,314393.4970159762,0.0,0.0,0.0709252720738168,0.0,137.49769422651883,0.1192149910017191,314393.4970159762,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,c33cyjv9,sweep/ppo/sb3/cpu/default/a0.4/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/c33cyjv9,2026-03-16T05:38:08Z,8164.154912737,0,0,0,,0.4,100.0,0.0,0.15,True,True,baseline,314792.9405088838,293199.96050888376,304000.02795477153,283160.5079547715,0.0,0.0,0.0706474903672308,0.0,137.54347765167836,0.1134114537317883,283160.5079547715,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,i0pylqm1,sweep/ppo/sb3/cpu/default/a0.6/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/i0pylqm1,2026-03-16T05:54:46Z,7692.357589996,0,0,0,,0.6,100.0,0.0,0.15,True,True,baseline,293934.0132863448,273673.5532863448,278235.2158621181,259045.3158621181,0.0,0.0,0.0702286844227449,0.0,137.02187396075487,0.1108792101893818,259045.3158621181,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,p1lrhc1t,sweep/ppo/sb3/cpu/default/a0.5/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/p1lrhc1t,2026-03-16T06:06:24Z,7906.656203638,0,0,0,,0.5,100.0,0.0,0.15,True,True,baseline,304711.516143744,283789.716143744,290536.18598250934,270609.3259825093,0.0,0.0,0.0700712626186499,0.0,137.43043602946972,0.1112796769387625,270609.3259825093,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,lkhtnobk,sweep/ppo/sb3/cpu/default/a0.9/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/lkhtnobk,2026-03-16T06:25:11Z,7304.77470818,0,0,0,,0.9,100.0,0.0,0.3,True,True,baseline,269095.26288012683,250709.3028801269,257985.06236888352,240343.2023688835,0.0,0.0,0.0687681637998595,0.0,137.63174822647662,0.1040919495927453,240343.2023688835,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,dvf0av6p,sweep/ppo/sb3/cpu/default/a0/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/dvf0av6p,2026-03-16T06:34:22Z,8568.236301103,0,0,0,,0.0,100.0,0.0,0.3,True,True,baseline,331626.71399641165,307929.2839964116,301903.22363424243,278909.22363424255,0.0,0.0,0.0699106903089938,0.0,134.44341240328637,0.1239456985672444,278909.22363424255,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,k6dz4he1,sweep/ppo/sb3/cpu/default/a0/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/k6dz4he1,2026-03-16T06:38:33Z,8384.405275426,0,0,0,,0.0,100.0,0.0,0.05,True,True,baseline,331626.71399641165,307929.2839964116,301903.22363424243,278909.22363424255,0.0,0.0,0.0699106903089938,0.0,134.44341240328637,0.1239456985672444,278909.22363424255,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,3afj9zm5,sweep/ppo/sb3/cpu/default/a0.4/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/3afj9zm5,2026-03-16T06:51:33Z,7947.433015786,0,0,0,,0.4,100.0,0.0,0.3,True,True,baseline,313890.156459866,292317.566459866,301905.6061551721,281189.2661551722,0.0,0.0,0.0700585666613017,0.0,137.27393385978286,0.1140225013120235,281189.2661551722,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,lvlojvjv,sweep/ppo/sb3/cpu/default/a0.5/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/lvlojvjv,2026-03-16T07:17:09Z,8072.460782252,0,0,0,,0.5,100.0,0.0,0.05,True,True,baseline,305342.590984541,284402.02098454104,287794.11179162114,267934.8717916211,0.0,0.0,0.0698329564541014,0.0,137.34875112178105,0.1110975441706762,267934.8717916211,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,e6xtq7h5,sweep/ppo/sb3/cpu/default/a0.5/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/e6xtq7h5,2026-03-16T07:20:29Z,8062.476629606,0,0,0,,0.5,100.0,0.0,0.05,True,True,baseline,306631.1127310434,285624.6727310434,292140.0218133485,272205.32181334845,0.0,0.0,0.0706121906603894,0.0,137.48236407441985,0.112886126809283,272205.32181334845,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,6yrs8xci,sweep/ppo/sb3/cpu/default/a0.6/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/6yrs8xci,2026-03-16T07:50:01Z,7609.609823102,0,0,0,,0.6,100.0,0.0,0.15,True,True,baseline,293934.0132863448,273673.5532863448,278235.2158621181,259045.3158621181,0.0,0.0,0.0702286844227449,0.0,137.02187396075487,0.1108792101893818,259045.3158621181,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,16l3qjpm,sweep/ppo/sb3/cpu/default/a0/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/16l3qjpm,2026-03-16T07:50:41Z,8443.503878801,5,1004,1,,0.0,100.0,0.0,0.15,True,True,baseline,348861.1454509751,324713.0754509751,335967.6160126648,312660.3160126648,0.0,0.0,0.0674835742466741,0.0,136.8813175598437,0.118985751213389,312660.3160126648,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,rg98ht1b,sweep/ppo/sb3/cpu/default/a0/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/rg98ht1b,2026-03-16T07:55:36Z,8843.938343818,5,1004,1,,0.0,100.0,0.0,0.05,True,True,baseline,348861.1454509751,324713.0754509751,335967.6160126648,312660.3160126648,0.0,0.0,0.0674835742466741,0.0,136.8813175598437,0.118985751213389,312660.3160126648,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,mxd3i6wr,sweep/ppo/sb3/cpu/default/a0.2/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/mxd3i6wr,2026-03-16T07:58:03Z,8393.28184472,0,0,0,,0.2,100.0,0.0,0.15,True,True,baseline,333463.32883383776,310606.38883383776,322375.37087837915,300349.6308783791,0.0,0.0,0.0694238399850746,0.0,137.6206723870474,0.1176551945750585,300349.6308783791,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,0xvyhpg2,sweep/ppo/sb3/cpu/default/a0.9/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/0xvyhpg2,2026-03-16T08:01:43Z,7441.092473369,0,0,0,,0.9,100.0,0.0,0.05,True,True,baseline,268129.28805568966,249777.98805568964,259354.03651639624,241657.8165163962,0.0,0.0,0.0692141212557269,0.0,137.56737533812094,0.1028102128114812,241657.8165163962,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,eull6lat,sweep/ppo/sb3/cpu/default/a0.2/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/eull6lat,2026-03-16T08:03:08Z,8338.76018915,0,0,0,,0.2,100.0,0.0,0.05,True,True,baseline,333463.32883383776,310606.38883383776,322375.37087837915,300349.6308783791,0.0,0.0,0.0694238399850746,0.0,137.6206723870474,0.1176551945750585,300349.6308783791,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,5zekml75,sweep/ppo/sb3/cpu/default/a0.8/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/5zekml75,2026-03-16T08:06:29Z,7265.4990034,0,0,0,,0.8,100.0,0.0,0.15,True,True,baseline,277537.1135308166,258574.23353081665,260525.6140973399,242761.4740973399,0.0,0.0,0.0691119185711536,0.0,137.63850710873982,0.1055234893030045,242761.4740973399,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,fed0y4px,sweep/ppo/sb3/cpu/default/a0.7/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/fed0y4px,2026-03-16T08:13:55Z,7800.555020283,0,0,0,,0.7,100.0,0.0,0.05,True,True,baseline,286859.8032779717,267231.9932779717,273198.5349293896,254530.3349293896,0.0,0.0,0.0694378534785247,0.0,137.6169536272908,0.1086813731317916,254530.3349293896,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,byifn20j,sweep/ppo/sb3/cpu/default/a0.4/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/byifn20j,2026-03-16T08:20:55Z,8108.199462596,0,0,0,,0.4,100.0,0.0,0.3,True,True,baseline,316543.04043212667,294899.01043212664,299980.59649797506,279386.7564979751,0.0,0.0,0.067603468946279,0.0,137.7846896269947,0.1128739206843639,279386.7564979751,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,35rb8529,sweep/ppo/sb3/cpu/default/a0.5/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/35rb8529,2026-03-16T08:24:52Z,7749.649896228,0,0,0,,0.5,100.0,0.0,0.05,True,True,baseline,304711.516143744,283789.716143744,290536.18598250934,270609.3259825093,0.0,0.0,0.0700712626186499,0.0,137.43043602946972,0.1112796769387625,270609.3259825093,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,foinu2r1,sweep/ppo/sb3/cpu/default/a0.5/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/foinu2r1,2026-03-16T08:51:50Z,7924.351691656,0,0,0,,0.5,100.0,0.0,0.05,True,True,baseline,306631.1127310434,285624.6727310434,292140.0218133485,272205.32181334845,0.0,0.0,0.0706121906603894,0.0,137.48236407441985,0.112886126809283,272205.32181334845,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,nsg7m2ud,sweep/ppo/sb3/cpu/default/a0.5/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/nsg7m2ud,2026-03-16T09:06:10Z,7732.794663489,0,0,0,,0.5,100.0,0.0,0.3,True,True,baseline,303325.5596877454,282520.29968774534,291965.65710567136,271937.69710567134,0.0,0.0,0.0686525035124021,0.0,137.57073544790862,0.1132342695408356,271937.69710567134,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,gpririem,sweep/ppo/sb3/cpu/default/a0.2/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/gpririem,2026-03-16T09:20:57Z,8532.119121611,0,0,0,,0.2,100.0,0.0,0.3,True,True,baseline,333463.32883383776,310606.38883383776,322375.37087837915,300349.6308783791,0.0,0.0,0.0694238399850746,0.0,137.6206723870474,0.1176551945750585,300349.6308783791,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,9bmbalnk,sweep/ppo/sb3/cpu/default/a0.7/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/9bmbalnk,2026-03-16T10:05:49Z,7576.93090345,0,0,0,,0.7,100.0,0.0,0.15,True,True,baseline,285875.15518050164,266287.2051805016,274356.50146499986,255620.24146499988,0.0,0.0,0.0711188680417482,0.0,137.42722406640746,0.1099719716550294,255620.24146499988,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,9ma76sch,sweep/ppo/sb3/cpu/default/a0.1/baseline/s1337,finished,https://wandb.ai/lusiana/capstone_tpu/runs/9ma76sch,2026-03-16T10:23:59Z,8544.8427845,0,0,0,,0.1,100.0,0.0,0.3,True,True,baseline,341404.1205957663,317885.0305957663,329505.50925893825,306817.3492589383,0.0,0.0,0.0685274095002656,0.0,137.33021724658855,0.1206998447923596,306817.3492589383,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,cvrztiyb,sweep/ppo/sb3/cpu/default/a0.2/baseline/s42,finished,https://wandb.ai/lusiana/capstone_tpu/runs/cvrztiyb,2026-03-16T10:27:26Z,8353.396268583,0,0,0,,0.2,100.0,0.0,0.3,True,True,baseline,333463.32883383776,310606.38883383776,322375.37087837915,300349.6308783791,0.0,0.0,0.0694238399850746,0.0,137.6206723870474,0.1176551945750585,300349.6308783791,baseline
|
||||||
|
i88nw811,lusiana/capstone_tpu/i88nw811,7z9spcc6,sweep/ppo/sb3/cpu/default/a0/baseline/s7777,finished,https://wandb.ai/lusiana/capstone_tpu/runs/7z9spcc6,2026-03-16T10:29:46Z,8444.449882423,5,1004,1,,0.0,100.0,0.0,0.3,True,True,baseline,348861.1454509751,324713.0754509751,335967.6160126648,312660.3160126648,0.0,0.0,0.0674835742466741,0.0,136.8813175598437,0.118985751213389,312660.3160126648,baseline
|
||||||
|
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"n": 95,
|
||||||
|
"k": 2,
|
||||||
|
"dof": 93,
|
||||||
|
"df_t": 93,
|
||||||
|
"cov_type": "hc1",
|
||||||
|
"clusters": null,
|
||||||
|
"r2": 0.9759651432807543,
|
||||||
|
"adj_r2": 0.9757067039611925,
|
||||||
|
"sse": 1872600419.7223544,
|
||||||
|
"coefficients": [
|
||||||
|
{
|
||||||
|
"name": "intercept",
|
||||||
|
"coef": 348823.4131652292,
|
||||||
|
"std_error": 1383.3660823209932,
|
||||||
|
"t_stat": 252.15553397115096,
|
||||||
|
"p_value": 0.0,
|
||||||
|
"ci95_low": 346076.3222890517,
|
||||||
|
"ci95_high": 351570.5040414067
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "alpha",
|
||||||
|
"coef": -90140.52744561416,
|
||||||
|
"std_error": 2185.134882447838,
|
||||||
|
"t_stat": -41.25169945785529,
|
||||||
|
"p_value": 0.0,
|
||||||
|
"ci95_low": -94479.77225976942,
|
||||||
|
"ci95_high": -85801.2826314589
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
sweep_id,n,alpha_coef,alpha_std_error,alpha_t_stat,alpha_p_value,alpha_ci95_low,alpha_ci95_high,r2
|
||||||
|
i88nw811,95,-90140.52744561416,2185.134882447838,-41.25169945785529,0.0,-94479.77225976942,-85801.2826314589,0.9759651432807543
|
||||||
|
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"bundle_dir": "/home/velocitatem/Documents/Projects/PHANTOM/engine/studies/results/wandb_sweep_bundles/bundle_20260317_122818",
|
||||||
|
"git_commit": "e62e842faad79b143f5555d187075e85c8926363",
|
||||||
|
"cohort_name": "original_n95_baseline_n100",
|
||||||
|
"filters": {
|
||||||
|
"sweep_id": [
|
||||||
|
"i88nw811"
|
||||||
|
],
|
||||||
|
"mode": "baseline",
|
||||||
|
"n_products": 100.0,
|
||||||
|
"eta_ux": 0.0,
|
||||||
|
"lambda_coi": null,
|
||||||
|
"alpha_min": 0.0,
|
||||||
|
"alpha_max": 1.0
|
||||||
|
},
|
||||||
|
"n_rows": 95,
|
||||||
|
"n_sweeps": 1,
|
||||||
|
"alpha_unique": [
|
||||||
|
0.0,
|
||||||
|
0.1,
|
||||||
|
0.2,
|
||||||
|
0.3,
|
||||||
|
0.4,
|
||||||
|
0.5,
|
||||||
|
0.6,
|
||||||
|
0.7,
|
||||||
|
0.8,
|
||||||
|
0.9,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"rows_by_sweep": {
|
||||||
|
"i88nw811": 95
|
||||||
|
},
|
||||||
|
"rows_by_mode": {
|
||||||
|
"baseline": 95
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"n": 95,
|
||||||
|
"k": 2,
|
||||||
|
"dof": 93,
|
||||||
|
"df_t": 93,
|
||||||
|
"cov_type": "iid",
|
||||||
|
"clusters": null,
|
||||||
|
"r2": 0.9759651432807543,
|
||||||
|
"adj_r2": 0.9757067039611925,
|
||||||
|
"sse": 1872600419.7223544,
|
||||||
|
"coefficients": [
|
||||||
|
{
|
||||||
|
"name": "intercept",
|
||||||
|
"coef": 348823.4131652292,
|
||||||
|
"std_error": 860.7176431608721,
|
||||||
|
"t_stat": 405.2704344298337,
|
||||||
|
"p_value": 0.0,
|
||||||
|
"ci95_low": 347114.1985078009,
|
||||||
|
"ci95_high": 350532.6278226575
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "alpha",
|
||||||
|
"coef": -90140.52744561416,
|
||||||
|
"std_error": 1466.838282353916,
|
||||||
|
"t_stat": -61.452259959401054,
|
||||||
|
"p_value": 0.0,
|
||||||
|
"ci95_low": -93053.37756806448,
|
||||||
|
"ci95_high": -87227.67732316385
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import subprocess
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import matplotlib
|
import matplotlib
|
||||||
@@ -37,6 +38,20 @@ def _default_plot_dir(output_dir: Path) -> Path:
|
|||||||
return output_dir / "plots"
|
return output_dir / "plots"
|
||||||
|
|
||||||
|
|
||||||
|
def _git_commit() -> str:
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
["git", "rev-parse", "HEAD"],
|
||||||
|
check=True,
|
||||||
|
text=True,
|
||||||
|
capture_output=True,
|
||||||
|
cwd=_project_root(),
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
return "unknown"
|
||||||
|
return result.stdout.strip()
|
||||||
|
|
||||||
|
|
||||||
def _truthy(value: Any) -> bool:
|
def _truthy(value: Any) -> bool:
|
||||||
if isinstance(value, bool):
|
if isinstance(value, bool):
|
||||||
return value
|
return value
|
||||||
@@ -297,9 +312,16 @@ def _write_include(path: Path, figure_rel_path: str, width: str) -> Path:
|
|||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
def run(bundle_dir: Path, output_dir: Path, plot_dir: Path) -> list[Path]:
|
def run(
|
||||||
|
bundle_dir: Path,
|
||||||
|
output_dir: Path,
|
||||||
|
plot_dir: Path,
|
||||||
|
focus_sweep_id: str | None = None,
|
||||||
|
) -> list[Path]:
|
||||||
all_runs = _load_runs(bundle_dir)
|
all_runs = _load_runs(bundle_dir)
|
||||||
focus_id = _focus_sweep(all_runs)
|
focus_id = str(focus_sweep_id) if focus_sweep_id else _focus_sweep(all_runs)
|
||||||
|
if focus_id not in set(all_runs["sweep_id"].astype(str).unique()):
|
||||||
|
raise ValueError(f"Requested focus sweep_id not found: {focus_id}")
|
||||||
focus_runs = all_runs[all_runs["sweep_id"] == focus_id].copy()
|
focus_runs = all_runs[all_runs["sweep_id"] == focus_id].copy()
|
||||||
alpha_mode = _alpha_mode_summary(focus_runs)
|
alpha_mode = _alpha_mode_summary(focus_runs)
|
||||||
deltas = _alpha_deltas(alpha_mode)
|
deltas = _alpha_deltas(alpha_mode)
|
||||||
@@ -324,6 +346,9 @@ def run(bundle_dir: Path, output_dir: Path, plot_dir: Path) -> list[Path]:
|
|||||||
headline = {
|
headline = {
|
||||||
"bundle": str(bundle_dir),
|
"bundle": str(bundle_dir),
|
||||||
"focus_cohort": "max_alpha_coverage",
|
"focus_cohort": "max_alpha_coverage",
|
||||||
|
"focus_sweep_id": focus_id,
|
||||||
|
"focus_run_count": int(len(focus_runs)),
|
||||||
|
"git_commit": _git_commit(),
|
||||||
"alpha_cells": int(deltas["alpha"].nunique()) if not deltas.empty else 0,
|
"alpha_cells": int(deltas["alpha"].nunique()) if not deltas.empty else 0,
|
||||||
"alpha_min": float(deltas["alpha"].min()) if not deltas.empty else None,
|
"alpha_min": float(deltas["alpha"].min()) if not deltas.empty else None,
|
||||||
"alpha_max": float(deltas["alpha"].max()) if not deltas.empty else None,
|
"alpha_max": float(deltas["alpha"].max()) if not deltas.empty else None,
|
||||||
@@ -390,6 +415,7 @@ def main() -> None:
|
|||||||
parser.add_argument("--bundle-dir", type=Path, default=_default_bundle_dir())
|
parser.add_argument("--bundle-dir", type=Path, default=_default_bundle_dir())
|
||||||
parser.add_argument("--output-dir", type=Path, default=_default_output_dir())
|
parser.add_argument("--output-dir", type=Path, default=_default_output_dir())
|
||||||
parser.add_argument("--plot-dir", type=Path, default=None)
|
parser.add_argument("--plot-dir", type=Path, default=None)
|
||||||
|
parser.add_argument("--focus-sweep-id", type=str, default=None)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
_configure_style()
|
_configure_style()
|
||||||
@@ -399,7 +425,10 @@ def main() -> None:
|
|||||||
else _default_plot_dir(args.output_dir)
|
else _default_plot_dir(args.output_dir)
|
||||||
)
|
)
|
||||||
outputs = run(
|
outputs = run(
|
||||||
bundle_dir=args.bundle_dir, output_dir=args.output_dir, plot_dir=plot_dir
|
bundle_dir=args.bundle_dir,
|
||||||
|
output_dir=args.output_dir,
|
||||||
|
plot_dir=plot_dir,
|
||||||
|
focus_sweep_id=args.focus_sweep_id,
|
||||||
)
|
)
|
||||||
for path in outputs:
|
for path in outputs:
|
||||||
print(path)
|
print(path)
|
||||||
|
|||||||
454
paper/src/chapters/figures/results/revenue_alpha_analysis.py
Normal file
454
paper/src/chapters/figures/results/revenue_alpha_analysis.py
Normal file
@@ -0,0 +1,454 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import subprocess
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Iterable
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
from scipy import stats
|
||||||
|
|
||||||
|
|
||||||
|
def _project_root() -> Path:
|
||||||
|
return Path(__file__).resolve().parents[5]
|
||||||
|
|
||||||
|
|
||||||
|
def _default_bundle_dir() -> Path:
|
||||||
|
base = _project_root() / "engine" / "studies" / "results" / "wandb_sweep_bundles"
|
||||||
|
bundles = sorted(
|
||||||
|
[path for path in base.glob("bundle_*") if path.is_dir()],
|
||||||
|
key=lambda path: path.stat().st_mtime,
|
||||||
|
reverse=True,
|
||||||
|
)
|
||||||
|
if not bundles:
|
||||||
|
raise FileNotFoundError(f"No sweep bundle directories found in {base}")
|
||||||
|
return bundles[0]
|
||||||
|
|
||||||
|
|
||||||
|
def _bundle_dir_from_id(bundle_id: str) -> Path:
|
||||||
|
token = str(bundle_id).strip()
|
||||||
|
name = token if token.startswith("bundle_") else f"bundle_{token}"
|
||||||
|
path = (
|
||||||
|
_project_root()
|
||||||
|
/ "engine"
|
||||||
|
/ "studies"
|
||||||
|
/ "results"
|
||||||
|
/ "wandb_sweep_bundles"
|
||||||
|
/ name
|
||||||
|
)
|
||||||
|
if not path.exists():
|
||||||
|
raise FileNotFoundError(f"Bundle not found: {path}")
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def _default_output_dir() -> Path:
|
||||||
|
return Path(__file__).resolve().parent / "generated" / "final"
|
||||||
|
|
||||||
|
|
||||||
|
def _truthy(value: object) -> bool:
|
||||||
|
if isinstance(value, bool):
|
||||||
|
return value
|
||||||
|
if value is None:
|
||||||
|
return False
|
||||||
|
return str(value).strip().lower() in {"1", "true", "yes", "on"}
|
||||||
|
|
||||||
|
|
||||||
|
def _mode_of(row: pd.Series) -> str:
|
||||||
|
mode_hint = str(row.get("study_mode", "")).strip().lower()
|
||||||
|
if mode_hint in {"baseline", "no_robust"}:
|
||||||
|
return "baseline"
|
||||||
|
if mode_hint in {"defended", "robust"}:
|
||||||
|
return "defended"
|
||||||
|
if _truthy(row.get("baseline_mode")) or _truthy(row.get("no_robust")):
|
||||||
|
return "baseline"
|
||||||
|
return "defended"
|
||||||
|
|
||||||
|
|
||||||
|
def _coerce_numeric(frame: pd.DataFrame, columns: Iterable[str]) -> None:
|
||||||
|
for column in columns:
|
||||||
|
if column in frame.columns:
|
||||||
|
frame[column] = pd.to_numeric(frame[column], errors="coerce")
|
||||||
|
|
||||||
|
|
||||||
|
def _load_runs(bundle_dir: Path) -> pd.DataFrame:
|
||||||
|
path = bundle_dir / "runs_finished.csv"
|
||||||
|
if not path.exists():
|
||||||
|
raise FileNotFoundError(f"Missing required file: {path}")
|
||||||
|
frame = pd.read_csv(path)
|
||||||
|
frame["mode"] = frame.apply(_mode_of, axis=1)
|
||||||
|
_coerce_numeric(
|
||||||
|
frame,
|
||||||
|
[
|
||||||
|
"alpha",
|
||||||
|
"n_products",
|
||||||
|
"eta_ux",
|
||||||
|
"lambda_coi",
|
||||||
|
"eval_revenue_mean",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
frame = frame[frame["mode"].isin({"baseline", "defended"})].copy()
|
||||||
|
return frame
|
||||||
|
|
||||||
|
|
||||||
|
def _get_git_commit() -> str:
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
["git", "rev-parse", "HEAD"],
|
||||||
|
check=True,
|
||||||
|
text=True,
|
||||||
|
capture_output=True,
|
||||||
|
cwd=_project_root(),
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
return "unknown"
|
||||||
|
return result.stdout.strip()
|
||||||
|
|
||||||
|
|
||||||
|
def _apply_filters(frame: pd.DataFrame, args: argparse.Namespace) -> pd.DataFrame:
|
||||||
|
data = frame.copy()
|
||||||
|
if args.sweep_id:
|
||||||
|
allowed = {str(value) for value in args.sweep_id}
|
||||||
|
data = data[data["sweep_id"].astype(str).isin(allowed)]
|
||||||
|
if args.mode != "all":
|
||||||
|
data = data[data["mode"] == args.mode]
|
||||||
|
if args.n_products is not None:
|
||||||
|
data = data[data["n_products"] == float(args.n_products)]
|
||||||
|
if args.eta_ux is not None:
|
||||||
|
data = data[data["eta_ux"] == float(args.eta_ux)]
|
||||||
|
if args.lambda_coi is not None:
|
||||||
|
data = data[data["lambda_coi"] == float(args.lambda_coi)]
|
||||||
|
data = data[data["alpha"].notna() & data["eval_revenue_mean"].notna()]
|
||||||
|
data = data[data["alpha"] >= float(args.alpha_min)]
|
||||||
|
data = data[data["alpha"] <= float(args.alpha_max)]
|
||||||
|
return data.reset_index(drop=True)
|
||||||
|
|
||||||
|
|
||||||
|
def _design_matrix(
|
||||||
|
frame: pd.DataFrame,
|
||||||
|
*,
|
||||||
|
include_sweep_fixed_effects: bool,
|
||||||
|
) -> tuple[np.ndarray, np.ndarray, list[str]]:
|
||||||
|
y = frame["eval_revenue_mean"].to_numpy(dtype=float)
|
||||||
|
x_alpha = frame["alpha"].to_numpy(dtype=float)
|
||||||
|
columns = ["intercept", "alpha"]
|
||||||
|
blocks = [np.ones_like(x_alpha), x_alpha]
|
||||||
|
if include_sweep_fixed_effects:
|
||||||
|
dummies = pd.get_dummies(
|
||||||
|
frame["sweep_id"].astype(str), prefix="sweep", drop_first=True
|
||||||
|
)
|
||||||
|
if not dummies.empty:
|
||||||
|
blocks.append(dummies.to_numpy(dtype=float).T)
|
||||||
|
columns.extend(dummies.columns.tolist())
|
||||||
|
X = np.vstack(blocks).T
|
||||||
|
return X, y, columns
|
||||||
|
|
||||||
|
|
||||||
|
def _covariance_hc1(X: np.ndarray, residuals: np.ndarray) -> np.ndarray:
|
||||||
|
n, k = X.shape
|
||||||
|
xtx_inv = np.linalg.pinv(X.T @ X)
|
||||||
|
xr = X * residuals[:, None]
|
||||||
|
meat = xr.T @ xr
|
||||||
|
scale = float(n) / max(n - k, 1)
|
||||||
|
return scale * (xtx_inv @ meat @ xtx_inv)
|
||||||
|
|
||||||
|
|
||||||
|
def _covariance_cluster(
|
||||||
|
X: np.ndarray, residuals: np.ndarray, groups: pd.Series
|
||||||
|
) -> tuple[np.ndarray, int]:
|
||||||
|
xtx_inv = np.linalg.pinv(X.T @ X)
|
||||||
|
unique = pd.Series(groups).astype(str).dropna().unique().tolist()
|
||||||
|
g = len(unique)
|
||||||
|
n, k = X.shape
|
||||||
|
if g <= 1:
|
||||||
|
return _covariance_hc1(X, residuals), g
|
||||||
|
meat = np.zeros((k, k), dtype=float)
|
||||||
|
for value in unique:
|
||||||
|
mask = pd.Series(groups).astype(str).to_numpy() == value
|
||||||
|
Xg = X[mask]
|
||||||
|
ug = residuals[mask]
|
||||||
|
xu = Xg.T @ ug
|
||||||
|
meat += np.outer(xu, xu)
|
||||||
|
c = (g / (g - 1.0)) * ((n - 1.0) / max(n - k, 1.0))
|
||||||
|
return c * (xtx_inv @ meat @ xtx_inv), g
|
||||||
|
|
||||||
|
|
||||||
|
def _fit_ols(
|
||||||
|
X: np.ndarray,
|
||||||
|
y: np.ndarray,
|
||||||
|
columns: list[str],
|
||||||
|
*,
|
||||||
|
cov_type: str,
|
||||||
|
groups: pd.Series | None = None,
|
||||||
|
) -> dict[str, object]:
|
||||||
|
n, k = X.shape
|
||||||
|
beta, _, _, _ = np.linalg.lstsq(X, y, rcond=None)
|
||||||
|
fitted = X @ beta
|
||||||
|
residuals = y - fitted
|
||||||
|
dof = max(n - k, 1)
|
||||||
|
sse = float(np.sum(residuals**2))
|
||||||
|
y_centered = y - float(np.mean(y))
|
||||||
|
sst = float(np.sum(y_centered**2))
|
||||||
|
r2 = float(1.0 - sse / sst) if sst > 0 else 0.0
|
||||||
|
adj_r2 = float(1.0 - (1.0 - r2) * ((n - 1.0) / max(n - k, 1.0)))
|
||||||
|
|
||||||
|
if cov_type == "iid":
|
||||||
|
sigma2 = sse / dof
|
||||||
|
cov = sigma2 * np.linalg.pinv(X.T @ X)
|
||||||
|
df_t = dof
|
||||||
|
clusters = None
|
||||||
|
elif cov_type == "hc1":
|
||||||
|
cov = _covariance_hc1(X, residuals)
|
||||||
|
df_t = dof
|
||||||
|
clusters = None
|
||||||
|
elif cov_type == "cluster":
|
||||||
|
if groups is None:
|
||||||
|
raise ValueError("groups are required when cov_type='cluster'")
|
||||||
|
cov, clusters = _covariance_cluster(X, residuals, groups)
|
||||||
|
df_t = max(clusters - 1, 1)
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unsupported cov_type: {cov_type}")
|
||||||
|
|
||||||
|
se = np.sqrt(np.clip(np.diag(cov), 0.0, np.inf))
|
||||||
|
t_stats = np.divide(beta, se, out=np.zeros_like(beta), where=se > 0)
|
||||||
|
p_values = 2.0 * (1.0 - stats.t.cdf(np.abs(t_stats), df=df_t))
|
||||||
|
t_crit = float(stats.t.ppf(0.975, df=df_t))
|
||||||
|
ci_low = beta - t_crit * se
|
||||||
|
ci_high = beta + t_crit * se
|
||||||
|
|
||||||
|
coef_rows = []
|
||||||
|
for idx, name in enumerate(columns):
|
||||||
|
coef_rows.append(
|
||||||
|
{
|
||||||
|
"name": name,
|
||||||
|
"coef": float(beta[idx]),
|
||||||
|
"std_error": float(se[idx]),
|
||||||
|
"t_stat": float(t_stats[idx]),
|
||||||
|
"p_value": float(p_values[idx]),
|
||||||
|
"ci95_low": float(ci_low[idx]),
|
||||||
|
"ci95_high": float(ci_high[idx]),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"n": int(n),
|
||||||
|
"k": int(k),
|
||||||
|
"dof": int(dof),
|
||||||
|
"df_t": int(df_t),
|
||||||
|
"cov_type": cov_type,
|
||||||
|
"clusters": int(clusters) if clusters is not None else None,
|
||||||
|
"r2": r2,
|
||||||
|
"adj_r2": adj_r2,
|
||||||
|
"sse": sse,
|
||||||
|
"coefficients": coef_rows,
|
||||||
|
"residuals": residuals,
|
||||||
|
"fitted": fitted,
|
||||||
|
"beta": beta,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _diagnostics(
|
||||||
|
X: np.ndarray, y: np.ndarray, fit: dict[str, object]
|
||||||
|
) -> dict[str, object]:
|
||||||
|
residuals = np.asarray(fit["residuals"], dtype=float)
|
||||||
|
n, k = X.shape
|
||||||
|
if residuals.size < 8:
|
||||||
|
normality = {"test": "jarque_bera", "available": False}
|
||||||
|
else:
|
||||||
|
jb_stat, jb_p = stats.jarque_bera(residuals)
|
||||||
|
normality = {
|
||||||
|
"test": "jarque_bera",
|
||||||
|
"available": True,
|
||||||
|
"statistic": float(jb_stat),
|
||||||
|
"p_value": float(jb_p),
|
||||||
|
}
|
||||||
|
|
||||||
|
if k <= 1:
|
||||||
|
hetero = {"test": "breusch_pagan", "available": False}
|
||||||
|
else:
|
||||||
|
u2 = residuals**2
|
||||||
|
aux = _fit_ols(X, u2, [f"x{i}" for i in range(k)], cov_type="iid")
|
||||||
|
lm = float(len(u2) * float(aux["r2"]))
|
||||||
|
df_bp = k - 1
|
||||||
|
p_bp = float(1.0 - stats.chi2.cdf(lm, df_bp))
|
||||||
|
hetero = {
|
||||||
|
"test": "breusch_pagan",
|
||||||
|
"available": True,
|
||||||
|
"lm_stat": lm,
|
||||||
|
"df": int(df_bp),
|
||||||
|
"p_value": p_bp,
|
||||||
|
}
|
||||||
|
|
||||||
|
xtx_inv = np.linalg.pinv(X.T @ X)
|
||||||
|
leverages = np.sum((X @ xtx_inv) * X, axis=1)
|
||||||
|
mse = float(np.sum(residuals**2) / max(n - k, 1))
|
||||||
|
if mse <= 0:
|
||||||
|
cooks = np.zeros(n, dtype=float)
|
||||||
|
else:
|
||||||
|
denom = np.clip((1.0 - leverages) ** 2, 1e-10, np.inf)
|
||||||
|
cooks = ((residuals**2) / (k * mse)) * (leverages / denom)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"normality": normality,
|
||||||
|
"heteroskedasticity": hetero,
|
||||||
|
"influence": {
|
||||||
|
"max_leverage": float(np.max(leverages)) if leverages.size else 0.0,
|
||||||
|
"mean_leverage": float(np.mean(leverages)) if leverages.size else 0.0,
|
||||||
|
"high_leverage_threshold": float(2.0 * k / max(n, 1)),
|
||||||
|
"high_leverage_count": int(np.sum(leverages > (2.0 * k / max(n, 1)))),
|
||||||
|
"max_cooks_distance": float(np.max(cooks)) if cooks.size else 0.0,
|
||||||
|
"high_cooks_threshold": float(4.0 / max(n, 1)),
|
||||||
|
"high_cooks_count": int(np.sum(cooks > (4.0 / max(n, 1)))),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def run(args: argparse.Namespace) -> list[Path]:
|
||||||
|
output_dir = Path(args.output_dir)
|
||||||
|
output_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
runs = _load_runs(Path(args.bundle_dir))
|
||||||
|
filtered = _apply_filters(runs, args)
|
||||||
|
if len(filtered) < 3:
|
||||||
|
raise ValueError("Filtered cohort must contain at least 3 rows")
|
||||||
|
if filtered["alpha"].nunique() < 2:
|
||||||
|
raise ValueError("Filtered cohort must contain at least 2 unique alpha values")
|
||||||
|
|
||||||
|
filtered_csv = output_dir / "revenue_alpha_filtered.csv"
|
||||||
|
filtered.to_csv(filtered_csv, index=False)
|
||||||
|
|
||||||
|
sample_accounting = {
|
||||||
|
"bundle_dir": str(Path(args.bundle_dir)),
|
||||||
|
"git_commit": _get_git_commit(),
|
||||||
|
"cohort_name": str(args.cohort_name),
|
||||||
|
"filters": {
|
||||||
|
"sweep_id": args.sweep_id,
|
||||||
|
"mode": args.mode,
|
||||||
|
"n_products": args.n_products,
|
||||||
|
"eta_ux": args.eta_ux,
|
||||||
|
"lambda_coi": args.lambda_coi,
|
||||||
|
"alpha_min": args.alpha_min,
|
||||||
|
"alpha_max": args.alpha_max,
|
||||||
|
},
|
||||||
|
"n_rows": int(len(filtered)),
|
||||||
|
"n_sweeps": int(filtered["sweep_id"].nunique()),
|
||||||
|
"alpha_unique": sorted(
|
||||||
|
float(v) for v in filtered["alpha"].dropna().unique().tolist()
|
||||||
|
),
|
||||||
|
"rows_by_sweep": filtered.groupby("sweep_id").size().astype(int).to_dict(),
|
||||||
|
"rows_by_mode": filtered.groupby("mode").size().astype(int).to_dict(),
|
||||||
|
}
|
||||||
|
sample_path = output_dir / "revenue_alpha_sample_accounting.json"
|
||||||
|
sample_path.write_text(json.dumps(sample_accounting, indent=2) + "\n")
|
||||||
|
|
||||||
|
X_simple, y, cols_simple = _design_matrix(
|
||||||
|
filtered, include_sweep_fixed_effects=False
|
||||||
|
)
|
||||||
|
fit_simple = _fit_ols(X_simple, y, cols_simple, cov_type="iid")
|
||||||
|
simple_path = output_dir / "revenue_alpha_simple_ols.json"
|
||||||
|
simple_path.write_text(
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
k: v
|
||||||
|
for k, v in fit_simple.items()
|
||||||
|
if k not in {"residuals", "fitted", "beta"}
|
||||||
|
},
|
||||||
|
indent=2,
|
||||||
|
)
|
||||||
|
+ "\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
X_fe, y_fe, cols_fe = _design_matrix(filtered, include_sweep_fixed_effects=True)
|
||||||
|
cov_type = "cluster" if filtered["sweep_id"].nunique() > 1 else "hc1"
|
||||||
|
fit_fe = _fit_ols(
|
||||||
|
X_fe, y_fe, cols_fe, cov_type=cov_type, groups=filtered["sweep_id"]
|
||||||
|
)
|
||||||
|
fe_path = output_dir / "revenue_alpha_fixed_effects.json"
|
||||||
|
fe_path.write_text(
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
k: v
|
||||||
|
for k, v in fit_fe.items()
|
||||||
|
if k not in {"residuals", "fitted", "beta"}
|
||||||
|
},
|
||||||
|
indent=2,
|
||||||
|
)
|
||||||
|
+ "\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
per_sweep_rows: list[dict[str, float | str | int]] = []
|
||||||
|
for sweep_id, group in filtered.groupby("sweep_id"):
|
||||||
|
if len(group) < 3 or group["alpha"].nunique() < 2:
|
||||||
|
continue
|
||||||
|
X_sw, y_sw, cols_sw = _design_matrix(group, include_sweep_fixed_effects=False)
|
||||||
|
fit_sw = _fit_ols(X_sw, y_sw, cols_sw, cov_type="hc1")
|
||||||
|
alpha_row = next(
|
||||||
|
row for row in fit_sw["coefficients"] if row["name"] == "alpha"
|
||||||
|
)
|
||||||
|
per_sweep_rows.append(
|
||||||
|
{
|
||||||
|
"sweep_id": str(sweep_id),
|
||||||
|
"n": int(fit_sw["n"]),
|
||||||
|
"alpha_coef": float(alpha_row["coef"]),
|
||||||
|
"alpha_std_error": float(alpha_row["std_error"]),
|
||||||
|
"alpha_t_stat": float(alpha_row["t_stat"]),
|
||||||
|
"alpha_p_value": float(alpha_row["p_value"]),
|
||||||
|
"alpha_ci95_low": float(alpha_row["ci95_low"]),
|
||||||
|
"alpha_ci95_high": float(alpha_row["ci95_high"]),
|
||||||
|
"r2": float(fit_sw["r2"]),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
per_sweep_frame = pd.DataFrame(per_sweep_rows)
|
||||||
|
if not per_sweep_frame.empty:
|
||||||
|
per_sweep_frame = per_sweep_frame.sort_values("sweep_id").reset_index(drop=True)
|
||||||
|
per_sweep_path = output_dir / "revenue_alpha_per_sweep.csv"
|
||||||
|
per_sweep_frame.to_csv(per_sweep_path, index=False)
|
||||||
|
|
||||||
|
fit_for_diagnostics = fit_fe if cov_type == "cluster" else fit_simple
|
||||||
|
X_for_diagnostics = X_fe if cov_type == "cluster" else X_simple
|
||||||
|
diagnostics = _diagnostics(X_for_diagnostics, y, fit_for_diagnostics)
|
||||||
|
diagnostics_path = output_dir / "revenue_alpha_diagnostics.json"
|
||||||
|
diagnostics_path.write_text(json.dumps(diagnostics, indent=2) + "\n")
|
||||||
|
|
||||||
|
return [
|
||||||
|
filtered_csv,
|
||||||
|
sample_path,
|
||||||
|
simple_path,
|
||||||
|
fe_path,
|
||||||
|
per_sweep_path,
|
||||||
|
diagnostics_path,
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Reproducible contamination-vs-revenue analysis from a sweep bundle"
|
||||||
|
)
|
||||||
|
parser.add_argument("--bundle-dir", type=Path, default=None)
|
||||||
|
parser.add_argument("--bundle-id", type=str, default=None)
|
||||||
|
parser.add_argument("--output-dir", type=Path, default=_default_output_dir())
|
||||||
|
parser.add_argument("--cohort-name", type=str, default="custom")
|
||||||
|
parser.add_argument("--sweep-id", action="append", default=[])
|
||||||
|
parser.add_argument(
|
||||||
|
"--mode", choices=["all", "baseline", "defended"], default="all"
|
||||||
|
)
|
||||||
|
parser.add_argument("--n-products", type=float, default=None)
|
||||||
|
parser.add_argument("--eta-ux", type=float, default=None)
|
||||||
|
parser.add_argument("--lambda-coi", type=float, default=None)
|
||||||
|
parser.add_argument("--alpha-min", type=float, default=0.0)
|
||||||
|
parser.add_argument("--alpha-max", type=float, default=1.0)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.bundle_id:
|
||||||
|
args.bundle_dir = _bundle_dir_from_id(args.bundle_id)
|
||||||
|
elif args.bundle_dir is None:
|
||||||
|
args.bundle_dir = _default_bundle_dir()
|
||||||
|
|
||||||
|
outputs = run(args)
|
||||||
|
for path in outputs:
|
||||||
|
print(path)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
63
paper/src/chapters/figures/results/revenue_alpha_classic.py
Normal file
63
paper/src/chapters/figures/results/revenue_alpha_classic.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
from scipy import stats
|
||||||
|
|
||||||
|
|
||||||
|
root = Path(__file__).resolve().parents[5]
|
||||||
|
runs = (
|
||||||
|
root
|
||||||
|
/ "engine/studies/results/wandb_sweep_bundles/bundle_20260317_122818/runs_finished.csv"
|
||||||
|
)
|
||||||
|
|
||||||
|
df = pd.read_csv(runs)
|
||||||
|
df = df[
|
||||||
|
(df["sweep_id"].astype(str) == "i88nw811")
|
||||||
|
& (df["study_mode"].astype(str) == "baseline")
|
||||||
|
& (pd.to_numeric(df["n_products"], errors="coerce") == 100.0)
|
||||||
|
& (pd.to_numeric(df["eta_ux"], errors="coerce") == 0.0)
|
||||||
|
].copy()
|
||||||
|
|
||||||
|
alpha = pd.to_numeric(df["alpha"], errors="coerce")
|
||||||
|
revenue = pd.to_numeric(df["eval_revenue_mean"], errors="coerce")
|
||||||
|
mask = alpha.notna() & revenue.notna()
|
||||||
|
alpha = alpha[mask].to_numpy(dtype=float)
|
||||||
|
revenue = revenue[mask].to_numpy(dtype=float)
|
||||||
|
|
||||||
|
if len(alpha) < 3 or np.unique(alpha).size < 2:
|
||||||
|
raise ValueError("Not enough data for regression")
|
||||||
|
|
||||||
|
fit = stats.linregress(alpha, revenue)
|
||||||
|
n = len(alpha)
|
||||||
|
dof = n - 2
|
||||||
|
t_stat = fit.slope / fit.stderr
|
||||||
|
p_val = 2.0 * stats.t.sf(abs(t_stat), df=dof)
|
||||||
|
r2 = fit.rvalue**2
|
||||||
|
t_crit = stats.t.ppf(0.975, dof)
|
||||||
|
slope_ci = (fit.slope - t_crit * fit.stderr, fit.slope + t_crit * fit.stderr)
|
||||||
|
|
||||||
|
x = np.column_stack([np.ones(n), alpha])
|
||||||
|
beta = np.linalg.lstsq(x, revenue, rcond=None)[0]
|
||||||
|
resid = revenue - x @ beta
|
||||||
|
xtx_inv = np.linalg.pinv(x.T @ x)
|
||||||
|
meat = (x * resid[:, None]).T @ (x * resid[:, None])
|
||||||
|
cov_hc1 = (n / (n - x.shape[1])) * (xtx_inv @ meat @ xtx_inv)
|
||||||
|
se_hc1 = np.sqrt(np.diag(cov_hc1))
|
||||||
|
t_hc1 = beta[1] / se_hc1[1]
|
||||||
|
p_hc1 = 2.0 * stats.t.sf(abs(t_hc1), df=dof)
|
||||||
|
slope_ci_hc1 = (beta[1] - t_crit * se_hc1[1], beta[1] + t_crit * se_hc1[1])
|
||||||
|
|
||||||
|
print("Contamination-Revenue Slope")
|
||||||
|
print(
|
||||||
|
"cohort: bundle_20260317_122818, sweep=i88nw811, mode=baseline, n_products=100, eta_ux=0.0"
|
||||||
|
)
|
||||||
|
print(f"n={n}")
|
||||||
|
print(f"model: revenue = {fit.intercept:.2f} {fit.slope:+.2f} * alpha")
|
||||||
|
print(
|
||||||
|
f"OLS: t({dof})={t_stat:.2f}, p={p_val:.3e}, R^2={r2:.3f}, slope_95CI=[{slope_ci[0]:.2f}, {slope_ci[1]:.2f}]"
|
||||||
|
)
|
||||||
|
print(
|
||||||
|
f"HC1: t={t_hc1:.2f}, p={p_hc1:.3e}, slope_95CI=[{slope_ci_hc1[0]:.2f}, {slope_ci_hc1[1]:.2f}]"
|
||||||
|
)
|
||||||
|
print(f"effect: +0.1 alpha -> {0.1 * fit.slope:.2f} revenue units")
|
||||||
Reference in New Issue
Block a user