What's the probability that an NFL team with a given win/loss record makes the playoffs?

For example, if I know that a team has a record of 11 wins and 5 losses, but no nothing about the records of any other teams, what is the probability that this team makes the playoffs?

The current (simplified) NFL rules for playoffs are that the team must either have the best record in its division (three other teams), OR have one of the best two records among teams in the conference that did not win the division.

So I suppose what I’m trying to figure out is:

  1. What is the probability that at least one out of three teams has a better win-loss record? This is easy if I assume that the win/loss records of each team in the division are independent (they aren’t because each team plays each team in the division twice), but how inaccurate will that make the final answer?
  2. What is the probability that at least two other teams had a better win/loss record, but did not win their division? I really have no idea where to begin with this. Again, the odds of two teams having a better win/loss record is easy, but I’m not sure how to incorporate them winning their division.

(I mentioned 11-5 as an example record, but really I’m trying to solve this in general for any number of wins/losses, teams in a division, divisions, and teams in a conference)

Solutions Collecting From Web of "What's the probability that an NFL team with a given win/loss record makes the playoffs?"

In any realistic model, it’s going to be very difficult to get a closed-form solution. So you should try a simulation. Run a million or so simulations of NFL seasons according to your model. In those million simulations, say there are a total of $N$ cases where a team had an $11-5$ record, and of those the team made the playoffs in $A$ cases. Then
$A/N$ should be a good approximation of the probability.

This is only a long comment, rather than an answer, mostly to lay out the (current) structure of the NFL schedule, in case anyone wants to run some simulations.

There are two “conferences” in the NFL, each consisting of 16 teams divided into 4 “divisions” of 4 teams each. Six teams in each conference make the playoffs: the winner of each division, and two more teams with the best records among the 12 non-winners. (There are elaborate tie-breaking procedures that frequently come into play, but these are irrelevant for the OP’s problem, where it’s only the won-loss records that matter, not who holds them.)

For the OP’s problem, we need only consider one conference. Call the divisions N, S, E, and W, and the teams in them N1, N2, N3, N4, etc. In a typical NFL season, each team plays the other 3 teams in its own division twice (once at home and once away); each team in N plays each team in S while each team in E plays each team in W; Ni and Si play Ei and Wi for i=1 to 4; finally, each team plays the 4 teams in one of the divisions in the other conference. (The exact match-ups rotate from season to season, but this is irrelevant for the OP’s problem.) The total number of games each team plays is thus 6+4+2+4=16.

The structure of the schedule makes it conceivable for all four teams in a division to finish 3-13 (by all four teams winning their home games against their three division opponents and losing the rest) and hence send a division “winner” to the playoffs with a 3-13 record. It is not possible to make the playoffs with a 2-14 record: you simply can’t have 11 teams in a single conference with 14 or more losses. (There are 96 games played within the conference and 64 games played against the other conference, so the total number of losses cannot exceed 150.)

Conversely, it’s possible to miss the playoffs with a 13-3 record, but not with a 14-2 record. In practice, teams that go 11-5 or better rarely miss the playoffs, and teams that go 8-8 or worse rarely make it. (I think both extremes have occurred, but someone would have to check how often.) It can and does happen on occasion that a 10-6 team will miss the playoffs while a 9-7 division winner makes it. Them’s the breaks.

It could be worth running simulations with coin flips to determine the outcomes of games, to see how the statistics stack up against the historical statistics. It might also be of interest to alter the schedule, say by eliminating inter-conference play and having Ni and Si play everyone in E and W except Ei and Wi, for i=1 to 4, to see if this has any effect on the stats.

Edit

I made a BIG mistake in my interpretation of the simulation – revised results have been substituted.

Answer

A team with an 11/5 record has an 99.97% chance of making the playoffs.

Simulation

In coming up with an answer for this question, I have carried out the simulation for this 10,000 times (i.e. 12 teams x 10,000 seasons = 120,000 playoff spots) and my results are:

Win/Loss    As Div. winner    As wildcard     DNQ    Chance
 16/0               4               0           0      100%
 15/1              86               0           0      100%
 14/2             568               0           0      100%
 13/3            2793              19           0      100%
 12/4            8392             294           0      100%
 11/5           18328            3009           6       99.97%
 10/6           24678           13393         851       97.81%
  9/7           18315           19822       18018       67.91%
  8/8            6029            3447       53405       15.07%
  7/9             778              16       55155        1.42%
  6/10             29               0       39021        0.07%
  5/11              0               0       21360        0%
  4/12              0               0        8881        0%
  3/13              0               0        2680        0%
  2/14              0               0         545        0%
  1/15              0               0          73        0%
  0/16              0               0           5        0%
 Total         80,000          40,000     200,000

