Toad:基于 Python 的标准化评分卡模型

article/2025/9/2 16:12:23

大家好,我是东哥。

在信贷的风控模型中最常用、最经典的可能要属评分卡了,所谓评分卡就是给信贷客户进行打分,按照不同业务场景可为贷前、贷中、贷后和反欺诈,一般叫做ABCF卡。模型得到分数,通过设置cutoff阈值给出评估结果,结果可直接用于通过或拒绝,或者用于策略应用。

区别于xgb等机器学习模型,评分卡使用逻辑回归,之所是还在使用时因为它属于广义线性回归,在特征的解释性上非常的强。

本次和大家分享一个开源的评分卡神器toad从数据探索、特征分箱、特征筛选、特征WOE变换、建模、模型评估、转换分数,都做了完美的包装,可以说是一条龙的服务啊,极大的简化了建模人员的门槛。

并且东哥也仔细看过源码,基本都是通过numpy来实现的,并且部分过程还使用了多线程提速,所以在速度上也是有一定保障的。

链接:https://github.com/amphibian-dev/toad

下面就介绍如何使用toad建立评分卡的整个流程。安装就不说了,标准的方法,自行pip安装。

一、读取数据、划分样本集

首先通过read_csv读取数据,看看数据概况。

data = pd.read_csv('train.csv')
print('Shape:',data.shape)
data.head(10)
Shape: (108940, 167)

这个测试数据有10万条数据,167个特征。

print('month:',data.month.unique())
month: ['2019-03' '2019-04' '2019-05' '2019-06' '2019-07']

通过观察时间变量,我们发现数据的时间跨度为2019年5月到7月。为了真正测试模型效果,我们将用3月和4月数据用于训练样本,5月、6月、7月数据作为时间外样本,也叫作OOT的跨期样本。

train = data.loc[data.month.isin(['2019-03','2019-04'])==True,:]
OOT = data.loc[data.month.isin(['2019-03','2019-04'])==False,:]#train = data.loc[data.month.isin(['Mar-19','Apr-19'])==True,:]
#OOT = data.loc[data.month.isin(['Mar-19','Apr-19'])==False,:]
print('train size:',train.shape,'\nOOT size:',OOT.shape)
train size: (43576, 167)
OOT size: (65364, 167)

其实,这部分属于模型设计的阶段,是非常关键的环节。实际工作中会考虑很多因素,要结合业务场景,根据样本量、可回溯特征、时间窗口等因素制定合适的观察期、表现期、以及样本,并且还要定义合适的Y标签。本次主要介绍toad的用法,上面的设计阶段先忽略掉。

二、EDA相关功能

1. toad.detect

EDA也叫数据探索分析,主要用于检测数据情况。toad输出每列特征的统计性特征和其他信息,主要的信息包括:缺失值、unique values、数值变量的平均值、离散值变量的众数等。

toad.detect(train)[:10]

2. toad.quality

这个功能主要用于帮助我们进行变量的筛选,可以直接计算各种评估指标,如iv值、gini指数,entropy熵,以及unique values,结果以iv值排序。target为目标列,iv_only决定是否只输出iv值。

to_drop = ['APP_ID_C','month'] # 去掉ID列和month列
toad.quality(data.drop(to_drop,axis=1),'target',iv_only=True)[:15]

注意:1. 对于数据量大或高维度数据,建议使用iv_only=True 2. 要去掉主键,日期等高unique values且不用于建模的特征

但是,这一步只是计算指标而已,呈现结果让我们分析,还并没有真的完成筛选的动作。

三、特征筛选

toad.selection.select

前面通过EDA检查过数据质量后,我们会有选择的筛选一些样本和变量,比如缺失值比例过高的、IV值过低的、相关性太强的等等。

  • empyt=0.9: 缺失值大于0.9的变量被删除

  • iv=0.02: iv值小于0.02的变量被删除

  • corr=0.7: 两个变量相关性高于0.7时,iv值低的变量被删除

  • return_drop=False: 若为True,function将返回被删去的变量列

  • exclude=None: 明确不被删去的列名,输入为list格式

用法很简单,只要通过设置以下几个参数阈值即可实现,如下:

train_selected, dropped = toad.selection.select(train,target = 'target', empty = 0.5, iv = 0.05, corr = 0.7, return_drop=True, exclude=['APP_ID_C','month'])
print(dropped)
print(train_selected.shape)

