机器学习 - toad库

toad 是一个Python库,用于数据预处理和特征工程,特别是在金融风控和信用评分建模中应用广泛。

以下是 toad 库中主要函数的详细说明,包括它们的参数和作用:

数据转换与预处理

1. toad.transformer.WOETransformer

作用 :将分类变量转换为WOE(Weight of Evidence)值,以便更好地用于模型训练。
参数

  • exclude: list, 默认值为空列表。需要排除在外的列。
  • min_samples: int, 默认值为0。每个分箱中的最小样本数。
  • n_bins: int, 默认值为10。每个变量的分箱数量。
  • woe: dict, 默认值为None。预定义的WOE字典。
python 复制代码
woe = toad.transformer.WOETransformer()
data_woe = woe.fit_transform(data, target='default')
2. toad.transformer.Fillna

作用 :填补缺失值。
参数

  • value: dict or scalar, 默认值为None。填补缺失值的策略或具体值。
python 复制代码
fillna = toad.transformer.Fillna(value=0)
data_filled = fillna.fit_transform(data)
3. toad.transformer.TargetEncoder

作用 :目标编码器,用于将分类变量编码为目标变量的平均值。
参数

  • cols: list, 默认值为空列表。需要编码的列。
  • target: str。目标列的名称。
  • min_samples: int, 默认值为1。每个类别的最小样本数。
python 复制代码
target_encoder = toad.transformer.TargetEncoder(cols=['categorical_col'], target='default')
data_encoded = target_encoder.fit_transform(data)
4. toad.transformer.StandardScaler

作用 :标准化数据。
参数

  • cols: list, 默认值为空列表。需要标准化的列。
  • with_mean: bool, 默认值为True。是否将数据均值归零。
  • with_std: bool, 默认值为True。是否将数据方差归一。
python 复制代码
scaler = toad.transformer.StandardScaler(cols=['age', 'income'])
data_scaled = scaler.fit_transform(data)
5. toad.transformer.LabelEncoder

作用 :标签编码器,用于将分类变量编码为整数。
参数

  • cols: list, 默认值为空列表。需要编码的列。
python 复制代码
label_encoder = toad.transformer.LabelEncoder(cols=['categorical_col'])
data_encoded = label_encoder.fit_transform(data)
6. toad.utils.to_categorical

作用 :将变量转换为分类变量。
参数

  • df: DataFrame。输入的数据集。
  • cols: list。需要转换的列。
python 复制代码
data = toad.utils.to_categorical(data, cols=['age'])
7. toad.utils.fillna

作用 :填补缺失值。
参数

  • df: DataFrame。输入的数据集。
  • value: dict or scalar, 默认值为None。填补缺失值的策略或具体值。
python 复制代码
data_filled = toad.utils.fillna(data, value=0)
8. toad.utils.to_numeric

作用 :将变量转换为数值类型。
参数

  • df: DataFrame。输入的数据集。
  • cols: list。需要转换的列。
python 复制代码
numeric_data = toad.utils.to_numeric(data, cols=['age', 'income'])
9. toad.utils.to_categorical

作用 :将变量转换为分类变量。
参数

  • df: DataFrame。输入的数据集。
  • cols: list。需要转换的列。
python 复制代码
data = toad.utils.to_categorical(data, cols=['age'])
10. toad.utils.fillna

作用 :填补缺失值。
参数

  • df: DataFrame。输入的数据集。
  • value: dict or scalar, 默认值为None。填补缺失值的策略或具体值。
python 复制代码
data_filled = toad.utils.fillna(data, value=0)

分箱与合并

1. toad.transformer.Combiner

作用 :将连续变量进行分箱处理。
参数

  • method: str, 默认值为'quantile'。分箱方法(例如,'quantile', 'step', 'kmeans')。
  • min_samples: int, 默认值为0。每个分箱中的最小样本数。
  • n_bins: int, 默认值为10。每个变量的分箱数量。
python 复制代码
combiner = toad.transformer.Combiner()
combiner.fit(data, y='default')
data_binned = combiner.transform(data)
2. toad.transformer.Combine

