CSW+: The Next Step

Colin Charles introduces the newest member of the CSW family: CSW+. CSW+ is a league and team adjusted statistic to partner with CSW, to show pitcher's performance against different levels of competition.

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
Total Pitches


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


CSW+: A Compliment to 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:

  1. For our calculations of CSW+ we will use the daily updated CSW to calculate the Team Factor.
  2. 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.


% Change in Daily CSW
Game Number Team Game Date CSW % Change
1 TOR 2019-03-28 28.70370 NA
2 TOR 2019-03-29 30.48780 6.216
3 TOR 2019-03-30 27.55906 -9.606
4 TOR 2019-03-31 29.23077 6.066
5 TOR 2019-04-01 28.79257 -1.499
23 TOR 2019-04-21 30.84848 -1.007
24 TOR 2019-04-23 30.75581 -0.300
25 TOR 2019-04-24 30.84452 0.288
26 TOR 2019-04-26 30.68427 -0.520
27 TOR 2019-04-27 30.50804 -0.574
46 TOR 2019-05-19 29.94195 -0.308
47 TOR 2019-05-20 30.05243 0.369
48 TOR 2019-05-21 29.95176 -0.335
49 TOR 2019-05-22 29.98014 0.095
50 TOR 2019-05-23 29.94987 -0.101


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:


League CSW as of 15-May-2019
League League CSW
AL 28.4%
NL 29.1%


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.


TeamFactor as of 15-May-2019
Team CSW TeamFactor
MIA 31.2% 1.081
SD 30.6% 1.060
TOR 30.3% 1.048
DET 29.7% 1.028
MIL 29.7% 1.027
TB 29.7% 1.026
COL 29.6% 1.024
TEX 29.6% 1.023
PHI 29.5% 1.022
ARI 29.5% 1.020
BAL 29.2% 1.012
KC 29.2% 1.012
SEA 29.1% 1.009
CWS 29.1% 1.006
WSH 29.0% 1.004
CHC 28.9% 1.001
SF 28.9% 1.001
OAK 28.9% 1.000
NYM 28.8% 0.996
NYY 28.7% 0.994
STL 28.6% 0.991
CLE 28.4% 0.984
CIN 28.2% 0.976
PIT 28.1% 0.971
LAD 28.0% 0.970
LAA 28.0% 0.970
BOS 27.4% 0.949
HOU 27.4% 0.947
ATL 27.3% 0.946
MIN 26.3% 0.912


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:


CSW & CSW+ from 23-May-2019
Batting Team Pitching Team Game Date Pitcher CSW CSW+
WSH NYM 2019-05-23 Steven Matz 35.2% 120
CHC PHI 2019-05-23 Aaron Nola 34.4% 117
NYY BAL 2019-05-23 Dylan Bundy 34.1% 120
COL PIT 2019-05-23 Jordan Lyles 33% 111
HOU CWS 2019-05-23 Lucas Giolito 32.7% 121
CLE TB 2019-05-23 Ryan Yarbrough 32.3% 117
CWS HOU 2019-05-23 Corbin Martin 31.8% 109
SF ATL 2019-05-23 Kevin Gausman 31.8% 108
ATL SF 2019-05-23 Madison Bumgarner 31.4% 112
BAL NYY 2019-05-23 Masahiro Tanaka 30.5% 104
MIA DET 2019-05-23 Matthew Boyd 29.4% 94
TOR BOS 2019-05-23 Ryan Weber 28% 94
LAA MIN 2019-05-23 Martin Perez 27.3% 98
PHI CHC 2019-05-23 Jon Lester 26.2% 88
DET MIA 2019-05-23 Trevor Richards 25.3% 86
TB CLE 2019-05-23 Adam Plutko 24.1% 82
NYM WSH 2019-05-23 Stephen Strasburg 18.8% 65
PIT COL 2019-05-23 Antonio Senzatela 14.9% 53


Now let’s highlight two pitchers from the table and go through the calculations:


Jordan Lyles

Game CSW: 33%

Team Factor (Opponent): 1.024 (Rockies)

NL CSW: 29.1%

CSW+ = ((33 + (33 – (33*1.024))) / 29.1) * 100 = 111


Lucas Giolito

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)

Colin Charles

I am a data analyst for Pitcher List currently residing in Winnipeg, MB. I've been an R user for 9+ years and a baseball fan for much longer.

10 responses to “CSW+: The Next Step”

  1. Jon says:

    Commenting only to say I love the work you guys do. Great job on CSW and CSW+

  2. J says:

    This is great. I always have a hard time trying to remember what’s good for CSW, so that makes my life a lot easier. It would be cool if eventually you guys could make leaderboards.

  3. Colin Charles says:

    There is an open source CSW that Alex Fast had been maintaining this year. I don’t know if a leaderboard is in the cards this year, but Nick has said that the next version of PL will be the year of stats. So maybe next March

  4. Nick says:

    Awesome, thanks for this!
    The CSW and CSW+ formulas assume that called and swinging strikes have equal value. I wonder if this is true, and if the formula might be improved if a swinging strike was weighted a bit more than a called strike.

    • Colin Charles says:

      Thanks for the comment. Alex and I have had this conversation as well. Hopefully we can come up with a solution to properly weigh a called strike versus a whiff and release a wCSW in the future

  5. Greg Burda says:

    This is awesome data, but it’s entirely possible to enhance the stat with the CSW rate for each player in a given lineup, not the Team avg CSW. For example, in Giolito’s performance vs. the Astros I believe Springer and Correa did not play (or something like that). If a pitcher’s individual performance is to be praised the actual lineup construction he faced should be accounted for.

    • Colin Charles says:

      That is a fantastic idea. Calculating the CSW for each batter would be fairly straightforward, and you’re right it would be more reflective on who the pitcher actually faced. I have a few other things on the go right now, but I will keep this in mind. Thanks for the comment.

Leave a Reply

Your email address will not be published. Required fields are marked *

Account / Login