Monday, 29 September 2014 00:00

Better Bowling Statistics

Written by Albert Sharkis
Rate this item
(1 Vote)
I started bowling in middle school. Not the most popular sport for a young man to get into, but it was one that I could play with my old man. We joined a "Generation Gap" league and I started bowling every week. I slowly got better, got my technique down, got my own ball and shoes. I've been bowling sporadically ever since. I got another ball when I was 16 or 17: a Brunswick Fury. Fantastic ball; loved it, lost it two years ago.
Since then I've been bowling with house balls and shoes, which means I have a lot more variance in the techniques I use, and the game is about adaptability again. Not only do I have to adapt to lane conditions, but also the conditions of the shoes I've rented, and the ball I've selected for the day.
Bowling in a league is an interesting endeavor; it's more complicated than trying to throw the perfect game all the time. At the competitive level, you understand you're not going to throw a perfect game. Hopefully you're going to chain some strikes together for a good score, but all you have to work on is your average. Your average determines your handicap, which can give you the edge you need to defeat the other team for standing. What this means is that at the competitive level, you're practicing by yourself to improve your score, but come time for league, you're trying to preserve your handicap and roll as low a score as possible while still defeating the other team. It's complicated, tedious, and it doesn't get any easier once you've had a couple.
I dislike this aspect of competitive bowling, so I had a go at another system. Initially, I had a feeling that the Elo rating system might be well suited for the style of play I experience at the lanes: one-on-one, no handicap. This may have been influenced by my repeated viewings of The Social Network. Each player starts with a rating of 1450, and gains or loses points based on the difficulty of their opponent. The rating, after enough matches, becomes a metric for expectation of a win. Below is the code I whipped up for a quick determination of rank:
import sys, getopt, math

def main(argv):
	ratingPlayer = 1450
	ratingOpponent = 1450
	try:
		opts, args = getopt.getopt(argv,'p:o:')
	except getopt.GetoptError:
		print('broken')
		sys.exit(2)
	for opt, arg in opts:
		if opt == '-p':
			ratingPlayer = float(arg)
		if opt == '-o':
			ratingOpponent = float(arg)
	kfactor = 0
	if ratingPlayer > 2400 and ratingOpponent > 2400:
		kfactor = 16
	elif ratingPlayer <2100 or ratingOpponent <2100:
		kfactor = 32
	elif ratingPlayer < 2400 or ratingOpponent < 2400:
		kfactor = 24
	de = kfactor * (1 - (1/math.pow(10,(-(ratingPlayer - ratingOpponent)/400)+1)))
	print("difference: "+str(de))
	print("p1: "+str(ratingPlayer+de)+" p2: "+str(ratingOpponent-de))


if __name__ == "__main__":
	main(sys.argv[1:])

Once I implemented this, I started playing more with my co-workers, and found this dramatically altered their style of play. Without a handicap to rely on, raw performance was the ultimate decider of who was top dog on the lanes. One of our bowlers, long famed for their ability, suddenly folded under the competitive pressure and was subsequently (and rapidly) demoted to the bottom of the list. Once someone rises to the top, however, you can expect a consistent performance from them for quite some time, usually until they stop playing as much and someone with practice de-thrones them.
Read 2413 times Last modified on Monday, 29 September 2014 05:19