Marcels - The Hockey Edition

DatsyukToZetterberg

Alligator!
Apr 3, 2011
5,550
739
Island of Tortuga
I was looking for a project that could help me begin to learn how to use R and the one that I settled on was to try an recreate the Marcel Projections from baseball, but for hockey. The Marcels are of the most basic projection systems around and created by Tom Tango to act as a reference point for all other projections. When I googled it I wasn't able to find any examples so I thought this would be a good project to try.

Without going into too much detail Marcels use three seasons of data, with the more recent seasons being more heavily weighted; regresses those weighted numbers towards a league average; and then adjusts those projections by an age adjustment. All rookies are assumed to provide league average production for whatever position they play. This blog post by Tango goes more in-depth with the process and will explain it better than I could.

I decided that the best way to go about projecting a player’s stats was not to use TOI, but to use TOI/GP. I found in previous research that there was little predictive value in using a player’s previous seasons GP to predict a future number of GP. For that reason, I felt it would create more accurate projections if the GP portion of the equation was removed and the projections assumed all players would play 82 games.

The steps are the same to calculate the hockey Marcels, the difference is in some of the values used.

1) The 5/4/3 weights for each season were kept the same and I continued to use league averages as the regression component – though I did split the league averages into F & D categories. I also made the decision to implement a minimum GP of 15 to count as a season played. The regression towards the mean component was changed from 1200 PA to 31 toi/gp for Fowards and 37 toi/gp for Defenceman.

2) The original projected PA formula called for PA = 0.5*N-1PA + 0.1*N-2PA + 200. I couldn’t find a reason for why the specific coefficient values were used or why it was + 200 PA. I assumed the 200 PA was used to provide a baseline and act as floor value. It also worked out that 1/3 of 600 PA is 200. I initially tried the base formula, but found that the projected TOI values were far too low to be reasonable projections. I settled on this formula through trial and error:
  • TOI(F) = 0.5*N-1 + 0.2*N-2 + 5
  • TOI(D) = 0.5*N-1 + 0.2*N-2+ 6
*The 5 for F is about one-third of 1250/82 and the 6 for D is about one-third of 1500/82*

3) For the age adjustment I lowered the peak to 28 and the values for the adjustments to 0.01 (if under 28) and 0.005 (if over 28). 28 was used because it’s around the age where both F and D see their TOI peak and the values were adjusted because I felt like there should be a slightly higher increase/decrease for aging.

As an example let's calculate McDavid's projected goals for the 2021 season.

1) First we must calculate McDavid's weighted goals per gp:

Weighted Goals/GP: ((34G/64GP) * 5) + ((41G/78GP)*4) + ((41G/82GP)*3) = 6.2588

2) We calculate the league wide rate of goals per minute and multiply it by McDavid's TOI:

2018: (6290G/456,259 TOI)*(1767/82)*3 = 0.891
2019: (6452G/456,802 TOI)*(1781/78)*4 = 1.290
2020: (5460G/388,451 TOI)*(1399/64)*5 = 1.536
Total expected goals of: 3.717 in 265.27 TOI. The TOI comes from (1767/82)*3 +(1781/78)*4+(1399/64)*5

3) We want to change this number from the 3.717 expected goals in 265.27 weighted TOI to a set rate per 31 minutes. Then we combine the weighted goals and the expected goals per 31 minutes to get a goals per minute:

Goals per 31 minutes: (3.717/265.27)*(31) = 0.4343

We then use this number to calculate McDavid's goals per minute:

Goals per min: (6.2588+0.4343)/((31)+265.27) =0.02259122

4) Then multiply the goals/toi by McDavid's proj TOI and by 82:

Projected TOI: 0.5*(1399/64) + 0.2*(1781/78)+ (5) = 20.50

Proj Goals (Pre Age adj): 0.02259122*20.50*82 = 37.98

5) Apply the aging value:

((28-(2021-1997))*0.01+1)* 37.98= 39.50 ~ 40

These were the only notable changes to the Marcels. With actual projections made the only thing left to do was to compare the projections with how the season actually played out. I decided to use RMSE, R^2, and MAE as my methods to evaluate the accuracy of the model. I believe all three have their merits and can be used to draw helpful conclusions.

The error for the Marcels in the 2018-2019 season:



And the error for the 2019-2020 season:



In this case I included two different samples. One that included all the players that played in the season and had a projection as well as one which included just those that played in at least the past 3 seasons. This was because the Marcel is really designed to only project those with 3 seasons of data and expecting it to project those seasons accurately is unfair.

From first glance the Marcel seems to have been decent at projecting most of the categories as the R^2 values are greater than 0.60, some are over 0.70. Those numbers become more accurate when we limit the sample to just those that had 3 season worth of data with most being in 0.70 to 0.80 range. That’s very promising and shows that overall the Marcels were able to explain quite a bit of the variation. I’ll also add that I did conduct an F-Test for each category and confirmed that the predictions were useful. It’s a little bit harder to tell what the RMSE and MAE mean without comparing them to other projection models. Unfortunately, I wasn’t able to find a ton of public projection models that were easily downloadable, so I used a post from Dom Luszczyszyn to act as my reference point.



The picture is comparing two models for the 2018-2019 season, those being the Left-Wing Lock and Dom’s, and are based on a full 82 GP season for all players. While it’s never specified if Dom used MAE or RMSE in his comparison I make an assumption that he uses MAE due to the lower error values. The Marcel is beaten handedly in some categories by Dom’s model; however, it holds its own against the LWL model in goals, assists, powerplay points, Penalty Minutes, and TOI. While it’s clear that overall the other models are better than the Marcel I think it’s a positive sign that it came close in some categories and wasn’t too far behind in some others.

For the 2019-2020 season I think that while the overall error scores are lower, indicating more accuracy, the R^2 is also lower. I believe this is due to the regular season being cut short and there being a large number of games not played for all players. When I compare the MAE and RMSE values to my own projection model the values are again quite similar and are not too far off in most categories.

