Skip to content

Instantly share code, notes, and snippets.

@aditya00kumar
Last active November 16, 2021 07:31
Show Gist options
  • Save aditya00kumar/8ea2a4f9c0745a2d2ed0c6365b76f27c to your computer and use it in GitHub Desktop.
Save aditya00kumar/8ea2a4f9c0745a2d2ed0c6365b76f27c to your computer and use it in GitHub Desktop.
Function to provide bayesian Average approximation to ratings on K scale.
import math
import scipy.stats as st
def bayesian_rating_products(n, confidence=0.95):
"""
Function to calculate wilson score for N star rating system.
:param n: Array having count of star ratings where ith index represent the votes for that category i.e. [3, 5, 6, 7, 10]
here, there are 3 votes for 1-star rating, similarly 5 votes for 2-star rating.
:param confidence: Confidence interval
:return: Score
"""
if sum(n)==0:
return 0
K = len(n)
z = st.norm.ppf(1 - (1 - confidence) / 2)
N = sum(n)
first_part = 0.0
second_part = 0.0
for k, n_k in enumerate(n):
first_part += (k+1)*(n[k]+1)/(N+K)
second_part += (k+1)*(k+1)*(n[k]+1)/(N+K)
score = first_part - z * math.sqrt((second_part - first_part*first_part)/(N+K+1))
return score
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment