-
2018-02-05 11:58:00
第一次参加DF的比赛(两个月前的比赛了),赛题为CCF-BDCI2017的《量子数聚-企业经营退出风险预测》,在此记录比赛过程中自己摸索的一些经验(运气使然前100进入了复赛,虽然最终离进入决赛还差了好几十名 o(一︿一+)o)。
*1.任务描述:
本赛题以企业为中心,围绕企业主体在多方面留下的行为足迹信息构建训练数据集,以企业在未来两年内是否因经营不善退出市场作为目标变量进行预测。
参赛者需要利用训练数据集中企业信息数据,构建算法模型,并利用该算法模型对验证数据集中企业,给出预测结果以及风险概率值。
预测结果以AUC值作为主要评估标准,在AUC值(保留到小数点后3位数字)相同的情况下,则以F1-score(命中率及覆盖率)进行辅助评估。2.队伍名称:略
3.数据描述:
数据基本情况
本赛题提供两种数据:
(1)企业身份信息(已脱敏)及企业在一定时间范围内的行为数据。该数据对训练集和评测集都是相同的。
(2)目标数据。目标值为该企业在2017年8月时的经营状况:停业1,正常经营0
该表仅训练数据有。
选手从数据中自行组成特征和数据格式,自由组合训练测试数据比例。
为保护数据安全,所有数据均已进行了采样和必要的脱敏处理。
数据中部分列存在空值或NULL,记录可能存在重复情况,请参赛者根据数据字段描述自行处理。具体赛题和数据格式:http://www.datafountain.cn/#/competitions/271/intro
4.数据处理:
初赛数据规模:原始数据约80MB大小,经过数据清洗和去重后供本地训练的数据集有153007行,需要在线提交验证的数据集102125行。
复赛数据规模:原始数据约270MB大小,经过数据清洗和去重后供本地训练的数据集有218265行,需要在线提交验证的数据集218248行。
数据处理使用python3.5+pandas。数据处理其实在提取特征之前或者之后都会使用,因为在多个表间取有相关联系的数据时或者表间数据进行拼接时都会产生数据缺失或者数据异常的情况。
4.1 数据去重
对原始数据中提供的13个表,根据每个数据库的主键对其进行去重操作。
4.2 处理NA
NA即数据中的missing value,一般需要分情况处理:
4.2.1 missing value占总体的比例非常小,那么直接填入平均值或者众数;
4.2.2 missing value所占比例较均衡,那么可以考虑它跟其他特征的关系,如果关系明显,那么直接根据其他特征填入;
4.2.3 missing value所占比例大,那么直接将missing value当作该特征取值的一种情况,选与能已有的值相区分的值;
4.2.3 如果前期只是为了跑一个初始的模型,可以先统一给NA取0或-1或-999这种特殊值;
4.3 去除不必要的符号
特征取值一般是离散值或者连续值,因此需将原始数据中不需要的符号去除,或者说是可以提取原始数据中的离散值或连续值,一般可以使用split函数或者正则表达式,eg:如年份为‘2017年1月1日’,应将汉字去除。
4.4 数据重新编码或者取对数变换
特征变量为连续值:如果为长尾分布并且考虑使用线性模型,可以对变量进行对数变换。
特征变量为离散值:观察每个离散值的频率分布,对于频次较低的特征,可以考虑统一编码为“其他”类别。
4.5 处理野点
一般是通过画图的方式处理离群点,但是此次比赛的数据规模较大,利用画图的方式有时不能准确的发现离群点的位置。处理野点的方式可以直接删除或者取统计值(平均值,众数等)。
4.6 数据标准化
原始数据集中由于各个特征的含义和单位不同,不同特征的数据取值范围有很大差异,可能会导致模型权重偏移的情况,因此一般需要对数据进行标准化,即去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。
z-score 标准化
X∗=X−μσ
其中μ为所有样本数据的均值,σ为所有样本数据的标准差。
经过处理的数据符合标准正态分布,即均值为0,标准差为1,适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
4.7 数据归一化
即将数据统一映射到[0,1]区间上。
X∗=X−XminXmax−Xmin
Tree-based的算法基本上不需要标准化或归一化(猜测:是每次选择属性点只针对该属性进行分类的原因因此对量度不敏感吗)。
4.8 Binning
也称为 Bucketization,对连续的特征做离散化。 比赛应用:对某个企业所投资机构的存活时间做Binning,然后再统计不同的存活时间里的机构数目,对应的就是统计了某企业所投资的机构中存活时间0~1年的有多少。5.特征工程
好的特征才是比赛最重要的部分,选择何种模型何种算法都是为了达到特征所能发掘信息的上限,因此特征工程是整个比赛过程中最重要的一步,也可以说是贯穿整个比赛的步骤。
5.1从原始特征中选择有用的特征
原始数据中并不是所有的特征都是对模型的构建有作用的,有的毫无汇率的数据甚至会对模型的性能产生负面的作用。在此次比赛中,我们首先弄清楚了每个原始特征的具体意义,然后剔除了那些明显和结果没有联系的数据,例如复赛的时候提供了训练数据中已停业企业的停业时间,由于测试数据集中并没有提供该特征,而且这次数据制作者并没有给出能找到leakage(数据泄露)的机会,所以该特征数据基本提供不了什么有价值的信息,因此在最终选择的结果中剔除了该特征。另外,很多python的model packages都包含给特征数据重要性(特征在构建模型过程中的作用,一般稀疏的特征重要性比较小)进行排序的功能,这个也可以提供一定的参考价值。
5.2 特征构建
特征构建即从原有的特征中,人工地创建出新的特征,充分发掘数据包含的信息。
5.2.1 时间窗口特征
企业风险预测的数据中包含了很多的时间数据,最简单的处理方式是提取出年份,月份,具体日期作为离散数值使用,而且在这次比赛中发现该方法虽然简单但是效益却极为不错。
还可以根据需要统计出某个时间段内的另外一个特征的统计值(求和,平均数等),比如统计某个企业 [2, 5, 8, 13, 21, 35]个月内的变更Alter记录数目。
5.2.2 one – hot 编码
one – hot 编码是建模中很常见的一种特征构建方法,即某个特征有n(n一般不大)种值,那该特征可以转化为维度为n的0-1向量,在很多时候该向量更适合算法进行分类。例如企业风险预测原始数据中的RIGHTTYPE(权利类型)特征,该特征包含7种值,便可以转化成[1,0,0,0,0,0,0]这样的length为7的特征向量,但是该方法会增加特征矩阵的维度,需看情况使用。
5.2.3 根据特征之间的联系求统计值
例如企业风险预测原始数据中,包含FBDATE(企业失信列入日期)和SXENDDATE(失信结束日期),我们可以计算企业失信结束的行为数目占企业失信行为总数目的比例作为一个新的特征,在实际运用中发现该特征的确对算法性能提示有作用。
5.2.4 特征交互和组合
这两种方法的目的性不强,一般搞不清产生特征的具体意义,而且通常需进行多次的试验才能产生一个较为有用的特征。特征交互仅适用于连续性特征,例如特征X1和X2,我们可以通过X1+X2、X1-X2等数值计算方式产生新的特征。特征组合适用于类别型数据,例如企业风险预测比赛中,可以将行业大类特征和企业类型进行多对多的组合,从中选择较为重要的特征。6. 模型构建
6.1.单模型
该次比赛选择了若干机器学习算法,基本来源于python的拓展包。选择模型之后需进行调参,不同算法的调参方式不尽相同,但是大体上都是属于网格搜索,尝试过使用贪心调参,在有些时候能取得较为不错的效果,但是经常会出现本地结果提升但线上结果不变甚至下降的情况。
网上有比较详细的调参的博客:http://www.cnblogs.com/jasonfreak/p/5720137.html
本次尝试的单模型有:
LogisticRegression,GradientBoostingClassifier,
xgboost,RandomForestClassifier,
LinearRegression,GaussianNB,ExtraTreesClassifier由于xgboost模型对效果的提升比较大,并且调参上花了比较多的时间,因此介绍下该模型的优点。Xgboost是一种集成提升算法,传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的LogisticRegression或者线性回归。xgboost在代价函数里加入了正则项,用于控制模型的复杂度,可以使得训练出来的模型更为简洁高效,防止过拟合。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算过程。还有一个最为重要的地方是xgboost算法支持并行计算,具体的实现过程现在还不理解。
Xgboost模型需要调参的参数比较多,如果使用网格搜索的方式会导致寻找最优解话费的时间太长,在比赛流程中我们经常会调整数据特征,没有太多时间来使用网格搜索的方法,因此可以选择较为贪心的方法。我们可以先设置步长eta为稍微大一点的值,例如0.1或更大,再按照max_depth,subsample,min_child_weight,colsample_bytree的顺序依次调参,具体每个参数的调整过程是先定初始值,然后分别向该值的两端调整,效果变差则类似二分的方式取和上次取值的平均值,按照贪心的方式得到一组效果较为满意的参数。
6.2.模型融合
由于数据集有些特征较为稠密,有些特征却特别稀疏,因此一般的单模型都无法很好的适合处理这种数据。在复赛的时候尝试过比较多的模型融合方法,但是可能因为细节的问题始终不能让线上结果获得提升。
6.2.1 averaging
分为一般平均和加权平均,两者都是对于使用的模型预测结果求相应的平均值作为最终的预测结果。
6.2.2 ranking
rank的思想其实和averaging类似,但rank是把排名做平均,对于AUC指标比较有效。
公式如下:
∑ni=1WiRi
上式中,Wi表示该模型权重,Ri表示样本在第i个模型中的升序排名。
6.2.3 Stacking
模型融合过程中花费时间较长的方法,由于个人技术问题没有获得好的效果。Stacking的关键点在于base model的选择,一般base model之间的差异越大即相关性要小,而且模型之间的性能差异比较小的时候能取得提升。本次比赛使用了二层的stacking模型,第一层训练将数据集分为5-fold,选择的base model为LogisticRegression,xgboost,RandomForestClassifier,GaussianNB,ExtraTreesClassifier,第二层的预测模型选择xgboost,在这之间base model替换了多次,发现上述的组合效果较好,但还是没能对单模型的成绩进行提高。更多相关内容 -
电费拖欠风险的混合预测模型
2020-02-01 12:12:27电费拖欠风险的混合预测模型,曾晶,易校石,电网公司的经营模式是 -
数学模型方法在企业环境风险预测中的应用
2020-01-10 13:14:47数学模型方法在企业环境风险预测中的应用,周伟,李晓萌,如何进行企业环境风险预测,各有说法。传统方法主要以反映企业经营和财务状况的指标进行风险预测,它存在天然的缺陷。而数学模型 -
CCF企业非法集资风险预测Rank11赛后总结
2021-01-02 21:00:00这是老肥第一次参加CCF大数据与计算智能大赛,选择了企业非法集资风险预测这个相对简单的结构化数据赛题,本赛题共有4210人、3403支队伍参赛,是今年CCF BDCI大赛参赛人数最多的赛...这是老肥第一次参加CCF大数据与计算智能大赛,选择了企业非法集资风险预测这个相对简单的结构化数据赛题,本赛题共有4210人、3403支队伍参赛,是今年CCF BDCI大赛参赛人数最多的赛题,竞争也是异常激烈,我们团队「等你」在A榜、B榜均为第
11
名,在某种程度上证明我们的模型的稳定性(尽管只有单模)。赛题介绍
背景
非法集资严重干扰了正常的经济、金融秩序,使参与者遭受经济损失,甚至生活陷入困境,极易引发社会不稳定和大量社会治安问题,甚至引发局部地区的社会动荡。如何根据大量的企业信息建立预测模型并判断企业是否存在非法集资风险,对监管部门、企业合作伙伴、投资者都具有一定的价值。
任务
利用机器学习、深度学习等方法训练一个预测模型,该模型可学习企业的相关信息,以预测企业是否存在非法集资风险。
数据
该数据集包含约25000家企业数据,其中约15000家企业带标注数据作为训练集,剩余数据作为测试集。数据由企业基本信息、企业年报、企业纳税情况等组成,数据包括数值型、字符型、日期型等众多数据类型(已脱敏),部分字段内容在部分企业中有缺失,其中第一列id为企业唯一标识。其中base_info.csv为主表,是企业的基本信息,还有几个副表包含且也的年报信息、纳税信息、企业变更信息、新闻舆情信息和其他信息,这些副表的缺失值较多,对模型的提升效果较为有限。
评价指标
这题的评价指标有点特别,是精确率、召回率和F1-Score的加权平均, 主办方没有给出明确的权重系数,我们根据线上线下的评分数据拟定这三者的权重分别为0.5、0.3以及0.2(不确信主办方是否采取这样的权重)。
预处理
主要对主表的数据进行缺失值处理,数字类型特征的缺失值用-1进行填充,字符串类型特征用
"-1"
进行填充,对总体缺失值占比极大的特征做删除处理,比如'ptbusscope', 'midpreindcode', 'protype'
等, 对年月日进行'3099-12-31'
缺失值填充(因为未使用月日特征,因而不会和未缺失值混淆)。特征工程
这一部分应该是整个比赛最为重要的部分,也是大部分数据挖掘类型比赛最为重要的部分。
首先,针对缺失值比例较大的特征列我们统计其缺失值数目,比如对人数相关的列我们统计总缺失值的列数,针对几个重要特征比如
venind、reccap
等构造新特征列为是否存在缺失值。接着是一些结合业务理解的手工特征,资金的加减、从业人数的组合,经营期时长等等。较为有意思的特征还有行政区划代码、经营地址和经营范围,这些特征经过脱敏处理,但我们依然可以从中挖掘出特征,这些数据以长度16为一块信息,因而我们可以得到地址的长度特征(可以看作是地址详细程度),
jobid, orgid
特征的前六位和地址特征也有一定的相关性可以构造特征。这里有一个较为重要的特征是文本内容,那就是经营范围特征,尝试了很多方法,比如用基础分类器根据该特征来做分类预测,将预测概率作为特征来进行其他分类器的训练,用Bert来提取经营范围特征等等,最终采取的是将这些文本以及经营地址的序列特征使用tfidf来构造特征并对tfidf的结果作降维处理。
base['oploc_list'] = base['oploc'].apply(lambda x: ' '.join([x[16 * i:16 * (i + 1)] for i in range(int(len(x) / 16))])) base['dom_list'] = base['dom'].apply(lambda x: ' '.join([x[16 * i:16 * (i + 1)] for i in range(int(len(x) / 16))])) base['opscope_word_list'] = base['opscope'].apply(get_cut_list) oploc_tfidf_vector = TfidfVectorizer(min_df=30).fit( base['oploc_list'].tolist()) dom_tfidf_vector = TfidfVectorizer(min_df=30).fit( base['dom_list'].tolist()) opscope_tfidf_vector = TfidfVectorizer(min_df=30).fit( base['opscope_word_list'].tolist())
五个副表的特征主要做的是聚合统计特征,以id为键统计比如均值、方差、最大值、最小值等特征以及用
CountVectorize
来做特征的数值统计, 其中other_info
表因为缺失值过多而未将其考虑在内。模型训练
模型的训练采用了五乘五折也就是二十五折交叉验证的训练推理方式来更大程度上的减少过拟合,采用
auc
为早停指标。我们最后采用xgboost模型,在三套不同的参数(由贝叶斯优化得到)下训练对得到的预测概率值取平均作为提交的概率值。赛后总结
非常遗憾未能进入到最终的决赛,上述方案有很多部分值得进一步的改进。可能因为过早组队的原因,造成了自己思维定势,没有使用多种特征工程组合生成的不同模型。我们也尝试使用了lightgbm、catboost以及神经网络模型,但这些模型在线上的表现不佳,这也是为什么后来我们只采用了一个模型的原因,高分模型和低分模型的融合难以取得分数的提升,源代码可以在后台回复「CCF」即可。
2021年的CCF BDCI, 我们还会回来的!
——END——
扫码二维码
获取更多精彩
老肥码码码
-
百分点数据科学实验室:基于数据驱动的销量预测模型建构
2021-05-06 11:45:42百分点数据科学实验室多年来在项目中积累了丰富的实践经验,总结了一套基于数据驱动的销量预测模型建构方法,本文将从预测目标、评估方法、案例应用及效果等方面进行分享。编者按:销量预测是企业生产经营中的重要环节,但由于未来市场需求和销量来源等存在诸多不确定性,为企业销量预测提升了难度,如何提升产品全生命周期智能决策分析越来越成为企业关注的重点。百分点数据科学实验室多年来在项目中积累了丰富的实践经验,总结了一套基于数据驱动的销量预测模型建构方法,本文将从预测目标、评估方法、案例应用及效果等方面进行分享。
一、销量预测的价值
1. 销量预测的商业价值由于供应链的滞后性,企业需要根据未来一段时间内的市场需求制定尽量准确的销售计划,再根据销售计划制定生产和采购计划。但未来的市场需求是不确定的,如果企业高估市场需求,就会造成库存积压,进而承担库存成本(包括库存费用和资金成本);如果企业低估市场需求,就会造成缺货,进而承担未实现销售的机会成本。这时,准确、高效地预测市场需求,即进行销量预测,就成为企业降低决策不确定性,最小化库存和机会成本的关键。
2. 数据驱动的销量预测
企业进行销量预测的传统方法是基于人工经验估计,也可以称为专家法。以一个消费品生产企业为例,制定销售计划有如下步骤:
(1)各个地区销售代表拜访当地客户收集需求意向,再根据经验判断,制定地区销售计划。
(2)总部将所有地区的销售计划汇总,得到全国销售计划。
(3)总部根据季度或月度业绩目标调整销售计划,再返回到地区进行确认。
(4)确认后得到最终的销售计划,交给生产部门。
上述流程本质上是通过收集客户的需求信息,再经过专家经验调整后得到未来销量的预测。这种专家法能够结合长时间积累的业务经验和人的逻辑判断能力,但完全依赖专家法有一定的局限性:
- 人工经验可能存在偏见(bias),忽略或放大某些影响销量的因素,例如总部调整销售计划时可能高估营销政策的影响。
- 专家法有较高的时间成本,无法对大量商品进行预测,例如对于一些销量很小的品规,地区销售可能选择忽略,不花时间采集信息。
数据驱动的销量预测可以解决上述问题。数据驱动的销量预测是指利用算法挖掘大量历史数据中可复现的规律,再用这些规律建立模型预测未来销量(图1)。
图1 数据驱动的销量预测算法挖掘数据中规律的过程其实本质上和人工判断的原理类似,都是在可能影响销量的因素和销量之间建立联系。销量的影响因素包括:销量的历史趋势、周期性、节假日、产品属性、渠道属性、营销投入、竞争情况等(图2)。
图2 销量预测的影响因素二、销量预测的难点
1. 世上没有水晶球
尽管销量预测十分重要,但在实践中进行高质量的销量预测并不容易,尤其是预测的准确率往往不尽如人意。在深度学习算法已经可以超越人类水平进行人脸识别的今天,为何销量预测仍然如此之难?在讨论这个问题之前,我们首先要明确未来销量不确定性的来源。不确定性可以分类三类(图3):
图3 不确定性的来源(1)未知但可知:指数据中的随机性,即噪音造成的不确定性。
(2)博弈结果:指系统内参与者对其他参与者行为的预期造成的不确定性。
(3)复杂系统:指复杂系统中极小参数变化经过非线性转换造成的“黑天鹅”类不确定性。
在这三类不确定性中,预测模型只适合解决第一类,而人脸识别就符合第一类不确定性:人脸的结构和特征千百年来变化非常缓慢。第二和第三类不确定性从定义上来说无法在历史数据中积累足够多的案例,预测模型也就无法学习相关规律。未来销量的不确定性恰恰不仅来自第一类不确定性。举例来说,竞争对手的行为(定价、新品)会影响企业的销量,但这是竞争对手的行为是基于企业本身策略的预期制定的(博弈结果),无法通过历史数据预测。“黑天鹅”类的不确定性就更容易理解,去年发生的新冠疫情就是一个鲜明的例子。换而言之,即使我们能收集图2中所有影响销量的因素,也不可能百分之百准确地预测销量。因此,在建立销量预测模型时,我们不能以一个理想的准确率作为目标,而是将模型与基线对比,评估模型带来的效率和准确率提升。
2. 预测、目标和计划
除了预测方法的局限性,销量预测的另一个误区是企业通常会混淆预测、目标和计划三者的关系,造成预测的边界模糊,在实践中无法展现价值。根据预测专家Hyndman[1]的定义:
-
预测(forecasting)是基于历史数据(历史销量)和未来可能发生的事件(营销投入),尽量准确地估计某个变量未来的数值(未来销量)。
-
目标(goals)是企业希望未来发生或达成的事件(销量增长30%)。
-
规划(planning)是企业对于预测和目标的应对措施,即需要做什么(营销投入增长15%)才能让预测和目标一致。
在实际项目中,企业一般会每个月制定下个月的销售计划。由于销售计划具有考核效力,下个月的实际销量和销售计划具有很高的相关性。因此,为了得到准确率较高的预测模型,建模人员通常会将销售计划作为特征加入销量预测模型。但销量预测模型的目的就是为了指导业务人员更加合理地制定销售计划,那么到底应该先有销量预测,还是应该先有销售计划?
出现这个问题的根本原因是没有区分预测、目标和规划。在上面的例子中,销售计划实际上是目标,也就是企业希望完成的销量。销量预测模型不应该使用销售计划作为特征,销售计划应该在预测结果的基础上制定。相应的,在评估模型表现时,也不能将模型的预测误差率同销售计划和实际销量的误差率直接对比。
我们使用销售计划作为特征是因为销售计划是一些通常无法观测到的变量的代理变量(proxy variable)。例如,为了完成销售计划,基层业务人员会加大拜访客户的频率,但拜访次数没有记录,所以模型无法捕捉这类信息。因此解决这个问题的根本方法是更加全面地收集数据。
三、销量预测解决方案
销量预测属于时间序列预测问题,时序预测通常采用传统时间序列模型,例如ETS和ARIMA,对单序列进行建模。为了提升准确率,可以进一步进行多个时序模型的融合。但该方法在销量预测领域有一定局限性。我们从分析销量预测的技术挑战出发,决定最终模型解决方案。
1. 大规模多层级多时序问题
问题描述:销量预测可以理解为一个多层级多时序问题。具体来说,销量可以根据产品、地理等维度划分为多个时间序列。以一个有两级产品(品类和品规)和两级地理(地区和门店)管理体系的企业为例,最细的时序维度是地区-门店-品类-品规。一个较大规模企业可能需要预测数万,甚至数十万个时序。因此,模型需要对大规模时序组合进行预测。
另一个问题是时序之间存在附属关系,例如品规属于品类,门店属于地区。建模时需要考虑时序之间的交互关系,并且保证附属关系成立,例如品规销量汇总等于品类销量,门店销量汇总等于地区销量。
解决方法:为了捕捉时序之间的交互关系,并且允许相同层级的时序共享信息,我们选择多时间序列联合建模的方法,不使用传统的单时间序列模型。具体来说,我们将最细维度时序(地区-门店-品类-品规)的全部数据输入模型,再通过特征工程提取时序类特征(图4)。在预测阶段,我们对最细维度时序预测结果进行汇总,得到更高层级时序(如品类和门店销量)。
图4 时序特征工程方法由于以上建模方法针对最细维度时序,在汇总后,更高层级的预测不一定达到最佳效果。一种改进方法是对更高层级时序(品类或地区)分别单独建模,再用Forecast Reconciliation方法统一和优化各层级预测结果。
2. 多步预测问题
问题描述:多步预测是指我们关注多个目标,例如预测未来1-3个月每个月的向量。传统时序模型的应对方法是将T+1时间的预测结果作为T+2时间的输入值,用来进行滚动预测。这种方法的问题是可能造成预测误差累计。例如,如果模型有预测偏大的问题,那么每步预测时该问题都会放大。
解决方法:我们对每个预测目标时间(T+1,T+2等)分别建立模型,使多步预测更加稳定,代价是需要训练预测目标时间倍数的模型。
3. 间歇性需求问题
问题描述:对最细维度时序建模时,会出现部分时间销售量为零的情况,这种情况被称为间歇性需求,在销量预测领域是一个常见问题。训练数据中存在大量零值会造成模型偏见,降低准确率。
解决方法:我们采取两个步骤解决这个问题。首先,我们将有大量连续零值时序视为已停产状态,从训练数据中剔除,不对其进行预测。在筛选完时序后,还会有间歇性需求存在。我们根据实际数据情况采用以下方法或方法组合应对:
-
使用Tweedie Loss等对零值敏感的损失函数训练模型。
-
使用Hurdle Model,先训练一个分类模型预测销量是否为零,再训练一个回归模型预测在销量非零情况下的销量。
四、销量预测评估方法
销量预测模型的评估方法多种多样,可以分为技术指标和业务指标两类。
1. 技术指标
技术指标用来评估模型在验证集或实际生产中的预测准确率。最常用的技术指标是平均绝对百分比误差(MAPE),其定义如下:
MAPE的优点是作为一个百分比误差,非常易于业务人员理解。但MAPE有两个显著问题,导致在实际应用中会得到不直观的结果:
(1)MAPE是非对称的:当预测值大于实际值时,MAPE是没有上限的,而当预测值小于实际值时,MAPE最大为100%。
(2)MAPE在实际值为零时无法计算,这在间歇性需求常见的销量预测领域是严重问题。
为了解决上述问题,人们提出对称平均绝对百分比误差(sMAPE),但sMAPE存在自己的问题。
我们在实践中采取MAD Mean Ratio作为技术评估指标。该指标适用于间歇性需求场景,并且同样是一个百分比误差,易于理解。
2. 业务指标
业务指标用来评估模型应用后对业务产生的实际影响,是比模型准确率更加直观和有效的评估指标。业务指标需要根据具体业务设计,还是以消费品企业为例,与销量预测模型相关的业务指标包括库存周转率、订单拖欠率等。
五、对于业务设计的启示
根据项目实践中积累的经验,我们总结两点对于业务设计的启示:
(1)如果想最大程度挖掘数据中的价值,那么设计相关业务和IT系统时需要充分考虑数据分析和建模的需求。举例来说,一般业务系统的数据库设计不会考虑时间切片数据的保存,这就造成分析和建模时无法获取历史时点的数据,进而造成时间泄露等问题。
(2)销量预测是一种技术工具,需要和业务流程结合才能发挥作用。即使模型达到令人满意的准确率,如果混淆了预测、目标和规划,对模型产生不切实际的预期,或者模型结果无法被业务人员理解和接受,模型也不会对业务产生实际影响。
六、项目应用案例
1. 背景和需求
某医药企业生产数百种OTC药品,并通过多级分销商体系在全国进行销售。为了满足企业复杂的经营业务,供应链管理十分重要。该企业的供应链可以抽象为物料流和信息流,两者统称为产销协同链条,具体如下:
物料流:原料仓库-生产线-成品仓库-物流-渠道仓库-销售。
信息流:需求预测-渠道订单-总部计划-生产计划。
该企业产销协同链条面临以下问题:
(1)产销协同管理链条不同环节数据未打通。
(2)管理环节彼此独立,整个供产销协同执行过程预警信息不统一。
(3)销售预测不够快速和准确,供销协同动态调整不够快速。
针对第三点问题,实施项目的解决方案为基于历史销售和库存数据建立销量预测模型,以大幅扩展进行销量预测的品规范围,并且提供更加准确和更高频率的预测为目标。具体而言,由于该企业的最细管理粒度为地区-门店-品类-品规,我们需要对超过90,000个时间序列进行建模;预测频率为月度;预测周期为3-16个月。
2. 方案和效果
上述需求完全符合第三章节中描述的销量预测技术挑战,因此我们按照该章节提供的解决方案设计项目中的建模策略:我们对全部时间序列进行联合建模,对每个预测目标时间分别建立模型,并使用Hurdle Model应对间歇性需求问题。特征方面,我们使用基于销量、库存、营销政策等类型数据衍生出的数百个特征。算法方面,我们采用适合结构化数据并且高效的LightGBM。
利用时序交叉验证方法(Time-series crossvalidation),我们验证模型在历史数据上的MAD Mean Ratio表现,和采用预测模型之前的人工基准方法比较,模型在主要品规上降低了15%预测误差,取得较好效果。
参考资料
[1] Hyndman, R.J.,& Athanasopoulos, G. (2018) Forecasting: principles and practice, 2ndedition, OTexts: Melbourne, Australia. OTexts.com/fpp2. Accessed on <2021-03-23>.
百分点数据科学实验室成立于2015年,以“大数据科学+”为核心理念,致力于机器学习、深度学习及复杂统计理论方法的研究与创新,结合百分点科技集团业务优势,围绕应急风险预测、产业分析、区域经济分析、环境监测、消费者洞察、供应链优化、设备故障监测等业务场景,构建数据科学算法模型,落地智能决策应用、开展产学研合作、培养数据科学人才等。以AI和BI为重要支撑,数据科学实验室已服务数字城市、应急管理、生态环境、公共安全、零售、媒体出版、制造、汽车、金融等众多行业客户,帮助客户降本增效和科学决策。
-
企业非法集资风险预测
2020-11-18 13:21:45企业非法集资风险预测第一周周报 1.赛题理解 背景:非法集资严重干扰了正常的经济、金融秩序,使参与者遭受经济损失,甚至生活陷入困境,极易引发社会不稳定和大量社会治安问题,甚至引发局部地区的社会动荡。如何...企业非法集资风险预测第一周周报
1.赛题理解
-
背景:非法集资严重干扰了正常的经济、金融秩序,使参与者遭受经济损失,甚至生活陷入困境,极易引发社会不稳定和大量社会治安问题,甚至引发局部地区的社会动荡。如何根据大量的企业信息建立预测模型并判断企业是否存在非法集资风险,对监管部门、企业合作伙伴、投资者都具有一定的价值。
-
任务:利用机器学习、深度学习等方法训练一个预测模型,该模型可学习企业的相关信息,以预测企业是否存在非法集资风险。赛题的难点在于数据集包括大量的企业相关信息,如何从中提取有效的特征并进行风险预测成为本赛题的关键问题。
2.数据初步认识
该数据集包含约25000家企业数据,其中约15000家企业带标注数据作为训练集,剩余数据作为测试集。数据由企业基本信息、企业年报、企业纳税情况等组成,数据包括数值型、字符型、日期型等众多数据类型(已脱敏),部分字段内容在部分企业中有缺失,其中第一列id为企业唯一标识。
- 主要包含以下字段
id:企业唯一标识,
oplocdistrict:行政区划代码,
industryphy:行业类别代码,
industryco:行业细类代码,
dom:经营地址,
opscope:经营范围,
enttype:企业类型,
enttypeitem:企业类型小类,
opfrom:经营期限起,
opto:经营期限止,
state:状态,
orgid:机构标识,
jobid:职位标识,
adbusign:是否广告经营,
townsign:是否城镇,
regtype:主题登记类型,
empnum:从业人数,
compform:组织形式,
parnum:合伙人数,
exenum:执行人数,
opform:经营方式,
ptbusscope:兼营范围,
venind:风险行业,
enttypeminu:企业类型细类,
midpreindcode:中西部优势产业代码,
protype:项目类型,
oploc:经营场所,
regcap:注册资本(金),
reccap:实缴资本,
forreccap:实缴资本(外方),
forregcap:注册资本(外方),
congro:投资总额,
enttypegb:企业(机构)
(暂时只对baseinfo数据进行分析)
3.数据分析(简单操作)
- 初步分析是很多字段的缺失值太多,下面进行简单操作对缺失值较多的字段进行直接删除
[‘enttypeitem’, ‘opto’, ‘empnum’, ‘compform’, ‘parnum’,‘exenum’, ‘opform’, ‘ptbusscope’, ‘venind’, ‘enttypeminu’, ‘midpreindcode’, ‘protype’, ‘reccap’, ‘forreccap’, ‘forregcap’, ‘congro’] - 将单一值较多的字段也剔除,如dom,opscore,oploc
- 拆分月份特征
- 将无关特征剔除,如id
4.特征工程(暂不做处理)
5.模型选择
和之前的不良贷款预测一样,选用lgbm模型,参数设置如下
调参后续进行6.模型融合(后续进行)
第一周先进行以上简单的操作,接下来的一个星期继续优化结果,此次提交成绩如下,0.8138
-
-
商品市场预测的非直线趋势研究
2020-06-26 03:26:25市场预测是企业进行各种决策的基础,通过市场预测,企业可以避开市场风险,了解市场需求,有利于提高企业经营效益。文章主要介绍了预测的有关内容、作用、步骤及预测的基本方法,并对非直线趋势预测法作了详细研究,阐述了... -
上市公司风险预警案例可视化演示系统(附代码)
2021-08-07 09:32:45因此如何从企业经营过程产生的大量财务数据中挖掘出对企业财务风险有预警作用的信息成为我国上市公司迫切需要解决的问题。而数据挖掘技术的不断成熟正好解决了这一问题。数据挖掘具有通过对大量历史数据分析,挖掘出... -
2022-2028年中国镁合金行业市场发展潜力及投资风险预测报告
2022-03-16 14:07:59智研咨询发布的《2022-2028年中国镁合金行业市场发展潜力及投资风险预测报告》共八章。首先介绍了镁合金相关概念及发展环境,接着分析了中国镁合金规模及消费需求,然后对中国镁合金市场运行态势进行了重点分析,... -
2022-2028年中国4G基站行业市场发展潜力及投资风险预测报告
2022-03-17 17:17:55智研咨询发布的《2022-2028年中国4G基站行业市场发展潜力及投资风险预测报告》共十章。首先介绍了中国4G基站行业市场发展环境、4G基站整体运行态势等,接着分析了中国4G基站行业市场运行的现状,然后介绍了4G基站... -
【Ryo】SPSS Modeler:贝叶斯网络在预测银行信贷风险中的应用
2021-02-15 16:31:59面对复杂的信息结构和庞大的人群数据,运用贝叶斯网络能够理清相关影响因素的关联关系,是现在提高信贷违约风险预测正确率的有效方法;将能够影响贷款拖欠的因素引入到因果关联的网络结构中,计算出各类指标对拖欠的... -
大数据风控---风险量化和风险定价
2019-08-28 14:19:18在经营风险的过程中,风险定价是核心,指对风险资产价格的确定,它所反映的是资本资产所带来的未来收益与风险的一种关系,将风险偏好不同的资金供给方和资金需求方匹配起来,一般来说,两者成正向关系,风险越大,... -
中国氮化镓(GaN)行业“十四五”前景预测及投资风险预测报告2021年版
2021-11-22 12:17:027.2 中国氮化镓(GaN)行业发展前景预测 7.3 中国氮化镓(GaN)行业发展趋势预判 7.4 中国氮化镓(GaN)行业投资价值评估 7.5 中国氮化镓(GaN)行业投资机会分析 7.6 中国氮化镓(GaN)行业投资风险预警 7.7 中国... -
2022-2028年中国物流地产行业市场发展潜力及投资风险预测报告
2022-03-09 11:04:47报告类型:产业研究 ... 智研咨询发布的《2022-2028年中国物流地产行业市场发展潜力及投资风险预测报告》共八章 。首先介绍了物流地产行业市场发展环境、物流地产整体运行态势等,接着分析了物流地产... -
2022-2028年中国企业供应链管理服务行业市场发展潜力及投资风险预测报告
2022-03-28 14:28:36智研咨询发布的《2022-2028年中国企业供应链管理服务行业市场发展潜力及投资风险预测报告》共六章。首先介绍了企业供应链管理服务行业市场发展环境、企业供应链管理服务整体运行态势等,接着分析了企业供应链管理... -
银行数据仓库体系实践(18)--数据应用之信用风险建模
2019-08-20 19:03:06风险应用作为银行的主要数据应用之一,也是数据仓库重点支持的数据应用方向,本节主要介绍了银行信用风险防控中的模型建设步骤以及应用,供各位参考。 -
2020CCF BDCI 企业非法集资风险预测-线上0.848(水哥的baseline),在此基础已做到线上0.848,排名前1%...
2020-11-27 15:29:18Coggle数据科学:2020企业非法集资风险水哥b站直播回放 文章目录一、赛题介绍1.数据简介2.数据说明3.结果提交要求4.评测标准二、数据预处理1.分别查看每个表的数据缺失情况2.数据处理2.1数据初步处理2.2主表base_... -
简单OR复杂?机器学习专家为你解密企业风险量化模型
2018-03-30 00:00:00有这样两个客观事实推动了本文的撰写:传统信贷服务依赖人工、基于流程的风险管理特点,决定了金融机构的放贷门槛高、审批手续烦琐,导致倾向于向资金需求量较大的大型企业和高净值个人放贷,而将大量具有小微信贷... -
Barra 结构化风险模型实现(1)——沪深300指数的风格因子暴露度分析
2019-04-11 12:18:59米筐科技(RiceQuant)策略研究报告:Barra 结构化风险模型实现(1)——沪深300指数的风格因子暴露度分析 江嘉键 1 年前1 概述 Barra 结构化风险模型是全球知名的投资组合表现和风险分析工具。最近一段时间,我们... -
VaR方法(Value at Risk,简称VaR)[风险价值模型]
2013-06-26 14:31:13VaR方法(Value at Risk,简称VaR),称为风险价值模型,也称受险价值方法、在险价值方法 风险价值VaR(Value at Risk)技术是目前市场上最流行、最为有效的风险管理技术。 VaR方法提出的背景 传统... -
Python 房价预测 kaggle 线性回归 SVM 神经网络 随机森林 集成模型
2020-09-25 21:51:55本文对包含房产各项基本信息及价格的数据进行处理,利用包括线性回归、核岭回归、支持向量回归、神经网络、决策树以及集成方法等多种数据挖掘算法对房产价格构建预测模型,并利用均方误差作为指标对各模型作出了相应... -
城际列车开行方案的客运量预测及评价 (2004年)
2021-05-09 18:25:17从铁路运输企业的角度,由分析影响旅客列车客运量因素入手,利用灰色理论建立铁路旅客列车开行方案的客运量GM(1,h)预测模型,构建评价其经营效果(经济效益和经营风险)的计算方法。以沪宁线为背景,预测城际列车... -
2022-2028年中国医用纺织品行业市场发展潜力及投资风险预测报告
2022-03-25 15:38:27智研咨询发布的《2022-2028年中国医用纺织品行业市场发展潜力及投资风险预测报告》共十二章。首先介绍了医用纺织品行业市场发展环境、医用纺织品整体运行态势等,接着分析了医用纺织品行业市场运行的现状,然后介绍... -
数学建模模型案例解析大全105个.zip
2020-01-15 17:17:37数学建模模型案例解析大全105个如下所示: DVD在线租赁方案的优化模型 Word排版下载地址 ...组合投资的收益和风险模型 最短时间生产计划安排 最佳行走速度模型 最佳组队方案 最优投资组合模型 -
煤炭市场行情分析、预测及对煤企财务公司影响研究
2020-05-18 12:25:43本文通过煤炭消费弹性系数和产业链需求法,建立煤炭需求量的分析预测模型,通过协整和误差修正的计量方法,建立煤炭价格的分析预测模型。在此基础上,以某大型一体化经营煤炭企业为例,分析了煤市量、价变化对煤企利润的... -
中国网络优化行业发展前景预测分析及投资风险评估报告2021-2027年
2021-10-08 09:24:29第1章:全球网络优化行业发展现状与前景预测 1.1 全球移动通信行业发展现状 1.1.1 全球移动通信行业发展概况 1.1.2 全球移动通信行业市场规模 (1)移动通信业务规模 (2)移动通信设备市场规模 1.1.3 全球移动通信... -
企业风险管理的四种模式五种策略分别是什么?
2021-01-15 16:33:05企业风险管理一直是一个经久不衰的话题,企业风险管理对于企业主来说尤为重要,这在很大程度上关系着企业能否健康的发展。鉴于很多人对于企业风险管理这一内容了解不是很透彻,今天分享企业风险管理的四种模式和五种... -
A公司物流配送安全风险管理现状
2022-03-13 17:05:10第三章 A公司物流配送安全风险管理现状 3.1 A公司物流配送项目概况 3.1.1 A公司物流配送项目组织架构 本节首先介绍A公司主要组织架构,2016年A公司在山西省X市上市。公司主要的业务为清洁能源,通过生产经营焦炉... -
利用预测分析改进欠款催收策略,控制欺诈风险和信贷风险
2020-02-26 16:56:17前提摘要 在数字经济新时代,金融服务主管正在寻求方法去细分他们的产品和市场,保持与客户的联系... 准确的预测消费者未来行为可以让信用风险分析师,金融市场分析师和欺诈检测团队更好的制定和部署策略,以防止其... -
数学建模常用模型和算法介绍
2021-08-19 12:11:00模型和算法汇总目录常见模型微分方程模型元胞自动机模型动态规划模型决策树模型主成分分析图论和网路模型排队论模型时间序列分析常用算法:模拟退火算法遗传算法BP神经网络插值和拟合算法聚类分析算法 常见模型 微分...