如何用python创建高效快速的评分系统?
作为python项目的一部分,我需要开发一个快速高效的符号系统来对对象进行评级。简单地说,我有几个评级标准,我称之为A,B,C,C,D。。。每项标准的评分为10分 我必须评估一个字典,它的关键是符号的标准(a,B,C,D…),作为值,需要注意的值 问题是:如何用python创建高效快速的评分系统?,python,python-3.x,Python,Python 3.x,作为python项目的一部分,我需要开发一个快速高效的符号系统来对对象进行评级。简单地说,我有几个评级标准,我称之为A,B,C,C,D。。。每项标准的评分为10分 我必须评估一个字典,它的关键是符号的标准(a,B,C,D…),作为值,需要注意的值 问题是: 要评估的数据可以有几种类型:int/float/date 最高值(项目数)可获得10分 例如已售出)或在某些情况下最低(订单数量) 取消) 每个评分标准必须加权 算法必须优化和快速,以实时记录对象 因此,我开始使用JSON将我的评分标准与ev
{
"A": {
"weighting": 2,
"graduation": {
"10": ["lesser_than_or_equal", 0],
"9": ["lesser_than_or_equal", 1],
"8": ["lesser_than_or_equal", 2],
"7": ["lesser_than_or_equal", 3],
"6": ["lesser_than_or_equal", 4],
"5": ["lesser_than_or_equal", 5],
"4": ["lesser_than_or_equal", 6],
"3": ["lesser_than_or_equal", 7],
"2": ["lesser_than_or_equal", 9],
"1": ["great_than", 10]
}
},
"B": {
"weighting": 3,
"graduation": {
"10": ["greater_than_or_equal", 10000000],
"9": ["greater_than_or_equal", 1000000],
"8": ["greater_than_or_equal", 100000],
"7": ["greater_than_or_equal", 10000],
"6": ["greater_than_or_equal", 1000],
"5": ["greater_than_or_equal", 100],
"4": ["greater_than_or_equal", 50],
"3": ["greater_than_or_equal", 30],
"2": ["greater_than_or_equal", 20],
"1": ["less_than", 20]
}
},
这是我的代码:
类表示法(对象):
def分配符号(自我、分数、标准='A'):
尝试:
grade=self.get_grade_作为_标准(self.fetchScoringSystem('scoringSystem.json'),标准)
除作为exc的例外情况外:
logger.error('无法检索标准刻度'+criteria+':'+exc)
其他:
等级=等级[“毕业”]
对于已排序的关键字(等级,关键字=int,反转=True):
评估员,参数=等级[关键]
如果self.\uuuu getattribute\uuuuu(评估者)(分数,参数):
返回值(整数(关键)*整数(等级['加权]))
其他:
提高属性错误
logger.error('无法使用参数'+score+param'访问函数'+evaluator+'))
def FETCHTGRADINGSCALE(自、填充):
导入json
从集合导入订单
开放式(填充“r”)为f:
data=json.load(f,object\u pairs\u hook=OrderedDict)
logger.info(“读取文件%s”,填充)
返回数据
def大于或等于(自我、分数、x):
尝试:
返回分数>=x
除了作为exc的ValueError:
logger.error('值中的错误:'+exc)
def小于或等于(自我、分数、x):
尝试:
返回分数在这里,您描述的更多的是“成本函数”,而不是“算法”。有时,当多个KPI被塞进一个无单位的数字时,人们会称之为“绩效指标”或FoM
分数为10可以指定给最高值(例如,售出的商品数量)或在某些情况下指定给最低值(订单取消数量)
这没有什么意义,你需要“好”来统一地对应,比如说,高值,然后“坏”来对应低值。
最简单的修复方法是用(10-score)
翻转“向后”的标准。
一旦进行了分数调整,您就可以自由地放弃当前的大/小跟踪
我假设日期不会保持这种方式,但会转换为一个数字,如days\u old
,处理方式与其他标准非常相似
为所有标准定义权重,并计算加权和。
小菜一碟。
从单位间隔0.中选择权重。。1、可能是最方便的。
权重不需要求和到1.0,但当人类解释输入及其对输出的贡献时,这肯定会有所帮助
TypeError:“int”对象不可编辑
看起来您希望解包一个2元组,但grades[key]
结果只是一个整数,如7
。
get\u grade\u for\u criteria()
函数在返回格式正确的结果时需要小心。最好包含完整的错误跟踪,因此我们不会试图猜测是哪一行导致了错误或导致错误的上下文。如果错误位于将注释函数赋值给行:evaluator,param=grades[key]感谢您的帮助为什么您认为重量应该在[0.1]范围内?我不太了解目前的兴趣。做(10分)的想法很好,但在这种情况下,如何区分正常标准和“向后”标准?我只是看了一下FoMs,但找不到任何有用的信息。你有关于FoM的文章给我建议吗?记笔记后的想法是通过决策树来确定最佳对象
evaluator, param = grades[key]