Wednesday, August 7, 2019

Answering the $200 Lineup Challenge

These days of summer, about halfway through the offseason, are usually extremely important for analytics and stats websites - this is the golden opportunity to fix bugs and add features. So during this "time of cucumbers" as the offseason is known in Israeli media I opened an updated, cleaner version of our website, just a couple of days ago and moved to improving our models used in a variety of pages.

However, yesterday was lost to. @DownGoesBrown posted his $200 Lineup Game challenge. While at first I tried to ignore it, to stuff the jinn back into the bottle, eventually the urge to give a computed answer prevailed. And here we go. Not for one team, but for all. Below are the best lineups fitting under $200 that produced most value (as sum of career regular season points and career regular season wins). As a bonus, I also give the best "bang for the buck" lineup, i.e. with the highest value/cost ratio. For each team. Except the Golden Knights - for obvious reasons.

Active players are shown in italic. The source of the script (Perl) can be downloaded from here.
Enjoy!

ANA ARI BOS BUF CAR CBJ CGY CHI
COL DAL DET EDM FLA LAK MIN MTL
NJD NSH NYI NYR OTT PHI PIT SJS
STL TBL TOR VAN VGK WPG WSH

Top 3:
  1. St. Louis Blues (7996 pts+wins)
  2. Boston Bruins (7338 pts+wins)
  3. Toronto Maple Leafs (6627 pts+wins)

ANAHEIM DUCKS

STEVE THOMAS (\$12, 933 pts) - ADAM OATES (\$67, 1420 pts) - JARI KURRI (\$82, 1398 pts)
KEN KLEE (\$3, 195 pts) - TOM KURVERS (\$22, 421 pts)
RAY EMERY (\$10, 145 wins)
Total cost: \$196
Total value: 4512 (pts+wins)


Best bang for the buck

CURTIS GLENCROSS (\$2, 275 pts) - DANY HEATLEY (\$6, 791 pts) - STEVE THOMAS (\$12, 933 pts)
IAN MORAN (\$1, 71 pts) - KEN KLEE (\$3, 195 pts)
SEBASTIEN CARON (\$1, 26 wins)
Total cost: \$25
Total value: 2291 (pts+wins)

ARIZONA COYOTES

BRETT HULL (\$5, 1391 pts) -- BOBBY HULL (\$18, 1170 pts) -- MIKE GARTNER (\$142, 1335 pts)
MATHIEU SCHNEIDER (\$8, 743 pts) -- TOM BLADON (\$9, 270 pts)
BRENT JOHNSON (\$8, 140 wins)

Total cost: \$190
Total value: 5049 (pts+wins)

Best bang for the buck

BRETT HULL (\$5, 1391 pts) -- PASCAL RHEAUME (\$1, 91 pts) -- BOBBY HULL (\$18, 1170 pts)
MATHIEU SCHNEIDER (\$8, 743 pts) -- JAMIE MCBAIN (\$3, 110 pts)
DAVID AEBISCHER (\$1, 106 wins)

Total cost: \$36
Total value: 3611 (pts+wins)


BOSTON BRUINS

JAROMIR JAGR (\$11, 1921 pts) - DAVE ANDREYCHUK (\$63, 1338 pts) - JAROME IGINLA (\$78, 1300 pts)
PAUL COFFEY (\$18, 1531 pts) - SERGEI GONCHAR (\$15, 811 pts)
JACQUES PLANTE (\$8, 437 wins)
Total cost: \$193
Total value: 7338 (pts+wins)


Best bang for the buck

TED IRVINE (\$1, 331 pts) - ROBERT LANG (\$3, 703 pts) - GERRY EHMAN (\$1, 214 pts)
JEFF NORTON (\$3, 384 pts) - PAUL COFFEY (\$18, 1531 pts)
TIM CHEVELDAE (\$2, 149 wins)
Total cost: \$28
Total value: 3312 (pts+wins)


BUFFALO SABRES

VYACHESLAV KOZLOV (\$38, 853 pts) - DOUG GILMOUR (\$82, 1414 pts) - WILF PAIEMENT (\$56, 814 pts)
REED LARSON (\$1, 685 pts) - PHIL RUSSELL (\$18, 424 pts)
PHIL MYRE (\$5, 149 wins)
Total cost: \$200
Total value: 4339 (pts+wins)


Best bang for the buck

PAUL GARDNER (\$2, 402 pts) - MARK PARRISH (\$2, 387 pts) - JOEL ARMIA (\$1, 81 pts)
REED LARSON (\$1, 685 pts) - PHIL RUSSELL (\$18, 424 pts)
PETER SKUDRA (\$1, 51 wins)
Total cost: \$25
Total value: 2030 (pts+wins)

CAROLINA HURRICANES

BOBBY HULL (\$9, 1170 pts) -- MARK RECCHI (\$20, 1533 pts) -- GORDIE HOWE (\$80, 1850 pts)
TOMAS KABERLE (\$29, 563 pts) -- JAMES PATRICK (\$47, 639 pts)
JEAN-SEBASTIEN GIGUERE (\$8, 262 wins)

Total cost: \$193
Total value: 6017 (pts+wins)

Best bang for the buck

BARRY PEDERSON (\$5, 654 pts) -- BOBBY HULL (\$9, 1170 pts) -- PAT HUGHES (\$2, 258 pts)
JAMES WISNIEWSKI (\$1, 274 pts) -- CHARLIE BOURGEOIS (\$1, 70 pts)
MARK FITZPATRICK (\$3, 113 wins)

Total cost: \$21
Total value: 2539 (pts+wins)


COLUMBUS BLUE JACKETS

THOMAS VANEK (\$19, 789 pts) - MARIAN GABORIK (\$34, 815 pts) - JEFF CARTER (\$39, 705 pts)
ADRIAN AUCOIN (\$36, 399 pts) - DARRYL SYDOR (\$49, 507 pts)
BRIAN BOUCHER (\$3, 120 wins)
Total cost: \$180
Total value: 3335 (pts+wins)


