背景

天池学习赛贷款违约预测

首次参加学习赛的过程在论坛中初识catBoost,希望能通过实践加深印象与理解

catboost 简介

###三大优点

  • 自动处理类别型特征(categorical features)。首先对categorical features做一些统计,计算某个类别特征(category)出现的频率,之后加上超参数,生成新的数值型特征(numerical features)
  • catboost还使用了组合类别特征,可以利用到特征之间的联系,这极大的丰富了特征维度
  • catboost的基模型采用的是对称树,同时计算leaf-value方式和传统的boosting算法也不一样,传统的boosting算法计算的是平均数,而catboost在这方面做了优化采用了其他的算法,这些改进都能防止模型过拟合

catboost 实战

首先通过pandas读入数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
import datetime
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import StratifiedKFold
#warnings.filterwarnings('ignore')
#%matplotlib inline
from sklearn.metrics import roc_auc_score
## 数据降维处理的
from sklearn.model_selection import train_test_split
from catboost import CatBoostClassifier
train=pd.read_csv("train.csv")
testA=pd.read_csv("testA.csv")

数据中包含了47种不同特征,而且特征的数据类型各不一样,有数值型(creative_height),布尔型(creative_is_js)等不同类型的特征。

img

而在catboost中不需要预处理数据,只需要提供,哪些特征属于类别特征,它会自动处理。代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
sub=testA[['id']].copy()
sub['isDefault']=0
testA=testA.drop(['id','issueDate'],axis=1)
data_x=train.drop(['isDefault','id','issueDate'],axis=1)
data_y=train[['isDefault']].copy()
x, val_x, y, val_y = train_test_split(
data_x,
data_y,
test_size=0.25,
random_state=1,
stratify=data_y
)

col=['grade','subGrade','employmentTitle','homeOwnership','verificationStatus','purpose','postCode','regionCode',
'initialListStatus','applicationType','policyCode']
for i in data_x.columns:
if i in col:
data_x[i] = data_x[i].astype('str')
for i in testA.columns:
if i in col:
testA[i] = testA[i].astype('str')
model=CatBoostClassifier(
loss_function="Logloss",
eval_metric="AUC",
task_type="CPU",
learning_rate=0.1,
iterations=500,
random_seed=2020,
od_type="Iter",
depth=7)

最后就是将数据喂给算法进行训练

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
answers = []
mean_score = 0
n_folds = 5
sk = StratifiedKFold(n_splits=n_folds, shuffle=True, random_state=2019)
for train, test in sk.split(data_x, data_y):
x_train = data_x.iloc[train]
y_train = data_y.iloc[train]
x_test = data_x.iloc[test]
y_test = data_y.iloc[test]
clf = model.fit(x_train,y_train, eval_set=(x_test,y_test),verbose=500,cat_features=col)
yy_pred_valid=clf.predict(x_test)
print('cat验证的auc:{}'.format(roc_auc_score(y_test, yy_pred_valid)))
mean_score += roc_auc_score(y_test, yy_pred_valid) / n_folds
y_pred_valid = clf.predict(testA,prediction_type='Probability')[:,-1]
answers.append(y_pred_valid)
print('mean valAuc:{}'.format(mean_score))
cat_pre=sum(answers)/n_folds
sub['isDefault']=cat_pre
sub.to_csv('D:/projects/python/test/jupyter/金融预测.csv',index=False)

结语

catboot简单易用且功能强大,减弱了对特征工程的依赖,如果面对需要特别多的前期数据处理和特征数值化的任务,可以很高效锋发挥作用。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 背景
  2. 2. catboost 简介
  3. 3. catboost 实战
  4. 4. 结语
,