如何安装/导入nb21绘制累积增益曲线?该库无pip源及替代库咨询
关于nb21库及累积增益曲线替代方案
nb21库状态
nb21没有公开的PyPI安装源,也找不到活跃的官方维护仓库,基本可以确定该库已停止维护或仅为非公开的内部/个人项目,无法通过常规pip渠道安装使用。
替代方案
1. 使用成熟因果推断/uplift建模库
方案一:causalml
causalml是主流的因果推断工具库,内置累积增益曲线绘制功能,也支持ATE(对应你代码中的elast)计算。
示例代码:
from causalml.metrics import plot_cumulative_gain from causalml.inference.meta import BaseRRegressor from sklearn.ensemble import RandomForestRegressor import matplotlib.pyplot as plt # 训练R-Learner(匹配你代码中的模型逻辑) r_learner = BaseRRegressor(learner=RandomForestRegressor()) r_learner.fit(X=test, y=y, treatment=T) cate_pred = r_learner.predict(X=test) # 绘制累积增益曲线 plot_cumulative_gain(y, T, cate_pred, figsize=(8,6)) plt.title("R-Learner Cumulative Gain Curve") # 添加基线 ate = r_learner.estimate_ate(X=test, y=y, treatment=T)[0] plt.plot([0, 100], [0, ate*100], linestyle="--", color="black", label="Baseline") plt.legend() plt.show()
方案二:scikit-uplift
scikit-uplift专注于uplift建模,提供完整的增益曲线绘制工具。
示例代码:
from sklift.metrics import cumulative_gain_curve, plot_cumulative_gain import matplotlib.pyplot as plt # 绘制累积增益曲线 plot_cumulative_gain(y_true=y, uplift=cate_test_non_param, treatment=T) # 计算并添加基线 ate = y[T==1].mean() - y[T==0].mean() plt.plot([0, 1], [0, ate], linestyle="--", color="black", label="Baseline") plt.title("R-Learner") plt.legend() plt.show()
2. 手动实现核心功能
如果不想引入额外依赖,可手动实现cumulative_gain和elast的核心逻辑:
import numpy as np import matplotlib.pyplot as plt def elast(y, T): # 计算平均处理效应(ATE) return y[T==1].mean() - y[T==0].mean() def cumulative_gain(cate, y, T): # 按CATE降序排序样本 sorted_indices = np.argsort(-cate) sorted_y = y[sorted_indices] sorted_T = T[sorted_indices] n = len(sorted_y) gain = np.zeros(n+1) treated_sum = 0 control_sum = 0 for i in range(n): if sorted_T[i] == 1: treated_sum += sorted_y[i] else: control_sum += sorted_y[i] current_treated = sorted_T[:i+1].sum() current_control = (i+1) - current_treated # 避免除以0的情况 if current_treated == 0 or current_control == 0: gain[i+1] = gain[i] else: current_ate = (treated_sum/current_treated) - (control_sum/current_control) gain[i+1] = current_ate * (i+1)/n * 100 # 转为百分比刻度 return gain # 用你原有的变量调用 gain_curve_test_non_param = cumulative_gain(cate_test_non_param, y, T) gain_curve_test = cumulative_gain(cate_test, y, T) # 假设cate_test是参数化模型的CATE预测值 ate = elast(y, T) plt.plot(gain_curve_test_non_param, color="C0", label="Non-Parametric") plt.plot(gain_curve_test, color="C1", label="Parametric") plt.plot([0, 100], [0, ate*100], linestyle="--", color="black", label="Baseline") plt.legend() plt.title("R-Learner") plt.show()
内容的提问来源于stack exchange,提问作者titutubs
相关产品推荐
相关产品推荐