Best bang for the buck

MIKE YORK (\$1, 322 pts) - JONATHAN MARCHESSAULT (\$2, 204 pts) - CHRIS GRATTON (\$6, 568 pts)
FRANCOIS BEAUCHEMIN (\$11, 288 pts) - TAYLOR CHORNEY (\$1, 22 pts)
BRIAN BOUCHER (\$3, 120 wins)
Total cost: \$24
Total value: 1524 (pts+wins)

CALGARY FLAMES

JAROMIR JAGR (\$22, 1921 pts) -- BRETT HULL (\$57, 1391 pts) -- MARTIN ST. LOUIS (\$69, 1033 pts)
LEE NORWOOD (\$16, 211 pts) -- BRAD STUART (\$27, 335 pts)
CURTIS JOSEPH (\$9, 463 wins)

Total cost: \$200
Total value: 5354 (pts+wins)

Best bang for the buck

GERRY O'FLAHERTY (\$1, 194 pts) -- MARK LAMB (\$1, 146 pts) -- RICH LEMIEUX (\$1, 121 pts)
RIK WILSON (\$2, 90 pts) -- NICKLAS GROSSMANN (\$3, 86 pts)
KAY WHITMORE (\$1, 60 wins)

Total cost: \$9
Total value: 697 (pts+wins)

CHICAGO BLACKHAWKS

JOHN TONELLI (\$33, 836 pts) -- PETER BONDRA (\$37, 892 pts) -- THEO FLEURY (\$54, 1088 pts)
PAUL COFFEY (\$10, 1531 pts) -- BOBBY ORR (\$26, 915 pts)
DOMINIK HASEK (\$25, 389 wins)

Total cost: $185
Total value: 5651 (pts+wins)

Best bang for the buck

TONY TANTI ($3, 560 pts) -- LARRY MICKEY (\$1, 92 pts) -- JEFF JACKSON (\$1, 86 pts)
RICK LANZ (\$1, 286 pts) -- PAUL COFFEY (\$10, 1531 pts)
GILLES MELOCHE (\$2, 270 wins)

Total cost: $18
Total value: 2825 (pts+wins)

COLORADO AVALANCHE

DAVE ANDREYCHUK (\$14, 1338 pts) -- THEO FLEURY (\$15, 1088 pts) -- JARI KURRI (\$70, 1398 pts)
JOHNNY BOYCHUK (\$4, 195 pts) -- RAY BOURQUE (\$94, 1579 pts)
RICK TABARACCI (\$2, 93 wins)

Total cost: \$199
Total value: 5691 (pts+wins)

Best bang for the buck

DAVE ANDREYCHUK (\$14, 1338 pts) -- DAVE HANNAN (\$4, 305 pts) -- THEO FLEURY (\$15, 1088 pts)
JOHNNY BOYCHUK (\$4, 195 pts) -- TOM PREISSING (\$4, 132 pts)
RICK TABARACCI (\$2, 93 wins)

Total cost: \$43
Total value: 3151 (pts+wins)

DALLAS STARS

JAROMIR JAGR (\$34, 1921 pts) -- CLAUDE LEMIEUX (\$32, 786 pts) -- MIKE GARTNER (\$80, 1335 pts)
REED LARSON (\$11, 685 pts) -- ROB RAMAGE (\$34, 564 pts)
TIM THOMAS (\$8, 214 wins)

Total cost: \$199
Total value: 5505 (pts+wins)

Best bang for the buck

ROB BROWN (\$1, 438 pts) -- CHUCK ARNASON (\$1, 199 pts) -- MATS ZUCCARELLO (\$2, 355 pts)
GREG HAWGOOD (\$2, 224 pts) -- JOHN BARRETT (\$1, 97 pts)
TIM THOMAS (\$8, 214 wins)

Total cost: \$15
Total value: 1527 (pts+wins)

DETROIT RED WINGS

MIKE MODANO (\$40, 1374 pts) -- STEVE THOMAS (\$44, 933 pts) -- DARRYL SITTLER (\$61, 1121 pts)
DOUG HARVEY (\$2, 540 pts) -- BORJE SALMING (\$49, 787 pts)
BILL RANFORD (\$4, 240 wins)

Total cost: \$200
Total value: 4995 (pts+wins)

Best bang for the buck

REAL LEMIEUX (\$1, 155 pts) -- CRAIG CAMERON (\$1, 152 pts) -- WES WALZ (\$2, 260 pts)
DOUG HARVEY (\$2, 540 pts) -- TOM BLADON (\$2, 270 pts)
AL JENSEN (\$1, 95 wins)

Total cost: \$9
Total value: 1472 (pts+wins)


EDMONTON OILERS

RAY WHITNEY (\$9, 1064 pts) - ADAM OATES (\$60, 1420 pts) - VINCENT DAMPHOUSSE (\$80, 1205 pts)
REED LARSON (\$10, 685 pts) - TOMAS JONSSON (\$20, 344 pts)
ILYA BRYZGALOV (\$20, 221 wins)
Total cost: \$199
Total value: 4939 (pts+wins)


Best bang for the buck

MARTIN RUCINSKY (\$2, 612 pts) - NICK FOTIU (\$1, 137 pts) - RAY WHITNEY (\$9, 1064 pts)
TOM BLADON (\$1, 270 pts) - BRUCE BELL (\$1, 76 pts)
MARTIN GERBER (\$3, 113 wins)
Total cost: \$17
Total value: 2272 (pts+wins)


FLORIDA PANTHERS