作用 :将两个变量进行合并。
参数

  • df: DataFrame。输入的数据集。
  • cols: list。需要合并的列。
  • name: str。新合并列的名称。
  • func: function。用于合并的函数,例如 summean 等。
python 复制代码
combine = toad.transformer.Combine(cols=['col1', 'col2'], name='combined_col', func='sum')
data_combined = combine.fit_transform(data)
3. toad.transformer.Split

作用 :将一个变量进行拆分。
参数

  • df: DataFrame。输入的数据集。
  • col: str。需要拆分的列。
  • sep: str。分隔符。
  • names: list。拆分后新列的名称。
python 复制代码
split = toad.transformer.Split(col='combined_col', sep='_', names=['col1', 'col2'])
data_split = split.fit_transform(data)
4. toad.transformer.Bin

作用 :对变量进行分箱。
参数

  • df: DataFrame。输入的数据集。
  • col: str。需要分箱的列。
  • n_bins: int, 默认值为10。分箱数量。
  • method: str, 默认值为'quantile'。分箱方法(例如,'quantile', 'step', 'kmeans')。
python 复制代码
bin = toad.transformer.Bin(col='age', n_bins=5, method='quantile')
data_binned = bin.fit_transform(data)
5. toad.transformer.Combiner

作用 :将连续变量进行分箱处理。
参数

  • method: str, 默认值为'quantile'。分箱方法(例如,'quantile', 'step', 'kmeans')。
  • min_samples: int, 默认值为0。每个分箱中的最小样本数。
  • n_bins: int, 默认值为10。每个变量的分箱数量。
python 复制代码
combiner = toad.transformer.Combiner()
combiner.fit(data, y='default')
data_binned = combiner.transform(data)

特征选择

1. toad.selection.select

作用 :特征选择工具,用于自动选择重要特征。
参数

  • target: str。目标列的名称。
  • empty: float, 默认值为0.9。缺失值比例的阈值。
  • iv: float, 默认值为0.02。信息值的阈值。
  • corr: float, 默认值为0.7。相关系数的阈值。
python 复制代码
selected = toad.selection.select(data, target='default', empty=0.9, iv=0.02, corr=0.7)
2. toad.selection.stepwise

作用 :逐步回归特征选择。
参数

  • X: DataFrame。特征矩阵。
  • y: Series。目标变量。
  • direction: str, 默认值为'both'。选择方向,可以是 'forward'、'backward' 或 'both'。
python 复制代码
selected_features = toad.selection.stepwise(X, y, direction='both')
3. toad.selection.high_iv

作用 :选择高信息值(IV)的特征。
参数

  • df: DataFrame。输入的数据集。
  • target: str。目标列的名称。
  • threshold: float, 默认值为0.02。IV值的阈值。
python 复制代码
high_iv_features = toad.selection.high_iv(data, target='default', threshold=0.02)

模型评估

1. toad.metrics.ks

作用 :计算KS(Kolmogorov-Smirnov)值。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
python 复制代码
ks_value = toad.metrics.ks(y_true, y_pred)
2. toad.metrics.roc_auc_score

作用 :计算AUC(Area Under Curve)。
参数

  • y_true: array-like。真实标签。
  • y_score: array-like。预测得分。
python 复制代码
auc_score = toad.metrics.roc_auc_score(y_true, y_score)
3. toad.metrics.confusion_matrix

作用 :计算混淆矩阵。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
python 复制代码
conf_matrix = toad.metrics.confusion_matrix(y_true, y_pred)
4. toad.metrics.precision_score

作用 :计算精确率。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
python 复制代码
precision = toad.metrics.precision_score(y_true, y_pred)
5. toad.metrics.recall_score

作用 :计算召回率。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
python 复制代码
recall = toad.metrics.recall_score(y_true, y_pred)
6. toad.metrics.f1_score

作用 :计算F1得分。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
python 复制代码
f1 = toad.metrics.f1_score(y_true, y_pred)
7. toad.metrics.ks_bucket

**

