{
 "windows": [
  10,
  20,
  30,
  60
 ],
 "naive": {
  "label": "Measured against the full-year outcome",
  "recall": {
   "10": {
    "mean": 47.0,
    "median": 48.4,
    "min": 20.0,
    "max": 73.3,
    "lift": 1.88
   },
   "20": {
    "mean": 51.3,
    "median": 50.0,
    "min": 23.3,
    "max": 76.7,
    "lift": 2.05
   },
   "30": {
    "mean": 55.3,
    "median": 55.0,
    "min": 40.0,
    "max": 80.0,
    "lift": 2.21
   },
   "60": {
    "mean": 60.7,
    "median": 63.4,
    "min": 40.0,
    "max": 73.3,
    "lift": 2.43
   }
  },
  "precision": {
   "10": {
    "mean": 14.6,
    "median": 14.8
   },
   "20": {
    "mean": 15.8,
    "median": 16.2
   },
   "30": {
    "mean": 17.1,
    "median": 17.2
   },
   "60": {
    "mean": 18.7,
    "median": 19.8
   }
  },
  "per_fy": [
   {
    "fy": "FY17",
    "n": 316,
    "top_cut": 109.2,
    "recall_10": 50.0,
    "prec_10": 19.0,
    "n_early_10": 79,
    "recall_20": 43.3,
    "prec_20": 16.5,
    "n_early_20": 79,
    "recall_30": 43.3,
    "prec_30": 16.5,
    "n_early_30": 79,
    "recall_60": 53.3,
    "prec_60": 20.3,
    "n_early_60": 79
   },
   {
    "fy": "FY18",
    "n": 328,
    "top_cut": 73.9,
    "recall_10": 50.0,
    "prec_10": 18.3,
    "n_early_10": 82,
    "recall_20": 43.3,
    "prec_20": 15.9,
    "n_early_20": 82,
    "recall_30": 53.3,
    "prec_30": 19.5,
    "n_early_30": 82,
    "recall_60": 56.7,
    "prec_60": 20.7,
    "n_early_60": 82
   },
   {
    "fy": "FY19",
    "n": 351,
    "top_cut": 37.2,
    "recall_10": 30.0,
    "prec_10": 10.2,
    "n_early_10": 88,
    "recall_20": 33.3,
    "prec_20": 11.4,
    "n_early_20": 88,
    "recall_30": 40.0,
    "prec_30": 13.6,
    "n_early_30": 88,
    "recall_60": 50.0,
    "prec_60": 17.0,
    "n_early_60": 88
   },
   {
    "fy": "FY20",
    "n": 362,
    "top_cut": 16.6,
    "recall_10": 20.0,
    "prec_10": 6.6,
    "n_early_10": 91,
    "recall_20": 23.3,
    "prec_20": 7.7,
    "n_early_20": 91,
    "recall_30": 40.0,
    "prec_30": 13.2,
    "n_early_30": 91,
    "recall_60": 40.0,
    "prec_60": 13.2,
    "n_early_60": 91
   },
   {
    "fy": "FY21",
    "n": 378,
    "top_cut": 324.9,
    "recall_10": 63.3,
    "prec_10": 20.0,
    "n_early_10": 95,
    "recall_20": 63.3,
    "prec_20": 20.0,
    "n_early_20": 95,
    "recall_30": 56.7,
    "prec_30": 17.9,
    "n_early_30": 95,
    "recall_60": 66.7,
    "prec_60": 21.1,
    "n_early_60": 95
   },
   {
    "fy": "FY22",
    "n": 391,
    "top_cut": 147.6,
    "recall_10": 46.7,
    "prec_10": 14.3,
    "n_early_10": 98,
    "recall_20": 70.0,
    "prec_20": 21.4,
    "n_early_20": 98,
    "recall_30": 80.0,
    "prec_30": 24.5,
    "n_early_30": 98,
    "recall_60": 73.3,
    "prec_60": 22.4,
    "n_early_60": 98
   },
   {
    "fy": "FY23",
    "n": 415,
    "top_cut": 75.3,
    "recall_10": 73.3,
    "prec_10": 21.2,
    "n_early_10": 104,
    "recall_20": 60.0,
    "prec_20": 17.3,
    "n_early_20": 104,
    "recall_30": 66.7,
    "prec_30": 19.2,
    "n_early_30": 104,
    "recall_60": 66.7,
    "prec_60": 19.2,
    "n_early_60": 104
   },
   {
    "fy": "FY24",
    "n": 429,
    "top_cut": 246.3,
    "recall_10": 40.0,
    "prec_10": 11.1,
    "n_early_10": 108,
    "recall_20": 76.7,
    "prec_20": 21.3,
    "n_early_20": 108,
    "recall_30": 66.7,
    "prec_30": 18.5,
    "n_early_30": 108,
    "recall_60": 73.3,
    "prec_60": 20.4,
    "n_early_60": 108
   },
   {
    "fy": "FY25",
    "n": 447,
    "top_cut": 76.2,
    "recall_10": 56.7,
    "prec_10": 15.2,
    "n_early_10": 112,
    "recall_20": 56.7,
    "prec_20": 15.2,
    "n_early_20": 112,
    "recall_30": 50.0,
    "prec_30": 13.4,
    "n_early_30": 112,
    "recall_60": 66.7,
    "prec_60": 17.9,
    "n_early_60": 112
   },
   {
    "fy": "FY26",
    "n": 473,
    "top_cut": 49.2,
    "recall_10": 40.0,
    "prec_10": 10.1,
    "n_early_10": 119,
    "recall_20": 43.3,
    "prec_20": 10.9,
    "n_early_20": 119,
    "recall_30": 56.7,
    "prec_30": 14.3,
    "n_early_30": 119,
    "recall_60": 60.0,
    "prec_60": 15.1,
    "n_early_60": 119
   }
  ]
 },
 "tested": {
  "label": "Measured against a non-overlapping forward target",
  "recall": {
   "10": 33.0,
   "20": 33.7,
   "30": 34.3,
   "60": 32.0
  },
  "precision": {
   "10": 10.3,
   "20": 10.5,
   "30": 10.7,
   "60": 10.0
  },
  "per_fy": [
   {
    "fy": "FY17",
    "n": 316,
    "precRecall_10": 33.3,
    "precPrec_10": 12.7,
    "precRecall_20": 33.3,
    "precPrec_20": 12.7,
    "precRecall_30": 30.0,
    "precPrec_30": 11.4,
    "precRecall_60": 26.7,
    "precPrec_60": 10.1
   },
   {
    "fy": "FY18",
    "n": 328,
    "precRecall_10": 40.0,
    "precPrec_10": 14.6,
    "precRecall_20": 33.3,
    "precPrec_20": 12.2,
    "precRecall_30": 36.7,
    "precPrec_30": 13.4,
    "precRecall_60": 36.7,
    "precPrec_60": 13.4
   },
   {
    "fy": "FY19",
    "n": 351,
    "precRecall_10": 16.7,
    "precPrec_10": 5.7,
    "precRecall_20": 20.0,
    "precPrec_20": 6.8,
    "precRecall_30": 23.3,
    "precPrec_30": 8.0,
    "precRecall_60": 20.0,
    "precPrec_60": 6.8
   },
   {
    "fy": "FY20",
    "n": 362,
    "precRecall_10": 13.3,
    "precPrec_10": 4.4,
    "precRecall_20": 13.3,
    "precPrec_20": 4.4,
    "precRecall_30": 23.3,
    "precPrec_30": 7.7,
    "precRecall_60": 13.3,
    "precPrec_60": 4.4
   },
   {
    "fy": "FY21",
    "n": 378,
    "precRecall_10": 50.0,
    "precPrec_10": 15.8,
    "precRecall_20": 46.7,
    "precPrec_20": 14.7,
    "precRecall_30": 43.3,
    "precPrec_30": 13.7,
    "precRecall_60": 46.7,
    "precPrec_60": 14.7
   },
   {
    "fy": "FY22",
    "n": 391,
    "precRecall_10": 46.7,
    "precPrec_10": 14.3,
    "precRecall_20": 56.7,
    "precPrec_20": 17.3,
    "precRecall_30": 63.3,
    "precPrec_30": 19.4,
    "precRecall_60": 56.7,
    "precPrec_60": 17.3
   },
   {
    "fy": "FY23",
    "n": 415,
    "precRecall_10": 46.7,
    "precPrec_10": 13.5,
    "precRecall_20": 26.7,
    "precPrec_20": 7.7,
    "precRecall_30": 33.3,
    "precPrec_30": 9.6,
    "precRecall_60": 30.0,
    "precPrec_60": 8.7
   },
   {
    "fy": "FY24",
    "n": 429,
    "precRecall_10": 26.7,
    "precPrec_10": 7.4,
    "precRecall_20": 56.7,
    "precPrec_20": 15.7,
    "precRecall_30": 46.7,
    "precPrec_30": 13.0,
    "precRecall_60": 50.0,
    "precPrec_60": 13.9
   },
   {
    "fy": "FY25",
    "n": 447,
    "precRecall_10": 40.0,
    "precPrec_10": 10.7,
    "precRecall_20": 33.3,
    "precPrec_20": 8.9,
    "precRecall_30": 26.7,
    "precPrec_30": 7.1,
    "precRecall_60": 20.0,
    "precPrec_60": 5.4
   },
   {
    "fy": "FY26",
    "n": 473,
    "precRecall_10": 16.7,
    "precPrec_10": 4.2,
    "precRecall_20": 16.7,
    "precPrec_20": 4.2,
    "precRecall_30": 16.7,
    "precPrec_30": 4.2,
    "precRecall_60": 20.0,
    "precPrec_60": 5.0
   }
  ],
  "recall_lift_10": 1.32,
  "precision_lift_10": 1.3,
  "recall_lift_20": 1.35,
  "precision_lift_20": 1.33,
  "recall_lift_30": 1.37,
  "precision_lift_30": 1.35,
  "recall_lift_60": 1.28,
  "precision_lift_60": 1.27
 },
 "corr": {
  "A_d10": 0.221,
  "A_d20": 0.301,
  "A_d30": 0.334,
  "A_d60": 0.49,
  "B_d10": 0.044,
  "B_d20": 0.069,
  "B_d30": 0.054,
  "B_d60": 0.088
 },
 "corr_per_fy": {
  "FY17": {
   "A_d10": 0.26,
   "B_d10": 0.071,
   "A_d20": 0.318,
   "B_d20": 0.089,
   "A_d30": 0.36,
   "B_d30": 0.08,
   "A_d60": 0.489,
   "B_d60": 0.031
  },
  "FY18": {
   "A_d10": 0.261,
   "B_d10": 0.139,
   "A_d20": 0.22,
   "B_d20": 0.059,
   "A_d30": 0.249,
   "B_d30": 0.071,
   "A_d60": 0.44,
   "B_d60": 0.175
  },
  "FY19": {
   "A_d10": 0.093,
   "B_d10": -0.1,
   "A_d20": 0.214,
   "B_d20": -0.056,
   "A_d30": 0.3,
   "B_d30": -0.053,
   "A_d60": 0.512,
   "B_d60": 0.022
  },
  "FY20": {
   "A_d10": 0.047,
   "B_d10": -0.032,
   "A_d20": 0.246,
   "B_d20": 0.126,
   "A_d30": 0.319,
   "B_d30": 0.163,
   "A_d60": 0.453,
   "B_d60": 0.213
  },
  "FY21": {
   "A_d10": 0.358,
   "B_d10": 0.138,
   "A_d20": 0.275,
   "B_d20": 0.046,
   "A_d30": 0.263,
   "B_d30": -0.006,
   "A_d60": 0.355,
   "B_d60": 0.03
  },
  "FY22": {
   "A_d10": 0.124,
   "B_d10": -0.048,
   "A_d20": 0.301,
   "B_d20": 0.069,
   "A_d30": 0.365,
   "B_d30": 0.059,
   "A_d60": 0.628,
   "B_d60": 0.179
  },
  "FY23": {
   "A_d10": 0.39,
   "B_d10": 0.151,
   "A_d20": 0.371,
   "B_d20": 0.076,
   "A_d30": 0.406,
   "B_d30": 0.057,
   "A_d60": 0.509,
   "B_d60": 0.01
  },
  "FY24": {
   "A_d10": 0.282,
   "B_d10": 0.15,
   "A_d20": 0.466,
   "B_d20": 0.25,
   "A_d30": 0.473,
   "B_d30": 0.232,
   "A_d60": 0.595,
   "B_d60": 0.276
  },
  "FY25": {
   "A_d10": 0.295,
   "B_d10": 0.08,
   "A_d20": 0.337,
   "B_d20": 0.028,
   "A_d30": 0.316,
   "B_d30": -0.036,
   "A_d60": 0.47,
   "B_d60": -0.072
  },
  "FY26": {
   "A_d10": 0.105,
   "B_d10": -0.107,
   "A_d20": 0.26,
   "B_d20": -0.001,
   "A_d30": 0.286,
   "B_d30": -0.026,
   "A_d60": 0.45,
   "B_d60": 0.013
  }
 },
 "baselines": {
  "recall": 25.0,
  "precision": 7.9,
  "precision_note": "30 / universe size (~380 names)"
 },
 "traits": {
  "vol_surge": {
   "winner": 1.4053,
   "rest": 1.1117,
   "diff": 0.2935
  },
  "gap_ups": {
   "winner": 2.42,
   "rest": 1.4699,
   "diff": 0.9501
  },
  "max_dd_30": {
   "winner": -0.1098,
   "rest": -0.1125,
   "diff": 0.0027
  },
  "down_days_30": {
   "winner": 13.9433,
   "rest": 14.8886,
   "diff": -0.9452
  },
  "exc_30": {
   "winner": 0.143,
   "rest": 0.0161,
   "diff": 0.127
  },
  "broke_52w_high_pct": {
   "winner": 34.0,
   "rest": 26.2031,
   "diff": 7.7969
  }
 },
 "overlap_explanation": "The naive figure counts a stock as an 'early winner' if it led in the first 30 days, then asks how many of the eventual top 30 did so. But the eventual top 30 is measured over the FULL year, which CONTAINS those first 30 days - so part of the overlap is a tautology, not a prediction.",
 "headline_comparison": {
  "naive_recall_d30": 55.3,
  "tested_recall_d30": 34.3,
  "baseline_recall": 25.0,
  "naive_lift": 2.21,
  "tested_lift": 1.37,
  "clean_forward_corr_d30": 0.054
 }
}