モデル評価項目


Evaluatorプロジェクト:
  • MySQLモデル予測結果
  • を取得
  • MySQL実績を取得
  • 線下評価
  • 評価結果をMySQL
  • にアップロード
    文書ディレクトリ
  • プロジェクト構造
  • 1.1評価スケジュール
  • 2スクリプト解析
  • 2.1タイミングスクリプトevaluate.sh
  • 1.2評価モジュールEvaluator
  • 1プロジェクト構造
    1.1評価スケジュール
  • 毎週5評価:先週金曜日の前の週の予測結果
  • を評価
    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
  • 毎週5日
  • を実行
    #!/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