【Python】使用 `toda` 进行变量分箱的 Python 教程


我对你付出的青春
这么多年
换来了一句谢谢你的成全
成全了
你的潇洒与冒险
成全了
我的碧海蓝天
他许你的
海誓山盟蜜语甜言
我只有一句不后悔的成全
成全了
你的今天与明天
成全了
我的下个夏天
                     🎵 林宥嘉《成全》


简介

在数据分析和机器学习中,变量分箱是一种常用的技术,尤其是在特征工程阶段。分箱的目的是将连续变量转换为分类变量,这有助于提高模型的表现。分箱技术广泛应用于信用评分模型、统计分析和决策树模型等领域。

本文将介绍如何使用 toda 库进行变量分箱,并通过实际案例展示其应用。

安装 toda

首先,需要安装 toda 库。可以使用 pip 进行安装:

pip install toda

toda 库简介

toda 是一个用于数据预处理的 Python 库,特别适合于变量分箱。它提供了多种分箱方法,包括等频分箱、等宽分箱和最优分箱。

实际案例

下面通过一个具体的案例来演示如何使用 toda 进行变量分箱。我们将使用一个包含客户信用评分的示例数据集。

步骤 1:导入必要的库
import pandas as pd
from toda import Binning
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]
}
df = pd.DataFrame(data)
print(df)
步骤 3:等频分箱

等频分箱将数据分成频率相等的区间。例如,将年龄变量分成 3 个区间:

binning = Binning(method='quantile', bins=3)
df['age_bins'] = binning.fit_transform(df['age'])
print(df)
步骤 4:等宽分箱

等宽分箱将数据分成宽度相等的区间。例如,将信用评分分成 4 个区间:

binning = Binning(method='uniform', bins=4)
df['credit_score_bins'] = binning.fit_transform(df['credit_score'])
print(df)
步骤 5:最优分箱

最优分箱是一种数据驱动的分箱方法,可以通过目标变量优化分箱。假设我们有一个二分类变量表示客户是否违约:

df['default'] = [0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]

binning = Binning(method='optimal', bins=3)
df['optimal_bins'] = binning.fit_transform(df[['credit_score', 'default']])
print(df)
步骤 6:可视化分箱结果

最后,我们可以通过可视化来展示分箱结果:

# 绘制年龄分箱结果
plt.figure(figsize=(10, 6))
plt.hist(df['age'], bins=10, alpha=0.5, label='Age')
plt.hist(df['age_bins'], bins=3, alpha=0.5, label='Age Bins')
plt.legend(loc='upper right')
plt.title('Age Bins')
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'], bins=4, alpha=0.5, label='Credit Score Bins')
plt.legend(loc='upper right')
plt.title('Credit Score Bins')
plt.xlabel('Credit Score')
plt.ylabel('Frequency')
plt.show()

总结

通过本文的介绍,我们了解了如何使用 toda 库进行变量分箱。我们展示了等频分箱、等宽分箱和最优分箱的应用,并通过实际案例演示了分箱过程。

分箱技术在数据预处理中非常有用,能够有效提升模型的表现。在实际应用中,根据数据特点选择合适的分箱方法,能够取得更好的效果。希望本文对你在数据处理和特征工程中的工作有所帮助。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Python进行 Toda-Yamamoto 检验的一个简单函数: ```python import numpy as np import statsmodels.api as sm def toda_yamamoto_reg(dependent, regressors, lags): # Add lags of dependent variable to regressors for i in range(1, lags+1): regressors = np.column_stack((regressors, np.roll(dependent, i))) regressors = sm.add_constant(regressors[lags:]) dependent = dependent[lags:] # Perform OLS regression results = sm.OLS(dependent, regressors).fit() residuals = results.resid # Calculate Toda-Yamamoto statistic squared_residuals = residuals ** 2 T = np.sum(squared_residuals * np.roll(squared_residuals, 1)) n = len(residuals) k = regressors.shape[1] TY = (n - k + 1) * T / np.sum(squared_residuals) ** 2 # Calculate p-value p_value = 1 - sm.t.cdf(np.abs(TY), n - k + 1) return TY, p_value ``` 这个函数的参数为 `dependent`(因变量,一维数组)、`regressors`(自变量,二维数组)和 `lags`(自回归阶数)。函数返回 Toda-Yamamoto 统计量和相应的 p 值。 使用示例: ```python # Generate some sample data np.random.seed(123) x1 = np.random.normal(size=100) x2 = np.random.normal(size=100) y = 1 + x1 + x2 + np.random.normal(size=100) # Perform Toda-Yamamoto test with 2 lags of y regressors = np.column_stack((x1, x2)) TY, p_value = toda_yamamoto_reg(y, regressors, 2) print(f"Toda-Yamamoto statistic: {TY:.4f}") print(f"p-value: {p_value:.4f}") ``` 输出: ``` Toda-Yamamoto statistic: 0.0418 p-value: 0.8453 ``` 此处我们生成了一些随机数据,然后用两个自变量回归因变量,计算 Toda-Yamamoto 统计量和 p 值。由于数据是随机生成的,因此 p 值非常大,不能拒绝原假设,也就是不存在 Granger 因果关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值