企业失信预测 & 企业被处罚预测

版权声明:我是南七小僧,微信: to_my_love ,寻找人工智能相关工作,欢迎交流思想碰撞。 https://blog.csdn.net/qq_25439417/article/details/83622627

企业失信预测 & 企业被处罚预测

基于LGBM的特征工程

# -*- coding: utf-8 -*-
"""
Created on Thu Nov  1 11:29:54 2018

@author: Lenovo
"""

import pandas as pd
import lightgbm as lgb
from sklearn.cross_validation import train_test_split
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import roc_auc_score
import numpy as np

fenzhijigou = pd.read_csv(u'train/1.csv',encoding='utf-8')#分支机构
chediao = pd.read_csv(r'train/2.csv')#法人行政许可注(撤、吊)销信息
dajiqinquanchufa = pd.read_csv(r'train/3.csv')#双打办打击侵权假冒处罚案件信息
farenchufa = pd.read_csv(r'train/4.csv')#双公示-法人行政处罚信息
farenxingzhengxuke = pd.read_csv(r'train/5.csv')#双公示-法人行政许可信息
jigousheli = pd.read_csv(r'train/6.csv')#机构设立(变更)登记信息
biaozhangrongyu = pd.read_csv(r'train/7.csv')#企业表彰荣誉信息
#qiyefeizhengchang = pd.read_csv(r'train/qiyefeizhengchang.csv')
qiyejibenxinxi = pd.read_csv(r'train/8.csv')#企业基本信息&高管信息&投资信息
qiyeshuiwudengjixinxi = pd.read_csv(r'train/9.csv')#企业税务登记信息
xukenianjian = pd.read_csv(r'train/10.csv')#许可资质年检信息
shixirenxinxi = pd.read_csv(r'train/11.csv')#失信被执行人名单
zhaop = pd.read_csv(r'train/12.csv')#招聘数据
zizhibiangeng = pd.read_csv(r'train/13.csv')#资质登记(变更)信息
feizhengchanghu = pd.read_csv(r'train/14.csv')#企业非正常户认定



#qiye 
qiyename_dict={}
print(qiyejibenxinxi.groupby(['企业名称']).mean().index[0])
qiyename_dict = {name:cid for cid,name in enumerate(qiyejibenxinxi.groupby(['企业名称']).mean().index)}

feizhengchanghu['企业是否非正常户']=1#
chediao['企业是否被撤销过']=1#
dajiqinquanchufa['企业是否被打假']=1#
farenchufa['企业是否被行政处罚']=1#
biaozhangrongyu['企业是否非被表彰过']=1#
xukenianjian['企业是否资质年检']=1#
shixirenxinxi['企业是否失信被执行']=1#
zhaop['企业是否维持招聘']=1#

zhaopin_group = zhaop.groupby(['企业名称']).mean()
zhaopin_group['企业名称']=zhaopin_group.index
zhaopin_group['企业是否维持招聘']=1

#farenchufa_group = farenchufa.groupby(['企业名称']).mean()

qiye = pd.merge(qiyejibenxinxi,shixirenxinxi,on='企业名称',how='left')
qiye = pd.merge(qiye,farenchufa,on='企业名称',how='left')
qiye = pd.merge(qiye,chediao,on='企业名称',how='left')
qiye = pd.merge(qiye,biaozhangrongyu,on='企业名称',how='left')
qiye = pd.merge(qiye,dajiqinquanchufa,on='企业名称',how='left')
#qiye = pd.merge(qiye,dajiqinquanchufa,on='企业名称',how='left')
qiye = pd.merge(qiye,feizhengchanghu,on='企业名称',how='left')
qiye = pd.merge(qiye,zhaopin_group,on='企业名称',how='left')
qiye = pd.merge(qiye,xukenianjian,on='企业名称',how='left')

print('信息融合结束')
cols = list(qiye.columns)
#print()