ALEX KOVALEV (\$14, 1029 pts) - DINO CICCARELLI (\$42, 1200 pts) - JOE NIEUWENDYK (\$80, 1126 pts)
IGOR KRAVCHUK (\$7, 274 pts) - RYAN WHITNEY (\$7, 259 pts)
MIKE VERNON (\$34, 385 wins)
Total cost: \$184
Total value: 4273 (pts+wins)


Best bang for the buck

JIM CAMPBELL (\$1, 136 pts) - TODD BERTUZZI (\$7, 770 pts) - ALEX KOVALEV (\$14, 1029 pts)
JAMIE RIVERS (\$1, 66 pts) - CHRIS WIDEMAN (\$1, 45 pts)
ANTTI NIEMI (\$2, 242 wins)
Total cost: \$26
Total value: 2288 (pts+wins)


LOS ANGELES KINGS

JAROME IGINLA (\$19, 1300 pts) - NEAL BROTEN (\$19, 923 pts) - JEREMY ROENICK (\$58, 1216 pts)
DAVE BABYCH (\$8, 723 pts) - PAUL COFFEY (\$60, 1531 pts)
TERRY SAWCHUK (\$36, 445 wins)
Total cost: \$200
Total value: 6138 (pts+wins)


Best bang for the buck

ROB BROWN (\$2, 438 pts) - RICHARD MARTIN (\$4, 701 pts) - TED DONATO (\$2, 347 pts)
DAVE BABYCH (\$8, 723 pts) - POUL POPIEL (\$1, 54 pts)
BILLY SMITH (\$5, 305 wins)
Total cost: \$22
Total value: 2568 (pts+wins)


MINNESOTA WILD

PETR SYKORA (\$14, 721 pts) - CHRIS SIMON (\$10, 305 pts) - CLIFF RONNING (\$80, 869 pts)
JEAN-JACQUES DAIGNEAULT (\$1, 250 pts) - SEAN HILL (\$35, 298 pts)
JOSE THEODORE (\$32, 286 wins)
Total cost: \$172
Total value: 2729 (pts+wins)


Best bang for the buck

JOHAN LARSSON (\$1, 79 pts) - ANDREI NAZAROV (\$2, 124 pts) - PETR SYKORA (\$14, 721 pts)
JEAN-JACQUES DAIGNEAULT (\$1, 250 pts) - MATT BARTKOWSKI (\$2, 48 pts)
ILYA BRYZGALOV (\$12, 221 wins)
Total cost: \$32
Total value: 1443 (pts+wins)


MONTREAL CANADIENS

ALES HEMSKY (\$7, 572 pts) - THOMAS VANEK (\$18, 789 pts) - PIERRE TURGEON (\$104, 1327 pts)
ROB RAMAGE (\$14, 564 pts) - SERGEI GONCHAR (\$45, 811 pts)
TOMAS VOKOUN (\$1, 300 wins)
Total cost: \$189
Total value: 4363 (pts+wins)


Best bang for the buck

BRONCO HORVATH (\$1, 326 pts) - BOB BERRY (\$2, 350 pts) - RICK MEAGHER (\$2, 309 pts)
FRANCOIS BEAUCHEMIN (\$1, 288 pts) - REG FLEMING (\$3, 240 pts)
TOMAS VOKOUN (\$1, 300 wins)
Total cost: \$10
Total value: 1813 (pts+wins)

NEW JERSEY DEVILS

ESA TIKKANEN (\$9, 630 pts) -- DOUG GILMOUR (\$83, 1414 pts) -- IGOR LARIONOV (\$49, 644 pts)
PHIL HOUSLEY (\$22, 1232 pts) -- DAVE ELLETT (\$20, 568 pts)
JOHN VANBIESBROUCK (\$9, 374 wins)

Total cost: \$192
Total value: 4862 (pts+wins)

Best bang for the buck

STEPHANE VEILLEUX (\$1, 106 pts) -- ESA TIKKANEN (\$9, 630 pts) -- STAN WEIR (\$10, 346 pts)
JOEL BOUCHARD (\$1, 75 pts) -- PHIL HOUSLEY (\$22, 1232 pts)
ROLAND MELANSON (\$1, 129 wins)

Total cost: \$44
Total value: 2518 (pts+wins)

NASHVILLE PREDATORS

PETER FORSBERG (\$17, 885 pts) -- OLLI JOKINEN (\$48, 750 pts) -- ANDREW BRUNETTE (\$77, 733 pts)
MATT CARLE (\$6, 283 pts) -- JEAN-JACQUES DAIGNEAULT (\$35, 250 pts)
DEVAN DUBNYK (\$2, 235 wins)

Total cost: $185
Total value: 3136 (pts+wins)

Best bang for the buck

MATTHEW LOMBARDI (\$2, 262 pts) -- STEVE BEGIN (\$2, 108 pts) -- PETER FORSBERG (\$17, 885 pts)
STAN NECKAR (\$1, 53 pts) -- MATT CARLE (\$6, 283 pts)
DEVAN DUBNYK (\$2, 235 wins)

Total cost: $30
Total value: 1826 (pts+wins)


NEW YORK ISLANDERS

RYAN SMYTH (\$18, 842 pts) - CRAIG JANNEY (\$18, 751 pts) - KIRK MULLER (\$27, 959 pts)
REED LARSON (\$33, 685 pts) - MATHIEU SCHNEIDER (\$78, 743 pts)
ROBERTO LUONGO (\$24, 489 wins)
Total cost: \$198
Total value: 4469 (pts+wins)


Best bang for the buck

JIM DOWD (\$3, 239 pts) - MIKE DONNELLY (\$3, 235 pts) - TONY HRKAC (\$7, 371 pts)
BRUCE AFFLECK (\$1, 80 pts) - RICK GREEN (\$4, 263 pts)
RICHARD BRODEUR (\$2, 131 wins)
Total cost: \$20
Total value: 1319 (pts+wins)


