Forráskód Böngészése

feat(roi): 临时前置过滤近7日累计消耗为0的广告

在 calculate_roi_metrics 入口剔除7日累计消耗为0的广告——这些广告
在腾讯平台已无实际分发,继续走完整决策流程只会产生大量"长期零消耗
→自动关停"决策记录,徒增飞书审批表噪音。

实测(end_date=20260426):21 条广告被剔除,creative_df 55677→55171,
metrics CSV 不再含 cost_7d_avg<=0 行。下游所有产物(决策 CSV、审批
表、报告)同步去除这些广告。

代码用 # TEMP[2026-04-27] 标记块包围,grep 一键定位,删除整块即恢复
原行为。merged CSV 保持全量,审计可追溯。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
刘立冬 1 hónapja
szülő
commit
98751167c4
1 módosított fájl, 28 hozzáadás és 0 törlés
  1. 28 0
      examples/auto_put_ad_mini/tools/roi_calculator.py

+ 28 - 0
examples/auto_put_ad_mini/tools/roi_calculator.py

@@ -430,6 +430,34 @@ async def calculate_roi_metrics(
         creative_df = pd.concat(merged_dfs, ignore_index=True)
         logger.info("加载 merged 数据: %d 行(%d 天)", len(creative_df), len(merged_dfs))
 
+        # ============================================================
+        # TEMP[2026-04-27]: 临时把"近 7 天累计消耗 == 0"的广告视为"已关闭",
+        # 在所有聚合/ROI 计算之前直接从 creative_df 中抛弃。
+        # 数学等价于 cost_7d_avg == 0(7 日总和=0 ⇔ 均值=0)。
+        # 删除本块即恢复原行为。merged CSV 不动,审计可追溯。
+        # ============================================================
+        _last_7_start = (end_dt - timedelta(days=6)).strftime("%Y%m%d")
+        _bizdate_str = creative_df["bizdate"].astype(str)
+        _recent7 = creative_df[
+            (_bizdate_str >= _last_7_start) & (_bizdate_str <= end_date_str)
+        ]
+        _zero_ads = (
+            _recent7.groupby("ad_id")["cost"].sum()
+            .pipe(lambda s: s[s.fillna(0) <= 0].index.tolist())
+        )
+        if _zero_ads:
+            _before = len(creative_df)
+            creative_df = creative_df[
+                ~creative_df["ad_id"].isin(_zero_ads)
+            ].reset_index(drop=True)
+            logger.info(
+                f"[TEMP 临时过滤] 抛弃 {len(_zero_ads)} 条广告"
+                f"(近 7 天累计消耗=0,视为已关闭),creative_df: {_before} → {len(creative_df)} 行"
+            )
+        # ============================================================
+        # TEMP END
+        # ============================================================
+
         # Step 1: 聚合到广告级
         ad_df = _aggregate_creative_to_ad(creative_df)
         logger.info("聚合到广告级: %d 行", len(ad_df))