摘要:
合集:AI案例-ML-泛金融业
赛题:发债企业的违约风险预警-初赛
主办方:国泰君安
主页:http://ailab.aiwin.org.cn/competitions/70
AI问题:分类问题
数据集:发债企业2019-2020年之间的违约数据用于模型训练。
数据集价值:预测发债企业在2021年发生违约风险的概率。
解决方案:LightGBM分类
一、赛题描述
赛题背景
自2014年我国债券市场“刚性兑付”神话被打破后,债券违约现象日益升温,2018年债券市场有160只债券发生违约,涉及44家发债企业,违约余额高达1505.25亿元,违约严重程度达历史之最。在债券市场信用风险加速暴露、违约事件发生趋于常态化的背景下,如何对发债企业违约风险进行有效评估与提前预测成为当前面临的重要监管难题。由于信息不完全,单纯依靠财务数据已难以充分解释违约风险溢价问题。如何有效利用财务以外的其他数据,例如发债企业的舆情数据、股权上下游数据,对发债企业违约风险进行预测具有重要意义。
赛题任务
本赛题任务是利用机器学习、深度学习等方法训练一个预测模型,该模型可以学习发债企业的相关信息,以预测发债企业未来一段时间内是否存在违约风险。赛题的难点在于数据集中包括大量的发债企业相关信息(股东信息、对外投资信息以及舆情信息等等),如何从中提取有效的特征并进行风险预测成为本赛题的关键问题。
二、数据集内容
内容
本赛题将提供发债企业2019-2020年之间的违约数据用于模型训练,以预测发债企业在2021年发生违约风险的概率,其中发债企业范围为2019-2021年发行过债券的企业。初复赛提供用于预测的发债企业范围不变,在初赛的基础上,复赛将增加发债企业的股东数据、对外投资数据以及相关企业的舆情数据。
初赛提供的数据集如下:
- 企业的基本信息(只包含发债企业)
- 2018-2020年的财务指标数据
- 2018-2020年的舆情信息(只包含发债企业)
- 2019-2020年的违约记录
复赛提供的数据集如下:
- 企业的基本信息(包含发债企业及其股东企业和对外投资企业)
- 发债企业的股东信息
- 发债企业的对外投资信息
- 2018-2020年的财务指标数据
- 2018-2020年的舆情信息(包含发债企业及其股东企业和对外投资企业)
- 2019-2020年的违约记录
企业基本信息
ent_info.csv
列名 | 中文名 | 类型 | 说明 |
---|---|---|---|
ent_id | 企业ID | string | |
industryphy | 国民经济行业门类 | string | |
industryco | 国民经济行业 | string | |
opfrom | 经营(驻在)期限自 | string | |
opto | 经营(驻在)期限至 | string | |
esdate | 成立日期 | string | |
apprdate | 核准日期 | string | |
regcap | 注册资本 | double | 万元 |
enttype | 企业类型 | string | |
entstatus | 企业状态 | string | |
prov | 所属省 | string | |
city | 所属城市 | string | |
country | 所属县 | string | |
is_bondissuer | 是否发债企业 | string | Y: 是,N: 否 |
企业的财务指标数据
ent_financial_indicator.csv
列名 | 中文名 | 类型 | 说明 |
---|---|---|---|
ent_id | 公司ID | string | |
report_period | 报告期 | string | |
s_fa_extraordinary | 非经常性损益 | double | 元 |
s_fa_deductedprofit | 扣除非经常性损益后的净利润 | double | 元 |
s_fa_grossmargin | 毛利 | double | 元 |
s_fa_operateincome | 经营活动净收益 | double | 元 |
s_fa_investincome | 价值变动净收益 | double | 元 |
s_stmnote_finexp | 利息费用 | double | 元 |
s_stm_is | 折旧与摊销 | double | 元 |
s_fa_ebit | 息税前利润 | double | 元 |
s_fa_ebitda | 息税折旧摊销前利润 | double | 元 |
s_fa_fcff | 企业自由现金流量 | double | 元 |
s_fa_fcfe | 股权自由现金流量 | double | 元 |
s_fa_exinterestdebt_current | 无息流动负债 | double | 元 |
s_fa_exinterestdebt_noncurrent | 无息非流动负债 | double | 元 |
s_fa_interestdebt | 带息债务 | double | 元 |
s_fa_netdebt | 净债务 | double | 元 |
s_fa_tangibleasset | 有形资产 | double | 元 |
s_fa_workingcapital | 营运资金 | double | 元 |
s_fa_networkingcapital | 营运流动资本 | double | 元 |
s_fa_investcapital | 全部投入资本 | double | 元 |
s_fa_retainedearnings | 留存收益 | double | 元 |
s_fa_eps_basic | 基本每股收益 | double | 元 |
s_fa_eps_diluted | 稀释每股收益 | double | 元 |
s_fa_eps_diluted2 | 期末摊薄每股收益 | double | 元 |
s_fa_bps | 每股净资产 | double | 元 |
s_fa_ocfps | 每股经营活动产生的现金流量净额 | double | 元 |
s_fa_grps | 每股营业总收入 | double | 元 |
s_fa_orps | 每股营业收入 | double | 元 |
s_fa_surpluscapitalps | 每股资本公积 | double | 元 |
s_fa_surplusreserveps | 每股盈余公积 | double | 元 |
s_fa_undistributedps | 每股未分配利润 | double | 元 |
s_fa_retainedps | 每股留存收益 | double | 元 |
s_fa_cfps | 每股现金流量净额 | double | 元 |
s_fa_ebitps | 每股息税前利润 | double | 元 |
s_fa_fcffps | 每股企业自由现金流量 | double | 元 |
s_fa_fcfeps | 每股股东自由现金流量 | double | 元 |
s_fa_netprofitmargin | 销售净利率 | double | % |
s_fa_grossprofitmargin | 销售毛利率 | double | % |
s_fa_cogstosales | 销售成本率 | double | % |
s_fa_expensetosales | 销售期间费用率 | double | % |
s_fa_profittogr | 净利润/营业总收入 | double | % |
s_fa_saleexpensetogr | 销售费用/营业总收入 | double | % |
s_fa_adminexpensetogr | 管理费用/营业总收入 | double | % |
s_fa_finaexpensetogr | 财务费用/营业总收入 | double | % |
s_fa_impairtogr_ttm | 资产减值损失/营业总收入 | double | % |
s_fa_gctogr | 营业总成本/营业总收入 | double | % |
s_fa_optogr | 营业利润/营业总收入 | double | % |
s_fa_ebittogr | 息税前利润/营业总收入 | double | % |
s_fa_roe | 净资产收益率 | double | % |
s_fa_roe_deducted | 净资产收益率(扣除非经常损益) | double | % |
s_fa_roa2 | 总资产报酬率 | double | % |
s_fa_roa | 总资产净利润 | double | % |
s_fa_roic | 投入资本回报率 | double | % |
s_fa_roe_yearly | 年化净资产收益率 | double | % |
s_fa_roa2_yearly | 年化总资产报酬率 | double | % |
s_fa_roe_avg | 平均净资产收益率(增发条件) | double | % |
s_fa_operateincometoebt | 经营活动净收益/利润总额 | double | % |
s_fa_investincometoebt | 价值变动净收益/利润总额 | double | % |
s_fa_nonoperateprofittoebt | 营业外收支净额/利润总额 | double | % |
s_fa_taxtoebt | 所得税/利润总额 | double | % |
s_fa_deductedprofittoprofit | 扣除非经常损益后的净利润/净利润 | double | % |
s_fa_salescashintoor | 销售商品提供劳务收到的现金/营业收入 | double | % |
s_fa_ocftoor | 经营活动产生的现金流量净额/营业收入 | double | % |
s_fa_ocftooperateincome | 经营活动产生的现金流量净额/经营活动净收益 | double | |
s_fa_capitalizedtoda | 资本支出/折旧和摊销 | double | |
s_fa_debttoassets | 资产负债率 | double | % |
s_fa_assetstoequity | 权益乘数 | double | |
s_fa_dupont_assetstoequity | 权益乘数(用于杜邦分析) | double | |
s_fa_catoassets | 流动资产/总资产 | double | % |
s_fa_ncatoassets | 非流动资产/总资产 | double | % |
s_fa_tangibleassetstoassets | 有形资产/总资产 | double | % |
s_fa_intdebttototalcap | 带息债务/全部投入资本 | double | % |
s_fa_equitytototalcapital | 归属于母公司的股东权益/全部投入资本 | double | % |
s_fa_currentdebttodebt | 流动负债/负债合计 | double | % |
s_fa_longdebtodebt | 非流动负债/负债合计 | double | % |
s_fa_current | 流动比率 | double | |
s_fa_quick | 速动比率 | double | |
s_fa_cashratio | 保守速动比率 | double | |
s_fa_ocftoshortdebt | 经营活动产生的现金流量净额/流动负债 | double | |
s_fa_debttoequity | 产权比率 | double | % |
s_fa_equitytodebt | 归属于母公司的股东权益/负债合计 | double | % |
s_fa_equitytointerestdebt | 归属于母公司的股东权益/带息债务 | double | % |
s_fa_tangibleassettodebt | 有形资产/负债合计 | double | % |
s_fa_tangassettointdebt | 有形资产/带息债务 | double | % |
s_fa_tangibleassettonetdebt | 有形资产/净债务 | double | % |
s_fa_ocftodebt | 经营活动产生的现金流量净额/负债合计 | double | % |
s_fa_ocftointerestdebt | 经营活动产生的现金流量净额/带息债务 | double | % |
s_fa_ocftonetdebt | 经营活动产生的现金流量净额/净债务 | double | % |
s_fa_ebittointerest | 已获利息倍数(EBIT/利息费用) | double | % |
s_fa_longdebttoworkingcapital | 长期债务与营运资金比率 | double | % |
s_fa_ebitdatodebt | 息税折旧摊销前利润/负债合计 | double | % |
s_fa_turndays | 营业周期 | double | 天 |
s_fa_invturndays | 存货周转天数 | double | 天 |
s_fa_arturndays | 应收账款周转天数 | double | 天 |
s_fa_invturn | 存货周转率 | double | 次 |
s_fa_arturn | 应收账款周转率 | double | 次 |
s_fa_caturn | 流动资产周转率 | double | 次 |
s_fa_faturn | 固定资产周转率 | double | 次 |
s_fa_assetsturn | 总资产周转率 | double | 次 |
s_fa_roa_yearly | 年化总资产净利率 | double | % |
s_fa_dupont_roa | 总资产净利率(杜邦分析) | double | % |
s_stm_bs | 固定资产合计 | double | 元 |
s_fa_prefinexpense_opprofit | 扣除财务费用前营业利润 | double | 元 |
s_fa_nonopprofit | 非营业利润 | double | 元 |
s_fa_optoebt | 营业利润/利润总额 | double | % |
s_fa_noptoebt | 非营业利润/利润总额 | double | % |
s_fa_ocftoprofit | 经营活动产生的现金流量净额/营业利润 | double | % |
s_fa_cashtoliqdebt | 货币资金/流动负债 | double | |
s_fa_cashtoliqdebtwithinterest | 货币资金/带息流动负债 | double | |
s_fa_optoliqdebt | 营业利润/流动负债 | double | |
s_fa_optodebt | 营业利润/负债合计 | double | |
s_fa_roic_yearly | 年化投入资本回报率 | double | % |
s_fa_tot_faturn | 固定资产合计周转率 | double | 次 |
s_fa_profittoop | 利润总额/营业收入 | double | % |
s_qfa_operateincome | 单季度.经营活动净收益 | double | 元 |
s_qfa_investincome | 单季度.价值变动净收益 | double | 元 |
s_qfa_deductedprofit | 单季度.扣除非经常损益后的净利润 | double | 元 |
s_qfa_eps | 单季度.每股收益 | double | 元 |
s_qfa_netprofitmargin | 单季度.销售净利率 | double | % |
s_qfa_grossprofitmargin | 单季度.销售毛利率 | double | % |
s_qfa_expensetosales | 单季度.销售期间费用率 | double | % |
s_qfa_profittogr | 单季度.净利润/营业总收入 | double | % |
s_qfa_saleexpensetogr | 单季度.销售费用/营业总收入 | double | % |
s_qfa_adminexpensetogr | 单季度.管理费用/营业总收入 | double | % |
s_qfa_finaexpensetogr | 单季度.财务费用/营业总收入 | double | % |
s_qfa_impairtogr_ttm | 单季度.资产减值损失/营业总收入 | double | % |
s_qfa_gctogr | 单季度.营业总成本/营业总收入 | double | % |
s_qfa_optogr | 单季度.营业利润/营业总收入 | double | % |
s_qfa_roe | 单季度.净资产收益率 | double | % |
s_qfa_roe_deducted | 单季度.净资产收益率(扣除非经常损益) | double | % |
s_qfa_roa | 单季度.总资产净利润 | double | % |
s_qfa_operateincometoebt | 单季度.经营活动净收益/利润总额 | double | % |
s_qfa_investincometoebt | 单季度.价值变动净收益/利润总额 | double | % |
s_qfa_deductedprofittoprofit | 单季度.扣除非经常损益后的净利润/净利润 | double | % |
s_qfa_salescashintoor | 单季度.销售商品提供劳务收到的现金/营业收入 | double | % |
s_qfa_ocftosales | 单季度.经营活动产生的现金流量净额/营业收入 | double | % |
s_qfa_ocftoor | 单季度.经营活动产生的现金流量净额/经营活动净收益 | double | |
s_fa_yoyeps_basic | 同比增长率-基本每股收益(%) | double | % |
s_fa_yoyeps_diluted | 同比增长率-稀释每股收益(%) | double | % |
s_fa_yoyocfps | 同比增长率-每股经营活动产生的现金流量净额(%) | double | % |
s_fa_yoyop | 同比增长率-营业利润(%) | double | % |
s_fa_yoyebt | 同比增长率-利润总额(%) | double | % |
s_fa_yoynetprofit | 同比增长率-归属母公司股东的净利润(%) | double | % |
s_fa_yoynetprofit_deducted | 同比增长率-归属母公司股东的净利润-扣除非经常损益(%) | double | % |
s_fa_yoyocf | 同比增长率-经营活动产生的现金流量净额(%) | double | % |
s_fa_yoyroe | 同比增长率-净资产收益率(摊薄)(%) | double | % |
s_fa_yoybps | 相对年初增长率-每股净资产(%) | double | % |
s_fa_yoyassets | 相对年初增长率-资产总计(%) | double | % |
s_fa_yoyequity | 相对年初增长率-归属母公司的股东权益(%) | double | % |
s_fa_yoy_tr | 营业总收入同比增长率(%) | double | % |
s_fa_yoy_or | 营业收入同比增长率(%) | double | % |
s_qfa_yoygr | 单季度.营业总收入同比增长率(%) | double | % |
s_qfa_cgrgr | 单季度.营业总收入环比增长率(%) | double | % |
s_qfa_yoysales | 单季度.营业收入同比增长率(%) | double | % |
s_qfa_cgrsales | 单季度.营业收入环比增长率(%) | double | % |
s_qfa_yoyop | 单季度.营业利润同比增长率(%) | double | % |
s_qfa_cgrop | 单季度.营业利润环比增长率(%) | double | % |
s_qfa_yoyprofit | 单季度.净利润同比增长率(%) | double | % |
s_qfa_cgrprofit | 单季度.净利润环比增长率(%) | double | % |
s_qfa_yoynetprofit | 单季度.归属母公司股东的净利润同比增长率(%) | double | % |
s_qfa_cgrnetprofit | 单季度.归属母公司股东的净利润环比增长率(%) | double | % |
s_fa_yoy_equity | 净资产(同比增长率) | double | % |
rd_expense | 研发费用 | double | 元 |
发债企业违约记录
ent_default.csv
对于一个发债企业若存在违约记录,则设置预测输出变量default_score为1-已违约。
列名 | 中文名 | 类型 | 说明 |
---|---|---|---|
ent_id | 公司ID | string | |
default_date | 违约日期 | string |
企业的舆情信息
ent_news.csv
列名 | 中文名 | 类型 | 说明 |
---|---|---|---|
ent_id | 公司ID | string | |
news_code | 新闻编码 | string | |
index_type | 风险标签类别 | string | |
index | 风险标签 | string | |
imp_score | 重要性 | int | |
publish_date | 发布日期 | string | |
publish_time | 发布时间 | string | |
news_source | 新闻来源 | string | |
newsc_title | 新闻标题 | string |
评估结果
answer.csv
列名 | 中文名 | 类型 | 说明 |
---|---|---|---|
ent_id | 公司ID | string | |
default_score | 违约风险值 | double | 取值范围:[0,1] |
三、baseline方案
源码:baseline.ipynb
工作原理
该解决方案实现了一个基于LightGBM的企业违约预测模型。
工作流程总结:
- 加载并预处理原始数据
- 构建时间相关的复合键
- 合并不同来源的数据
- 特征工程和编码
- 使用LightGBM进行交叉验证训练
- 生成预测结果并保存
安装开发包
参考《安装传统机器学习开发包》。以下为开发包版本信息:
lightgbm 4.5.0
gensim 4.3.2
scikit-learn 1.5.1
triu 函数在 scipy.linalg 中从 scipy 版本 1.4.0 开始提供。你可以通过以下代码升级当前的 scipy 版本:conda install scipy=1.5.0。
工作流程
1、导入开发包
import pandas as pd
import gc
import lightgbm as lgb
from lightgbm import early_stopping, log_evaluation
import numpy as np
from sklearn.model_selection import StratifiedKFold
import warnings
warnings.filterwarnings('ignore')
Scikit-learn(简称sklearn)是一个基于Python的开源机器学习库,广泛应用于数据挖掘和数据分析。它提供了简单而高效的工具,涵盖了分类、回归、聚类、降维等多个领域。LightGBM是一个由微软开发的开源梯度提升框架,以其高效、快速和准确著称,广泛应用于分类、回归和排序等机器学习任务。
2、数据加载与预处理
数据加载
- 加载了4个主要数据文件:
ent_default.csv
:企业违约记录ent_info.csv
:企业基本信息ent_financial_indicator.csv
:企业财务指标ent_news.csv
:企业新闻数据(但后续未使用,该数据可应用于自然语言处理。)
ent_default=pd.read_csv('data/ent_default.csv',delimiter="|")
ent_info=pd.read_csv('data/ent_info.csv',delimiter="|")
ent_financial=pd.read_csv('data/ent_financial_indicator.csv',delimiter="|")
ent_news = pd.read_csv('data/ent_news.csv', delimiter="|", on_bad_lines='warn')
数据预处理
- 时间处理:从日期字段中提取年份
ent_default['year'] = ent_default['acu_date'].apply(lambda x:x//10000)
- 类似处理财务数据和新闻数据的年份
- 创建复合键:将企业ID与年份结合创建
ent_id_year
字段ent_default['ent_id_year'] = ent_default['ent_id'] + '_' + (ent_default['year'] - 1).astype(str)
- 数据合并:
- 合并违约记录与样本提交文件
- 添加2019年和2020年未违约企业的记录(标记为0)
### 时间处理
ent_default['year'] = ent_default['acu_date'].apply(lambda x:x//10000)
ent_fina['year'] = ent_fina['report_period'].apply(lambda x:x//10000)
news_df['year'] = news_df['publishdate'].apply(lambda x:int(x)//10000)
ent_default['ent_id_year'] = ent_default['ent_id'] + '_' + (ent_default['year'] - 1).astype(str)
ent_fina['ent_id_year'] = ent_fina['ent_id'] + '_' + ent_fina['year'].astype(str)
news_df['ent_id_year'] = news_df['ent_id'] + '_' + news_df['year'].astype(str)
answer['ent_id_year'] = answer['ent_id'].apply(lambda x: x+'_2020')
del ent_fina['year'], news_df['year']
# 去重
ent_default_new = ent_default.drop_duplicates(subset=['ent_id_year'], keep='last')
# 合并
ent_default_new['default_score'] = 1
answer['year'] = 2021
data = pd.concat([ent_default_new[['ent_id','ent_id_year','year','default_score']], answer], axis=0, ignore_index=True)
del ent_default_new
3、特征工程
特征分类
- 企业基本信息特征:
- 分类特征:行业、企业类型、状态、地区等
- 数值特征:注册资本
- 时间特征:经营期限、成立日期等
- 财务指标特征:
- 全部数值特征(共170多个财务指标)
features = [f for f in data.columns if f not in ['ent_id','ent_id_year','default_score','is_bondissuer'] + \
ent_info_time_cols + ent_fina_time_cols]
train = data[data.year!=2021].reset_index(drop=True)
test = data[data.year==2021].reset_index(drop=True)
x_train = train[features]
x_test = test[features]
y_train = train['default_score'] # 预测输出变量
特征编码
对分类特征进行自然数编码:
def label_encode(series):
unique = list(series.unique())
return series.map(dict(zip(unique, range(series.nunique()))))
for col in ent_info_cat_cols:
ent_info[col] = label_encode(ent_info[col])
数据合并
- 将企业基本信息、财务指标合并到主数据集
- 去重处理,保留每个企业每年的最新记录
# 合并ent_info、ent_fina
print(data.shape)
ent_info_new = ent_info.drop_duplicates()
data = data.merge(ent_info_new, on=['ent_id'], how='left')
print(data.shape)
ent_fina_new = ent_fina.sort_values('report_period').drop_duplicates(subset=['ent_id_year'], keep='last')
data = data.merge(ent_fina_new, on=['ent_id','ent_id_year'], how='left')
print(data.shape)
4、模型训练
使用LightGBM模型
- 采用5折分层交叉验证
- 主要参数:def cv_model(clf, train_x, train_y, test_x, clf_name):
folds = 5
seed = 2022
kf = StratifiedKFold(n_splits=folds, shuffle=True, random_state=seed)
train = np.zeros(train_x.shape[0])
test = np.zeros(test_x.shape[0])
cv_scores = []
for i, (train_index, valid_index) in enumerate(kf.split(train_x, train_y)):
print(‘************************************ {} ************************************’.format(str(i+1)))
trn_x, trn_y, val_x, val_y = train_x.iloc[train_index], train_y[train_index], train_x.iloc[valid_index], train_y[valid_index]
if clf_name == “lgb”:
train_matrix = clf.Dataset(trn_x, label=trn_y)
valid_matrix = clf.Dataset(val_x, label=val_y)
params = {
‘boosting_type’: ‘gbdt’,
‘objective’: ‘binary’,
‘metric’: ‘auc’,
‘min_child_weight’: 5,
‘num_leaves’: 2 ** 5,
‘lambda_l2’: 10,
‘feature_fraction’: 0.8,
‘bagging_fraction’: 0.8,
‘bagging_freq’: 4,
‘learning_rate’: 0.01,
‘seed’: 2022,
‘n_jobs’:-1,
‘verbose’: -1,
}
# model = clf.train(params, train_matrix, 50000, valid_sets=[train_matrix, valid_matrix],
# categorical_feature=[], verbose_eval=500, early_stopping_rounds=500)
model = lgb.train(params, train_matrix, 50000, valid_sets=[train_matrix, valid_matrix],
categorical_feature=[],
callbacks=[log_evaluation(500), early_stopping(stopping_rounds=500)]) # 使用早停机制(500轮不提升停止)
val_pred = model.predict(val_x, num_iteration=model.best_iteration)
test_pred = model.predict(test_x, num_iteration=model.best_iteration)
# print(list(sorted(zip(features, model.feature_importance(“gain”)), key=lambda x: x[1], reverse=True))[:20])
train[valid_index] = val_pred
test += test_pred / kf.n_splits
cv_scores.append(roc_auc_score(val_y, val_pred))
print(cv_scores)
print(“%s_scotrainre_list:” % clf_name, cv_scores)
print(“%s_score_mean:” % clf_name, np.mean(cv_scores))
print(“%s_score_std:” % clf_name, np.std(cv_scores))
return train, test
这段代码使用LightGBM库训练一个二分类模型,并设置了多种参数来优化模型的性能和防止过拟合。通过设置早停和日志记录回调函数,可以在训练过程中监控模型的性能,并在验证集性能不再提升时提前停止训练,从而节省计算资源并提高模型的泛化能力。
训练过程
- 使用早停机制(500轮不提升停止)
- 记录每折的AUC得分
- 最终平均AUC约为0.948
def lgb_model(x_train, y_train, x_test):
lgb_train, lgb_test = cv_model(lgb, x_train, y_train, x_test, "lgb")
return lgb_train, lgb_test
lgb_train, lgb_test = lgb_model(x_train, y_train, x_test)
训练结果
************************************ 1 ************************************
Training until validation scores don't improve for 500 rounds
[500] training's auc: 0.979015 valid_1's auc: 0.945491
[1000] training's auc: 0.988989 valid_1's auc: 0.950173
[1500] training's auc: 0.993245 valid_1's auc: 0.95231
[2000] training's auc: 0.99579 valid_1's auc: 0.953922
[2500] training's auc: 0.997349 valid_1's auc: 0.953116
Early stopping, best iteration is:
[2289] training's auc: 0.996766 valid_1's auc: 0.954321
[0.9543206969625618]
************************************ 2 ************************************
Training until validation scores don't improve for 500 rounds
[500] training's auc: 0.978808 valid_1's auc: 0.93397
[1000] training's auc: 0.989057 valid_1's auc: 0.947722
[1500] training's auc: 0.994123 valid_1's auc: 0.948498
[2000] training's auc: 0.996725 valid_1's auc: 0.950519
[2500] training's auc: 0.998096 valid_1's auc: 0.951043
[3000] training's auc: 0.998792 valid_1's auc: 0.951698
[3500] training's auc: 0.999238 valid_1's auc: 0.952568
Early stopping, best iteration is:
[3372] training's auc: 0.99915 valid_1's auc: 0.952942
[0.9543206969625618, 0.9529422771073066]
************************************ 3 ************************************
Training until validation scores don't improve for 500 rounds
[500] training's auc: 0.980715 valid_1's auc: 0.91176
[1000] training's auc: 0.98861 valid_1's auc: 0.925989
[1500] training's auc: 0.993395 valid_1's auc: 0.930443
[2000] training's auc: 0.996026 valid_1's auc: 0.933455
[2500] training's auc: 0.997595 valid_1's auc: 0.935551
[3000] training's auc: 0.998411 valid_1's auc: 0.937422
[3500] training's auc: 0.998923 valid_1's auc: 0.939274
[4000] training's auc: 0.999226 valid_1's auc: 0.941613
[4500] training's auc: 0.999449 valid_1's auc: 0.942848
[5000] training's auc: 0.999597 valid_1's auc: 0.943727
[5500] training's auc: 0.999715 valid_1's auc: 0.944204
[6000] training's auc: 0.999785 valid_1's auc: 0.944391
[6500] training's auc: 0.999826 valid_1's auc: 0.945645
[7000] training's auc: 0.999865 valid_1's auc: 0.946029
[7500] training's auc: 0.999897 valid_1's auc: 0.94659
[8000] training's auc: 0.999921 valid_1's auc: 0.946047
Early stopping, best iteration is:
[7640] training's auc: 0.999904 valid_1's auc: 0.946693
[0.9543206969625618, 0.9529422771073066, 0.9466928618205632]
************************************ 4 ************************************
Training until validation scores don't improve for 500 rounds
[500] training's auc: 0.978465 valid_1's auc: 0.967953
[1000] training's auc: 0.988048 valid_1's auc: 0.968417
[1500] training's auc: 0.993321 valid_1's auc: 0.969371
[2000] training's auc: 0.996009 valid_1's auc: 0.971523
[2500] training's auc: 0.997614 valid_1's auc: 0.972572
[3000] training's auc: 0.998446 valid_1's auc: 0.973545
[3500] training's auc: 0.99898 valid_1's auc: 0.974724
[4000] training's auc: 0.999253 valid_1's auc: 0.975239
[4500] training's auc: 0.999475 valid_1's auc: 0.975557
[5000] training's auc: 0.999613 valid_1's auc: 0.975856
[5500] training's auc: 0.999735 valid_1's auc: 0.976315
[6000] training's auc: 0.999801 valid_1's auc: 0.976193
Early stopping, best iteration is:
[5538] training's auc: 0.999737 valid_1's auc: 0.976446
[0.9543206969625618, 0.9529422771073066, 0.9466928618205632, 0.9764458169567659]
************************************ 5 ************************************
Training until validation scores don't improve for 500 rounds
[500] training's auc: 0.98418 valid_1's auc: 0.89053
[1000] training's auc: 0.991626 valid_1's auc: 0.899027
[1500] training's auc: 0.995276 valid_1's auc: 0.901001
[2000] training's auc: 0.997118 valid_1's auc: 0.90277
[2500] training's auc: 0.998209 valid_1's auc: 0.905222
[3000] training's auc: 0.998751 valid_1's auc: 0.908357
[3500] training's auc: 0.999113 valid_1's auc: 0.908984
Early stopping, best iteration is:
[3384] training's auc: 0.999062 valid_1's auc: 0.909657
[0.9543206969625618, 0.9529422771073066, 0.9466928618205632, 0.9764458169567659, 0.9096574957888827]
lgb_scotrainre_list: [0.9543206969625618, 0.9529422771073066, 0.9466928618205632, 0.9764458169567659, 0.9096574957888827]
lgb_score_mean: 0.948011829727216
lgb_score_std: 0.021658242565467948
5. 预测与输出
- 对测试集进行预测
- 生成提交文件
4_29_1.csv
,包含企业ID和预测的违约概率
提交文件4_29_1.csv数据样例:
ent_id | default_score
pz02551f7157daa47863bf24165b32e8af|0.0017181022635838128
pz17ed364608b1470526dd99102ba3d4d5|0.00392982717793669
pz21fe86a42da0133463e525d615ad559d|0.00011260979806847706
pz2405eece6308c587bce6b379d3099628|2.7782630874952274e-05
pz29b17e9c378ef899938d86ca08778810|0.008482012223639899
pz4cad6ea138e8d74d237217d91b423ec4|0.0004072060656886154
...