scorecardpy是一个用于构建评分卡模型的Python库。
关于评分卡的原理,可以翻看历史文章:逻辑回归和sigmod函数的由来、逻辑回归(logistics regression)原理-让你彻底读懂逻辑回归。
之前也发过通过写代码和调用toad包进行评分卡搭建的文章,感兴趣的小伙伴可以翻看一下:逻辑回归项目实战-附Python实现代码、评分卡原理及Python实现、【评分卡实现】应用Python中的toad.ScoreCard函数实现评分卡。
在评分卡模型的构建过程中,通常需要把原始数据切分成训练集和测试集。
在scorecardpy库中,split_df函数用于将数据集(通常是包含特征和目标变量的DataFrame)分割成训练集和测试集。
本文和你一起来探索scorecardpy中的split_df函数,让你以最短的时间明白这个函数的原理。
也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。
安装scorecardpy
split_df函数定义
split_df函数实例
3.1 导入用到的库
3.2 使用默认参数分割数据集
3.3 指定分割比例
3.4 设置随机数种子
3.5 指定按目标列进行分割
split_df是scorecardpy库下的函数,调用需先要安装库。打开cmd,安装语句如下:
pip install scorecardpy
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对象:一个用于训练的数据集和一个用于测试的数据集。
三、split_df函数实例 1 导入用到的库
首先导入用到的库,具体代码如下:
import toad
import numpy as np
import pandas as pd
import scorecardpy as sc
from scorecardpy import split_df
其中import xx as yy是为了代码简洁给xx库取了个简洁的别名,后续可以用yy代替xx。 如有未安装库的小伙伴,可自行百度安装。
2 使用默认参数分割数据集
首先创建一个包含特征和目标变量的数据集,具体代码如下:
# 创建一个包含特征和目标变量的数据集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%。 3 指定分割比例
接着调整训练集和测试集占比,设置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%。
4 设置随机数种子
若我们想要确保每次分割的结果一致,我们可以设置随机数种子,具体代码如下:
seed_value = 42
train_df, test_df = split_df(df, seed=seed_value).values()
由于设置了种子,多次运行这段代码将会得到相同的分割结果。
5 指定按目标列进行分割
首先来看下指定按目标列分割,具体代码如下:
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中的toad.ScoreCard函数实现评分卡
【Python常用函数】一文让你彻底掌握Python中的toad.quality函数
【Python数据挖掘】应用toad包中的KS_bucket函数统计好坏样本率、KS值
限时免费进群
19967879837
添加微信号、手机号