金融贷款逾期的模型调优
1.数据信息:金融数据(非原始数据)
2. 任务类型:模型调优
使用网格搜索法对7个模型进行调优(调参时采用五折交叉验证的方式),并进行模型评估
3.代码运行过程
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn import metrics
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
import warnings
warnings.filterwarnings("ignore", category=FutureWarning, module="sklearn", lineno=196)
#读取数据
data_all = pd.read_csv(r'D:\datawhale\12.17\data_all.csv')
print('数据的行列',data_all.shape)
#划分数据集
X = data_all.drop(['status'],axis=1)
y = data_all['status']
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=2018)
#归一化
sc = StandardScaler()
sc.fit(X_train)# 估算每个特征的平均值和标准差
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
#定义网格搜索交叉验证函数(5折)
def gridsearch(model,parameters):
grid = GridSearchCV(model,parameters,scoring='accuracy',cv=5)
grid = grid.fit(X_train_std,y_train)
if hasattr(model,'decision_function'):
y_predict_pro = grid.decision_function(X_test_std)
else:
y_predict_pro = grid.predict_proba(X_test_std)[:,1]
print('best score:',grid.best_score_)
print(grid.best_params_)
print('test score:',grid.score(X_test_std,y_test))
print('AUC:',metrics.roc_auc_score(y_test,y_predict_pro))
#逻辑回归
print('逻辑回归:')
parameters = {'C':[0.1,1,2,5],'penalty':['l1','l2']}
lr = LogisticRegression()
lr.fit(X_train_std,y_train)
gridsearch(lr, parameters)
print('')
#SVM
print('SVM:')
parameters = {'C':[0.1,1,2,5],'kernel':['linear','poly','rbf']}
svc = SVC()
svc.fit(X_train_std,y_train)
gridsearch(svc,parameters)
print('')
#决策树
print('决策树:')
parameters = {'criterion': ['gini', 'entropy'], 'max_depth': [1,2,3,4,5,6], 'splitter': ['best', 'random'],
'max_features': ['log2', 'sqrt', 'auto']}
clf = DecisionTreeClassifier()
clf.fit(X_train_std,y_train)
gridsearch(clf,parameters)
print('')
#随机森林
print('随机森林:')
parameters = {'n_estimators': range(1,200), 'max_features': ['log2', 'sqrt', 'auto']}
rfc = RandomForestClassifier(random_state=2018)
rfc.fit(X_train_std,y_train)
gridsearch(rfc,parameters)
print('')
#GBDT
print('GBDT:')
parameters = {'n_estimators': range(1, 150, 10), 'learning_rate': np.arange(0.1, 1, 0.1)}
gbdt = GradientBoostingClassifier(random_state=2018)
gbdt.fit(X_train_std,y_train)
gridsearch(gbdt,parameters)
print('')
#XGBoost
print('XGBoost:')
parameters = {'eta': np.arange(0.1, 0.5, 0.1), 'max_depth': range(1,6,1), 'min_child_weight': range(1,5,1)}
xgbs = XGBClassifier()
xgbs.fit(X_train_std,y_train)
gridsearch(xgbs,parameters)
print('')
#LightGBM
parameters = {'learning_rate': np.arange(0.1,0.5,0.1), 'max_depth': range(1,5,1), 'n_estimators':range(15,50,10)}
lgbm = LGBMClassifier(random_state=2018)
lgbm.fit(X_train_std,y_train)
gridsearch(lgbm,parameters)
print('')
4.结果
逻辑回归
决策树
SVM
随机森林
其他几个还在跑= =