金融逾期类问题数据建模流程概述

一、数据读取Load Data

二、数据分析、数据展示、EDA

三、数据处理、特征工程

四、建模(模型性能比较、模型选择、超参调优)

五、模型理解、结果分析

------------------------------------------------

一、数据读取Load Data

二、数据分析、数据展示、EDA

目的:对数据有个大体的理解,看有没有明显的特点及反常的表现,增强对数据、业务的理解。

(貌似不重要,但比较炫技的一个过程,也是发散思维体现最充分的地方。比较能把你和其它人分开的地方。)

比如,y的命中率决定了后面是否要过采样、欠采样。x1是类别型还是数值型,是否需要转换,如何转换,和y的表现有什么关系,等等等等。

工具:主要是一些画图的包,matplotlib.pyplot(plt),seaborn(sns),plotly

   相关性分析(correlation)

import matplotlib.pyplot as plt

import seaborn as sns

sns.stripplot()  分类散点图

sns.distplot()  直方图

sns.barplot()  条形图

sns.pairplot()  散点图矩阵

pie扇形图、柱状图

一个数据展示的例子 例子2 模型融合的例子

三、数据处理特征工程Feature engineering

目的:对原始数据进行处理,使之成为可建模的、可展示的形式,或者根据其业务含义,需要进行onthot/也即哑变量转换。

工具:1.缺失值是否需要处理?如何处理? 2.离群值是否需要处理?如何处理? 3.是否需要标准化?为什么?如何标准化?是否要归一化?

   4.是否需要onthot编码?为什么?  5.是否需要降维技术?为什么?选用何种降维?pca之后如何做?  

          PCA 主成分分析 、factor analysis 因子分析 、ICA 独立成分分析 ,(KernelPCA、IncrementalPCA、Sparse PCA)

          矩阵分解:SVD(奇异值分解)

   6.是否需要变量交叉生成新变量?如何生成?为什么?生成后如何处理?

   7.是否需要分箱?为什么?有哪些分箱方法?分箱之后如何处理?

    pd.qcut(train.loc[:, your_feature].values,q=10,labels=False)  :  quantile based binning(基于分位数的分箱,等分)、

    卡方分箱

   8. 是否要删掉高相关性变量?为什么?correlation

   9.过采样SMOT、欠采样

标准化:

数据的标准化是一个比较常用的数据预处理方法,其目的是处理不同量纲的数据,使其缩放到相同的数据区间和范围,以减少规模,特征、分布差异对模型的影响。

标准化后的数据还具有了直接计算并生成符合指标的意义。

encoder = LabelEncoder()

encoder.fit_transform(train[your_feature + "_qbinned"].values.reshape(-1, 1))  :  归一化

np.round(train.loc[:, your_feature].values)  :  标准化

数据的标准化:Z-score、Max-Min、MaxAbs、RobustScaler  https://blog.csdn.net/weixin_37536446/article/details/81435461

from sklearn import preprocessing
#scaler = preprocessing.StandardScaler()
#scaler = preprocessing.MaxAbsScaler()
scaler = preprocessing.RobustScaler()
all_data.loc[:,numcols] = scaler.fit_transform(all_data[numcols])

相关性:

all_data.corr()

corr_matrix = all_data.corr().abs()   #相关系数的绝对值

upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))

to_drop = [c for c in upper.columns if any(upper[c] > 0.95)]   #相关系数大于0.95的删掉

NB 朴素贝叶斯算法:GaussianNB  ,BernoulliNB ,MultinomialNB

bnb = BernoulliNB(fit_prior=True)
bnb.fit(X_train, Y_train)
X_train_bnb = bnb.predict_log_proba(X_train)[:,1]
X_test_bnb = bnb.predict_log_proba(X_test)[:,1]
在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先验为高斯分布的朴
素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。
https://www.cnblogs.com/pinard/p/6074222.html

from collections import Counter
from imblearn.over_sampling import SMOTE

col = data.select_dtypes(include='object').columns

data[col] = data[col].apply(le.fit_transform)

四、建模(比较模型、选模型、调优)

目的:拿到一个数据,并不知道哪个模型效果好,所以要通过建模比较,选出一个效果好的。

工具:1.首先要考虑是否是imbanlance数据,是否要重采样SMOT

    数据增强

    数据增强程序 (数据增强就是过采样,此程序实现了对y=1的样本增加了2倍,对y=0的样本增加了1倍。中间对行数据进行了shuffle随机排列。)

   2.  所有模型建模批量建模,看一下效果

    LightGBM、GBDT、XGBoost、catBoost、DecisionTree、Random Forest、SVM、LR、

    from sklearn.ensemble import ExtraTreesClassifier、

    Navie Bayes、Neural Network、

    融合模型

    用autoencoder做的一个半监督算法的例子这个例子有过拟合和信息泄露的问题

    另一个用autoencoder做的无监督算法,比较严谨

     3. Tuning 参数调优(精度、效率)

    比较2中各个模型的效果,把效果好的模型拿出来调优后,作为最终的模型。

    cross_validation、Grid_Search、KS、ROC、F1、accuracy、KFold  

    from sklearn.model_selection import StratifiedKFold  

    3.1网络超参数自动化搜索 【调超参数】

    Grid Search、Random Search、Heuristic Tuning启发式(手动调参)、

    Automatic Hyperparameter Tuning 自动超参数调优(贝叶斯优化搜索、SMAC、TPE)

    贝叶斯优化 https://www.cnblogs.com/marsggbo/p/9866764.html

                   https://www.cnblogs.com/marsggbo/p/10242962.html

    3.2.最优化理论  【调模型参数】

    BGD批量梯度下降、SGD随机梯度下降、MBGD小批量梯度下降 、

    牛顿法、拟牛顿法、共轭梯度法

 

五、模型理解、结果分析

给出结论(高手做这一步是和第五步结合来做的,很重要,如何根据结果,选择一个最优的模型。

如何选?看哪些指标?为什么选这个指标?会有什么后果?业务调整后该如何调整模型选择?)

roc curve / auc

ks

accuracy

precision

f1

Area Under the Precision-Recall Curve (AUPRC)

model_selection.ValidationCurve

model_selection.LearningCurve

讲的很细的关于模型评价、选择的例子这个例子要多研究几遍

 

 

 

 

posted on 2019-10-13 14:08  静静的白桦林_andy  阅读(401)  评论(0编辑  收藏  举报

导航