You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在pandas中按累计周维度应用自定义函数计算AUC的实现问题

实现方案

你的需求是按周滚动计算累计AUC,即每一周的结果都使用截止到该周的全量历史数据计算,可通过以下步骤实现:

前置说明

你的原始数据需要包含3个核心字段:

  • week:周标识,支持按时间先后排序
  • expected:模型预测值
  • actual:真实标签
    注:每一周需要对应多条样本,单样本无法计算AUC

完整代码实现

  1. 先对原始数据按周排序,保证时间顺序正确:
import pandas as pd
import numpy as np
from sklearn.metrics import roc_auc_score

# 按周升序排序,重置索引保证顺序正确
df = df.sort_values('week', ascending=True).reset_index(drop=True)
  1. 封装AUC计算函数,处理边界异常:
    你原本定义的auc_group函数可以直接复用,补充边界判断即可,避免累计数据只有一类标签时的报错:
def auc_group(df):
    y_hat = df.expected
    y = df.actual
    # 边界处理:只有一类标签时返回空值,可按需替换为默认值
    if len(y.unique()) < 2:
        return np.nan
    return roc_auc_score(y, y_hat)
  1. 遍历周次计算累计AUC:
# 获取按时间排序的去重周列表
sorted_weeks = df['week'].unique()
result = []

for idx, current_week in enumerate(sorted_weeks):
    # 取截止到当前周的所有历史数据
    cur_subset = df[df['week'].isin(sorted_weeks[:idx+1])]
    # 计算累计AUC
    cur_auc = auc_group(cur_subset)
    result.append({'week': current_week, 'cumulative_auc': cur_auc})

# 转为数据框即为最终输出
result_df = pd.DataFrame(result)

补充说明

如果你的周次数量不多,上述遍历方案性能完全够用,逻辑清晰易调试。若需要更高性能的实现,也可以给样本打上周的顺序编号后用pandas的expanding扩展窗口实现,新手优先推荐上述遍历方案。


内容的提问来源于stack exchange,提问作者jorge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:15:03