阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

前言

一、赛题介绍

二、数据描述性统计

2.1.读取数据

2.2.查看重复值

2.3.统计目标变量比例

2.4.查看数据的统计量

2.5.统计每个变量的种类

2.6.查看训练集与测试集的特征分布是否一致

2.7 查看数据相关性

三、数据清洗

3.1.分类变量处理

3.1.1 grade及subGrade处理

3.1.2 employmentLength处理

3.1.3 issueDate及earliesCreditLine处理

3.2 数值变量填充

3.3 保存数据

四、特征探索

4.1 PCA主成分分析

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

4.2.1 toad_quality

4.2.2 toad.selection.select

4.2.3 psi:比较训练集和测试集的变量分布之间的差异

五、数据建模

总结

前言

通过本次比赛的学习,让自己在数据分析及挖掘的技能上又有了进一步提高,虽然最终成绩只有0.7346,但这个过程的经验积累价值是不可估量的,本人是第一次处理这么大量的数据,自己摸索的同时,又不断学习许多前辈的经验,让自己在大数据处理方面又有了新的认知。

一、赛题介绍

赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题。通过这道赛题来引导大家了解金融风控中的一些业务背景,解决实际问题,帮助竞赛新人进行自我练习、自我提高。

该数据来自某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取80万条作为训练集,20万条作为测试集A,20万条作为测试集B,同时会对employmentTitle、purpose、postCode和title等信息进行脱敏。

数据变量特征解释如下

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

; 二、数据描述性统计

2.1.读取数据

import pandas as pd     # 数据分布统计
df=pd.read_csv("/train.csv")
test=pd.read_csv("/testA.csv")
df.shape
(800000, 47)  训练集有80万个样本,47个变量

2.2.查看重复值

df[df.duplicated()==True]#打印重复值

0 rows × 47 columns 无重复值

2.3.统计目标变量比例

(df['isDefault'].value_counts()/len(df)).round(2)
0    0.8
1    0.2

目标变量比例1:4,样本类别不平衡

2.4.查看数据的统计量

df.describe().T

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

n系列特征都有缺失,贷款金额及年收入等涉及金额的数据标准差都比较大,波动性大 。

2.5.统计每个变量的种类

df.nunique()
df=df.drop(['id','policyCode'],axis=1) # 删除ID列及只有一个值的policyCode列

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

2.6.查看训练集与测试集的特征分布是否一致

分离数值变量与分类变量
Nu_feature = list(df.select_dtypes(exclude=['object']).columns)  # 数值变量
Ca_feature = list(df.select_dtypes(include=['object']).columns)
查看数值型训练集与测试集分布
Nu_feature.remove('isDefault') # 移除目标变量
画图
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
plt.figure(figsize=(30,30))
i=1
for col in Nu_feature:
    ax=plt.subplot(8,5,i)
    ax=sns.distplot(df[col],color='violet')
    ax=sns.distplot(test[col],color='lime')
    ax.set_xlabel(col)
    ax.set_ylabel('Frequency')
    ax=ax.legend(['train','test'])
    i+=1
plt.show()

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

由于变量较多,只展示了部分变量,分布是一致的, 如果训练集与测试集分布不一致,会影响模型泛化性能,就好比训练的是老人的特征,结果是预测小孩的特征。

2.7 查看数据相关性

plt.figure(figsize=(10,8))
train_corr=df.corr()
sns.heatmap(train_corr,vmax=0.8,linewidths=0.05,cmap="Blues")

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

部分特征相关性比较高,目标变量与特征变量之间没有特别高的相关性

三、数据清洗

3.1.分类变量处理

Ca_feature:['grade', 'subGrade', 'employmentLength', 'issueDate', 'earliesCreditLine']

3.1.1 grade及subGrade处理

from sklearn.preprocessing import LabelEncoder
lb = LabelEncoder()
cols = ['grade','subGrade']
for j in cols:
    df[j] = lb.fit_transform(df[j])
df[cols].head()

#grade及subGrade是有严格的字母顺序的,与测试集相对应,可以直接用编码转换,转换结果如下
  grade subGrade
