import pandas as pdimport numpy as npdic={'delq1':[0,0,1],'delq2':[1,1,2],'delq3':[2,0,3],'delq4':[0,1,4],'delq5':[1,2,5],'delq6':[1,3,0],'delq7':[1,0,1],'delq8':[0,0,2],'delq9':[0,1,3],'delq10':[0,2,0]}df1=pd.DataFrame(data=dic,index=['cust1','cust2','cust3']) 上图是一个记录客户近10期的逾期记录的数据框,基于逾期行为数据进行变量的衍生。比如cust1客户,最近1期状态为M0,最近2期状态为M1,还款历史字段应为“0001110210”。 1.计算近p期总逾期次数 方法一:
方法二: def delqcnt(x,term): result=0 j=term+1 for i in range(1,j): result=result+(1 if (x['delq'+str(i)]>0) else 0) #计算每期记录是否逾期 return result #输出加总逾期次数结果df1['加总逾期次数']=df1.apply(lambda x:delqcnt(x,10),axis=1) 结果: 2.计算近p期最大的连续逾期次数
即计算还款历史中连续大于0的个数,cust1客户最大连续逾期次数为3,为1->1->1,cust3连续逾期次数为5,为1->2->3->4->5。 3.最近一次逾期距今月份数 方法一: def lastdelq(x,term): result=99 #输出结果默认为99 j=term+1 #为了获取到相应的字段 for i in range(1,j): #循环取值 result=min(result,(i if (x['delq'+str(i)]>0) else 99)) #计算最近一次逾期距今月份数 return result #输出最近一次逾期距今月份数df1['最近一次逾期距今月份数_1']=df1.apply(lambda x:lastdelq(x,10),axis=1) 方法二:
4.计算逾期连续增加的次数 def maxcontinuechg(x,term): result=0 #输出结果默认为0 temp=0 #临时变量设置为0 for i in range(1,term): #循环取值 j=i+1 #取后一位期数的值 if (x['delq'+str(j)]<=x['delq'+str(i)]): temp=0 #若逾期期数没有增加,设置临时变量为0 temp=temp+(1 if (x['delq'+str(j)]>x['delq'+str(i)]) else 0) #计算逾期连续增加的次数 result=max(result,temp) #若有多段连续逾期,比对取最大的一段 return result #输出逾期连续增加的次数df1['逾期连续增加的次数']=df1.apply(lambda x:maxcontinuechg(x,10),axis=1) 5.计算逾期增加的次数
6.计算最近p个月,每两个月间的增长量的最大值 def maxtwomonth_interval(x,term): result=0 for i in range(1,term): j=i+1 temp=x[j]-x[i] # print(temp) result=max(result,temp) return resultdf1['每两个月间的增长量的最大值']=df1.apply(lambda x:maxtwomonth_interval(x,9),axis=1) 7.计算最近p个月取最大值的月份距现在的月份数
8.计算最近p个月的均值 def Avg(x,p): df=x.ix[:,'delq1':'delq'+str(p)] auto_value=np.nanmean(df,axis=1) return auto_valuedf1['最近p个月的均值']=Avg(df1,10) 计算最近p个月的和
计算最近p个月特征的最大值 def Max(x,p): df=x.ix[:,'delq1':'delq'+str(p)] auto_value=np.nanmax(df,axis=1) return auto_valuedf1['最近p个月的最大值']=Max(df1,10)
|
|