PDA

View Full Version : Power Rankings Formulas


gottimd
01-26-2005, 06:53 AM
Does anyone have access to or developed a power ranking module for teams in the NFL? Sort of like the Sagarin ratings. I can't seem to find exact formula's just websites giving the rankings.

bryce
01-26-2005, 04:42 PM
one of the more popular ones (albeit simplistic), if memory serves, is to take points allowed, multiply by 10, and divide by points scored. subtract that from 100, and you get your power ranking. add 3 pts to the home team.

so, for example:
NE = 437 PF, 260 PA, so power ranking calc is:
260*10 = 2600
2600/437 = 5.95
power ranking: 100-5.95 = 94.05

PHIL:
386 points scored, 260 points against:
260*10=2600
2600/386 = 6.74
100-6.74 = 93.26

NE at home would be favored by 3.79; philly at home by 2.21. neutral field = ne by .79.

sovereignstar
01-26-2005, 04:58 PM
Yikes! That's very simplistic.

jbmagic
01-26-2005, 05:03 PM
Is FOF power ranking based on how the NFL does there power ranking?

Passacaglia
01-26-2005, 05:17 PM
FOF uses the Solecismic power ranking -- I think that's the same as the one he uses for college football on his web site? I didn't know the NFL had a power ranking system.

sovereignstar
01-26-2005, 05:22 PM
FOF uses the Solecismic power ranking -- I think that's the same as the one he uses for college football on his web site? I didn't know the NFL had a power ranking system.

There might be some similarities between the FOF power ranking formula and the one he uses for his college football rankings, but they're definetly not the same. I'm almost positive that the formula used in the game takes teams' active roster strengths into consideration.

Passacaglia
01-26-2005, 05:30 PM
Oh, yeah, duh, you're totally right about that -- you can tell between preseason ad regular season.

Mr. Wednesday
01-26-2005, 09:05 PM
One straightforward option would be Bradley-Terry (conceptually pretty easy, I can elaborate if anyone wants). Vanilla B-T has the drawback of being purely result-oriented (no accounting for scoring), but the general approach is flexible enough to admit some variations. Any sort of ranking is going to be of questionable accuracy considering the small sample size it has to consider.

I know Ken Massey does ratings for other college sports, does he do any pro sports?

bryce
01-26-2005, 10:03 PM
I've had this site bookmarked for months now:

http://teamrankings.com/

Mike Greenfield developed it for College hoops, but has since expanded it to the other majors...

Mr. Wednesday
01-26-2005, 11:41 PM
It looks like his underlying methodology may be based on Bradley-Terry, since he talks about developing victory probabilities and optimizing for predicted total fractional wins equalling actual total wins. It looks like his probability functions are quite interesting, however, probably considerably more involved than a naive basic Bradley-Terry ranking.

gottimd
01-27-2005, 07:54 PM
Can you explain or provide a link to the Bradley-Terry method/Formula? I tried doing a search, but cannot find what I am looking for. Basically, I want to see how they use it in the NFL, or how to write a formula to use for the NFL.

Ragone
01-27-2005, 08:58 PM
I could do a power ranking for nhl clubs :)

1. Tampa Bay
2. Every other team

Huckleberry
01-27-2005, 11:01 PM
CLS
PRINT "Date of last game"
INPUT D$

DEFINT I-N, P, S, W
DEFDBL A-H, O, Q-R, T-V, X-Z

OPEN "I", #7, "TITLE.DB"
INPUT #7, NA$
CLOSE #7

OPEN "I", #1, "PARAM.DB"
INPUT #1, NTEAM, NGAME, NSKED, NIT
REM NTEAM IS NUMBER OF TEAMS TO BE RATED
REM NGAME IS NUMBER OF GAMES PLAYED
REM NSKED IS HIGHEST NUMBER OF GAMES FOR ANY ONE TEAM
REM NIT IS NUMBER OF ITERATIONS ALLOWED
CLOSE #1

DIM XZ(NTEAM, NSKED), AVE(NTEAM), N(NTEAM, NSKED), GR(2), IJ(2), RA(NTEAM)
DIM WL(3, NTEAM), PF(NTEAM), PA(NTEAM), IRAN(NTEAM), P$(NTEAM + 1)

OPEN "O", #8, "ITERATE.DB"

DLIM = .5#

FOR I = 1 TO 64
IF 1# + DLIM = 1# THEN GOTO 170
DLIM = DLIM / 2#
NEXT I

170 DLIM = DLIM * 8#

FAC = 1# / 8#
XZM = 0#

FOR I = 1 TO NTEAM
XZ(I, 0) = 70#
XZM = XZM + XZ(I, 0)
NEXT I

TEAM = NTEAM
XZM = XZM / TEAM

FOR I = 1 TO NTEAM
XZ(I, 0) = EXP(FAC * (XZ(I, 0) - XZM))
AVE(I) = 0#
FOR J = 1 TO NSKED
N(I, J) = 0
NEXT J
NEXT I

