The Bye Week: help or hinder?

Back in 2019, I wrote a couple of articles for IL Indoor about doubleheader weekends. The first dealt with how often teams won the first and second games of doubleheaders, while the second looked more into how home floor advantage plays into this. The obvious next step would have been to see how bye weekends affect teams but for some reason, I never went there. Let’s go there now.

Continue reading

The NLL Immaculate Grid

About a week ago, someone asked me if my NLL stats database could help create an “immaculate grid” game for the NLL. I had never heard of an immaculate grid, so I looked it up. For those of you who are as uninformed as I was, it’s a game where you have a grid of three columns and three rows, and each column and row has a “category”, like players who played for a specific team, or players who have accomplished some statistical feat. The idea is to find a player who matches the categories for both the column he is in and the row he is in, and to do this for all nine combinations of row and column categories.

For example, say we have a column with the category “Played for Colorado Mammoth” and a row that says “Played for Halifax Thunderbirds”, you need to find players who have played for both of these teams. In this case, there are only six matches so you could enter Rhys Duch, Connor Watson, Ryan Benesch, Mike Burke, Stephen Keogh, or Chet Koneczny and you’d be right. For things like “Played with Buffalo Bandits” and “Played with Toronto Rock”, there are 51 players who match both, and there are an amazing 76 players who have played for both the Bandits and the original Knighthawks.

There are nine squares to fill in, and you get nine guesses before you are done. You can fill in any number of player names and then click “Guess”, and you are told how many you got right. Note that you are not told which ones you got right, just the number. The fewer guesses you take to get all nine correct, the better. Of course, there are no prizes except bragging rights.

Like I said, I’d never heard of the game but it’s pretty easy to understand. I knew my database contains enough information to create this game, so I did. It was actually quite simple. Here’s how it works.

I created a Javascript program that reads the database and creates one category for each team it finds. I limited it to those teams who played at least one season after 2000 since the data on older teams (teams like the Washington Wave, Detroit Turbos, Baltimore Thunder, etc.) isn’t always complete. I also added some statistical categories in there, like 1000 points or 400 goals in a career, 100 points or 50 goals in a season, and 6 goals or 10 points in a game. This program picks six random categories (three rows and three columns). For each row/column pair, we make a list of players who match the first category and a separate list of players who match the second category. Then we find the players who appear in both lists. If there is any row/column pair that has no players in common, we throw this option out and start over. For example, the intersection of “Played for Columbus Landsharks” and “Played for Georgia Swarm” contains no players, so any grid containing that combination is thrown out.

Screenshot of NLL Grid

I believe for a baseball immaculate grid game, you are also required to pick different players for each of the nine grid spots, even if one player qualifies more than once. However I relaxed that restriction because the NLL only has 30-odd seasons and a total of a little over 1700 players. One of the grids created while I was testing this contained a column for “Played for Vancouver Warriors” and two of the rows were “Scored 100 points in a season” and “Scored 1000 career points”. The only player who matches both* is Shawn Evans, so the “unique player” restriction would make this grid impossible to solve.

* – This is not true. Mitch Jones played for the Warriors and also scored 100 points in a season, but his 100 points was split over two different teams. This doesn’t negate his accomplishment, but it means that the way I match the categories won’t find it. I could fix it but it’s a lot of work (not for me – the extra work would have to be done every time the site loads which would make it slower for everyone) and Jones is literally the only player in NLL history who falls into that category. I have some ideas on other ways to fix it but for now, we have this restriction.

Back to Javascript. I generate a grid of 6 categories and save the categories in a file, along with a date. I generate grids and dates for each of the next 30 days, making sure we don’t have any repeat grids. I make sure that no grid cells will contain zero players, but we don’t actually store the matches in this file. This is all done on my laptop. I upload this file to the web site. Every 30 days, I’ll need to do this again.

When you go to the web site, I load this file, find the categories for today, and display the grid. You enter the player names, and there’s an autofill feature to help you. When you click Guess, I check how many of the names match the list for that grid cell, and tell you how many matching names you have. If that number is 9, you win. Otherwise I reduce the number of guesses you have left (starting at 9). If that number is now zero, you lose, otherwise we keep going.

If the game is over (you win, you lose, or you click the “Give up” button), we show you which cells contain a correct guess, and display the list of matching players for each cell. We also display a little mini-grid of green and white squares and a Copy button so you can post your results to social media, showing everyone how NLL-savvy you are.