经过上面的筛选,165个变量最终保留了32个变量。并且返回筛选过后的dataframe和被删掉的变量列表。

当然了,上面都是一些常规筛选变量的方法,可能有些特殊的变量比如从业务角度很有用是需要保留的,但不满足筛选要求,这时候可以用exclude排除掉。这个功能对于变量初筛非常有用,各种指标直接计算并展示出来。

四、分箱

在做变量的WOE变换之前需要做变量的分箱,分箱的好坏直接影响WOE的结果,以及变换后的单调性。toad将常用的分箱方法都集成了,包括等频分箱、等距分箱、卡方分箱、决策树分箱、最优分箱等

并且,toad的分箱功能支持数值型数据和离散型分箱。 这部分东哥看过源码,toad首先判断变量类型,如果为数值型就按数值型分箱处理,如果为非数值型,那么会判断变量唯一值的个数,如果大于10个或者超过变量总数的50%,那么也按照数值型处理。

另外,toad还支持将空值单独分箱处理。

toad.transform.Combiner 分箱步骤如下:

  • 初始化:c = toad.transform.Combiner()
  • 训练分箱: c.fit(dataframe, y = 'target', method = 'chi', min_samples = None, n_bins = None, empty_separate = False)
    • y: 目标列
    • method: 分箱方法,支持chi(卡方分箱), dt(决策树分箱), kmean, quantile, step(等步长分箱)
    • min_samples: 每箱至少包含样本量,可以是数字或者占比
    • n_bins: 箱数,若无法分出这么多箱数,则会分出最多的箱数
    • empty_separate: 是否将空箱单独分开
  • 查看分箱节点:c.export()
  • 手动调整分箱: c.load(dict)
  • apply分箱结果: c.transform(dataframe, labels=False):
    labels: 是否将分箱结果转化成箱标签。False时输出0,1,2…(离散变量根据占比高低排序),True输出(-inf, 0], (0,10], (10, inf)。

注意:做筛选时要删去不需要分箱的列,特别是ID列和时间列。

# initialise
c = toad.transform.Combiner()# 使用特征筛选后的数据进行训练:使用稳定的卡方分箱,规定每箱至少有5%数据, 空值将自动被归到最佳箱。
c.fit(train_selected.drop(to_drop, axis=1), y = 'target', method = 'chi', min_samples = 0.05) #empty_separate = False# 为了演示,仅展示部分分箱
print('var_d2:',c.export()['var_d2'])
print('var_d5:',c.export()['var_d5'])
print('var_d6:',c.export()['var_d6'])

结果输出:

var_d2: [747.0, 782.0, 820.0]
var_d5: [['O', 'nan', 'F'], ['M']]
var_d6: [['PUBLIC LTD COMPANIES', 'NON-RESIDENT INDIAN', 'PRIVATE LTD COMPANIES', 'PARTNERSHIP FIRM', 'nan'], ['RESIDENT INDIAN', 'TRUST', 'TRUST-CLUBS/ASSN/SOC/SEC-25 CO.', 'HINDU UNDIVIDED FAMILY', 'CO-OPERATIVE SOCIETIES', 'LIMITED LIABILITY PARTNERSHIP', 'ASSOCIATION', 'OVERSEAS CITIZEN OF INDIA', 'TRUST-NGO']]

观察分箱并调整

因为自动分箱也不可能满足所有需要,很多情况下还是要手动分箱。toad除了上面自动分箱以外,还提供了可视化分箱的功能,帮助调整分箱节点,比如观察变量的单调性。有两种功能:

1. 时间内观察

toad.plot.bin_plot(dataframe, x = None, target = target) 也就是不考虑时间的因素,单纯的比较各个分箱里的bad_rate,观察单调性。

# 看'var_d5'在时间内的分箱
col = 'var_d5'#观察单个变量分箱结果时,建议设置'labels = True'
bin_plot(c.transform(train_selected[[col,'target']], labels=True), x=col, target='target')

上图中,bar代表了样本量占比,红线代表了坏客户占比。通过观察发现分箱有些不合理,还有调整优化的空间,比如将F和M单独一箱,0和空值分为一箱。因此,使用c.set_rules(dict)对这个分箱进行调整。

