The Line Blender: Using GNN Embeddings for Player Rankings
2026-01-31
Throughout this series, we have explored how players interact within lines and teams. We’ve seen how to optimize a single roster and how to predict performance for unseen combinations. Here, we are inverting the logic: instead of asking how to build a team around players, we are asking which individual players provide the most value to any line they join.
To rank players, we can create a sample of hypothetical line and pairing combinations leaving an open spot for evaluation. Then, for every player in the league, we place them into the open spot across each sampled line. With the line or pairing now full, we can score the line using our model. Lastly, each player's performance in the line is compared against all other players.
This effectively measures a player's "portability"—the ability to drive play regardless of the system or quality of teammates.
Note, that for each season, players were limited to those who played at least ~600 mins of icetime over the season1.
Forwards
Rank
Player
Team
Pos
GP
1
Nathan MacKinnon
COL
C
50
2
Nikita Kucherov
TBL
R
47
3
Connor McDavid
EDM
C
54
4
Artturi Lehkonen
COL
L
50
5
Andrei Svechnikov
CAR
R
52
6
Martin Necas
COL
C
50
7
Cutter Gauthier
ANA
L
52
8
Beckett Sennecke
ANA
R
53
9
Auston Matthews
TOR
C
46
10
Timo Meier
NJD
R
47
11
Dylan Guenther
UTA
R
52
12
Sam Bennett
FLA
C
51
13
Tage Thompson
BUF
C
51
14
Sidney Crosby
PIT
C
51
15
Brock Nelson
COL
C
50
16
Alex Ovechkin
WSH
L
53
17
Kirill Marchenko
CBJ
R
47
18
Anders Lee
NYI
L
52
19
Jason Robertson
DAL
L
52
20
David Pastrnak
BOS
R
48
Rank
Player
Team
Pos
GP
1
Nathan MacKinnon
COL
C
79
2
Sidney Crosby
PIT
C
80
3
Nikita Kucherov
TBL
R
78
4
Rickard Rakell
PIT
R
81
5
Auston Matthews
TOR
C
67
6
Filip Forsberg
NSH
L
82
7
Sam Bennett
FLA
C
76
8
Timo Meier
NJD
R
80
9
Brady Tkachuk
OTT
L
72
10
Anders Lee
NYI
L
82
11
Bryan Rust
PIT
R
71
12
Sebastian Aho
CAR
C
79
13
Zach Hyman
EDM
L
73
14
Pierre-Luc Dubois
WSH
L
82
15
Clayton Keller
UTA
R
81
16
Cole Caufield
MTL
R
82
17
Leon Draisaitl
EDM
C
71
18
Frank Vatrano
ANA
R
81
19
Seth Jarvis
CAR
C
73
20
Connor McDavid
EDM
C
67
Rank
Player
Team
Pos
GP
1
Nathan MacKinnon
COL
C
82
2
Auston Matthews
TOR
C
81
3
Sidney Crosby
PIT
C
82
4
Zach Hyman
EDM
L
80
5
Connor McDavid
EDM
C
76
6
Mikko Rantanen
COL
R
80
7
Brady Tkachuk
OTT
L
81
8
Nikita Kucherov
TBL
R
81
9
Filip Forsberg
NSH
L
82
10
Owen Tippett
PHI
R
78
11
Ross Colton
COL
C
80
12
Bryan Rust
PIT
R
62
13
Jesper Bratt
NJD
L
82
14
Trevor Moore
LAK
L
82
15
David Pastrnak
BOS
R
82
16
Warren Foegele
EDM
L
82
17
Timo Meier
NJD
R
69
18
John Tavares
TOR
C
80
19
Martin Necas
CAR
C
77
20
Jake Guentzel
CAR
C
67
Rank
Player
Team
Pos
GP
1
Matthew Tkachuk
FLA
L
79
2
Brady Tkachuk
OTT
L
82
3
Auston Matthews
TOR
C
74
4
Sidney Crosby
PIT
C
82
5
Nathan MacKinnon
COL
C
71
6
Tage Thompson
BUF
C
78
7
William Nylander
TOR
R
82
8
Carter Verhaeghe
FLA
C
81
9
Jeff Skinner
BUF
L
79
10
Mikko Rantanen
COL
R
82
11
Zach Hyman
EDM
L
79
12
Jake Guentzel
PIT
L
78
13
David Pastrnak
BOS
R
82
14
Rickard Rakell
PIT
R
82
15
Alex Ovechkin
WSH
L
73
16
Tim Stutzle
OTT
L
78
17
Connor McDavid
EDM
C
82
18
Jack Hughes
NJD
C
78
19
Jesper Bratt
NJD
L
82
20
Jason Zucker
PIT
L
78
Rank
Player
Team
Pos
GP
1
Auston Matthews
TOR
C
73
2
Timo Meier
SJS
R
77
3
Sam Bennett
FLA
C
71
4
Viktor Arvidsson
LAK
L
66
5
Jake Guentzel
PIT
L
76
6
Michael Bunting
TOR
L
79
7
Carter Verhaeghe
FLA
C
78
8
Aleksander Barkov
FLA
C
67
9
Nathan MacKinnon
COL
C
65
10
Matthew Tkachuk
CGY
L
82
11
Sidney Crosby
PIT
C
69
12
Vladimir Tarasenko
STL
R
75
13
Connor McDavid
EDM
C
80
14
Jonathan Huberdeau
FLA
L
80
15
John Tavares
TOR
C
79
16
Pierre-Luc Dubois
WPG
L
81
17
Nikolaj Ehlers
WPG
L
62
18
Mitchell Marner
TOR
R
72
19
Phillip Danault
LAK
C
79
20
Elias Lindholm
CGY
C
82
Rank
Player
Team
Pos
GP
1
Auston Matthews
TOR
C
52
2
Nathan MacKinnon
COL
C
48
3
Connor McDavid
EDM
C
56
4
Gabriel Landeskog
COL
L
54
5
Brady Tkachuk
OTT
L
56
6
Mikko Rantanen
COL
R
52
7
Jonathan Marchessault
VGK
C
55
8
Patrice Bergeron
BOS
C
54
9
Max Pacioretty
VGK
L
48
10
David Pastrnak
BOS
R
48
11
Tyler Toffoli
MTL
C
52
12
John Tavares
TOR
C
56
13
Aleksander Barkov
FLA
C
50
14
Bryan Rust
PIT
R
56
15
Nazem Kadri
COL
C
56
16
Timo Meier
S.J
R
54
17
Evander Kane
S.J
L
56
18
Craig Smith
BOS
C
54
19
Andrei Svechnikov
CAR
R
55
20
Alex Tuch
VGK
R
55
Defense
Rank
Player
Team
Pos
GP
1
Sam Malinski
COL
D
50
2
Cale Makar
COL
D
50
3
Brent Burns
COL
D
50
4
Mattias Ekholm
EDM
D
54
5
Sean Walker
CAR
D
52
6
Zach Werenski
CBJ
D
47
7
Josh Manson
COL
D
50
8
Devon Toews
COL
D
40
9
Jakob Chychrun
WSH
D
51
10
Evan Bouchard
EDM
D
54
11
Jacob Trouba
ANA
D
52
12
MacKenzie Weegar
CGY
D
52
13
Alexander Nikishin
CAR
D
51
14
Rasmus Andersson
VGK
D
50
15
Jordan Spence
OTT
D
43
16
Darren Raddysh
TBL
D
45
17
Morgan Rielly
TOR
D
51
18
John Carlson
WSH
D
49
19
Darnell Nurse
EDM
D
54
20
Mikhail Sergachev
UTA
D
52
Rank
Player
Team
Pos
GP
1
Brent Burns
CAR
D
82
2
Zach Werenski
CBJ
D
81
3
Erik Karlsson
PIT
D
82
4
Cale Makar
COL
D
80
5
Evan Bouchard
EDM
D
82
6
Darnell Nurse
EDM
D
76
7
Mattias Ekholm
EDM
D
65
8
Jaccob Slavin
CAR
D
80
9
Thomas Chabot
OTT
D
80
10
Devon Toews
COL
D
76
11
Rasmus Dahlin
BUF
D
73
12
Gustav Forsling
FLA
D
80
13
Sean Walker
CAR
D
82
14
Victor Hedman
TBL
D
79
15
Dougie Hamilton
NJD
D
64
16
Jake Walman
EDM
D
65
17
Noah Dobson
NYI
D
71
18
Dmitry Orlov
CAR
D
76
19
Thomas Harley
DAL
D
78
20
Alex Pietrangelo
VGK
D
71
Rank
Player
Team
Pos
GP
1
Roman Josi
NSH
D
82
2
Mattias Ekholm
EDM
D
79
3
Evan Bouchard
EDM
D
81
4
Brent Burns
CAR
D
82
5
Jaccob Slavin
CAR
D
81
6
Victor Hedman
TBL
D
78
7
Josh Morrissey
WPG
D
81
8
Erik Karlsson
PIT
D
82
9
Morgan Rielly
TOR
D
72
10
Rasmus Dahlin
BUF
D
81
11
Darnell Nurse
EDM
D
81
12
Zach Werenski
CBJ
D
70
13
Cale Makar
COL
D
77
14
Kris Letang
PIT
D
82
15
MacKenzie Weegar
CGY
D
82
16
Brady Skjei
CAR
D
80
17
Sean Walker
COL
D
81
18
Josh Manson
COL
D
76
19
Noah Dobson
NYI
D
79
20
Gustav Forsling
FLA
D
79
Rank
Player
Team
Pos
GP
1
Brent Burns
CAR
D
82
2
Dougie Hamilton
NJD
D
82
3
Brandon Montour
FLA
D
80
4
Kris Letang
PIT
D
64
5
Victor Hedman
TBL
D
76
6
Gustav Forsling
FLA
D
82
7
Roman Josi
NSH
D
67
8
MacKenzie Weegar
CGY
D
81
9
Erik Karlsson
SJS
D
82
10
Noah Hanifin
CGY
D
81
11
Travis Hamonic
OTT
D
75
12
Brady Skjei
CAR
D
81
13
Devon Toews
COL
D
80
14
Damon Severson
NJD
D
81
15
Darnell Nurse
EDM
D
82
16
Radko Gudas
FLA
D
72
17
Thomas Chabot
OTT
D
68
18
Aaron Ekblad
FLA
D
71
19
Rasmus Dahlin
BUF
D
78
20
Josh Morrissey
WPG
D
78
Rank
Player
Team
Pos
GP
1
MacKenzie Weegar
FLA
D
80
2
Brandon Montour
FLA
D
81
3
Morgan Rielly
TOR
D
82
4
Evan Bouchard
EDM
D
81
5
Gustav Forsling
FLA
D
71
6
Aaron Ekblad
FLA
D
61
7
Roman Josi
NSH
D
80
8
Noah Hanifin
CGY
D
81
9
Cale Makar
COL
D
77
10
Brady Skjei
CAR
D
82
11
Radko Gudas
FLA
D
77
12
Kris Letang
PIT
D
78
13
Charlie McAvoy
BOS
D
78
14
Darnell Nurse
EDM
D
71
15
Dougie Hamilton
NJD
D
62
16
Shea Theodore
VGK
D
78
17
Victor Hedman
TBL
D
82
18
Jaccob Slavin
CAR
D
79
19
Justin Faulk
STL
D
76
20
Alex Pietrangelo
VGK
D
80
Rank
Player
Team
Pos
GP
1
Darnell Nurse
EDM
D
56
2
Tyson Barrie
EDM
D
56
3
Shea Theodore
VGK
D
53
4
Dougie Hamilton
CAR
D
55
5
Alex Pietrangelo
VGK
D
41
6
Alec Martinez
VGK
D
53
7
Devon Toews
COL
D
53
8
Thomas Chabot
OTT
D
49
9
Jakob Chychrun
ARI
D
56
10
Roman Josi
NSH
D
48
11
Jake Muzzin
TOR
D
53
12
Ryan Graves
COL
D
54
13
Morgan Rielly
TOR
D
55
14
Brett Pesce
CAR
D
55
15
Radko Gudas
FLA
D
54
16
Seth Jones
CBJ
D
56
17
Mark Giordano
CGY
D
56
18
Nicolas Hague
VGK
D
52
19
Jaccob Slavin
CAR
D
52
20
Samuel Girard
COL
D
48
Across these posts, we have used optimization and machine learning to explore network effects in NHL lineups. The implementation here leaves a lot of potential for future work, including: utilizing disaggreated data, better representing the time-series data that comprises a player's career, and more.