Home

Awesome

Wilson Score for C#

You shouldn't use average for your scores.

Here's why:

Item A has 900 upvotes and 100 downvotes, resulting in an average of 90% likes. <br /> Item B just came up in your database, it has 1 upvote and 0 downvotes, resulting in 100% likes! Woot!

Now Item B will come first than Item A. That's not what you want, is it?

That's exactly the problem that Wilson Score solves.

I found out about this on 'How Not To Sort By Average Rating'. Give it a read.

Tl;dr: Wilson Score takes into account that a higher number of votes has more chance to be a correct representation of the general opinion. It basically answers the question: Given the ratings I have, there is a 95% chance that the "real" fraction of positive ratings is at least what?

If you still think you should sort by average, know that Reddit uses this on "best" sorting. Yelp too.

Using WilsonScore in your C# projects

Nuget package available here, install it with

PM> Install-Package WilsonScore

Using it is as simple as you would expect:

Wilson.Score(upvotes, total);

By default it uses 90% confidence (z = 1.644853). If you want to change the confidence, you can pass a third parameter, like so:

Wilson.Score(upvotes, total, 1.96); // 95% confidence
// or
Wilson.Score(upvotes, total, 2.326348); // 99% confidence

Using Wilson Score on the case mentioned at the start would give these values:

ItemAverage ScoreWilson Score
Item A90%88.32%
Item B100%26.98%

Wilson Score puts Item A in a better position, now everyone is happy.

Right now that's all it does, and that's probably all you need anyway.

Supported Platforms

.NET Framework 4+ <br /> Silverlight 5+ <br /> Windows 8+ <br /> Windows Phone 8.1+ <br /> Windows Phone Silverlight 8 <br /> Xamarin.Android <br /> Xamarin.iOS <br />

Notes

Based on the javascript version by Jonathan Ong. <br /> MIT License