Saturday, October 27, 2007

A Continuous Friendless Metric

CyberKev and I have been discussing the Friendless metric. You see, the problem is that he's got his above zero, which is a great thing... but let us recap for those of you who don't know what a Friendless metric is. The problem with a large games collection is that you spent a lot of money on a lot of games, and some of them don't get played. In fact, many of them don't get played. You, the non-gamer, may be chortling to yourself thinking "hah, I knew he didn't really buy those games to play - he's just a spendthrift / show-off / wanker / (d) all of the above"... but common wisdom is that 50% of board games never get played. Many are bought as gifts for nephews and nieces who never bother to read the rules. So even though I have 50 games I've never played, that's only 14% of my collection, and I'm doing very well.

A lot of boardgamegeeks keep track of when they play what game on This satisfies a primal geek instinct to gather statistics about ourselves, and will one day provide an anthropologist with awesome data for a Ph.D. thesis on collecting, leisure and obsession. One of the purposes to which I put this data is to answer the question "do I really need all these games?" It's geek angst.

Now if I had only a copy of Scrabble, and I'd played it 173 times, I could safely answer "yes". If I had 10,000 games and had still only played Scrabble, I could safely answer "no" (though collecting games is a totally different matter and I don't address that here). So the point is to compare the games you have to the games you play to provide some measure of how much you're really using all those games. That's what the Friendless metric attempts to do.

To calculate the Friendless metric, make a list of all of your games in descending order of how many times you've played them. Scrabble with 173 plays comes first, Triominos with 0 plays comes last. For each game at the beginning with 10 or more plays, we consider that game to have earned its keep. Even better, having played one game that many times, you're forgiven one at the other end which you haven't played so much. So for playing Scrabble so many times we'll forgive you for never playing Triominos. People who play games tend to accumulate them, so we'll assume that was a gift. Then, we look at how many times you've played the last game remaining on the list... and that's your Friendless metric. The higher the better. Most bggeeks have a value of zero, so I extended the definition to go into negatives. A value of -x tells you that to get to a Friendless metric of 1 you need to play x more of your games that you've never played. Mine has been between -8 and -2 for most of the year, and just today reached 1 for the first time! Woohoo!

Now, as mentioned above, CyberKev reached positive numbers a few months ago. This is a great piece of news - it means that he's utilising his game collection. However, when his Friendless metric reached 3, CyberKev noticed that there was no longer any reward in playing his unplayed games. By playing an unplayed game he moves that game from 0 plays to 1 play... but his Friendless metric is 3, so that game is still one of the ones which is forgiven anyway. In fact, that game has to get to 4 plays before it has any chance of affecting the Friendless metric. And NO WAY is CyberKev going to play Triominos 4 times (of course, he could just get rid of it - that works very nicely). So the problem with the Friendless metric is that once it gets to 1 it fails in one of its primary aims - to encourage you to play all of your games.

What we need then is a continuous Friendless metric - one which rewards all plays, rather than just a few games you've played 9 times and a few games you've played a number of times equal to your Friendless metric. I've been thinking about this since CyberKev explained the problem to me, but just this evening I think I've come up with a nice solution. The design goal is to reward you (i.e. make your number higher) for playing ALL of your games. Also, to reward you for playing those infrequently played games more than for playing the frequently played ones. That may not make much sense at first, but consider that it actually encourages you to dispose of infrequently played games so that your collection more closely resembles what you actually will play - if you're not going to play this game, you can benefit by not even having it! And finally, a minor goal was to reward even plays of frequently played games, just a little bit.

Consideration of the shape of the reward curve I wanted led me to the exponential distribution. Basically there's a big reward for a first play, and smaller rewards for subsequent plays. The distribution has a parameter called lambda which controls how quickly the rewards drop off (and how long they last). I experimented, and it felt right to me to set lambda to 0.3. Don't worry, I'll explain.

Consider it like this. If you play a game 0 times, you get 0% of the possible reward for it. If you play a game an infinite number of times, you get 100% of the possible reward for it. With lambda set at 0.3, if you play a game once you get 26% of the possible reward for it. And as you get more plays you proceed to 45%, 59%, 70%, 78%, 83%, 88%, 91%, 93%, 95%, and so on with diminishing returns for each play. (This is the cumulative distribution function.) Those numbers feel vaguely right to me.