The site uses local storage to keep track of your guesses and whether you completed the game today. If you refresh the page, we’ll remember how many guesses you’ve taken and the names you’ve already entered. We also keep track of how many wins and losses you have, and if you have a winning streak. This is browser- and machine-specific, so if you start the game on your desktop and then move to your phone, it won’t remember your guesses. The only way to fix that is to have some sort of universal login, and force users to authenticate before playing. But that’s a lot of work for me and I suspect there’s not enough benefit for you. Many people would not bother to create a user account and log in every time they want to play, so they just wouldn’t play at all.

But remember that in a few months if someone shows you a screenshot of “50 wins, 0 losses”, or even a fully-green grid for one particular day – they could easily have clicked “Give up” on one browser or machine to get the answers, and then played again on a different browser or machine.

Strategy

The one thing that gets me when dealing with the statistical categories is that the second category is not always as related as you might think. For example, if the column is “Played for Toronto Rock” and “Scored 400 career goals”, I think “OK, Colin Doyle and Josh Sanderson are easy, but no other Rock players come to mind. I don’t think Blaine Manning got to 400 goals in his career, did he?” (Answer: no, he ended up with 307.) But while the “Played for the Rock” thing is important, don’t overthink it. We’re actually looking for players who did two separate things: (1) scored 400 career goals and (2) played for the Rock at some point in their career. We’re not necessarily looking for players who scored 400 with the Rock. So Dan Dawson, Lewis Ratcliff, Ryan Benesch, and Shawn Williams also qualify.

Relocations and rebrandings are ignored, so the Albany Attack, San Jose/Washington/Vancouver Stealths, and Vancouver Warriors are considered five distinct teams. Similarly for the two Swarms, the two Rushes, the original Knighthawks and the Thunderbirds, the Wings/Black Wolves/FireWolves, and so on. Also the “original Philadelphia Wings” and “original Rochester Knighthawks” are distinct from the current Wings and Knighthawks.

“Played for” a team means that a player appeared in at least one regular season or playoff game with that team. Anthony Cosmo was traded to the Minnesota Swarm at one point in his career, but he never actually played a game with them, so that doesn’t count. Similarly, Ryan Benesch was drafted by the San Jose Stealth, but he was traded to the Rock before playing a game with them so he won’t match the “Played for San Jose Stealth” category.

The game is more challenging than you might expect. If you’re trying to think of players who played for both the Saskatchewan Rush and Buffalo Bandits, you may remember Alex Buque or Dan Lintner, but it may also bring up some “Oh right!” moments, like Jeff Shattler and Chris Corbeil. But the older teams can be very tough. There are six players who played for both the Ottawa Rebel and New Jersey Storm – do you remember them? Do the names Mike Benedict, Paul Talmo, or Joe Finstad ring any bells? If you’ve been around the league long enough they might, but I started watching the NLL in 2001 and I don’t recognize those names. On some days, 9/9 won’t be that bad, but on other days, you may struggle to get 5/9.

Good luck!

Player records in 2023

New league records

Dhane Smith

  • Dhane Smith – 96 assists, beating his own record of 94 from last year. He also sets the assists per game record of 5.33, beating his old 5.22.
  • Jake Withers – faceoff percentage of 78.6%, just edging out Geoff Snider’s 78.4% from 2012.
  • James Barclay wins the “Ice Bath award” with 28 blocked shots, beating Reid Bowering’s 26 from last year.
  • Mitch Jones – 100 turnovers, just beating out Jeff Teat from this year with 97. The former record holder was Mark Matthews with 88 in 2016.
  • Christian Del Bianco – 1080:19 minutes beating his own record of 1074:44 from 2019.
  • The Toronto Rock had a goal differential of +70, beating the 2015 Edmonton Rush who were +64.

New player records

These are players (non-rookies) who beat their own personal bests in a particular stat. Congratulations to all of the players who did that, but I can’t list them all here since there are dozens for each stat. I’ll only list the top few where the player blew the old stat out of the water.

Points

  • Andrew Kew, 106 points, beating 59 in 2022
  • Connor Fields, 112 points, beating 67 in 2022
  • Tanner Thomson, 51 points, beating 10 in 2022
  • Connor Kelly, 68 points, beating 39 in 2020
  • Jeff Teat, 136 points, beating 108 in 2022

Goals

  • Tanner Cook, 32 goals, beating 11 in 2022
  • Connor Fields, 52 goals, beating 32 in 2022
  • Connor Kelly, 35 goals, beating 15 in 2020
  • Jeff Teat, 56 goals, beating 37 in 2022
  • Ethan Walker, 26 goals, beating 8 in 2022