# iv值较低,假设我们要 'F' 淡出分出一组来提高iv#设置分组
rule = {'var_d5':[['O', 'nan'],['F'], ['M']]}#调整分箱
c.set_rules(rule)#查看手动分箱稳定性
bin_plot(c.transform(train_selected[['var_d5','target']], labels=True), x='var_d5', target='target')
badrate_plot(c.transform(OOT[['var_d5','target','month']], labels=True), target='target', x='month', by='var_d5')

2. 跨时间观察

toad.plot.badrate_plot:考虑时间因素,输出不同时间段中每箱的正样本占比,观察分箱随时间变量的稳定性。

  • target: 目标列

  • x: 时间列, string格式(要预先分好并设成string,不支持timestampe)

  • by: 需要观察的特征

下面分别观察变量var_d2在训练集和OOT测试集中随时间month变化的稳定性。正常情况下,每个分箱的bad_rate应该都有所区别,并且随时间保持稳定不交叉。如果折现有所交叉,说明分箱不稳定,需要重新调整。

from toad.plot import badrate_plotcol = 'var_d2'# 观察 'var_d2' 分别在时间内和OOT中的稳定性
badrate_plot(c.transform(train[[col,'target','month']], labels=True), target='target', x='month', by=col)
badrate_plot(c.transform(OOT[[col,'target','month']], labels=True), target='target', x='month', by=col)
'''
敞口随时间变化而增大为优,代表了变量在更新的时间区分度更强。线之前没有交叉为优,代表分箱稳定。
'''


五、WOE转化

WOE转化在分箱调整好之后进行,步骤如下:

  • 用上面调整好的Combiner(c)转化数据: c.transform,只会转化被分箱的变量。

  • 初始化woe transer:transer = toad.transform.WOETransformer()

  • 训练转化woe:transer.fit_transform
    训练并输出woe转化的数据,用于转化train/时间内数据

    • target:目标列数据(非列名)
    • exclude: 不需要被WOE转化的列。注意:会转化所有列,包括未被分箱transform的列,通过exclude删去不要WOE转化的列,特别是target列。
  • 根据训练好的transer,转化test/OOT数据:transer.transform

根据训练好的transer输出woe转化的数据,用于转化test/OOT数据。

# 初始化
transer = toad.transform.WOETransformer()# combiner.transform() & transer.fit_transform() 转化训练数据,并去掉target列
train_woe = transer.fit_transform(c.transform(train_selected), train_selected['target'], exclude=to_drop+['target'])
OOT_woe = transer.transform(c.transform(OOT))print(train_woe.head(3))

结果输出:

  APP_ID_C  target    var_d2    var_d3    var_d5    var_d6    var_d7  \
0    app_1       0 -0.178286  0.046126  0.090613  0.047145  0.365305
1    app_2       0 -1.410248  0.046126 -0.271655  0.047145 -0.734699
2    app_3       0 -0.178286  0.046126  0.090613  0.047145  0.365305var_d11    var_b3    var_b9  ...  var_l_60  var_l_64  var_l_68  var_l_71  \
0 -0.152228 -0.141182 -0.237656  ...  0.132170  0.080656  0.091919  0.150975
1 -0.152228  0.199186  0.199186  ...  0.132170  0.080656  0.091919  0.150975
2 -0.152228 -0.141182  0.388957  ... -0.926987 -0.235316 -0.883896 -0.385976var_l_89  var_l_91  var_l_107  var_l_119  var_l_123    month
0  0.091901  0.086402  -0.034434   0.027322   0.087378  2019-03
1  0.091901  0.086402  -0.034434   0.027322   0.087378  2019-03
2  0.091901 -0.620829  -0.034434  -0.806599  -0.731941  2019-03[3 rows x 34 columns]

六、逐步回归

toad.selection.stepwise

逐步回归特征筛选,支持向前,向后和双向。 逐步回归属于包裹式的特征筛选方法,这部分通过使用sklearnREF实现。

  • estimator: 用于拟合的模型,支持’ols’, ‘lr’, ‘lasso’, ‘ridge’

  • direction: 逐步回归的方向,支持’forward’, ‘backward’, ‘both’ (推荐)

  • criterion: 评判标准,支持’aic’, ‘bic’, ‘ks’, ‘auc’

  • max_iter: 最大循环次数

  • return_drop: 是否返回被剔除的列名

  • exclude: 不需要被训练的列名,比如ID列和时间列

根据多次验证,一般来讲 direction = 'both'效果最好。estimator = 'ols'以及criterion = 'aic'运行速度快且结果对逻辑回归建模有较好的代表性。