#qiye.drop([
#        ['企业名称', '注册号', '统一社会信用代码_x', '注册资金', '注册资本(金)币种名称', '企业(机构)类型名称', '行业门类代码', '成立日期', '核准日期', '住所所在地省份', '姓名', '法定代表人标志', '首席代表标志', '职务', '投资人', '出资比例', '企业是否失信被执行', '企业是否被行政处罚', '关联机构设立登记表主键ID_x', '数据状态_x', '数据来源_x', '创建时间_x', '创建人ID_x', '信息提供部门编码_x', '信息提供部门名称_x', '提供日期_x', '任务编号_x', '组织机构代码_x', '机构全称英文_x', '工商注册号_x', '统一社会信用代码_y', '备注_x', '表彰文件号', '表彰名称', '荣誉等级', '荣誉内容', '认定机关全称', '认定日期_x', '交换单位全称', '企业是否非被表彰过', '关联机构设立登记表主键ID_y', '数据状态_y', '数据来源_y', '创建时间_y', '创建人ID_y', '信息提供部门编码_y', '信息提供部门名称_y', '提供日期_y', '任务编号_y', '行政处罚决定书文号_x', '被处罚的自然人姓名_x', '被处罚的自然人身份证号_x', '被处罚企业统一社会信用编码_x', '被处罚企业工商注册号_x', '被处罚的企业法定代表人姓名_x', '被处罚的企业法定代表人身份证号_x', '违反法律、法规或规章的主要事实_x', '行政处罚的种类和依据_x', '行政处罚的履行方式和期限_x', '作出处罚决定的行政执法机关名称_x', '作出处罚决定的日期_x', '公布方式及网址_x', '企业是否被打假_x', '关联机构设立登记表主键ID_x', '数据状态_x', '数据来源_x', '创建时间_x', '创建人ID_x', '信息提供部门编码_x', '信息提供部门名称_x', '提供日期_x', '任务编号_x', '行政处罚决定书文号_y', '被处罚的自然人姓名_y', '被处罚的自然人身份证号_y', '被处罚企业统一社会信用编码_y', '被处罚企业工商注册号_y', '被处罚的企业法定代表人姓名_y', '被处罚的企业法定代表人身份证号_y', '企业是否被打假_y','纳税人状态', '法定代表人姓名', '登记注册类型', '注册地址',  '企业是否非正常户']
#        
#        
#        
#        
#        
#        
#        
#        ])

save_cols=['住所所在地省份','企业(机构)类型名称','注册资本(金)币种名称','注册资金','企业是否被撤销过','企业是否失信被执行','企业是否被行政处罚','企业是否非被表彰过','企业是否被打假','企业是否维持招聘','企业是否非正常户','年检日期']

#new_qiye = pd.DataFrame({qiye[qiye.企业名称],qiye[qiye.姓名],qiye[qiye.投资人],qiye[qiye.企业是否失信被执行],qiye[qiye.企业是否被行政处罚],qiye[qiye.企业是否非被表彰过],qiye[qiye.企业是否被打假],qiye[qiye.企业是否非正常户],qiye[qiye.认定日期_y]})

qiye["年检日期"]=qiye["年检日期"].apply(lambda x: 1 if x is not np.NaN else x)
qiye = qiye.fillna(0)

for i in cols:
    if i not in save_cols:
        try:
            qiye.drop(i,axis=1,inplace=True)
        except:
            continue
    else:
        if i != '注册资金':
            qiye[i] = qiye[i].astype("category")
            
#qiye.认定日期_y

train_d,test_d = train_test_split(qiye,test_size=0.1, random_state=0)
#featurelist = ['企业是否被撤销过','企业是否非被表彰过','企业是否被打假','企业是否维持招聘','企业是否非正常户','年检日期']
tr_x = qiye.drop(['企业是否失信被执行','企业是否被行政处罚'],axis=1)
tr_y1 = qiye['企业是否被行政处罚']
tr_y2 = qiye['企业是否失信被执行']
#featurelist = featurelist.remove('企业是否被行政处罚')
n_fold = 10
kfold = StratifiedKFold(n_splits = n_fold,shuffle =True,random_state=2018)


params = {
    'task': 'train',
    'boosting_type': 'gbdt',  # GBDT算法为基础
    'objective': 'binary',  # 因为要完成预测用户是否买单行为,所以是binary,不买是0,购买是1
    'metric': 'auc',  # 评判指标
    #'max_bin': 255,  # 大会有更准的效果,更慢的速度
    'learning_rate': 0.1,  # 学习率
    'num_leaves': 32,  # 大会更准,但可能过拟合
    'max_depth': -1,  # 小数据集下限制最大深度可防止过拟合,小于0表示无限制
    'feature_fraction': 0.8,  # 防止过拟合
    'bagging_freq': 5,  # 防止过拟合
    'bagging_fraction': 0.8,  # 防止过拟合
#    'min_data_in_leaf': 21,  # 防止过拟合
#    'min_sum_hessian_in_leaf': 3.0,  # 防止过拟合
    'header': True  # 数据集是否带表头
}

