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