精华内容
下载资源
问答
  • 特征衍生

    千次阅读 2020-03-31 12:11:30
    特征衍生 在实际业务中,通常我们只拥有几个到几十个不等的基础变量,而多数变量没有实际含义,不适合直接建模,如用户地址(多种属性值的分类变量)、用户日消费金额(弱数值变量)。而此类变量在做一定的变换或者...

    摘自知乎专栏大数据风控 ,作者正阳
    特征衍生

    在实际业务中,通常我们只拥有几个到几十个不等的基础变量,而多数变量没有实际含义,不适合直接建模,如用户地址(多种属性值的分类变量)、用户日消费金额(弱数值变量)。而此类变量在做一定的变换或者组合后,往往具有较强的信息价值,对数据敏感性和机器学习实战经验能起到一定的帮助作用。所以我们需要对基础特征做一些衍生类的工作,也就是业内常说的如何生成万维数据。

    特征衍生也叫特征构建,是指从原始数据中构建新的特征,也属于特征选择的一种手段。特征构建工作并不完全依赖于技术,它要求我们具备相关领域丰富的知识或者实践经验,基于业务,花时间去观察和分析原始数据,思考问题的潜在形式和数据结构,从原始数据中找出一些具有物理意义的特征。

    找到可以拓展的基础特征后,便可用如下几种方式衍生特征:

    特征扩展
    合成特征
    特征组合
    特征交叉
    乍一听,挺难懂,这都什么东西,有什么区别?其实这些概念基本都一个意思,就一些小细节会有不同。有笔者说:合成特征 (synthetic feature)和特征组合(Feature Crosses)不太一样,特征交叉是特征组合的一个子集。

    我们简单讲3个概念:

    1.特征扩展

    基于一个特征,使用特征值打平(扩展)的方式衍生多个标注类型的特征,也可以理解为离散化。对于分类变量,直接one-hot编码;对于数值型特征,离散化到几个固定的区间段,然后用one-hot编码。比如信贷场景逾期天数:

    这里可以起到两个作用:①把线性函数转换成分段阶跃函数,减少过拟合。 ②标注 ,方便后续特征交叉组合

    2.特征组合

    指将两个或多个输入特征通过数学运算进行组合。分为如下几种情况: - 数值运算 - 如对特征进行加,减,乘,除 - 特征交叉 - 对多个特征进行交叉组合,或做交,并,补,笛卡尔集等运算。(可参考后面案例) - 暴力交叉,暴力交叉可能产生稀疏问题。

    在实践中,扩展线性模型时辅以特征组合一直都是训练大规模数据集的有效方法,机器学习模型很少会组合连续特征。不过,机器学习模型却经常组合独热特征矢量,将独热特征矢量的特征组合视为逻辑连接。

    3.合成特征

    合成特征的思想很简单,通过将单独的特征进行组合(相乘或求笛卡尔积)而形成的合成特征。是一种让线性模型学习到非线性特征的方式:包括以下类型:

    将一个特征与其本身或其他特征相乘(称为特征组合)。比如属性A有三个特征,属性B有两个特征,笛卡尔积后就有六个组合特征。
    两个特征相除。
    对连续特征进行分桶,以分为多个区间分箱。
    说明: 通过标准化或缩放单独创建的特征不属于合成特征。

    说明: 合成特征与组合特征关系在于:特征组合广义上包含合成特征,合成特征则改变了特征的线性关系,属于无中生有。

    自动衍生

    包括自动衍生和深度衍生的方法,可以缩减时间成本,构建维度更广更全面的新生特征。具体可以参考:Featuretools

    展开全文
  • 1. 构建信用风险类型的特征 2. 特征的分箱 分箱的优点 Best-KS分箱法和卡方分箱法 3. 特征信息度的计算和意义
  • 【特征工程】特征衍生+案例

    千次阅读 2019-07-11 09:03:19
    特征衍生+案例

    在这里插入图片描述
    问:特征衍生上千、万的变量,是怎么做的?
    问:大家是如何衍生出成千上万个变量的?衍生变量是怎么生成的?

    研习社-上海-桂浩:
    请教一个问题,大家是如何衍生出成千上万个变量的?衍生变量是怎么生成的
    云何-simple:
    这是特征工程阶段所要做的事情
    研习社-上海-桂浩:
    基于时间的维度细分,组合一些基础变量等等
    研习社-杭州-小五:
    可以用sql,也可以用python,自己熟悉的就行啊
    研习社-杭州-小五:
    先自己写一个大概的衍生框架,然后根据框架写代码就好了
    云何-simple:
    需要衍生哪些特征 这个是重点

    关键词

      特征衍生、特征构建、合成特征、特征组合、自动化特征衍生

    特征衍生

      在实际业务中,通常我们只拥有几个到几十个不等的基础变量,而多数变量没有实际含义,不适合直接建模,如用户地址(多种属性值的分类变量)、用户日消费金额(弱数值变量)。而此类变量在做一定的变换或者组合后,往往具有较强的信息价值,对数据敏感性和机器学习实战经验能起到一定的帮助作用。所以我们需要对基础特征做一些衍生类的工作,也就是业内常说的如何生成万维数据。

      特征衍生也叫特征构建,是指从原始数据中构建新的特征,也属于特征选择的一种手段。特征构建工作并不完全依赖于技术,它要求我们具备相关领域丰富的知识或者实践经验,基于业务,花时间去观察和分析原始数据,思考问题的潜在形式和数据结构,从原始数据中找出一些具有物理意义的特征。

      找到可以拓展的基础特征后,便可用如下几种方式衍生特征:

    • 特征扩展
    • 合成特征
    • 特征组合
    • 特征交叉

      乍一听,挺难懂,这都什么东西,有什么区别?其实这些概念基本都一个意思,就一些小细节会有不同。有笔者说:合成特征 (synthetic feature)和特征组合(Feature Crosses)不太一样,特征交叉是特征组合的一个子集。

      我们今天,简单讲3个概念:

    1.特征扩展

      基于一个特征,使用特征值打平(扩展)的方式衍生多个标注类型的特征,也可以理解为离散化。对于分类变量,直接one-hot编码;对于数值型特征,离散化到几个固定的区间段,然后用one-hot编码。比如信贷场景逾期天数:

      这里可以起到两个作用:①把线性函数转换成分段阶跃函数,减少过拟合。 ②标注 ,方便后续特征交叉组合

    2.特征组合

      指将两个或多个输入特征通过数学运算进行组合。分为如下几种情况:

    • 数值运算
      • 如对特征进行加,减,乘,除
    • 特征交叉
      • 对多个特征进行交叉组合,或做交,并,补,笛卡尔集等运算。(可参考后面案例)
      • 暴力交叉,暴力交叉可能产生稀疏问题。

      在实践中,扩展线性模型时辅以特征组合一直都是训练大规模数据集的有效方法,机器学习模型很少会组合连续特征。不过,机器学习模型却经常组合独热特征矢量,将独热特征矢量的特征组合视为逻辑连接。

    3.合成特征

      合成特征的思想很简单,通过将单独的特征进行组合(相乘或求笛卡尔积)而形成的合成特征。是一种让线性模型学习到非线性特征的方式:包括以下类型:

    • 将一个特征与其本身或其他特征相乘(称为特征组合)。比如属性A有三个特征,属性B有两个特征,笛卡尔积后就有六个组合特征。
    • 两个特征相除。
    • 对连续特征进行分桶,以分为多个区间分箱。

      说明: 通过标准化或缩放单独创建的特征不属于合成特征。

      说明: 合成特征与组合特征关系在于:特征组合广义上包含合成特征,合成特征则改变了特征的线性关系,属于无中生有。

    自动衍生

      包括自动衍生和深度衍生的方法,可以缩减时间成本,构建维度更广更全面的新生特征。具体可以参考:Featuretools

    实操案例

      下面,我们基于用户特征扩展、特征组合等方法,对单个用户常见的运营商数据中的通话日志信息account_info,做一个特征衍生的案例。

      我们可以看到,用户通话信息宽表中的基础特征只有9个,而且在没做变换之前,多数特征不能直接使用。因此,我们用上述几种方法展开这个宽表。

    #特征衍生1,更改字段含义,离散化特征,去除边缘数据的影响
    tmp1['cutoff_date']      = self.cutoff_date
    tmp1['call_time']        = tmp1['call_time'].map(lambda x : int(x))
    tmp1['call_type_name']   = np.where(tmp1['call_type_name'] =='主叫','callout','callin')
    tmp1['call_land_type']   = tmp1[['call_address','contact_area']].apply(lambda x : 'local' if x['call_address'] == x['contact_area'] else 'inland',axis = 1)
    tmp1['call_time_type']   = tmp1['call_time'].map(lambda x : 'short' if int(x) <60 else 'midle' if int(x)<300 else 'long')
    tmp1['contact_type']     = tmp1['contact_type'].fillna('')
    tmp1['call_special']     = np.where(tmp1['contact_type'].str.contains('借贷'),'special','normal')
    tmp1['call_period']      = tmp1['call_start_time'].apply(lambda x: 'night' if 0<int(pd.to_datetime(x).strftime("%H")) <5 else 'day')
    

      可以看到,新增了call_land、call_type、call_time、call_period等字段(主被叫、本外地、时长、日夜间、特殊,行为习惯等判别依据 )

      之后,基于时间序列,做稀疏编码

    #特征衍生2,基于时间序列,做与cutofftime的稀疏编码,分别为:①距cutofftime的月份 ②距cutofftime 30,60,90,120,150,180 天内
    tmp1['freq'],tmp1['dtot']=1,1
    tmp1['diff_time'] =DT.calu_datediff2(indata=tmp1,date_1='cutoff_date',date_2='call_start_time')
    tmp1 = DT.bin_date(indata=tmp1,binlist=[30*v for v in [1,3,6,12] ],var='diff_time',varname='d')
    tmp1 = DT.bin_date2(indata=tmp1,binlist=[30,60,90,120,150,180],var='diff_time',varname='dt') 
    

      此时宽表的特征已经扩增到30+

      假设宽表的构建已基本完成,接下来就对该用户做基于时间序列和属性特征的交叉组合

    def call_info_feature1(self,indata):
        #主叫、本地、时长、夜间、特殊情况变量衍生
        tmp1=indata.copy()
        prefix = 'CALL'
        grp_var1,grp_var21,grp_var22,grp_var23,grp_var24 = ['call_type_name'],['call_land_type'],['call_time_type'],['call_special'],['call_period']
        var_name_list = ['freq']
        func_list     = [pd.Series.count]
        grp_dict_all  = ['total']
        grp_dict1 = [list({'callout':'callout','callin':'callin'})]
        for i in grp_dict1:
            grp_dict1_all = grp_dict_all + i 
        grp_dict21     = [list({'local':'local','inland':'inland','other':'other'})]
        for i in grp_dict21:
            grp_dict21_all = grp_dict_all + i 
        grp_dict22     = [list({'short':'short','midle':'midle','long':'long'})]
        for i in grp_dict22:
            grp_dict22_all = grp_dict_all + i 
        grp_dict23     = [list({'special':'special','normal':'normal'})]
        for i in grp_dict23:
            grp_dict23_all = grp_dict_all + i 
        grp_dict24     = [list({'night':'night','day':'day'})]
        for i in grp_dict24:
            grp_dict24_all = grp_dict_all + i 
        tmp_ds = pd.DataFrame()
        for i,j in zip([grp_var21,grp_var22,grp_var23,grp_var24],[grp_dict21_all,grp_dict22_all,grp_dict23_all,grp_dict24_all]):
            tmp_1 = DT.feature_derived1(indata = tmp1,prefix =prefix,grp_var1 = grp_var1,grp_var2 = i,var_name_list = var_name_list,func_list = func_list,grp_dict1_all = grp_dict1_all,grp_dict2_all = j).T # 主被叫、本地外地、长短时长
            tmp_ds = tmp_ds.append(tmp_1)
        tmp_ds = tmp_ds.T    
        tmp_ds['idvar'] = self.idvar
        return tmp_ds
    
    
    # 特征衍生函数
    def feature_derived1(self,indata,prefix,grp_var1,grp_var2,var_name_list,func_list,grp_dict1_all,grp_dict2_all):
        tmp_ds = indata.copy()   
        
        flag_list   = ['d30', 'd90','d180','d360','dtot']
        flag_series = ['dt0','dt1','dt2','dt3','dt4','dt5']
        col1=[f for f in flag_list+flag_series] 
        if flag_series != []:
            col2 = ["b{num}_{fun}".format(num=num,fun=fun)for num in [3,6] for fun in ['max', 'avg','sum']]
            col3 = ['bm13_rate'] 
        else:
            col2,col3 = [],[]
        for  n,input_var in enumerate(var_name_list):           
            for dt in flag_list+flag_series:
                tmp_ds[dt] = np.where(tmp_ds[dt]==1,tmp_ds[input_var],np.nan)
        tmp_ds['_total1_'] = 'total'
        tmp_1 = pd.DataFrame()        
        for gv in grp_var1 + ['_total1_']:
            tmp_1 = tmp_1.append(tmp_ds.rename(columns={gv:'grp_var1'}),ignore_index=True)
        tmp_1['_total2_']='total'
        tmp_2=pd.DataFrame()        
        for gv in grp_var2 + ['_total2_']:
            tmp_2=tmp_2.append(tmp_1.rename(columns={gv:'grp_var2'}),ignore_index=True)
        tmp_2=tmp_2.groupby(['grp_var1','grp_var2'])[[f for f in flag_list+flag_series]].agg(func_list).reset_index()
        for name in ['grp_var2','grp_var1']:
            if name not in tmp_2.columns:
                tmp_2[name]=np.nan
        tmp_2=tmp_2[['grp_var2','grp_var1'] +[f for f in flag_list+flag_series]]        
        tmp_2.columns=['grp_var2','grp_var1']+[f for f in flag_list+flag_series]
        
        if flag_series != []:
            for num in [3,6]:
                tmp_2['b{num}_max'.format(num=num)] =tmp_2[[f for f in flag_series][:num]].max(axis=1)
                tmp_2['b{num}_avg'.format(num=num)] =tmp_2[[f for f in flag_series][:num]].mean(axis=1)
                tmp_2['b{num}_sum'.format(num=num)] =tmp_2[[f for f in flag_series][:num]].sum(axis=1)
            tmp_2['bm13_rate']   =np.where( 
                    ((tmp_2[flag_series[1]] +tmp_2[flag_series[2]]).isnull()) | ((tmp_2[flag_series[1]] +tmp_2[flag_series[2]])==0),
                    0,100*2*tmp_2[flag_series[0]] /(tmp_2[flag_series[1]] +tmp_2[flag_series[2]]))
        tmp_2=tmp_2[['grp_var2','grp_var1'] + col1+col2+col3]
        
        tmp_3=pd.DataFrame(pd.pivot_table(tmp_2,values=col1+col2+col3,columns=['grp_var1','grp_var2'])).T
        
        columns_list = [(v1,v2,v3) for v3 in grp_dict2_all for v2 in grp_dict1_all for v1 in col1+col2+col3]
        for var_missing in [name for name in columns_list if name not in tmp_3.columns]:
            tmp_3[var_missing]=np.nan
        tmp_3=tmp_3[columns_list]
        tmp_3.columns=[prefix+"_"+name[2]+"_"+name[1]+"_"+ name[0] for name in tmp_3.columns]     
        return tmp_3
    
    

      运行,可以看到,衍生后,生成总计757个字段

      接下来,继续增加通讯录、联系人、短信、黑名单、标签等新的特征维度,用于交叉生成特征

    tmp_2 = self.call_info_feature2(indata = tmp1) # 通话记录详单、与通讯录匹配情况,构建用户社交画像。判断通讯录真实性,判断通话真实性,统计频繁联系人表单,输入催收系统
    tmp_3 = self.call_info_feature3(indata = tmp1) # 联系人contact_type命中标记:①警察②司法③贷款④催收等lable,识别账号社会风险。通过模糊匹配,精准匹配等异常标记进入本地名单库,识别本人风险
    tmp_4 = self.call_info_feature4(indata = tmp1) # 紧急联系人、通讯录、联系人,运用复杂网络、社团识别等技术,通过手机号命中黑名单、异常号码库。识别一度联系人风险,判断本人欺诈性
    

      依据经验,分析维度越多,衍生特征越多,这样,万维的数据就构建起来了。

      如今,生产环境中遇到离散特征衍生时的处理方式主要有两种:

    • ① 在做前期数据分析的时候,就将想要扩展和组合的数据提前处理好。
      • 优点:经验充分,扩展后的数据往往有较好的效果;
      • 缺点:人工处理,而且基本是写死成数据的,后期模型训练中不易调整。
    • ② 使用类似独热编码(One-Hot-Encoding)的方案,将特征值全量打开,实现特征的自动化扩展。
      • 优点:省时省力
      • 缺点:数据全量打开,以至过程和结果不可控,且可能存在无意义特征的爆炸导致不可计算或者计算效率低等。

      因此,我们提出一种较为合适的方法:将要处理的离散特征的特征值情况进行展现,然后基于其实际情况进行有选择可控制的特征自动化扩展和组合。

      方法如下:

    • 遍历产生离散特征值(自动)
    • 计算特征离散程度和各属性值占比,排序选择需要扩展的特征。(自动+手动)
    • 基于选择、处理后的特征值,扩展特征(自动)
    • 基于选择、处理后的特征值,组合特征(自动)
    • 特征量化
    • 特征规范化

    【参考】

    • 特征工程之自动特征生成(自动特征衍生)工具Featuretools介绍 汀桦坞 https://blog.csdn.net/wiborgite/article/details/88761330
    • 机器学习之特征组合、特征交叉 作者:Madazy 原文:https://blog.csdn.net/Madazy/article/details/84110400
    • 特征组合之DeepFM 作者:Madazy 原文:https://blog.csdn.net/Madazy/article/details/84337609
    • 特征组合之FFM 作者:Madazy 原文:https://blog.csdn.net/Madazy/article/details/84316840
    • 利用GBDT模型构造新特征 作者:Bryan__ 原文:https://blog.csdn.net/bryan__/article/details/51769118
    • FM及FFM算法 作者:陈玓玏 https://blog.csdn.net/weixin_39750084/article/details/83549027
    • 特征选择与特征组合 北冥有小鱼 https://blog.csdn.net/qq_26598445/article/details/80998760
    • 特征组合&特征交叉 (Feature Crosses) kugua233 https://segmentfault.com/a/1190000014799038
    • 机器学习之离散特征自动化扩展与组合 DemonHunter211 https://blog.csdn.net/kwame211/article/details/78109254
    • 自动特征工程 - AI科技大本营- https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/82392735
    • 深度特征合成:实现数据科学自动化 forever_24 https://blog.csdn.net/u014686462/article/details/84063667
    • 研习社-涛哥

      对数据分析、机器学习、数据科学、金融风控等感兴趣的小伙伴,需要数据集、代码、行业报告等各类学习资料,可添加微信:wu805686220(记得要备注喔!),也可关注微信公众号:风控圏子(别打错字,是圏子,不是圈子,算了直接复制吧!)

    关注公众号后,可联系圈子助手加入如下社群:

    • 机器学习风控讨论群(微信群)
    • 反欺诈讨论群(微信群)
    • python学习交流群(微信群)
    • 研习社资料(qq群:102755159)(干货、资料、项目、代码、报告、课件)

    相互学习,共同成长。

    展开全文
  • 一 定义问题 基本统计分析 ... 特征衍生 特征选择 风控建模的时候需要注意 信用评分分段之后,正常的效果,评分和预期的概率应该是单调的 按照评分进行分组 ..

    特征工程:

    • 一 定义问题

      • 基本统计分析

        • 工具选择

      • 建模分析(选择算法)

        • 监督/无监督

        • 监督

          • 分类

          • 回归

    • 算法确定下来之后

      • 数据预处理

      • 特征衍生

      • 特征选择

    • 风控建模的时候需要注意

      • 信用评分分段之后,正常的效果,评分和预期的概率应该是单调的

        • 按照评分进行分组

        • 评分越高的组,坏人的概率应该更低

      • 如果评分和预计的概率不是单调的,模型时有问题的

      • 模型人群分布的稳定性

        • 在业务没有变化的前提下,间隔一段时间,在同一分段的人群总数占全体用户的比例,应该不会有大的波动

    • 跨时间验证

      • 上线之前 需要用最近时间的数据对模型进行评估

      • 训练模型的时候 最近两个月~6个月的数据 是不会用来训练模型

    • 正常的信贷业务 坏账率 合理比例 低于5%

    • B卡 贷后管理 用户注册数据 从三方购买的,如果半年之内 没有新的操作

      • 从不同渠道买来的评分数据 有效期半年

      • 用户第一次来的时候 个人用户的数据不全,需要从其它合作方购买 同盾

    特征衍生:

    • 利用数值量的统计值做特征衍生

      • 如果一个用户(id)在数据集中有多条记录,可以根据这个id做分组,获取当前id对应的所有记录,对这些记录求

        • 平均值

        • 标准差(方差)

        • 求和

        • 求最大/最小

        • 极差

        • 计算条目数量

    数据处理-》特征衍生-》特征选择

     

    • 模型融合思路

      • 训练两个模型

        • MSE 在误差比较大的情况下 损失比MAE的惩罚更严重

          • 误差平方求平均

        • MAE

          • 误差绝对值求平均

        • 误差比较大的时候 更多的用MSE的结果放到最终的模型中

        • 误差比较小的时候 用MAE

    • 特征衍生

      • 如果是多个分类特征 类别的值都是0,1 通过相乘做特征交叉

      • 特征相除 需要注意避免除0的异常 分母+1

    df_data['话费稳定'] = df_data['用户账单当月总费用(元)'] / (df_data['用户当月账户余额(元)'] + 1)
    df_data['相比稳定'] = df_data['用户账单当月总费用(元)'] / (df_data['用户近6个月平均消费值(元)'] + 1)
    df_data['缴费稳定'] = df_data['缴费用户最近一次缴费金额(元)'] / (df_data['用户近6个月平均消费值(元)'] + 1)

     

    展开全文
  • 机器学习之金融信贷风控(二)申请评分卡中的数据预处理和特征衍生(未完待续)-附件资源
  • 时间切片特征衍生

    2019-10-28 20:31:48
    这样的变量,使用sum(case when date then amount else 0 end) 即可,如果是出差在外只能处理离线数据不能使用数据库时,这个时候就要用python去构造时间切片类的特征。整理了自己之前写过的代码,往往都太笨拙和...

    在sql中比较容易处理类似“近n个月金额之和/最大值/最小值/平均值” 这样的变量,使用sum(case when date  then amount else 0 end) 即可,如果是出差在外只能处理离线数据不能使用数据库时,这个时候就要用python去构造时间切片类的特征。整理了自己之前写过的代码,往往都太笨拙和重复。

    import pandas as pd
    import numpy as np
    import time as time
    #生成实例数据集
    data = pd.DataFrame({'id':['a','a','b','b','a'],
                        'billdate': ['2018-09-01','2018-08-01','2018-08-01','2018-01-01','2018-11-01'],
                        'amount':list(np.random.randint(1,100,5)),
                        'interest':np.random.rand(5),
                        'dt': ['2018-10-01','2018-10-01','2018-11-01','2018-11-01','2018-10-01']
                        })
    data

    # 首先计算时间差
    def month_sub(d1, d2):
        year = int(d1[:4]) - int(d2[:4])
        month = int(d1[5:7]) - int(d2[5:7])
        return year*12 + month
    data['month_diff'] = data.apply(lambda row: month_sub(row['dt'], row['billdate']), axis=1)
    def feature(data,cols:list,months:list,only_mark,merge_ori=True):
        start = time.time()
        # 原数据集的 唯一主键
        df = pd.DataFrame({only_mark:list(set(data[only_mark]))})
        for month in months:
            df1 = pd.DataFrame({only_mark:list(set(data[only_mark]))})
            for col in cols:
                agg_dict = {
                            "last_%s_%s_count"%(month,col):"count",
                            "last_%s_%s_sum"%(month,col):"sum",
                            "last_%s_%s_max"%(month,col):"max",
                            "last_%s_%s_min"%(month,col):"min",
                            "last_%s_%s_mean"%(month,col):"mean",
                            "last_%s_%s_var"%(month,col):"var",
                            "last_%s_%s_std"%(month,col):"std",
                            "last_%s_%s_median"%(month,col):"median",
                            "last_%s_%s_skew"%(month,col):"skew"
                                                                    }
                # 选取时间切片内的数据 进行groupby聚合计算
                sta_data = data[data['month_diff']<=month].groupby([only_mark])[col].agg(agg_dict).reset_index()
                df1 = df1.merge(sta_data,how = "left",on = only_mark)
            df = df.merge(df1,how = "left",on = only_mark)
        # 是否与原数据集关联  
        if merge_ori:
            print("merge the original data")
            df = df.merge(data,how="right",on=only_mark).fillna(0) #视情况定 是否需要填充0
        else:
            df = df.fillna(0)
        end = time.time()
        cost = end-start
        print("cost time %.2f s"%(cost))
        return  df
    if __name__=="__main__":
        cols = ['amount', 'interest']
        months = [1,3]
        result=feature(data,cols,months,"id",merge_ori = 0)

    展开全文
  • 深度特征合成 深度特征合成(DFS)是一种用于对关系数据和时间数据执行特征工程的自动方法。 输入数据 深度特征合成需要结构化数据集才能执行特征工程。为了演示DFS的功能,我们将使用客户交易数据集。 In [1]...
  • FeatureTools是进行特征自动生成的框架,它可以将时间和关系数据集转换为可用于机器学习的特征矩阵。 5分钟快速开始 下面是使用深度特征合成(DFS)执行自动化特征工程的示例。在本例中,我...
  • 申请评分卡中的数据预处理和特征衍生 构建信用风险类型的特征 数据预处理 特征的分箱 Best-KS ChiMerge 卡方分箱法 WOE编码 WOE编码的意义 申请评分卡中的数据预处理和特征衍生 ...
  • 任务说明 特征衍生 特征挑选:分别用IV值和随机森林等进行特征选择 ……以及你能想到特征工程处理 特征衍生 IV值 随机森林 参考博客
  • 申请评分卡中的数据预处理和特征衍生 本章文章主要讲解以下内容 构建信用风险类型的特征 特征分箱 WOE编码 构建信用风险类型的特征 在我们运用模型之前,我们首先要进行特征工程,其本质是一项工程活动,目的...
  • 申请评分卡中的数据预处理和特征衍生 模型处理的一般流程: 构建信用风险模型的特征 获取数据 链接:https://pan.baidu.com/s/1CsY11ArZ6YK3o1icghWj2w 提取码:znbs 数据预处理 1.基本处理: 原始数据带有一定的...
  • 常用的特征衍生 计数:过去1年内申请贷款的总次数 求和:过去1年内的网店消费总额 比例:贷款申请额度与年收入的占比 时间差:第一次开户距今时长 波动率:过去3年内每份工作的时间的标准差 特征的分箱 分箱的定义...
  • 这个时候就需要在原数据特征的基础上衍生新的特征以此来增加特征的数量。 只要方法得当的话,通常情况下,效果会比原来的效果要好一点。 多项式法构造特征 import pickle import time from sklearn.preprocessing ...
  • 1.4 构建衍生特征 下列是一些可以解决以上问题所定义的函数,示例可看下一篇博客 import pandas as pd import random import numpy as np import operator import numbers from sklearn.ensemble import ...
  • 申请评分卡中的数据预处理和特征衍生(下) 在上一遍申请评分卡中的数据预处理和特征衍生(上),我们主要讲解了 构建信用风险类型的特征 特征分箱 WOE编码 也就是对应图中(数据预处理、特征构造) 这篇文章...
  • python衍生特征

    2020-09-30 15:40:20
    1.衍生方式一 df=pd.DataFrame({'id':[2,2,2,3,3,5],'cur':['cur1','cur2','cur3','cur1','cur1','cur2']}) df df_tmp=pd.crosstab(df['id'],df['cur']) df_tmp ''' 遇到问题没人解答?小编创建了一个Python学习...
  • ML之FE:基于单个csv文件数据集(自动切分为两个dataframe表)利用featuretools工具实现自动特征生成/特征衍生 目录 基于单个csv文件数据集(自动切分为两个dataframe表)利用featuretools工具实现自动特征...
  • [特征工程系列三]显性特征衍生

    千次阅读 2018-02-11 17:38:30
    往往是原有数据字段通过加减乘除等操作生成新的字段,这些字段在结合一些线性算法做训练的时候往往能起到提升模型效果的作用,接下来就简单介绍下特征衍生。因为衍生特征这个方法是需要结合业务特点的,范围太广,...
  • 任务描述: 特征挑选:分别用IV值和随机森林等进行特征选择 ……以及你能想到特征工程处理 具体实现:
  • 特征工程 (1)分类特征 浏览房屋数据的时候,除了看到“房价” (price)和“面积”(rooms)之类的数值特征,还会有“地点”(neighborhood)信息,数 据可能像这样: data = [ {'price': 850000, 'rooms': 4, '...
  • ML之FE:基于load_mock_customer数据集(模拟客户)利用featuretools工具实现自动特征生成/特征衍生 目录 基于load_mock_customer数据集(模拟客户)利用featuretools工具实现自动特征生成/特征衍生 设计思路...
  • 特征构造 1.1 分类型变量—重分组 1.2 分类型变量—one-hot编码 2.1 连续型变量—非线性衍生 2.2 连续型变量—简单组合 2.3 连续型变量—正态转换 开发环境jupyter notebook ...
  • 交易日期是反映客户交易特征的重要变量,如果直接做计数、均值处理基本没有太大意义。一般来说其中包含的最重要的信息就是交易的具体日期。对于cus001不难看出,该客户在2019年1月的交易日为3、4、20、25日。根据...
  • 特征衍生 基础特征对样本信息的表述有限,可通过特征衍生出新含义的特征进行补充。特征衍生是对现有基础特征的含义进行某种处理(聚合/转换之类),常用方法如: ① 结合业务的理解做衍生: 聚合的方式是指对字段...
  • ML之FE:基于load_mock_customer数据集(模拟客户,单个DataFrame)利用featuretools工具实现自动特征生成/特征衍生 推荐文章ML之FE:基于load_mock_customer数据集(模拟客户)利用featuretools工具...
  • 前端采集到的原始数据通常来说是数量庞大的流水记录,这种数据隐藏信息杂乱无章,无法直接提供有...以下汇总整理了一些特征工程常用的方法,也是我经常用到的: 转载自: https://zhuanlan.zhihu.com/p/348850280 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,935
精华内容 12,374
关键字:

特征衍生