{"version":"1.0","provider_name":"MRKT Insights - Football Consultancy Services","provider_url":"https:\/\/mrktinsights.com","title":"PassScore Model - MRKT Insights - Football Consultancy Services","type":"rich","width":600,"height":338,"html":"<blockquote class=\"wp-embedded-content\" data-secret=\"mJD3tHwY95\"><a href=\"https:\/\/mrktinsights.com\/index.php\/passscore-model\/\">PassScore Model<\/a><\/blockquote><iframe sandbox=\"allow-scripts\" security=\"restricted\" src=\"https:\/\/mrktinsights.com\/index.php\/passscore-model\/embed\/#?secret=mJD3tHwY95\" width=\"600\" height=\"338\" title=\"&#8220;PassScore Model&#8221; &#8212; MRKT Insights - Football Consultancy Services\" data-secret=\"mJD3tHwY95\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" class=\"wp-embedded-content\"><\/iframe><script type=\"text\/javascript\">\n\/* <![CDATA[ *\/\n\/**\n * WordPress inline HTML embed\n *\n * @since 4.4.0\n * @output wp-includes\/js\/wp-embed.js\n *\n * Single line comments should not be used since they will break\n * the script when inlined in get_post_embed_html(), specifically\n * when the comments are not stripped out due to SCRIPT_DEBUG\n * being turned on.\n *\/\n(function ( window, document ) {\n\t'use strict';\n\n\t\/* Abort for ancient browsers. *\/\n\tif ( ! document.querySelector || ! window.addEventListener || typeof URL === 'undefined' ) {\n\t\treturn;\n\t}\n\n\t\/** @namespace wp *\/\n\twindow.wp = window.wp || {};\n\n\t\/* Abort if script was already executed. *\/\n\tif ( !! window.wp.receiveEmbedMessage ) {\n\t\treturn;\n\t}\n\n\t\/**\n\t * Receive embed message.\n\t *\n\t * @param {MessageEvent} e\n\t *\/\n\twindow.wp.receiveEmbedMessage = function( e ) {\n\t\tvar data = e.data;\n\n\t\t\/* Verify shape of message. *\/\n\t\tif (\n\t\t\t! ( data || data.secret || data.message || data.value ) ||\n\t\t\t\/[^a-zA-Z0-9]\/.test( data.secret )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar iframes = document.querySelectorAll( 'iframe[data-secret=\"' + data.secret + '\"]' ),\n\t\t\tblockquotes = document.querySelectorAll( 'blockquote[data-secret=\"' + data.secret + '\"]' ),\n\t\t\tallowedProtocols = new RegExp( '^https?:$', 'i' ),\n\t\t\ti, source, height, sourceURL, targetURL;\n\n\t\tfor ( i = 0; i < blockquotes.length; i++ ) {\n\t\t\tblockquotes[ i ].style.display = 'none';\n\t\t}\n\n\t\tfor ( i = 0; i < iframes.length; i++ ) {\n\t\t\tsource = iframes[ i ];\n\n\t\t\tif ( e.source !== source.contentWindow ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tsource.removeAttribute( 'style' );\n\n\t\t\tif ( 'height' === data.message ) {\n\t\t\t\t\/* Resize the iframe on request. *\/\n\t\t\t\theight = parseInt( data.value, 10 );\n\t\t\t\tif ( height > 1000 ) {\n\t\t\t\t\theight = 1000;\n\t\t\t\t} else if ( ~~height < 200 ) {\n\t\t\t\t\theight = 200;\n\t\t\t\t}\n\n\t\t\t\tsource.height = height;\n\t\t\t} else if ( 'link' === data.message ) {\n\t\t\t\t\/* Link to a specific URL on request. *\/\n\t\t\t\tsourceURL = new URL( source.getAttribute( 'src' ) );\n\t\t\t\ttargetURL = new URL( data.value );\n\n\t\t\t\tif (\n\t\t\t\t\tallowedProtocols.test( targetURL.protocol ) &&\n\t\t\t\t\ttargetURL.host === sourceURL.host &&\n\t\t\t\t\tdocument.activeElement === source\n\t\t\t\t) {\n\t\t\t\t\twindow.top.location.href = data.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction onLoad() {\n\t\tvar iframes = document.querySelectorAll( 'iframe.wp-embedded-content' ),\n\t\t\ti, source, secret;\n\n\t\tfor ( i = 0; i < iframes.length; i++ ) {\n\t\t\t\/** @var {IframeElement} *\/\n\t\t\tsource = iframes[ i ];\n\n\t\t\tsecret = source.getAttribute( 'data-secret' );\n\t\t\tif ( ! secret ) {\n\t\t\t\t\/* Add secret to iframe *\/\n\t\t\t\tsecret = Math.random().toString( 36 ).substring( 2, 12 );\n\t\t\t\tsource.src += '#?secret=' + secret;\n\t\t\t\tsource.setAttribute( 'data-secret', secret );\n\t\t\t}\n\n\t\t\t\/*\n\t\t\t * Let post embed window know that the parent is ready for receiving the height message, in case the iframe\n\t\t\t * loaded before wp-embed.js was loaded. When the ready message is received by the post embed window, the\n\t\t\t * window will then (re-)send the height message right away.\n\t\t\t *\/\n\t\t\tsource.contentWindow.postMessage( {\n\t\t\t\tmessage: 'ready',\n\t\t\t\tsecret: secret\n\t\t\t}, '*' );\n\t\t}\n\t}\n\n\twindow.addEventListener( 'message', window.wp.receiveEmbedMessage, false );\n\tdocument.addEventListener( 'DOMContentLoaded', onLoad, false );\n})( window, document );\n\/\/# sourceURL=https:\/\/mrktinsights.com\/wp-includes\/js\/wp-embed.js\n\/* ]]> *\/\n<\/script>\n","description":"There\u2019s xG (expected goals), xP (expected passing) and now I\u2019d like to introduce another football data concept that uses those two models to develop something I\u2019m calling \u201cPassScore\u201d. The aim of this model is to score passes in terms of their contribution to creating goalscoring chances. At a high level, passing data and statistics made widely available are&nbsp;simply&nbsp;binary&nbsp;values. A successful pass, goal or shot assist can only be given one of two possible values\u200a\u2014\u200a0 or 1, but that only tells you a limited amount of information. For example, passes made across the defensive line (and played back to the goalkeeper) tend to be the easiest passes to play and they will contribute to a team and player\u2019s passing accuracy. As a team moves further up the pitch, passing accuracy gets worse as they look to play more difficult balls through an opposition\u2019s defence. That is where the xP model adds extra value to passing accuracy %. A player may have a 90% pass success rate which may immediately sound impressive but xP might argue otherwise, particularly if the expected outcome of those passes were greater than 90%. An expected passing model works by using a large amount of passing data and determining the expected pass accuracy of passes made from one particular zone on the pitch to another. In the xP model that I use, the pitch is split into 50 zones (10&#215;5) and for each zone to zone&nbsp;pass&nbsp;combination, an expected pass outcome is provided (a value from 0 to 1). xP and successful passes (0 or 1) can then be compared to assess a player and team\u2019s actual passing accuracy compared to the expected passing accuracy. A goal assist can be the simplest of passes. A centre-back can make a straightforward pass to a winger, like Swansea City\u2019s Dan James, who goes on a superb solo run before scoring. James might have created that goal all by himself but his team-mate, who played the 5-yard pass to him, also gets credited with an assist. It can also work the opposite way where players are denied goal assists if their team-mate fails to convert the chance into a goal. To get around that limitation, \u201cexpected assists\u201d (xA) can be used, but again, for shot-based xG models, which many are, this also requires the player to get a shot on goal in order to register an expected assist value. So if a player plays a through ball for a striker and he\u2019s one on one with the goalkeeper but takes the ball too wide and doesn\u2019t get a shot on goal, this won\u2019t register as anything but a successful pass. \u201cPassScore\u201d, however, will credit the pass with a high score for creating an excellent goalscoring opportunity. An example of this can be seen in Swansea\u2019s home win against Sheffield United. Nathan Dyer plays an inside pass to striker Oli McBurnie but United\u2019s Jack O\u2019Connell makes a last minute tackle to deny a shooting opportunity. In shot-based xG models, Dyer doesn\u2019t get any expected assist credit. In Swansea\u2019s recent 4\u20133 home win against Rotherham United, the visitors created an excellent goalscoring chance after a cross was aimed at the far post. The cross was headed back across goal with another header from 6 yards being brilliantly saved by Kristoffer Nordfeldt. Had the shot gone in, only the player heading the ball across the penalty area is awarded with an assist and expected assist value&nbsp;to&nbsp;his&nbsp;name, the crosser misses out. You can watch the example of this goalscoring chance and how the PassScore model scored the two passes via Twitter below: Not only does the \u201cPassScore\u201d credit passes for creating goalscoring chances, it also negatively scores passes if they help the opposition to potentially create opportunities. Unsuccessful passes made into dangerous areas will also score low negative values. Here\u2019s another example in Swansea\u2019s game away at Norwich City. Goalkeeper Tim Krul, under pressure from Daniel James, makes a poor attempted back pass and due to the position of where the pass is unsuccessful (near the 6-yard area) the pass has a score of -4.36. Again, this simply registers as an unsuccessful pass (rather than as an error leading to a shot\/goal) as Dan James can\u2019t quite take advantage but PassScore helps to identify moments like this. You can watch the clip below: Pass maps can then be created with each pass colour-coded as a temperature guage with blue passes being lowest scoring (unsuccessful and in dangerous areas) with the darker red passes being the most helpful when creating goalscoring chances. You can also break this down further by looking at the PassScore numbers by pass type\u200a\u2014\u200apass or cross, free-kick or open play, by player, by team, match etc. The main contributor to the PassScore calculation is the xG value of the pitch zone where the pass was played. The score is then boosted by the difficulty of the pass according to the xP model. Unsuccessful passes made into dangerous areas are also scored slightly but will be significantly lower than if they were successful. The thinking here is to reward players for attempting to play passes into good areas.","thumbnail_url":"https:\/\/miro.medium.com\/max\/2034\/1*A0dRMD_NLclhTpKWK3_d1g.gif"}