The Marcel model clearly has its limitations. It’s a 3 season weighted model which means players without those full 3 seasons will likely have projections that are all over the place. Not just that, but it also regresses players towards a league average. This means that projections will naturally be more conservative than other models. All that said, I think the hockey Marcels are still an excellent baseline for a projection model and are an excellent reference point. If your model is having a hard time beating the Marcel then you should probably re-evaluate it.

I should also reference the links that were quite helpful to me in creating this project. Thanks to Evolving-Hockey, for help with setting up the process; Marcel the Matrix, for help with the R code and a guide I could loosely follow; Beyond the Box Score, for help with setting up the methodology and a process to follow; and Tom Tango for keeping his blog post up so I could have something to reference.

*I have the 2021 projections all ready. I'll attach those in a post below.
 
Last edited:
  • Like
Reactions: NHL WAR

DatsyukToZetterberg

Alligator!
Apr 3, 2011
5,550
739
Island of Tortuga
PlayerPosAgeTOIGoalsAssistsPtsPPGPPAPPPShotsBlocksHitsPIMFOWFOL
Connor McDavidF2420.50407011092635252334930388455
Leon DraisaitlF2520.824158100131831228275235665604
Nikita KucherovF2718.433663100825332412648483031
Nathan MacKinnonF2520.03395998122133333336133452590
David PastrnakF2418.234550961817362873268433541
Brad MarchandF3218.65325890721282072558816376
Evgeni MalkinF3418.53315889102030224356183482531
Artemi PanarinF2919.28305888714212132231263032
Auston MatthewsF2319.20484088121224302734817546472
Mitch MarnerF2319.74256388721272254544275054
Patrick KaneF3220.17335286716232852132343133
Steven StamkosF3017.87365086141529223448242458403
Jack EichelF2420.1434508491827286506837586685
Sidney CrosbyF3319.3329558482029207367135855708
Mikko RantanenF2418.643349821416302014460408074
Jonathan HuberdeauF2718.15275380720271943860364852
Mika ZibanejadF2719.934039791512282546710330748757
Brayden PointF2418.2433447711920192454024464465
Mark ScheifeleF2720.27324577101021184505939675737
Aleksander BarkovF2519.4827507781422210533718802691
Sebastian AhoF2318.7436417671320237297431410456
Johnny GaudreauF2718.41255176516222271821223032
Elias PetterssonF2217.91324476101626189557423189252
Taylor HallF2918.52265076620262664966397282
Alex OvechkinF3519.524629751482331333177352930
John TavaresF3018.5935407591322244415131730617
Patrice BergeronF3518.06353975111425243586135847639
Blake WheelerF3418.8021537442327203539446196210
Jake GuentzelF2619.19353874971523045114346671
Mark StoneF2818.68274673513181936075285460
Kyle ConnorF2419.39383573108172462630303539
Mathew BarzalF2318.6122507241419196503747291392
Teuvo TeravainenF2618.18215171617221963139165158
Matthew TkachukF2317.673041719132222424124753538
Claude GirouxF3318.7824477061723200224527602433
Evgeny KuznetsovF2817.6823467071320180255449407551
Patrik LaineF2218.1536336814102326447100354354
Ryan Nugent-HopkinsF2719.2528406871522205496234342368
John CarlsonD3123.3314546832527195135623201
J.T. MillerF2717.98244367815231653613545405333
Brock BoeserF2318.12293867813212432943265468
Sean CouturierF2819.342740666814205426433568433
Gabriel LandeskogF2819.25303766913212155512954334290
Sean MonahanF2617.86293766101020204266025567536
Nicklas BackstromF3318.5018476651722163455029605616
Dylan LarkinF2420.002441655914259467859750676
David PerronF3217.57263965715221662491576074
Jakub VoracekF3117.26174865416201822930353843
Anze KopitarF3319.9824416551520156585823800662
Filip ForsbergF2617.403035641071724539113393235
Ryan O'ReillyF2919.4420446461319182423713949706
Tyler SeguinF2918.7227376471320281408528594477
Jonathan ToewsF3219.0924406441014203375546867658
Alex DeBrincatF2317.29303363118192292962194652
Travis KonecnyF2316.45283563411161924889434853
Phil KesselF3317.172240621017271952223293235
Elias LindholmF2618.87273662811191834410025446411
Anthony ManthaF2618.0128336196152354094525464
Mike HoffmanF3116.992932611113242332945314043
Tomas HertlF2718.022833616613187576730613551
Andrei SvechnikovF2016.302635614121622135141664245
Brayden SchennF2917.95243761710171713212947410437
Logan CoutureF3117.9826346141216194616925249297
Nikolaj EhlersF2416.412932604592293150313334
Reilly SmithF2917.6125356057111893559243336
Torey KrugD2920.511150603283118777704200
William NylanderF2417.212535606815217233121251230
Jonathan MarchessaultF3017.2725356069152642310741140184
William KarlssonF2818.202534605712173485720508515
Sam ReinhartF2519.102535606101618542532571100
Bryan RustF2818.06273260661218856120373747
Evgenii DadonovF3117.2227325997161873541132929
Bo HorvatF2519.0426335910717209606527907743
David KrejciF3417.1319405851016132374725487485
Timo MeierF2417.04273158461024448142545869
Pierre-Luc DuboisF2217.5124355839121875511859440551
Roman JosiD3023.9315435841418259128694000
Victor HedmanD3022.5813455832124188112954401
Matt DucheneF3017.212335586713173385222557463
Alexander RadulovF3417.33233458710171886368573236
Jaden SchwartzF2817.7222365768141923473254752
Brent BurnsD3523.7312455751520253116833700
Erik KarlssonD3023.167505721820193109593100
Tomas TatarF3016.4324335775131873185383748
Max DomiF2517.022036572911194295560370417
Evander KaneF2918.45302656961527032163125132142
Max PaciorettyF3217.36272856791626734122435861
Josh BaileyF3116.8117395631316131423019125129
Kevin FialaF2415.83233356610172062748433438
Dylan StromeF2316.202035555812156493929419472
Eric StaalF3617.192530557815177324335531522
Nico HischierF2217.652134553912192527327566613
Ryan GetzlafF3518.25154055210121547313858531503
Brendan GallagherF2816.7430255546102863997426268
Rickard RakellF2717.77233255681422238103236368
Morgan RiellyD2622.7210455511617206113692901
Chris KreiderF2917.11272755961520048149647188
Brady TkachukF2117.67262954471127945274103157172
Tyler BertuzziF2517.9622325437111624995523843
T.J. OshieF3417.8725295496151526012234128142
Kyle PalmieriF2917.182925541292121347104454974
Brock NelsonF2918.02262854459186546338569574
Cam AtkinsonF3117.8028265457132603441185874
Clayton KellerF2216.80193554315182102429305162
Pavel BuchnevichF2516.5022325468151743389274056
Jakub VranaF2415.252628542892012852264141
Kris LetangD3324.05153954414182151171235100
Anthony CirelliF2317.202231531341505210938516546
Nazem KadriF3016.952627537916206219885516436
Viktor ArvidssonF2716.933023534492203941373844
James van RiemsdykF3115.7728245387142032446223638
Zach PariseF3617.3327265395152025750225054
Kailer YamamotoF2216.3023305343712550125304342
Anders LeeF3017.562825537614210501095292101
Jamie BennF3116.8625275287141896114953262236
Oliver BjorkstrandF2516.442725524492263974193946
Nick SchmaltzF2416.331636525915127372523233336
Kevin HayesF2817.522427525510188288028496497
Vincent TrocheckF2717.29183452510152075013360598542
Jason ZuckerF2916.5825265277151853882333750
Tyson BarrieD2921.291141523182119694592800
Ryan StromeF2717.912032514913161356854434487
Robert ThomasF2114.891437513710125273425174215
Ryan JohansenF2817.4416355121113131347653659567
Jordan EberleF3017.2122295157131824354213741
Jake DebruskF2416.2626245175132003068244356
Phillip DanaultF2717.981536511451515311443737619
Cale MakarD2216.511239514141813767652000
Dougie HamiltonD2721.57193251310132621011145601
Mikael GranlundF2817.5720315041014180535729116124
Mats ZuccarelloF3316.94173350311151465457314151
Zach HymanF2818.012525502351654410449124146
Paul StastnyF3517.18183250459153326231649541
Joe PavelskiF3617.272326508916171587731423366
Tom WilsonF2617.76242650437172642651415665
Rasmus DahlinD2019.887425041822155821084700
Ryan EllisD3022.56113950279168147732400
Thomas ChabotD2423.8612385011414200116924100
Alex KillornF3116.9422274955101582583373846
Andre BurakovskyF2514.832227493791464456324448
John KlingbergD2821.999404931821172100532600
Jonathan DrouinF2516.2419304931216173247135149194
Gustav NyquistF3117.5219294937101883153194141
Kevin LabancF2515.84173249412161832864423744
Alex PietrangeloD3122.9114344941317205129632500
Keith YandleD3420.34742493202315575393300
Jesper BrattF2215.0318304939121483459163740
Ondrej KaseF2516.412226482572293345194567
Victor OlofssonF2514.19222648117181522432144949
Dustin BrownF3618.29222648551019027155333442
Patric HornqvistF3416.06252348871423955155473738
Mikael BacklundF3117.55182947368191265847476495
Ondrej PalatF2916.07163147461114859139243649
Seth JonesD2623.81103647311141961491013100
Andreas AthanasiouF2616.312224463610208355138137175
Andreas JohnssonF2615.612027466391594385344347
Anthony DuclairF2515.672521467391964669253639
Adam HenriqueF3016.732323466511158527925508462
Yanni GourdeF2915.20182846459135328255146145
Quinn HughesD2116.94739462182012460312600
Zach WerenskiD2322.571828464101420993672000
Jeff SkinnerF2816.9526204646924923453296105
Anthony DeAngeloD2519.5110364621617174102796610
Jakob SilfverbergF3017.2623234646101845150244362
Mark GiordanoD3722.7910354621214192154685200
Chris TierneyF2617.00143246257128484824524503
Tyler ToffoliF2816.8722234555102322363244146
Joe ThorntonF4115.8614314551015102273637335321
Alex TuchF2415.66192645561119644111206891
Ryan SuterD3623.667384521416125107692700
Ryan DzingelF2815.4419264556101443259355062
Justin WilliamsF3915.2922224565112043270366689
Dominik KahunF2514.471727442241453427156977
Conor GarlandF2414.6326194466122083258275051
Shea TheodoreD2521.141232442111322096422700
Anthony BeauvillierF2316.5623214434817443106206571
Dominik KubalíkF2512.182618444481542282215459
Erik HaulaF2916.241924446612158346642492448
Tyler JohnsonF3015.46212244279158356625248255
Alexander KerfootF2615.361627444912123445540261273
Brandon SaadF2816.912420443142002953206072
Nino NiederreiterF2815.6519244467131652681434645
Kasperi KapanenF2416.2219244313417026111273644
Brett ConnollyF2814.912221434261402877334149
Ilya KovalchukF3716.7318254346101823471255058
Jared McCannF2415.53192543236189469733314385
Erik GustafssonD2820.71113243210121491001003101
Tanner PearsonF2816.0621224335817944121314149
Roope HintzF2415.19212143410141664711631276258
Drew DoughtyD3124.2383442512171581091294300
Nikita GusevF2812.3514284259131531432174949
Joonas DonskoiF2815.811824423361474345283742
Alex GalchenyukF2614.3017254261017163336729135147
Mikhail SergachevD2219.77103242310131581151255400
Marcus JohanssonF3016.761526422710139325027157213
Craig SmithF3114.7422204254102133276315256
Lars EllerF3116.81172542246171547545525518
Kyle TurrisF3115.851328425913129323735366368
Oskar LindblomF2416.552220424381855193234856
Andrew ShawF2915.411625424481573817387206214
Charlie CoyleF2816.75162642145161549225327359
Alex IafalloF2717.831725424481635176214246
Jeff CarterF3617.102219427613209328435520475
Drake BathersonF2215.461427416121811963140415448
Connor BrownF2717.811626412241564049266581
Shea WeberD3522.7016254155102051421523900
Carl SoderbergF3516.44192241459159548725363407
Aaron EkbladD2422.21103141369177106794700
Christian DvorakF2416.23172441549151427419562481
Danton HeinenF2515.031526413791444159193742
Jeff PetryD3322.45113041310131631091722900
Charlie McAvoyD2322.02832412351231421576100
Neal PionkD2521.9263541217191721091643900
Mathew DumbaD2621.92152541510151931081294700
Joel ArmiaF2716.7720204034720039167333849
Frank VatranoF2615.4422194023520458133494858
Alexander EdlerD3422.2283240212141622031527100
Nick SuzukiF2112.991426405712139337113271307
Nick RitchieF2515.08152540358147371891223643
Filip HronekD2321.941030402911151891315700
James NealF3316.1521194096151822987283742
Pavel ZachaF2316.35142540459145329427407481
Jared SpurgeonD3122.1212274031013138135842101
Tyler BozakF3415.93152540368147365322464394
Zach SanfordF2614.3919214012313450120384548
Derek StepanF3017.67142640279190545721616677
Ryan PulockD2621.6811294046101971481402300
Martin NecasF2212.0917224055101102577256179
Adrian KempeF2415.91162440279161259847240331
Vladislav NamestnikovF2815.691821404471355512148108123
Scott LaughtonF2615.281822401111414516450314278
Jordan StaalF3217.411525392461613516839734596
Rasmus RistolainenD2622.3363339113151651102154700
Adam GaudetteF2413.381524394812118316944263362
Ilya MikheyevF2612.781425391121612656145250
Jean-Gabriel PageauF2818.152019393361756914044598533
Calle JarnkrokF2916.05172239257146335319165163
Colin WhiteF2416.09132639346134485942332381
Vinnie HinostrozaF2614.601326392351673871207087
Tyler EnnisF3114.351820384591693497193739
J.T. CompherF2516.87172138459151735530371406
Sam SteelF2215.771622381810133324831431435
Jack RoslovicF2414.40152338325133306814111127
Nate SchmidtD2921.23930381910138125501800
Andrew MangiapaneF2413.962018381221493798285463
Filip ZadinaF2112.5919193887151502845135351
Miro HeiskanenD2122.5010283817818998572100
Travis BoydF2712.8412263814598365214174243
Mikko KoivuF3716.4411273821013131474138621550
Nick FolignoF3317.881622382351545720257219225
Jake VirtanenF2414.5119193842618541160533946
Blake ColemanF2916.762216382242155422265144191
Nick BoninoF3216.52181938213123833322545492
Zack KassianF3015.7917203811213418193983440
Oliver Ekman-LarssonD2922.241226384912167751504600
Shayne GostisbehereD2719.071028384121617198503200
Jacob TroubaD2621.867303838101831521495900
Derek RyanF3415.03142438247125323622435358
Ryan DonatoF2413.051819372581712967187290
Derick BrassardF3314.851621374581492611732322317
Josh MorrisseyD2521.87730372911137127863400
Mattias EkholmD3022.3692937268152112714200
Josh LeivoF2715.311522372781702849285552
Adam FoxD2215.45730371101112193513300
Jake MuzzinD3121.07928371461471431635000
Oscar KlefbomD2723.517303721415213178672800
Bobby RyanF3314.8916213634714949111453839
Paul ByronF3115.0717193612311550132214459
Boone JennerF2717.471621362351998316144570475
Andrew CoppF2616.28142236112141459617338301
Ivan ProvorovD2423.441224364691691451203000
Martin FrkF2713.751917365271331999223435
Rocco GrimaldiF2713.331323361121582954204446
Luke KuninF2315.911620361231706011962212258
Robby FabbriF2515.6116203653814925100276377
Travis ZajacF3517.41152136347108427228643547
Alex ChiassonF3014.9618183666131273286433647
Darnell NurseD2522.49728350561901521716600
Will ButcherD2618.81630351101110897501700
Matt CalvertF3114.8916203511214744100555462
Artem AnisimovF3215.20201535629144392819330366
Dominik SimonF2614.871224351231433499284656
Miles WoodF2514.3617183522319935122913334
Kevin ShattenkirkD3219.24728352910153100804400
Alexander WennbergF2616.3682735257101454421396452
Jordan GreenwayF2314.8113223513413251100526268
Damon SeversonD2621.8910253527101421001025600
Wayne SimmondsF3215.60161935651115538141734453
Jaccob SlavinD2622.3182735235157135651700
Richard PanikF2913.9914203512312939124453739
Jesper FastF2916.4514213511111058146304149
Filip ChytilF2115.17181635347169394218209308
Jayce HawrylukF2512.4214203512310343207466059
Conor ShearyF2814.481619353351503443163838
Samuel GirardD2220.645293511213123107711800
Troy TerryF2315.0411233537101202826144449
Jake GardinerD3018.5743034191010676643300
Corey PerryF3514.8313213437101404071753036
Pat MaroonF3214.0413213426812617135733534
Kyle OkposoF3214.1815203445101452984417373
Derek GrantF3014.291718343131314510733455419
Denis GurianovF2313.6618163456111563599164444
Lawson CrouseF2314.3817173411215244262556669
P.K. SubbanD3121.59102434391218197947600
Cam FowlerD2921.6792534289136104442900
Cody EakinF2915.36151934123121378525476473
Patrick MarleauF4116.0617173433615331732110299
Mathieu PerreaultF3314.0015183444812831123345448
Lucas WallmarkF2514.35141934358130388431485474
Oskar SundqvistF2614.961518341121413910936243306
Drake CaggiulaF2613.8018153321313839177534462
Tyson JostF2213.98141933448154357029117189
Sami VatanenD2921.227273321012160125993900
Teddy BluegerF2615.121617331121304513040328391
Duncan KeithD3722.8042933179143140463800
Artturi LehkonenF2515.8315183311218240122314146
Devon ToewsD2619.848253316714784681901
Warren FoegeleF2414.3516173311215426112365658
Alex SteenF3615.191220332461305855204044
Carl HagelinF3215.111122331111523175314351
Joel Eriksson EkF2415.551221331121625215332392464
Jimmy VeseyF2715.111617331341443377233644
Josh AndersonF2616.4417163223421339183534961
Ivan BarbashevF2514.03151732111974213824192233
Brandon TanevF2915.2015183211213178270313640
Jason SpezzaF3713.071121323811126302926372296
Sonny MilanoF2411.551419321451082147293838
Colton ParaykoD2722.061023323471891411182000
Nicolas Aube-KubelF2410.6415183243710933143375354
Marcus FolignoF2914.6913193211212151229584448
Jesperi KotkaniemiF2014.251517322461524410745339416
Antti SuomelaF2612.1292332112118318620267279
Jakob ChychrunD2221.2711213255101891291184500
Joel FarabeeF2012.051319322241222856495559
Mikkel BoedkerF3112.661121322351212859103541
Radek FaksaF2716.231616322141345810749514505
Sam GagnerF3114.60131832337166245732156170
Alex GoligoskiD3521.69626322810113148992500
Hampus LindholmD2722.3472532279147119824600
Nick CousinsF2714.461319323251554712541146173
Alexander NylanderF2211.071319321341162148175663
Zach Aston-ReeseF2614.9416163211115153244404354
Noah HanifinD2420.747253215615399992000
Antoine RousselF3113.67121932123116451051124745
Valtteri FilppulaF3616.1613193223488413424394424
Mike GreenD3520.7772432178140100994700
Matt LuffF2312.421417312131363975214352
Matt NiskanenD3421.34823312571391121423800
Vince DunnD2417.64102131371016274613700
Casey CizikasF2914.951813311111256918050571531
Ryan MurrayD2720.274273103398143531800
Evan RodriguesF2713.81121931235160354828266311
Denis MalginF2413.58131831235122377825116156
Brendan LemieuxF2413.24151731236132632101476073
Valeri NichushkinF2514.4212193111213940113164444
Casey MittelstadtF2214.08141731359127254714246311
Dillon DubeF2213.361120312241212592196578
Justin SchultzD3020.045263111112141107681700
Barclay GoodrowF2715.171219311221267316389385358
Travis SanheimD2419.9982331144138110613600
Brian BoyleF3613.881615315271355414142339321
Brandon MontourD2620.248233125615398984600
Ryan HartmanF2613.751318311121505194769393
Michael FrolikF3213.891317310111433361344454
Ryan McDonaghD3120.7752631044106159813100
Brett HowdenF2214.56121931134104709130359381
Mattias JanmarkF2815.351119302351224535236276
Brandon PirriF2914.171515304261673285326764
Max ComtoisF2211.981317304389624133525674
Josh ArchibaldF2814.3315153011110950196284760
Matthew NietoF2814.501119301111123955143637
Nick LeddyD2920.876253017911797872100
Devin ShoreF2613.67111930257108479318107126
Alexandre TexierF2111.3813163013411220542484112
Jordan WealF2814.50131730348135365125238214
Trevor MooreF2513.2713173011212935101164653
Emil BemstromF2111.1314163064101322674175661
John MarinoD2316.12723301458495902700
Marcus SorensenF2814.521515301111113488294049
Kirby DachF2012.13111930145123295229113172
Rudolfs BalcersF2313.541119303251394989164252
Michael GrabnerF3314.061811301121333057173438
Chandler StephensonF2614.5812173011287466516181204
Zack MacEwenF249.79209301129326153725555
Dmitry OrlovD2921.41524301341151031243400
Nicolas RoyF2310.71141629314118239824225238
Tyler MyersD3020.83722291891521161005500
Kaapo KakkoF1912.14131729310131281941215456
Jordan KyrouF2212.381217291331282737295148
Austin WatsonF2913.7114152911211771206984544
Anders BjorkF2413.831217292241064164183636
Colton SissonsF2715.371415291231115412232423379
Brandon SutterF3115.91141529224138356929502508
Colin MillerD2818.50525292911148751444500
Joey AndersonF2214.191712291121283398185756
Logan BrownF2210.877222936993355518178233
Colin BlackwellF2710.48101929112975310528119104
Sam BennettF2413.921514292351503115073130119
Morgan FrostF2111.85101929112121203520167180
Mathieu JosephF2313.0314152911211726135385165
T.J. BrodieD3020.5262329145101101353200
David BackesF3612.311019293361503214457153158
Esa LindellD2622.57722292581291451162600
Jason DickinsonF2515.161019291121236114232276336
Loui ErikssonF3514.001217291231193222193232
Jack HughesF1912.931118294610145283518195305
Blake LizotteF2311.9891929225107275725296295
Brock McGinnF2614.4612162911213834123244957
Michael RafflF3213.4612162811210442109319796
Michael AmadioF2413.55121628145118324820260301
Adam LowryF2715.411216281121274622033602486
Austin WagnerF2312.6615142811215426197434750
Tyler PitlickF2913.7014142811212753152223848
Ryan GravesD2517.691117280111411811323800
Frans NielsenF3615.18111728156127496916369409
Noel AcciariF2915.581810281111318119835297317
Sean KuralyF2814.401018281121473816144330335
Mike MathesonD2619.4891828145144112683900
Brett PesceD2621.0462228011126133603200
Nick PaulF2513.911215281231634516233216215
Brady SkjeiD2620.59820280221521211444800
Milan LucicF3214.3210182843711026228725151
Brad HuntD3216.54918275101514666391600
Brendan LeipsicF2612.34819271231133474254041
Justin FaulkD2820.77819273691871011224300
Sean WalkerD2618.51621271451421021022900
Blake ComeauF3415.62121527111118381634781103
Victor RaskF2712.66111627235106246616308323
Dryden HuntF2512.457202711215331161634144
Cody GlassF2111.681116272810108184517132163
Sammy BlaisF2413.2612152711212037283354343
Pierre EngvallF2410.9713142711211721561695120
Mark JankowskiF2613.09141227112106554125371391
Marcus PetterssonD2419.04323270441011181185000
Nikolai ProkhorkinF2711.0591827156111186816167179
Kevin StenlundF2411.981412266510129455422132172
Mike ReillyD2718.7542326181014585793900
Darren HelmF3414.7812142611113835100375255
Jonas BrodinD2720.8942226022113137593200
Mason AppletonF2512.211115261121123166304852
Yakov TreninF249.8610162611210333141326055
Carter RowneyF3113.92101626111855120919198197
David KampfF2614.62101626111113396620404401
Kyle CliffordF3012.6912142611214825167903739
Valentin ZykovF2513.099172644712024107274453
Rasmus AnderssonD2419.1852126044143104725000
Ian ColeD3118.80521260111081611138000
Leo KomarovF3414.088182611297441933098110
Christian FischerF2313.1414122622314831163273544
MacKenzie WeegarD2719.45817260111251321576600
Nathan GerbeF3311.881015261121232296435656
Riley NashF3113.0991626112102518720294321
Riley SheahanF2914.09111425112111455815443422
Vladislav KamenevF2411.3081825236102328932196188
Michal KempnyD3019.1662025011123129864700
Nic DowdF3012.48111425112914614939357349
Colton SceviourF3114.08101525112155781122094116
Zack SmithF3214.16917250121073114060277295
Cedric PaquetteF2713.921313251121196423869420412
Ryan CarpenterF3014.56916251111284014125281313
Jordan MartinookF2813.531016251111184314741125141
Markus NutivaaraD2617.497182502211375831500
Zemgus GirgensonsF2714.6212132511111833149236075
Stefan NoesenF2713.3113122511214642157565568
Ben ChiarotD2921.29718250111341461776500
Madison BoweyD2518.00421250121071041076100
Jujhar KhairaF2613.781015251121054616955120135
Pierre-Edouard BellemareF3514.20101525111119586618431384
Trevor LewisF3413.75111425112147381072493115
Brendan PerliniF2412.671312253361363071303335
Andrew CoglianoF3313.75816251121213588334851
Alec MartinezD3321.0361925166112175892800
Matt GrzelcykD2718.865202516712782725300
Garnet HathawayF2912.4912132511111050221903947
Michael Dal ColleF2413.321014241121173494194544
Erik JohnsonD3220.89618240121461431244000
Sam LaffertyF259.81111424112992812433174176
Taro HiroseF2411.278162411112804150215161
Taylor FedunD3215.646182402213081542700
Isac LundestromF2114.574212414589424312270344
Frederik GauthierF2511.37101424112853811521308266
Caleb JonesD2317.03718240449696872800
Henri JokiharjuD2118.4042124123123901054000
Tomas NosekF2813.301113241111384010126175161
Dennis CholowskiD2219.2681624491212692492410
Connor MurphyD2720.53718240111501611774800
Joakim NygardF2810.3591524214982251215454
Brad RichardsonF3515.02131124111127588933525454
Marc-Edouard VlasicD3320.3661824012111125421900
Olli MaattaD2618.92519241441221411402600
Carter VerhaegheF259.68141024213981854176669
Travis DermottD2418.1151924011124921254000
Johan LarssonF2815.3191524111994712142439434
Cal ClutterbuckF3314.5110142421210763241504044
Jansen HarkinsF2310.3181524112932840185261
Adam BoqvistD2014.11717230449683691800
Joseph BlandisiF269.1010142311270339135135173
Anton StralmanD3420.6451923011109110931900
Justin BraunD3318.70420230121021181192900
Connor CarrickD2616.575182312298107804900
Mackenzie MacEachernF2611.0913102311212524148474446
Tyler MotteF2514.1112112311113072241224962
Kevin RooneyF2713.391112231121085113035325347
Brian DumoulinD2920.74419230221071211272900
Tim HeedD3015.385182325711182441901
Luke GlendeningF3115.831211231121179418722539425
Eric RobinsonF2510.4812112311211025106215558
Phillip Di GiuseppeF2712.688152311114355173253739
Matt RoyD2518.48617230121301381442300
Dylan DeMeloD2719.92221230331161231374700
Michael Del ZottoD3018.76419230221031051992900
Ryan ReavesF3412.251112232129532322756168
Ross JohnstonF2610.5910122311278322221783639
Karson KuhlmanF2511.26616233141302697355256
Max JonesF2214.7711112213416726110485055
Adam PelechD2620.29418220111181541533600
William CarrierF2611.9311112211214524320503937
Curtis LazarF2510.9291322112864113524243243
Melker KarlssonF3013.43111122111965675304645
Rasmus SandinD2013.16319220557470902900
Greg McKeggF2811.9111112211182409127275275
Slater KoekkoekD2617.55616220111141201366300
Josh MansonD2920.78418220111101041786000
Tom KuhnhacklF2913.181012221129574123173337
Charles HudonF2613.1010122213415427155285975
Dmytro TimashovF249.261012221128624139295353
Vladimir SobotkaF3314.96814221121153711531243215
Dylan GambrellF2410.9810122212384406627226257
Joel KellmanF2610.799132211289397016234256
Matt MartinF3112.50912221119741328714241
Barrett HaytonF2010.5771422112114186347115156
Sami NikuD2416.8722022011111101713900
Adam ErneF2513.0210122211211940200495550
Chris TanevD3119.803182201171163503400
Nic PetanF2512.08814221121172842277382
Nicolas HagueD2214.0431922257105621205300
Dale WeiseF3211.99814221119035182453537
Brenden DillonD3019.283192101184962058300
Jordan OesterleD2818.2961621145108135771900
Philippe MyersD2417.6361521011127701523500
Radko GudasD3017.94418210111391242166500
Calvin de HaanD2919.65318210111181621972700
Justin AbdelkaderF3313.84714212249840167487673
Jan RuttaD3016.895162111210473543500
Tobias RiederF2813.07714211231234576134365
Erik CernakD2319.33714211121571222327400
Mark BorowieckiD3118.087142101110816131610500
Jay BeagleF3514.0171421111835211037559413
Troy StecherD2617.6641721022111941013800
Nate ThompsonF3613.9971421111875112228432359
Julien GauthierF239.1551621112733374355760
Zac RinaldoF3010.5611102111189372501013541
Brett RitchieF2712.129122122412619232713640
Joel EdmundsonD2719.11614210111291321437600
Luca SbisaD3114.9741721011731051174300
Brent SeabrookD3518.90614212461281571143200
Matt BenningD2615.6051621022105811464000
Noah GregorF2210.0410102133610422121256478
Brian GibbonsF3212.0591221111795152264147
Chris WagnerF2913.911110211121234323952153168
Nicolas DeslauriersF2911.9011102011110844235843432
Jacob de La RoseF2512.6571420111974216829250319
Par LindholmF2912.907142011297607020270294
Justin DowlingF3010.489112011287306622121141
Robert HaggD2517.1951520111911392405200
Scott MayfieldD2819.72515200111171471246800
Jason DemersD3220.2541720022971041083700
Nick HoldenD3319.09614201121141001492000
Ethan BearD2316.995152023496107653600
Filip ChlapikF239.3981220123873712824112132
Scott SabourinF288.51812201128430137595254
Tim SchallerF3012.9110102011110445108285358
Scott HarringtonD2715.5841620011861131023200
Brendan GuhleD2314.536142001111179553000
Mikhail VorobyevF2412.098122011287243825266280
Cody CeciD2720.78515200221121361332400
Travis HamonicD3020.7751520011134166725101
Nikita ZadorovD2518.3271320011106972458800
Ben HuttonD2719.6041520144139106693400
Markus GranlundF2713.4211920213111325525118150
Ron HainseyD3920.403162001172133802000
Matthew HighmoreF249.9081220112912381185456
Nathan BeaulieuD2817.6041620022102971126100
Jake McCabeD2719.0551519011951241364701
Mark PysykD2916.036131901191881022811
Radim SimekD2817.644161901187961462500
Vladislav GavrikovD2515.49514190118791822200
Johnny BoychukD3718.41415191131461391492700
Carson SoucyD2613.82811190118571882600
Mitchell StephensF2310.3991019112100237523311286
Gaetan HaasF299.849101912385347514200255
Dominic ToninatoF2610.587121911280418447206241
David SavardD3020.29415190221281541393800
Andy GreeneD3819.944151902290177632100
Zdeno CharaD4320.72613190121151101036100
Alex BiegaD3217.7521619011139921994700
Justin HollD2915.26316190119183873900
Carl GunnarssonD3417.077121901180120583100
Givani SmithF229.83109191129718133335353
Oliver KylingtonD2315.34613190117789643100
Zach BogosianD3018.6431619011108107976600
Ryan LindgrenD2214.282161901171871075000
Victor MeteD2217.553151903396119382300
Marco ScandellaD3018.316131901210992873100
Stephen JohnsD2814.82711180111141011733800
Jamie OleksiakD2816.855131801198891896700
Brett KulakD2718.1441418011143881113400
Kris RussellD3318.4831518011801751022300
John HaydenF2511.6981018111100481801014561
Noah DobsonD2112.63315180339076662300
Andrew AgozzinoF308.687111811263268419141139
Logan O'ConnorF249.2211618112913793165356
Jordie BennD3317.7941418011105126993500
Dean KukanD2716.682151811210783713000
Brandon CarloD2420.42314180111281031424810
Martin MarincinD2816.6441418011110113814401
Braydon CoburnD3516.2531418011103741073800
Nikita ZaitsevD2921.1741418011861591423100
Jakob LiljaF279.9571017112714449125353
Haydn FleuryD2415.34414170111111021061800
Joakim NordstromF2813.75891711111956134235975
Gabriel BourqueF3011.25611171117471176183945
Tucker PoolmanD2714.73513170119076762300
Oscar FantenbergD2917.16413170451091131422600
Jesper BoqvistF2210.47116172141033481226069
Christoffer EhnF2412.3371017112874410512163195
Nick JensenD3018.88115170119799822400
Juuso RiikolaD2716.2841317235100781732200
Trevor van RiemsdykD2916.443141701111091471900
Jay BouwmeesterD3720.933131701190115683500
Jonathon MerrillD2818.664121601189115986100
Joakim RyanD2718.1331416011113112742600
Adam LarssonD2820.24313160111111382184800
Mirco MuellerD2518.4431416011681311023100
Jonas SiegenthalerD2316.702141601172147944900
Connor BunnamanF229.647916112881610015146208
Rasmus AsplundF2310.4161016112105236120141170
Lias AnderssonF2211.9151116112983511941214246
Andrej SekeraD3418.30214160339798642200
Mario FerraroD2213.943131601184761283500
John MooreD3018.0261016112123991163800
Libor HajekD2214.001141601173108713200
Dmitry KulikovD3019.1431316011831171385200
Jacob LarssonD2317.502131601110099712601
Logan ShawF298.417916123753270107275
Patrick RussellF2810.68411161121023795225151
Nick ShoreF289.596101611272236121252242
Brayden McNabbD3019.9041216011921522084900
Robert BortuzzoD3115.6541116011941041335000
Chris StewartF338.8879151126421111623738
Patrik NemethD2820.3121315011991531174801
Marc StaalD3418.703121501183115992800
Trevor DaleyD3717.54412150228595323100
Dante FabbroD2215.525101511210494694000
Deryk EngellandD3818.75312150111031401543600
Brendan SmithD3114.614111501188661169100
Ryan PoehlingF2210.1778151129230101175977
Jarred TinordiD2814.303121501164881486800
Niklas HjalmarssonD3319.332131501163156543900
Christian FolinD2916.3541115011851282035410
David GustafssonF208.07871512355274110147134
Jack JohnsonD3419.5931114011881291823300
Carsen TwarynskiF2310.3386141128938166235259
Kurtis MacDermidD2612.864101401179751528600
Micheal HaleyF349.39681411173311471815656
Michael StoneD3014.1741014011103113973000
Erik GudbransonD2919.33591401111210517010100
Riley StillmanD2215.5611314011891121143000
Dan HamhuisD3816.47113140116585753900
Andrew PeekeD2212.93410140118678861900
T.J. TynanF289.254914112622047166199
Dennis GilbertD2413.86410140115910720610200
Matt IrwinD3315.50212140111231071634400
J.C. BeaudinF239.325914112853715127206191
Erik BrannstromD2113.42212140339689523700
Andreas EnglundD2511.462121301153621543600
Anthony BitettoD3015.962121301190931905100
Greg PaterynD3017.15112130111011281293800
Derek ForbortD2819.0521113011871331273700
Roman PolakD3418.1621113011791541885800
Chad RuhwedelD3016.655813011108741522700
Mark BarberioD3013.05211130118875494500
Josh BrownD2715.36481301183871466000
Carl DahlstromD2617.09111120118082602800
Yannick WeberD3215.3838120119975923100
Jeremy LauzonD2316.825612011901021217400
Ilya LyubushkinD2615.8411011011781122603200
Joona LuotoF238.285711122743961175555
Korbinian HolzerD3217.233911011741411774700
Luke SchennD3115.002911011981062715700
Cody GoloubefD3113.60371001162701082400
Gustav LindstromD2214.2818100456075875500
Zach WhitecloudD2413.1618100116078582300
Connor CliftonD2516.7546901185842014700
Matt TennysonD3012.071890117461772600
Aaron NessD3012.27178011526760900
Jonathan EricssonD3616.5536801179781203600
Cale FleuryD2213.1735801189851571700
Dylan McIlrathD2813.4115601173621738000
[TBODY] [/TBODY]
 
