diff --git a/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/btc_vol.py b/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/btc_vol.py index c53afefc07..bd6b204d34 100644 --- a/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/btc_vol.py +++ b/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/btc_vol.py @@ -212,6 +212,11 @@ def aggregate_verdicts_recentered(rows: list[dict]) -> list[dict]: The re-centered DM measures the variance differential (biases annihilated by centering), so this is the **precision** jambe that the §C amended bareme (#11010) requires for the BEATS verdict. + + The uncentered sanity leg (`dm_uncentered_vs_har_raw_p_median`, #14390) is + aggregated alongside: it reproduces the #11011 keeper measure, and a leg + that exists only as per-row fields can never blush (the #14362 defect was + exactly a silent absence on the one surface where it would have been read). """ from collections import defaultdict @@ -228,11 +233,13 @@ def aggregate_verdicts_recentered(rows: list[dict]) -> list[dict]: har_vars_debiased = np.array([r["har_variance_debiased"] for r in sub]) har_biases = np.array([r["har_bias_oos"] for r in sub]) dm_pvals = np.array([r["dm_centered_pvalue"] for r in sub]) + dm_unc_pvals = np.array([r["dm_uncentered_vs_har_raw_pvalue"] for r in sub]) verdicts = [r["dm_centered_verdict"] for r in sub] edge = float(np.mean(reductions)) sigma = float(np.std(reductions)) if len(reductions) > 1 else 0.0 dm_p_med = float(np.median(dm_pvals)) + dm_unc_p_med = float(np.median(dm_unc_pvals)) # Variance ratio: var_DL / var_HAR_debiased < 1 means DLinear is more precise. var_ratio = float(np.mean(dl_vars) / np.mean(har_vars_debiased)) if np.mean(har_vars_debiased) > 0 else float("nan") @@ -253,6 +260,7 @@ def aggregate_verdicts_recentered(rows: list[dict]) -> list[dict]: "edge_reduction_pct": edge, "edge_std_pct": sigma, "dm_centered_p_median": dm_p_med, + "dm_uncentered_vs_har_raw_p_median": dm_unc_p_med, "var_ratio_dl_over_har_debiased": var_ratio, "har_bias_share_of_mse_debiased": bias_share, "mean_dl_mse": float(np.mean([r["dlinear_mse_logrv"] for r in sub])), diff --git a/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/results/m4_dlinear_vol_btc_sc_debiased_recentered.json b/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/results/m4_dlinear_vol_btc_sc_debiased_recentered.json index 55cb7978af..504a5ff38a 100644 --- a/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/results/m4_dlinear_vol_btc_sc_debiased_recentered.json +++ b/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/results/m4_dlinear_vol_btc_sc_debiased_recentered.json @@ -8,23 +8,23 @@ "decompose": false, "har_mse_logrv_raw": 0.8876766414630621, "har_mse_logrv_debiased": 0.8363349953763609, - "har_bias_oos": -0.2265869503892514, - "har_bias_sq_raw": 0.05134164608670107, + "har_bias_oos": -0.22658695038925147, + "har_bias_sq_raw": 0.05134164608670111, "har_variance_raw": 0.8363349953763609, - "har_bias_sq_debiased": 1.413373028026784e-31, + "har_bias_sq_debiased": 6.535436881595849e-32, "har_variance_debiased": 0.8363349953763609, - "dlinear_mse_logrv": 0.7500402773390882, - "dlinear_bias_sq": 1.3780518952009237e-05, - "dlinear_variance": 0.7500264968201361, - "mse_reduction_pct_vs_debiased_har": 10.318200065087444, - "dm_centered_stat": -6.228784907758055, + "dlinear_mse_logrv": 0.7500402759916452, + "dlinear_bias_sq": 1.3780499221591187e-05, + "dlinear_variance": 0.7500264954924235, + "mse_reduction_pct_vs_debiased_har": 10.318200226200268, + "dm_centered_stat": -6.228784955833262, "dm_centered_pvalue": 5.77933256806773e-10, "dm_centered_verdict": "BEATS baseline", - "dm_centered_mean_loss_diff": -0.08630849855622481, - "dm_uncentered_vs_har_raw_stat": -9.308815739868166, + "dm_centered_mean_loss_diff": -0.08630849988393753, + "dm_uncentered_vs_har_raw_stat": -9.308815767716679, "dm_uncentered_vs_har_raw_pvalue": 0.0, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.13763636412397387, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.13763636547141703, "n_predictions": 1890, "n_rv_days": 2278 }, @@ -36,23 +36,23 @@ "decompose": false, "har_mse_logrv_raw": 0.8876766414630621, "har_mse_logrv_debiased": 0.8363349953763609, - "har_bias_oos": -0.2265869503892514, - "har_bias_sq_raw": 0.05134164608670107, + "har_bias_oos": -0.22658695038925147, + "har_bias_sq_raw": 0.05134164608670111, "har_variance_raw": 0.8363349953763609, - "har_bias_sq_debiased": 1.413373028026784e-31, + "har_bias_sq_debiased": 6.535436881595849e-32, "har_variance_debiased": 0.8363349953763609, - "dlinear_mse_logrv": 0.7534806623520199, - "dlinear_bias_sq": 1.9665559248522274e-05, - "dlinear_variance": 0.7534609967927715, - "mse_reduction_pct_vs_debiased_har": 9.906835596070628, - "dm_centered_stat": -5.901210747033868, - "dm_centered_pvalue": 4.266757391846454e-09, + "dlinear_mse_logrv": 0.7534806566182599, + "dlinear_bias_sq": 1.96655395674364e-05, + "dlinear_variance": 0.7534609910786926, + "mse_reduction_pct_vs_debiased_har": 9.906836281652371, + "dm_centered_stat": -5.901210998180161, + "dm_centered_pvalue": 4.266750952552911e-09, "dm_centered_verdict": "BEATS baseline", - "dm_centered_mean_loss_diff": -0.0828739985835896, - "dm_uncentered_vs_har_raw_stat": -9.150634683670352, + "dm_centered_mean_loss_diff": -0.08287400429766853, + "dm_uncentered_vs_har_raw_stat": -9.150634866565728, "dm_uncentered_vs_har_raw_pvalue": 0.0, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.13419597911104217, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.1341959848448022, "n_predictions": 1890, "n_rv_days": 2278 }, @@ -64,23 +64,23 @@ "decompose": false, "har_mse_logrv_raw": 0.8876766414630621, "har_mse_logrv_debiased": 0.8363349953763609, - "har_bias_oos": -0.2265869503892514, - "har_bias_sq_raw": 0.05134164608670107, + "har_bias_oos": -0.22658695038925147, + "har_bias_sq_raw": 0.05134164608670111, "har_variance_raw": 0.8363349953763609, - "har_bias_sq_debiased": 1.413373028026784e-31, + "har_bias_sq_debiased": 6.535436881595849e-32, "har_variance_debiased": 0.8363349953763609, - "dlinear_mse_logrv": 0.7516759086489415, - "dlinear_bias_sq": 3.686069799782585e-05, - "dlinear_variance": 0.7516390479509438, - "mse_reduction_pct_vs_debiased_har": 10.122628754680028, - "dm_centered_stat": -6.099898908625079, - "dm_centered_pvalue": 1.2840908336642087e-09, + "dlinear_mse_logrv": 0.7516759112622348, + "dlinear_bias_sq": 3.686066472460918e-05, + "dlinear_variance": 0.7516390505975102, + "mse_reduction_pct_vs_debiased_har": 10.122628442210353, + "dm_centered_stat": -6.099898532645422, + "dm_centered_pvalue": 1.2840939422886777e-09, "dm_centered_verdict": "BEATS baseline", - "dm_centered_mean_loss_diff": -0.0846959474254172, - "dm_uncentered_vs_har_raw_stat": -9.262350386794445, + "dm_centered_mean_loss_diff": -0.08469594477885087, + "dm_uncentered_vs_har_raw_stat": -9.262349857973373, "dm_uncentered_vs_har_raw_pvalue": 0.0, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.13600073281412045, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.13600073020082734, "n_predictions": 1890, "n_rv_days": 2278 }, @@ -92,23 +92,23 @@ "decompose": false, "har_mse_logrv_raw": 0.8876766414630621, "har_mse_logrv_debiased": 0.8363349953763609, - "har_bias_oos": -0.2265869503892514, - "har_bias_sq_raw": 0.05134164608670107, + "har_bias_oos": -0.22658695038925147, + "har_bias_sq_raw": 0.05134164608670111, "har_variance_raw": 0.8363349953763609, - "har_bias_sq_debiased": 1.413373028026784e-31, + "har_bias_sq_debiased": 6.535436881595849e-32, "har_variance_debiased": 0.8363349953763609, - "dlinear_mse_logrv": 0.752382840589742, - "dlinear_bias_sq": 6.717596338348179e-05, - "dlinear_variance": 0.7523156646263586, - "mse_reduction_pct_vs_debiased_har": 10.038101388886567, - "dm_centered_stat": -6.044090732273397, - "dm_centered_pvalue": 1.8058008421917293e-09, + "dlinear_mse_logrv": 0.752382839345394, + "dlinear_bias_sq": 6.717598719471965e-05, + "dlinear_variance": 0.7523156633581991, + "mse_reduction_pct_vs_debiased_har": 10.038101537672409, + "dm_centered_stat": -6.044090646126228, + "dm_centered_pvalue": 1.805801952414754e-09, "dm_centered_verdict": "BEATS baseline", - "dm_centered_mean_loss_diff": -0.08401933075000244, - "dm_uncentered_vs_har_raw_stat": -9.333346721250683, + "dm_centered_mean_loss_diff": -0.08401933201816193, + "dm_uncentered_vs_har_raw_stat": -9.333346648451142, "dm_uncentered_vs_har_raw_pvalue": 0.0, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.13529380087332005, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.13529380211766828, "n_predictions": 1890, "n_rv_days": 2278 }, @@ -118,25 +118,25 @@ "seed": 0, "seq_len": 22, "decompose": false, - "har_mse_logrv_raw": 0.5219741587277243, - "har_mse_logrv_debiased": 0.404202867593261, - "har_bias_oos": -0.34317822065868814, - "har_bias_sq_raw": 0.11777129113446325, - "har_variance_raw": 0.404202867593261, - "har_bias_sq_debiased": 1.5615786875681597e-31, - "har_variance_debiased": 0.404202867593261, - "dlinear_mse_logrv": 0.3736949329946485, - "dlinear_bias_sq": 2.7489317423759556e-05, - "dlinear_variance": 0.3736674436772248, - "mse_reduction_pct_vs_debiased_har": 7.547678911895267, - "dm_centered_stat": -4.049040174742201, - "dm_centered_pvalue": 5.352813553383129e-05, + "har_mse_logrv_raw": 0.5219741587277245, + "har_mse_logrv_debiased": 0.4042028675932612, + "har_bias_oos": -0.34317822065868825, + "har_bias_sq_raw": 0.11777129113446332, + "har_variance_raw": 0.40420286759326113, + "har_bias_sq_debiased": 4.8568331222071824e-32, + "har_variance_debiased": 0.40420286759326113, + "dlinear_mse_logrv": 0.3736949335562163, + "dlinear_bias_sq": 2.7489304039379204e-05, + "dlinear_variance": 0.3736674442521769, + "mse_reduction_pct_vs_debiased_har": 7.54767877296314, + "dm_centered_stat": -4.049040043379695, + "dm_centered_pvalue": 5.352816531289939e-05, "dm_centered_verdict": "BEATS baseline", - "dm_centered_mean_loss_diff": -0.030535423916036263, - "dm_uncentered_vs_har_raw_stat": -6.4982458593752215, - "dm_uncentered_vs_har_raw_pvalue": 1.0392997573660523e-10, + "dm_centered_mean_loss_diff": -0.030535423341084222, + "dm_uncentered_vs_har_raw_stat": -6.4982458667403, + "dm_uncentered_vs_har_raw_pvalue": 1.0393019778121015e-10, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.14827922573307575, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.14827922517150813, "n_predictions": 1870, "n_rv_days": 2278 }, @@ -146,25 +146,25 @@ "seed": 7, "seq_len": 22, "decompose": false, - "har_mse_logrv_raw": 0.5219741587277243, - "har_mse_logrv_debiased": 0.404202867593261, - "har_bias_oos": -0.34317822065868814, - "har_bias_sq_raw": 0.11777129113446325, - "har_variance_raw": 0.404202867593261, - "har_bias_sq_debiased": 1.5615786875681597e-31, - "har_variance_debiased": 0.404202867593261, - "dlinear_mse_logrv": 0.3747704573335785, - "dlinear_bias_sq": 2.5898740393859288e-05, - "dlinear_variance": 0.3747445585931846, - "mse_reduction_pct_vs_debiased_har": 7.281593630181664, - "dm_centered_stat": -3.8833086283328817, - "dm_centered_pvalue": 0.00010662841412600876, + "har_mse_logrv_raw": 0.5219741587277245, + "har_mse_logrv_debiased": 0.4042028675932612, + "har_bias_oos": -0.34317822065868825, + "har_bias_sq_raw": 0.11777129113446332, + "har_variance_raw": 0.40420286759326113, + "har_bias_sq_debiased": 4.8568331222071824e-32, + "har_variance_debiased": 0.40420286759326113, + "dlinear_mse_logrv": 0.37477045743488374, + "dlinear_bias_sq": 2.5898735165782497e-05, + "dlinear_variance": 0.37474455869971796, + "mse_reduction_pct_vs_debiased_har": 7.281593605118732, + "dm_centered_stat": -3.8833085637806812, + "dm_centered_pvalue": 0.000106628442218204, "dm_centered_verdict": "BEATS baseline", - "dm_centered_mean_loss_diff": -0.029458309000076354, - "dm_uncentered_vs_har_raw_stat": -6.410523125545738, + "dm_centered_mean_loss_diff": -0.029458308893543145, + "dm_uncentered_vs_har_raw_stat": -6.410523136645976, "dm_uncentered_vs_har_raw_pvalue": 1.8314505467742492e-10, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.14720370139414576, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.14720370129284066, "n_predictions": 1870, "n_rv_days": 2278 }, @@ -174,25 +174,25 @@ "seed": 42, "seq_len": 22, "decompose": false, - "har_mse_logrv_raw": 0.5219741587277243, - "har_mse_logrv_debiased": 0.404202867593261, - "har_bias_oos": -0.34317822065868814, - "har_bias_sq_raw": 0.11777129113446325, - "har_variance_raw": 0.404202867593261, - "har_bias_sq_debiased": 1.5615786875681597e-31, - "har_variance_debiased": 0.404202867593261, - "dlinear_mse_logrv": 0.37625328531902474, - "dlinear_bias_sq": 4.137209157807155e-05, - "dlinear_variance": 0.37621191322744674, - "mse_reduction_pct_vs_debiased_har": 6.914741214147253, - "dm_centered_stat": -3.7842228030691065, - "dm_centered_pvalue": 0.00015904809598477065, + "har_mse_logrv_raw": 0.5219741587277245, + "har_mse_logrv_debiased": 0.4042028675932612, + "har_bias_oos": -0.34317822065868825, + "har_bias_sq_raw": 0.11777129113446332, + "har_variance_raw": 0.40420286759326113, + "har_bias_sq_debiased": 4.8568331222071824e-32, + "har_variance_debiased": 0.40420286759326113, + "dlinear_mse_logrv": 0.376253282882971, + "dlinear_bias_sq": 4.137209933984475e-05, + "dlinear_variance": 0.37621191078363114, + "mse_reduction_pct_vs_debiased_har": 6.914741816828259, + "dm_centered_stat": -3.7842233173471698, + "dm_centered_pvalue": 0.00015904776965869338, "dm_centered_verdict": "BEATS baseline", - "dm_centered_mean_loss_diff": -0.02799095436581433, - "dm_uncentered_vs_har_raw_stat": -6.394581498492657, + "dm_centered_mean_loss_diff": -0.027990956809629992, + "dm_uncentered_vs_har_raw_stat": -6.394581561922246, "dm_uncentered_vs_har_raw_pvalue": 2.0285328972136085e-10, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.14572087340869952, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.14572087584475343, "n_predictions": 1870, "n_rv_days": 2278 }, @@ -202,25 +202,25 @@ "seed": 99, "seq_len": 22, "decompose": false, - "har_mse_logrv_raw": 0.5219741587277243, - "har_mse_logrv_debiased": 0.404202867593261, - "har_bias_oos": -0.34317822065868814, - "har_bias_sq_raw": 0.11777129113446325, - "har_variance_raw": 0.404202867593261, - "har_bias_sq_debiased": 1.5615786875681597e-31, - "har_variance_debiased": 0.404202867593261, - "dlinear_mse_logrv": 0.3742861044528717, - "dlinear_bias_sq": 3.5460793748660084e-05, - "dlinear_variance": 0.3742506436591231, - "mse_reduction_pct_vs_debiased_har": 7.401422785177713, - "dm_centered_stat": -3.934064343605695, - "dm_centered_pvalue": 8.657436804493379e-05, + "har_mse_logrv_raw": 0.5219741587277245, + "har_mse_logrv_debiased": 0.4042028675932612, + "har_bias_oos": -0.34317822065868825, + "har_bias_sq_raw": 0.11777129113446332, + "har_variance_raw": 0.40420286759326113, + "har_bias_sq_debiased": 4.8568331222071824e-32, + "har_variance_debiased": 0.40420286759326113, + "dlinear_mse_logrv": 0.3742861021680439, + "dlinear_bias_sq": 3.546079923907866e-05, + "dlinear_variance": 0.3742506413688048, + "mse_reduction_pct_vs_debiased_har": 7.401423350445333, + "dm_centered_stat": -3.9340646295525485, + "dm_centered_pvalue": 8.65742658435753e-05, "dm_centered_verdict": "BEATS baseline", - "dm_centered_mean_loss_diff": -0.029952223934137993, - "dm_uncentered_vs_har_raw_stat": -6.504799754772119, + "dm_centered_mean_loss_diff": -0.029952226224456306, + "dm_uncentered_vs_har_raw_stat": -6.504799847439706, "dm_uncentered_vs_har_raw_pvalue": 9.959455482544399e-11, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.1476880542748526, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.14768805655968054, "n_predictions": 1870, "n_rv_days": 2278 }, @@ -230,25 +230,25 @@ "seed": 0, "seq_len": 22, "decompose": false, - "har_mse_logrv_raw": 0.5706841531937791, - "har_mse_logrv_debiased": 0.3679851864421157, - "har_bias_oos": -0.45022101989096786, - "har_bias_sq_raw": 0.20269896675166327, - "har_variance_raw": 0.3679851864421157, - "har_bias_sq_debiased": 1.0026153804241113e-32, - "har_variance_debiased": 0.3679851864421157, - "dlinear_mse_logrv": 0.35453501263625026, - "dlinear_bias_sq": 1.0367793001096496e-05, - "dlinear_variance": 0.35452464484324914, - "mse_reduction_pct_vs_debiased_har": 3.6550856668740277, - "dm_centered_stat": -1.6292025580658112, - "dm_centered_pvalue": 0.10344094996441178, + "har_mse_logrv_raw": 0.5706841531937793, + "har_mse_logrv_debiased": 0.3679851864421159, + "har_bias_oos": -0.4502210198909679, + "har_bias_sq_raw": 0.20269896675166332, + "har_variance_raw": 0.3679851864421159, + "har_bias_sq_debiased": 0.0, + "har_variance_debiased": 0.3679851864421159, + "dlinear_mse_logrv": 0.35453501270384535, + "dlinear_bias_sq": 1.0367794207915697e-05, + "dlinear_variance": 0.35452464490963737, + "mse_reduction_pct_vs_debiased_har": 3.6550856485051137, + "dm_centered_stat": -1.629202545808664, + "dm_centered_pvalue": 0.10344095255858243, "dm_centered_verdict": "INCONCLUSIVE", - "dm_centered_mean_loss_diff": -0.013460541598866624, - "dm_uncentered_vs_har_raw_stat": -5.94917859880759, - "dm_uncentered_vs_har_raw_pvalue": 3.2169920061164703e-09, + "dm_centered_mean_loss_diff": -0.013460541532478484, + "dm_uncentered_vs_har_raw_stat": -5.949178586266273, + "dm_uncentered_vs_har_raw_pvalue": 3.2169922281610752e-09, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.21614914055752882, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.21614914048993392, "n_predictions": 1845, "n_rv_days": 2278 }, @@ -258,25 +258,25 @@ "seed": 7, "seq_len": 22, "decompose": false, - "har_mse_logrv_raw": 0.5706841531937791, - "har_mse_logrv_debiased": 0.3679851864421157, - "har_bias_oos": -0.45022101989096786, - "har_bias_sq_raw": 0.20269896675166327, - "har_variance_raw": 0.3679851864421157, - "har_bias_sq_debiased": 1.0026153804241113e-32, - "har_variance_debiased": 0.3679851864421157, - "dlinear_mse_logrv": 0.3550310821814059, - "dlinear_bias_sq": 2.0108051038759022e-06, - "dlinear_variance": 0.35502907137630213, - "mse_reduction_pct_vs_debiased_har": 3.520278733488501, - "dm_centered_stat": -1.5657678314136847, - "dm_centered_pvalue": 0.11757456059303473, + "har_mse_logrv_raw": 0.5706841531937793, + "har_mse_logrv_debiased": 0.3679851864421159, + "har_bias_oos": -0.4502210198909679, + "har_bias_sq_raw": 0.20269896675166332, + "har_variance_raw": 0.3679851864421159, + "har_bias_sq_debiased": 0.0, + "har_variance_debiased": 0.3679851864421159, + "dlinear_mse_logrv": 0.3550310836965655, + "dlinear_bias_sq": 2.010805036203793e-06, + "dlinear_variance": 0.3550290728915293, + "mse_reduction_pct_vs_debiased_har": 3.5202783217438296, + "dm_centered_stat": -1.5657676573123986, + "dm_centered_pvalue": 0.11757460136708375, "dm_centered_verdict": "INCONCLUSIVE", - "dm_centered_mean_loss_diff": -0.012956115065813675, - "dm_uncentered_vs_har_raw_stat": -5.921302353064981, - "dm_uncentered_vs_har_raw_pvalue": 3.8006469083029515e-09, + "dm_centered_mean_loss_diff": -0.012956113550586642, + "dm_uncentered_vs_har_raw_stat": -5.921302338184295, + "dm_uncentered_vs_har_raw_pvalue": 3.800647352392161e-09, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.21565307101237308, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.21565306949721383, "n_predictions": 1845, "n_rv_days": 2278 }, @@ -286,25 +286,25 @@ "seed": 42, "seq_len": 22, "decompose": false, - "har_mse_logrv_raw": 0.5706841531937791, - "har_mse_logrv_debiased": 0.3679851864421157, - "har_bias_oos": -0.45022101989096786, - "har_bias_sq_raw": 0.20269896675166327, - "har_variance_raw": 0.3679851864421157, - "har_bias_sq_debiased": 1.0026153804241113e-32, - "har_variance_debiased": 0.3679851864421157, - "dlinear_mse_logrv": 0.353231017866015, - "dlinear_bias_sq": 1.2116360650931165e-06, - "dlinear_variance": 0.35322980622994987, - "mse_reduction_pct_vs_debiased_har": 4.009446336346347, - "dm_centered_stat": -1.8015203320683721, - "dm_centered_pvalue": 0.0717841959895027, + "har_mse_logrv_raw": 0.5706841531937793, + "har_mse_logrv_debiased": 0.3679851864421159, + "har_bias_oos": -0.4502210198909679, + "har_bias_sq_raw": 0.20269896675166332, + "har_variance_raw": 0.3679851864421159, + "har_bias_sq_debiased": 0.0, + "har_variance_debiased": 0.3679851864421159, + "dlinear_mse_logrv": 0.3532310174356302, + "dlinear_bias_sq": 1.2116371197366201e-06, + "dlinear_variance": 0.35322980579851043, + "mse_reduction_pct_vs_debiased_har": 4.009446453303514, + "dm_centered_stat": -1.8015204023592464, + "dm_centered_pvalue": 0.07178418491634075, "dm_centered_verdict": "INCONCLUSIVE", - "dm_centered_mean_loss_diff": -0.014755380212165842, - "dm_uncentered_vs_har_raw_stat": -6.014850417141578, - "dm_uncentered_vs_har_raw_pvalue": 2.1659258830908357e-09, + "dm_centered_mean_loss_diff": -0.014755380643605435, + "dm_uncentered_vs_har_raw_stat": -6.014850424246173, + "dm_uncentered_vs_har_raw_pvalue": 2.1659256610462307e-09, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.21745313532776406, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.21745313575814906, "n_predictions": 1845, "n_rv_days": 2278 }, @@ -314,25 +314,25 @@ "seed": 99, "seq_len": 22, "decompose": false, - "har_mse_logrv_raw": 0.5706841531937791, - "har_mse_logrv_debiased": 0.3679851864421157, - "har_bias_oos": -0.45022101989096786, - "har_bias_sq_raw": 0.20269896675166327, - "har_variance_raw": 0.3679851864421157, - "har_bias_sq_debiased": 1.0026153804241113e-32, - "har_variance_debiased": 0.3679851864421157, - "dlinear_mse_logrv": 0.3547817507641396, - "dlinear_bias_sq": 4.446275826344222e-07, - "dlinear_variance": 0.35478130613655695, - "mse_reduction_pct_vs_debiased_har": 3.5880345634655084, - "dm_centered_stat": -1.6420369908879489, - "dm_centered_pvalue": 0.10075284985975763, + "har_mse_logrv_raw": 0.5706841531937793, + "har_mse_logrv_debiased": 0.3679851864421159, + "har_bias_oos": -0.4502210198909679, + "har_bias_sq_raw": 0.20269896675166332, + "har_variance_raw": 0.3679851864421159, + "har_bias_sq_debiased": 0.0, + "har_variance_debiased": 0.3679851864421159, + "dlinear_mse_logrv": 0.3547817510562591, + "dlinear_bias_sq": 4.446253648082128e-07, + "dlinear_variance": 0.3547813064308943, + "mse_reduction_pct_vs_debiased_har": 3.588034484082074, + "dm_centered_stat": -1.642036967772643, + "dm_centered_pvalue": 0.10075285465047168, "dm_centered_verdict": "INCONCLUSIVE", - "dm_centered_mean_loss_diff": -0.013203880305558816, - "dm_uncentered_vs_har_raw_stat": -5.963643000538417, - "dm_uncentered_vs_har_raw_pvalue": 2.9495581532756887e-09, + "dm_centered_mean_loss_diff": -0.013203880011221601, + "dm_uncentered_vs_har_raw_stat": -5.9636430462563395, + "dm_uncentered_vs_har_raw_pvalue": 2.949557265097269e-09, "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", - "dm_uncentered_vs_har_raw_mean_loss_diff": -0.21590240242963946, + "dm_uncentered_vs_har_raw_mean_loss_diff": -0.21590240213752013, "n_predictions": 1845, "n_rv_days": 2278 } @@ -341,12 +341,13 @@ { "horizon": 1, "n_seeds": 4, - "edge_reduction_pct": 10.096441451181168, - "edge_std_pct": 0.1493457405376121, - "dm_centered_p_median": 1.544945837927969e-09, - "var_ratio_dl_over_har_debiased": 0.8989944886967286, - "har_bias_share_of_mse_debiased": 0.05783823037415984, - "mean_dl_mse": 0.7518949222324479, + "edge_reduction_pct": 10.09644162193385, + "edge_std_pct": 0.14934555451809678, + "dm_centered_p_median": 1.5449479473517158e-09, + "dm_uncentered_vs_har_raw_p_median": 0.0, + "var_ratio_dl_over_har_debiased": 0.8989944870038112, + "har_bias_share_of_mse_debiased": 0.05783823037415989, + "mean_dl_mse": 0.7518949208043835, "mean_har_mse_raw": 0.8876766414630621, "mean_har_mse_debiased": 0.8363349953763609, "n_beaten": 0, @@ -357,14 +358,15 @@ { "horizon": 5, "n_seeds": 4, - "edge_reduction_pct": 7.286359135350475, - "edge_std_pct": 0.23433430101241232, - "dm_centered_p_median": 9.660139108547128e-05, - "var_ratio_dl_over_har_debiased": 0.9270558668235739, - "har_bias_share_of_mse_debiased": 0.22562666975990264, - "mean_dl_mse": 0.37475119502503085, - "mean_har_mse_raw": 0.5219741587277243, - "mean_har_mse_debiased": 0.404202867593261, + "edge_reduction_pct": 7.286359386338866, + "edge_std_pct": 0.23433409285739365, + "dm_centered_p_median": 9.660135403088965e-05, + "dm_uncentered_vs_har_raw_p_median": 1.4353762622931754e-10, + "var_ratio_dl_over_har_debiased": 0.9270558643170052, + "har_bias_share_of_mse_debiased": 0.2256266697599027, + "mean_dl_mse": 0.37475119401052875, + "mean_har_mse_raw": 0.5219741587277245, + "mean_har_mse_debiased": 0.4042028675932612, "n_beaten": 0, "n_beats": 4, "n_inconclusive": 0, @@ -373,21 +375,22 @@ { "horizon": 10, "n_seeds": 4, - "edge_reduction_pct": 3.6932113250435963, - "edge_std_pct": 0.18869683395762699, - "dm_centered_p_median": 0.1020968999120847, - "var_ratio_dl_over_har_debiased": 0.9630583518129214, - "har_bias_share_of_mse_debiased": 0.35518590382662285, - "mean_dl_mse": 0.35439471586195265, - "mean_har_mse_raw": 0.5706841531937791, - "mean_har_mse_debiased": 0.3679851864421157, + "edge_reduction_pct": 3.693211226908633, + "edge_std_pct": 0.18869698928571157, + "dm_centered_p_median": 0.10209690360452706, + "dm_uncentered_vs_har_raw_p_median": 3.083274746629172e-09, + "var_ratio_dl_over_har_debiased": 0.9630583527942871, + "har_bias_share_of_mse_debiased": 0.3551859038266228, + "mean_dl_mse": 0.35439471622307506, + "mean_har_mse_raw": 0.5706841531937793, + "mean_har_mse_debiased": 0.3679851864421159, "n_beaten": 0, "n_beats": 0, "n_inconclusive": 4, "verdict_sc": "INCONCLUSIVE" } ], - "elapsed_s": 1776.391629934311, + "elapsed_s": 1571.1744956970215, "config": { "horizons": [ 1, diff --git a/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/tests/test_btc_vol.py b/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/tests/test_btc_vol.py index b0ffb864ae..3e1959d45b 100644 --- a/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/tests/test_btc_vol.py +++ b/MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/tests/test_btc_vol.py @@ -26,6 +26,7 @@ ) from btc_vol import ( # noqa: E402 _dm_uncentered_mse, + aggregate_verdicts_recentered, ) @@ -224,4 +225,73 @@ def test_uncentered_sentinels(self): assert ( _dm_uncentered_mse(np.zeros(5), np.zeros(5), horizon=1)["dm_verdict"] == "INSUFFICIENT_DATA" - ) \ No newline at end of file + ) + + +def _agg_row(h: int, seed: int, dm_centered_p: float, dm_unc_p: float) -> dict: + """Minimal row accepted by `aggregate_verdicts_recentered` (#14390).""" + return { + "coin": "BTC", + "horizon": h, + "seed": seed, + "mse_reduction_pct_vs_debiased_har": 10.0, + "dlinear_variance": 0.8, + "har_variance_debiased": 1.0, + "har_bias_oos": 0.05, + "dlinear_mse_logrv": 0.75, + "har_mse_logrv_raw": 0.89, + "har_mse_logrv_debiased": 0.84, + "dm_centered_pvalue": dm_centered_p, + "dm_centered_verdict": "BEATS baseline", + "dm_uncentered_vs_har_raw_pvalue": dm_unc_p, + "dm_uncentered_vs_har_raw_verdict": "BEATS baseline", + } + + +class TestAggregateVerdictsRecentered: + """#14390: the uncentered sanity leg must live in `aggregated`, not only per row. + + The #14362 defect was exactly a silent absence -- the sanity leg existed + per row but nothing summarized or confronted it. These tests fail if the + aggregated field disappears again. + """ + + def test_uncentered_p_median_present_in_every_aggregate(self): + rows = [ + _agg_row(1, 0, 1e-9, 0.0), + _agg_row(1, 7, 2e-9, 0.0), + _agg_row(5, 0, 3e-9, 1.0e-10), + _agg_row(5, 7, 4e-9, 2.0e-10), + ] + agg = aggregate_verdicts_recentered(rows) + assert len(agg) == 2 + for entry in agg: + assert "dm_uncentered_vs_har_raw_p_median" in entry + + def test_uncentered_p_median_is_the_same_seeds_median(self): + # median([0.0, 0.0]) = 0.0 ; median([1e-10, 2e-10]) = 1.5e-10 + rows = [ + _agg_row(1, 0, 1e-9, 0.0), + _agg_row(1, 7, 2e-9, 0.0), + _agg_row(5, 0, 3e-9, 1.0e-10), + _agg_row(5, 7, 4e-9, 2.0e-10), + ] + agg = {e["horizon"]: e for e in aggregate_verdicts_recentered(rows)} + assert agg[1]["dm_uncentered_vs_har_raw_p_median"] == pytest.approx(0.0, abs=0.0) + assert agg[5]["dm_uncentered_vs_har_raw_p_median"] == pytest.approx(1.5e-10) + # Same seeds as the centered median: recomputed independently below. + assert agg[1]["dm_centered_p_median"] == pytest.approx(1.5e-9) + + def test_legs_cannot_silently_collapse_at_the_aggregate_surface(self): + # If the two legs ever return the same statistic again (#14362), the + # aggregated medians coincide -- the fixture keeps them distinct so a + # future collapse flips this assertion. + rows = [_agg_row(10, s, 1e-9 + s * 1e-12, 1e-8 + s * 1e-10) for s in (0, 7, 42, 99)] + agg = aggregate_verdicts_recentered(rows)[0] + assert agg["dm_centered_p_median"] != agg["dm_uncentered_vs_har_raw_p_median"] + + def test_field_position_is_next_to_centered_median(self): + rows = [_agg_row(1, s, 1e-9, 1e-7) for s in (0, 7)] + entry = aggregate_verdicts_recentered(rows)[0] + keys = list(entry) + assert keys.index("dm_uncentered_vs_har_raw_p_median") == keys.index("dm_centered_p_median") + 1