# 将woe转化后的数据做逐步回归
final_data = toad.selection.stepwise(train_woe,target = 'target', estimator='ols', direction = 'both', criterion = 'aic', exclude = to_drop)# 将选出的变量应用于test/OOT数据
final_OOT = OOT_woe[final_data.columns]print(final_data.shape) # 逐步回归从31个变量中选出了10个

结果输出:

(43576, 13)

最后筛选后,再次确定建模要用的变量。

col = list(final_data.drop(to_drop+['target'],axis=1).columns)

七、建模和模型评估

首先,使用逻辑回归建模,通过sklearn实现。模型参数比如正则化、样本权重等不在这里详解。

# 用逻辑回归建模
from sklearn.linear_model import LogisticRegressionlr = LogisticRegression()
lr.fit(final_data[col], final_data['target'])# 预测训练和隔月的OOT
pred_train = lr.predict_proba(final_data[col])[:,1]pred_OOT_may =lr.predict_proba(final_OOT.loc[final_OOT.month == '2019-05',col])[:,1]
pred_OOT_june =lr.predict_proba(final_OOT.loc[final_OOT.month == '2019-06',col])[:,1]
pred_OOT_july =lr.predict_proba(final_OOT.loc[final_OOT.month == '2019-07',col])[:,1]

然后,计算模型预测结果。风控模型常用的评价指标有: KSAUCPSI等。下面展示如果通过toad快速实现完成。

KS 和 AUC

from toad.metrics import KS, AUCprint('train KS',KS(pred_train, final_data['target']))
print('train AUC',AUC(pred_train, final_data['target']))
print('OOT结果')
print('5月 KS',KS(pred_OOT_may, final_OOT.loc[final_OOT.month == '2019-05','target']))
print('6月 KS',KS(pred_OOT_june, final_OOT.loc[final_OOT.month == '2019-06','target']))
print('7月 KS',KS(pred_OOT_july, final_OOT.loc[final_OOT.month == '2019-07','target']))

结果输出:

train KS 0.3707986228750539
train AUC 0.75060723924743
OOT结果
5月 KS 0.3686687175756087
6月 KS 0.3495273403486497
7月 KS 0.3796914199845523

PSI

PSI分为两种,一个是变量的PSI,一个是模型的PSI。

下面是变量PSI的计算,比较训练集和OOT的变量分布之间的差异。

toad.metrics.PSI(final_data[col], final_OOT[col])

结果输出:

var_d2      0.000254
var_d5      0.000012
var_d7      0.000079
var_d11     0.000191
var_b10     0.000209
var_b18     0.000026
var_b19     0.000049
var_b23     0.000037
var_l_20    0.000115
var_l_68    0.000213
dtype: float64

模型PSI的计算,分别计算训练集和OOT模型预测结果的差异,下面细分为三个月份比较。

print(toad.metrics.PSI(pred_train,pred_OOT_may))
print(toad.metrics.PSI(pred_train,pred_OOT_june))
print(toad.metrics.PSI(pred_train,pred_OOT_june))

另外,toad还提供了整个评价指标的汇总,输出模型预测分箱后评判信息,包括每组的分数区间,样本量,坏账率,KS等。

toad.metrics.KS_bucket

  • bucket:分箱的数量

  • method:分箱方法,建议用quantile(等人数),或step (等分数步长)

bad\_rate为每组坏账率:

  1. 组之间的坏账率差距越大越好

  2. 可以用于观察是否有跳点

  3. 可以用与找最佳切点

  4. 可以对比

# 将预测等频分箱,观测每组的区别
toad.metrics.KS_bucket(pred_train, final_data['target'], bucket=10, method = 'quantile')

八、转换评分

toad.ScoreCard

