比赛VK补餐。追踪ML。第四名 怎么样?

图片

在本次竞赛中,这是2020年VKup资格赛的一部分,曲目ML,因此有必要预测潜在观众的比例,这些观众将观看在多个广告平台上展示的广告特定次数:将来的1,2,3。

这不是将最终预测发送到已知测试数据的经典竞赛,而是对在竞赛网站上启动的docker中提交给模型的完全未知数据的预测。

通常,这样的解决方案使参与者的机会均等,并且不允许那些喜欢窥视测试的人,用训练数据集丰富他们并使模型适合测试数据的分布。在这里,每个人都处于平等的地位,因为尚不清楚数据中可能包含什么:“垃圾”数据,零星异常值,无效的定界符等等。但是所有这些细微差别使我们同时考虑处理异常。

在这场比赛中,我获得了不起眼的第四名,我想告诉大家这是怎么可能的。

资料总览


初始数据以以下形式表示:

  1. users.tsv – : , , . , , , . ( ), .
  2. history.tsv — "-", ( ) . , , .
  3. validate.tsv文件是用于训练模型的验证文件,它仅包含有关针对特定受众(平台和用户)显示广告的时间间隔和价格的数据。用户和站点以(1,5,7,3,14,6)形式的字符串形式给出。
  4. 文件validate_answers.tsv-答案文件由三列组成:百分比(值从0到1),观众看上去被分类为1、2、3倍。因此,这些序列没有增加。

竞争的目的预测未来新数据的三组值(以validate.tsv文件的格式)-多少比例的受众群体会看到广告1.2倍,3倍。

有关比赛任务的更多详细信息,请访问比赛网站

预测变量


我使用的最终预测变量是一组2个复合物:

  • 基于历史的预测变量及其与新数据的比较
  • 仅基于未来数据的预测器

在第一个组合系统中,基于历史记录文件,会为分组的用户站点生成基本统计信息,然后在验证和测试文件中将它们汇总到用户站点。然后,以不同的方式选择预测变量-既基于在划分阶段和在模型本身中使用阶段使用预测变量的频率,也基于从上至下,从下至上的验证。尽管选择方案有所不同,但总体而言,它们全都归结为一组预测变量,因此,其中有七个。

通常,第二种复合物的预测因子(也有七个,令人惊讶地)的解释要简单得多:

1. 增量- 时间差异。这合乎逻辑吗?从逻辑上讲:时间间隔越大,视图的可能性就越大。当然,没有直接的依赖关系,但是从物理上讲应该是那样的;而且,如果我们分开考虑,这是最强大的预测器之一。

2. Delta2也是一个时差,但是每天转换一次(即,整数除以24)。也就是说,我们将线性依赖关系变成了分段依赖关系。这里的想法很简单:我们不区分小时数,但是这里很长的间隔(天)将设定自己的趋势。

3. cpm-价格本身,类似:价格越昂贵,查看的可能性越大,当然,也没有直接的依赖关系,但是在与其他基于历史的预测变量“调情”时,可以清楚地找到依赖关系。

4-7。这些都是罪恶的COS的广告,也被翻译成24小时刻度的开始和结束时间。与线性时间相比,这些功能的使用使您可以考虑一天中经过的时间间隔。这些预测变量的使用立即提高了1.5个百分点。

指标和回应


