Last updated: 2019-10-30
The Offensive Play Index (OPI hereafter) is meant to be an objective measurement of the quality of a player's offensive play during a match of continuous 14.1 also known as straight pool. The measurement takes the form of a decimal value between 0.000 and 1.000, 1.000 being perfect play (never missing) and 0.000 the worst possible play (missing every shot).
OPI is deemed objective as it relies only on objective aspects of the game:
For each shot:
Hereafter we will use the following lingo to describe shot intents and shot results:
Shot intents:
At this point it is important to notice that many of the existing straight pool scoring apps do not carry enough information to calculate OPI. For example, scoring apps using an inning-by-inning system will often ask the user to end an inning by chosing between 'miss', 'safe' or 'foul'. Altough 'miss' clearly means that the player's intent was MAKE and 'safe' clearly means the intent was SAFE, the intent for 'foul' could have been MAKE, SAFE or TAKE-FOUL. This is relevant for the calculation of OPI as only the shots where the intent is MAKE are included. All other shots are only considered as ending an offensive inning and their result is ignored.
Also, in these scoring app, at the end of an inning only the number of balls pocketed is reported, not the number of shots that was required to do so. The OPI measure ignores additional balls pocketed on a shot so the inning-by-inning way of inputing data is again inappropriate for OPI.
As mentionned before, shots where the intent is not MAKE are ignored in the calculation of OPI. So the first step in the calculation of OPI is to take all the shots played by a player in a match and strip the shots where the intent is not MAKE. Once this is done we are left with 0 or more sequences of 1 or more shots where the intent is MAKE and the result is POCKET-X except for the last shot of the sequence whose intent is MAKE but the result can be any of the results listed above. These sequence are sometimes called offensive innings or attempted scoring innings (altough they usually include the SAFE or TAKE-FOUL intent shot that ends the inning if there is one).
For each shot in each sequence, points are earned as follow:
There are a few things to notice here. First, nothing is earned by pocketing more that 1 ball in a single shot. Also it makes no difference whether a sequence ends with a miss (LEGAL-NO-BALL result) or a foul (FOUL result), they are both earning no points.
To calculate OPI, the points earned for all shots in all sequences are summed and this is then divided by the total number of shots in all sequences. Since the maximum of points that can be earned for a shot is 1.0, this will yield a number between 0.0 and 1.0. The value of OPI is that number squared which will give another number between 0.0 and 1.0 that will be smaller (or equal for 0.0 and 1.0).
The reason for squaring the value is explained in the section 'How is OPI modelized ?'.
Example:
Let's say that during a completed match, a played has 5 offensive innings (sequences) as described below:
1: POCKET-1, LEGAL_NO_BALL,
2: POCKET-1, POCKET-2, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, FOUL
3: LEGAL_NO_BALL
4: POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-1, POCKET-3
5: FOUL
As explained before, the intent of all these shots is MAKE.
On the first inning, the player pockets one ball and then misses. 2 shots total.
This will earn 0.5 points: (0.5 + 0.0).
Details:
The result of the first shot is POCKET-1 which earns 1/2 point (0.5). The result of the next shot is not POCKET-X so no additional point is earned for this first shot.
The result of the second shot is LEGAL_NO_BALL so no points is earned.
On the second inning, the player pockets 10 balls in 9 shots and then commits a foul while trying to pocket a ball. 10 shots total.
This will earn a total of 8.333 points: (1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 0.833 + 0.500 + 0.0)
Details:
The result of the first 7 shots is POCKET-1 or POCKET-2 which earns 1/2 point (0.5). For each of these 7 shots there are 2 POCKET-X result shot right after which earns 1/3 point (0.333) and 1/6 point (0.166) respectively for a total of 1.0 point for each shot.
The result of the 8th shot is POCKET-1 which earns 1/2 point (0.5). The result of the shot right after is POCKET-1 which earns 1/3 point (0.333) but the result of the second shot after is not POCKET-X so 1/6 point (0.166) is NOT earned in this case, for a total of 0.833.
The result of the 9th shot is POCKET-1 which earns 1/2 point (0.5). The result of the next shot is not POCKET-X and there is no second next shot in the inning, so 1/3 points and 1/6 point are NOT earned, for a total of 0.5 points.
The result of the 10th shot is FOUL which earns 0.0 point.
On the third inning, the player misses right away. 1 shot total.
This will earned 0.0 points.
On the fourth inning, the player pockets 16 balls in 14 shots. After, the inning ends on a SAFE or TAKE-FOUL intent shot which, as explained before, is ignored and not included in the inning. 14 shots total.
This will earn a total of 13.333 points: (1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 1.0 + 0.833 + 0.500)
Notice the difference between this inning and the second inning. The second inning ended on an offensive shot (MAKE intent) that earned no point while the fourth inning ends on a successful offensive shot (because what really ended the inning is a SAFE or TAKE-FOUL intent shot which are not included in the inning). This shows the value of OPI will be less affected if a player ends the inning on a defensive shot (which is not included in the calculation) instead of ending the inning on a failed offensive shot which is included in the calculation and earned no points.
On the fifth inning, the player commits a foul right away. 1 shot total.
This will earned 0.0 points.
The OPI of the player for this completed match will be:
In the previous section, the player in the example obviously lost the match since the last inning ends with a foul. Now when a player wins a match, the last shot in the last inning will have result POCKET-X and earns only 0.5 points as there is no shot after and no second shot after. This is problematic because, had the match not be over, the player might have pocketed the next 2 balls and this will negatively impact the value of OPI. Also, it makes OPI=1.0 impossible because at least 4/6 point (1/6 on second last shot, 1/3 + 1/6 on last shot) cannot be earned even if the player runs out in one inning.
To fix this, in the last inning of the winning player, the additional points for the last shot (1/3 point and 1/6 point) and the additional points for the second last shot (1/6 point) (if it is in this same, last inning of the match), for shots that will NOT BE PLAYED because the match has ended, will be given anyway. This will elegantly make the result OPI=1.000 possible and will prevent the value of OPI for the player that wins to be negatively affected by the match ending.
The value of OPI for an ongoing match is calculated the same way as for a completed match, with the exception of the ongoing offensive inning if there is one. The additional points for the last played shot (1/3 point + 1/6 point) and the additional points for the second last played shot (1/6 point) (if it is in this same, ongoing inning of the match), for shots that have NOT BEEN PLAYED YET, will temporarily be given anyway. This will elegantly make the value of OPI equal to 1.000 at the beginning of the match, until the first offensive inning ends.
OPI should be displayed as a decimal value rounded to 3 digits after the period. Examples: 1.000, 0.995, 0.655, 0.300, 0.050, 0.000. Before the first offensive shot has been played, no points have been earned over 0 shots so the value of OPI will be:
This is a division by zero, an illegal arithmetic operation. This result should NOT be displayed as 0.000. It should be displayed with something like 'N/A', 'NaN' or '-' to express the fact that the value of OPI doesn't exist yet.
The significance of the value of OPI is strongly dependant on the number of offensive shots played. At the beginning of a match, the value of OPI can vary widly between 0.000 and 1.000 and will often not be a good representation of a player's overall skill level. For this reason is the better to show the value of OPI together with the number of offensive shots used to calculate it. That way the significance of the OPI value can be estimated at first sight.
This is best acheived by showing the number of offensive shots between brackets next to the value of OPI. In the first example above, the player had an OPI of 0.62673611 over 28 offensive shots. This would be displayed as '0.627 [28]'. A non-existing OPI value can be displayed as 'N/A [0]', 'NaN [0]' or '- [0]'.
As explain before the significance of the value of OPI depends enormously on the number of offensive shots used to calculate the value. Values calculated from less than 10 offensive shots should be considered outright meaningless.
Now assuming that a player is in fact at a skill level of OPI=0.745, basic statistical analysis can tell us this:
To obtain a measure within a confidence interval of ±10%, 19 out of 20 times, a sample size of 96 is needed. This means if we evaluate the player's performance in a match with 96 offensive shots, we should get a value between 0.671 and 0.819, 19 out of 20 times.
To obtain a measure within a confidence interval of ±7%, 19 out of 20 times, a sample size of 196 is needed. This means if we evaluate the player's performance in a match with 196 offensive shots, we should get a value between 0.693 and 0.789, 19 out of 20 times.
So even with a long 200 points match, the statistical margin of error will still around ±7%, 19 times out of 20 for the winning player. Fortunately, the OPI values of many matches involving the same player can easily be combined with little or no distortion to obtain a more significant value. See the How to combine multiple OPI values ? section below.
OPI being a young concept, little data is available yet. But good amateurs will typically score between 0.500 and 0.750 and professionals between 0.750 and 1.000. However, over 100 offensive shots of more, only top professionals can hope to score better than 0.900 on a regular basis.
For the time being, the following breakdown seem reasonable for putting a word on a match performance using the value of OPI:
As of October 2019, OPI is fully implement in:
The following table contains 54 OPI values for 27 matches involving 28 known and lesser known pros and amateurs. The value of OPI is believed to correct with respect to the current specifications.
Appleton, Darren | 1.000 [197] 22 |
Batista, Bernardo | 0.457 [52] 1 |
Bustamante, Francisco | 0.063 [2] 22 |
Chinakhov, Ruslan | 0.978 [149] 25, 0.992 [172] 27 |
Daquaro, Tom | 0.563 [126] 2 |
Duddy, Emily | 0.479 [39] 3 |
Dufresne, Pascal | 0.804 [132] 3 |
Eberle, Max | 0.710 [36] 28 |
Edmonds, Tim | 0.497 [35] 4, 0.625 [105] 5 |
Hohmann, Thorsten | 0.894 [171] 6, 0.925 [156] 7 |
Immonen, Mika | 0.925 [130] 28 |
Jimmy, Jimmy | 0.506 [119] 8 |
Juszczyszyn, Konrad | 0.820 [81] 7 |
Kaçi, Eklent | 0.928 [155] 9, 0.930 [205] 6 |
Kelly, Chris | 0.423 [51] 10 |
Kunz, Eddie | 0.535 [121] 2 |
Kudlik, Marek | 0.892 [114] 9 |
Leon, Jim | 0.397 [69] 11 |
Lipsky, Steve | 0.757 [163] 12, 0.758 [138] 5, 0.853 [187] 13, 0.872 [148] 14, 0.850 [158] 24 |
Luna, Carlos | 0.730 [112] 23, 0.687 [72] 24 |
McGovern, Daniel | 0.631 [85] 15 |
Morgan, Sean | 0.752 [167] 10, 0.696 [164] 11, 0.682 [114] 12, 0.831 [158] 16 |
Ouschan, Albin | 0.739 [19] 25 |
Pagulayan, Alex | 0.912 [152] 26, 0.000 [1] 27 |
Robles, Tony | 0.703 [99] 13, 0.882 [156] 17, 0.869 [155] 18, 0.855 [128] 14, 0.891 [157] 4, 0.869 [157] 19, 0.744 [115] 23 |
Sim, Del | 0.721 [172] 21, 0.766 [92] 20, 0.826 [108] 17, 0.809 [146] 18 |
Soriano, Lou | 0.547 [112] 21 |
Warnock, Stewart | 0.665 [193] 8 |
Zvi, Zion | 0.836 [161] 20, 0.760 [100] 19, 0.816 [157] 1, 0.805 [165] 15, 0.764 [118] 16 |
Coming soon ....
Coming soon ....
Coming soon ....
For any inquiries please contact: opi@metaobjects.ca