【Python常用函数】一文让你彻底掌握Python中的scorecardpy.split_df函数

文摘   教育   2024-04-06 16:06   中国  

scorecardpy是一个用于构建评分卡模型的Python库。

关于评分卡的原理,可以翻看历史文章:逻辑回归和sigmod函数的由来逻辑回归(logistics regression)原理-让你彻底读懂逻辑回归

之前也发过通过写代码和调用toad包进行评分卡搭建的文章,感兴趣的小伙伴可以翻看一下:逻辑回归项目实战-附Python实现代码评分卡原理及Python实现【评分卡实现】应用Python中的toad.ScoreCard函数实现评分卡

在评分卡模型的构建过程中,通常需要把原始数据切分成训练集和测试集。

在scorecardpy库中,split_df函数用于将数据集(通常是包含特征和目标变量的DataFrame)分割成训练集和测试集。

本文和你一起来探索scorecardpy中的split_df函数,让你以最短的时间明白这个函数的原理。

也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。

本文目录
  1. 安装scorecardpy

  2. split_df函数定义

  3. split_df函数实例

    3.1 导入用到的库

    3.2 使用默认参数分割数据集

    3.3 指定分割比例

    3.4 设置随机数种子

    3.5 指定按目标列进行分割


一、安装scorecardpy

split_df是scorecardpy库下的函数,调用需先要安装库。打开cmd,安装语句如下:

pip install scorecardpy


二、split_df函数定义
split_df是scorecardpy库中一个函数,用于将数据集分割成训练集和测试集
其基本调用语法如下:
import scorecardpy as sc
sc.split_df(dt, y=None, ratio=0.7, seed=186)

参数详解:

dt:数据框,通常是DataFrame,指需要分割的数据集,通常包含特征变量和目标变量(如果有的话)。

y:目标变量名,即需要预测或分类的列名,默认值为None。如果提供了目标变量,数据将会基于该列进行分割。

ratio:训练集和测试集的分割比例,默认值0.7可以调整这个比例以确定训练集和测试集的量。

seed:随机数生成器的种子,设置种子可以确保每次调用split_df函数时都能得到相同的分割结果,如果不设置,每次运行的结果可能会有所不同

函数返回值:
  • split_df函数通常返回两个DataFrame对象:一个用于训练的数据集和一个用于测试的数据集。
注意:参数的具体名称和默认值可能因库的版本不同而有所变化,因此最好查阅你所使用的scorecardpy版本的官方文档以获取最准确的信息。
分割数据集是机器学习和数据分析中非常常见的步骤,它有助于评估模型在未见数据上的性能。通过调整ratio参数,你可以控制用于训练和测试的数据量,以适应你的具体需求。

三、split_df函数实例

1   导入用到的库

首先导入用到的库,具体代码如下:

import toadimport numpy as npimport pandas as pd import scorecardpy as scfrom scorecardpy import split_df
其中import xx as yy是为了代码简洁给xx库取了个简洁的别名,后续可以用yy代替xx。

如有未安装库的小伙伴,可自行百度安装。



  使用默认参数分割数据集

首先创建一个包含特征和目标变量的数据集,具体代码如下:

# 创建一个包含特征和目标变量的数据集df  data = {      'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],      'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],      'target': [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]  }  df = pd.DataFrame(data)  display(df)

得到结果:

然后使用默认参数分割数据集,具体代码如下:

# 使用默认参数分割数据集  train_df, test_df = split_df(df).values()  print('='*10, 'train_df','='*10)display(train_df) print('='*10, 'test_df','='*10)display(test_df) print('='*10, 'train_test_shape','='*10)print(train_df.shape, test_df.shape)
得到结果:

从结果知,按默认值划分训练集占比70%、测试集占比30%。

 指定分割比例

接着调整训练集和测试集占比,设置80%数据用于训练,20%数据用于测试,具体代码如下:

# 假设我们想要将80%的数据用于训练,20%用于测试  train_ratio = 0.8  train_df, test_df = split_df(df, ratio=train_ratio).values()print('='*10, 'train_df','='*10)display(train_df) print('='*10, 'test_df','='*10)display(test_df) print('='*10, 'train_test_shape','='*10)print(train_df.shape, test_df.shape)

得到结果:

从结果知,总计10行的数据,训练集有8行,测试集有2行,符合训练集占比80%,测试集占比20%。


 设置随机数种子

若我们想要确保每次分割的结果一致,我们可以设置随机数种子,具体代码如下:

seed_value = 42  train_df, test_df = split_df(df, seed=seed_value).values()

由于设置了种子,多次运行这段代码将会得到相同的分割结果。


 指定按目标列进行分割

首先来看下指定按目标列分割,具体代码如下:

data = {      'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],      'target': [1, 1, 1, 1, 1, 0, 0, 0, 0, 0],      'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]  }  df = pd.DataFrame(data)  train_df, test_df = split_df(df, y='target', ratio=0.7).values()print('='*10, 'train_df','='*10)display(train_df) print('='*10, 'test_df','='*10)display(test_df) print('='*10, 'train_test_shape','='*10)print(train_df.shape, test_df.shape)

得到结果:

可以发现当指定了按目标列target进行分割时,虽然指定的分割比例是0.7,但是训练集的占比是80%,测试集的占比是20%。

这是由于这时切割是按目标列进行,尽可能保证训练集和测试集中好坏样本比例差距不大时,把训练集和测试集数据划分成指定比例。

为了对比,我们不指定目标列,看下结果,具体代码如下:

data = {      'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],       'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],    'target': [1, 1, 1, 1, 1, 0, 0, 0, 0, 0],  }  df = pd.DataFrame(data)  train_df, test_df = split_df(df, ratio=0.7).values()print('='*10, 'train_df','='*10)display(train_df) print('='*10, 'test_df','='*10)display(test_df) print('='*10, 'train_test_shape','='*10)print(train_df.shape, test_df.shape)

得到结果:

从结果知,此时训练集和测试集的比例确实占比分别为0.7和0.3,且未考虑目标列中好坏样本的占比,测试集中目标列的值全为1。

至此,Python中的split_df函数已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。

【部分群限时免费进分群讨论学习Python、玩转Python、风控建模【29.9元进】、人工智能、数据分析相关问题,还提供练习数据资料招聘内推信息、优秀文章、学习视频、公众号文章答疑,也可交流工作中遇到的难题。如需添加微信号19967879837,加时备注想进的群,比如学习python。

往期回顾:
一文弄懂随机森林的原理和应用

一文囊括Python中的函数,持续更新。。。

一文囊括Python中的有趣案例,持续更新。。。

【评分卡实现】应用Python中的toad.ScoreCard函数实现评分卡

【Python常用函数】一文让你彻底掌握Python中的toad.quality函数

【Python数据挖掘】应用toad包中的KS_bucket函数统计好坏样本率、KS值



限时免费进群

19967879837

添加微信号、手机号

阿黎逸阳的代码
阿黎逸阳,分享大数据和人工智能领域知识,提供风控建模干货经验。 博主履历:世界五百强公司、互联网上市公司、高校、外资银行,多年研究大数据分析、建模以及教学工作。
 最新文章