Browse Source

feat:修改评估线上模型和新模型优劣的逻辑

zhaohaipeng 5 months ago
parent
commit
b0decead2f
2 changed files with 23 additions and 10 deletions
  1. 22 8
      ad/01_ad_model_update.sh
  2. 1 2
      ad/ad_monitor_util.py

+ 22 - 8
ad/01_ad_model_update.sh

@@ -53,6 +53,10 @@ predict_analyse_file_path=""
 # 保存模型评估的分析结果
 old_incr_rate_avg=0
 new_incr_rate_avg=0
+
+top10_msg=""
+
+
 declare -A real_score_map
 declare -A old_score_map
 declare -A new_score_map
@@ -70,7 +74,7 @@ check_run_status() {
     if [ $status -ne 0 ]; then
         echo "$LOG_PREFIX -- ${step_name}失败: 耗时 $step_elapsed"
         local elapsed=$(($step_end_time - $start_time))
-        /root/anaconda3/bin/python ${sh_path}/ad_monitor_util.py --level error --msg "$msg" --start "$start_time" --elapsed "$elapsed"
+        /root/anaconda3/bin/python ${sh_path}/ad_monitor_util.py --level error --msg "$msg" --start "$start_time" --elapsed "$elapsed" --top10 "${top10_msg}"
         exit 1
     else
         echo "$LOG_PREFIX -- ${step_name}成功: 耗时 $step_elapsed"
@@ -84,13 +88,6 @@ send_success_upload_msg(){
   msg+="\n\t - 新模型Top10差异平均值: ${new_incr_rate_avg}"
   msg+="\n\t - 模型在HDFS中的路径: ${model_save_path}"
   msg+="\n\t - 模型上传OSS中的路径: ${MODEL_OSS_PATH}/${model_name}.tar.gz"
-  
-  local top10_msg="| CID  | 老模型相对真实CTCVR的变化 | 新模型相对真实CTCVR的变化 |"
-    top10_msg+=" \n| ---- | --------- | -------- |"
-
-  for cid in "${!new_score_map[@]}"; do
-    top10_msg="${top10_msg} \n| ${cid} | ${old_score_map[$cid]} | ${new_score_map[$cid]} | "
-  done
 
   local step_end_time=$(date +%s)
   local elapsed=$(($step_end_time - $start_time))
@@ -98,6 +95,8 @@ send_success_upload_msg(){
   /root/anaconda3/bin/python ${sh_path}/ad_monitor_util.py --level info --msg "${msg}" --start "${start_time}" --elapsed "${elapsed}" --top10 "${top10_msg}"
 }
 
+
+
 init() {
   
   declare -a date_keys=()
@@ -223,6 +222,8 @@ calc_model_predict() {
   local max_line=10
   local old_total_diff=0
   local new_total_diff=0
+  top10_msg="| CID  | 老模型相对真实CTCVR的变化 | 新模型相对真实CTCVR的变化 |"
+  top10_msg+=" \n| ---- | --------- | -------- |"
   while read -r line && [ ${count} -lt ${max_line} ]; do
 
       # 使用 ! 取反判断,只有当行中不包含 "cid" 时才执行继续的逻辑
@@ -237,6 +238,9 @@ calc_model_predict() {
       old_score_map[${numbers[0]}]=${numbers[6]}
       new_score_map[${numbers[0]}]=${numbers[7]}
 
+      # 拼接Top10详情的飞书消息
+      top10_msg="${top10_msg} \n| ${numbers[0]} | ${numbers[6]} | ${numbers[7]} | "
+
       old_total_diff=$( echo "${old_total_diff} + ${numbers[6]}" | bc -l )
       new_total_diff=$( echo "${new_total_diff} + ${numbers[7]}" | bc -l )
 
@@ -297,6 +301,16 @@ model_predict() {
     check_run_status 1 $step_start_time "${predict_date_path: -8}的数据,绝对误差大于0.1" "线上模型评估${predict_date_path: -8}的数据,绝对误差大于0.1,请检查"
     exit 1
   fi 
+
+
+  # 对比两个模型的差异
+  score_diff=$( echo "${new_incr_rate_avg} - ${old_incr_rate_avg}" | bc -l )
+  if (( $(echo "${score_diff} > 0.050000" | bc -l ) ));then 
+    echo "两个模型评估${predict_date_path: -8}的数据,两个模型分数差异为: ${score_diff}, 大于0.05, 请检查"
+    check_run_status 1 $step_start_time "两个模型评估${predict_date_path: -8}的数据" "两个模型评估${predict_date_path: -8}的数据,两个模型分数差异为: ${score_diff}, 大于0.05"
+    exit 1
+  fi 
+
 }
 
 model_upload_oss() {

+ 1 - 2
ad/ad_monitor_util.py

@@ -95,7 +95,7 @@ def _monitor(level, msg: str, start, elapsed, top10):
             ]
         }
     }
-    if top10 is not None:
+    if top10 is not None and len(top10) > 0:
         collapsible_panel = {
             "tag": "collapsible_panel",
             "header": {
@@ -127,7 +127,6 @@ def _monitor(level, msg: str, start, elapsed, top10):
     )
 
 
-
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='告警Utils')
     parser.add_argument('--level', type=str, help='通知级别, info, warn, error', required=True)