Skip to main content
Version: 0.1.5

NFL — additional Python functions — Models and calculators: get_fg–nfl_ratings

get_fg_wp​

get_fg_wp(pbp_df: "Union[pl.DataFrame, 'pd.DataFrame']") -> 'pd.DataFrame'

Expected win probability of attempting a field goal (nfl4th get_fg_wp).

The make probability comes from the self-trained fg_model (a binary:logistic XGBoost re-train of the original mgcv GAM, features [yardline_100, fg_roof, fg_era]), shrunk by 0.9 for kicks at/beyond yardline_100 = 38 and zeroed at/beyond yardline_100 = 45 (>= ~63-yard kicks). The made-FG state (opponent receives a touchback kickoff at the 25, kicking team +3) and the missed-FG state (opponent takes over 8 yards back of the spot, capped at the 80) are each scored with win probability; fg_wp = make_prob * make_wp + (1 - make_prob) * miss_wp.

Parameters

ParameterTypeDefaultDescription
pbp_dfUnion[DataFrame, 'DataFrame']Play-by-play frame (polars or pandas) of fourth-down situations.

Returns

A pandas copy of pbp_df plus fg_make_prob, make_fg_wp, miss_fg_wp and fg_wp (from the kicking team's perspective). All four are NaN when the FG model or WP model is unavailable.

col_nametypedescription
play_iddoubleNumeric play id that when used with game_id and drive provides the unique identifier for a single play.
game_idcharacterTen digit identifier for NFL game.
old_game_idcharacterLegacy NFL game ID.
home_teamcharacterThe home team. Note that this contains the designated home team for games which no team is playing at home such as Super Bowls or NFL International games.
away_teamcharacterString abbreviation for the away team.
season_typecharacterREG or POST indicating if the timeframe belongs to regular or post season.
weekintegerSeason week.
posteamcharacterString abbreviation for the team with possession.
posteam_typecharacterString indicating whether the posteam team is home or away.
defteamcharacterString abbreviation for the team on defense.
side_of_fieldcharacterString abbreviation for which team's side of the field the team with possession is currently on.
yardline_100doubleNumeric distance in the number of yards from the opponent's endzone for the posteam.
game_datecharacterDate of the game.
quarter_seconds_remainingdoubleNumeric seconds remaining in the quarter.
half_seconds_remainingdoubleNumeric seconds remaining in the half.
game_seconds_remainingdoubleNumeric seconds remaining in the game.
game_halfcharacterString indicating which half the play is in, either Half1, Half2, or Overtime.
quarter_enddoubleBinary indicator for whether or not the row of the data is marking the end of a quarter.
drivedoubleNumeric drive number in the game.
spdoubleBinary indicator for whether or not a score occurred on the play.
qtrdoubleQuarter of the game (5 is overtime).
downdoubleThe down for the given play.
goal_to_godoubleBinary indicator for whether or not the posteam is in a goal down situation.
timecharacterTime at start of play provided in string format as minutes:seconds remaining in the quarter.
yrdlncharacterString indicating the current field position for a given play.
ydstogodoubleNumeric yards in distance from either the first down marker or the endzone in goal down situations.
ydsnetdoubleNumeric value for total yards gained on the given drive.
desccharacterDetailed string description for the given play.
play_typecharacterString indicating the type of play: pass (includes sacks), run (includes scrambles), punt, field_goal, kickoff, extra_point, qb_kneel, qb_spike, no_play (timeouts and penalties), and missing for rows indicating end of play.
yards_gaineddoubleNumeric yards gained (or lost) by the possessing team, excluding yards gained via fumble recoveries and laterals.
shotgundoubleBinary indicator for whether or not the play was in shotgun formation.
no_huddledoubleBinary indicator for whether or not the play was in no_huddle formation.
qb_dropbackdoubleBinary indicator for whether or not the QB dropped back on the play (pass attempt, sack, or scrambled).
qb_kneeldoubleBinary indicator for whether or not the QB took a knee.
qb_spikedoubleBinary indicator for whether or not the QB spiked the ball.
qb_scrambledoubleBinary indicator for whether or not the QB scrambled.
pass_lengthcharacterString indicator for pass length: short or deep.
pass_locationcharacterString indicator for pass location: left, middle, or right.
air_yardsdoubleNumeric value for distance in yards perpendicular to the line of scrimmage at where the targeted receiver either caught or didn't catch the ball.
yards_after_catchdoubleNumeric value for distance in yards perpendicular to the yard line where the receiver made the reception to where the play ended.
run_locationcharacterString indicator for location of run: left, middle, or right.
run_gapcharacterString indicator for line gap of run: end, guard, or tackle
field_goal_resultcharacterString indicator for result of field goal attempt: made, missed, or blocked.
kick_distancedoubleNumeric distance in yards for kickoffs, field goals, and punts.
extra_point_resultcharacterString indicator for the result of the extra point attempt: good, failed, blocked, safety (touchback in defensive endzone is 1 point apparently), or aborted.
two_point_conv_resultcharacterString indicator for result of two point conversion attempt: success, failure, safety (touchback in defensive endzone is 1 point apparently), or return.
home_timeouts_remainingdoubleNumeric timeouts remaining in the half for the home team.
away_timeouts_remainingdoubleNumeric timeouts remaining in the half for the away team.
timeoutdoubleBinary indicator for whether or not a timeout was called by either team.
timeout_teamcharacterString abbreviation for which team called the timeout.
td_teamcharacterString abbreviation for which team scored the touchdown.
td_player_namecharacterString name of the player who scored a touchdown.
td_player_idcharacterUnique identifier of the player who scored a touchdown.
posteam_timeouts_remainingdoubleNumber of timeouts remaining for the possession team.
defteam_timeouts_remainingdoubleNumber of timeouts remaining for the team on defense.
total_home_scoredoubleScore for the home team at the start of the play.
total_away_scoredoubleScore for the away team at the start of the play.
posteam_scoredoubleScore the posteam at the start of the play.
defteam_scoredoubleScore the defteam at the start of the play.
score_differentialdoubleScore differential between the posteam and defteam at the start of the play.
posteam_score_postdoubleScore for the posteam at the end of the play.
defteam_score_postdoubleScore for the defteam at the end of the play.
score_differential_postdoubleScore differential between the posteam and defteam at the end of the play.
no_score_probdoublePredicted probability of no score occurring for the rest of the half based on the expected points model.
opp_fg_probdoublePredicted probability of the defteam scoring a FG next. 'Next' in this context means the next score in the same game half.
opp_safety_probdoublePredicted probability of the defteam scoring a safety next. 'Next' in this context means the next score in the same game half.
opp_td_probdoublePredicted probability of the defteam scoring a TD next. 'Next' in this context means the next score in the same game half.
fg_probdoublePredicted probability of the posteam scoring a FG next. 'Next' in this context means the next score in the same game half.
safety_probdoublePredicted probability of the posteam scoring a safety next. 'Next' in this context means the next score in the same game half.
td_probdoublePredicted probability of the posteam scoring a TD next. 'Next' in this context means the next score in the same game half.
extra_point_probdoublePredicted probability of the posteam scoring an extra point.
two_point_conversion_probdoublePredicted probability of the posteam scoring the two point conversion.
epdoubleUsing the scoring event probabilities, the estimated expected points with respect to the possession team for the given play.
epadoubleExpected points added (EPA) by the posteam for the given play.
total_home_epadoubleCumulative total EPA for the home team in the game so far.
total_away_epadoubleCumulative total EPA for the away team in the game so far.
total_home_rush_epadoubleCumulative total rushing EPA for the home team in the game so far.
total_away_rush_epadoubleCumulative total rushing EPA for the away team in the game so far.
total_home_pass_epadoubleCumulative total passing EPA for the home team in the game so far.
total_away_pass_epadoubleCumulative total passing EPA for the away team in the game so far.
air_epadoubleEPA from the air yards alone. For completions this represents the actual value provided through the air. For incompletions this represents the hypothetical value that could've been added through the air if the pass was completed.
yac_epadoubleEPA from the yards after catch alone. For completions this represents the actual value provided after the catch. For incompletions this represents the difference between the hypothetical air_epa and the play's raw observed EPA (how much the incomplete pass cost the posteam).
comp_air_epadoubleEPA from the air yards alone only for completions.
comp_yac_epadoubleEPA from the yards after catch alone only for completions.
total_home_comp_air_epadoubleCumulative total completions air EPA for the home team in the game so far.
total_away_comp_air_epadoubleCumulative total completions air EPA for the away team in the game so far.
total_home_comp_yac_epadoubleCumulative total completions yac EPA for the home team in the game so far.
total_away_comp_yac_epadoubleCumulative total completions yac EPA for the away team in the game so far.
total_home_raw_air_epadoubleCumulative total raw air EPA for the home team in the game so far.
total_away_raw_air_epadoubleCumulative total raw air EPA for the away team in the game so far.
total_home_raw_yac_epadoubleCumulative total raw yac EPA for the home team in the game so far.
total_away_raw_yac_epadoubleCumulative total raw yac EPA for the away team in the game so far.
wpdoubleEstimated win probability for the posteam given the current situation at the start of the given play.
def_wpdoubleEstimated win probability for the defteam.
home_wpdoubleEstimated win probability for the home team.
away_wpdoubleEstimated win probability for the away team.
wpadoubleWin probability added (WPA) for the posteam.
vegas_wpadoubleWin probability added (WPA) for the posteam: spread_adjusted model.
vegas_home_wpadoubleWin probability added (WPA) for the home team: spread_adjusted model.
home_wp_postdoubleEstimated win probability for the home team at the end of the play.
away_wp_postdoubleEstimated win probability for the away team at the end of the play.
vegas_wpdoubleEstimated win probability for the posteam given the current situation at the start of the given play, incorporating pre-game Vegas line.
vegas_home_wpdoubleEstimated win probability for the home team incorporating pre-game Vegas line.
total_home_rush_wpadoubleCumulative total rushing WPA for the home team in the game so far.
total_away_rush_wpadoubleCumulative total rushing WPA for the away team in the game so far.
total_home_pass_wpadoubleCumulative total passing WPA for the home team in the game so far.
total_away_pass_wpadoubleCumulative total passing WPA for the away team in the game so far.
air_wpadoubleWPA through the air (same logic as air_epa).
yac_wpadoubleWPA from yards after the catch (same logic as yac_epa).
comp_air_wpadoubleThe air_wpa for completions only.
comp_yac_wpadoubleThe yac_wpa for completions only.
total_home_comp_air_wpadoubleCumulative total completions air WPA for the home team in the game so far.
total_away_comp_air_wpadoubleCumulative total completions air WPA for the away team in the game so far.
total_home_comp_yac_wpadoubleCumulative total completions yac WPA for the home team in the game so far.
total_away_comp_yac_wpadoubleCumulative total completions yac WPA for the away team in the game so far.
total_home_raw_air_wpadoubleCumulative total raw air WPA for the home team in the game so far.
total_away_raw_air_wpadoubleCumulative total raw air WPA for the away team in the game so far.
total_home_raw_yac_wpadoubleCumulative total raw yac WPA for the home team in the game so far.
total_away_raw_yac_wpadoubleCumulative total raw yac WPA for the away team in the game so far.
punt_blockeddoubleBinary indicator for if the punt was blocked.
first_down_rushdoubleBinary indicator for if a running play converted the first down.
first_down_passdoubleBinary indicator for if a passing play converted the first down.
first_down_penaltydoubleBinary indicator for if a penalty converted the first down.
third_down_converteddoubleBinary indicator for if the first down was converted on third down.
third_down_faileddoubleBinary indicator for if the posteam failed to convert first down on third down.
fourth_down_converteddoubleBinary indicator for if the first down was converted on fourth down.
fourth_down_faileddoubleBinary indicator for if the posteam failed to convert first down on fourth down.
incomplete_passdoubleBinary indicator for if the pass was incomplete.
touchbackdoubleBinary indicator for if a touchback occurred on the play.
interceptiondoubleBinary indicator for if the pass was intercepted.
punt_inside_twentydoubleBinary indicator for if the punt ended inside the twenty yard line.
punt_in_endzonedoubleBinary indicator for if the punt was in the endzone.
punt_out_of_boundsdoubleBinary indicator for if the punt went out of bounds.
punt_downeddoubleBinary indicator for if the punt was downed.
punt_fair_catchdoubleBinary indicator for if the punt was caught with a fair catch.
kickoff_inside_twentydoubleBinary indicator for if the kickoff ended inside the twenty yard line.
kickoff_in_endzonedoubleBinary indicator for if the kickoff was in the endzone.
kickoff_out_of_boundsdoubleBinary indicator for if the kickoff went out of bounds.
kickoff_downeddoubleBinary indicator for if the kickoff was downed.
kickoff_fair_catchdoubleBinary indicator for if the kickoff was caught with a fair catch.
fumble_forceddoubleBinary indicator for if the fumble was forced.
fumble_not_forceddoubleBinary indicator for if the fumble was not forced.
fumble_out_of_boundsdoubleBinary indicator for if the fumble went out of bounds.
solo_tackledoubleBinary indicator if the play had a solo tackle (could be multiple due to fumbles).
safetydoubleBinary indicator for whether or not a safety occurred.
penaltydoubleBinary indicator for whether or not a penalty occurred.
tackled_for_lossdoubleBinary indicator for whether or not a tackle for loss on a run play occurred.
fumble_lostdoubleBinary indicator for if the fumble was lost.
own_kickoff_recoverydoubleBinary indicator for if the kicking team recovered the kickoff.
own_kickoff_recovery_tddoubleBinary indicator for if the kicking team recovered the kickoff and scored a TD.
qb_hitdoubleBinary indicator if the QB was hit on the play.
rush_attemptdoubleBinary indicator for if the play was a run.
pass_attemptdoubleBinary indicator for if the play was a pass attempt (includes sacks).
sackdoubleBinary indicator for if the play ended in a sack.
touchdowndoubleBinary indicator for if the play resulted in a TD.
pass_touchdowndoubleBinary indicator for if the play resulted in a passing TD.
rush_touchdowndoubleBinary indicator for if the play resulted in a rushing TD.
return_touchdowndoubleBinary indicator for if the play resulted in a return TD. Returns may occur on any of: interception, fumble, kickoff, punt, or blocked kicks.
extra_point_attemptdoubleBinary indicator for extra point attempt.
two_point_attemptdoubleBinary indicator for two point conversion attempt.
field_goal_attemptdoubleBinary indicator for field goal attempt.
kickoff_attemptdoubleBinary indicator for kickoff.
punt_attemptdoubleBinary indicator for punts.
fumbledoubleBinary indicator for if a fumble occurred.
complete_passdoubleBinary indicator for if the pass was completed.
assist_tackledoubleBinary indicator for if an assist tackle occurred.
lateral_receptiondoubleBinary indicator for if a lateral occurred on the reception.
lateral_rushdoubleBinary indicator for if a lateral occurred on a run.
lateral_returndoubleBinary indicator for if a lateral occurred on a return. Returns may occur on any of: interception, fumble, kickoff, punt, or blocked kicks.
lateral_recoverydoubleBinary indicator for if a lateral occurred on a fumble recovery.
passer_player_idcharacterUnique identifier for the player that attempted the pass.
passer_player_namecharacterString name for the player that attempted the pass.
passing_yardsdoubleNumeric yards by the passer_player_name, including yards gained in pass plays with laterals. This should equal official passing statistics.
receiver_player_idcharacterUnique identifier for the receiver that was targeted on the pass.
receiver_player_namecharacterString name for the targeted receiver.
receiving_yardsdoubleNumeric yards by the receiver_player_name, excluding yards gained in pass plays with laterals. This should equal official receiving statistics but could miss yards gained in pass plays with laterals. Please see the description of lateral_receiver_player_name for further information.
rusher_player_idcharacterUnique identifier for the player that attempted the run.
rusher_player_namecharacterString name for the player that attempted the run.
rushing_yardsdoubleNumeric yards by the rusher_player_name, excluding yards gained in rush plays with laterals. This should equal official rushing statistics but could miss yards gained in rush plays with laterals. Please see the description of lateral_rusher_player_name for further information.
lateral_receiver_player_idcharacterUnique identifier for the player that received the last(!) lateral on a pass play.
lateral_receiver_player_namecharacterString name for the player that received the last(!) lateral on a pass play. If there were multiple laterals in the same play, this will only be the last player who received a lateral. Please see https://github.com/mrcaseb/nfl-data/tree/master/data/lateral_yards for a list of plays where multiple players recorded lateral receiving yards.
lateral_receiving_yardsdoubleNumeric yards by the lateral_receiver_player_name in pass plays with laterals. Please see the description of lateral_receiver_player_name for further information.
lateral_rusher_player_idcharacterUnique identifier for the player that received the last(!) lateral on a run play.
lateral_rusher_player_namecharacterString name for the player that received the last(!) lateral on a run play. If there were multiple laterals in the same play, this will only be the last player who received a lateral. Please see https://github.com/mrcaseb/nfl-data/tree/master/data/lateral_yards for a list of plays where multiple players recorded lateral rushing yards.
lateral_rushing_yardsdoubleNumeric yards by the lateral_rusher_player_name in run plays with laterals. Please see the description of lateral_rusher_player_name for further information.
lateral_sack_player_idcharacterUnique identifier for the player that received the lateral on a sack.
lateral_sack_player_namecharacterString name for the player that received the lateral on a sack.
interception_player_idcharacterUnique identifier for the player that intercepted the pass.
interception_player_namecharacterString name for the player that intercepted the pass.
lateral_interception_player_idcharacterUnique identifier for the player that received the lateral on an interception.
lateral_interception_player_namecharacterString name for the player that received the lateral on an interception.
punt_returner_player_idcharacterUnique identifier for the punt returner.
punt_returner_player_namecharacterString name for the punt returner.
lateral_punt_returner_player_idcharacterUnique identifier for the player that received the lateral on a punt return.
lateral_punt_returner_player_namecharacterString name for the player that received the lateral on a punt return.
kickoff_returner_player_namecharacterString name for the kickoff returner.
kickoff_returner_player_idcharacterUnique identifier for the kickoff returner.
lateral_kickoff_returner_player_idcharacterUnique identifier for the player that received the lateral on a kickoff return.
lateral_kickoff_returner_player_namecharacterString name for the player that received the lateral on a kickoff return.
punter_player_idcharacterUnique identifier for the punter.
punter_player_namecharacterString name for the punter.
kicker_player_namecharacterString name for the kicker on FG or kickoff.
kicker_player_idcharacterUnique identifier for the kicker on FG or kickoff.
own_kickoff_recovery_player_idcharacterUnique identifier for the player that recovered their own kickoff.
own_kickoff_recovery_player_namecharacterString name for the player that recovered their own kickoff.
blocked_player_idcharacterUnique identifier for the player that blocked the punt or FG.
blocked_player_namecharacterString name for the player that blocked the punt or FG.
tackle_for_loss_1_player_idcharacterUnique identifier for one of the potential players with the tackle for loss.
tackle_for_loss_1_player_namecharacterString name for one of the potential players with the tackle for loss.
tackle_for_loss_2_player_idcharacterUnique identifier for one of the potential players with the tackle for loss.
tackle_for_loss_2_player_namecharacterString name for one of the potential players with the tackle for loss.
qb_hit_1_player_idcharacterUnique identifier for one of the potential players that hit the QB. No sack as the QB was not the ball carrier. For sacks please see sack_player or half_sack_*_player.
qb_hit_1_player_namecharacterString name for one of the potential players that hit the QB. No sack as the QB was not the ball carrier. For sacks please see sack_player or half_sack_*_player.
qb_hit_2_player_idcharacterUnique identifier for one of the potential players that hit the QB. No sack as the QB was not the ball carrier. For sacks please see sack_player or half_sack_*_player.
qb_hit_2_player_namecharacterString name for one of the potential players that hit the QB. No sack as the QB was not the ball carrier. For sacks please see sack_player or half_sack_*_player.
forced_fumble_player_1_teamcharacterTeam of one of the players with a forced fumble.
forced_fumble_player_1_player_idcharacterUnique identifier of one of the players with a forced fumble.
forced_fumble_player_1_player_namecharacterString name of one of the players with a forced fumble.
forced_fumble_player_2_teamcharacterTeam of one of the players with a forced fumble.
forced_fumble_player_2_player_idcharacterUnique identifier of one of the players with a forced fumble.
forced_fumble_player_2_player_namecharacterString name of one of the players with a forced fumble.
solo_tackle_1_teamcharacterTeam of one of the players with a solo tackle.
solo_tackle_2_teamcharacterTeam of one of the players with a solo tackle.
solo_tackle_1_player_idcharacterUnique identifier of one of the players with a solo tackle.
solo_tackle_2_player_idcharacterUnique identifier of one of the players with a solo tackle.
solo_tackle_1_player_namecharacterString name of one of the players with a solo tackle.
solo_tackle_2_player_namecharacterString name of one of the players with a solo tackle.
assist_tackle_1_player_idcharacterUnique identifier of one of the players with a tackle assist.
assist_tackle_1_player_namecharacterString name of one of the players with a tackle assist.
assist_tackle_1_teamcharacterTeam of one of the players with a tackle assist.
assist_tackle_2_player_idcharacterUnique identifier of one of the players with a tackle assist.
assist_tackle_2_player_namecharacterString name of one of the players with a tackle assist.
assist_tackle_2_teamcharacterTeam of one of the players with a tackle assist.
assist_tackle_3_player_idcharacterUnique identifier of one of the players with a tackle assist.
assist_tackle_3_player_namecharacterString name of one of the players with a tackle assist.
assist_tackle_3_teamcharacterTeam of one of the players with a tackle assist.
assist_tackle_4_player_idcharacterUnique identifier of one of the players with a tackle assist.
assist_tackle_4_player_namecharacterString name of one of the players with a tackle assist.
assist_tackle_4_teamcharacterTeam of one of the players with a tackle assist.
tackle_with_assistdoubleBinary indicator for if there has been a tackle with assist.
tackle_with_assist_1_player_idcharacterUnique identifier of one of the players with a tackle with assist.
tackle_with_assist_1_player_namecharacterString name of one of the players with a tackle with assist.
tackle_with_assist_1_teamcharacterTeam of one of the players with a tackle with assist.
tackle_with_assist_2_player_idcharacterUnique identifier of one of the players with a tackle with assist.
tackle_with_assist_2_player_namecharacterString name of one of the players with a tackle with assist.
tackle_with_assist_2_teamcharacterTeam of one of the players with a tackle with assist.
pass_defense_1_player_idcharacterUnique identifier of one of the players with a pass defense.
pass_defense_1_player_namecharacterString name of one of the players with a pass defense.
pass_defense_2_player_idcharacterUnique identifier of one of the players with a pass defense.
pass_defense_2_player_namecharacterString name of one of the players with a pass defense.
fumbled_1_teamcharacterTeam of one of the first player with a fumble.
fumbled_1_player_idcharacterUnique identifier of the first player who fumbled on the play.
fumbled_1_player_namecharacterString name of one of the first player who fumbled on the play.
fumbled_2_player_idcharacterUnique identifier of the second player who fumbled on the play.
fumbled_2_player_namecharacterString name of one of the second player who fumbled on the play.
fumbled_2_teamcharacterTeam of one of the second player with a fumble.
fumble_recovery_1_teamcharacterTeam of one of the players with a fumble recovery.
fumble_recovery_1_yardsdoubleYards gained by one of the players with a fumble recovery.
fumble_recovery_1_player_idcharacterUnique identifier of one of the players with a fumble recovery.
fumble_recovery_1_player_namecharacterString name of one of the players with a fumble recovery.
fumble_recovery_2_teamcharacterTeam of one of the players with a fumble recovery.
fumble_recovery_2_yardsdoubleYards gained by one of the players with a fumble recovery.
fumble_recovery_2_player_idcharacterUnique identifier of one of the players with a fumble recovery.
fumble_recovery_2_player_namecharacterString name of one of the players with a fumble recovery.
sack_player_idcharacterUnique identifier of the player who recorded a solo sack.
sack_player_namecharacterString name of the player who recorded a solo sack.
half_sack_1_player_idcharacterUnique identifier of the first player who recorded half a sack.
half_sack_1_player_namecharacterString name of the first player who recorded half a sack.
half_sack_2_player_idcharacterUnique identifier of the second player who recorded half a sack.
half_sack_2_player_namecharacterString name of the second player who recorded half a sack.
return_teamcharacterString abbreviation of the return team. Returns may occur on any of: interception, fumble, kickoff, punt, or blocked kicks.
return_yardsdoubleYards gained by the return team. Returns may occur on any of: interception, fumble, kickoff, punt, or blocked kicks.
penalty_teamcharacterString abbreviation of the team with the penalty.
penalty_player_idcharacterUnique identifier for the player with the penalty.
penalty_player_namecharacterString name for the player with the penalty.
penalty_yardsdoubleYards gained (or lost) by the posteam from the penalty.
replay_or_challengedoubleBinary indicator for whether or not a replay or challenge.
replay_or_challenge_resultcharacterString indicating the result of the replay or challenge.
penalty_typecharacterString indicating the penalty type of the first penalty in the given play. Will be NA if desc is missing the type.
defensive_two_point_attemptdoubleBinary indicator whether or not the defense was able to have an attempt on a two point conversion, this results following a turnover.
defensive_two_point_convdoubleBinary indicator whether or not the defense successfully scored on the two point conversion.
defensive_extra_point_attemptdoubleBinary indicator whether or not the defense was able to have an attempt on an extra point attempt, this results following a blocked attempt that the defense recovers the ball.
defensive_extra_point_convdoubleBinary indicator whether or not the defense successfully scored on an extra point attempt.
safety_player_namecharacterString name for the player who scored a safety.
safety_player_idcharacterUnique identifier for the player who scored a safety.
seasoninteger4 digit number indicating to which season(s) the specified timeframe belongs to.
cpdoubleNumeric value indicating the probability for a complete pass based on comparable game situations.
cpoedoubleFor a single pass play this is 1 - cp when the pass was completed or 0 - cp when the pass was incomplete. Analyzed for a whole game or season an indicator for the passer how much over or under expectation his completion percentage was.
seriesdoubleStarts at 1, each new first down increments, numbers shared across both teams NA: kickoffs, extra point/two point conversion attempts, non-plays, no posteam
series_successdouble1: scored touchdown, gained enough yards for first down.
series_resultcharacterPossible values: First down, Touchdown, Opp touchdown, Field goal, Missed field goal, Safety, Turnover, Punt, Turnover on downs, QB kneel, End of half
order_sequencedoubleColumn provided by NFL to fix out-of-order plays. Available 2011 and beyond with source "nfl".
start_timecharacterKickoff time in eastern time zone.
time_of_daycharacterTime of day of play in UTC "HH:MM:SS" format. Available 2011 and beyond with source "nfl".
stadiumcharacterName of the stadium
weathercharacterString describing the weather including temperature, humidity and wind (direction and speed). Doesn't change during the game!
nfl_api_idcharacterUUID of the game in the new NFL API.
play_clockcharacterTime on the playclock when the ball was snapped.
play_deleteddoubleBinary indicator for deleted plays.
play_type_nflcharacterPlay type as listed in the NFL source. Slightly different to the regular play_type variable.
special_teams_playdoubleBinary indicator for whether play is special teams play from NFL source. Available 2011 and beyond with source "nfl".
st_play_typecharacterType of special teams play from NFL source. Available 2011 and beyond with source "nfl".
end_clock_timecharacterGame time at the end of a given play.
end_yard_linecharacterString indicating the yardline at the end of the given play consisting of team half and yard line number.
fixed_drivedoubleManually created drive number in a game.
fixed_drive_resultcharacterManually created drive result.
drive_real_start_timecharacterLocal day time when the drive started (currently not used by the NFL and therefore mostly 'NA').
drive_play_countdoubleNumeric value of how many regular plays happened in a given drive.
drive_time_of_possessioncharacterTime of possession in a given drive.
drive_first_downsdoubleNumber of first downs in a given drive.
drive_inside20doubleBinary indicator if the offense was able to get inside the opponents 20 yard line.
drive_ended_with_scoredoubleBinary indicator the drive ended with a score.
drive_quarter_startdoubleNumeric value indicating in which quarter the given drive has started.
drive_quarter_enddoubleNumeric value indicating in which quarter the given drive has ended.
drive_yards_penalizeddoubleNumeric value of how many yards the offense gained or lost through penalties in the given drive.
drive_start_transitioncharacterString indicating how the offense got the ball.
drive_end_transitioncharacterString indicating how the offense lost the ball.
drive_game_clock_startcharacterGame time at the beginning of a given drive.
drive_game_clock_endcharacterGame time at the end of a given drive.
drive_start_yard_linecharacterString indicating where a given drive started consisting of team half and yard line number.
drive_end_yard_linecharacterString indicating where a given drive ended consisting of team half and yard line number.
drive_play_id_starteddoublePlay_id of the first play in the given drive.
drive_play_id_endeddoublePlay_id of the last play in the given drive.
away_scoreintegerThe number of points the away team scored. Is NA for games which haven't yet been played.
home_scoreintegerThe number of points the home team scored. Is NA for games which haven't yet been played.
locationcharacterEither Home if the home team is playing in their home stadium, or Neutral if the game is being played at a neutral location. This still shows as Home for games between the Giants and Jets even though they share the same home stadium.
resultintegerThe number of points the home team scored minus the number of points the visiting team scored. Equals h_score - v_score. Is NA for games which haven't yet been played. Convenient for evaluating against the spread bets.
totalintegerThe sum of each team's score in the game. Equals h_score + v_score. Is NA for games which haven't yet been played. Convenient for evaluating over/under total bets.
spread_linedoubleThe closing spread line for the game. A positive number means the home team was favored by that many points, a negative number means the away team was favored by that many points. (Source: Pro-Football-Reference)
total_linedoubleThe closing total line for the game. (Source: Pro-Football-Reference)
div_gameintegerBinary indicator of whether or not game was played by 2 teams in the same division.
roofcharacterOne of 'dome', 'outdoors', 'closed', 'open' indicating indicating the roof status of the stadium the game was played in. (Source: Pro-Football-Reference)
surfacecharacterWhat type of ground the game was played on. (Source: Pro-Football-Reference)
tempdoubleThe temperature at the stadium only for 'roof' = 'outdoors' or 'open'.(Source: Pro-Football-Reference)
winddoubleThe speed of the wind in miles/hour only for 'roof' = 'outdoors' or 'open'. (Source: Pro-Football-Reference)
home_coachcharacterFirst and last name of the home team coach. (Source: Pro-Football-Reference)
away_coachcharacterFirst and last name of the away team coach. (Source: Pro-Football-Reference)
stadium_idcharacterID of the stadium the game was played in. (Source: Pro-Football-Reference)
game_stadiumcharacterName of the stadium the game was played in. (Source: Pro-Football-Reference)
aborted_playdoubleBinary indicator if the play description indicates "Aborted".
successdoubleBinary indicator whether epa > 0 in the given play.
passercharacterName of the dropback player (scrambles included) including plays with penalties.
passer_jersey_numberdoubleJersey number of the passer.
rushercharacterName of the rusher (no scrambles) including plays with penalties.
rusher_jersey_numberdoubleJersey number of the rusher.
receivercharacterName of the receiver including plays with penalties.
receiver_jersey_numberdoubleJersey number of the receiver.
passdoubleBinary indicator if the play was a pass play (sacks and scrambles included).
rushdoubleBinary indicator if the play was a rushing play.
first_downdoubleBinary indicator if the play ended in a first down.
specialdoubleBinary indicator if "play_type" is one of "extra_point", "field_goal", "kickoff", or "punt".
playdoubleBinary indicator: 1 if the play was a 'normal' play (including penalties), 0 otherwise.
passer_idcharacterID of the player in the 'passer' column.
rusher_idcharacterID of the player in the 'rusher' column.
receiver_idcharacterID of the player in the 'receiver' column.
namecharacterName, as reported by MFL but reordered into FirstName LastName instead of Last, First
jersey_numberdoubleJersey number. Often useful for joins by name/team/jersey.
idcharacterID of the player in the 'name' column.
fantasy_player_namecharacterName of the rusher on rush plays or receiver on pass plays (from official stats).
fantasy_player_idcharacterID of the rusher on rush plays or receiver on pass plays (from official stats).
fantasycharacterName of the rusher on rush plays or receiver on pass plays.
fantasy_idcharacterID of the rusher on rush plays or receiver on pass plays.
out_of_boundsdouble1 if play description contains ran ob, pushed ob, or sacked ob; 0 otherwise.
home_opening_kickoffdouble1 if the home team received the opening kickoff, 0 otherwise.
qb_epadoubleGives QB credit for EPA for up to the point where a receiver lost a fumble after a completed catch and makes EPA work more like passing yards on plays with fumbles.
xyac_epadoubleExpected value of EPA gained after the catch, starting from where the catch was made. Zero yards after the catch would be listed as zero EPA.
xyac_mean_yardagedoubleAverage expected yards after the catch based on where the ball was caught.
xyac_median_yardagedoubleMedian expected yards after the catch based on where the ball was caught.
xyac_successdoubleProbability play earns positive EPA (relative to where play started) based on where ball was caught.
xyac_fddoubleProbability play earns a first down based on where the ball was caught.
xpassdoubleProbability of dropback scaled from 0 to 1.
pass_oedoubleDropback percent over expected on a given play scaled from 0 to 100.
fg_make_probdouble
make_fg_wpdouble
miss_fg_wpdouble
fg_wpdouble

Example

from sportsdataverse.nfl import load_nfl_pbp
from sportsdataverse.nfl.nfl_fourth_down import get_fg_wp

pbp = load_nfl_pbp([2023])
fourth = pbp.filter((pl.col("down") == 4) & pl.col("yardline_100").is_not_null())
out = get_fg_wp(fourth)
print(out[["fg_make_prob", "fg_wp"]].head())

get_go_wp​

get_go_wp(pbp_df: "Union[pl.DataFrame, 'pd.DataFrame']") -> 'pd.DataFrame'

Expected win probability of going for it on 4th down (nfl4th get_go_wp).

The fd_model 76-class yards-gained distribution is expanded per play; each outcome's hypothetical post-play game state (turnover-on-downs flip, +6 touchdown with the PAT/2-pt branch routed through get_2pt_wp, 6-second runoff, goal-to-go distance shrink) is scored with win probability and the end-of-game kneel-out clamps are applied; the option value is the prob-weighted WP.

Parameters

ParameterTypeDefaultDescription
pbp_dfUnion[DataFrame, 'DataFrame']Play-by-play frame (polars or pandas) of fourth-down situations carrying the prepared state columns (see module docstring). The frame is prepared internally if it lacks the derived columns.

Returns

A pandas copy of pbp_df plus go_wp (prob-weighted WP of going for it), first_down_prob (P(conversion)), wp_succeed (mean WP over conversion outcomes) and wp_fail (mean WP over failure outcomes). All are NaN when the fourth-down / WP models are unavailable (FD_MODEL_AVAILABLE / WP_MODEL_AVAILABLE).

No returns table is published for this function: no capture: it skips its own input preparation when posteam_spread is present, so it raises KeyError on enriched play-by-play, and a full unenriched season does not fit in memory.

Example

from sportsdataverse.nfl import load_nfl_pbp
from sportsdataverse.nfl.nfl_fourth_down import get_go_wp

pbp = load_nfl_pbp([2023])
fourth = pbp.filter((pl.col("down") == 4) & pl.col("yardline_100").is_not_null())
out = get_go_wp(fourth)
print(out[["go_wp", "first_down_prob"]].head())

get_punt_wp​

get_punt_wp(pbp_df: "Union[pl.DataFrame, 'pd.DataFrame']") -> 'pd.DataFrame'

Expected win probability of punting on 4th down (nfl4th get_punt_wp).

The punt landing distribution (punt_data: yardline_after / pct / muff per yardline_100) is joined per play; possession is flipped to the receiving team, with return-touchdown (yardline_after == 100) and muff (muff == 1) recoveries flipping the ball back to the punting team; each landing spot's ensuing-drive WP is scored and the option value is the prob-weighted WP from the punting team's perspective.

Parameters

ParameterTypeDefaultDescription
pbp_dfUnion[DataFrame, 'DataFrame']Play-by-play frame (polars or pandas) of fourth-down situations.

Returns

A pandas copy of pbp_df plus punt_wp. punt_wp is NaN where the punt distribution has no support for the play's yardline_100 (inside the punting team's own 31, where the table is empty — matching the R reference's left-join NA behavior) or when the WP model is unavailable.

No returns table is published for this function: no capture: it skips its own input preparation when posteam_spread is present, so it raises KeyError on enriched play-by-play, and a full unenriched season does not fit in memory.

Example

from sportsdataverse.nfl import load_nfl_pbp
from sportsdataverse.nfl.nfl_fourth_down import get_punt_wp

pbp = load_nfl_pbp([2023])
fourth = pbp.filter((pl.col("down") == 4) & pl.col("yardline_100").is_not_null())
out = get_punt_wp(fourth)
print(out[["punt_wp"]].head())

load_nfl_fp_curve​

load_nfl_fp_curve() -> 'pl.DataFrame'

Load the bundled NFL EP-by-yardline curve (no network).

Returns

yardline_own: Int64 (1..99), ep: Float64.

col_nametypedescription
yardline_ownintegerStarting yard line from the offense's own goal (1-99); one row per yard line of the bundled NFL EP-by-starting-yardline curve.
epdoubleUsing the scoring event probabilities, the estimated expected points with respect to the possession team for the given play.

Example

from sportsdataverse.nfl import load_nfl_fp_curve
curve = load_nfl_fp_curve()
curve.filter(curve["yardline_own"] == 30)

nfl_compute_results​

nfl_compute_results(teams: 'pl.DataFrame', games: 'pl.DataFrame', week_num: 'Union[str, int]', *, rng: 'Optional[np.random.Generator]' = None, elo: 'Optional[Mapping[str, float]]' = None, **kwargs: 'Any') -> 'Dict[str, pl.DataFrame]'

Compute NFL game results for one week of a season simulation.

Faithful port of nflseedR_compute_results (simulations_utils.R L183-290) — the 538-style dynamic ELO model initially coded by Lee Sharpe and rewritten by Sebastian Carl: home/away ELO difference plus rest (+25 per extra week), home field (+20), and a 1.2x postseason multiplier produce a win probability and a point spread estimate (elo_diff / 25); missing results for week_num are drawn from Normal(estimate, 13) and rounded away from zero. ELO ratings are updated from all of the week's results and carried to the next week via the returned teams frame.

Parameters

ParameterTypeDefaultDescription
teamsDataFrameTeams frame with sim and team columns. An elo column is added on first call (from elo or random Normal(1500, 150) initial ratings shared across sims) and must be carried between calls.
gamesDataFrameGames frame with sim, week, game_type, location, home_team/away_team, home_rest/ away_rest, and result columns.
week_numUnion[str, int]The week to simulate. Only rows with week == week_num and a missing result are filled.
rngOptional[Generator]Nonenumpy random generator; a fresh one is created when None.
eloOptional[Mapping[str, float]]NoneOptional mapping of team abbreviation to initial ELO rating.

Returns

{"teams": teams, "games": games} with updated ELO ratings and filled results.

col_nametypedescription
teams.simintegerSimulated season identifier the team row belongs to, carried through from the input teams frame.
teams.teamcharacterTeam abbreviation, carried through from the input teams frame.
teams.confcharacterConference of the team (AFC or NFC), carried through from the input teams frame.
teams.divisioncharacterDivision of the team (e.g. "AFC East"), carried through from the input teams frame.
teams.elodoubleDynamic ELO rating after applying the shifts from the simulated week's results; carried into the next week's call so ratings evolve over the simulated season.
games.simintegerSimulated season identifier the game row belongs to.
games.game_typecharacterGame type of the row - REG for regular season or the playoff round (WC, DIV, CON, SB).
games.weekcharacterWeek key used by the simulation engine - regular season week numbers as strings and postseason rounds as WC/DIV/CON/SB.
games.away_teamcharacterTeam abbreviation of the away team.
games.home_teamcharacterTeam abbreviation of the home team.
games.away_restintegerDays of rest for the away team before the game (feeds the ELO rest adjustment of 25 points per extra week).
games.home_restintegerDays of rest for the home team before the game.
games.locationcharacterGame site indicator - "Home" applies the +20 ELO home-field adjustment, "Neutral" (Super Bowl) does not.
games.resultintegerHome margin (home score minus away score). Rows of the simulated week that were missing are filled from Normal(estimate, 13) rounded away from zero; all other rows pass through unchanged.

Example

from sportsdataverse.nfl.nfl_simulations import nfl_compute_results
out = nfl_compute_results(teams, games, week_num="5")
teams, games = out["teams"], out["games"]

nfl_draft_projection​

nfl_draft_projection(seasons: 'List[int]', target_class: 'int', *, lam: 'float' = 100.0, return_as_pandas: 'bool' = False) -> "Union[pl.DataFrame, 'pd.DataFrame']"

Draft outcome projection for one draft class.

Trains the closed-form ridge (expected car_av) and the IRLS logistic (hit_prob = P(seasons_started >= 3)) on matured classes (season <= target_class - 5) and scores the target_class prospects. Features: standardized combine measurables (+ imputation flags), draft round/pick/log(pick), position one-hots.

Parameters

ParameterTypeDefaultDescription
seasonsList[int]Draft classes to load (training classes beyond the maturity boundary are filtered out automatically).
target_classintThe draft class to score.
lamfloat100.0Ridge regularization strength.
return_as_pandasboolFalseIf True, returns a pandas dataframe.

Returns

One row per target_class prospect: gsis_id:Utf8, target_class:Int64, position:Utf8, pred_car_av:Float64, hit_prob:Float64, outcome_rank:Int64 (dense rank, best first). Empty training or prediction slice returns a zero-row frame.

col_nametypedescription
gsis_idcharacternflverse gsis player id of the drafted prospect (character join key).
target_classintegerThe draft class scored (training uses matured classes <= target_class - 5).
positioncharacterDraft position group of the prospect.
pred_car_avdoublePredicted career value - closed-form ridge on standardized combine measurables + round/pick/log(pick) + position one-hots; the label is nflverse w_av (PFR weighted career Approximate Value).
hit_probdoubleP(multi-year starter) - ridge-regularized IRLS logistic on the same features, hit := seasons_started >= 3.
outcome_rankintegerDense rank of pred_car_av within the class (best prospect = 1).

Example

from sportsdataverse.nfl.nfl_draft_model import nfl_draft_projection
proj = nfl_draft_projection(list(range(2000, 2020)), 2019)
proj.sort("outcome_rank").head()

nfl_fantasy_projection​

nfl_fantasy_projection(seasons: 'List[int]', target_season: 'int', *, scoring: 'Union[Dict[str, float], str]' = 'ppr', calibrate: 'bool' = True, return_as_pandas: 'bool' = False) -> "Union[pl.DataFrame, 'pd.DataFrame']"

Fantasy-points projection: deterministic scoring of the Marcel component

stats plus a fitted per-position linear calibration.

Scores nfl_player_projection's projected component counting stats (rate x projected games) under the scoring format, then applies the fitted fp_calibration (a, b) from POSITION_CONSTANTS (calibrated = a + b * raw). The FantasyPros consensus is used only as a concurrent-validity oracle in the tests — never as an input.

Parameters

ParameterTypeDefaultDescription
seasonsList[int]History seasons to load.
target_seasonintThe season being projected.
scoringUnion[Dict[str, float], str]'ppr'"ppr" / "half" / "standard" or a custom points-per-unit dict.
calibrateboolTrueApply the fitted per-position calibration.
return_as_pandasboolFalseIf True, returns a pandas dataframe.

Returns

player_id:Utf8, target_season:Int64, position_group:Utf8, proj_fantasy_points:Float64, proj_fantasy_points_per_game:Float64, position_rank:Int64.

col_nametypedescription
player_idcharacternflverse gsis player id (character join key).
target_seasonintegerThe season being projected (features use strictly earlier seasons only).
position_groupcharacternflverse offensive position group (QB/RB/WR/TE plus fringe groups).
proj_fantasy_pointsdoubleProjected season fantasy points - the Marcel component rates x projected games scored under the scoring format, with the fitted per-position linear calibration applied by default.
proj_fantasy_points_per_gamedoubleProjected fantasy points per game (proj_fantasy_points / projected games).
position_rankintegerDense rank of proj_fantasy_points within the position group (best = 1).

Example

from sportsdataverse.nfl.nfl_projection import nfl_fantasy_projection
fp = nfl_fantasy_projection([2021, 2022, 2023], 2024)
fp.filter(pl.col("position_group") == "WR").head()

# Custom scoring

fp_std = nfl_fantasy_projection([2021, 2022, 2023], 2024, scoring="standard")

nfl_kicker_rating​

nfl_kicker_rating(seasons: 'Union[int, List[int]]', *, as_of: 'Optional[Tuple[int, int]]' = None, return_as_pandas: 'bool' = False) -> "Union[pl.DataFrame, 'pd.DataFrame']"

Environment-adjusted kicker FG-over-expected ratings.

Loads pbp FG attempts for seasons, computes the environment-adjusted expected make probability per kick, and aggregates to per (season, kicker) FGOE (raw + EB-shrunk with the fitted K_fg).

Parameters

ParameterTypeDefaultDescription
seasonsUnion[int, List[int]]Season or list of seasons.
as_ofOptional[Tuple[int, int]]NoneOptional (season, week); uses only kicks strictly before that point (the as-of leakage boundary for mid-season ratings).
return_as_pandasboolFalseWhen True, return a pandas.DataFrame.

Returns

Per (season, kicker_player_id): kicker, team, fg_att, fg_made, exp_made, fgoe, fgoe_per_att, fgoe_shrunk, rating (100 +/- 15 z of fgoe_shrunk). Empty seasons yield a zero-row frame with this schema.

col_nametypedescription
seasonintegerSeason of the rating.
kicker_player_idcharacternflverse kicker GSIS id (Utf8 join key).
kickercharacterDisplay name of the kicker (e.g. J.Tucker), from kicker_player_name.
teamcharacterTeam of the kicker's most recent attempt in the window.
fg_attintegerField-goal attempts.
fg_madeintegerField goals made.
exp_madedoubleSum of environment-adjusted make probabilities (expected makes).
fgoedoubleField goals made over expected (fg_made - exp_made).
fgoe_per_attdoubleFGOE per attempt.
fgoe_shrunkdoubleEmpirical-Bayes shrunk FGOE per attempt, fgoe_per_att * att / (att + K_fg).
ratingdouble100 +/- 15 z-score of fgoe_shrunk within the frame.

Example

from sportsdataverse.nfl.nfl_kicker_rating import nfl_kicker_rating
r = nfl_kicker_rating([2023])
print(r.head())

# Mid-season as-of rating

r = nfl_kicker_rating([2023], as_of=(2023, 10))

nfl_line_grades​

nfl_line_grades(seasons: 'Union[int, List[int]]', *, return_as_pandas: 'bool' = False) -> "Union[pl.DataFrame, 'pd.DataFrame']"

Team-season OL pass-block + DL pass-rush grades (opponent-adjusted, EB-shrunk).

Loads pbp, builds the matchup pressure grid, opponent-adjusts it, grades both units on a 0-100 board (50 + 15*z*n/(n+K_pressure)), and joins PFR's independent team pressure measurement (load_nfl_pfr_advstats(stat_type="def", summary_level="season"), prss summed to team / pbp dropbacks faced) as pfr_pressure_pct.

Parameters

ParameterTypeDefaultDescription
seasonsUnion[int, List[int]]Season or list of seasons (PFR advstats coverage is 2018+).
return_as_pandasboolFalseWhen True, return a pandas.DataFrame.

Returns

Per (season, team): raw + adjusted pressure rates and dropback counts, ol_pass_block_grade, dl_pass_rush_grade, pfr_pressure_pct. Empty seasons yield a zero-row frame.

col_nametypedescription
seasonintegerSeason of the grade.
teamcharacterTeam abbreviation.
dropbacks_offintegerOffensive dropbacks (qb_dropback plays).
pressures_allowedintegerSacks plus QB hits allowed on the team's own dropbacks.
pressure_rate_alloweddoublepressures_allowed / dropbacks_off (raw).
dropbacks_defintegerOpponent dropbacks faced on defense.
pressures_generatedintegerSacks plus QB hits generated against opponent dropbacks.
pressure_rate_generateddoublepressures_generated / dropbacks_def (raw).
adj_pressure_rate_alloweddoubleOpponent-adjusted allowed pressure rate (additive fixed point, league-mean-centered).
adj_pressure_rate_generateddoubleOpponent-adjusted generated pressure rate (additive fixed point, league-mean-centered).
ol_pass_block_gradedoubleOL pass-block grade, 50 + 15 * z * n/(n + K_pressure) on the inverted adjusted allowed rate.
dl_pass_rush_gradedoubleDL pass-rush grade, 50 + 15 * z * n/(n + K_pressure) on the adjusted generated rate.
pfr_pressure_pctdoublePFR team pressures (prss summed, traded 2TM/3TM rows excluded) divided by pbp dropbacks faced.

Example

from sportsdataverse.nfl.nfl_line_grades import nfl_line_grades
g = nfl_line_grades([2023])
print(g.sort("dl_pass_rush_grade", descending=True).head())

nfl_player_projection​

nfl_player_projection(seasons: 'List[int]', target_season: 'int', *, return_as_pandas: 'bool' = False) -> "Union[pl.DataFrame, 'pd.DataFrame']"

Marcel-style next-season player projection with delta-method aging.

Loads weekly player stats + rosters, aggregates to season rates, and for every player visible in seasons strictly before target_season (the as-of-date leakage boundary) produces a recency-weighted rate blend regressed toward the volume-weighted position mean by k / (k + reliability), scaled by the position aging-curve ratio aging_mult(proj_age) / aging_mult(current_age). The aging curve is fit only on the same pre-target history.

Parameters

ParameterTypeDefaultDescription
seasonsList[int]History seasons to load (seasons >= target_season are discarded by the leakage split).
target_seasonintThe season being projected.
return_as_pandasboolFalseIf True, returns a pandas dataframe.

Returns

One row per projected player: player_id:Utf8, target_season:Int64, position_group:Utf8, proj_age:Float64, proj_ppg:Float64, proj_volume:Float64, proj_games:Float64, aging_mult:Float64, reliability:Float64 plus proj_<stat>_rate component-rate columns. Empty history returns a zero-row frame.

col_nametypedescription
player_idcharacternflverse gsis player id (character join key).
target_seasonintegerThe season being projected (features use strictly earlier seasons only - the as-of-date leakage boundary).
position_groupcharacternflverse offensive position group (QB/RB/WR/TE plus fringe groups).
proj_agedoubleProjected age at the target season (age at last visible season + season gap).
proj_ppgdoubleProjected PPR fantasy points per game - recency-weighted rate blend regressed toward the volume-weighted position mean by k/(k + reliability), scaled by the damped aging-curve ratio.
proj_volumedoubleProjected position-specific opportunity volume (QB = pass attempts, RB = carries + targets, WR/TE = targets).
proj_gamesdoubleRecency-weighted mean of historical games played.
aging_multdoubleApplied aging multiplier - the damped, clamped ratio aging_curve(proj_age) / aging_curve(current_age).
reliabilitydoubleRecency-weighted volume sum - the shrinkage evidence weight.
proj_completions_ratedoubleProjected per-game pass completions (Marcel blend x aging ratio).
proj_attempts_ratedoubleProjected per-game pass attempts (Marcel blend x aging ratio).
proj_passing_yards_ratedoubleProjected per-game passing yards (Marcel blend x aging ratio).
proj_passing_tds_ratedoubleProjected per-game passing touchdowns (Marcel blend x aging ratio).
proj_interceptions_ratedoubleProjected per-game interceptions thrown (Marcel blend x aging ratio).
proj_carries_ratedoubleProjected per-game rush attempts (Marcel blend x aging ratio).
proj_rushing_yards_ratedoubleProjected per-game rushing yards (Marcel blend x aging ratio).
proj_rushing_tds_ratedoubleProjected per-game rushing touchdowns (Marcel blend x aging ratio).
proj_receptions_ratedoubleProjected per-game receptions (Marcel blend x aging ratio).
proj_targets_ratedoubleProjected per-game targets (Marcel blend x aging ratio).
proj_receiving_yards_ratedoubleProjected per-game receiving yards (Marcel blend x aging ratio).
proj_receiving_tds_ratedoubleProjected per-game receiving touchdowns (Marcel blend x aging ratio).
proj_receiving_air_yards_ratedoubleProjected per-game receiving air yards (Marcel blend x aging ratio).
proj_fumbles_lost_ratedoubleProjected per-game fumbles lost (Marcel blend x aging ratio).

Example

from sportsdataverse.nfl.nfl_projection import nfl_player_projection
proj = nfl_player_projection([2021, 2022, 2023], 2024)
proj.sort("proj_ppg", descending=True).head()

# Pandas round-trip

proj_pd = nfl_player_projection([2021, 2022, 2023], 2024, return_as_pandas=True)

nfl_ratings​

nfl_ratings(seasons: 'int | list[int]', *, as_of_date: 'datetime.date | None' = None, config: 'RatingsConfig | None' = None, return_as_pandas: 'bool' = False) -> 'pl.DataFrame | pd.DataFrame'

One row per team: the native NFL ratings spine (off/def/ST EPA).

Public orchestrator over efficiency_ratings + special_teams_ratings. Loads play-by-play + schedule via load_nfl_pbp / load_nfl_schedule, joins each game's gameday onto the plays, optionally applies the as-of-date leakage boundary (only plays from games with gameday < as_of_date are used), then fits both components and reshapes into one wide per-team table with dense ranks and a net z-score.

The loaded pbp is down-selected to the ridge columns before any fit so no market column (spread_line / vegas_wp) can leak into the ratings (the binding non-market boundary).

Parameters

ParameterTypeDefaultDescription
seasonsint | list[int]A single season (e.g. 2023) or a list of seasons pooled into one combined fit.
as_of_datedate | NoneNoneWhen given, only plays from games strictly before this date are used (mirrors what was knowable heading into that date). None (default) uses the full season(s).
configRatingsConfig | NoneNoneTuning knobs forwarded to both component fits; defaults to RatingsConfig.
return_as_pandasboolFalseIf True, returns a pandas DataFrame.

Returns

A DataFrame with one row per team_id: season (Int64 -- the single passed season, null for a pooled multi-season call), team_id (Utf8), adj_off_epa / adj_def_epa / adj_st_epa / adj_net (Float64; adj_net is offense minus defense -- special teams stays a separate column), games (Int64), off_rank / def_rank / net_rank (Int64; def_rank ascends -- fewer EPA allowed ranks better), net_z (Float64). Zero-row, correctly-typed when the seasons have no data or as_of_date filters out every play.

col_nametypedescription
seasonintegerSeason the ratings cover (null for a pooled multi-season fit).
team_idcharacternflverse team abbreviation (character join key, e.g. "KC").
adj_off_epadoubleOpponent-adjusted offensive EPA per play (higher is better); competitive-play ridge fit.
adj_def_epadoubleOpponent-adjusted defensive EPA allowed per play (lower is better); competitive-play ridge fit.
adj_st_epadoubleOpponent-adjusted special-teams EPA per play (ridge on special==1 plays; 0.0 for teams with no special-teams plays in the window).
adj_netdoubleOpponent-adjusted net efficiency (adj_off_epa minus adj_def_epa; special teams not folded in).
gamesintegerNumber of games the team played in the fitted window.
off_rankintegerDense rank on adj_off_epa descending (best offense = 1).
def_rankintegerDense rank on adj_def_epa ascending (fewer EPA allowed ranks better).
net_rankintegerDense rank on adj_net descending (best net rating = 1).
net_zdoubleZ-score of adj_net across the 32 teams.

Example

from sportsdataverse.nfl import nfl_ratings
ratings = nfl_ratings(2023)
ratings.sort("net_rank").head()

# As-of-date leakage boundary

import datetime as dt
week6 = nfl_ratings(2023, as_of_date=dt.date(2023, 10, 12))