REM FOR MWS OF 2/3, FACH = 0.709662972611906#
REM FOR MWS OF 3/4, FACH = 0.532247229458930#
REM FOR MWS OF ~.53, FACH = 1, MWS = 1-EXP(-1/16)/2
REM TO EFFECTIVELY ELIMINATE MOV, SET MWS = FACH = 0.999

MWS = 3 / 4
FACH = .53224722945893#

FOR I = 1 TO NTEAM
PF(I) = 0
PA(I) = 0
NEXT I

FOR I = 1 TO NTEAM
FOR J = 1 TO 3
WL(J, I) = 0
NEXT J
NEXT I

OPEN "I", #2, "SCORE.DB"
FOR I = 1 TO NGAME
INPUT #2, I1, S1, I2, S2, OT

REM I1 IS INDEX OF FIRST TEAM IN GAME
REM S1 IS SCORE FOR FIRST TAME IN GAME
REM I2 IS INDEX OF SECOND TEAM IN GAME
REM S2 IS SCORE FOR SECOND TEAM IN GAME
REM OT IS OVERTIME, 1 = YES, 0 = NO

PF(I1) = PF(I1) + S1
PA(I1) = PA(I1) + S2
PF(I2) = PF(I2) + S2
PA(I2) = PA(I2) + S1

IF S1 = S2 THEN
WL(3, I1) = WL(3, I1) + 1
WL(3, I2) = WL(3, I2) + 1
ELSE
IF S1 > S2 THEN
WL(1, I1) = WL(1, I1) + 1
WL(2, I2) = WL(2, I2) + 1
ELSE
WL(2, I1) = WL(2, I1) + 1
WL(1, I2) = WL(1, I2) + 1
END IF
END IF

DEL1 = S1 - S2
DEL2 = S2 - S1
RMP1 = DEL1 * (S1 / (S1 + S2))
RMP2 = DEL2 * (S2 / (S1 + S2))

IF S1 = S2 THEN
GR(1) = .5#
GR(2) = .5#
ELSE
IF S1 > S2 THEN
IF OT = 1 THEN
GR(1) = MWS
GR(2) = 1# - GR(1)
ELSE
GR(1) = 1# - ((1 - (1 - (EXP(-RMP1 / 8)) / 2)) * FACH)
GR(2) = 1# - GR(1)
END IF
ELSE
IF OT = 1 THEN
GR(2) = MWS
GR(1) = 1# - GR(2)
ELSE
GR(2) = 1# - ((1 - (1 - (EXP(-RMP2 / 8)) / 2)) * FACH)
GR(1) = 1# - GR(2)
END IF
END IF
END IF

IJ(1) = I1
IJ(2) = I2

FOR K = 1 TO 2
IJK = IJ(K)
AVE(IJK) = AVE(IJK) + GR(K)
FOR J = 1 TO NSKED
IF N(IJK, J) = 0 THEN GOTO 890
NEXT J

890 N(IJK, J) = IJ(3 - K)
NEXT K
NEXT I

FOR II = 1 TO NIT
ISA = 1
IF (II \ NIT) * NIT = II THEN ISA = 0

FOR NNN = -3 TO 2
NN = NNN
IF NN < 0 THEN NN = 0
NN1 = NN + 1
IF NNN < 0 THEN NN1 = 0
MARK = 0
FOR I = 1 TO NTEAM
XZ(I, NN1) = XZ(I, NN)
IF N(I, 1) = 0 THEN GOTO 1070
MM = NN
IF N(I, 1) < I THEN MM = NN1
F = 1# / (XZ(I, NN) + XZ(N(I, 1), MM))
FOR J = 2 TO NSKED
IF N(I, J) = 0 THEN GOTO 1020
MM = NN
IF N(I, J) < I THEN MM = NN1
F = F + 1# / (XZ(I, NN) + XZ(N(I, J), MM))
NEXT J

1020 XX = AVE(I) / F
XU = XX - XZ(I, NN)
IF XU = 0# THEN GOTO 1070
IF ABS(XU) > DLIM * XX THEN MARK = MARK + 1
XZ(I, NN1) = XX

1070 NEXT I

IF MARK = 0 THEN GOTO 1110

NEXT NNN

Q1 = 0#
Q2 = 0#

FOR I = 1 TO NTEAM
XZ(I, O) = LOG(XZ(I, 2) / XZ(I, 1))
XZ(I, 1) = LOG(XZ(I, 3) / XZ(I, 2))
Q1 = Q1 + XZ(I, 0) * XZ(I, 1)
Q2 = Q2 + XZ(I, 0) * XZ(I, 0)
NEXT I

RB = Q1 / Q2
RBL = 1# - .1# / MARK
IF RB > RBL THEN RB = RBL
Q = 1# / (1# - RB)

1080 IF ISA = 0 THEN OPEN "O", #9, "NEWGUESS.DB"

FOR I = 1 TO NTEAM
Q3 = Q
IF ABS(XZ(I, 0)) <= ABS(XZ(I, 1)) THEN GOTO 1090
Q4 = XZ(I, 0) / (XZ(I, 0) - XZ(I, 1))
IF Q4 > Q3 THEN GOTO 1090
IF Q4 < 1# THEN Q4 = 1#
Q3 = Q4