NEW YORK RANGERS

JARI KURRI (\$14, 1398 pts) - GLENN ANDERSON (\$12, 1099 pts) - MARCEL DIONNE (\$118, 1771 pts)
ROMAN HAMRLIK (\$12, 638 pts) - BRYAN MCCABE (\$19, 528 pts)
TERRY SAWCHUK (\$8, 445 wins)
Total cost: \$183
Total value: 5879 (pts+wins)


Best bang for the buck

TODD MARCHANT (\$1, 498 pts) - DOUG WICKENHEISER (\$1, 276 pts) - BILLY TAYLOR SR. (\$2, 266 pts)
JIM DOREY (\$1, 99 pts) - DUANE RUPP (\$2, 117 pts)
HARRY LUMLEY (\$1, 330 wins)
Total cost: \$8
Total value: 1586 (pts+wins)


OTTAWA SENATORS

SCOTT GOMEZ (\$13, 756 pts) - MARIAN GABORIK (\$16, 815 pts) - PETER BONDRA (\$23, 892 pts)
BOBBY DOLLAS (\$1, 138 pts) - STEVE DUCHESNE (\$140, 752 pts)
TOM BARRASSO (\$7, 369 wins)
Total cost: \$200
Total value: 3722 (pts+wins)


Best bang for the buck

BROOKS LAICH (\$1, 332 pts) - NELSON EMERSON (\$3, 488 pts) - SCOTT GOMEZ (\$13, 756 pts)
BOBBY DOLLAS (\$1, 138 pts) - JOE CIRELLA (\$6, 275 pts)
TOM BARRASSO (\$7, 369 wins)
Total cost: \$31
Total value: 2358 (pts+wins)


PHILADELPHIA FLYERS

AL MACADAM (\$5, 591 pts) - ADAM OATES (\$14, 1420 pts) - JAROMIR JAGR (\$73, 1921 pts)
GORDIE ROBERTS (\$11, 420 pts) - PAUL COFFEY (\$94, 1531 pts)
MICHEL LAROCQUE (\$2, 160 wins)
Total cost: \$199
Total value: 6043 (pts+wins)


Best bang for the buck

JERE GILLIS (\$1, 173 pts) - WES WALZ (\$2, 260 pts) - TODD WHITE (\$3, 381 pts)
JOHNNY ODUYA (\$1, 190 pts) - SHAWN ANDERSON (\$1, 62 pts)
DUNC WILSON (\$1, 80 wins)
Total cost: \$9
Total value: 1146 (pts+wins)


PITTSBURGH PENGUINS

JAROME IGINLA (\$13, 1300 pts) - MARIAN HOSSA (\$12, 1134 pts) - LUC ROBITAILLE (\$46, 1394 pts)
SERGEI ZUBOV (\$64, 771 pts) - TIM HORTON (\$44, 518 pts)
TOMAS VOKOUN (\$20, 300 wins)
Total cost: \$199
Total value: 5417 (pts+wins)


Best bang for the buck

JAROME IGINLA (\$13, 1300 pts) - MARIAN HOSSA (\$12, 1134 pts) - ALAIN LEMIEUX (\$1, 72 pts)
IAN TURNBULL (\$6, 440 pts) - JOEL KWIATKOWSKI (\$1, 45 pts)
RICK TABARACCI (\$1, 93 wins)
Total cost: \$34
Total value: 3084 (pts+wins)


SAN JOSE SHARKS

BILL GUERIN (\$16, 856 pts) - CLAUDE LEMIEUX (\$18, 786 pts) - SCOTT GOMEZ (\$39, 756 pts)
BRIAN CAMPBELL (\$20, 504 pts) - DOUG WILSON (\$86, 827 pts)
ED BELFOUR (\$13, 484 wins)
Total cost: \$192
Total value: 4213 (pts+wins)


Best bang for the buck

BRAD BOYES (\$1, 505 pts) - MARK PAVELICH (\$2, 329 pts) - MIKAEL SAMUELSSON (\$4, 346 pts)
SERGEI BAUTIN (\$1, 30 pts) - MATT CARKNER (\$1, 27 pts)
ED BELFOUR (\$13, 484 wins)
Total cost: \$22
Total value: 1721 (pts+wins)


ST. LOUIS BLUES

WAYNE GRETZKY (\$18, 2857 pts) - PETER STASTNY (\$23, 1239 pts) - DALE HAWERCHUK (\$66, 1409 pts)
PHIL HOUSLEY (\$26, 1232 pts) - DAVE ELLETT (\$52, 568 pts)
MARTIN BRODEUR (\$7, 691 wins)
Total cost: \$192
Total value: 7996 (pts+wins)


Best bang for the buck

MARTIN HAVLAT (\$2, 594 pts) - GARY LEEMAN (\$2, 466 pts) - TED DONATO (\$2, 347 pts)
PHIL HOUSLEY (\$26, 1232 pts) - NATE PROSSER (\$1, 47 pts)
MARTIN BRODEUR (\$7, 691 wins)
Total cost: \$40
Total value: 3377 (pts+wins)


TAMPA BAY LIGHTNING

RADIM VRBATA (\$18, 623 pts) - GARY ROBERTS (\$30, 910 pts) - MARK RECCHI (\$62, 1533 pts)
ADRIAN AUCOIN (\$26, 399 pts) - DOUG CROSSMAN (\$40, 464 pts)
EVGENI NABOKOV (\$11, 353 wins)
Total cost: \$187
Total value: 4282 (pts+wins)


Best bang for the buck

JIM CAMPBELL (\$1, 136 pts) - GLEN METROPOLIT (\$2, 159 pts) - RICH SUTTER (\$4, 315 pts)
JANNE LAUKKANEN (\$2, 121 pts) - NORMAND ROCHEFORT (\$6, 158 pts)
OLIE KOLZIG (\$8, 303 wins)
Total cost: \$23 Total value: 1192 (pts+wins)