Last edited:

tangotiger

Registered User
Feb 5, 2008
2
1
Good stuff, thanks for jumping into this.

In order to figure out the weights, whether it's 5/4/3 or 4/3/2 or 3/2/1, etc, you would run a regression, to see which fits best. You could of course use non-integers and really try to get the precision down. However, I find that pretty much every model comes pretty close to one of those three.

As for the 50/10 (+1/3 of a season) for the playing time: again, another regression for best fit. Playing time, in MLB, was hugely influenced by the most recent season the most.

When I see you put in 500/82, I would simply say: make it 6 minutes for defenders and 5 minutes for forwards (or some other INTEGER). You can try for more precision, but again, I doubt you will get any noticeable gain. And (in my view) it's alot more palatable to say 6 minutes per game than 6.098 minutes per game.

Keep it up and I look forward to your development.
 
  • Like
Reactions: DatsyukToZetterberg

DatsyukToZetterberg

Alligator!
Apr 3, 2011
5,550
739
Island of Tortuga
Good stuff, thanks for jumping into this.

In order to figure out the weights, whether it's 5/4/3 or 4/3/2 or 3/2/1, etc, you would run a regression, to see which fits best. You could of course use non-integers and really try to get the precision down. However, I find that pretty much every model comes pretty close to one of those three.