Assists

  • Andrew Kew, 63 assists, beating 27 in 2020
  • Connor Fields, 60 assists, beating 35 in 2022
  • Tanner Thomson, 31 assists, beating 6 in 2022
  • Wes Berg, 69 assists, beating 50 in 2022
  • Ryan Smith, 42 assists, beating 24 in 2022

Loose Balls

Again, I won’t list them all but 20 different players beat their own season best in loose balls by 30 or more.

  • TD Ierlan, 202 LB, beating 111 in 2022
  • Ryan Terefenko, 186 LB, beating 103 in 2022
  • Mitch Ogilvie, 116 LB, beating 40 in 2022
  • Matt Gilray, 154 LB, beating 81 in 2020
  • Max Adler, 66 LB, beating 17 in 2022

Caused Turnovers

  • Eli Salama, 38 CTOs, beating 18 in 2022
  • John Wagner, 33 CTOs, beating 15 in 2020
  • Graeme Hossack, 49 CTOs, beating 34 in 2018
  • Ron John, 20 CTOs, beating 5 in 2022
  • Matt Gilray, 26 CTOs, beating 13 in 2020

Goalie minutes

  • Landon Kells, 863:43, beating 10:01 in 2022
  • Rylan Hartley, 1046:58, beating 453:54 in 2022
  • Chris Origlieri, 386:59, beating 94:16 in 2022
  • Nick Damude, 971:38, beating 747:38 in 2022

NLL Stats: now available to everyone

In the past, we’ve all had to rely on the NLL’s web site to get statistics on the players and teams and such. They’ve changed providers a number of times so it seems that every year, we get a different view of those stats. Sometimes things that used to be there aren’t there anymore, and it’s also sometimes difficult to find stuff.

No more! Presenting nllstats.com, a new way to find all of your favourite NLL stats. This site contains as much information as is available from every game, season, team, and player in NLL history.

Continue reading

The Best of 2022

A number of player single-season records were broken this season, and a few players and teams came close. Here is a list of the new player records (in bold), and teams and players that are now in the top ten in some category. Categories I looked at were:

  • For non-goalies, goals, assists, points, loose balls, face-offs (wins, attempts, percentage), CTOs, goals/game, assists/game, and points/game.
  • For goalies, GAA, saves, minutes, wins, and save %. Yes, someone entered the top 10 in losses in a season but let’s focus on the positive.
  • Teams: wins, total goals, goals allowed, and goal differential.

Continue reading

Do Faceoffs Matter? Part II

This is the second part of a two-part series investigating whether faceoffs help you win in the NLL and if so, how much. In part I, we discovered that faceoffs do matter to some extent, in that teams that win more than half the faceoffs in a game tend to win that game a little more than half the time. Now we’re onto the “how much” question, and here’s where the math gets a little heavier.

To help us with this question I have called on Cooper Perkins, the Seals play-by-play announcer, stats geek, and the creator of LaxMetrics.com. Cooper is great at breaking down stats in ways I wouldn’t have thought of so I was hoping he could add some interesting insight, and he didn’t disappoint. The rest of this article and the data and graphs were all provided by Cooper. Thanks to him for joining me on this faceoff adventure.

Continue reading

Do Faceoffs Matter? Part I

It’s an age-old question among lacrosse people: do faceoffs matter? Does it make sense to have a dedicated faceoff specialist, or is it sufficient to just find someone who’s pretty good at it? Logically, it makes sense that they do matter. More faceoff wins means more possessions. More possessions should lead to more goals, and more goals leads to more wins. Right? Maybe.

This article is the first of a two-part series in which we attempt to answer that question. I will start off by looking over some faceoff and win-loss numbers to see what insight they can provide. That will be Part I. Part II will be a special “crossover episode” with a special guest author, and will get a little deeper into the numbers. More on that later.

Continue reading

Laxmetrics.com

I wrote about lacrosse stats for IL Indoor for almost ten years. Now that I’m not doing that anymore, someone creates a web site with a zillion NLL stats. Figures.

laxmetrics.com is a new site created by San Diego PxP guy Cooper Perkins, and it contains an insane amount of data, way more than I have had access to over the last ten years. I’ve generally been dealing with directly-measurable stats (goals, loose balls, penalties, etc.), and then doing math to combine them, aggregate them, average them, and so on. Some of the data available here is the same – taking the data we get from game sheets and such and “manipulating” it to try and get something meaningful. For example, the “plus” stats (goals+, assists+, and so on) basically compare a player’s production against the league average, and gWAR (goalie wins above replacement) uses goals for and against to attempt to “quantify how many wins a goaltender is directly responsible for creating”.

