guarantee-admin-api-v0.2/Utils/ScoreUtils.py

98 lines
2.5 KiB
Python

from DBHelper.MongoHelperInstance import DB_GUA
class ScoreUtils(object):
"""打分工具类"""
@staticmethod
def ladder_score_positive(x, ref):
"""正相关阶梯打分"""
w, b1, b2, b3, b4, b5 = ref['weight'], ref['b1'], ref['b2'], ref['b3'], ref['b4'], ref['b5']
if x is None:
s = 0
elif x > b1:
s = w
elif b2['s'] < x <= b2['e']:
s = w * 0.9
elif b3['s'] < x <= b3['e']:
s = w * 0.8
elif b4['s'] < x <= b4['e']:
s = w * 0.7
elif x <= b5:
s = w * 0.6
else:
s = 0
return round(s, 2)
@staticmethod
def ladder_score_negative(x, ref):
"""反相关阶梯打分"""
w, b1, b2, b3, b4, b5 = ref['weight'], ref['b1'], ref['b2'], ref['b3'], ref['b4'], ref['b5']
if x is None:
s = 0
elif x < b1:
s = w
elif b2['s'] <= x < b2['e']:
s = w * 0.9
elif b3['s'] <= x < b3['e']:
s = w * 0.8
elif b4['s'] <= x < b4['e']:
s = w * 0.7
elif x >= b5:
s = w * 0.6
else:
s = 0
return round(s, 2)
@staticmethod
def ladder_score_centered(x, ref):
"""居中相关阶梯打分"""
w, b1, b2, b3, b4, b5 = ref['weight'], ref['b1'], ref['b2'], ref['b3'], ref['b4'], ref['b5']
if x is None:
s = 0
elif b1['s'] <= x <= b1['e']:
s = w
elif (b2['s1'] <= x < b2['e1']) or (b2['s2'] < x <= b2['e2']):
s = w * 0.9
elif (b3['s1'] < x < b3['e1']) or (b3['s2'] < x <= b3['e2']):
s = w * 0.8
elif b4['s'] < x < b4['e']:
s = w * 0.7
elif x >= b5['r'] or x <= b5['l']:
s = w * 0.6
else:
s = 0
return round(s, 2)
@staticmethod
def eval_rank_level(score):
"""
评测信用级别
注意: 级别参考必须以分数从大到小排序
"""
rank_ref_items = DB_GUA.find_all_data_with_single_sort(
"模型数据",
"RankRefs_v0.1",
{},
["rank", "score"],
{"score": -1}
)
rank_level = None
rank_refs = dict()
for item in rank_ref_items:
rank_refs = {**rank_refs, **{item['rank']: item['score']}}
for ref_key in rank_refs:
if score >= rank_refs[ref_key]:
rank_level = ref_key
break
return rank_level