作用**:计算KS分箱的KS值。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
  • n_bins: int, 默认值为10。分箱数量。
python 复制代码
ks_buckets = toad.metrics.ks_bucket(y_true, y_pred, n_bins=10)

数据检测与处理

1. toad.utils.detect_categorical

作用 :检测数据中的分类变量。
参数

  • df: DataFrame。输入的数据集。
  • exclude: list, 默认值为空列表。需要排除在外的列。
python 复制代码
categorical_vars = toad.utils.detect_categorical(data)
2. toad.utils.drop_na

作用 :删除包含缺失值的行或列。
参数

  • df: DataFrame。输入的数据集。
  • axis: int, 默认值为0。0表示删除行,1表示删除列。
  • how: str, 默认值为'any'。'any'表示只要有缺失值就删除,'all'表示全部缺失才删除。
python 复制代码
clean_data = toad.utils.drop_na(data, axis=0, how='any')
3. toad.utils.clip

作用 :裁剪数据。
参数

  • df: DataFrame。输入的数据集。
  • lower: float, 默认值为None。下限。
  • upper: float, 默认值为None。上限。
python 复制代码
clipped_data = toad.utils.clip(data, lower=0, upper=100)
4. toad.utils.combine

作用 :合并两个数据框。
参数

  • df1: DataFrame。第一个数据框。
  • df2: DataFrame。第二个数据框。
  • on: str or list。合并的键。
python 复制代码
combined_data = toad.utils.combine(df1, df2, on='key_col')
5. toad.utils.drop_na

作用 :删除包含缺失值的行或列。
参数

  • df: DataFrame。输入的数据集。
  • axis: int, 默认值为0。0表示删除行,1表示删除列。
  • how: str, 默认值为'any'。'any'表示只要有缺失值就删除,'all'表示全部缺失才删除。
python 复制代码
clean_data = toad.utils.drop_na(data, axis=0, how='any')
6. toad.utils.clip

作用 :裁剪数据。
参数

  • df: DataFrame。输入的数据集。
  • lower: float, 默认值为None。下限。
  • upper: float, 默认值为None。上限。
python 复制代码
clipped_data = toad.utils.clip(data, lower=0, upper=100)
7. toad.utils.combine

作用 :合并两个数据框。
参数

  • df1: DataFrame。第一个数据框。
  • df2: DataFrame。第二个数据框。
  • on: str or list。合并的键。
python 复制代码
combined_data = toad.utils.combine(df1, df2, on='key_col')

数据可视化

1. toad.plot.ks_plot

作用 :绘制KS曲线。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
  • ax: matplotlib Axes, 默认值为None。如果提供,则绘制在此轴上。
python 复制代码
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
toad.plot.ks_plot(y_true, y_pred, ax=ax)
plt.show()
2. toad.plot.roc_plot

作用 :绘制ROC曲线。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
  • ax: matplotlib Axes, 默认值为None。如果提供,则绘制在此轴上。
python 复制代码
fig, ax = plt.subplots()
toad.plot.roc_plot(y_true, y_pred, ax=ax)
plt.show()
3. toad.plot.pr_plot

作用 :绘制PR(Precision-Recall)曲线。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
  • ax: matplotlib Axes, 默认值为None。如果提供,则绘制在此轴上。
python 复制代码
fig, ax = plt.subplots()
toad.plot.pr_plot(y_true, y_pred, ax=ax)
plt.show()
4. toad.plot.iv_plot

作用 :绘制信息值(IV)曲线。
参数

  • iv: DataFrame。包含IV值的数据框。
  • threshold: float, 默认值为0。用于绘制阈值线。
  • ax: matplotlib Axes, 默认值为None。如果提供,则绘制在此轴上。
python 复制代码
iv = toad.IV(data, target='default')
fig, ax = plt.subplots()
toad.plot.iv_plot(iv, threshold=0.02, ax=ax)
plt.show()

辅助函数

1. toad.utils.categorical

作用 :获取数据集中所有分类变量的列名。
参数

  • df: DataFrame。输入的数据集。
python 复制代码
categorical_columns = toad.utils.categorical(data)
2. toad.utils.continuous

