使用pandas进行变量衍生

import pandas as pd
import numpy as np
dic={'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'])
使用pandas进行变量衍生

  上图是一个记录客户近10期的逾期记录的数据框,基于逾期行为数据进行变量的衍生。比如cust1客户,最近1期状态为M0,最近2期状态为M1,还款历史字段应为“0001110210”。

1.计算近p期总逾期次数

方法一:

def month_count(df, p):
    auto_value=np.where(df>0,1,0).sum(axis=1)
    return auto_value
auto_value=month_count(df1,10)

方法二:

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)

结果:

使用pandas进行变量衍生

2.计算近p期最大的连续逾期次数

def maxcontinue(x,term):
    result=0 
    temp=0 #临时存储的变量
    j=term+1 
    for i in range(1,j): 
        if (x['delq'+str(i)]==0) :
            temp=0 #如果当前字段不逾期,重新计算连续次数
        temp=temp+(1 if (x['delq'+str(i)]>0) else 0) #计算连续逾期次数
        result=max(result,temp) #每一段连续逾期比较,取最大的一段逾期
    return result #输出最大的逾期次数
df1['最大的连续逾期次数']=df1.apply(lambda x:maxcontinue(x,10),axis=1)
使用pandas进行变量衍生

即计算还款历史中连续大于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)

方法二:

def lastdelq_(df1,term):
    auto_value=[]
    for i in range(len(df1)):
        row_value=df1.ix[i,'delq1':'delq'+str(term)]
        if row_value.max()<=0:
            indexs=0
            auto_value.append(indexs)
        else:
            indexs=1
            for j in row_value:
                if j>0:
                    break
                indexs+=1
            auto_value.append(indexs)
    return auto_value
df1['最近一次逾期距今月份数_2']=lastdelq_(df1,10)
使用pandas进行变量衍生

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)
使用pandas进行变量衍生

5.计算逾期增加的次数

def maxcontinuechg(x,term):
    result=0 #输出结果默认为0
    temp=0 #临时变量设置为0
    for i in range(1,term): #循环取值
        j=i+1 #取后一位期数的值
        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)
使用pandas进行变量衍生

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 result
df1['每两个月间的增长量的最大值']=df1.apply(lambda x:maxtwomonth_interval(x,9),axis=1)
使用pandas进行变量衍生

7.计算最近p个月取最大值的月份距现在的月份数

def maxmonth_interval(x,term):
    df=x.ix[:,'delq1':'delq'+str(term)]
    df['_max'] = np.nanmax(df, axis=1)
    for i in range(1, term + 1):
        df['delq' + str(i)] = list(df['delq' + str(i)] == df['_max'])
    df_value = np.where(df == True, 1, 0)
    auto_value = []
    for i in range(len(df_value)):
        row_value = df_value[i, :]
        indexs = 1
        for j in row_value:
            if j == 1:
                break
            indexs += 1
        auto_value.append(indexs)
    return auto_value
df1['最近p个月取最大值的月份距现在的月份数']=maxmonth_interval(df1,10)
使用pandas进行变量衍生

8.计算最近p个月的均值

def Avg(x,p):
    df=x.ix[:,'delq1':'delq'+str(p)]
    auto_value=np.nanmean(df,axis=1)
    return auto_value
df1['最近p个月的均值']=Avg(df1,10)

计算最近p个月的和

def Tot(x,p):
    df=x.ix[:,'delq1':'delq'+str(p)]
    auto_value=np.nansum(df,axis=1)
    return auto_value
df1['最近p个月的求和']=Tot(df1,10)

计算最近p个月特征的最大值

def Max(x,p):
    df=x.ix[:,'delq1':'delq'+str(p)]
    auto_value=np.nanmax(df,axis=1)
    return auto_value
df1['最近p个月的最大值']=Max(df1,10)
使用pandas进行变量衍生

【作者】:Labryant

【原创公众号】:风控猎人

【简介】:某创业公司策略分析师,积极上进,努力提升。乾坤未定,你我都是黑马。

【转载说明】:转载请说明出处,谢谢合作!~

展开阅读全文

页面更新:2024-05-22

标签:变量   期数   最大值   字段   乾坤   上进   黑马   猎人   个数   次数   状态   客户   方法   数据   历史   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top