TORONTO MAPLE LEAFS

RON FRANCIS (\$12, 1798 pts) -- JOE NIEUWENDYK (\$64, 1126 pts) -- ANDY BATHGATE (\$70, 973 pts)
PHIL HOUSLEY (\$1, 1232 pts) -- BRIAN LEETCH (\$15, 1028 pts)
TOM BARRASSO (\$4, 369 wins)

Total cost: $166
Total value: 6526 (pts+wins)

Best bang for the buck

J.P. PARISE (\$1, 594 pts) -- KEN LINSEMAN (\$2, 807 pts) -- SYD HOWE (\$3, 529 pts)
PHIL HOUSLEY \($1, 1232 pts) -- GLEN WESLEY (\$7, 537 pts)
GERRY CHEEVERS (\$2, 227 wins)

Total cost: $16
Total value: 3926 (pts+wins)


VANCOUVER CANUCKS

MATS SUNDIN (\$41, 1349 pts) - RICK VAIVE (\$47, 788 pts) - THOMAS VANEK (\$61, 789 pts)
MATHIEU SCHNEIDER (\$17, 743 pts) - DOUG BODGER (\$13, 528 pts)
SEAN BURKE (\$16, 324 wins)
Total cost: \$195
Total value: 4521 (pts+wins)


Best bang for the buck

MARCO STURM (\$6, 487 pts) - SERGEI NEMCHINOV (\$6, 345 pts) - MARTIN RUCINSKY (\$13, 612 pts)
MATHIEU SCHNEIDER (\$17, 743 pts) - DOUG BODGER (\$13, 528 pts)
MURRAY BANNERMAN (\$1, 116 wins)
Total cost: \$56
Total value: 2831 (pts+wins)


VEGAS GOLDEN KNIGHTS

MARK STONE (\$18, 322 pts) - PAUL STASTNY (\$50, 688 pts) - DANIEL CARR (\$6, 35 pts)
JASON GARRISON (\$8, 160 pts) - JIMMY SCHULDT (\$1, 1 pts)
MARC-ANDRE FLEURY (\$107, 439 wins)
Total cost: \$190
Total value: 1645 (pts+wins)

WINNIPEG JETS

KEITH TKACHUK (\$18, 1065 pts) -- MARK RECCHI (\$53, 1533 pts) -- PETER BONDRA (\$60, 892 pts)
CHRIS CHELIOS (\$7, 948 pts) -- MATHIEU SCHNEIDER (\$44, 743 pts)
STEVE MASON (\$13, 205 wins)

Total cost: \$195
Total value: 5386 (pts+wins)

Best bang for the buck

CHRIS KUNITZ (\$2, 619 pts) -- KEITH TKACHUK (\$18, 1065 pts) -- PATRICK RISSMILLER (\$1, 46 pts)
CHRIS CHELIOS (\$7, 948 pts) -- UWE KRUPP (\$4, 281 pts)
RICK TABARACCI (\$1, 93 wins)

Total cost: \$33
Total value: 3052 (pts+wins)


WASHINGTON CAPITALS

JASON ARNOTT (\$11, 938 pts) - RICK TOCCHET (\$13, 952 pts) - SERGEI FEDOROV (\$70, 1179 pts)
JEFF BROWN (\$9, 584 pts) - ROMAN HAMRLIK (\$72, 638 pts)
JAROSLAV HALAK (\$12, 254 wins)
Total cost: \$187
Total value: 4545 (pts+wins)


Best bang for the buck

KEITH ACTON (\$6, 584 pts) - OREST KINDRACHUK (\$4, 379 pts) - JASON ARNOTT (\$11, 938 pts)
ROD SEILING (\$1, 331 pts) - SHAWN CHAMBERS (\$2, 235 pts)
ROGER CROZIER (\$3, 206 wins)
Total cost: \$27
Total value: 2673 (pts+wins)

Sunday, October 21, 2018

NHLErrata launch

Ever since I started collecting the NHL data it was very important to me to validate the collected information. So I created a set of checks that finally formed a whole library to test both the NHL boxscore feeds and the HTML reports.

I managed to fish out quite a few errors and inconsistencies. Some where systemic, and could be fixed in software, some required a manual intervention, sometimes by editing the source file, sometimes by providing the correct value overriding what the parser would read. These interventions, classified into a variety of types, formed another library.

But I also wanted to share the errors that I found and the fixes I figured out with the analytics community. So I decided to create a website dedicated to it. It took a while, but finally a couple of days ago I was able to open NHLErrata.com. There you can find:

  • An overview of data sources.
  • Information on missing players and events
  • Information of broken reports, players and events
  • Systemic problems encountered with the reports

Both mentioned libraries, Test.pm and Errors.pm are part of my scrape-to-database package on CPAN.

Monday, October 15, 2018

New features for the 2018/19 season.

After a period of deep dormancy we welcome the 2018/19 on our website with three major changes:

1. MoreHockeyStats is now a network of sites:


  • MoreHockeyStats.com - the unusual statistics from the NHL for the league, the teams, the players, the coaches and the draft.
  • HockeyEloRatings.com - the Elo ratings for teams, coaches and players, in general and for particular stats and situations.
  • NHLErrata.com - the errors we discovered while crawling and testing the NHL data.
2. All our data is now available through a sort of API. When a table is displayed, there is a set of links on how you can access the data:


  • JSON - receive the data displayed in the table as a JSON via direct link. 
  • CSV - receive the data in a CSV table.
  • Table - display the data as a pure HTML table with a direct link.
  • Link - direct link to the results displayed.
These links have a systemic structure and thus can be crawled by a bot.