0   4     21
1   3     16
2   3     17
3   0     3
4   2     11

3.1.2 employmentLength处理

年限转化为数字,在进行缺失值填充
df['employmentLength']=df['employmentLength'].str.replace(' years','').str.replace(' year','').str.replace('+','').replace('< 1',0)

&#x968F;&#x673A;&#x68EE;&#x6797;&#x586B;&#x8865;&#x5E74;&#x9650;&#x7F3A;&#x5931;&#x503C; &#x7531;&#x4E8E;&#x5206;&#x7C7B;&#x53D8;&#x91CF;&#x53EA;&#x6709;&#x5E74;&#x9650;&#x6709;&#x7F3A;&#x5931;&#xFF0C;&#x6240;&#x4EE5;&#x8FD9;&#x6837;&#x586B;&#x5145;
from sklearn.tree import DecisionTreeClassifier
DTC = DecisionTreeClassifier()
empLenNotNull = df.employmentLength.notnull()
columns = ['loanAmnt','grade','interestRate','annualIncome','homeOwnership','term','regionCode']
regionCode&#x53D8;&#x91CF;&#x52A0;&#x5165;&#x540E;&#xFF0C;&#x51C6;&#x786E;&#x5EA6;&#x4ECE;0.85&#x63D0;&#x5347;&#x81F3;0.97
DTC.fit(df.loc[empLenNotNull,columns], df.employmentLength[empLenNotNull])
print(DTC.score(df.loc[empLenNotNull,columns], df.employmentLength[empLenNotNull]))
DTC.score&#xFF1A;0.9828872204324179

&#x586B;&#x5145;
for data in [df]:
    empLen_pred = DTC.predict(data.loc[:,columns])   # &#x5BF9;&#x5E74;&#x9650;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x9884;&#x6D4B;
    empLenIsNull = data.employmentLength.isnull()    # &#x5224;&#x65AD;&#x662F;&#x5426;&#x4E3A;&#x7A7A;&#x503C;&#xFF0C;isnull&#x8FD4;&#x56DE;&#x7684;&#x662F;&#x5E03;&#x5C14;&#x503C;
    data.employmentLength[empLenIsNull] = empLen_pred[empLenIsNull] # &#x5982;&#x679C;&#x662F;&#x7A7A;&#x503C;&#x8FDB;&#x884C;&#x586B;&#x5145;

&#x8F6C;&#x5316;&#x4E3A;&#x6574;&#x6570;
df['employmentLength']=df['employmentLength'].astype('int64')

3.1.3 issueDate及earliesCreditLine处理

import datetime
df['issueDate']=pd.to_datetime(df['issueDate'])
df['issueDate_year']=df['issueDate'].dt.year.astype('int64')
df['issueDate_month']=df['issueDate'].dt.month.astype('int64')
df['earliesCreditLine']=pd.to_datetime(df['earliesCreditLine'])  # &#x5148;&#x5728;EXCEL&#x4E0A;&#x8F6C;&#x5316;&#x4E3A;&#x65E5;&#x671F;
df['earliesCreditLine_year']=df['earliesCreditLine'].dt.year.astype('int64')
df['earliesCreditLine_month']=df['earliesCreditLine'].dt.month.astype('int64')
df=df.drop(['issueDate','earliesCreditLine'],axis=1)
issueDate&#x53CA;earliesCreditLine&#x4E24;&#x4E2A;&#x53D8;&#x91CF;&#x5C06;&#x65E5;&#x671F;&#x5206;&#x89E3;&#xFF0C;&#x5206;&#x522B;&#x63D0;&#x53D6;&#x2018;&#x5E74;&#x2019;&#x548C;&#x2018;&#x6708;&#x2019;&#x5E76;&#x8F6C;&#x5316;&#x4E3A;&#x6574;&#x6570;&#x4FBF;&#x4E8E;&#x8BA1;&#x7B97;&#xFF0C;&#x7531;&#x4E8E;&#x6D4B;&#x8BD5;&#x96C6;&#x8FD9;&#x4E24;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x2018;&#x65E5;&#x2019;&#x90FD;&#x662F;1&#xFF0C;&#x5BF9;&#x76EE;&#x6807;&#x53D8;&#x91CF;&#x6CA1;&#x6709;&#x5F71;&#x5411;&#xFF0C;&#x6240;&#x4EE5;&#x8BAD;&#x7EC3;&#x96C6;&#x4E0D;&#x63D0;&#x53D6;&#xFF0C;&#x63D0;&#x53D6;&#x5B8C;&#x540E;&#x5C06;&#x8FD9;&#x4E24;&#x4E2A;&#x539F;&#x59CB;&#x53D8;&#x91CF;&#x5220;&#x9664;

