金融贷款预测

数据预处理
说明:这份数据集是金融数据(非原始数据,已经处理过了),我们要做的是预测贷款用户是否会逾期。表格中 “status” 是结果标签:0表示未逾期,1表示逾期。

import pandas as pd
from sklearn.model_selection import train_test_split

financial = pd.read_csv("data.csv", encoding = 'gbk')
financial.head()
financial.info()
financial["source"].value_counts()
financial["reg_preference_for_trad"].value_counts()
financial["bank_card_no"].value_counts()
financial["trade_no"].value_counts()

这一步发现source和bank_card_no这两个属性所有数据都是一样的,没有统计意义,所以drop一下

fi_copy = financial.copy()
for x in ("source", "bank_card_no", "trade_no", "id_name"):
    fi_copy.drop([x], axis=1, inplace=True)
fi_copy.info()

类别型特征编码

fi_copy = fi_copy.drop("status", axis=1)
fi_copy_num = fi_copy.select_dtypes(include='number')
fi_copy_obj = fi_copy.select_dtypes(exclude='number')
y = financial["status"]

fi_obj = pd.DataFrame()
fi_obj["reg_preference_for_trad"] = fi_copy_obj["reg_preference_for_trad"].map({'境外':0,'一线城市':1, '二线城市':2, '三线城市':3})

fi_obj['latest_query_time_year'] = pd.to_datetime(fi_copy_obj['latest_query_time']).dt.year
fi_obj['latest_query_time_month'] = pd.to_datetime(fi_copy_obj['latest_query_time']).dt.month
fi_obj['latest_query_time_weekday'] = pd.to_datetime(fi_copy_obj['latest_query_time']).dt.weekday
fi_obj['loans_latest_time_year'] = pd.to_datetime(fi_copy_obj['loans_latest_time']).dt.year
fi_obj['loans_latest_time_month'] = pd.to_datetime(fi_copy_obj['loans_latest_time']).dt.month
fi_obj['loans_latest_time_weekday'] = pd.to_datetime(fi_copy_obj['loans_latest_time']).dt.weekday
fi_obj.head()

数值型特征缺失值填充:

from sklearn.preprocessing import Imputer

imputer = Imputer(strategy="most_frequent")
imputer.fit(fi_copy_num)
fi_num = imputer.transform(fi_copy_num)
fi_num = pd.DataFrame(fi_num,columns=fi_copy_num.columns)

特征组合并构建模型预测然后评估

fi_pro = pd.concat([fi_num, fi_obj], axis=1, sort=False)

import lightgbm as lgb
import xgboost as xgb
from sklearn.metrics import accuracy_score, precision_score, recall_score
from sklearn.metrics import roc_auc_score

fi_std_train, fi_std_test, y_train, y_test = train_test_split(fi_pro, y, test_size=0.3, random_state=2019)
lgbc = lgb.LGBMClassifier()
lgbc.fit(fi_std_train,y_train)
xgbc = xgb.XGBClassifier()
xgbc.fit(fi_std_train,y_train)

def model_metrics(clf, X_test,  y_test):
    y_test_pred = clf.predict(X_test)
    y_test_prob = clf.predict_proba(X_test)[:, 1]

    accuracy = accuracy_score(y_test, y_test_pred)
    print('The accuracy: ', accuracy)
    precision = precision_score(y_test, y_test_pred)
    print('The precision: ', precision)
    recall = recall_score(y_test, y_test_pred)
    print('The recall: ', recall)
    f1_score = recall_score(y_test, y_test_pred)
    print('The F1 score: ', f1_score)

model_metrics(xgbc,fi_std_test,y_test)
model_metrics(lgbc,fi_std_test,y_test)

The accuracy: 0.7911702873160477
The precision: 0.6649484536082474
The recall: 0.356353591160221
The F1 score: 0.356353591160221
The accuracy: 0.7701471618780659
The precision: 0.580952380952381
The recall: 0.3370165745856354
The F1 score: 0.3370165745856354

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值