3. Most of our tables now feature links to personal cards for teams, players, coaches and even the rinks. These cards display the visual changes to the stat displayed in the table for the particular team, player etc. We welcome ideas for the cards in the pages that do not have these cards yet. Here's a sample playercard:



Welcome, and have a great 2018/19 hockey season.

Tuesday, June 12, 2018

Success randomness in chess

This is a surprising entry. It's not about hockey at all But maybe it's good to write surprising entries after a long silence like this. This post was inspired by the research of randomness in playoff results in four major sports that was discussed on Twitter between @StatsByLopez, @StatsInTheWild and @BaumerBen.

Chess is regarded as the least random sport, i.e. most frequently the top seeds succeed and the bottom seeds trail in the standings. Naturally, there is some randomness due to humans making errors as well as the error margins in seeding. But I decided to put this to test and to analyze the closest analogs of playoff competitions in chess: the Candidates competitions between 1950 and 1983 and the FIDE World Cup/KO championships between 1998 and 2017. From 1985 to 1997, due to the prolonged competition between Karpov and Kasparov at first, and the breakaway of Kasparov from FIDE later, the playoff competition systems were unstable and I decided to avoid them in this research. Maybe I'll take a deeper look and include them later.

I. Candidates Tournaments (1950-1983)
These were the events where most of the top chess players competed to determine who is going to challenge the World Champion. In these events there was no literal seedings, but we can assign seeds by the historical Elo ratings of chess player at the start of the event, as provided by the wonderful chess statistics site ChessMetrics. Naturally World Champion, most often ranked #1 in the world did not take part in the competition. 

Twelve tournaments were examined, and here are the outcomes for the top 4 placements at the end:

Seed placement in the top 4 finishers
Year # Pl System 1st 2nd 3rd 4th
1950 10 DRR 2 8 1 9
1953 15 DRR 2 6 7 1
1956 10 DRR 1 2 3 9
1959 8 QRR 1 4 3 2
1962 8 QRR 1 6 7 4
1965 8 P/O 2 1 7 5
1968 8 P/O 2 1 4 3
1971 8 P/O 1 4 3 2
1974 8 P/O 1 2 5 6
1977 8 P/O 1 8 3 7
1980 8 P/O 1 6 4 2
1983 8 P/O 1 5 4 6
Systems: DRR - Double Round-Robin. QRR - Quadruple Round-Robin. P/O 8-game or longer head-to-head matches.

In the knock-out playoff format, the opponent seedings were random rather than rating based!

Now if we find the average value of seeds, there are quite big surprises both ways!

Place1st2nd3rd4th
Avg. seed1.334.414.254.25


The value for the column "1st", i.e. for winners is outrageously, uber-surprisingly good. Average seed of 1.33 means 2/3 of the time the top seed won the competition and the remainder of the time the 2nd seed won it. By the way the first seed never finished outside top 4 (8 wins, twice runner-up and once for 3rd and 4th each). That indicates a minimal randomness in the outcome. But then baffling is the average seed taking second place: 4.41, almost completely random, bigger than both average seed for 3rd and 4th places. For myself I haven't any good explanation that would stem from the game theory, so I'll leave this exercise to my readers.

II. World Knock-out tournaments (1998-2017)
At the end of the 1990s the World Chess Federation (FIDE) tried a completely new format: 128 (in the first three editions - 100) players who qualify through various criteria, played a massive 7-round playoff tournament, with most of the rounds consisting of just two games (rapid and blitz tiebreaks if necessary), and only the final stages were played as longer matches - and even these matches became shorter as the tournament developed. The tournament was serving as a World Championship between 1998 and 2004, and as a World Cup (a World Championship qualifier) since 2005.

Although quite frequently some of the top players in the World (sometimes more than a half of the actual top 10) did not take part in the event, the stability of the seedings was ensured because all the 100 or the 128 participants were ranked by their Elo ratings prior to the event.

The summary, similar to the table posted above, turns out like this:

Seed placement in the top 4 finishers
Year # pl 1st 2nd 3rd 4th
1998 100 2 9 18 8
1999 100 36 31 46 5
2000 100 1 4 3 46
2002 128 19 4 15 1
2004 128 28 3 1 18
2005 128 3 9 2 4
2007 128 11 5 17 10
2009 128 1 7 22 12
2011 128 9 6 2 4
2013 128 3 21 23 32
2015 128 11 16 26 4
2017 128 5 11 8 2
We immediately see the high element of randomness in the top placements. In the years 1999 and 2000 46th seed out of 100 made it twice into the semifinals! The average seed summary table comes out as following:

Place1st2nd3rd4th
Avg. seed10.7510.515.2512.17


Interestingly, both the consistency and the inconsistency of the part I (extremely predictable winner and rather random runner-up) disappear. A top 20 player is expected to either win or to finish second, and the semifinalists are expected to be not very much lower seeded. It is once again confirmed, that the length of the series between two competitors is key to eliminate randomness.

 However, the average seed as runner-up in the 1950-1983 Candidates remains a mystery to me.

Tuesday, February 27, 2018

Website - A Page A Day, Part VII - Buchholz and Sonneborn-Berger

Prologue
Part I
Part II
Part III
Part IV
Part V
Part VI (I need to make a table of contents entry)

This might be the best possible timing for revisiting this page.

We are now past the first section of the website, 'League', and onto the second and probably the richest one - 'Teams'. It opens with Buchholz and Sonneborn-Berger coefficients for the teams.

And why is the timing the best? Because I am going to give a lightning talk about this at the VANHAC 2018!

Actually I already blogged about these two before, so now only a brief recap will follow with a couple of examples:

1. The Buchholz coefficient

The Buchholz coefficient is simply the sum of the points of your opponents.

B = Σn=1N Pn

