机器学习 - 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字典。
woe = toad.transformer.WOETransformer()
data_woe = woe.fit_transform(data, target='default')
2. toad.transformer.Fillna

作用:填补缺失值。
参数

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

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

  • cols: list, 默认值为空列表。需要编码的列。
  • target: str。目标列的名称。
  • min_samples: int, 默认值为1。每个类别的最小样本数。
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。是否将数据方差归一。
scaler = toad.transformer.StandardScaler(cols=['age', 'income'])
data_scaled = scaler.fit_transform(data)
5. toad.transformer.LabelEncoder

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

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

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

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

作用:填补缺失值。
参数

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

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

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

分箱与合并

1. toad.transformer.Combiner

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

  • method: str, 默认值为’quantile’。分箱方法(例如,‘quantile’, ‘step’, ‘kmeans’)。
  • min_samples: int, 默认值为0。每个分箱中的最小样本数。
  • n_bins: int, 默认值为10。每个变量的分箱数量。
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 等。
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。拆分后新列的名称。
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’)。
bin = toad.transformer.Bin(col='age', n_bins=5, method='quantile')
data_binned = bin.fit_transform(data)

特征选择

1. toad.selection.select

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

  • target: str。目标列的名称。
  • empty: float, 默认值为0.9。缺失值比例的阈值。
  • iv: float, 默认值为0.02。信息值的阈值。
  • corr: float, 默认值为0.7。相关系数的阈值。
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’。
selected_features = toad.selection.stepwise(X, y, direction='both')
3. toad.selection.high_iv

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

  • df: DataFrame。输入的数据集。
  • target: str。目标列的名称。
  • threshold: float, 默认值为0.02。IV值的阈值。
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。预测标签。
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。预测得分。
auc_score = toad.metrics.roc_auc_score(y_true, y_score)
3. toad.metrics.confusion_matrix

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

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

作用:计算精确率。
参数

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

作用:计算召回率。
参数

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

作用:计算F1得分。
参数

  • y_true: array-like。真实标签。
  • y_pred: array-like。预测标签。
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。分箱数量。
ks_buckets = toad.metrics.ks_bucket(y_true, y_pred, n_bins=10)

数据检测与处理

1. toad.utils.detect_categorical

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

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

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

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

作用:裁剪数据。
参数

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

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

  • df1: DataFrame。第一个数据框。
  • df2: DataFrame。第二个数据框。
  • on: str or list。合并的键。
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’表示全部缺失才删除。
clean_data = toad.utils.drop_na(data, axis=0, how='any')
6. toad.utils.clip

作用:裁剪数据。
参数

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

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

  • df1: DataFrame。第一个数据框。
  • df2: DataFrame。第二个数据框。
  • on: str or list。合并的键。
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。如果提供,则绘制在此轴上。
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。如果提供,则绘制在此轴上。
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。如果提供,则绘制在此轴上。
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。如果提供,则绘制在此轴上。
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。输入的数据集。
categorical_columns = toad.utils.categorical(data)
2. toad.utils.continuous

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

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

示例:信用评分模型

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

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

步骤 1:导入必要的库
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. 计算信息值并选择特征
# 填补缺失值
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转换
# 使用WOETransformer进行WOE转换
woe = toad.transformer.WOETransformer()
data_woe = woe.fit_transform(selected_features, target='default')
步骤 4:分割数据集
# 分割数据集为训练集和测试集
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:训练模型
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
步骤 6:模型评估
# 预测测试集
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曲线
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机器人

  • 52
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值