{"ok":true,"chain":"robinhood","question":"What share of signals at this conviction went 3x within 72h?","method":{"model":"isotonic regression (monotone, non-decreasing) of conviction -> P(3x within 72h), refitted on a rolling window of labeled signals","labeler":"every emitted signal is persisted before its outcome is known; 72h later it is labeled from recorded trade prints (chain 4663) or public pool OHLC (Solana): max multiple, hit_3x_72h, rugged in the first 5 minutes, rugged within 24h, graduation survival","unmeasurable":"a token that never trades again after the signal is a MISS, not missing data: outcomes are read from the complete trade record (the curve's own CurveBuy/CurveSell logs on 4663, pool OHLC on Solana), so no trade in 72h means the price never moved. A signal is 'insufficient_data' ONLY when that record is unavailable, the curve graduated and the pool its launchpad migrated it to cannot be identified (a curve that graduates inside the window is followed into that pool's swaps), or no usable entry price existed — the reason is published per signal in calibration.exclusion_reasons","brier":"out-of-sample: fitted on the oldest 70% of the window, scored on the newest 30% it never saw; brier_base is what the constant base rate scored on the same tail — the bar to beat","separation":"calibration.conviction_separation runs the pre-registered top-band vs bottom-band test POOLED and again WITHIN each entry-liquidity bucket, with 95% Wilson intervals. A separation that exists only in the pooled numbers is a pool-size effect, not conviction, and the verdict says so","sample":"every calibration bin carries distinct_tokens next to n, plus how many rows repeat a token already in the bin and how many are the same token in an adjacent 6h emission bucket: rows are not independent opportunities when one token can be emitted twice","window":"calibration.window_coverage publishes the first and last signal timestamp of the fitted window, the days it spans, and how much labeled history exists outside the row cap; calibration.label_backlog publishes how many signals have matured past their 72h window and are still unlabeled, which is what actually bounds the window when it is short"},"calibration":{"target_multiple":3.0,"horizon_hours":72,"min_samples":150,"n_samples":10000,"n_train":7000,"n_test":3000,"sufficient":true,"method":"isotonic-sklearn","base_rate":0.0299,"brier":0.024461,"brier_base":0.024734,"exclusion_rate":0.0006,"excluded_signals":47,"resolved_signals":79161,"exclusion_reasons":{"venue_moved":45,"unmeasurable_entry":2},"label_sources":{"chain_logs_v4_pool":{"n":3267,"hits":1578},"chain_logs":{"n":75847,"hits":1317}},"knots":[[0.0,0.013211],[5.3,0.013211],[5.4,0.017639],[7.0,0.017639],[7.1,0.020833],[7.2,0.023832],[10.1,0.023832],[10.2,0.025641],[10.9,0.025641],[11.0,0.025937],[12.1,0.025937],[12.2,0.026316],[12.7,0.026316],[12.8,0.026549],[13.1,0.026549],[13.2,0.030369],[14.7,0.030369],[14.8,0.045181],[19.0,0.045181],[19.1,0.04644],[20.5,0.04644],[20.6,0.052174],[22.6,0.052174],[22.7,0.058377],[76.0,0.058377]],"bins":[{"lo":0.01,"hi":0.02,"n":1218,"hits":16,"mean_predicted":0.01399,"observed":0.013136,"ci_low":0.008102,"ci_high":0.021232,"distinct_tokens":1140,"repeat_rows":78,"consecutive_bucket_rows":48,"max_rows_one_token":4,"distinct_hit_tokens":16,"observed_by_token":0.014035},{"lo":0.02,"hi":0.05,"n":906,"hits":18,"mean_predicted":0.027297,"observed":0.019868,"ci_low":0.012604,"ci_high":0.031186,"distinct_tokens":744,"repeat_rows":162,"consecutive_bucket_rows":130,"max_rows_one_token":5,"distinct_hit_tokens":15,"observed_by_token":0.020161},{"lo":0.05,"hi":0.1,"n":876,"hits":42,"mean_predicted":0.054883,"observed":0.047945,"ci_low":0.035664,"ci_high":0.064173,"distinct_tokens":546,"repeat_rows":330,"consecutive_bucket_rows":314,"max_rows_one_token":5,"distinct_hit_tokens":27,"observed_by_token":0.049451}],"type_precision":{"exit":{"n":250,"hits":4,"window_n":250,"min_samples":30,"max_ci_width":0.1,"ci_low":0.006239,"ci_high":0.04041,"ci_width":0.034171,"ci_ratio":6.476736,"sufficient":true,"precision":0.016,"display":"1.6% of 250"},"hot":{"n":34,"hits":5,"window_n":250,"min_samples":30,"max_ci_width":0.1,"ci_low":0.064494,"ci_high":0.301281,"ci_width":0.236786,"ci_ratio":4.671421,"sufficient":false,"precision":null,"display":"insufficient history (34/30)"},"fresh":{"n":250,"hits":2,"window_n":250,"min_samples":30,"max_ci_width":0.1,"ci_low":0.002197,"ci_high":0.028695,"ci_width":0.026498,"ci_ratio":13.062936,"sufficient":true,"precision":0.008,"display":"0.8% of 250"},"base":{"n":250,"hits":3,"window_n":250,"min_samples":30,"max_ci_width":0.1,"ci_low":0.004089,"ci_high":0.034681,"ci_width":0.030591,"ci_ratio":8.480819,"sufficient":true,"precision":0.012,"display":"1.2% of 250"}},"type_window_n":250,"type_min_samples":30,"liquidity_strata":{"buckets":{"0-5k":{"n":2158,"hits":18,"ci_low":0.005283,"ci_high":0.013147,"ci_width":0.007864,"sufficient":true,"rate_3x":0.008341},"unknown":{"n":6830,"hits":165,"ci_low":0.020775,"ci_high":0.028076,"ci_width":0.0073,"sufficient":false,"rate_3x":null},"5k-15k":{"n":1012,"hits":116,"ci_low":0.096438,"ci_high":0.135726,"ci_width":0.039289,"sufficient":true,"rate_3x":0.114625}},"bucket_bounds_usd":[5000.0,15000.0,50000.0,null],"published_buckets":2,"rate_spread_across_buckets":0.106284,"note":"3x rate stratified by entry liquidity; a shape that only exists across buckets is a pool-size effect, not conviction. Stratify before believing the conviction curve."},"conviction_kind_strata":{"kinds":{"trader-credibility":{"n":10000,"hits":299,"ci_low":0.026738,"ci_high":0.033423,"ci_width":0.006685,"sufficient":true,"rate_3x":0.0299}},"known_kinds":["trader-credibility","buy-pressure"],"published_kinds":1,"rate_spread_across_kinds":null,"note":"3x rate stratified by conviction_kind (trader-credibility vs buy-pressure); the two are different signals sharing one conviction column, so a single curve across both measures neither. Split before fitting."},"conviction_separation":{"top_min_score":50.0,"bottom_max_score":12.0,"min_band_samples":25,"pooled":{"n":10000,"top":{"n":87,"hits":3,"rate_3x":0.034483,"ci_low":0.011796,"ci_high":0.096541},"bottom":{"n":5874,"hits":100,"rate_3x":0.017024,"ci_low":0.014018,"ci_high":0.020662},"rest":{"n":9913,"hits":296,"rate_3x":0.02986,"ci_low":0.026687,"ci_high":0.033397},"share_top":0.0087,"ratio_top_over_bottom":2.0256,"judged":true,"separated":false},"buckets":{"0-5k":{"n":2158,"top":{"n":43,"hits":1,"rate_3x":0.023256,"ci_low":0.004117,"ci_high":0.12059},"bottom":{"n":813,"hits":5,"rate_3x":0.00615,"ci_low":0.00263,"ci_high":0.014315},"rest":{"n":2115,"hits":17,"rate_3x":0.008038,"ci_low":0.005025,"ci_high":0.012835},"share_top":0.019926,"ratio_top_over_bottom":3.7815,"judged":true,"separated":false},"unknown":{"n":6830,"top":{"n":32,"hits":2,"rate_3x":0.0625,"ci_low":0.017311,"ci_high":0.201471},"bottom":{"n":4853,"hits":80,"rate_3x":0.016485,"ci_low":0.013266,"ci_high":0.020468},"rest":{"n":6798,"hits":163,"rate_3x":0.023978,"ci_low":0.020601,"ci_high":0.027892},"share_top":0.004685,"ratio_top_over_bottom":3.7913,"judged":true,"separated":false},"5k-15k":{"n":1012,"top":{"n":12,"hits":0,"rate_3x":0.0,"ci_low":0.0,"ci_high":0.242494},"bottom":{"n":208,"hits":15,"rate_3x":0.072115,"ci_low":0.044187,"ci_high":0.115562},"rest":{"n":1000,"hits":116,"rate_3x":0.116,"ci_low":0.097606,"ci_high":0.137333},"share_top":0.011858,"ratio_top_over_bottom":null,"judged":false,"separated":null}},"bucket_bounds_usd":[5000.0,15000.0,50000.0,null],"judged_buckets":["0-5k"],"separated_buckets":[],"verdict":"no-separation","headline":"no separation, pooled or within any liquidity bucket","note":"top conviction band vs bottom band, pooled and then WITHIN each entry-liquidity bucket. Separation that survives only in the pooled numbers is pool size, not conviction; 'separated' means the two 95% Wilson intervals do not overlap."},"window_coverage":{"first_signal_at":1792044015.280363,"last_signal_at":1792548421.750208,"first_signal_iso":"2026-10-15T06:00:15.280363Z","last_signal_iso":"2026-10-21T02:07:01.750208Z","days":5.838,"rows":10000,"distinct_tokens":6207,"repeat_rows":3793,"consecutive_bucket_rows":3346,"rows_after_per_token_day_dedupe":7524,"dedupe_per_token_day_active":false,"labeled_available":79114,"labeled_available_days":36.891,"labeled_available_first_iso":"2026-09-14T04:43:20.173019Z","labeled_available_last_iso":"2026-10-21T02:07:01.750208Z","capped_by_window_n":true,"note":"the exact span of signals this fit was computed on. When labeled_available is larger than rows the row cap is binding; when it is equal, the window is every labeled signal there is and only the labeler can widen it.","window_n":10000,"window_days_cap":60},"label_backlog":{"due_unlabeled":0,"pending_total":5910,"oldest_due_at":null,"oldest_due_iso":null,"oldest_due_age_hours":null,"note":"signals whose 72h window has closed and that are still unlabeled. A large backlog means the fit window is bounded by the labeler, not by the row cap."},"fit_reference":{"n_samples":2500,"min_samples":150,"sufficient":true,"n_train":1750,"n_test":750,"base_rate":0.0248,"brier":0.018502,"brier_base":0.018395,"method":"isotonic-sklearn","knots":[[0.0,0.01089],[12.1,0.01089],[12.2,0.030769],[13.1,0.030769],[13.2,0.033233],[19.1,0.033233],[19.2,0.041958],[23.0,0.041958],[23.1,0.055276],[30.0,0.055276],[30.1,0.055556],[33.3,0.055556],[33.4,0.081633],[74.4,0.081633]],"bins":[{"lo":0.01,"hi":0.02,"n":457,"hits":3,"mean_predicted":0.012681,"observed":0.006565,"ci_low":0.002235,"ci_high":0.01912},{"lo":0.02,"hi":0.05,"n":122,"hits":3,"mean_predicted":0.038882,"observed":0.02459,"ci_low":0.008398,"ci_high":0.069808},{"lo":0.05,"hi":0.1,"n":128,"hits":7,"mean_predicted":0.067509,"observed":0.054688,"ci_low":0.02674,"ci_high":0.108585},{"lo":0.1,"hi":0.2,"n":43,"hits":1,"mean_predicted":0.102941,"observed":0.023256,"ci_low":0.004117,"ci_high":0.12059}],"window_n":2500,"note":"the same fit restricted to the newest 2500 labeled signals — the window the earlier published numbers were computed on, kept so they stay reproducible now the cap is higher"},"window_start":1792044015.280363,"window_end":1792548421.750208,"window_start_iso":"2026-10-15T06:00:15.280363Z","window_end_iso":"2026-10-21T02:07:01.750208Z","fitted_at":1792808233.4627829,"headline":"n=10000, Brier 0.0245, base 0.0247"},"regime":{"state":"risk-on","exposure_multiplier":1.0,"label":"regime: risk-on","median_24h_pct":0.0,"share_below_open":0.45,"tokens":40,"min_tokens":12,"suppressed":false,"thresholds":{"risk_off_median_pct":-8.0,"caution_median_pct":-3.0,"risk_off_share_below":0.75,"caution_share_below":0.6},"source":"tracked Solana pool universe, 24h price change"},"updated_at":1792809004.0314388}