作用 :获取数据集中所有连续变量的列名。
参数

  • df: DataFrame。输入的数据集。
python 复制代码
continuous_columns = toad.utils.continuous(data)

示例:信用评分模型

以下是一个使用 toad 库进行信用评分模型构建的完整示例,展示了从数据预处理、特征工程到模型训练和评估的全过程。

假设我们有一个信用评分的数据集,包含用户的基本信息、信用历史和是否违约的标记。我们将使用 toad 库来处理数据并构建一个逻辑回归模型。

步骤 1:导入必要的库
python 复制代码
import pandas as pd
import toad
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, accuracy_score

# 示例数据集
data = pd.DataFrame({
    'age': [25, 45, 35, 50, 23, 34, 56, 28, 30, 40],
    'income': [50000, 100000, 75000, 120000, 30000, 60000, 110000, 50000, 54000, 90000],
    'loan_amount': [20000, 30000, 25000, 50000, 10000, 15000, 40000, 20000, 22000, 35000],
    'credit_score': [600, 700, 650, 750, 580, 620, 720, 640, 630, 710],
    'default': [0, 1, 0, 1, 0, 0, 1, 0, 0, 1]
})
步骤 2:数据预处理
  1. 填补缺失值
  2. 分箱处理
  3. 计算信息值并选择特征
python 复制代码
# 填补缺失值
data = toad.utils.fillna(data, value=0)

# 分箱处理
combiner = toad.transformer.Combiner()
combiner.fit(data, y='default')
data_binned = combiner.transform(data)

# 计算信息值(IV)并选择特征
iv = toad.IV(data_binned, target='default')
selected_features = toad.selection.select(data_binned, target='default', iv=0.02)

print('Selected features:\n', selected_features)
步骤 3:WOE转换
python 复制代码
# 使用WOETransformer进行WOE转换
woe = toad.transformer.WOETransformer()
data_woe = woe.fit_transform(selected_features, target='default')
步骤 4:分割数据集
python 复制代码
# 分割数据集为训练集和测试集
X = data_woe.drop(columns=['default'])
y = data_woe['default']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
步骤 5:训练模型
python 复制代码
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
步骤 6:模型评估
python 复制代码
# 预测测试集
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)[:, 1]

# 计算AUC和准确率
auc = roc_auc_score(y_test, y_pred_proba)
accuracy = accuracy_score(y_test, y_pred)

print(f'AUC: {auc:.2f}')
print(f'Accuracy: {accuracy:.2f}')
步骤 7:绘制KS曲线和ROC曲线
python 复制代码
import matplotlib.pyplot as plt

# 绘制KS曲线
fig, ax = plt.subplots()
toad.plot.ks_plot(y_test, y_pred_proba, ax=ax)
plt.show()

# 绘制ROC曲线
fig, ax = plt.subplots()
toad.plot.roc_plot(y_test, y_pred_proba, ax=ax)
plt.show()

通过上述步骤,我们使用 toad 库完成了一个完整的信用评分模型的构建过程,包括数据预处理、特征工程、模型训练和评估。

更多问题咨询

Cos机器人

相关推荐
谢眠6 分钟前
深度学习day3-自动微分
python·深度学习·机器学习
搏博15 分钟前
神经网络问题之一:梯度消失(Vanishing Gradient)
人工智能·机器学习
z千鑫15 分钟前
【人工智能】深入理解PyTorch:从0开始完整教程!全文注解
人工智能·pytorch·python·gpt·深度学习·ai编程
YRr YRr23 分钟前
深度学习:神经网络的搭建
人工智能·深度学习·神经网络
威桑26 分钟前
CMake + mingw + opencv
人工智能·opencv·计算机视觉
爱喝热水的呀哈喽29 分钟前
torch张量与函数表达式写法
人工智能·pytorch·深度学习
rellvera37 分钟前
【强化学习的数学原理】第02课-贝尔曼公式-笔记
笔记·机器学习
肥猪猪爸1 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
LZXCyrus2 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
我感觉。2 小时前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程