组织者提出的平滑平均对数准确率(以下称SMLAR度量

图片

最初的回应是按观看广告1.2.3倍的受众群体的比例呈现的,即在[0.1]范围内的值。

顺便说一句,KDPV指示此度量标准的行为,或者不是整个度量标准,而是指示其部分(对于预测的偏差的对数,MAE),用于预测和真实值在整个范围[0,1]的所有组合。

如果您仔细查看度量标准的公式,则:一方面,该度量标准近似对应于预测值与真实值之比的几何平均值(带有偏差),这明显好于算术平均值度量标准(由于最终结果较低)。另一方面,如果我们省略指数,该指数在低值时几乎与其度数的指数一样,则该度量将通过响应的对数以偏移量转换为MAE。因此,要构建思想上正确的模型,有必要使用带有偏移的初始响应和损失函数,其中存在对数形式为对数,或者相反,首先使用偏移响应对数和线性损失函数(MAEeps)但是,给定我的模型(未明确指定损失函数),我根据验证模型的结果选择了响应的最佳变换。

我考虑了以下响应选项-原始份额,份额的对数,转换为用户数量的绝对值,具有不同偏移量的对数(此处尝试移动到绝对值时使用一个统一的偏移量,因为份额的偏移量为0.005,并且受众为介于300到2500之间,因此偏移量应在1到12的范围内,但我只检查了值1和10),以及查看过广告的用户的绝对值的根。

图片

上图显示了针对不同响应进行训练的两个模型的结果:初始受众份额和参与者的绝对数量。

上图显示了两种模型的真实响应的排序值(按第一次扫描的分数)和预测值。立即清楚的是,大多数响应值都非常小,因此中值约为5%,这仅适用于第一次扫描(对于第二次扫描,中值已经小于1%,对于第三次扫描几乎为0%,对于该度量标准而言,小值和误差他们非常不愉快)。在该图中还可以清楚地看到,该模型的绝对值绝对更好,估计值中的散布相当小,尽管事实上在较小的值上几乎看不到偏差,结果是,这些较小的值上的误差严重影响了最后结果。在KDPV上可以看到相同的结果,在低值(特别是接近零)时非常弯曲。

平均图显示了每个已排序预测的误差;可见较小值的强误差及其随响应值增加而减小的趋势。

在底部的图上,已经针对所有排序值的累加总数构建了直接针对目标的度量图。这一切的结论是什么?第一个是选择的响应会强烈影响模型的结果,但是在下面的更多内容中,第二个结论要特别注意较小的值,尤其是接近零的值,很明显,模型将无法始终预测纯零,因此需要进行校正。而且大数值的误差不是很重要,首先,它们相对较小,其次,大数值的百分比误差将很小,同时它将对度量值的总贡献最小。

结果,根据众多实验的结果,获利明显的赢家就是回应-用户绝对价值的根本。同时,在不同的预测(按1、2、3个视图)上,有时也赢得了具有绝对值对数的模型,这是由于响应中的明显优势为0,因此,具有一定偏差的对数更好。但是,如果将其平均,那么没有任何偏见的简单根源就会显示出良好的稳定结果,因此,我不想使决定复杂化,而是停止采用简单的统一方法-只是人民的根源。

相对于份额(几乎两倍),向人的过渡显着改善了结果的原因是什么?

显然,事实是,求助于人,将受众的份额乘以受众,或将所有预测变量除以相同的受众,这是相对于“一个人”的维度,并考虑到我模型的基础是回归,最终估计是相对于每个预测变量的一种加权概率估计。如果我们仅对部分预测变量进行标准化,例如从第一组的预测变量(例如,所有对的总和)中进行归一化,那么这种归一化将使所有预测变量的维度更接近单个报告系统(每人),并且最终回归由于其响应只不过是每个预测变量(代表一个人的特征)对观看总概率的平均加权和,因此结果会更好。但是在决定比赛时,我并没有从这一方面着手,而是专心做出了回应。

模型


实际上,这一部分必须放在更高的位置,因为正是由于这种模型,我们不得不选择响应的类型和用于此响应的必要预测变量(模型已针对数据进行了调整),因此,有可能以另一种方式在不同的预测变量上达到可接受的水平结果大约是15%。但是我希望平均而言,选择特定的预测变量是有道理的,因此,选择预测变量的组合进行验证。

我使用了一系列回归模型树中的模型,即立体模型(1992年的模型!),并且其实现在R中的同名程序包中。相反,最终结果是两组模型的几何平均值,每组模型均由3个独立的模型组成,但是是以级联方式进行的:前一个模型(用于1个视图)的预测用作第二个和第三个模型的预测器,第二个视图的最终预测用作第三个模型的预测器模型。这两对模型的预测变量和中间调整都略有不同,并且它们的几何平均值是基于常识使用的(很好,经过验证,并带有公共课程),其含义很简单:正如我在上文中所写,特别注意零预测,并且通常只关注最小的预测。 ,而几何平均值正是它的作用:如果其中之一已经为零,那么它的预测就消失了(如果其中一个模型显示为零,那么这是合乎逻辑的,那么让它保持不变,比我们将预测从零“延迟”)。

并且由于模型的级联,模型间接地“理解了”(由于回归),因此每个后续响应都“依附”于先前估计的该先前预测的答案,而其余预测因子更正了该答案,该答案不应超过先前的答案。我还测试了三个单独的模型,分别预测了响应。由于第二次和第三次扫描中存在大量零,因此结果较弱,回归族不能完全变为0,并且当我们向先前的估计值添加“指南”时,该估计值已经为0或接近它,则回归族也落在此范围附近。值并仅调整对第二次和第三次观看的响应。

这个模型有什么好处?

当我看到任务时,我立即想起了这个模型,因为在以前的一个类似问题的竞赛中(线性关系及其校正),它也是最好的模型之一,通常,这里我们有相当线性的数据,数量之间存在明显的关系视图(第二个小于第一个视图,第三个小于第二个视图),数据很少-只有1008个观测值,预测变量数量少,可能是某种线性破坏的依赖关系。此外,该模型非常快,构建过程花费了几秒钟,因此方便她测试许多假设。但是,她没有可以在其上进行重新训练的超参数(除了邻居(其他参数是校正性预测),我没有使用过)。

在此模型中对一棵树的预测如何?
, , 100 ( , , 10-20 ), , , , : ( ), , ( , ) .

, , .

调整项


此外,对预测值进行了很小的调整,即:当从绝对人数转换为份额时,可能会发生很小的价值(正值,大于0或大于1)的情况,如果价值大于1,则其调整不会发挥更大的作用(这样的航班可能很少,如果不是,那么就不重要了),但是在价值较小的情况下,这是相对关键的。通过推理,可以接受的是,如果我预测例如1个人(或0.5个人,未进行四舍五入),那么最大听众为2500(对于火车中的已知数据(这确实发生在测试数据中),这是完全未知的),即0.0004(顺便说一句,在火车上,最小值为0.0004),这意味着在此值附近的某个地方,有必要将较低的值设为0,并且鉴于我的模型是链式构建的,因此下一个模型的构建及其预测取决于预测的零,依此类推。它影响很大。

选择验证阈值并没有多大意义(因为无论如何该模型都会根据这些数据进行调整,并且我知道分布),所以我向公众看了一眼(针对某些选定值),但最后我还是选择了三个模型之一美丽的舍入阈值为0.0005,第二个理论值为0.0004。

从顶部调整更容易,比0.95至0.95中付出更大的值,0.95制成基于与所使用的测试数据的最大份额一个由于调整幅度最大(火车中的最高比例为0.93),因此该调整措施实际上对公众没有任何影响(单次出行显然是在公共场合),因此仅用于私人安全。并且还添加了与零有关的校正,如果在第一次扫描中预测为零,则尽管在第二次和第三次扫描中模型的预测为零,但它们的预测也为零,这对第二个符号处的影响不大(该模型实际上是总是如此,它本身(小于前一个且为零)做到了,但是为了安全起见就留给了私人。

结果


结果非常依赖于响应的类型和选定的预测变量,例如,即使您预测了分数或什至比其对数更好,您也可以选择其他预测变量,结果约为16%,并且如果使用绝对值并重新选择预测变量,然后一切开始于15%,所以这是我的基准。

顺便说一句,这些结果已经足以保持前五名的位置,但是“提升”更多的利益很有趣。

那么,这15%的改善又是什么呢?

一般来说,仅增加几个小时,仅几个小时(开始和结束时间)立即产生13.97%,将它们更改为正弦余弦值提高到13.44%,然后提高到13.25%将小数值四舍五入到零,并且几何平均值这两个模型的平均值,也就是说,对于测试(公开)已经进行了更多的调整,因此,我仍然对公众有点过分。

在这场比赛中,有必要选择一种解决方案。现在,在信用证中查看,我发现我选择的解决方案也对私人用户来说几乎是最好的(位置没有改变)(最佳私密性低于0.02个百分点),但是如果您选择的答案不是那么四舍五入,那么就私下解决。情况稍差一些-13.6%,即没有对公众进行强有力的再培训,但是这种调整后的作用也不大。

结果,主要的储备成功:在选定的响应模型立体主义者,级联模型(1-> 2-> 3)和时间s e预测子(sincos)下选择的预测子

结论


尽管第一五个地方的获奖者所使用的各种模型,包括现代的事实(1个地点- SVR,2处- catboost,3处- 神经网络,5个地方- lightgbm,虽然这些获奖者有更复杂的预测) ,我以1992年最古老,经典的模型之一(甚至后来出现了SVR想法)在相当简单明了的预测变量上获得了第4名,这再次证明:使用生成的预测变量并不总是足够的(这些方法在最终评级中要低得多,约20%),预测变量的常识,响应的转换以及模型中损失函数的选择(如果有)在这里起着重要作用。

总的来说,比赛是有趣且富有创造力的,并给出了相关的结论。

我希望在比赛的最后(全日制)阶段,这项任务会同样有趣。

All Articles