Filed under:

# Developing a predictive Bill James Game Score: Part two

You wouldn't think dreaming up a formula to predict something before it happens would be this difficult...

As this would be my first endeavor into predictive formulas, I knew my logic had to be sound. So, the fact that the results that were being returned seemed optimistic meant nothing if my algorithm assembled of random numbers didn't make sense.

First, a quick recap of what the formula looked like last we checked in:

pBJGS = 100 + ((18 - xFIP of previous 12 starts) x 10) - (wOBAvLHH x (60 x Number of LHH in Opposing Lineup)) - (wOBAvRHH x (60 x Number of RHH in Opposing Lineup)) - (wOBA of 1-4 hitters x 50) - (wOBA of 5-8 hitters x 32.5) - (BABIP x 20) - BPERA

And here's what a sample of three randomly selected games looked like when using it:

Date Game Pitcher Hand xFIP from previous 12 starts wOBA vs. L # of LHH in top 8 wOBA v. R # of RHH in top 8 wOBA 1-4 wOBA 5-8 BABIP BPERA pBJGS Actual
Aug 5/2014 LAA @ LAD Clayton Kershaw L 1.81 0.251 1 0.263 7 0.374 0.325 0.271 3.96 99.5475 56
Sept 23/2014 LAA @ OAK Sonny Gray R 3.72 0.287 4 0.266 4 0.372 0.302 0.277 4.11 75.77625 74
July 7/2014 CWS @ BOS Clay Buchholz R 4.72 0.321 3 0.301 5 0.353 0.312 0.285 4.93 51.036875 57

One of the first questions I was asked when showing it around was how I decided on the weights of the top 4 hitters over the rest of the lineup. It was a more-than-fair question, and I had no answer. I decided to look up exactly what percentage of at bats the top 4 hitters of a lineup actually had throughout a season. That worked out to be about 58%. I had been accidentally remarkably close in assigning 50 and 32.5 then, since that would suggest 60.6% of at-bats. Remarkably close isn't close enough. I had to fix it.

Another fix — accurately addressed by Timmy Kennedy in the comments section of my last post — was the arbitrary setpoint of 18 from which I then subtracted the xFIP.

The list continued when I asked Beyond the Box Score's very own Stephen Loftus for some help. The absolute reality of this formula had hit me. I'd started in an okay place, but it needed to be rebuilt. It was like moving into a house with a pretty great basement, but with a second floor that looked awfully flimsy. If this was going to be worth any actual use, I had to put a lot more work into it.

Where to start

I decided to start with the parts of the formula that I liked or at least thought were effective. In my head, it made the most sense to start with a score of 100, add roughly 100 points, and then subsequently subtract 150 points. Considering the amount of variables that get added to the pitcher's score (xFIP) and the amount of variables that get subtracted from the pitcher's score (wOBA, BABIP, BPERA), it is clear to me now that this wasn't the correct way to weight the formula, but that's just a little tease for the conclusion.

This meant taking a league average pitcher, putting him against a league average lineup, and making sure the formula turns out a score as close to 50 as possible. As stated before, I started with what I liked, and it wasn't much. Adjusting for luck and the ballpark is all I kept. The league median BPERA over the past five seasons was 4.27; the league average BABIP-against for a pitcher was 0.292. Multiply the BABIP by 20 and you get 5.84. That means, at the end of the formula, luck and ballpark are worth roughly 10 points off of a pitcher's score. That seemed about right to me.

That meant I had 140 points left to subtract using the remaining variables. After playing around with it for many hours, this was the formula that finally existed on paper:

pBJGS = 100 + ((10 - xFIP of previous 12 starts) x 16.7) - ((((wOBAvLHH x Number of LHH in Opposing Lineup) + (wOBAvRHH x Number of RHH in Opposing Lineup) / 8) x 143.03) - (wOBA of 1-4 hitters x 170.598) - (wOBA of 5-8 hitters x 113.732) - (BABIP x 20) - BPERA

Everything was specifically designed to make exactly league average numbers, as mentioned before, express a '50' Game Score by the end. That, thankfully, had worked. But not much else:

Date Game Pitcher Name Hand xFIP from previous 12 starts wOBA vs. L # of LHH in top 8 wOBA v. R # of RHH in top 8 wOBA 1-4 wOBA 5-8 BABIP BPERA pBJGS Actual
League Average 4.00 0.330 4 0.321 4 0.328 0.328 0.292 4.27 50.273495
Aug 5/2014 LAA @ LAD Clayton Kershaw L 1.81 0.251 1 0.263 7 0.374 0.325 0.271 3.96 89.224103 56
Sept 23/2014 LAA @ OAK Sonny Gray R 3.72 0.287 4 0.266 4 0.372 0.302 0.277 4.11 58.01085 74
July 7/2014 CWS @ BOS Clay Buchholz R 4.72 0.321 3 0.301 5 0.353 0.312 0.285 4.93 37.772633 57

I was willing to admit my sample size was too small, but these numbers were all off by substantial margins such that I knew it was back to the drawing board.

Perhaps you expert logicians out there could help me. I have moved beyond this iteration of the formula (as hinted above) to one that is much neater and will be rolled out next week. That being said, I am genuinely confused by how bad this version of the formula was. It seems at least close to logically sound. Take a league average pitcher and a league average lineup to get a Game Score of 50. Take a great pitcher against an average lineup and the score should be higher.