最后一步就是将逻辑回归模型转标准评分卡,支持传入逻辑回归参数,进行调参。

  • combiner: 传入训练好的 toad.Combiner 对象

  • transer: 传入先前训练的 toad.WOETransformer 对象

  • pdo、rate、base_odds、base_score:
    e.g. pdo=60, rate=2, base_odds=20, base_score=750
    实际意义为当比率为1/20,输出基准评分750,当比率为基准比率2倍时,基准分下降60分

  • card: 支持传入专家评分卡

  • **kwargs: 支持传入逻辑回归参数(参数详见 sklearn.linear_model.LogisticRegression

card = toad.ScoreCard(combiner = c,transer = transer,#class_weight = 'balanced',#C=0.1,#base_score = 600,#base_odds = 35 ,#pdo = 60,#rate = 2
)card.fit(final_data[col], final_data['target'])

结果输出:

ScoreCard(base_odds=35, base_score=750, card=None,combiner=<toad.transform.Combiner object at 0x1a2434fdd8>, pdo=60,rate=2,transer=<toad.transform.WOETransformer object at 0x1a235a5358>)

注:评分卡在 fit 时使用 WOE 转换后的数据来计算最终的分数,分数一旦计算完成,便无需 WOE 值,可以直接使用 原始数据 进行评分。

# 直接使用原始数据进行评分
card.predict(train)
#输出标准评分卡
card.export()

结果输出:

{'var_d2': {'[-inf ~ 747.0)': 65.54,'[747.0 ~ 782.0)': 45.72,'[782.0 ~ 820.0)': 88.88,'[820.0 ~ inf)': 168.3},'var_d5': {'O,nan': 185.9, 'F': 103.26, 'M': 68.76},'var_d7': {'LARGE FLEET OPERATOR,COMPANY,STRATEGIC TRANSPRTER,SALARIED,HOUSEWIFE': 120.82,'DOCTOR-SELF EMPLOYED,nan,SAL(RETIRAL AGE 60),SERVICES,SAL(RETIRAL AGE 58),OTHERS,DOCTOR-SALARIED,AGENT,CONSULTANT,DIRECTOR,MEDIUM FLEETOPERATOR,TRADER,RETAIL TRANSPORTER,MANUFACTURING,FIRST TIME USERS,STUDENT,PENSIONER': 81.32,'PROPRIETOR,TRADING,STRATEGIC CAPTIVE,SELF-EMPLOYED,SERV-PRIVATE SECTOR,SMALL RD TRANS.OPR,BUSINESSMAN,CARETAKER,RETAIL,AGRICULTURIST,RETIRED PERSONNEL,MANAGER,CONTRACTOR,ACCOUNTANT,BANKS SERVICE,GOVERNMENT SERVICE,ADVISOR,STRATEGIC S1,SCHOOLS,TEACHER,GENARAL RETAILER,RESTAURANT KEEPER,OFFICER,POLICEMAN,SERV-PUBLIC SECTOR,BARRISTER,Salaried,SALESMAN,RETAIL CAPTIVE,Defence (NCO),STRATEGIC S2,OTHERS NOT DEFINED,JEWELLER,SECRETARY,SUP STRAT TRANSPORT,LECTURER,ATTORNEY AT LAW,TAILOR,TECHNICIAN,CLERK,PLANTER,DRIVER,PRIEST,PROGRAMMER,EXECUTIVE ASSISTANT,PROOF READER,STOCKBROKER(S)-COMMD,TYPIST,ADMINSTRATOR,INDUSTRY,PHARMACIST,Trading,TAXI DRIVER,STRATEGIC BUS OP,CHAIRMAN,CARPENTER,DISPENSER,HELPER,STRATEGIC S3,RETAIL BUS OPERATOR,GARAGIST,PRIVATE TAILOR,NURSE': 55.79},'var_d11': {'N': 88.69, 'U': 23.72},'var_b10': {'[-inf ~ -8888.0)': 67.76,'[-8888.0 ~ 0.548229531)': 97.51,'[0.548229531 ~ inf)': 36.22},'var_b18': {'[-inf ~ 2)': 83.72, '[2 ~ inf)': 39.23},'var_b19': {'[-inf ~ -9999)': 70.78, '[-9999 ~ 4)': 97.51, '[4 ~ inf)': 42.2},'var_b23': {'[-inf ~ -8888)': 64.51, '[-8888 ~ inf)': 102.69},'var_l_20': {'[-inf ~ 0.000404297)': 78.55,'[0.000404297 ~ 0.003092244)': 103.85,'[0.003092244 ~ inf)': 36.21},'var_l_68': {'[-inf ~ 0.000255689)': 70.63,'[0.000255689 ~ 0.002045513)': 24.56,'[0.002045513 ~ 0.007414983000000002)': 66.63,'[0.007414983000000002 ~ 0.019943748)': 99.55,'[0.019943748 ~ inf)': 142.36}}

九、其他功能

toad.transform.GBDTTransformer

toad还支持用gbdt编码,用于gbdt + lr建模的前置。这种融合的方式来自facebook,即先使用gbdt训练输出,再将输出结果作为lr的输入训练,以此达到更好的学习效果。

gbdt_transer = toad.transform.GBDTTransformer()
gbdt_transer.fit(final_data[col+['target']], 'target', n_estimators = 10, max_depth = 2)
gbdt_vars = gbdt_transer.transform(final_data[col])
gbdt_vars.shape
(43576, 40)

好了,以上就是toad的基本用法,真的很方便、简单。在时间比较紧的时候可以使用它进行快速分析。当然,里面还有一些细节需要完善的地方,大家可以去fork然后去优化。如果自己已经写过一套分析流程的也可参考一下源码。

原创不易,欢迎点赞、在看和分享。

参考:https://toad.readthedocs.io/en/latest/tutorial_chinese.html

原创文章持续更新,可以微信搜一搜「 Python数据科学」第一时间阅读。


http://chatgpt.dhexx.cn/article/iHFOBr6g.shtml

相关文章

LGB+LR的实践

文章目录 1 背景2 原理3 数据的准备3.1 读入数据3.2 切分训练集测试集 4 LR5 LGB6 LGBLR6.1 LGB实现6.2 LGB的vector导出来&#xff01;6.2.1 训练集6.2.2 测试集 6.3 LRLGB 7 结果对比 1 背景 相信大名鼎鼎的GBDTLR组合很多小伙伴都听过&#xff0c;这种组合模型的预测效果要…

[机器学习] LR与SVM的异同

1 为什么将LR和SVM放在一起来进行比较&#xff1f; 回答这个问题其实就是回答LR和SVM有什么相同点。 第一&#xff0c;LR和SVM都是分类算法。 看到这里很多人就不会认同了&#xff0c;因为在很大一部分人眼里&#xff0c;LR是回归算法。我是非常不赞同这一点的&#xff0c;因…

pytorch:多标签分类的损失函数和准确率计算

1 损失函数 我们先用sklearn生成一个多标签分类数据集。 from sklearn.datasets import make_multilabel_classificationX, y make_multilabel_classification(n_samples1000,n_features10,n_classes3,n_labels2,random_state1) print(X.shape, y.shape)看一下标签长啥样。 …

caffe训练分类模型教程

caffe训练分类模型教程 1.已有图像存放在train和val下&#xff0c;book和not-book&#xff08;两类&#xff09;的图片数量相同 在caffe/data下新建一個myself文件夾&#xff0c;并新建两个文件夹分别命名为train和val 批量重命名图片 # -*- coding:utf8 -*- import os class …

金融风控实战——模型融合

过采样方法使用条件 &#xff08;1&#xff09;负样本可以代表样本空间 &#xff08;2&#xff09;数据是足够干净的&#xff08;样本、特征没有噪声&#xff09; 过拟合 &#xff08;1&#xff09;增多数据 &#xff08;2&#xff09;特征筛选 &#xff08;3&#xff09;调参…

【推荐算法】ctr预估模型总结(LR、FM、FFM、NFM、AFM、WDL、DCN、DeepFM、FwFM、FLEN)

文章目录 前言LRPOLY2FM&#xff08;Factorization Machine&#xff09;FFM&#xff08;Field-aware Factorization Machine&#xff09;AFM&#xff08;Attention Factorization Machine&#xff09;NFM&#xff08;Neural Factorization Machine&#xff09;WDL&#xff08;w…

概率图模型 —— 串连 NB、LR、MEM、HMM、CRF

概率图模型&#xff08;PGM&#xff09;&#xff0c;作为机器学习的重要分支&#xff0c;能串连起很多传统模型&#xff0c;比如 NB、LR、MEM、HMM、CRF、DBN 等。本篇文章&#xff0c;从串连多个模型的角度&#xff0c;来谈谈 PGM&#xff0c;顺便把这些模型回顾下。 1 Why PG…

基于GBDT+LR模型的深度学习推荐算法

GBDTLR算法最早是由Facebook在2014年提出的一个推荐算法&#xff0c;该算法分两部分构成&#xff0c;第一部分是GBDT&#xff0c;另一部分是LR.下面先介绍GBDT算法&#xff0c;然后介绍如何将GBDT和LR算法融合 1.1 GBDT算法 GBDT的全称是 Gradient Boosting Decision Tree&am…

Logistic逻辑回归模型(LR)基础

逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上&#xff0c;套用了一个逻辑函数&#xff0c;但也就由于这个逻辑函数&#xff0c;使得逻辑回归模型成为了机器学习领域一颗耀眼的明星&#xff0c;更是计算广告学的核心。本文主要详述逻辑回归模型的基础&#x…

模型压缩一-知识蒸馏

一、知识蒸馏简介 知识蒸馏是模型压缩方法中的一个大类&#xff0c;是一种基于“教师-学生网络&#xff08;teacher-student-network&#xff09;思想”的训练方法&#xff0c; 其主要思想是拟合教师模型&#xff08;teacher-model&#xff09;的泛化性等&#xff08;如输出概率…

推荐系统之GBDT+LR

前言 前面讲过的FM与FFM模型虽然增强了模型的交叉能力&#xff0c;但是不管怎样都只能做二阶的交叉&#xff0c;如果想要继续加大特征交叉的维度&#xff0c;那就会出大计算爆炸的情况。所以Facebook提出了梯度提升树&#xff08;GBDT&#xff09;逻辑回归&#xff08;LR&…

使用Keras进行单模型多标签分类

原文&#xff1a;https://www.pyimagesearch.com/2018/05/07/multi-label-classification-with-keras/ 作者&#xff1a;Adrian Rosebrock 时间&#xff1a;2018年5月7日 源码&#xff1a;https://pan.baidu.com/s/1x7waggprAHQDjalkA-ctvg &#xff08;wa61&#xff09; 译者&…

LR模型常见问题小议

&#xfeff;&#xfeff; LR模型常见问题小议 标签&#xff1a; LR机器学习 2016-01-10 23:33 671人阅读 评论(0) 收藏 举报 本文章已收录于&#xff1a; 分类&#xff1a; 机器学习&#xff08;10&#xff09; 作者同类文章 X 版权声明&#xff1a;本文为博主原创文章&…

信用评分卡(A卡) 基于LR模型的数据处理及建模过程

数据来自&#xff1a;魔镜杯风控算法大赛&#xff08;拍拍贷&#xff09;。有关数据的具体描述可以看比赛页面。 0. 数据集的关键字段及描述&#xff1a; Master&#xff1a;每一行代表一个样本&#xff08;一笔成功成交借款&#xff09;&#xff0c;每个样本包含200多个各类…

机器分类---LR分类+模型评估

文章目录 数据集ROC曲线与AUC理论知识曲线理解实例计算 代码 更详细的数据集介绍&#xff08;有图形分析&#xff0c;应该比较好理解&#xff09; https://blog.csdn.net/weixin_42567027/article/details/107416002 数据集 数据集有三个类别&#xff0c;每个类别有50个样本。…

python机器学习算法(赵志勇)学习笔记( Logistic Regression,LR模型)

Logistic Regression(逻辑回归) 分类算法是典型的监督学习,分类算法通过对训练样本的学习,得到从样本特征到样本的标签之间的映射关系,也被称为假设函数,之后可利用该假设函数对新数据进行分类。 通过训练数据中的正负样本,学习样本特征到样本标签之间的假设函数,Log…

推荐系统实战中LR模型训练(二)

背景&#xff1a; 上一篇推荐系统实战中LR模型训练&#xff08;一&#xff09; 中完成了LR模型训练的代码部分。本文中将详细讲解数据准备部分&#xff0c;即将文本数据数值化为稀疏矩阵的形式。 文本数据&#xff1a; 稀疏矩阵&#xff1a; 实现过程&#xff1a; 文本数据格…

机器学习 | LR逻辑回归模型

逻辑回归(Logistic Regression,简称LR)名为“回归”却是用来分类工作、在线性数据上表现优异的分类器。 视频教程:第07讲:逻辑回归是线性分类器的佼佼者 LR是数据挖掘领域常用的一种分类模型,常用于解决二分类问题,例如垃圾邮件判定、经济预测、疾病诊断(通过年龄、性…

推荐系统实战中LR模型训练(一)

背景&#xff1a; 在“批量导入数据到Redis” 中已经介绍了将得到的itema item1:score1,item2:score2…批量导入到Redis数据库中。本文的工作是运用机器学习LR技术&#xff0c;抽取相应的特征&#xff0c;进行点击率的估计。 点击率&#xff08;Click-Through-Rate, CTR&#…

Prometheus TSDB存储原理

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 Prometheus 包含一个存储在本地磁盘的时间序列数据库&#xff0c;同时也支持与远程…