As for the 50/10 (+1/3 of a season) for the playing time: again, another regression for best fit. Playing time, in MLB, was hugely influenced by the most recent season the most.

When I see you put in 500/82, I would simply say: make it 6 minutes for defenders and 5 minutes for forwards (or some other INTEGER). You can try for more precision, but again, I doubt you will get any noticeable gain. And (in my view) it's alot more palatable to say 6 minutes per game than 6.098 minutes per game.

Keep it up and I look forward to your development.

Wow, I never thought I'd get a response from Tangotiger. I appreciate the kind words at the end of your post, I'll do my best to try and create some interesting and meaningful projects.

I had always assumed that because all the weights for the original Marcel were the same 5/4/3 weight that there wasn't any regression used to find them. It is interesting to know that isn't the case. I had previously done some work on creating weights for hockey counting stats, but they were all over the place and there did not seem to be much similarity between the weights. I found something similar for TOI as you did for PA. TOI in the most recent season was weighted about 4 times as much as the 2nd most recent. I think you're right about the integer value. It made almost no difference in the values when I reran them and made for a much nice presentation of the numbers.

Even though the weights and methodology were borrowed from the original MLB version, could this still provide value as a minimum level of acceptableness?

And on a more general note, I will need to update the first post. After I reviewed my code in R to make some of the changes Tango mentioned, I found that I messed some of it up and it caused the regression portion of a player's value to be undervalued. Much to my delight the model's accuracy did not change too much and improved it's MAE/RSME values with the r^2 staying relatively the same.
 

Ad

Upcoming events

Ad

Ad