{
  "series_id": "wr-target-share-stability",
  "estimand": "Held-out mean absolute error (percentage points) of next-four-team-game target share predictions by observation window length (1, 2, 3, 4, 6, 8 team games), with paired improvement over the prior-season baseline.",
  "population": "NFL wide receivers appearing in regular-season weekly player statistics 2018-2025; WR eligibility established only within the observation window.",
  "outcome_definition": "Player summed targets divided by all reported player targets for his team summed over the same four team games (RB and TE targets included; untargeted pass attempts excluded); targets summed before dividing; full-season share never used as the outcome.",
  "evaluation_seasons": [
    2019,
    2020,
    2021,
    2022,
    2023,
    2024,
    2025
  ],
  "input_manifest": {
    "code_version": "wr-target-share-stability-analysis-3.0",
    "mode": "production",
    "required_files_complete": true,
    "hashes_verified": true,
    "approved": true,
    "files": [
      {
        "file": "games.csv",
        "sha256": "c9d3896dafb1ca89b0bd9196d7e5948b16d56cb258a145bd71ef771069c3a605",
        "bytes": 2177170,
        "rows": 7548,
        "approved_hash": true
      },
      {
        "file": "stats_player_week_2018.csv",
        "sha256": "c53021bcfc9f89d30edd6f1fe145a1d7d6ce469efeec75974fe9f0adac568642",
        "bytes": 7792665,
        "rows": 17414,
        "approved_hash": true
      },
      {
        "file": "stats_player_week_2019.csv",
        "sha256": "a05558126b1209b80fe11a8f18938cb35816370bf9990975a87de49e9eed7376",
        "bytes": 7767165,
        "rows": 17362,
        "approved_hash": true
      },
      {
        "file": "stats_player_week_2020.csv",
        "sha256": "05b992676faccc8940efbf6242cb76358069372d31d7c2e02c1a4acdcd3cbe18",
        "bytes": 7883270,
        "rows": 17602,
        "approved_hash": true
      },
      {
        "file": "stats_player_week_2021.csv",
        "sha256": "41915fb49238902ad1f129ebf0405b11a1e710454ae0fe8f7b3e4f9145875f48",
        "bytes": 8477784,
        "rows": 18969,
        "approved_hash": true
      },
      {
        "file": "stats_player_week_2022.csv",
        "sha256": "ad426c3fe5bf1cc30c3f137fdfe96d054e19d400879ee4413129da49fa7b54be",
        "bytes": 8408729,
        "rows": 18831,
        "approved_hash": true
      },
      {
        "file": "stats_player_week_2023.csv",
        "sha256": "f19cb71a5de0dce7fd09376026237c9ee9d5a93fe13815a2ea3ec2d37204cb17",
        "bytes": 8332874,
        "rows": 18643,
        "approved_hash": true
      },
      {
        "file": "stats_player_week_2024.csv",
        "sha256": "3ddc45a84f759aa348ce465ae001752c530575455717657cdfe1f8abfcdb4759",
        "bytes": 8470040,
        "rows": 18983,
        "approved_hash": true
      },
      {
        "file": "stats_player_week_2025.csv",
        "sha256": "e5e0615b3d96a3eaebfaee91e55afb4a4e7fe0caf057454177bcd7d6ad4bcfc2",
        "bytes": 8656387,
        "rows": 19422,
        "approved_hash": true
      }
    ]
  },
  "input_validation": {
    "code_version": "wr-target-share-stability-analysis-3.0",
    "approved": true,
    "required_files_complete": true,
    "hashes_verified": true,
    "canonical_schedule_and_keys_reconciled": true
  },
  "row_reconciliation": {
    "source_dispositions": {
      "raw_statistics_rows": 147226,
      "excluded_out_of_range_season_rows": 0,
      "excluded_non_regular_season_rows": 6476,
      "excluded_canonical_join_or_key_failure_rows": 0,
      "accepted_canonical_regular_season_rows": 140750
    },
    "analytic_roles_within_accepted_rows": {
      "primary_window_only_rows": 13153,
      "prior_or_training_only_rows": 33633,
      "primary_and_prior_or_training_rows": 88577,
      "wholly_unused_accepted_rows": 5387
    },
    "analytically_used_rows": 135363,
    "excluded_from_all_estimators_rows": 11863,
    "accepted_missing_player_id_rows": 141,
    "accepted_missing_position_rows": 141,
    "reconciled": true
  },
  "windows": {
    "1": {
      "n": 1013,
      "n_players": 369,
      "mae_observed_pp": 6.007790071449339,
      "mae_observed_ci_pp": [
        5.574888952289043,
        6.392050112465044
      ],
      "mae_shrinkage_pp": 5.297169520684801,
      "mae_prior_baseline_pp": 5.617686876730951,
      "mae_prior_baseline_ci_pp": [
        5.297500303583173,
        5.93667498339294
      ],
      "mae_wr_mean_baseline_pp": 8.115331391342945,
      "improvement_over_prior_pp": -0.3901031947183872,
      "improvement_over_prior_ci_pp": [
        -0.7570455048082252,
        -0.00809816140114273
      ],
      "prior_fallback_n": 171,
      "prior_source_counts": {
        "prior_other_team": 195,
        "prior_same_team": 647,
        "wr_mean_no_prior_history": 171
      }
    },
    "2": {
      "n": 1145,
      "n_players": 416,
      "mae_observed_pp": 4.908170637479424,
      "mae_observed_ci_pp": [
        4.625370179154694,
        5.201993522374896
      ],
      "mae_shrinkage_pp": 4.587754859112407,
      "mae_prior_baseline_pp": 5.500858294062375,
      "mae_prior_baseline_ci_pp": [
        5.189961418215924,
        5.838390060238064
      ],
      "mae_wr_mean_baseline_pp": 7.679364291342862,
      "improvement_over_prior_pp": 0.5926876565829513,
      "improvement_over_prior_ci_pp": [
        0.26652340860823415,
        0.9132850008216792
      ],
      "prior_fallback_n": 206,
      "prior_source_counts": {
        "prior_other_team": 221,
        "prior_same_team": 718,
        "wr_mean_no_prior_history": 206
      }
    },
    "3": {
      "n": 1219,
      "n_players": 430,
      "mae_observed_pp": 4.500533463504434,
      "mae_observed_ci_pp": [
        4.207142569876363,
        4.770520262299018
      ],
      "mae_shrinkage_pp": 4.320631957664302,
      "mae_prior_baseline_pp": 5.524849894877235,
      "mae_prior_baseline_ci_pp": [
        5.23299790747833,
        5.816443600882153
      ],
      "mae_wr_mean_baseline_pp": 7.54328729624985,
      "improvement_over_prior_pp": 1.0243164313728015,
      "improvement_over_prior_ci_pp": [
        0.7307097564036972,
        1.3098173599160334
      ],
      "prior_fallback_n": 224,
      "prior_source_counts": {
        "prior_other_team": 244,
        "prior_same_team": 751,
        "wr_mean_no_prior_history": 224
      }
    },
    "4": {
      "n": 1295,
      "n_players": 447,
      "mae_observed_pp": 4.482187621357813,
      "mae_observed_ci_pp": [
        4.159278997265284,
        4.796253223375287
      ],
      "mae_shrinkage_pp": 4.373643430428687,
      "mae_prior_baseline_pp": 5.658044564786995,
      "mae_prior_baseline_ci_pp": [
        5.350015952588909,
        5.945814596387555
      ],
      "mae_wr_mean_baseline_pp": 7.4979251179821045,
      "improvement_over_prior_pp": 1.1758569434291821,
      "improvement_over_prior_ci_pp": [
        0.8728437204592644,
        1.459272074990407
      ],
      "prior_fallback_n": 254,
      "prior_source_counts": {
        "prior_other_team": 258,
        "prior_same_team": 783,
        "wr_mean_no_prior_history": 254
      }
    },
    "6": {
      "n": 1390,
      "n_players": 468,
      "mae_observed_pp": 4.4681939851485435,
      "mae_observed_ci_pp": [
        4.190381583440188,
        4.755735229639786
      ],
      "mae_shrinkage_pp": 4.4296169753337,
      "mae_prior_baseline_pp": 5.887104196032509,
      "mae_prior_baseline_ci_pp": [
        5.600443298889346,
        6.172195481278131
      ],
      "mae_wr_mean_baseline_pp": 7.521897579234278,
      "improvement_over_prior_pp": 1.4189102108839662,
      "improvement_over_prior_ci_pp": [
        1.156343961874625,
        1.6855598183451699
      ],
      "prior_fallback_n": 296,
      "prior_source_counts": {
        "prior_other_team": 279,
        "prior_same_team": 815,
        "wr_mean_no_prior_history": 296
      }
    },
    "8": {
      "n": 1476,
      "n_players": 482,
      "mae_observed_pp": 4.248546612289726,
      "mae_observed_ci_pp": [
        3.978330852350926,
        4.520654817186278
      ],
      "mae_shrinkage_pp": 4.244993041820468,
      "mae_prior_baseline_pp": 5.997070621688351,
      "mae_prior_baseline_ci_pp": [
        5.720203969175237,
        6.303861132179672
      ],
      "mae_wr_mean_baseline_pp": 7.656099841483359,
      "improvement_over_prior_pp": 1.7485240093986263,
      "improvement_over_prior_ci_pp": [
        1.4909139999280543,
        2.01795989676737
      ],
      "prior_fallback_n": 328,
      "prior_source_counts": {
        "prior_other_team": 305,
        "prior_same_team": 843,
        "wr_mean_no_prior_history": 328
      }
    }
  },
  "sensitivities": {
    "common_cohort": {
      "1": {
        "n": 1013,
        "mae_observed_pp": 6.007790071449339,
        "improvement_over_prior_pp": -0.3901031947183872
      },
      "2": {
        "n": 1013,
        "mae_observed_pp": 5.058297032619998,
        "improvement_over_prior_pp": 0.5662939072257067
      },
      "3": {
        "n": 1013,
        "mae_observed_pp": 4.735580701671109,
        "improvement_over_prior_pp": 0.9285652091201573
      },
      "4": {
        "n": 1013,
        "mae_observed_pp": 4.816670375686782,
        "improvement_over_prior_pp": 1.0184451455895325
      },
      "6": {
        "n": 1013,
        "mae_observed_pp": 5.032008503600296,
        "improvement_over_prior_pp": 1.144222901567741
      },
      "8": {
        "n": 1013,
        "mae_observed_pp": 4.891090267228915,
        "improvement_over_prior_pp": 1.5216041478082212
      }
    },
    "team_change": {
      "1": {
        "n": 1011,
        "mae_observed_pp": 6.014759461809758,
        "improvement_over_prior_pp": -0.3944720239632632,
        "n_team_changed": 2
      },
      "2": {
        "n": 1142,
        "mae_observed_pp": 4.914137485783227,
        "improvement_over_prior_pp": 0.5897814991970798,
        "n_team_changed": 3
      },
      "3": {
        "n": 1206,
        "mae_observed_pp": 4.482337509261632,
        "improvement_over_prior_pp": 1.0031117505520486,
        "n_team_changed": 13
      },
      "4": {
        "n": 1276,
        "mae_observed_pp": 4.442640979013264,
        "improvement_over_prior_pp": 1.1520895326224023,
        "n_team_changed": 19
      },
      "6": {
        "n": 1357,
        "mae_observed_pp": 4.390741572677072,
        "improvement_over_prior_pp": 1.3783157565364363,
        "n_team_changed": 33
      },
      "8": {
        "n": 1435,
        "mae_observed_pp": 4.173610656899585,
        "improvement_over_prior_pp": 1.6838667910440481,
        "n_team_changed": 41
      }
    },
    "low_team_targets": {
      "1": {
        "n": 979,
        "mae_observed_pp": 5.976420488729774,
        "improvement_over_prior_pp": -0.3318026611725151
      },
      "2": {
        "n": 1132,
        "mae_observed_pp": 4.888834552137918,
        "improvement_over_prior_pp": 0.6197627072539895
      },
      "3": {
        "n": 1211,
        "mae_observed_pp": 4.4853836851042574,
        "improvement_over_prior_pp": 1.0378386698603372
      },
      "4": {
        "n": 1289,
        "mae_observed_pp": 4.478288073546334,
        "improvement_over_prior_pp": 1.1737837983669994
      },
      "6": {
        "n": 1384,
        "mae_observed_pp": 4.477442286288558,
        "improvement_over_prior_pp": 1.4135599154439045
      },
      "8": {
        "n": 1470,
        "mae_observed_pp": 4.24329001677981,
        "improvement_over_prior_pp": 1.7602880024580152
      }
    },
    "precision_target": {
      "1": {
        "mae_le_4pp": false,
        "mae_le_6pp": false,
        "mae_le_8pp": true,
        "improvement_ge_0_5pp": false,
        "meets_registered_target": false
      },
      "2": {
        "mae_le_4pp": false,
        "mae_le_6pp": true,
        "mae_le_8pp": true,
        "improvement_ge_0_5pp": true,
        "meets_registered_target": true
      },
      "3": {
        "mae_le_4pp": false,
        "mae_le_6pp": true,
        "mae_le_8pp": true,
        "improvement_ge_0_5pp": true,
        "meets_registered_target": true
      },
      "4": {
        "mae_le_4pp": false,
        "mae_le_6pp": true,
        "mae_le_8pp": true,
        "improvement_ge_0_5pp": true,
        "meets_registered_target": true
      },
      "6": {
        "mae_le_4pp": false,
        "mae_le_6pp": true,
        "mae_le_8pp": true,
        "improvement_ge_0_5pp": true,
        "meets_registered_target": true
      },
      "8": {
        "mae_le_4pp": false,
        "mae_le_6pp": true,
        "mae_le_8pp": true,
        "improvement_ge_0_5pp": true,
        "meets_registered_target": true
      }
    },
    "per_season": {
      "2024": {
        "1": {
          "n": 144,
          "mae_observed_pp": 6.905052798059402,
          "improvement_over_prior_pp": -0.9213461194375563
        },
        "2": {
          "n": 163,
          "mae_observed_pp": 5.360341202798624,
          "improvement_over_prior_pp": 0.44690041681728565
        },
        "3": {
          "n": 175,
          "mae_observed_pp": 5.080940725121122,
          "improvement_over_prior_pp": 0.45896817056989836
        },
        "4": {
          "n": 185,
          "mae_observed_pp": 4.900414795769529,
          "improvement_over_prior_pp": 0.5198035997862491
        },
        "6": {
          "n": 198,
          "mae_observed_pp": 5.07917485045495,
          "improvement_over_prior_pp": 1.1893417694257058
        },
        "8": {
          "n": 213,
          "mae_observed_pp": 4.683278242387467,
          "improvement_over_prior_pp": 1.9410629649501139
        }
      },
      "2025": {
        "1": {
          "n": 150,
          "mae_observed_pp": 5.437228090867315,
          "improvement_over_prior_pp": -0.5230287992362976
        },
        "2": {
          "n": 166,
          "mae_observed_pp": 4.542763084137352,
          "improvement_over_prior_pp": 0.6611661333656642
        },
        "3": {
          "n": 173,
          "mae_observed_pp": 4.391551093708789,
          "improvement_over_prior_pp": 0.9924885435077024
        },
        "4": {
          "n": 183,
          "mae_observed_pp": 4.456759971947042,
          "improvement_over_prior_pp": 1.1686153287506587
        },
        "6": {
          "n": 199,
          "mae_observed_pp": 4.170642083072783,
          "improvement_over_prior_pp": 1.297672768694267
        },
        "8": {
          "n": 212,
          "mae_observed_pp": 4.374752930527793,
          "improvement_over_prior_pp": 1.2820581023851993
        }
      }
    }
  },
  "hypothesis_evaluation": {
    "1": false,
    "2": false,
    "3": false,
    "4": true,
    "6": true,
    "8": true
  },
  "drops": {
    "incomplete_season_team_windows": 0,
    "zero_denominator_team_windows": 0,
    "unresolved_team_game_joins": 0,
    "non_disjoint_team_windows": 0
  },
  "observation_drops": {
    "non_disjoint_player_windows": 0
  },
  "analyzed_team_windows": 1536,
  "schedule_reconciliation": {
    "schedule_rows": 7548,
    "postseason_rows_excluded": 100,
    "out_of_range_season_rows_excluded": 5321,
    "in_range_unplayed_rows_excluded": 0,
    "completed_regular_season_games_used": 2127,
    "completed_games_with_no_team_stats": 0,
    "completed_team_games_with_no_team_stats": 0,
    "stats_games_not_in_completed_schedule": 0,
    "stats_rows_with_unmatched_team": 0,
    "stats_rows_with_season_mismatch": 0,
    "stats_rows_with_week_mismatch": 0,
    "duplicate_player_game_team_rows": 0,
    "position_conflict_keys": 0
  },
  "shrinkage_k": {
    "2019_1": 16.0,
    "2019_2": 16.0,
    "2019_3": 16.0,
    "2019_4": 16.0,
    "2019_6": 16.0,
    "2019_8": 16.0,
    "2020_1": 16.0,
    "2020_2": 16.0,
    "2020_3": 16.0,
    "2020_4": 16.0,
    "2020_6": 16.0,
    "2020_8": 16.0,
    "2021_1": 16.0,
    "2021_2": 16.0,
    "2021_3": 16.0,
    "2021_4": 16.0,
    "2021_6": 8.0,
    "2021_8": 8.0,
    "2022_1": 16.0,
    "2022_2": 16.0,
    "2022_3": 16.0,
    "2022_4": 16.0,
    "2022_6": 16.0,
    "2022_8": 8.0,
    "2023_1": 16.0,
    "2023_2": 16.0,
    "2023_3": 16.0,
    "2023_4": 16.0,
    "2023_6": 16.0,
    "2023_8": 8.0,
    "2024_1": 16.0,
    "2024_2": 16.0,
    "2024_3": 16.0,
    "2024_4": 16.0,
    "2024_6": 16.0,
    "2024_8": 16.0,
    "2025_1": 16.0,
    "2025_2": 16.0,
    "2025_3": 16.0,
    "2025_4": 16.0,
    "2025_6": 16.0,
    "2025_8": 8.0
  },
  "shrinkage_k_defaulted": [],
  "prior_baseline_rule": "Prior-season share of the player's last dated prior-season team (latest gameday, then game_id, then team), divided by that team's own prior-season target total; earlier-season WR mean only when no usable prior-season history exists.",
  "prior_source_counts": {
    "prior_other_team": 1502,
    "prior_same_team": 4557,
    "wr_mean_no_prior_history": 1479
  },
  "scope_statement": "Findings describe historical forecast reliability for the 2019-2025 NFL seasons and do not constitute recommendations for 2026 players; bootstrap intervals describe uncertainty in average error, not individual-player prediction intervals.",
  "publication_status": {
    "status": "published",
    "reasons": []
  },
  "research_audit": {
    "temporal_validation": {
      "name": "Rolling temporal validation",
      "passed": true,
      "details": "Verified earlier-season fitting sources, strictly ordered feature and outcome dates, and exclusion of the training-only 2018 season from evaluation."
    },
    "baseline_checks": [
      {
        "name": "Prior-season target-share baseline with training-only fallback",
        "passed": true,
        "details": "Prior shares use the last dated prior-season team and its own denominator; fallbacks are earlier-season WR means. Sources: {\"prior_other_team\": 1502, \"prior_same_team\": 4557, \"wr_mean_no_prior_history\": 1479}"
      },
      {
        "name": "Earlier-season WR mean baseline",
        "passed": true,
        "details": "The earlier-season WR mean is evaluated separately for every registered window."
      },
      {
        "name": "Observed-window share without shrinkage",
        "passed": true,
        "details": "Raw observed target share is evaluated with finite MAE for every window."
      }
    ],
    "uncertainty": {
      "name": "Player-cluster bootstrap intervals",
      "passed": true,
      "details": "1000 player-cluster bootstrap replicates use seed 271828; intervals are pointwise mean-error and paired-improvement intervals, not player prediction intervals. Player clustering does not separately account for shared team-game dependence."
    },
    "missingness": {
      "input_rows": 147226,
      "analyzed_rows": 135363,
      "excluded_rows": 11863,
      "reconciled": true,
      "missing_by_field": {
        "player_id": 173,
        "season": 0,
        "week": 0,
        "game_id": 0,
        "team": 0,
        "position": 173,
        "targets": 0
      }
    },
    "sensitivity_checks": [
      {
        "name": "Common-cohort sensitivity",
        "passed": true,
        "details": "Player-season-team cohorts eligible in every window; counts: {\"1\": 1013, \"2\": 1013, \"3\": 1013, \"4\": 1013, \"6\": 1013, \"8\": 1013}"
      },
      {
        "name": "Team-change sensitivity",
        "passed": true,
        "details": "Unchanged plus changed observations reconcile to each window; changed counts: {\"1\": 2, \"2\": 3, \"3\": 13, \"4\": 19, \"6\": 33, \"8\": 41}"
      },
      {
        "name": "Low-team-target sensitivity",
        "passed": true,
        "details": "The threshold is 20 team targets per observed game; counts: {\"1\": 979, \"2\": 1132, \"3\": 1211, \"4\": 1289, \"6\": 1384, \"8\": 1470}"
      },
      {
        "name": "Precision-target sensitivity",
        "passed": true,
        "details": "MAE tolerances at 4, 6, and 8 points and improvement of 0.5 points are evaluated as editorial thresholds and checked for logical monotonicity."
      },
      {
        "name": "Per-season sensitivity",
        "passed": true,
        "details": "Positive observations are required for every window in both 2024 and 2025; reported season-window counts are checked against pooled evaluation records."
      }
    ],
    "leakage_checks": [
      {
        "name": "Feature-outcome window disjointness",
        "passed": true,
        "details": "Retained observations have feature-window end dates before outcome-window start dates; invalid observations are dropped and counted before evaluation."
      },
      {
        "name": "Training-only parameter fitting",
        "passed": true,
        "details": "Shrinkage fitting frames and WR-mean sources have maximum seasons below each evaluation season; defaulted season-windows are reported."
      },
      {
        "name": "Window-only WR eligibility",
        "passed": true,
        "details": "Every retained player has a WR-position row for his team in the observation window."
      }
    ],
    "withholding_checks": [
      {
        "name": "Minimum 100 observations per window",
        "passed": true,
        "details": "Per-window eligible observation counts: {\"1\": 1013, \"2\": 1145, \"3\": 1219, \"4\": 1295, \"6\": 1390, \"8\": 1476}"
      },
      {
        "name": "Incomplete-window drops reported",
        "passed": true,
        "details": "Kept and mutually exclusive team-window drops reconcile to 1536 candidate team-windows: {\"incomplete_season_team_windows\": 0, \"zero_denominator_team_windows\": 0, \"unresolved_team_game_joins\": 0, \"non_disjoint_team_windows\": 0, \"analyzed_team_windows\": 1536}"
      },
      {
        "name": "Full error curve for all six windows",
        "passed": true,
        "details": "The required 1, 2, 3, 4, 6, and 8 game windows are all required before publication."
      },
      {
        "name": "Scope limitation on game-count claims",
        "passed": true,
        "details": "The scope is historical 2019-2025 reliability and explicitly excludes 2026 recommendations."
      }
    ]
  }
}