Sklearn XGBoost模型算法分类建模-----风控项目实战(PR曲线、KS、AUC、F1-Score各类指标)

本文介绍了一个使用Sklearn和XGBoost进行风控项目实战的过程,包括数据处理、模型选择、参数优化以及评估指标如PR曲线、AUC、KS和F1-Score等。通过5折交叉验证,得出模型仍有调优空间,并分享了模型的重要特征和性能指标。
摘要由CSDN通过智能技术生成

项目背景:二手手机需从前端质检项推断手机有无拆修问题
思路:
a)X值:前端各类质检项,对应映射ID+RANK值(涉及质检项会有等级排序,需进行RANK排序(属性值RANK一般需手工或是系统配置时候就有对应映射,如果是按照ID大小排序,则可以考虑SQL的进行rank() over(partition by))
b)Y值:业务角度选出有问题的手机质检项,拆修、进水等等,此类问题涉及到 多个属性值+多个属性值等级,需进行多层逻辑判断整合成 1,0,从而进行分类判断

代码逻辑:
a)读取数据,涉及数据较大且需pivot转换,这里考虑用yield进行分批读取

import numpy as np
import pandas as pd
# =============================================================================
# 数据清洗
# =============================================================================
property_value=pd.read_excel(r'C:\Users\116815\Desktop\建模属性项定义样本.xlsx',sheet_name='values')
property_value_merge=pd.read_excel(r'C:\Users\116815\Desktop\建模属性项定义样本.xlsx',sheet_name='values_merge')
num=36 #数据量
#读取数据
def yield_data(num):
    for num in range(1,num,1):
        data= pd.read_csv(r'D:\pycode\数据建模\建模数据\inspection_report_'+str(num)+'.csv')
        data.drop('inspection_dt',axis=1,inplace=True)
        data.drop_duplicates(inplace=True)
        data.dropna(inplace=True)
        data.drop(data[data['new_inspection_value_id']=='(NULL)'].index.values,axis=0,inplace=True)
        data['inspection_property_id']=data['inspection_property_id'].astype(int)
        data['new_inspection_value_id']=data['new_inspection_value_id'].astype(int)
        data=data.merge(property_value_merge,on=['new_inspection_value_id','inspection_property_id'],how='left')
        data_rank=data.pivot(index=['product_no'],columns=['inspection_property_id'],values='property_value_rank')  
        data=data.pivot(index=['product_no'],columns=['inspection_property_id'],values='new_inspection_value_id')  
        #data=data.applymap((lambda x: "".join(x.split()) if type(x) is str else x)) 
        yield data,data_rank
        

#迭代器分批处理数据
yield_data=yield_data(num)
data_list=[]
data_rank_list=[]
for i in range(1,num,1):
    data=next(yield_data)
    data_list.append(data[0])
    data_rank_list.append(data[1])
data=pd.concat(data_list)
data_rank=pd.concat(data_rank_list)

b)读取数据后,进行好坏样本转换,且根据专家经验剔除部分可能存在影响且排序较乱的属性ID

#好坏样本定义
data['good_bad']=1
for i in range(0,len(data),1):
    for j in [332,353,1279,2097,2098,2118]:
        #不为属性不检测和无异常,且不为空值
        if all(data[j].iloc[i] != x  for x in [2067,2129,6982,13791,13787,14165,12451,12453,12452,13794,13790,14168]) and pd.isnull(data[j].iloc[i])==False  :
            data['good_bad'].iloc[i]=0  
#删除坏样本判断属性项
data.drop([332,353,1279,2097,2098,2118],axis=1,inplace=True)
data_rank.drop([332,353,1279,2097,2098,2118],axis=1,inplace=True)
data.drop([456,806],axis=1,inplace=True)#去除颜色,内存
data_rank.drop([456,806],axis=1,inplace=True)#去除颜色,内存
#rank明细获取好坏属性
data_rank['good_bad']=data['good_bad']

c)模型选择,网格搜索最优参数(交叉验证)

# =============================================================================
# XGBOOST 可以考虑多模型 交叉验证后再去选模型 此处直接XGBOOST 出于此模型收敛快 且有缺失值
# ==========================================================================&
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值