3.2 数值变量填充

df[Nu_feature] = df[Nu_feature].fillna(df[Nu_feature].median())
&#x8003;&#x8651;&#x5E73;&#x5747;&#x503C;&#x6613;&#x53D7;&#x6781;&#x503C;&#x5F71;&#x54CD;&#xFF0C;&#x6570;&#x503C;&#x53D8;&#x91CF;&#x7528;&#x4E2D;&#x4F4D;&#x6570;&#x586B;&#x5145;

3.3 保存数据

df.to_csv("/df2.csv")

说明:测试集也需要做相同的处理

四、特征探索

4.1 PCA主成分分析

from sklearn.decomposition import PCA
pca = PCA()
X1=df2.drop(columns='isDefault')
df_pca_train = pca.fit_transform(X1)
pca_var_ration = pca.explained_variance_ratio_
pca_cumsum_var_ration = np.cumsum(pca.explained_variance_ratio_)
print("PCA &#x7D2F;&#x8BA1;&#x89E3;&#x91CA;&#x65B9;&#x5DEE;")
print(pca_cumsum_var_ration)
x=range(len(pca_cumsum_var_ration))
plt.scatter(x,pca_cumsum_var_ration)
###################
PCA &#x7D2F;&#x8BA1;&#x89E3;&#x91CA;&#x65B9;&#x5DEE;
[0.6785479  0.96528967 0.99287836 0.99667955 0.9999971  0.99999948
 0.99999985 0.99999993 0.99999995 0.99999996 0.99999998 0.99999998
 0.99999999 0.99999999 0.99999999 1.         1.         1.

 1.         1.         1.         1.         1.         1.

 1.         1.         1.         1.         1.         1.

 1.         1.         1.         1.         1.         1.

 1.         1.         1.         1.         1.         1.

 1.         1.         1.        ]

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

可以看到前两个变量累计就达到接近1的方差贡献率,降维效果明显,但不适用于建模。

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

4.2.1 toad_quality

import toad
toad_quality = toad.quality(df2, target='isDefault', iv_only=True)
&#x8BA1;&#x7B97;&#x5404;&#x79CD;&#x8BC4;&#x4F30;&#x6307;&#x6807;&#xFF0C;&#x5982;iv&#x503C;&#x3001;gini&#x6307;&#x6570;&#xFF0C;entropy&#x71B5;&#xFF0C;&#x4EE5;&#x53CA;unique values&#xFF0C;&#x7ED3;&#x679C;&#x4EE5;iv&#x503C;&#x6392;&#x5E8F;
                 iv
subGrade        0.485106565
interestRate    0.463530061
grade           0.463476859
term            0.172635079
ficoRangeLow    0.125252862
ficoRangeHigh   0.125252862
dti             0.072902752
verificationStatus  0.054518912
n14             0.045646121
loanAmnt        0.040412211
installment     0.039444828
title           0.034895535
issueDate_year  0.034170341
homeOwnership   0.031995853
n2              0.031194387
n3              0.031194387
annualIncome    0.030305725
n9              0.029678353
employmentTitle 0.028019829
revolUtil       0.025677543

上面展示了IV值大于0.02的特征,IV值小于0.02的特征对目标变量几乎没有作用,本人已测试仅用上述特征建模,模型效果没有全部特征好

4.2.2 toad.selection.select

