Evaluator项目:
- MySQL获取模型预测结果
- MySQL获取真实结果
- 线下评估
- 上传评估结果至MySQL
1 项目结构
1.1 评估时间安排
- 每周五评估:评估上周五往前一周的预测结果
2 脚本解析
2.1 定时脚本 evaluate.sh
- 每周五执行
#!/usr/bin/env bash
# 工作目录
WORK_DIR=/home/zhoujialiang/evaluate/
# 参数
ds_eval=`date -d "-7 days" +%Y-%m-%d`
ds_pred_start=`date -d "$ds_eval -14 days" +%Y-%m-%d`
ds_pred_end=`date -d "$ds_eval -8 days" +%Y-%m-%d`
ds_ban_start=`date -d "$ds_eval -14 days" +%Y-%m-%d`
ds_ban_end=`date -d "$ds_eval -1 days" +%Y-%m-%d`
# 评估主线挂模型
echo /usr/bin/python3 evaluate.py --tablename zhuxiangua --ds_pred_start $ds_pred_start --ds_pred_end $ds_pred_end --ds_ban_start $ds_ban_start --ds_ban_end $ds_ban_end
/usr/bin/python3 evaluate.py --tablename zhuxiangua --ds_pred_start $ds_pred_start --ds_pred_end $ds_pred_end --ds_ban_start $ds_ban_start --ds_ban_end $ds_ban_end
# 评估三环挂模型
echo /usr/bin/python3 evaluate.py --tablename sanhuangua --ds_pred_start $ds_pred_start --ds_pred_end $ds_pred_end --ds_ban_start $ds_ban_start --ds_ban_end $ds_ban_end
/usr/bin/python3 evaluate.py --tablename sanhuangua --ds_pred_start $ds_pred_start --ds_pred_end $ds_pred_end --ds_ban_start $ds_ban_start --ds_ban_end $ds_ban_end
# 评估图谱模型
echo /usr/bin/python3 evaluate.py --tablename graph --ds_pred_start $ds_pred_start --ds_pred_end $ds_pred_end --ds_ban_start $ds_ban_start --ds_ban_end $ds_ban_end
/usr/bin/python3 evaluate.py --tablename graph --ds_pred_start $ds_pred_start --ds_pred_end $ds_pred_end --ds_ban_start $ds_ban_start --ds_ban_end $ds_ban_end
1.2 评估模块 Evaluator
- 获取预测外挂数、实际封停数、预测外挂中被封停数,并计算准确率和召回率
class Evaluator(object):
"""MySQL数据读取或上传
Attributes:
_conn: MySQLl连接
"""
def __init__(self, ids_pred, ids_ban):
self._ids_pred = set(ids_pred)
self._ids_ban = set(ids_ban)
def prec_recall(self):
"""评估准确率和召回率
获取预测外挂数,实际封停数,预测外挂且封停数;
并计算预测准确率和召回率
Returns:
results: 评估结果字典,包含 {
cnt_pos: 预测外挂数
cnt_true: 实际封停数
cnt_pos_true: 预测正确数
prec: 准确率
recall: 召回率
} 五个key
"""
results = dict()
results['cnt_pos'] = len(self._ids_pred)
results['cnt_true'] = len(self._ids_ban)
results['cnt_pos_true'] = results['cnt_pos'] + results['cnt_true'] - len(set(list(self._ids_ban) + list(self._ids_pred)))
try:
results['prec'] = results['cnt_pos_true'] / results['cnt_pos']
except Exception as e:
logging.error('No predicted results! {}'.format(e))
try:
results['recall'] = results['cnt_pos_true'] / results['cnt_true']
except Exception as e:
logging.error('No banned role_ids! {}'.format(e))
return results

4642

被折叠的 条评论
为什么被折叠?



