模型评估项目

Evaluator项目:

  1. MySQL获取模型预测结果
  2. MySQL获取真实结果
  3. 线下评估
  4. 上传评估结果至MySQL

文章目录

  • 1 项目结构
    • 1.1 评估时间安排
  • 2 脚本解析
    • 2.1 定时脚本 evaluate.sh
    • 1.2 评估模块 Evaluator

1 项目结构

1.1 评估时间安排

  • 每周五评估:评估上周五往前一周的预测结果
Mon 07 Mon 14 Mon 21 Mon 28 ds_pred_1 ds_eval_1 ds_pred_2 ds_eval_2 ds_pred_3 ds_eval_3 Date of Pred_1 Date of Eval_1 Date of Pred_2 Date of Eval_2 Date of Pred_3 Date of Eval_3 Evaluate Schedule

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

你可能感兴趣的:(Python,数据库,定时任务,Linux,服务器,定时任务,Python,MySQL,模型评估)