selected_data, drop_lst= toad.selection.select(df2,target = 'isDefault', empty = 0.5, iv = 0.02, corr=0.7,return_drop=True)
&#x7B5B;&#x9009;&#x7A7A;&#x503C;&#x7387;>0.5&#xFF0C;IV<0.02,相关性大于0.7的特征 # (800000, 15) 保留了15个特征 以下是删除的特征,通过return_drop="True&#x663E;&#x793A;" {'empty': array([], dtype="float64)," 'iv': array(['employmentlength', 'purpose', 'postcode', 'regioncode', 'delinquency_2years', 'openacc', 'pubrec', 'pubrecbankruptcies', 'revolbal', 'totalacc', 'initialliststatus', 'applicationtype', 'n0', 'n1', 'n4', 'n5', 'n6', 'n7', 'n8', 'n10', 'n11', 'n12', 'n13', 'issuedate_month', 'earliescreditline_year', 'earliescreditline_month'], 'corr': array(['n9', 'grade', 'n3', 'installment', 'ficorangehigh', 'interestrate'],></0.02,相关性大于0.7的特征>

通过筛选的特征用于建模,效果也不好

4.2.3 psi:比较训练集和测试集的变量分布之间的差异

psi = toad.metrics.PSI(df2,testA)   # psi&#x6CA1;&#x6709;&#x5927;&#x4E8E;0.25&#x7684;&#xFF0C;&#x90FD;&#x6BD4;&#x8F83;&#x7A33;&#x5B9A;
psi.sort_values(0,ascending=False)
##############&#x90E8;&#x5206;&#x7ED3;&#x679C;&#x5C55;&#x793A;##############
revolBal                   2.330739e-01
installment                1.916890e-01
employmentTitle            1.513944e-01
employmentLength           6.919465e-02
annualIncome               4.075954e-02
dti                        2.810131e-02
title                      1.875967e-02

特征工程是机器学习中不可或缺的一部分,也是十分庞杂的工程,本人也只是做了简单的尝试。

五、数据建模

本人对比了xgboost及catboost,最终选择了catboost,尝试结果如下:
RandomForestClassifier+xgboost AUC 测试0.721/线上0.71 xgboost+toad AUC 测试0.722 catboost+toad AUC 测试0.727 catboost+类别变量AUC 测试0.736/线上0.72 catboost+5KFold+500iterations AUC 测试0.734/线上0.728 catboost+3KFold+300iterations+增加类别变量AUC 测试0.738/线上0.7346

from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
from catboost import CatBoostClassifier
from sklearn.model_selection import KFold
train=pd.read_csv("/df2.csv")
testA2=pd.read_csv("/testA.csv")
&#x9009;&#x53D6;&#x76F8;&#x5173;&#x53D8;&#x91CF;&#x505A;&#x5206;&#x7C7B;&#x53D8;&#x91CF;&#x5E76;&#x8F6C;&#x5316;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x683C;&#x5F0F;
col=['grade','subGrade','employmentTitle','homeOwnership','verificationStatus','purpose','issueDate_year','postCode','regionCode','earliesCreditLine_year','issueDate_month','earliesCreditLine_month','initialListStatus','applicationType']
for i in train.columns:
    if i in col:
        train[i] = train[i].astype('str')
for i in testA2.columns:
    if i in col:
        testA2[i] = testA2[i].astype('str')
&#x5212;&#x5206;&#x7279;&#x5F81;&#x53D8;&#x91CF;&#x4E0E;&#x76EE;&#x6807;&#x53D8;&#x91CF;
X=train.drop(columns='isDefault')
Y=train['isDefault']
&#x5212;&#x5206;&#x8BAD;&#x7EC3;&#x53CA;&#x6D4B;&#x8BD5;&#x96C6;
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=123)
&#x6A21;&#x578B;&#x8BAD;&#x7EC3;
clf=CatBoostClassifier(
            loss_function="Logloss",
            eval_metric="AUC",
            task_type="CPU",
            learning_rate=0.1,
            iterations=300,
            random_seed=2022,
            od_type="Iter",
            depth=7)
