我对你付出的青春
这么多年
换来了一句谢谢你的成全
成全了
你的潇洒与冒险
成全了
我的碧海蓝天
他许你的
海誓山盟蜜语甜言
我只有一句不后悔的成全
成全了
你的今天与明天
成全了
我的下个夏天
🎵 林宥嘉《成全》
简介
在数据分析和机器学习中,变量分箱是一种常用的技术,尤其是在特征工程阶段。分箱的目的是将连续变量转换为分类变量,这有助于提高模型的表现。分箱技术广泛应用于信用评分模型、统计分析和决策树模型等领域。
本文将介绍如何使用 toad 库进行变量分箱,并通过实际案例展示其应用。
安装 toad
首先,需要安装 toda 库。可以使用 pip 进行安装:
pip install toad
toad 库简介
toda 是一个用于数据预处理的 Python 库,特别适合于变量分箱。它提供了多种分箱方法,包括等频分箱、等宽分箱和最优分箱。
实际案例
下面通过一个具体的案例来演示如何使用 toad 进行变量分箱。我们将使用一个包含客户信用评分的示例数据集。
步骤 1:导入必要的库
import toad
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
步骤 2:创建示例数据
为了展示分箱过程,我们创建一个包含客户年龄和信用评分的数据集:
data = {
'age': [23, 45, 56, 67, 34, 44, 32, 25, 67, 54, 31, 29, 35, 42, 50, 48, 60, 52, 37, 40],
'credit_score': [620, 780, 690, 610, 690, 720, 730, 740, 670, 680, 660, 750, 730, 710, 700, 760, 670, 690, 700, 720],
'default': [0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]
}
df = pd.DataFrame(data)
print(df)
步骤 3:等频分箱
等频分箱将数据分成频率相等的区间。例如,将年龄变量分成 3 个区间:
# 使用 Toad 进行等频分箱
age_bins_equal_freq = toad.transform.Combiner()
age_bins_equal_freq.fit(df[['age']], method='quantile', n_bins=3)
df['age_bins_equal_freq'] = age_bins_equal_freq.transform(df[['age']])
print(df[['age', 'age_bins_equal_freq']])
步骤 4:等宽分箱
等宽分箱将数据分成宽度相等的区间。例如,将信用评分分成 4 个区间:
# 使用 Toad 进行等宽分箱
credit_score_bins_equal_width = toad.transform.Combiner()
credit_score_bins_equal_width.fit(df[['credit_score']], method='uniform', n_bins=4)
df['credit_score_bins_equal_width'] = credit_score_bins_equal_width.transform(df[['credit_score']])
print(df[['credit_score', 'credit_score_bins_equal_width']])
步骤 5:最优分箱
最优分箱是一种数据驱动的分箱方法,可以通过目标变量优化分箱。假设我们有一个二分类变量表示客户是否违约:
# 使用 Toad 进行最优分箱
credit_score_bins_optimal = toad.transform.Combiner()
credit_score_bins_optimal.fit(df[['credit_score', 'default']], method='chi', n_bins=3)
df['credit_score_bins_optimal'] = credit_score_bins_optimal.transform(df[['credit_score']])
print(df[['credit_score', 'credit_score_bins_optimal']])
步骤 6:可视化分箱结果
最后,我们可以通过可视化来展示分箱结果:
# 绘制年龄等频分箱结果
plt.figure(figsize=(10, 6))
plt.hist(df['age'], bins=10, alpha=0.5, label='Age')
plt.hist(df['age_bins_equal_freq'], bins=3, alpha=0.5, label='Age Bins (Equal Frequency)')
plt.legend(loc='upper right')
plt.title('Age Bins (Equal Frequency)')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()
# 绘制信用评分等宽分箱结果
plt.figure(figsize=(10, 6))
plt.hist(df['credit_score'], bins=10, alpha=0.5, label='Credit Score')
plt.hist(df['credit_score_bins_equal_width'], bins=4, alpha=0.5, label='Credit Score Bins (Equal Width)')
plt.legend(loc='upper right')
plt.title('Credit Score Bins (Equal Width)')
plt.xlabel('Credit Score')
plt.ylabel('Frequency')
plt.show()
# 绘制信用评分最优分箱结果
plt.figure(figsize=(10, 6))
plt.hist(df['credit_score'], bins=10, alpha=0.5, label='Credit Score')
plt.hist(df['credit_score_bins_optimal'], bins=3, alpha=0.5, label='Credit Score Bins (Optimal)')
plt.legend(loc='upper right')
plt.title('Credit Score Bins (Optimal)')
plt.xlabel('Credit Score')
plt.ylabel('Frequency')
plt.show()
总结
通过本文的介绍,我们了解了如何使用 toda 库进行变量分箱。我们展示了等频分箱、等宽分箱和最优分箱的应用,并通过实际案例演示了分箱过程。
分箱技术在数据预处理中非常有用,能够有效提升模型的表现。在实际应用中,根据数据特点选择合适的分箱方法,能够取得更好的效果。希望本文对你在数据处理和特征工程中的工作有所帮助。