So, for each game I calculate what percentage of the possible reward you've achieved. I then averaged those numbers, and displayed the percentage. But then I realised, in one of the AHA! moments, that I could turn that percentage back into a number of plays, to a number that was like an average number of plays, but wasn't really. So I coded up the inverse of the CDF and the magic numbers started coming out.

My CFM is (currently) 2.45. My average number of plays per game owned is 4.5 Those numbers are comparable. In fact, if I'd played every game in my collection the same number of times, they would be the same. So the difference is the penalty for owning games I don't play.

I have 350 games of which I've never played 51. My other test subject has 198 games, which he has played an average of 11.6 times each, but he has a CFM of 1.18. Why is that? Well, it turns out that the gentleman is a Magic: the Gathering player who plays LOTS and LOTS of Magic. So his mean plays per game is very much distorted by that. Of his 198 games, he hasn't ever played 113 of them. So my collection much more accurately matches what I play.

I like this number. It feels beautiful. Comments?

BTW, the stats with these numbers in are hosted at More on that tomorrow.


Jason said...

Sounds good. Looking forward to seeing how the new metric affects my game playing. I know I've got a few games that really never see play. But how do I get rid of that copy of Triominoes?

Chris said...

Given the design goals (incentive to play all games, incentive to play least-played games), I would probably lean toward something like the geometric mean of the plays. For example, if you have a game with 1 play and a game with 5 plays, you get more benefit from playing the game with 1 play than the game with 5 plays.

The problem with the geometric mean is accounting for zeroes. You could use a "forgiveness model" like you described, or you could substitute a small value such as 1/10 for every 0. Of course, you could use different values than 1/10, but I chose that because a game with 10 plays would "cancel out" a game with 0 plays, as in your forgiveness model.

Sean Ross said...

Expansions are currently included in the Friendless metric but many poeple, including me, don't record games played for expansions, so the metric becomes skewed in our case. Would it be possible to exclude expansions from the calculation?

Jason said...

I'm one of those people who do not record expansions played. Err, well 90% of the time, but if I play a different Power Grid (or Age of Steam) map, I record the play there. If I play Carcassonne, I do not record which expansions I played with.

When I go to this page:
I don't want those numbers to be different if I was to record the expansion and the main game. If I record a play of 0.10 for the expansion it will not up that number, but will up in a list of games played on that day, with a quantity of zero.

So my question is, how will that work with the friendless metric?

Jason said...

Here is a tinyurl for the link I tried to include in my last reply.

Maria said...

Not being a board game geek (and neither is Mr Coffee for that matter) we've been discussing more recently how many board games never get played by geeks such as yourself. Over at Mr Coffee's place, there's only one that we haven't played together, Trivial Pursuit, but then our collection numbers fewer than 10. I'm not a big fan of that edition of Trivial Pursuit as I suspect the questions have aged a bit.

Instead, being booklovers, Mr Coffee and I count books that haven't got read yet. And oh what a number that is! I can say, Friendless, you're doing well. COmparative to bookish people who've got many books they haven't read. And compile lists to shame hemselves into picking them up and reading them.

Friendless said...

Jason, I can't solve the Triominos problem. I can only highlight it.

Chris, the geometric mean is a good idea too. I've been thinking about my model during the night, and I've decided I like the percentage as well - I might keep the percentage values around and call them "utilisation".

Sean, why don't you record plays for expansions? I have a lot of expansions (for Runebound for example) and want to know the same things about them as I do for normal games. At the moment I don't have the facility to change the calculations for particular users, but I think I do handle expansions quite nicely. The downside of my handling is that the numbers on BGG and the numbers on extended stats can't match.

Jason, for finding plays in a month I just screenscrape from the BGG pages, so if they appear there they'll appear in my stats.

Maria, yes, I have the same problem with books, and CDs, and DVDs.

Maria said...

It's good to know we're not alone.

Brian said...


A while ago I was playing with a variant of this (in Excel) that basically allowed for fractional steps. (Instead of getting 1 game forgiven at 10 plays, you'd get log_n(plays) forgiven (assuming plays >= 1). Various values of N were interesting, but it seems fairly close to what you ended up with.