result = []
mean_score = 0
n_folds=3
kf = KFold(n_splits=n_folds ,shuffle=True,random_state=2022)
for train_index, test_index in kf.split(X):
    x_train = X.iloc[train_index]
    y_train = Y.iloc[train_index]
    x_test = X.iloc[test_index]
    y_test = Y.iloc[test_index]
    clf.fit(x_train,y_train,verbose=300,cat_features=col)
    y_pred=clf.predict_proba(x_test)[:,1]
    print('&#x9A8C;&#x8BC1;&#x96C6;auc:{}'.format(roc_auc_score(y_test, y_pred)))
    mean_score += roc_auc_score(y_test, y_pred) / n_folds
    y_pred_final = clf.predict_proba(testA2)[:,-1]
    result.append(y_pred_final)
&#x6A21;&#x578B;&#x8BC4;&#x4F30;
print('mean &#x9A8C;&#x8BC1;&#x96C6;Auc:{}'.format(mean_score))
cat_pre=sum(result)/n_folds
&#x7ED3;&#x679C;
0:  total: 3.13s    remaining: 15m 35s
299:    total: 9m 15s   remaining: 0us
&#x9A8C;&#x8BC1;&#x96C6;auc:0.7388007571702323
0:  total: 2.08s    remaining: 10m 20s
299:    total: 9m 45s   remaining: 0us
&#x9A8C;&#x8BC1;&#x96C6;auc:0.7374681864389327
0:  total: 1.73s    remaining: 8m 38s
299:    total: 9m 22s   remaining: 0us
&#x9A8C;&#x8BC1;&#x96C6;auc:0.7402961974320663
mean &#x9A8C;&#x8BC1;&#x96C6;Auc:0.7388550470137438

说明:catboost能高效合理地处理类别型特征,只需要使用cat_features 参数指定分类特征即可,加入的类别特征越多,计算也越耗时,但效果也有一定提升。可以看出3次交叉验证跑完就耗时接近半小时,还只是在iterations=300的情况下,由于本人PC能力有限,所以参数方面就没有过多的调整测试,对于大数据目标变量的预测,交叉验证是必不可少的,可以通过训练集与测试集的不同划分,让模型进行更多的学习,同时通过每一次的预测结果最后平均,使结果更加稳定。

总结

1.&#x5173;&#x4E8E;&#x6837;&#x672C;&#x5E73;&#x8861;&#x7684;&#x95EE;&#x9898;&#xFF0C;imbalanced_ensemble&#x662F;&#x4E2A;&#x4E0D;&#x9519;&#x7684;&#x5C1D;&#x8BD5;&#xFF0C;&#x8BE5;&#x5E93;&#x6709;&#x5F88;&#x591A;&#x5E73;&#x8861;&#x6837;&#x672C;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x672C;&#x4EBA;&#x5DF2;&#x7ECF;&#x8BD5;&#x8FC7;OverBoostClassifier&#x3001;BorderlineSMOTE&#x3001;SPE&#x7684;&#x65B9;&#x6CD5;&#x6765;&#x5E73;&#x8861;&#x7C7B;&#x522B;&#xFF0C;&#x8FC7;&#x91C7;&#x6837;&#x5BB9;&#x6613;&#x589E;&#x52A0;&#x566A;&#x58F0;&#xFF0C;&#x5BFC;&#x81F4;&#x8BAD;&#x7EC3;&#x96C6;&#x8868;&#x73B0;&#x4E0D;&#x9519;&#xFF0C;&#x6D4B;&#x8BD5;&#x96C6;&#x4E00;&#x822C;&#xFF0C;&#x540C;&#x65F6;&#x4F1A;&#x5BFC;&#x81F4;&#x5C0F;&#x6837;&#x672C;&#x91CF;&#x9884;&#x6D4B;&#x5931;&#x51C6;&#xFF0C;&#x964D;&#x91C7;&#x6837;&#x5BB9;&#x6613;&#x5BFC;&#x81F4;&#x5BF9;&#x5927;&#x6837;&#x672C;&#x91CF;&#x5B66;&#x4E60;&#x4E0D;&#x8DB3;&#xFF0C;&#x4F46;&#x5E76;&#x4E0D;&#x4EE3;&#x8868;&#x5E73;&#x8861;&#x6837;&#x672C;&#x7684;&#x65B9;&#x6CD5;&#x5C31;&#x4E0D;&#x9002;&#x7528;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x4E0D;&#x65AD;&#x6478;&#x7D22;&#x3002;