So, if you played five games, and your opponents currently have 5, 3, 8, 6 and 6 points, your Buchholz value will be 28. Please note, that the current number of points is always used, not the number of points at the moment of meeting. The outcome of the game does not matter (for that one see the Sonneborn-Berger).

 the Buchholz coefficient can clearly show, who has had the stronger opposition up until a certain moment.

Then, if we look at the remainder of the schedule for each team, and for every game we add the opponent's points we get an excellent remaining schedule strength estimator.

Wait... there's a caveat.

Unlike in a chess tournament, where every round occurs for everyone at the same time, and barring very rare circumstances, every participant played an equal amount of games at any point of the tournament, there may be a significant difference in the number of games played by different teams, so summing the opponents up will not work very well. And these opponents also played a different number of games, so their total amount of points is not a very good indicator.

Fortunately, it's not a big deal. Instead of totals, let's operate with per-game numbers. So the NHL Buchholz Coefficient for a team after N games becomes:

B = (Σn=1PPGn)/N. 

Same applies for the remaining schedule strength, where the per-game numbers of the remaining opposition are summed an averaged.

So, if the team played three games against opponents who currently are:
A) 6 points in 4 games, B) 3 points in 3 games, C) 2 point in 5 games, then the team's Buchholz value would be (6/4 + 3/3 + 2/5) / 3 = 2.9/3 ~ 0.967pts.

Here are the Mar 12th 2017 Buchholz coefficients and remaining schedule strengths for the entire 30 times (and note how the Blues stand out with plenty of matchups vs Colorado and Arizona remaining).

+-----------------------+-----------+-------+-------+
| Team Name             | PPG       | Buch  | RStr  |
+-----------------------+-----------+-------+-------+
| Washington Capitals   | 1.4179105 | 1.119 | 1.133 |
| Pittsburgh Penguins   | 1.4029851 | 1.117 | 1.127 |
| Minnesota Wild        | 1.3939394 | 1.090 | 1.070 |
| Columbus Blue Jackets | 1.3731343 | 1.125 | 1.132 |
| Chicago Blackhawks    | 1.3283582 | 1.088 | 1.096 |
| San Jose Sharks       | 1.2985075 | 1.106 | 1.106 |
| New York Rangers      | 1.2941176 | 1.120 | 1.184 |
| Ottawa Senators       | 1.2537313 | 1.105 | 1.169 |
| Montreal Canadiens    | 1.2352941 | 1.122 | 1.097 |
| Edmonton Oilers       | 1.1791044 | 1.121 | 1.040 |
| Anaheim Ducks         | 1.1764706 | 1.102 | 1.150 |
| Calgary Flames        | 1.1764706 | 1.099 | 1.140 |
| Boston Bruins         | 1.1470588 | 1.115 | 1.151 |
| Toronto Maple Leafs   | 1.1343284 | 1.114 | 1.150 |
| Nashville Predators   | 1.1323529 | 1.105 | 1.116 |
| St. Louis Blues       | 1.1194030 | 1.144 | 0.943 |
| New York Islanders    | 1.1194030 | 1.142 | 1.103 |
| Tampa Bay Lightning   | 1.0895522 | 1.121 | 1.134 |
| Los Angeles Kings     | 1.0746269 | 1.118 | 1.104 |
| Philadelphia Flyers   | 1.0447761 | 1.122 | 1.179 |
| Florida Panthers      | 1.0298507 | 1.118 | 1.175 |
| Carolina Hurricanes   | 1.0000000 | 1.138 | 1.136 |
| Buffalo Sabres        | 0.9855072 | 1.127 | 1.158 |
| Winnipeg Jets         | 0.9565217 | 1.110 | 1.143 |
| Vancouver Canucks     | 0.9558824 | 1.115 | 1.152 |
| Dallas Stars          | 0.9552239 | 1.119 | 1.100 |
| Detroit Red Wings     | 0.9545455 | 1.151 | 1.059 |
| New Jersey Devils     | 0.9117647 | 1.148 | 1.132 |
| Arizona Coyotes       | 0.8358209 | 1.133 | 1.098 |
| Colorado Avalanche    | 0.6119403 | 1.128 | 1.164 |
+-----------------------+-----------+-------+-------+

2. The Sonneborn-Berger coefficient.
This stranger beast is a metric extensively used for tie-breaks in chess-round robins and as an auxiliary tie-break tool to the Buchholz coefficient in non-round robin. Let's start with the definition.

$$SB = Σ↙{n=1}↖N f(R_n,P_n)$$

where Rn is the result against the n-th opponent, and Pn is the opponent's points score.
The function  f(Rn, Pn) in the NHL is defined as:

f(Win, Pn) = Pn/N
f(OW, Pn)  = 2*Pn/(N*3)
f(OL, Pn)  = Pn/(N*3)
f(L, Pn)   = 0
where N is the number of games by that opponent

to account for the overtime point.

Then, we can calculate the minimal possible SBmin value for a team with the given schedule so far this season, by assigning Wins to be against the weakest teams played, and the OW/OL against the weakest remainder until the sum of W, OW and OL points add up to the number of points the team currently has.

Similarly we shall calculate the maximal possible SBmax value by assigning Wins to be against the strongest teams played, and the OW/OL against the strongest of the remainder, assuming OT wins are about 1/4 of the whole.

Then the closer the actual SB is to the SBmin or SBmax we may be able to say whether the team is successful more against the bottom feeders, the top guns, or whether it achieves its points from the whole spectrum available.

Here is the table describing how teams had their SB positioned between SBmin and SBmax. on 03/12/2017, multiplied back by the number of games of each team for better visibility:

