金融逾期类问题数据建模流程概述
一、数据读取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扇形图、柱状图
三、数据处理、特征工程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做的一个半监督算法的例子这个例子有过拟合和信息泄露的问题
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) 编辑 收藏 举报