{"id":2171,"date":"2019-07-26T17:29:42","date_gmt":"2019-07-26T23:29:42","guid":{"rendered":"http:\/\/kenpom.com\/blog\/?page_id=2171"},"modified":"2020-05-14T01:07:31","modified_gmt":"2020-05-14T07:07:31","slug":"player-comps-that-dont-suck-as-much","status":"publish","type":"page","link":"https:\/\/kenpom.com\/blog\/player-comps-that-dont-suck-as-much\/","title":{"rendered":"Player comps that don&#8217;t suck (as much)"},"content":{"rendered":"<p>&#8220;All models are wrong, but some are useful&#8221; is a popular unattributed quote about models. There&#8217;s a related quote &#8211; &#8220;all player comps suck, but some suck less than others&#8221;. You can attribute that to me. Anyway, my player comps suck, but based on a decade of ridicule I&#8217;ve learned a few things and like to think the current version is halfway respectable for one that doesn&#8217;t include anthropometric data.<\/p>\n<p>Creating comps is more art than science, but doing so with an automated method at least tries to include some science, whereas as people often put an incredible amount of weight on one&#8217;s <a href=\"https:\/\/twitter.com\/search?f=tweets&amp;vertical=default&amp;q=%22so%20much%22%20from%3Ajonrothstein&amp;src=typd\">skin color<\/a>. The people doing it right are trying to match skills and types of athleticism as opposed to raw stats. My comps attempt to do the same thing.<\/p>\n<p>There is only so much science that can go into comps, however. A good system probably should have some sort of continuity for a player&#8217;s comps from season to season. However, there&#8217;s a limit to how one tries to achieve this. One could use a player&#8217;s height at the exclusion of everything and create very stable but useless comps.<\/p>\n<p>From a statistical perspective, something like shot distribution is at least as stable as shooting accuracy and should be valued as such. My comps try to stay loyal to that principle with respect to its inputs and weights. The comps still suck, but less than when I started trying this. Here&#8217;s an overview of the ingredients and weights used in the current version as of 7.26.19<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2171_1('footnote_plugin_reference_2171_1_1');\" onkeypress=\"footnote_moveToReference_2171_1('footnote_plugin_reference_2171_1_1');\" ><sup id=\"footnote_plugin_tooltip_2171_1_1\" class=\"footnote_plugin_tooltip_text\">1<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2171_1_1\" class=\"footnote_tooltip\"><\/span><\/span>. These will always be a work in progress.<\/p>\n<p>Height (20)<\/p>\n<p>3PA&gt;4 (binary) (15)<\/p>\n<p>True shooting attempts (FGA+.475*FTA) per 40 (10)<br \/>\nNumerical Position (10)<br \/>\nPct of minutes played at PG (10)<br \/>\nDunks&gt;0 (binary) (10)<\/p>\n<p>Weight (8)<br \/>\nDunk attempts per 40 (8)<br \/>\n3P attempts per 40 (8)<\/p>\n<p>Team AdjEM (6)<br \/>\nTeam schedule strength (4)<\/p>\n<p>Assists per 40 (3)<br \/>\nSteals per 40 (3)<br \/>\nBlocks per 40 (3)<\/p>\n<p>TO per 40 (2)<br \/>\nShort 2PA FG%* (2)<br \/>\nShort 2PA&#8217;s per 40 (2)<br \/>\nPercentage of short 2PA assisted on* (2)<br \/>\nLong 2PA FG%* (2)<br \/>\nLong 2PA&#8217;s per 40 (2)<br \/>\nPercentage of long 2PA assisted on* (2)<br \/>\n3P FG%* (2)<br \/>\n3PA&#8217;s per 40 (2)<br \/>\nPercentage of 3PA assisted on* (2)<br \/>\nMinutes per game (2)<\/p>\n<p>Offensive possession length (1)<br \/>\nDR per 40 (1)<br \/>\nOR per 40 (1)<br \/>\nPF per 40 (1)<br \/>\nFTA per 40 (1)<\/p>\n<p>*Shooting stats are appropriately regressed in cases of few attempts.<\/p>\n<p>Each player&#8217;s comps are filtered by age, with that filter being larger for older players as the difference between an 18 and 19 year old in the development process is more significant than the difference between a 23 and 24 year old. Thus there are rare cases of older players being compared to previous versions of themselves. Players are not compared to other players from the same season.<\/p>\n<div class=\"speaker-mute footnotes_reference_container\"> <div class=\"footnote_container_prepare\"><p><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_label pointer\" onclick=\"footnote_expand_collapse_reference_container_2171_1();\">&#x202F;<\/span><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_collapse_button\" style=\"display: none;\" onclick=\"footnote_expand_collapse_reference_container_2171_1();\">[<a id=\"footnote_reference_container_collapse_button_2171_1\">+<\/a>]<\/span><\/p><\/div> <div id=\"footnote_references_container_2171_1\" style=\"\"><table class=\"footnotes_table footnote-reference-container\"><caption class=\"accessibility\">References<\/caption> <tbody> \r\n\r\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\"  onclick=\"footnote_moveToAnchor_2171_1('footnote_plugin_tooltip_2171_1_1');\"><a id=\"footnote_plugin_reference_2171_1_1\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">^<\/span>1<\/a><\/th> <td class=\"footnote_plugin_text\"><a href=\"https:\/\/kenpom.com\/blog\/comps-are-back\/\">Here are my thoughts on how I previously constructed comps, which still stand.<\/a><\/td><\/tr>\r\n\r\n <\/tbody> <\/table> <\/div><\/div><script type=\"text\/javascript\"> function footnote_expand_reference_container_2171_1() { jQuery('#footnote_references_container_2171_1').show(); jQuery('#footnote_reference_container_collapse_button_2171_1').text('\u2212'); } function footnote_collapse_reference_container_2171_1() { jQuery('#footnote_references_container_2171_1').hide(); jQuery('#footnote_reference_container_collapse_button_2171_1').text('+'); } function footnote_expand_collapse_reference_container_2171_1() { if (jQuery('#footnote_references_container_2171_1').is(':hidden')) { footnote_expand_reference_container_2171_1(); } else { footnote_collapse_reference_container_2171_1(); } } function footnote_moveToReference_2171_1(p_str_TargetID) { footnote_expand_reference_container_2171_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } } function footnote_moveToAnchor_2171_1(p_str_TargetID) { footnote_expand_reference_container_2171_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } }<\/script>","protected":false},"excerpt":{"rendered":"<p>&#8220;All models are wrong, but some are useful&#8221; is a popular unattributed quote about models. There&#8217;s a related quote &#8211; &#8220;all player comps suck, but some suck less than others&#8221;. You can attribute that to me. Anyway, my player comps suck, but based on a decade of ridicule I&#8217;ve learned a few things and like [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/kenpom.com\/blog\/wp-json\/wp\/v2\/pages\/2171"}],"collection":[{"href":"https:\/\/kenpom.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kenpom.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kenpom.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kenpom.com\/blog\/wp-json\/wp\/v2\/comments?post=2171"}],"version-history":[{"count":23,"href":"https:\/\/kenpom.com\/blog\/wp-json\/wp\/v2\/pages\/2171\/revisions"}],"predecessor-version":[{"id":2354,"href":"https:\/\/kenpom.com\/blog\/wp-json\/wp\/v2\/pages\/2171\/revisions\/2354"}],"wp:attachment":[{"href":"https:\/\/kenpom.com\/blog\/wp-json\/wp\/v2\/media?parent=2171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}