Front Office Football Central

Front Office Football Central (https://forums.operationsports.com/fofc//index.php)
-   FOFC Archive (https://forums.operationsports.com/fofc//forumdisplay.php?f=27)
-   -   Power Rankings Formulas (https://forums.operationsports.com/fofc//showthread.php?t=35181)

gottimd 01-26-2005 06:53 AM

Power Rankings Formulas
 
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

Quote:

Originally Posted by Passacaglia
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

Code:

CLS
PRINT "Date of last game"
INPUT D$

Code:


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. 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.

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

Quote:

Originally Posted by gottimd
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.


All times are GMT -5. The time now is 08:23 PM.

Powered by vBulletin Version 3.6.0
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.