TeamPointsSBminSBoptSBSBmax
Pittsburgh Penguins1.4044.2846.4846.2453.06
Washington Capitals1.4044.7046.7447.7752.89
Minnesota Wild1.3742.2544.3646.6350.66
Columbus Blue Jackets1.3743.1045.3646.4452.15
Chicago Blackhawks1.3441.6143.9043.7950.80
San Jose Sharks1.3140.6842.9744.1649.84
New York Rangers1.3041.2543.6745.5550.92
Ottawa Senators1.2537.8440.0741.7946.78
Montreal Canadiens1.2539.3741.7441.0548.87
Anaheim Ducks1.1936.8639.4340.1247.15
Calgary Flames1.1835.9738.4938.2046.05
Edmonton Oilers1.1635.8638.3237.4345.70
Boston Bruins1.1534.7337.2337.7444.72
Nashville Predators1.1333.2836.1438.0444.72
Toronto Maple Leafs1.1334.6436.9935.6644.02
St. Louis Blues1.1234.6937.1438.5244.50
New York Islanders1.1234.3636.9437.9444.71
Tampa Bay Lightning1.0932.6234.9835.4142.06
Los Angeles Kings1.0732.1034.6633.5642.34
Philadelphia Flyers1.0431.2633.5632.0140.48
Florida Panthers1.0330.8933.1230.9539.82
Carolina Hurricanes1.0029.4331.7832.4138.85
Buffalo Sabres0.9930.0932.4933.4339.68
Winnipeg Jets0.9627.5530.3531.4838.75
Vancouver Canucks0.9628.4830.9129.0238.21
Dallas Stars0.9428.0530.6231.1638.34
Detroit Red Wings0.9429.1231.1230.0237.13
New Jersey Devils0.9127.7830.1528.6337.27
Arizona Coyotes0.8425.1327.2425.8633.56
Colorado Avalanche0.6117.9019.7419.9825.25

Once again, we use Point Per Game values because the teams and their opponents have a different number of games played at most of the moments within a season.

We would dare to make one more step forward and claim that the team that performs closer to SBmax seem to have a coach problem (notable differences highlighted in green in the table above). The roster is there to compete against the best, but the points aren't trickling in at a pace goo

Sunday, February 25, 2018

Website A Page - A Day, Part VI - Warm Welcome


Prologue
Part I
Part II
Part III
Part IV
Part V

With nothing else to do for about half an hour, why not to resume the series?

Have you wondered if it is your team, or your goalie, who always has the first career goal scored against them? Now you can check if your feeling is right. On the page 'Warm Welcome' of the League section on the website we present a look at the first goals scored against different teams and goalies.

With the two left items in the top menu you can select the span over which you want to see the statistics. Want one season only? Select the same season for the start and for the end. Then you can toggle the view by the team or the goalie the first goal is scored against.

For example, for the 2016/17 season, team view:

# Team Goals Allowed
1 Dallas Stars 7
2 Carolina Hurricanes 7
3 New Jersey Devils 7
4 Tampa Bay Lightning 6
5 Ottawa Senators 6
6 Detroit Red Wings 5
7 Pittsburgh Penguins 5
8 New York Rangers 5
9 San Jose Sharks 5
10 Vancouver Canucks 5
11 Colorado Avalanche 5
12 Nashville Predators 4
13 Boston Bruins 4
14 Buffalo Sabres 4
15 Winnipeg Jets 4
16 Arizona Coyotes 3
17 Columbus Blue Jackets 3
18 Edmonton Oilers 3
19 Montreal Canadiens 3
20 Anaheim Ducks 3
21 St. Louis Blues 3
22 Los Angeles Kings 2
23 Washington Capitals 2
24 Calgary Flames 2
25 Minnesota Wild 2
26 New York Islanders 2
27 Toronto Maple Leafs 2
28 Chicago Blackhawks 2
29 Florida Panthers 2
30 Philadelphia Flyers 0

Take a look. You might be surprised. Or not.

Tuesday, February 20, 2018

A Lemma Research - Penalty Box and TOI - Part II

Part I

After completing the first part of the lemma research - penalty box - the second part was shorter, easier, but just as useful. I decided to find out the share of time teams spend on average while at even strength, on power play/shorthanded and with empty net. Then given this number, and the number of goals scored in each such situation, I was able to calculate the frequency of EVG/PPG/SHG/ENG or the reverse of it which I called the difficult of such goal.

I scanned the database of all games between the 1999/00 season and today, and all the goals extracted from these games. Penalty shot goals were ignored, regardless if during the game itself, or in post-game shootout. The EN time was calculated as total game time minus goaltender TOI. PP/SH time was deducted from the recorded PP TOI of the players. The EV time would naturally become the total game time minus EN minus PP of both teams.

Then I calculated the difficulty of scoring a goal in each of these situations through the following formula:

DiffTYPE = ( GOALSEV /  GOALSTYPE ) x ( TOITYPE / TOIEV )

where the difficulty of the EV goal is considered "1". Here are the combined results of the difficulties in a table:
SeasonEV PP SH EN
1999 1.000 0.502 3.506 0.162
2000 1.000 0.473 3.387 0.146
2001 1.000 0.492 3.635 0.153
2002 1.000 0.468 3.585 0.167
2003 1.000 0.445 3.127 0.221
2005 1.000 0.535 4.247 0.272
2006 1.000 0.506 4.000 0.228
2007 1.000 0.458 3.597 0.187
2008 1.000 0.438 3.745 0.183
2009 1.000 0.456 4.044 0.192
2010 1.000 0.450 3.517 0.177
2011 1.000 0.460 3.568 0.169
2012 1.000 0.430 3.890 0.169
2013 1.000 0.453 3.209 0.198
2014 1.000 0.427 3.564 0.171
2015 1.000 0.415 3.284 0.158
2016 1.000 0.419 3.252 0.178
2017 1.000 0.427 3.052 0.168

If you divide 1 by these values you can get the relative frequency of goals scored in each situation.

The dataset containing this data is available on the website, on the Request Analysis page.

So why did I need these two lemmas? That blog post won't be ready any time soon, and I better resume the "Page A Day series'.