1090 R = LOG(XZ(I, 2)) + XZ(I, 1) * Q3
IF ISA = 0 THEN PRINT #9, R / FAC + XZM
XZ(I, 0) = EXP(R)
NEXT I
IF ISA > 0 THEN GOTO 1099
CLOSE #9
PRINT "#9 CLOSED"

1099 NEXT II
NN1 = 0
II = NIT

1110 PRINT #8, USING " ####"; II;
PRINT #8, " ITERATIONS. CRITERION UNMET FOR";
PRINT #8, USING " ###"; MARK;
PRINT #8, " TEAMS."
CLOSE #8

FOR I = 1 TO NTEAM
IRAN(I) = I
RA(I) = LOG(XZ(I, NN1)) / FAC + XZM
NEXT I
NTM1 = NTEAM - 1
OPEN "O", #6, "NFLRATE.TXT"

1580 PRINT #6, " "; NA$
1590 PRINT #6, " Based on";
1600 PRINT #6, USING " ####"; NGAME;
1610 PRINT #6, " games between";
1620 PRINT #6, USING " ###"; NTEAM;
1630 PRINT #6, " teams"
1640 PRINT #6, " Through games of "; D$
1650 PRINT #6, " "
1660 PRINT #6, " Rank Team Rating ";
1670 PRINT #6, " PF PA W L T"
1680 PRINT #6, " "
1710 REM PERCOLATOR SORT OF RATINGS
1720 LLA = 1
1730 FOR L = LLA TO NTM1
1740 IF RA(IRAN(L)) >= RA(IRAN(L + 1)) THEN GOTO 1810
1750 IT = IRAN(L)
1760 IRAN(L) = IRAN(L + 1)
1770 IRAN(L + 1) = IT
1780 IF L = 1 THEN GOTO 1810
1790 LLA = L - 1
1800 GOTO 1730
1810 NEXT L
1816 FOR M = 1 TO NTEAM STEP NTEAM + 1
1817 OPEN "I", #3, "TEAM.DB"
1818 FOR K = 1 TO NTEAM
1819 INPUT #3, N$
1820 MP = M + NTEAM - 1
1821 IF NTEAM < MP THEN MP = NTEAM
1822 FOR L = M TO MP
1823 I = IRAN(L)
1824 IF K = I THEN GOTO 1827
1825 NEXT L
1826 GOTO 1828
1827 P$(L + 1 - M) = N$
1828 NEXT K
1829 CLOSE #3
1831 MP = M + NTEAM - 1
1832 IF NTEAM < MP THEN MP = NTEAM
1835 FOR L = M TO MP
1836 I = IRAN(L)
1840 PRINT #6, USING " ### \ \"; L; P$(L + 1 - M);
1843 PRINT #6, USING " #####.##"; RA(I);
1847 PRINT #6, USING " ### ###"; PF(I); PA(I);
1848 PRINT #6, USING " ## ## ##"; WL(1, I); WL(2, I); WL(3, I)
1890 NEXT L
1895 NEXT M
1899 CLOSE #6
1900 END

My code for my NFL ratings. I don't publish them, but you can verify results for my ratings for other sports at this site (http://www.hornfans.com/recruiting/huckleberry/). Each sport has slightly different formulas, of course. Basic concept is the same.

The algorithm is based on David Rothman's, which can be found and is explained here (http://homepages.cae.wisc.edu/~dwilson/rsfc/rate/rothman.html).

However, I take into account score ratio while he does not. The game score formula is where that difference comes into play.

If you have any questions, let me know.

VPI97
01-27-2005, 11:34 PM
I haven't seen BASIC since 1985

j/k :)

gottimd
01-28-2005, 07:13 AM
Got anything just a little more simplified? I was hoping to find something that would predict the outcome of a game based on some factors of a team, in excel format. I tried the first posts formula, but it basically looks like all of the home team's are absically favored all of the time, even if it is the #1 team (away) playing the #32 team.

Any ideas or links of where I could find something to do this?

Mr. Wednesday
01-30-2005, 02:07 AM
Can you explain or provide a link to the Bradley-Terry method/Formula? I tried doing a search, but cannot find what I am looking for. Basically, I want to see how they use it in the NFL, or how to write a formula to use for the NFL.Look up KRACH, which is an application of Bradley-Terry to college hockey.

I think Ken Butler's page gives enough details to be able to figure out how to implement it.
http://www.mscs.dal.ca/~butler/krachexp.htm

The whole thing is just a framework, though... KRACH is about the most naive possible implementation. A really simple tweak adjusts the result function so that margin of victory is taken into account, and one can conceive of more complex things to change (indeed, I have).

Mr. Wednesday
01-30-2005, 02:10 AM
Dola, a naive Bradley-Terry ranking will take only past wins and losses into account. No home field consideration (which might be accomplished in a number of different ways), nothing for margin of victory (also subject to myriad approaches), etc.