Limitations

  1. I ignored ties – there have been 19 ties under the current system introduced in 1974 out of approximately 10,096 games played ~ 0.19%.
  2. I assumed each team had an equal chance in every game – this is a huge assumption but I have no idea how it impacts on the actual results. Edit I reran the simulation assigning each team a different skill value from a normal distribution (mean 500, std dev 150). The best team had about an 80% chance of winning against the worst team from the sample. This produced essentially the same distribution so this doesn’t matter.

Model

For those who are interested, this is the visual basic code I used:

Public Enum Conference
    AFC = 0
    NFC
End Enum

Public Enum Division
    East = 0
    North
    South
    West
End Enum

Public Enum Ranking
    One = 0
    Two
    Three
    Four
End Enum

Public Enum Results
    NotPlayed
    Won
    Tied
    Lost
End Enum

Public Class Team
    Public Property Skill As Integer = 50
    Public Property Wins As Integer
    Public Property Ties As Integer
    Public Property Losses As Integer
    Public Property Conference As Conference
    Public Property Division As Division
    Public Property Rank As Ranking
    Public Overrides Function ToString() As String
        Return String.Format("{0} - {1} - {2}", Conference.ToString(), Division.ToString, Rank.ToString)
    End Function
End Class

Public Class Game
    Private Shared rnd As New Random

    Private _Team1 As Team
    Public Property Team1() As Team
        Get
            Return _Team1
        End Get
        Set(ByVal value As Team)
            If Not value.Equals(Team2) Then
                _Team1 = value
            End If
        End Set
    End Property

    Private _Team2 As Team
    Public Property Team2() As Team
        Get
            Return _Team2
        End Get
        Set(ByVal value As Team)
            If Not value.Equals(Team1) Then
                _Team2 = value
            End If
        End Set
    End Property

    Private _Result1 As Results
    Public Property Result1() As Results
        Get
            Return _Result1
        End Get
        Set(ByVal value As Results)
            _Result1 = value
            Select Case value
                Case Results.Lost
                    _Result2 = Results.Won
                Case Results.NotPlayed, Results.Tied
                    _Result2 = value
                Case Results.Won
                    _Result2 = Results.Lost
            End Select
        End Set
    End Property

    Private _Result2 As Results
    Public Property Result2() As Results
        Get
            Return _Result2
        End Get
        Set(ByVal value As Results)
            _Result2 = value
            Select Case value
                Case Results.Lost
                    _Result1 = Results.Won
                Case Results.NotPlayed, Results.Tied
                    _Result1 = value
                Case Results.Won
                    _Result1 = Results.Lost
            End Select
        End Set
    End Property

    Public ReadOnly Property Teams As IEnumerable(Of Team)
        Get
            Return Result.Keys
        End Get
    End Property

    Public ReadOnly Property Result As IDictionary(Of Team, Results)
        Get
            Return New Dictionary(Of Team, Results) From {{Team1, Result1},
                                                          {Team2, Result2}}
        End Get
    End Property

    Public Sub Reset()
        Result1 = Results.NotPlayed
    End Sub

    Public Sub Play(Optional Tie As Single = 0)
        Dim draw = rnd.NextDouble
        If draw >= 1 - Tie Then
            Result1 = Results.Tied
        Else
            Dim res = rnd.Next(Team1.Skill + Team2.Skill)
            'Console.Write("{0}: ", res)
            If res < Team1.Skill Then
                Result1 = Results.Won
            Else
                Result1 = Results.Lost
            End If
        End If
        'Console.WriteLine("{0}", Result1)
    End Sub
End Class

