{
  "date": "2026-04-16",
  "generated_at": "2026-04-16T06:44:03.986572",
  "artifact_type": "strikeout_edges",
  "market_type": "pitcher_strikeouts",
  "model_version": "strikeout_edges_v1_overlay",
  "projection_model_version": "strikeout_props_v1_nb_overlay",
  "projection_date": "2026-04-16",
  "sportsbook_input_summary": {
    "input_type": "canonical_processed_sportsbook_input",
    "source_count": 1,
    "row_count": 14,
    "matched_count": 8,
    "unmatched_count": 6
  },
  "assumptions": {
    "methodology": "Sportsbook strikeout lines are matched against the saved Mithrandir strikeout props artifact. Model over, under, and push probabilities are derived from the existing matchup-adjusted strikeout distribution. Raw implied probabilities are calculated directly from American odds, and optional no-vig implied probabilities are computed by renormalizing both sides when both odds are present.",
    "distribution": {
      "name": "negative_binomial_style",
      "alpha": 0.0619,
      "whole_line_handling": "Over = P(K >= line + 1), Under = P(K <= line - 1), Push = P(K = line).",
      "half_line_handling": "Over = P(K >= ceil(line)), Under = 1 - Over, Push = 0."
    },
    "recommendation_thresholds": {
      "no_play_edge_threshold": 0.015,
      "lean_edge_threshold": 0.03,
      "strong_edge_threshold": 0.05
    }
  },
  "summary": {
    "raw_row_count": 8,
    "grouped_pitcher_count": 8,
    "sportsbook_count": 1
  },
  "edge_count": 8,
  "edges": [
    {
      "pitcher_name": "Landen Roupp",
      "pitcher_id": 694738,
      "team_abbr": "SF",
      "opponent_abbr": "CIN",
      "sportsbook": "FanDuel",
      "source_provider": "fanduel",
      "timestamp": null,
      "line": 5.5,
      "line_type": "half",
      "over_odds": -106,
      "under_odds": -125,
      "expected_strikeouts": 4.51,
      "baseline_projected_strikeouts": 4.25,
      "adjusted_projected_strikeouts": 4.51,
      "skill_score": 29.1,
      "opportunity_score": 34.9,
      "opponent_weakness_score": 41.2,
      "support_tier": "STRONG_OPPONENT",
      "support_label": "Strong Opponent",
      "support_note": "Opponent strikeout pressure is the clearest support input.",
      "suppression_score": 79.7,
      "suppression_tier": "HEAVY_SUPPRESSION",
      "suppression_label": "Heavy Suppression",
      "suppression_note": "Leash or workload context materially weakens the strikeout conversion path.",
      "interaction_tier": "SUPPRESSED_ALIGNMENT",
      "interaction_label": "Suppressed Alignment",
      "interaction_note": "Runway drag or weak alignment materially softens the strikeout path.",
      "trust_modifier": "SUPPRESSED",
      "trust_label": "Suppressed",
      "trust_note": "Leash or alignment drag is materially weakening the strikeout trust case.",
      "model_over_probability": 0.3075,
      "model_under_probability": 0.6925,
      "model_push_probability": 0.0,
      "implied_over_probability_raw": 0.5146,
      "implied_under_probability_raw": 0.5556,
      "implied_over_probability_novig": 0.4808,
      "implied_under_probability_novig": 0.5192,
      "edge_over": -0.2071,
      "edge_under": 0.1369,
      "recommended_side": "Under",
      "recommended_edge": 0.1369,
      "play_tier": "Strong",
      "no_play_reason": null,
      "adjustment_delta": 0.26,
      "adjustment_multiplier": 1.072,
      "aggregate_matchup_score": 47.1,
      "lineup_confidence": "projected",
      "pitch_mix_sample_size": 10559.0,
      "lineup_expected_strikeouts": 5.16,
      "environment_summary": "hitter-friendly",
      "temperature_f": 81.0,
      "wind_speed_mph": 14.4,
      "wind_direction": "out",
      "starter_confidence": "probable",
      "projection_model_version": "negative_binomial_style",
      "source_file": "canonical_all_providers.json"
    },
    {
      "pitcher_name": "Kris Bubic",
      "pitcher_id": 663460,
      "team_abbr": "KC",
      "opponent_abbr": "DET",
      "sportsbook": "FanDuel",
      "source_provider": "fanduel",
      "timestamp": null,
      "line": 5.5,
      "line_type": "half",
      "over_odds": -138,
      "under_odds": 104,
      "expected_strikeouts": 5.09,
      "baseline_projected_strikeouts": 4.62,
      "adjusted_projected_strikeouts": 5.09,
      "skill_score": 51.7,
      "opportunity_score": 38.8,
      "opponent_weakness_score": 47.0,
      "support_tier": "DUAL_SUPPORT",
      "support_label": "Dual Support",
      "support_note": "Two of the three strikeout support layers align cleanly.",
      "suppression_score": 80.8,
      "suppression_tier": "HEAVY_SUPPRESSION",
      "suppression_label": "Heavy Suppression",
      "suppression_note": "Leash or workload context materially weakens the strikeout conversion path.",
      "interaction_tier": "SUPPRESSED_ALIGNMENT",
      "interaction_label": "Suppressed Alignment",
      "interaction_note": "Runway drag or weak alignment materially softens the strikeout path.",
      "trust_modifier": "SUPPRESSED",
      "trust_label": "Suppressed",
      "trust_note": "Leash or alignment drag is materially weakening the strikeout trust case.",
      "model_over_probability": 0.3967,
      "model_under_probability": 0.6033,
      "model_push_probability": 0.0,
      "implied_over_probability_raw": 0.5798,
      "implied_under_probability_raw": 0.4902,
      "implied_over_probability_novig": 0.5419,
      "implied_under_probability_novig": 0.4581,
      "edge_over": -0.1831,
      "edge_under": 0.1131,
      "recommended_side": "Under",
      "recommended_edge": 0.1131,
      "play_tier": "Strong",
      "no_play_reason": null,
      "adjustment_delta": 0.47,
      "adjustment_multiplier": 1.103,
      "aggregate_matchup_score": 59.8,
      "lineup_confidence": "projected",
      "pitch_mix_sample_size": 9767.0,
      "lineup_expected_strikeouts": 5.86,
      "environment_summary": "neutral",
      "temperature_f": 63.1,
      "wind_speed_mph": 9.9,
      "wind_direction": "out",
      "starter_confidence": "probable",
      "projection_model_version": "negative_binomial_style",
      "source_file": "canonical_all_providers.json"
    },
    {
      "pitcher_name": "Keider Montero",
      "pitcher_id": 672456,
      "team_abbr": "DET",
      "opponent_abbr": "KC",
      "sportsbook": "FanDuel",
      "source_provider": "fanduel",
      "timestamp": null,
      "line": 3.5,
      "line_type": "half",
      "over_odds": -136,
      "under_odds": 102,
      "expected_strikeouts": 3.46,
      "baseline_projected_strikeouts": 3.48,
      "adjusted_projected_strikeouts": 3.46,
      "skill_score": 10.0,
      "opportunity_score": 15.0,
      "opponent_weakness_score": 30.1,
      "support_tier": "WEAK_SUPPORT",
      "support_label": "Weak Support",
      "support_note": "The strikeout support stack is lighter across skill, workload, and opponent context.",
      "suppression_score": 97.0,
      "suppression_tier": "HEAVY_SUPPRESSION",
      "suppression_label": "Heavy Suppression",
      "suppression_note": "Leash or workload context materially weakens the strikeout conversion path.",
      "interaction_tier": "SUPPRESSED_ALIGNMENT",
      "interaction_label": "Suppressed Alignment",
      "interaction_note": "Runway drag or weak alignment materially softens the strikeout path.",
      "trust_modifier": "SUPPRESSED",
      "trust_label": "Suppressed",
      "trust_note": "Leash or alignment drag is materially weakening the strikeout trust case.",
      "model_over_probability": 0.4448,
      "model_under_probability": 0.5552,
      "model_push_probability": 0.0,
      "implied_over_probability_raw": 0.5763,
      "implied_under_probability_raw": 0.495,
      "implied_over_probability_novig": 0.5379,
      "implied_under_probability_novig": 0.4621,
      "edge_over": -0.1315,
      "edge_under": 0.0602,
      "recommended_side": "Under",
      "recommended_edge": 0.0602,
      "play_tier": "Strong",
      "no_play_reason": null,
      "adjustment_delta": -0.02,
      "adjustment_multiplier": 0.995,
      "aggregate_matchup_score": 29.1,
      "lineup_confidence": "projected",
      "pitch_mix_sample_size": 9948.0,
      "lineup_expected_strikeouts": 3.6,
      "environment_summary": "neutral",
      "temperature_f": 63.1,
      "wind_speed_mph": 9.9,
      "wind_direction": "out",
      "starter_confidence": "probable",
      "projection_model_version": "negative_binomial_style",
      "source_file": "canonical_all_providers.json"
    },
    {
      "pitcher_name": "Shane Baz",
      "pitcher_id": 669358,
      "team_abbr": "BAL",
      "opponent_abbr": "CLE",
      "sportsbook": "FanDuel",
      "source_provider": "fanduel",
      "timestamp": null,
      "line": 5.5,
      "line_type": "half",
      "over_odds": 124,
      "under_odds": -166,
      "expected_strikeouts": 4.6,
      "baseline_projected_strikeouts": 4.38,
      "adjusted_projected_strikeouts": 4.6,
      "skill_score": 20.0,
      "opportunity_score": 39.6,
      "opponent_weakness_score": 43.2,
      "support_tier": "STRONG_OPPONENT",
      "support_label": "Strong Opponent",
      "support_note": "Opponent strikeout pressure is the clearest support input.",
      "suppression_score": 70.1,
      "suppression_tier": "HEAVY_SUPPRESSION",
      "suppression_label": "Heavy Suppression",
      "suppression_note": "Leash or workload context materially weakens the strikeout conversion path.",
      "interaction_tier": "SUPPRESSED_ALIGNMENT",
      "interaction_label": "Suppressed Alignment",
      "interaction_note": "Runway drag or weak alignment materially softens the strikeout path.",
      "trust_modifier": "SUPPRESSED",
      "trust_label": "Suppressed",
      "trust_note": "Leash or alignment drag is materially weakening the strikeout trust case.",
      "model_over_probability": 0.3214,
      "model_under_probability": 0.6786,
      "model_push_probability": 0.0,
      "implied_over_probability_raw": 0.4464,
      "implied_under_probability_raw": 0.6241,
      "implied_over_probability_novig": 0.417,
      "implied_under_probability_novig": 0.583,
      "edge_over": -0.125,
      "edge_under": 0.0545,
      "recommended_side": "Under",
      "recommended_edge": 0.0545,
      "play_tier": "Strong",
      "no_play_reason": null,
      "adjustment_delta": 0.22,
      "adjustment_multiplier": 1.049,
      "aggregate_matchup_score": 56.2,
      "lineup_confidence": "projected",
      "pitch_mix_sample_size": 18414.0,
      "lineup_expected_strikeouts": 4.93,
      "environment_summary": "neutral",
      "temperature_f": 62.6,
      "wind_speed_mph": 2.5,
      "wind_direction": "out",
      "starter_confidence": "probable",
      "projection_model_version": "negative_binomial_style",
      "source_file": "canonical_all_providers.json"
    },
    {
      "pitcher_name": "Jacob Lopez",
      "pitcher_id": 682052,
      "team_abbr": "ATH",
      "opponent_abbr": "TEX",
      "sportsbook": "FanDuel",
      "source_provider": "fanduel",
      "timestamp": null,
      "line": 5.5,
      "line_type": "half",
      "over_odds": -108,
      "under_odds": -122,
      "expected_strikeouts": 5.19,
      "baseline_projected_strikeouts": 4.9,
      "adjusted_projected_strikeouts": 5.19,
      "skill_score": 2.1,
      "opportunity_score": 33.2,
      "opponent_weakness_score": 44.7,
      "support_tier": "STRONG_OPPONENT",
      "support_label": "Strong Opponent",
      "support_note": "Opponent strikeout pressure is the clearest support input.",
      "suppression_score": 63.6,
      "suppression_tier": "HEAVY_SUPPRESSION",
      "suppression_label": "Heavy Suppression",
      "suppression_note": "Leash or workload context materially weakens the strikeout conversion path.",
      "interaction_tier": "SUPPRESSED_ALIGNMENT",
      "interaction_label": "Suppressed Alignment",
      "interaction_note": "Runway drag or weak alignment materially softens the strikeout path.",
      "trust_modifier": "SUPPRESSED",
      "trust_label": "Suppressed",
      "trust_note": "Leash or alignment drag is materially weakening the strikeout trust case.",
      "model_over_probability": 0.4119,
      "model_under_probability": 0.5881,
      "model_push_probability": 0.0,
      "implied_over_probability_raw": 0.5192,
      "implied_under_probability_raw": 0.5495,
      "implied_over_probability_novig": 0.4858,
      "implied_under_probability_novig": 0.5142,
      "edge_over": -0.1073,
      "edge_under": 0.0386,
      "recommended_side": "Under",
      "recommended_edge": 0.0386,
      "play_tier": "Play",
      "no_play_reason": null,
      "adjustment_delta": 0.29,
      "adjustment_multiplier": 1.058,
      "aggregate_matchup_score": 57.4,
      "lineup_confidence": "projected",
      "pitch_mix_sample_size": 7962.0,
      "lineup_expected_strikeouts": 5.63,
      "environment_summary": "neutral",
      "temperature_f": 62.8,
      "wind_speed_mph": 10.9,
      "wind_direction": "cross",
      "starter_confidence": "probable",
      "projection_model_version": "negative_binomial_style",
      "source_file": "canonical_all_providers.json"
    },
    {
      "pitcher_name": "Jack Leiter",
      "pitcher_id": 683004,
      "team_abbr": "TEX",
      "opponent_abbr": "ATH",
      "sportsbook": "FanDuel",
      "source_provider": "fanduel",
      "timestamp": null,
      "line": 5.5,
      "line_type": "half",
      "over_odds": -106,
      "under_odds": -125,
      "expected_strikeouts": 5.25,
      "baseline_projected_strikeouts": 5.23,
      "adjusted_projected_strikeouts": 5.25,
      "skill_score": 68.3,
      "opportunity_score": 42.0,
      "opponent_weakness_score": 33.9,
      "support_tier": "STRONG_SKILL",
      "support_label": "Strong Skill",
      "support_note": "Underlying strikeout skill is the clearest support input.",
      "suppression_score": 58.9,
      "suppression_tier": "HEAVY_SUPPRESSION",
      "suppression_label": "Heavy Suppression",
      "suppression_note": "Leash or workload context materially weakens the strikeout conversion path.",
      "interaction_tier": "SUPPRESSED_ALIGNMENT",
      "interaction_label": "Suppressed Alignment",
      "interaction_note": "Runway drag or weak alignment materially softens the strikeout path.",
      "trust_modifier": "SUPPRESSED",
      "trust_label": "Suppressed",
      "trust_note": "Leash or alignment drag is materially weakening the strikeout trust case.",
      "model_over_probability": 0.421,
      "model_under_probability": 0.579,
      "model_push_probability": 0.0,
      "implied_over_probability_raw": 0.5146,
      "implied_under_probability_raw": 0.5556,
      "implied_over_probability_novig": 0.4808,
      "implied_under_probability_novig": 0.5192,
      "edge_over": -0.0936,
      "edge_under": 0.0234,
      "recommended_side": "Under",
      "recommended_edge": 0.0234,
      "play_tier": "Lean",
      "no_play_reason": null,
      "adjustment_delta": 0.02,
      "adjustment_multiplier": 1.003,
      "aggregate_matchup_score": 44.5,
      "lineup_confidence": "projected",
      "pitch_mix_sample_size": 14747.0,
      "lineup_expected_strikeouts": 5.34,
      "environment_summary": "neutral",
      "temperature_f": 62.8,
      "wind_speed_mph": 10.9,
      "wind_direction": "cross",
      "starter_confidence": "probable",
      "projection_model_version": "negative_binomial_style",
      "source_file": "canonical_all_providers.json"
    },
    {
      "pitcher_name": "Max Fried",
      "pitcher_id": 608331,
      "team_abbr": "NYY",
      "opponent_abbr": "LAA",
      "sportsbook": "FanDuel",
      "source_provider": "fanduel",
      "timestamp": null,
      "line": 6.5,
      "line_type": "half",
      "over_odds": 104,
      "under_odds": -138,
      "expected_strikeouts": 6.15,
      "baseline_projected_strikeouts": 5.8,
      "adjusted_projected_strikeouts": 6.15,
      "skill_score": 22.6,
      "opportunity_score": 76.8,
      "opponent_weakness_score": 48.6,
      "support_tier": "DUAL_SUPPORT",
      "support_label": "Dual Support",
      "support_note": "Two of the three strikeout support layers align cleanly.",
      "suppression_score": 11.4,
      "suppression_tier": "CLEAR_RUNWAY",
      "suppression_label": "Clear Runway",
      "suppression_note": "Workload and leash context support the strikeout projection cleanly.",
      "interaction_tier": "STRONG_ALIGNMENT",
      "interaction_label": "Strong Alignment",
      "interaction_note": "The strikeout structure is favorable, but not as clean as the premium runway pocket.",
      "trust_modifier": "WATCHLIST_RUNWAY",
      "trust_label": "Watchlist Runway",
      "trust_note": "The strikeout structure is supportive and worth watching, but it is not as clean as the premium bucket.",
      "model_over_probability": 0.4128,
      "model_under_probability": 0.5872,
      "model_push_probability": 0.0,
      "implied_over_probability_raw": 0.4902,
      "implied_under_probability_raw": 0.5798,
      "implied_over_probability_novig": 0.4581,
      "implied_under_probability_novig": 0.5419,
      "edge_over": -0.0774,
      "edge_under": 0.0074,
      "recommended_side": "No Play",
      "recommended_edge": 0.0074,
      "play_tier": "No Play",
      "no_play_reason": "Best edge did not clear the minimum play threshold.",
      "adjustment_delta": 0.35,
      "adjustment_multiplier": 1.06,
      "aggregate_matchup_score": 67.9,
      "lineup_confidence": "projected",
      "pitch_mix_sample_size": 30318.0,
      "lineup_expected_strikeouts": 6.54,
      "environment_summary": "hitter-friendly",
      "temperature_f": 82.8,
      "wind_speed_mph": 14.2,
      "wind_direction": "cross",
      "starter_confidence": "probable",
      "projection_model_version": "negative_binomial_style",
      "source_file": "canonical_all_providers.json"
    },
    {
      "pitcher_name": "Patrick Corbin",
      "pitcher_id": 571578,
      "team_abbr": "TOR",
      "opponent_abbr": "MIL",
      "sportsbook": "FanDuel",
      "source_provider": "fanduel",
      "timestamp": null,
      "line": 4.5,
      "line_type": "half",
      "over_odds": 134,
      "under_odds": -180,
      "expected_strikeouts": 3.95,
      "baseline_projected_strikeouts": 3.72,
      "adjusted_projected_strikeouts": 3.95,
      "skill_score": 25.5,
      "opportunity_score": 26.9,
      "opponent_weakness_score": 35.7,
      "support_tier": "WEAK_SUPPORT",
      "support_label": "Weak Support",
      "support_note": "The strikeout support stack is lighter across skill, workload, and opponent context.",
      "suppression_score": 79.6,
      "suppression_tier": "HEAVY_SUPPRESSION",
      "suppression_label": "Heavy Suppression",
      "suppression_note": "Leash or workload context materially weakens the strikeout conversion path.",
      "interaction_tier": "SUPPRESSED_ALIGNMENT",
      "interaction_label": "Suppressed Alignment",
      "interaction_note": "Runway drag or weak alignment materially softens the strikeout path.",
      "trust_modifier": "SUPPRESSED",
      "trust_label": "Suppressed",
      "trust_note": "Leash or alignment drag is materially weakening the strikeout trust case.",
      "model_over_probability": 0.3616,
      "model_under_probability": 0.6384,
      "model_push_probability": 0.0,
      "implied_over_probability_raw": 0.4274,
      "implied_under_probability_raw": 0.6429,
      "implied_over_probability_novig": 0.3993,
      "implied_under_probability_novig": 0.6007,
      "edge_over": -0.0658,
      "edge_under": -0.0045,
      "recommended_side": "No Play",
      "recommended_edge": -0.0045,
      "play_tier": "No Play",
      "no_play_reason": "Best edge did not clear the minimum play threshold.",
      "adjustment_delta": 0.23,
      "adjustment_multiplier": 1.061,
      "aggregate_matchup_score": 28.7,
      "lineup_confidence": "projected",
      "pitch_mix_sample_size": 33148.0,
      "lineup_expected_strikeouts": 4.56,
      "environment_summary": "neutral",
      "temperature_f": 51.6,
      "wind_speed_mph": 5.5,
      "wind_direction": "in",
      "starter_confidence": "probable",
      "projection_model_version": "negative_binomial_style",
      "source_file": "canonical_all_providers.json"
    }
  ],
  "unmatched_inputs": [
    {
      "pitcher_name": "Brandon Sproat",
      "team_abbr": null,
      "opponent_abbr": null,
      "sportsbook": "FanDuel",
      "line": 3.5,
      "source_file": "canonical_all_providers.json",
      "reason": "No matching Mithrandir strikeout props row was found."
    },
    {
      "pitcher_name": "Braxton Ashcraft",
      "team_abbr": null,
      "opponent_abbr": null,
      "sportsbook": "FanDuel",
      "line": 4.5,
      "source_file": "canonical_all_providers.json",
      "reason": "No matching Mithrandir strikeout props row was found."
    },
    {
      "pitcher_name": "Chase Burns",
      "team_abbr": null,
      "opponent_abbr": null,
      "sportsbook": "FanDuel",
      "line": 6.5,
      "source_file": "canonical_all_providers.json",
      "reason": "No matching Mithrandir strikeout props row was found."
    },
    {
      "pitcher_name": "Foster Griffin",
      "team_abbr": null,
      "opponent_abbr": null,
      "sportsbook": "FanDuel",
      "line": 4.5,
      "source_file": "canonical_all_providers.json",
      "reason": "No matching Mithrandir strikeout props row was found."
    },
    {
      "pitcher_name": "Parker Messick",
      "team_abbr": null,
      "opponent_abbr": null,
      "sportsbook": "FanDuel",
      "line": 5.5,
      "source_file": "canonical_all_providers.json",
      "reason": "No matching Mithrandir strikeout props row was found."
    },
    {
      "pitcher_name": "Steven Matz",
      "team_abbr": null,
      "opponent_abbr": null,
      "sportsbook": "FanDuel",
      "line": 5.5,
      "source_file": "canonical_all_providers.json",
      "reason": "No matching Mithrandir strikeout props row was found."
    }
  ]
}