智能计算平台应用开发中级实验手册开发实践银行对私信贷数据特征工程实验手册教师用书Word格式.docx
《智能计算平台应用开发中级实验手册开发实践银行对私信贷数据特征工程实验手册教师用书Word格式.docx》由会员分享,可在线阅读,更多相关《智能计算平台应用开发中级实验手册开发实践银行对私信贷数据特征工程实验手册教师用书Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
案例讲解
介绍案例背景信息(播放引导胶片)
下发对应的学员手册和道具(白纸、马克笔、截图材料等)
下发任务(播放引导胶片)
详细介绍本次案例的规则(播放引导胶片)
场景演练及分析讨论
5课时
分组进行场景演练和案例研讨,完成下发的任务,输出结果
展示分享
1课时
各小组进行阐述,或分角色进行演练
输出小组讨论总结,相互点评其他小组活动
(此环节按照任务数量可重复多次)
点评总结
引导员对学员分析和理解进行点评,指出案例关键点和核心知识内容(播放引导胶片)
对各个小组的得分情况进行统计,对小组成员进行能力评估
2.2课程介绍
特征工程是从原始数据中提取特征的过程。
数据和特征决定了机器学习的上限,而模型和算法只是不断地逼近这个上限。
特征工程构造的目标是使提取的特征能够最大限度地表征数据的本质特点,使得基于这些特征构造的模型在未知数据集上有较好的预测效果。
2.3教学目标
●能够掌握基于Python实现特征选择的方法;
●能够掌握基于Python实现特征提取的方法;
●能够掌握基于Python实现特征构造的方法。
2.4学员分组
【开发者需要根据案例设计具体的分组,最大人数和最小人数的分组】
建议每组中都有较为活跃的学员;
每组3-5人,最多4组,最少2组;
移动教室桌子,按小组划分区域,打印各个小组的组号牌。
2.5案例背景
说明:
本文所涉及的案例仅为样例,实际操作中请以真实设备环境为准,具体配置步骤请参考对应的产品文档。
随着线上金融业务的发展,H银行考虑使用线上审批的方式对客户进行风险评估,一方面能够降低人力成本,另一方面能够提高审批效率。
线上审批需要更加严格和准确的风控模型来进行公司财务风险控制,因此算法工程师A在根据历史客户信贷数据构造信用风险模型前,需要完成模型的特征工程构造。
具体需要完成如下操作:
●数据预处理;
●特征选择;
●特征构造。
2.6任务及参考答案
演练场景1:
数据处理
背景
由于银行后端服务器收集的原始数据中可能存在缺失值、字符乱码、字段冗余、数据格式不统一等问题,为了提高数据质量,算法工程师A首先需要对数据进行清洗。
思考
数据清洗包括哪些内容?
【参考答案】
数据一致性检验、缺失值处理和异常值处理。
任务一数据导入
pandas库是数据分析的常用工具,pandas的索引对象负责管理轴标签,能够将不同数据来源的数据通过索引进行自动对齐。
pandas提供了4种常用的数据读取方法:
●read_csv:
从文件、URL、文件型对象中加载带分隔符的文件,默认分隔符为逗号;
●read_table:
从文件、URL、文件型对象中加载带分隔符的文件,默认分隔符为制表符“/t”;
●read_fwf:
读取定宽列格式数据;
●read_clipboard:
读取剪贴板中的数据。
其中,read_csv和read_table将会是Python读取数据的两种主要方式,因为本次实验数据文件“credit.csv”格式为csv,所以使用read_csv方法读取。
read_csv方法主要传入参数如下:
●'
./credit.csv'
:
文件路径,若数据文件与脚本文件在同一文件夹下,则使用相对路径导入,若数据文件在其它文件下,则需输入文件的绝对路径;
●index_col:
指定索引列,index_col=0表示指定第一列为索引列;
●header:
是否导入表头,默认导入表头,若不需要导入表头则设置header=None。
使用read_csv函数读取数据。
importpandasaspd
df=pd.read_csv('
index_col=0)
df.head()#显示前5行数据
输出结果:
问题研讨
使用pandas库导入数据时,如何设置某一列数据为索引?
设置index_col=‘字段名称’。
任务二缺失值处理
本实验主要对数据进行缺失值处理,详细的数据预处理步骤请参考《对私信贷违约预测实验手册》。
步骤1查看缺失值
数据中的缺失值可能是机器故障、人工录入错误或业务属性本身造成的,针对不同的原因,缺失值采取的处理方式也会不同。
missingno是一个缺失数据可视化工具,使用以下命令查看数据中的缺失数据分布:
importmissingno#导入missingno包
missingno.matrix(df)
从图中能够看出,Nation、Marriage_State、Highest_education、House_State、Industry、Title、Duty字段包含大量缺失值。
pandas中可使用isnull()判断数据中的缺失值,使用isnull().sum()方法统计缺失值数量,进一步查看字段中缺失值的占比。
df_missing=pd.DataFrame(df.isnull().sum()/df.shape[0],columns=['
missing_rate'
]).reset_index()
df_missing.sort_values(by='
ascending=False)[:
15]
步骤2使用众数对缺失数据进行填充
pandas提供fillna()方法对缺失值进行填充,mode()表示使用众数进行填充。
构造一个for循环处理多个含有缺失值的字段,用众数填充缺失值。
#定义存在缺失值字段列表
missing_col=['
Title'
'
Industry'
House_State'
Nation'
Marriage_State'
HighestEducation'
Duty'
]
#使用for循环处理多个字段缺失值
forcolinmissing_col:
df[col]=df[col].fillna(df[col].mode())
处理完成后,查看各字段中缺失值占比:
df_missing_2=pd.DataFrame(df.isnull().sum()/df.shape[0],columns=['
df_missing_2.sort_values(by='
处理缺失值的方式有哪几种?
1.直接删除:
对缺失值占比大于80%且为非重要业务属性的字段进行删除;
2.填充数据:
确定值填充、统计指标填充、基于算法的缺失值预测填充;
3.单独处理:
将含有缺失值的样本单独作为一个类别进行处理。
演练规则
讨论完毕后,每组汇总讨论结果,派本组学员代表上台,讲解本组结论。
讲师引导各组学员之间进行相互提问与点评。
评判因素主要包括以下关键点:
●数据导入是否准确;
●缺失值填充是否正确;
●每项任务分值10分,问题回答不全面酌情扣分;
●综合比较各组的输出结果,评选出最佳小组,该组累积1分。
演练场景2:
特征选择
数据已经过初步处理,由于特征数量过多容易导致模型不稳定,泛化能力差,也会导致计算复杂度呈指数级增长,所以工程师A需要对特征进行初筛,剔除对预测结果不重要的特征。
特征选择主要有哪几种方法?
1.Filter(过滤方法):
主要基于特征向量内部以及与目标变量之间的统计指标进行筛选;
2.Wrapper(封装器):
主要尝试使用不同的特征子集进行建模,将模型精度作为特征子集优劣的评价指标;
3.Embeded(嵌入法):
在模型训练过程实现特征权重的评价,对特征重要程度进行打分。
任务一特征初筛
使用Filter方法对特征进行初步筛选,主要考察自变量与因变量之间的关系,当自变量与因变量都是分类变量时,使用列联表或卡方检验分析两个变量之间的相关性。
步骤3列联表分析
以House_State变量和目标变量Target为例,使用crosstab()方法绘制列联表。
cross_table=pd.crosstab(df.House_State,columns=df.Target,margins=True)
cross_table_rowpct=cross_table.div(cross_table['
All'
],axis=0)
cross_table_rowpct
从输出结果中可以看出,House_State=1的违约率为0.019,House_State=2的违约率为0.045,若认为违约率0.019与0.045无差异,则认为House_State变量对是否违约预测没有影响。
列联表分析仅能用于初步的判断分析,数值差异是否具有统计学上的意义还需要通过卡方检验来进行。
步骤4卡方检验
从原始数据中分离出自变量和因变量,再从自变量中筛选出类别型变量。
其中,Target字段为目标变量,赋值给y;
将剔除目标变量的列作为自变量赋值给X,X_category则表示类别型变量。
X=df.drop('
Target'
axis=1)
y=df['
]
X_category=df[['
Birth_Place'
Gender'
Work_Years'
]]
导入sklearn.feature_selection的卡方检验包chi2,使用chi2()计算每个类别变量与目标变量的卡方值。
fromsklearn.feature_selectionimportchi2
(chi2,pval)=chi2(X_category,y)
dict_feature={}
fori,jinzip(X_category.columns.values,chi2):
dict_feature[i]=j
ls=sorted(dict_feature.items(),key=lambdaitem:
item[1],reverse=True)
ls
请在下面横线上填写根据卡方检验结果需要删除的变量名称:
。
考虑删除卡方值较小的变量,如:
Title、House_State、HighestEducationg。
步骤5连续变量相关性检验
对于连续型的自变量,若两个自变量之间相关性较高,则可以考虑删除其中一个变量或提取出两个自变量中的共有信息。
首先从自变量中提取出连续型变量,请截图保存代码放在下列方框中。
nominal_features=['
Unit_Kind'
'
Occupation'
numerical_features=[col_forcol_indf.columnsifcol_notinnominal_features]
numerical_features.pop(0)#删除列表中第一个元素
X_num=df[numerical_features]
pandas提供了corr(method,min_periods)方法,用于计算连续型自变量之间的相关系数,其中method表示相关系数的计算方式,包括以下几种。
●pearson皮尔逊相关系数;
●kendall无序分类变量的相关系数;
●spearman斯皮尔曼相关系数,主要针对非线性和非正态分布数据的相关性分析。
corr_matrix=X_num.corr(method='
pearson'
)
plt.figure(figsize=(25,15))
sns.heatmap(corr_matrix,annot=True)#绘制热力对变量之间的相关性进行可视化呈现
请计算出各连续型自变量之间的相关系数,筛选出相关系数大于0.8的自变量组合,并截图保存代码。
cols_pair=[]
forindex_incorr_matrix.index:
forcol_incorr_matrix.columns:
ifcorr_matrix.loc[index_,col_]>
=0.8andindex_!
=col_and(col_,index_)notincols_pair:
cols_pair.append((index_,col_))
cols_pair
相关系数大于0.8的两个自变量组合分别为:
1.ZX_Max_Account_Number(信用卡最多账户数(征信))和ZX_Max_Link_Banks(最多开户银行数);
2.ZX_Max_Credits(贷款最多笔数(征信))和ZX_Max_Credit_Banks(贷款最多涉银行家数(征信))。
若自变量与因变量均为连续型变量,应该使用哪种方便检验变量之间的相关性?
使用相关系数进行判别。
任务二封装器方法
封装器(Wrapper)选择方法主要使用不同的特征子集进行建模,将模型精度作为特征子集优劣的评价指标,选择一个基础模型进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练。
调用sklearn中的子模块中feature_selection的RFE()方法,并将逻辑回归模型LogisticRegressio()作为后续调用的基模型,其中传入参数:
●estimator:
基础训练模型,这里选择逻辑回归模型;
●n_feature_to_select:
筛选保留的特征数量;
●fit(X,y):
调用模型并进行模型训练。
fromsklearn.feature_selectionimportRFE
fromsklearn.linear_modelimportLogisticRegression
x_rfe=RFE(estimator=LogisticRegression(),n_features_to_select=20).fit(X,y)
print(x_rfe.n_features_)
print(x_rfe.support_)
print(x_rfe.ranking_)
print(x_rfe.estimator_)
20
[TrueTrueFalseTrueTrueTrueFalseTrueTrueTrueTrueFalse
FalseTrueFalseTrueTrueFalseTrueTrueTrueTrueTrueTrue
TrueFalseFalseFalseTrueFalse]
[11911110111163111118111111
154712]
LogisticRegression(C=1.0,class_weight=None,dual=False,fit_intercept=True,
intercept_scaling=1,max_iter=100,multi_class='
warn'
n_jobs=None,penalty='
l2'
random_state=None,solver='
tol=0.0001,verbose=0,warm_start=False)
输出结果为RFE()方法的返回值,各返回值含义如下:
●n_features_:
选择的特征数量,即RFE()方法传入参数n_features_to_select的值;
●support_:
按特征对应位置展示所选特征,True表示保留,False表示剔除;
●ranking_:
特征排名,ranking_[i]对应于第i个特征的排名位置,“1”表示最优特征,被筛选出的均为“1”的20个特征标签,即为最佳特征;
●estimator_:
返回基模型的各项参数。
在封装器特征选择方法中,常用的有哪几种特征递归消除方式?
(请至少列举3种)
“逐步回归”、“向前选择法”和“向后选择法”。
任务三嵌入法
嵌入法利用机器学习模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。
常用嵌入法技术主要有两类方法:
●基于线性模型和正则化;
●基于树模型的特征选择。
在树模型中,通过子节点深度判断特征的重要程度,本次实验采用随机森林来计算特征的重要程度。
调用sklearn.ensemble子模块中的随机森林分类方法,使用fit(X,y)方法训练模型。
fromsklearn.ensembleimportRandomForestClassifier
rfc=RandomForestClassifier()
rfc.fit(X,y)
模型训练完成后,打印出每个特征的权重评估值。
sorted_feature=sorted(zip(map(lambdax:
round(x,4),rfc.feature_importances_),cols),reverse=True)
sorted_feature
[(0.1315,'
Ast_Curr_Bal'
),
(0.1286,'
Age'
(0.0862,'
Year_Income'
(0.0649,'
Std_Cred_Limit'
(0.043,'
ZX_Max_Account_Number'
(0.0427,'
(0.0416,'
ZX_Link_Max_Overdue_Amount'
(0.0374,'
ZX_Max_Link_Banks'
(0.0355,'
(0.0354,'
ZX_Max_Overdue_Duration'
(0.0311,'
ZX_Total_Overdu_Months'
(0.0305,'
(0.0292,'
Couple_Year_Income'
(0.0279,'
ZX_Credit_Max_Overdu_Amount'
(0.0246,'
ZX_Max_Overdue_Account'
(0.0241,'
ZX_Max_Credit_Banks'
(0.0221,'
ZX_Max_Credits'
(0.0205,'
(0.0195,'
Loan_Curr_Bal'
(0.0173,'
L12_Month_Pay_Amount'
(0.015,'
ZX_Credit_Max_Overdue_Duration'
(0.013,'
(0.0097,'
ZX_Credit_Total_Overdue_Months'
(0.0096,'
(0.0084,'
(0.0079,'
(0.0064,'
ZX_Max_Overdue_Credits'
(0.0059,'
(0.0,'
Couple_L12_Month_Pay_Amount'
)]
树结构模型为什么能用于特征选择?
树模型在构造过程中,分裂节点是基于变量的重要程度进行选择的,即离根节点越近的变量重要程度越高。
任务四剔除变量
综合以上三种变量选择方法结果,剔除对模型影响权重较小的变量。
del_cols=['
df_select=df.drop(del_cols,axis=1)
df_select.head()
特征选择的主要策略有哪几种?
请举例说明。
1.根据评价函数进行完全搜索;
2.根据启发式规则在剩余特征中选取最优变量的启发式搜索;
3.迭代计算时根据设置的参数进行随机搜索。
讨论完毕后,每组汇总讨论结果,派本组学员代表上台,展示本组的操作流程。
●特征选择方法是否正确;
●相关性检验方法是否正确;
●特征删除或保留原因是否合理;
●每个任务分值10分,问题回答不全面酌情扣分;
演练场景3:
特征构造
特征选择主要用于发现每个特征对模型构建的重要程度,剔除对模型构造影响较小的变量,从而达到降维的目的。
特征构造是从原始数据中人工发现一些有意义的模型特征,一方面基于业务理解,通过组合几个不同的特征构造出一个新的变量;
另一方面,可以根据时间属性,划分出不同时间窗口的变量。
工程师A已经完成了特征的初筛,剔除了部分对模型影响较小的变量,现在尝试构造一些新的特征来提高模型精度。
设计模型特征时,需要考虑哪些问题?
1.特征是否对预测目标有实际意义;
2.特征对预测变量的重要程度如何;