본문 바로가기

코딩, 엑셀

정규화된 점수만들기


랭킹 점수를 만들기 위한 factor가 4가지가 있다고 하자. 각각의 점수의 범위는 천차만별일때 그대로 합산을 해서는 제대로된 점수를 만들기 어렵다. 해서 각각의 점수를 0과 1사이로 노멀라이즈 한후에 평균을 구하기로 한다. 이때, 각각의 노멀라이즈 할때도 극단적으로 큰 숫자와 작은 숫자가 어울리게 되면 제대로 분포를 만들수 없어서 자연로그를 씌우기로 한다. 그러면 아래와 같이 코딩을 한다. 

 

# 자연로그를 씌워서 고르게 분포시킨다 
r_a_cnt = math.log(a_cnt if a_cnt > 0 else 1)
r_b_cnt = math.log(b_cnt if b_cnt > 0 else 1)
r_c_cnt = math.log(c_cnt if c_cnt > 0 else 1)
r_d_cnt = math.log(d_cnt if d_cnt > 0 else 1)
        
# 0과 1사이의 숫자로 노멀라이즈를 한다.         
n_a_cnt = (r_a_cnt-min(list_a))/(max(list_a)-min(list_a))
n_b_cnt = (r_b_cnt-min(list_b))/(max(list_b)-min(list_b))
n_c_cnt = (r_c_cnt-min(list_c))/(max(list_c)-min(list_c))
n_d_cnt = (r_d_cnt-min(list_d))/(max(list_d)-min(list_d))

# float 를 decimal 타입으로 통일한다 
n_a_cnt = decimal.Decimal(n_a_cnt)
n_b_cnt = decimal.Decimal(n_b_cnt)
n_c_cnt = decimal.Decimal(n_c_cnt)
n_d_cnt = decimal.Decimal(n_d_cnt)


# 4가지 factor의 평균값을 구한다 
score = (n_a_cnt + n_b_cnt + n_c_cnt + n_d_cnt) / 4

Only I can change me life, no one can do it for me. – Carol Burnett