{
 "_meta": {
  "generated": "2026-09-07T14:14:17.605766Z",
  "test": "SAIL-134 / Test 1.3 -- junk-vs-stripe crop classifier",
  "jira": "SAIL-134",
  "productQuestion": "Can a small yes/no classifier reliably tell a real stripe from a junk line among SAM3-solo's candidates -- enough to bolt on as a recall-boosting filter without flooding the customer with junk?",
  "datasetSource": "server/inference/runs/hopeval/D-sam3-solo/*.json (test 0.5's candidate pool), labelled by reproducing hop_eval_score.mjs's exact per-stripe rule (greedy nearest-human match, 3% diag cap, on originalPoints) -- reconstruction verified exact: 777 real / 1039 junk vs D-sam3-solo-score.json's pairedStripes/unmatchedHop1",
  "frozenHoldout": "test-holdout-ids-canonical.json (332, frozen 2026-08-25) -- untouched as holdout concept; this test's 5-fold GroupKFold split is INSIDE the 332 (photo-level groups, never a photo in both train and test within a fold), not a re-use of the 332 as a train/test boundary against some larger training pool",
  "splitMethod": "GroupKFold(n_splits=5), grouped by photoId -- verified zero photo overlap between train/test in every fold",
  "featureSet": [
   "score",
   "lenFrac",
   "nPoints",
   "meanYFrac",
   "bboxWFrac",
   "bboxHFrac",
   "aspectWH",
   "residualFrac",
   "roughness",
   "positionRank",
   "poolSizePhoto",
   "nearestOtherDyFrac"
  ],
  "modelsCompared": [
   "logistic_regression",
   "gradient_boosting"
  ],
  "modelUsedForOperatingPoint": "gradient_boosting",
  "leakGuard": "Operating-point admit decisions use OOF (out-of-fold) probabilities for every one of the 1816 labelled rows -- never the probability from a model that trained on that exact row. The final model (trained on all 1816) is used ONLY to score the 1038 non-refined/unlabelled candidates, which were never in any training fold.",
  "photosExcluded": {
   "count": 2,
   "ids": [
    "6a317f17f75617ef2dfe7c03",
    "2fa51ba9-e843-4ffb-ba6a-02fca2002a95"
   ],
   "reason": "D-sam3-solo produced zero candidate stripes for these two frozen-332 photos (envelope ok:true, stripes:[]) -- legitimately empty pool, not a data error. 330 of 332 holdout photos carry candidates."
  }
 },
 "dataset": {
  "rows": 1816,
  "real": 777,
  "junk": 1039,
  "photos": 330
 },
 "rocAuc": {
  "logisticRegression": 0.8348,
  "gradientBoosting": 0.8947,
  "used": 0.8947
 },
 "operatingPoint": {
  "criterion": "threshold nearest to 90% real-stripes-kept on OOF predictions",
  "threshold": 0.2871,
  "realKept": {
   "rate": 0.8996,
   "count": 699,
   "of": 777
  },
  "junkAdmitted": {
   "rate": 0.3176,
   "count": 330,
   "of": 1039
  },
  "youdenReference": {
   "threshold": 0.4156,
   "realKeptRate": 0.825,
   "junkAdmittedRate": 0.1983
  }
 },
 "productTranslation": {
  "gate0MissedStripesTotal": 58,
  "gate0RecoverableInPool": 29,
  "gate0TrulyAbsent": 29,
  "recoverableCeilingFraction": 0.5,
  "classifierRecoversOfRecoverable": 19,
  "classifierMissesOfRecoverable": 10,
  "achievedFractionOfAllMisses": 0.3276,
  "achievedFractionOfCeiling": 0.6552,
  "coveringCandidateProbaSource": {
   "oof": 27,
   "final_model_unlabelled": 2,
   "none": 0
  },
  "junkAdmittedOfLabelledJunk": {
   "count": 330,
   "of": 1039
  },
  "junkPerPhotoAtOperatingPoint": 1.0,
  "photosInPool": 330,
  "caveat": "junk-per-photo is computed only over the 1039 labelled-junk rows (stripes with originalPoints+refined), using OOF (leak-free) probabilities; the 1038 non-refined SAM3-solo lines have no ground-truth label in this test and are NOT included in the junk-cost denominator -- true full-pool junk cost is likely higher than this number if non-refined lines skew junkier. Also: some of the 777 'real' rows are near-duplicate matches to the same human stripe (hop_eval's match is greedy, not exclusive) -- 'real' here means 'geometrically on a human stripe', not 'one unique real line per stripe'."
 },
 "recoveredMissDetail": [
  {
   "id": "2b552f75-e19b-414f-9e1e-cce6ffd0f35e",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 3.76,
   "classifierProba": 0.9537,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "2fc51b49-44ea-48a8-b85e-d326e77f2f15",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 3,
   "coveringDistPx": 12.3,
   "classifierProba": 0.7799,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "4e94f98a-2af5-4e28-a15b-42b120ea8ee3",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 3.67,
   "classifierProba": 0.3736,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "6914d3ff106b899d3b58b153",
   "bucket": "top",
   "humanStripeIndex": 0,
   "coveringCandidateIdx": 5,
   "coveringDistPx": 30.33,
   "classifierProba": 0.5269,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "6983c7303b15d0ca7a335979",
   "bucket": "top",
   "humanStripeIndex": 0,
   "coveringCandidateIdx": 7,
   "coveringDistPx": 36.87,
   "classifierProba": 0.1445,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "6983c7303b15d0ca7a335979",
   "bucket": "middle",
   "humanStripeIndex": 1,
   "coveringCandidateIdx": 7,
   "coveringDistPx": 54.02,
   "classifierProba": 0.1445,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "6992cf2fc35b7654e6c33463",
   "bucket": "top",
   "humanStripeIndex": 0,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 30.26,
   "classifierProba": 0.2925,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "6992ff4da71df4784a49c57d",
   "bucket": "bottom",
   "humanStripeIndex": 3,
   "coveringCandidateIdx": 10,
   "coveringDistPx": 57.89,
   "classifierProba": 0.0251,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "6993a0abc95b493d2c1d6d2f",
   "bucket": "top",
   "humanStripeIndex": 0,
   "coveringCandidateIdx": 8,
   "coveringDistPx": 28.22,
   "classifierProba": 0.0878,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "6993a0abc95b493d2c1d6d2f",
   "bucket": "middle",
   "humanStripeIndex": 1,
   "coveringCandidateIdx": 14,
   "coveringDistPx": 47.77,
   "classifierProba": 0.0396,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "6998e69e7e37b6370385b8ba",
   "bucket": "top",
   "humanStripeIndex": 0,
   "coveringCandidateIdx": 0,
   "coveringDistPx": 1.1,
   "classifierProba": 0.834,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "69aeb1c431726f412729f849",
   "bucket": "top",
   "humanStripeIndex": 0,
   "coveringCandidateIdx": 0,
   "coveringDistPx": 0.83,
   "classifierProba": 0.4723,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "69b52c09603c3c530c0920bc",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 5,
   "coveringDistPx": 17.11,
   "classifierProba": 0.8706,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "69b826db7a6aec943ec7d696",
   "bucket": "middle",
   "humanStripeIndex": 1,
   "coveringCandidateIdx": 3,
   "coveringDistPx": 9.43,
   "classifierProba": 0.6035,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "69babfb8630c918d087bf57c",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 2.36,
   "classifierProba": 0.9021,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "69cad463716e6cc995056b71",
   "bucket": "top",
   "humanStripeIndex": 0,
   "coveringCandidateIdx": 0,
   "coveringDistPx": 21.5,
   "classifierProba": 0.1799,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "69d8c28fb4793b96e2e1f51f",
   "bucket": "top",
   "humanStripeIndex": 0,
   "coveringCandidateIdx": 1,
   "coveringDistPx": 16.43,
   "classifierProba": 0.8511,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "69e6c64b5e24eefa6fe383d3",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 3.51,
   "classifierProba": 0.9166,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "69f09238270a835330087b8c",
   "bucket": "middle",
   "humanStripeIndex": 1,
   "coveringCandidateIdx": 4,
   "coveringDistPx": 59.49,
   "classifierProba": 0.0619,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "69f09238270a835330087b8c",
   "bucket": "middle",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 6,
   "coveringDistPx": 41.62,
   "classifierProba": 0.0999,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "69f8c879ea23d5ac8b291712",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 21.28,
   "classifierProba": 0.9508,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "6a414d8fc425fdfed0e5f5a1",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 3,
   "coveringDistPx": 7.15,
   "classifierProba": 0.8581,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "788356aa-7d0d-4523-a062-b6727b213788",
   "bucket": "middle",
   "humanStripeIndex": 1,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 42.01,
   "classifierProba": 0.467,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "8d273919-7221-4ffa-954a-de00f8ad6672",
   "bucket": "bottom",
   "humanStripeIndex": 3,
   "coveringCandidateIdx": 6,
   "coveringDistPx": 2.54,
   "classifierProba": 0.05,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "c28257a4-0807-49c5-88dd-66800bfe00b9",
   "bucket": "bottom",
   "humanStripeIndex": 3,
   "coveringCandidateIdx": 10,
   "coveringDistPx": 56.6,
   "classifierProba": 0.0098,
   "admitted": false,
   "probaSource": "oof"
  },
  {
   "id": "c721b1b7-5d73-4a04-b496-c6a6c9025c4e",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 4.95,
   "classifierProba": 0.597,
   "admitted": true,
   "probaSource": "final_model_unlabelled"
  },
  {
   "id": "e27c97c2-2dfd-4ef3-be71-3be10a9a19ec",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 4.95,
   "classifierProba": 0.597,
   "admitted": true,
   "probaSource": "final_model_unlabelled"
  },
  {
   "id": "f1753171-8e94-4ad0-9d43-baeabaa8aa29",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 4.55,
   "classifierProba": 0.9372,
   "admitted": true,
   "probaSource": "oof"
  },
  {
   "id": "f8a02b2a-6548-474d-9515-e64a66f9dc1d",
   "bucket": "bottom",
   "humanStripeIndex": 2,
   "coveringCandidateIdx": 2,
   "coveringDistPx": 2.29,
   "classifierProba": 0.4935,
   "admitted": true,
   "probaSource": "oof"
  }
 ]
}