建模常用的自定义函数(ks,auc等)
1.统计拆分训练集测试集之后的分布
def summary(data_train, data_test, y): ''' 函数目标:统计数据拆分训练集和测试集之后的分布(如样本数量,坏账率之类的) 变量: data_train:训练集(包括label) data_test:测试集(包括label),如果label是单独的,需要先合并,但是也可以直接(data_train, data_test = train_test_split() y:label的columns_name 返回值: 一个df ''' summary = pd.DataFrame( { '样本数': [len(data_train), len(data_test)], '坏账数': [data_train[y].sum(), data_test[y].sum()], '坏账率': [ round(data_train[y].mean(), 4), round(data_test[y].mean(), 4) ], }, index=['训练集', '测试集'] )[['样本数', '坏账数', '坏账率']] summary.index.name = '数据集' return summary
2.计算ks
def ks(self, data, y): ''' 目标:计算出分类模型的ks值 变量: self:模型fit(x,y),如(self=tree.fit(x,y)) data:一般是训练集(不包括label)或者是测试集(也是不包括label) y:label的column_name 返回:训练集(或者测试集)的ks值 ''' p = self.predict(data) fpr, tpr, p_threshold = metrics.roc_curve(data[y], p, drop_intermediate=False, pos_label=1) df = pd.DataFrame({'fpr': fpr, 'tpr': tpr, 'p': p_threshold}) df.loc[0, 'p'] = max(p) ks = (df['tpr'] - df['fpr']).max() return ks
3.计算auc
def auc(self, data, y): ''' 目标:计算出分类模型的ks值 变量: self:模型fit(x,y),如(self=tree.fit(x,y)) data:一般是训练集(不包括label)或者是测试集(也是不包括label) y:label的column_name 返回:训练集(或者测试集)的auc值 ''' p = self.predict(data) fpr, tpr, p_threshold = metrics.roc_curve(data[y], p, drop_intermediate=False, pos_label=1) df = pd.DataFrame({'fpr': fpr, 'tpr': tpr, 'p': p_threshold}) df.loc[0, 'p'] = max(p) roc_auc = metrics.auc(fpr, tpr) return roc_auc
4.ks画图
def plot_ks(self, data, y): ''' 目的:画出ks的图片 变量: self:模型fit(x,y),如(self=tree.fit(x,y)) data:一般是训练集(不包括label)或者是测试集(也是不包括label) y:label的column_name 返回:训练集(或者测试集)的ks图片 ''' p = self.predict(data) fpr, tpr, p_threshold = metrics.roc_curve(data[y], p, drop_intermediate=False, pos_label=1) df = pd.DataFrame({'fpr': fpr, 'tpr': tpr, 'p': p_threshold}) df.loc[0, 'p'] = max(p) df['diff'] = df['tpr'] - df['fpr'] ks = df['diff'].max() ks_p = df.loc[df['diff'] == ks, 'p'].iloc[0] fig = plt.figure(figsize=(2.8, 2.8), dpi=140) ax = fig.add_subplot(111) ax.plot(df['p'], df['tpr'], color='navy', lw=2, label='TPR') ax.plot(df['p'], df['fpr'], color='darkorange', lw=2, label='FPR') ax.plot( [ks_p, ks_p], [ df.loc[df['p'] == ks_p, 'tpr'].iloc[0], df.loc[df['p'] == ks_p, 'fpr'].iloc[0] ], color='crimson', lw=2, label='KS = %.4f' % ks ) ax.set_xlim([0.0, df['p'].max()]) ax.set_ylim([0.0, 1.05]) ax.set_xlabel('Prob Threshold') ax.set_ylabel('Rate') ax.set_title('K-S Curve') ax.legend(loc="upper right") return fig
5.auc画图
def plot_roc(self, data, y): ''' 目标:计算出分类模型的ks值 变量: self:模型fit(x,y),如(self=tree.fit(x,y)) data:一般是训练集(不包括label)或者是测试集(也是不包括label) y:label的column_name 返回:训练集(或者测试集)的auc的图片 ''' p = self.predict(data) fpr, tpr, p_threshold = metrics.roc_curve(data[y], p, drop_intermediate=False, pos_label=1) df = pd.DataFrame({'fpr': fpr, 'tpr': tpr, 'p': p_threshold}) df.loc[0, 'p'] = max(p) ks = (df['tpr'] - df['fpr']).max() roc_auc = metrics.auc(fpr, tpr) fig = plt.figure(figsize=(2.8, 2.8), dpi=140) ax = fig.add_subplot(111) ax.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve\nAUC = %0.4f\nK-S = %0.4f' % (roc_auc, ks) ) ax.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') ax.set_xlim([0.0, 1.0]) ax.set_ylim([0.0, 1.05]) ax.set_xlabel('False Positive Rate') ax.set_ylabel('True Positive Rate') ax.set_title('ROC Curve') ax.legend(loc="lower right") plt.close() return fig
分类:
sklearn
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人