However most of the stats require more work and you just can’t get them from the boxscore. For example, there are several types of assists listed here:

  • “First order assists” are different from regular assists in that the intention of the passer is taken into account. For example, if a transition player casually tosses the ball to a forward before heading off the floor and the forward scores (with no intervening passes), that transition player gets an assist which is arguably not as “deserved” as other assists. First order assists only counts passes that are directly intended to lead to a shot.
  • A “second order assist” is the equivalent of a first order assist but for second assists. Sometimes second assists are meaningful and necessary for the goal, while others are not.
  • An “unrealized assist” is a pass that results in a scoring opportunity but no goal is actually scored. We’ve all seen outstanding passes that result in a shot that misses the net or that the goalie saves, and of course no assist is credited.
  • A “pick assist” occurs when a player without the ball sets a pick or does something else off-ball that directly contributes to a goal. Because the player never touched the ball, he won’t be given an assist.

Of course, teammates and coaches notice these kinds of plays and sometimes broadcasters will mention them as well, but normally they get no other credit. Now they do.

Photo credit: Harry Scull Jr., Buffalo News

Dhane Smith, league leader in Facilitator Score and Weighted Assists

The problem with those sorts of stats is that the league doesn’t keep track of them, so someone (Cooper, presumably) has to sit and watch every second of every game, looking for these things and recording them. He has to hope the feed stays up, the cameraman catches everything, players names or numbers are visible so you can tell who did what, and so on. NLL games are generally around 2h15m long, and there’s probably a lot of going back and forth, watching a single play a dozen times to make sure you got everything. You can skip timeouts and commercials and such, but I imagine it still takes several hours per game to gather all of this information. (Update: I heard Cooper on the Off the Crossebar podcast the other day and he says it takes him about 35-40 minutes per game, so perhaps this isn’t the time commitment I thought it would be but it’s still significant work.)

In addition, most of these stats are very subjective. Was that pass really essential to the goal? There was a great pass followed by a shot from a bad angle that didn’t go in – was that enough of a quality scoring chance to warrant an unrealized assist? But even loose balls and face-off wins can be somewhat subjective, and we rely on someone else to make those decisions, so this is really no different.

Honestly, I don’t love how the data is presented on the site. Most pages look like an Excel spreadsheet embedded in the middle of a blog post. Given that the site is created with WordPress, that’s probably exactly what it is. In some cases, this is just as good as showing an HTML table. But for example, the leaderboard page makes you scroll left-to-right to see the data. Given the amount of unused space on each side of the chart, this is ugly. But who cares, really, it’s the data and the interpretation of the data that really matters. The page has only been up for a week or two so perhaps “make it pretty” is still on the TODO list. I’ve had this blog for ten years and have put pretty close to (read: exactly) zero time into making it pretty, so I really shouldn’t complain.

I appreciate the amount of work all of this is, which is why I don’t do it. But the fact that someone is doing it and publishing the results of the analysis is crazy awesome.

NLL Week 12

Some crazy weird stuff happened in week 12, and we also have two brand-new lacrosse stats web sites, one of which is mine. Let’s jump right in.

Continue reading

2019-20 NLL Milestones

A number of player and team milestones can be reached this year, including one fairly significant one: Dan Dawson could (fairly easily, by his standards) be the all-time league leader in assists. Here’s a list of the most likely milestones to be hit:

Teams

Wins & losses

Photo credit: Micheline VeluvoluToronto’s sixth win of the season will be the franchise’s 200th. Georgia needs six and the Black Wolves need ten for 50.

Goals

The Georgia Swarm need 40 goals to reach 1000, while the Saskatchewan Rush need 60. The Mammoth need 153 goals to reach 3500 and Calgary needs 201 to reach 4000. With 87 goals, the Bandits will hit 5500, far and away the highest total for any team. The Swarm are 122 goals away from allowing 1000 all-time, and the Rock will hit 4000 goals allowed if they give up 195.

Team Leaders

With 99 points this year (a tall order, but not unimaginable), Eli McLaughlin would tie Adam Jones for 4th on the Mammoth while Jacob Ruest needs 34 to catch Sean Pollock for 11th. A 116-point season from Rob Hellyer would tie him with Stephen Leblanc for 4th on the Toronto Rock list, while 82 for Tom Schreiber ties him with Aaron Wilson for 9th.

