CSW+: The Next Step
On April 16th, Alex Fast released an excellent article on a new metric called CSW. If you are unfamiliar with that stat I highly recommend that you check out Alex’s article before continuing. The formula for CSW is very simple:
Called Strikes + Whiffs
It takes into account called strikes, swinging strikes (including blocked ones), swinging pitchouts, and foul tips into the glove, while excluding foul balls, then dividing by the total pitches thrown in an outing. One of the most interesting aspects of CSW is that it correlates with SIERA better than other commonly used metrics like called strikes, whiffs, and swinging strikes. Again, please read Alex’s article if you haven’t already.
Since the release of that article, I’ve noticed that CSW is getting a lot more attention (as it should!) on Twitter, podcasts, and the like. Now even very early on, one of the most asked questions was: “Is this stat team or league adjusted?” and early on the answer was no. However, after some discussions with Nick and Alex and them having to bear with many of my ramblings through the Discord group, we came up with a complimentary statistic called CSW+.
In my attempts to develop a league and team adjusted companion to CSW, I went straight to FanGraphs. That site is one of the most informative places on the internet for baseball information and statistics. One of the most valuable (and I suspect under-utilized corners of the site) is the glossary section, where they outline the methods behind many of their statistics. I initially went directly to the wRC+ page because I figured that would be a good place to start, but after a bit more digging I came across the ERA-/FIP-/xFIP- page and decided to model CSW+ after those statistics. The formula for CSW+ is as follows:
So yeah, if you are familiar with any of the pitching “minus” statistics, this should look very similar. The first thing to make clear here is that CSW+ is calculated per game pitched. That is due to the inclusion of the Team Factor, where the Team Factor is calculated as a team’s collective (batting) CSW divided by the league CSW (Note: The Team Factor is not league adjusted). There will be more examples and tables below, but as a quick example: As of May 15th, the Boston Red Sox batters had a CSW of 27.4% and the league average was 28.9%, so their Team Factor is calculated as follows: 27.4/28.9 = 0.948 (which can change slightly depending on how many decimal points you use).
CSW+: The Process
The thing I had the most difficulty with during this whole process is how to apply the Team Factor, since CSW will be dynamic with each game played and we don’t want to make it difficult to calculate. So initially here is how we will proceed:
- For our calculations of CSW+ we will use the daily updated CSW to calculate the Team Factor.
- We will update a community Team Factor and League adjustment on the 1st and 15th of each month going forward on the open source CSW sheet that Alex posts on Twitter each day.
Taking a closer look at each team’s batter’s CSW in the 2019 season, it seems as though the things may have stabilized already. So I’m guessing that updating the Team Factors twice per month should suffice for the time being.
Let’s also take a closer look at a single team, we’ll use the Toronto Blue Jays as an example here, to see how much variability there is we see in daily CSW. The CSW reported is a cumulative CSW (e.g. in the first game the Jays posted a 28.7% CSW, in the second game was 31.9%, but the average between the two was 30.48%). By the 25th game of the season, the daily CSW was changing by about 0.5%, and at this point in the season (about game 50), that has dropped to about 0.3%. I suspect that we have reached our stabilization point, but I don’t have any stats to back that up.
|Game Number||Team||Game Date||CSW||% Change|
Below is an extension of the table we just saw, except that it contains the daily change in CSW for each team.
CSW+: League and Team Factor
We are going to keep this section short and sweet. We see that the NL has a slightly higher CSW compared to the AL:
And here are the Team Factors as of May 15th. We can see that teams like the Miami Marlins, San Diego Padres, and the Blue Jays post the highest CSW rates and the Minnesota Twins, Atlanta Braves, and Houston Astros are on the lower end. I want to reiterate that the Team Factor is calculated from a team’s hitters, not pitchers.
CSW+ in Action
Enough with the theory and the calculations. We all know you’re here to see this sucker in action. Here are the results from May 23rd, 2019:
|Batting Team||Pitching Team||Game Date||Pitcher||CSW||CSW+|
Now let’s highlight two pitchers from the table and go through the calculations:
Game CSW: 33%
Team Factor (Opponent): 1.024 (Rockies)
NL CSW: 29.1%
CSW+ = ((33 + (33 – (33*1.024))) / 29.1) * 100 = 111
Game CSW: 32.7%
Team Factor (Opponent): 0.947 (Astros)
AL CSW: 28.4%
CSW+ = ((32.7 + (32.7 – (32.7*0.947))) / 28.4) * 100 = 121
And here we go: an interesting result. Even though Lyles posted a higher CSW, his CSW+ is lower than that of Giolito. This is because Giolito did it against a much tougher opponent. The Colorado Rockies hitters have posted a higher than average CSW rate, while the Astros are well below league average. Also notice that Giolito had the best performance of the night when using CSW+ despite posting the fifth best CSW rate. Even with just this one example, we can see how CSW+ can inform us relative to opponent quality.
Almost immediately the community asked for a standardized CSW, and I really hope we delivered. As was the case with CSW, CSW+ should only be used on a micro level to see how pitchers performed over a single start. Future work will consist of the next steps with be to calculate a season long CSW+ for each pitcher. Perhaps that will be as simple as taking a mean of a pitcher’s CSW+ from each start. That is a problem for later, but in the meantime maybe someone out there will take it upon themselves to explore more of what the CSW family of metrics has to offer.
Featured Image by Justin Paradis (@freshmeatcomm on Twitter)