模型評估項目

Evaluator項目:

  1. MySQL獲取模型預測結果
  2. MySQL獲取真實結果
  3. 線下評估
  4. 上傳評估結果至MySQL

1 項目結構

1.1 評估時間安排

  • 每週五評估:評估上週五往前一週的預測結果
Mon 07Mon 14Mon 21Mon 28ds_pred_1 ds_eval_1 ds_pred_2 ds_eval_2 ds_pred_3 ds_eval_3 Date of Pred_1Date of Eval_1Date of Pred_2Date of Eval_2Date of Pred_3Date of Eval_3Evaluate 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章