val_score1 = []
val_score2 = []
for k,(tr_idx,val_idx) in enumerate(kfold.split(tr_x,tr_y1)):
    train_x,train_y1,train_y2,val_x,val_y1,val_y2 = tr_x.iloc[tr_idx],tr_y1.iloc[tr_idx],tr_y2.iloc[tr_idx],tr_x.iloc[val_idx],tr_y1.iloc[val_idx],tr_y2.iloc[val_idx]
    train_dataset1 = lgb.Dataset(train_x,train_y1)
    val_dataset1 = lgb.Dataset(val_x,val_y1)
    train_dataset2 = lgb.Dataset(train_x,train_y2)
    val_dataset2 = lgb.Dataset(val_x,val_y2)
    model1 = lgb.train(params,train_dataset1,  # 指明哪些特征的分类特征
        valid_sets=[val_dataset1],
        num_boost_round=2000000,
        early_stopping_rounds=50)
    val_score1.append(roc_auc_score(val_y1,model1.predict(val_x,num_iteration=model1.best_iteration)))


    model2 = lgb.train(params,train_dataset2,  # 指明哪些特征的分类特征
        valid_sets=[val_dataset2],
        num_boost_round=2000000,
        early_stopping_rounds=50)
    val_score2.append(roc_auc_score(val_y2,model2.predict(val_x,num_iteration=model2.best_iteration)))
print('cross validation auc mean:',(np.mean(val_score1)+np.mean(val_score2))/2)
print(val_score1,val_score2)
'''
train = lgb.Dataset(train_d.drop(['企业是否失信被执行','企业是否被行政处罚'],axis=1),label=train_d.企业是否被行政处罚,categorical_feature='auto')
val = lgb.Dataset(test_d.drop(['企业是否失信被执行','企业是否被行政处罚'],axis=1),label=test_d.企业是否被行政处罚,categorical_feature='auto',reference=train)
bst = lgb.train(
        params,
        train,
        categorical_feature=list([1,2]),  # 指明哪些特征的分类特征
        valid_sets=[val],
        num_boost_round=2000000,
        early_stopping_rounds=50)
'''
#lgb.LGBMRegressor()
#gbm = lgb.LGBMRegressor(learning_rate=0.03,n_estimators=200,max_depth=8)






#feizhengchanghu['企业是否非正常户']=1

#print(feizhengchanghu)
#qiye = pd.merge(qiyejibenxinxi,shixirenxinxi,on='企业名称',how='left')
#qiye = pd.merge(qiye,farenchufa,on='企业名称',how='left')
#qiye = pd.merge(qiye,biaozhangrongyu,on='企业名称',how='left')
#qiye = pd.merge(qiye,dajiqinquanchufa,on='企业名称',how='left')
#qiye = pd.merge(qiye,dajiqinquanchufa,on='企业名称',how='left')
#qiye = pd.merge(qiye,feizhengchanghu,on='企业名称',how='left')
#print(qiye)
#qiye = qiye.fillna({'失信人处罚':0})
#qiye = qiye.fillna({'法人处罚结果':0})
#
#qiye = qiye.dropna(axis=1,how='all')
#qiye.drop(['备注','创建时间','数据状态','关联机构设立登记表主键ID','数据来源','创建人ID', '信息提供部门编码',
#       '信息提供部门名称', '提供日期', '任务编号', '组织机构代码', '机构全称英文','交换单位全称', '工商注册号', '统一社会信用代码_y'],axis=1)
#
#qiye = qiye.fillna({'失信人处罚':0})
#qiye = qiye.fillna({'法人处罚结果':0})
#qiye = pd.merge(qiye,biaozhangrongyu,on='企业名称',how='left')
#
#qiye.columns
#qiye = qiye.drop(['备注','创建时间','数据状态','关联机构设立登记表主键ID','数据来源','创建人ID', '信息提供部门编码',
#       '信息提供部门名称', '提供日期', '任务编号', '组织机构代码', '机构全称英文', '工商注册号', '统一社会信用代码_y'],axis=1)
#qiye = qiye.dropna(axis=1, how='all')
#qiye.info
#qiye = qiye.fillna(0)
#qiye

猜你喜欢

转载自blog.csdn.net/qq_25439417/article/details/83622627
今日推荐