Public Class Season
    Private _Teams(Conference.NFC, Division.West, Ranking.Four) As Team
    Public ReadOnly Property Teams As Team(,,)
        Get
            Return _Teams
        End Get
    End Property

    Public ReadOnly Property ConferenceWinners As IEnumerable(Of Team)
        Get
            Dim retVal As New List(Of Team)
            Dim winners = From t As Team In Teams
                          Order By t.Wins + t.Ties * 0.5 Descending
                          Group By Div = t.Conference * 10 + t.Division
                          Into Teams = Group
            For Each c In winners
                retVal.Add(c.Teams(0))
            Next
            Return retVal
        End Get
    End Property

    Public ReadOnly Property WildCards As IEnumerable(Of Team)
        Get
            Dim retVal As New List(Of Team)
            Dim runnersUp = From t As Team In Teams
                            Where Not ConferenceWinners.Contains(t)
                            Order By t.Wins + t.Ties * 0.5 Descending
                            Group By Conference = t.Conference
                            Into teams = Group

            For Each c In runnersUp
                retVal.AddRange(c.teams.Take(2))
            Next
            Return retVal
        End Get
    End Property

    Public ReadOnly Property Results As Dictionary(Of Team, Tuple(Of Integer, Integer, Integer))
        Get
            Dim retval As New Dictionary(Of Team, Tuple(Of Integer, Integer, Integer))
            For Each t In Teams
                retval.Add(t, New Tuple(Of Integer, Integer, Integer)(t.Wins, t.Losses, t.Ties))
            Next
            Return retval
        End Get
    End Property

    Private _Games As New List(Of Game)
    Public ReadOnly Property Games() As IEnumerable(Of Game)
        Get
            Return _Games
        End Get
    End Property

    Public Sub ClearResults()
        For Each g In Games
            g.Reset()
        Next
        For Each t In Teams
            t.Wins = 0
            t.Losses = 0
            t.Ties = 0
        Next
    End Sub

    Public Property TieChance As Single = 0

    Public Sub Play()
        For Each g In Games
            g.Play(TieChance)
        Next
        For Each t In Teams
            Dim teamGames = From g In Games
                            Where g.Teams.Contains(t)
                            Select g.Result(t)

            t.Wins = teamGames.Where(Function(r) r = NFL.Results.Won).Count
            t.Losses = teamGames.Where(Function(r) r = NFL.Results.Lost).Count
            t.Ties = teamGames.Where(Function(r) r = NFL.Results.Tied).Count
        Next
    End Sub

    Public Sub New()
        For Each i In [Enum].GetValues(GetType(Conference))
            For Each j In [Enum].GetValues(GetType(Division))
                For Each k In [Enum].GetValues(GetType(Ranking))
                    If Teams(i, j, k) Is Nothing Then
                        Teams(i, j, k) = New Team With {.Conference = i, .Division = j, .Rank = k}
                    End If
                    Dim t1 = Teams(i, j, k)
                    For Each x In [Enum].GetValues(GetType(Conference))
                        For Each y In [Enum].GetValues(GetType(Division))
                            For Each z In [Enum].GetValues(GetType(Ranking))
                                If Teams(x, y, z) Is Nothing Then
                                    Teams(x, y, z) = New Team With {.Conference = x, .Division = y, .Rank = z}
                                End If
                                Dim t2 = Teams(x, y, z)
                                If Not t1.Equals(t2) Then ' different teams
                                    If Not Games.Where(Function(g) (g.Teams.Contains(t1) And g.Teams.Contains(t2))).Any Then 'games do not exist
                                        If i = x Then 'Same conference
                                            If j = y Then 'Same division (play twice)
                                                _Games.add(New Game With {.Team1 = t1, .Team2 = t2})
                                                _Games.add(New Game With {.Team1 = t1, .Team2 = t2})
                                            ElseIf j \ 2 = y \ 2 Then 'paired division
                                                _Games.add(New Game With {.Team1 = t1, .Team2 = t2})
                                            ElseIf k = z Then
                                                _Games.add(New Game With {.Team1 = t1, .Team2 = t2})
                                            End If
                                        Else 'different conference
                                            If j = y Then 'same division
                                                _Games.add(New Game With {.Team1 = t1, .Team2 = t2})
                                            End If
                                        End If
                                    End If
                                End If
                            Next
                        Next
                    Next
                Next
            Next
        Next
    End Sub
End Class

Module Module1

    Sub Main()
        Dim res(16, 1) As Integer
        Dim sameDiv As Integer
        For i = 1 To 10000
            Console.WriteLine(i)
            Dim s As New Season
            s.Play()
            For Each j In s.ConferenceWinners
                res(j.Wins, 0) += 1
            Next
            For Each k In s.WildCards
                res(k.Wins, 1) += 1
            Next
            For Each l In [Enum].GetValues(GetType(Conference))
                If s.WildCards.Where(Function(w) w.Conference = l)(0).Division = s.WildCards.Where(Function(w) w.Conference = l)(1).Division Then
                    sameDiv += 1
                End If
            Next
        Next
        For i = 16 To 0 Step -1
            Console.WriteLine("Wins: {0}, Div Winner: {1}, Wildcard {2}", i, res(i, 0), res(i, 1))
        Next
        Console.WriteLine("Same Div: {0}", sameDiv)
        Console.ReadKey()
    End Sub

End Module