2.&#x5BF9;&#x4E8E;&#x7F3A;&#x5931;&#x503C;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x4E00;&#x822C;&#x90FD;&#x662F;&#x6570;&#x503C;&#x578B;&#x53D8;&#x91CF;&#x7528;&#x4E2D;&#x4F4D;&#x6570;&#x586B;&#x5145;&#xFF0C;&#x7C7B;&#x522B;&#x53D8;&#x91CF;&#x7528;&#x4F17;&#x6570;&#x586B;&#x5145;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x56DE;&#x5F52;&#x6A21;&#x578B;&#x9009;&#x53D6;&#x76F8;&#x5173;&#x53D8;&#x91CF;&#x8FDB;&#x884C;&#x9884;&#x6D4B;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x6709;&#x60CA;&#x559C;&#x3002;

3.&#x6B64;&#x7C7B;&#x98CE;&#x63A7;&#x9884;&#x6D4B;&#x5982;&#x679C;&#x80FD;&#x591F;&#x7ED3;&#x5408;&#x4E1A;&#x52A1;&#x4EBA;&#x5458;&#x7684;&#x7ECF;&#x9A8C;&#x5BF9;&#x53D8;&#x91CF;&#x8FDB;&#x884C;&#x7B5B;&#x9009;&#x548C;&#x8865;&#x5145;&#xFF0C;&#x76F8;&#x4FE1;&#x4F1A;&#x6709;&#x4E0D;&#x4E00;&#x6837;&#x7684;&#x7ED3;&#x679C;&#x3002;

4.&#x5173;&#x4E8E;&#x7279;&#x5F81;&#x964D;&#x7EF4;&#x8FD8;&#x6709;&#x5F88;&#x591A;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x5C1D;&#x8BD5;&#xFF0C;PCA&#x53EA;&#x662F;&#x5176;&#x4E2D;&#x4E00;&#x79CD;&#xFF0C;&#x7279;&#x5F81;&#x5DE5;&#x7A0B;&#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x5E9E;&#x6742;&#x7684;&#x4F53;&#x7CFB;&#xFF0C;&#x9700;&#x8981;&#x4E0D;&#x65AD;&#x5B66;&#x4E60;&#x3002;

5.&#x5173;&#x4E8E;&#x6A21;&#x578B;&#x8C03;&#x53C2;&#xFF0C;&#x53EF;&#x4EE5;&#x9002;&#x5F53;&#x63D0;&#x9AD8;&#x9884;&#x6D4B;&#x7CBE;&#x5EA6;&#xFF0C;&#x5982;&#x679C;&#x65F6;&#x95F4;&#x5141;&#x8BB8;&#xFF0C;&#x53EF;&#x4EE5;&#x7EC4;&#x5408;&#x6D4B;&#x8BD5;&#x53C2;&#x6570;&#x3002;

6.&#x53C2;&#x8D5B;&#x7684;&#x8FC7;&#x7A0B;&#x5927;&#x4E8E;&#x7ED3;&#x679C;&#xFF0C;&#x4ECE;&#x4E2D;&#x5B66;&#x5230;&#x7684;&#x77E5;&#x8BC6;&#x548C;&#x7ECF;&#x9A8C;&#x4F1A;&#x4E3A;&#x6211;&#x4ECA;&#x540E;&#x5927;&#x6570;&#x636E;&#x5904;&#x7406;&#x6253;&#x4E0B;&#x57FA;&#x7840;&#x3002;

Original: https://blog.csdn.net/weixin_46685991/article/details/125836476
Author: wjzeroooooo
Title: 阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/638819/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球