I looked over each of the teams to see what their all-time leader board looked like, and as you might expect from a 28-year-old team, the Bandits leaders will not change significantly anytime soon. Dhane Smith is third all-time but needs around 350 points to catch Mark Steenhuis, who is almost 800 behind John Tavares. The only other active Bandit in the top 20 is Steve Priolo, who’s tied with Kevin Dostie for 19th. Priolo could pass Jim Veltman for 18th with 11 points.


Players

Goals

Player… Needs… To reach…
Rhys Duch 3 400
Curtis Dickson 5 400
Callum Crawford 43 400
Kevin Crowley 8 300
Adam Jones 18 300
Mark Matthews 25 300
Corey Small 44 300
Garrett Billings 2 200
Ben McIntosh 8 200
Johnny Powless 8 200
Rob Hellyer 10 200
Logan Schuss 28 200

  

Assists

Player… Needs… To reach…
Dan Dawson 23 900
Shawn Evans 43 800
Ryan Benesch 23 600
Rhys Duch 30 600
Jeff Shattler 8 500
Jordan Hall 23 500
Garrett Billings 32 500
Stephan Leblanc 37 500
Cody Jamieson 51 500
Dane Dobbie 52 500
Dhane Smith 19 400
Adam Jones 6 300
Robert Church 19 300
Logan Schuss 38 300
Kiel Matisz 38 300

Points

Player… Needs… To reach…
Dan Dawson 4 1400
Shawn Evans 13 1200
Ryan Benesch 90 1100
Callum Crawford 37 1000
Rhys Duch 33 1000
Dane Dobbie 34 900
Jeff Shattler 82 900
Stephan Leblanc 36 800
Curtis Dickson 78 800
Jordan Hall 85 800
Mark Matthews 95 800
Cody Jamieson 96 800
Garrett Billings 34 700
Corey Small 65 700
Dhane Smith 65 700
Kevin Crowley 85 700
Adam Jones 24 600
Shayne Jackson 77 600
Rob Hellyer 15 500
Robert Church 19 500
Brodie Merrill 47 500

  

Loose Balls

Player… Needs… To reach…
Brodie Merrill 65 2500
Jay Thorimbert 31 1600
Ian Hawksbee 35 1400
Jordan MacIntosh 6 1300
Shawn Evans 11 1300
Jeremy Thompson 26 1300
Jeff Shattler 29 1300
Jordan Hall 62 1000

  

PIM

Player… Needs… To reach…
Matt Beers 12 500
Brodie Merrill 15 500
Paul Dawson 45 500

  

Games

Player… Needs… To reach…
Dan Dawson 13 300
Paul Dawson 1 200
Ian Hawksbee 4 200
Ian Llord 9 200
Rhys Duch 16 200
Rob Hellyer 1 100
Curtis Knight 1 100
Logan Schuss 2 100
Travis Cornwall 4 100
Riley Loewen 5 100

  

Goalie Minutes

Player… Needs… To reach…
Matt Vinc 4 12000
Evan Kirk 124 6000
Frank Scigliano 297 4000

  

Goals against

Player… Needs… To reach…
Mike Poulin 33 1600
Aaron Bold 54 1500
Nick Rose 8 1200
Evan Kirk 17 1200
Dillon Ward 5 1000
Frank Scigliano 52 800

  

Saves

Player… Needs… To reach…
Matt Vinc 177 8000
Aaron Bold 166 5000
Evan Kirk 115 4000
Dillon Ward 474 4000
Frank Scigliano 507 3000

  

Leaders

This section is for players who are close to passing a retired player on the career list in a particular category.

Player… Needs… To tie… For…
Dan Dawson 18 goals Colin Doyle 4th
Ryan Benesch 7 goals Lewis Ratcliff 9th
11 goals Shawn Williams 8th
16 goals Josh Sanderson 7th
Shawn Evans is 3 behind Benesch
Dane Dobbie is 12 behind Evans
Rhys Duch 2 goals Tom Marechek 14th
13 goals Paul Gait 13th
Curtis Dickson is 2 behind Duch
Dan Dawson 21 assists Josh Sanderson 2nd
47 assists John Tavares 1st
Shawn Evans 21 assists John Grant, Jr. 5th
Callum Crawford 5 assists Gavin Prout 8th
Jeff Shattler 1 assist Jim Veltman 16th
Dan Dawson 50 points John Grant, Jr. 2nd
Ryan Benesch 3 points Mark Steenhuis 9th
Callum Crawford is 37 behind Benesch
Rhys Duch is 6 behind Crawford
Dane Dobbie 56 points Gavin Prout 14th
Mike Poulin 17 goals against Brandon Miller 8th
Mike Poulin 11 wins Anthony Cosmo 4th