最近在项目优化过程中,选择了TimeMixer作为业务预测的模型baseline后,发现业务的周期性其实学得并不好,直接复用的业务结果直接比传统机器学习还差!!!!
可能这时一些人的做法会直接从SOTA模型里挨个选型,毕竟每年上百篇的时序论文,总有一篇适合你的业务场景~
但也有怼着一个base模型进行魔改的方法拿到很大的提升,关键就在于如何把业务问题吃透,如何把理论的东西进行实践吧
废话不多说,接下来开始介绍一下的我魔改思路:
魔改一、建模目标
在深度学习中,一个模型最后输出值的好坏,同时由它的求解空间和求解方向来决定的,所以我首先想到的就是优化它的求解方向------------损失函数
损失函数如何优化?首先明确你的业务衡量指标,一般来说一个具体的业务问题有具体的业务衡量指标,比如点击率看CTR,转化率看CVR,当然一些复杂的智能决策场景就有更加复杂的业务指标,这些指标其实已经很好的提供了优化思路,不要浪费这些现成的东西~
具体来说,我优化的这个项目,看的是一个达标天数占比,达标的指标又是看绝对误差mape,建模的方法是回归预测,常规建模的优化方向是MSE,但是MSE可能和业务关心的指标并不在同一个梯度下降方向上呀~这时使用MSE函数优化出来的模型,在mse指标上表现很好,但是你并没有告诉模型实际业务关心的指标方向,所以你需要做的就是,把业务指标也变成模型优化的一部分!
我的做法就是,改损失!!!
将达标天数占比改为损失函数的一部分,怎么加?由于有一部分预测造成了达标天数占比的下降,所以关注点放在这些值身上,对那些不达标的值施加惩罚,通过每次预测值和真实值的mape不达标来做一个mask掩码,让模型对部分总是倾向不达标的样本增大学习权重,进而达到改变梯度优化的方向更加靠向达标天数占比的提升。
此时,大成!!!
结果证明,改变损失函数后,最后业务指标绝对值提升了6%!!!
(这个提升比在不改变模型结构的前提下算是很惊人的提升了,可见有时候猛改模型还不如改个损失函数,成本最小,收益却大!)
魔改二、模型结构
如前所说,模型结构决定了整个求解空间的分布,一个和业务场景问题不匹配的模型结构,求解空间就像是辽阔的平原,因为最优解它的天花板就在2米,任你怎么努力也找不到那个达到3米的路线~
所以根据业务问题优化模型结构,进而增大求解空间的天花板,是有效建模的最高境界!
不装了,直接摊牌我的做法
首先针对业务问题先分析数据特性,比如我这边拿到的是时间序列这样的数据,先将整个数据可视化出来,管擦一下数据的全局特性,局部特性~
再做一些数据假设,通过跟高明的分析手段来验证你的假设
比如我的做法,我观察到业务数据具有很明显的业务周期,于是针对全局(3年)和局部(6个月~1年)都做了频率分析(为什么选频率分析,周期性很强的数据,频率变化也很强,这一点可能是前提知识,获得这些前提知识的方法就是多读论文,广泛精读域内知识论文,并拓展一些域外论文,当你需要的时候,这些知识就派上用场了),发现其变换规律确实很明显。
加之看了很多使用频率分解来解决当前的领域问题------时序建模,因此就有了对先前的base模型进行魔改的思路------------它缺少了对周期信息的建模,我要改变它的结构,保留它有用的部分(时域分解和多尺度信息交互),因此下手的地方也就很明显了,它的周期项模块,完全和趋势项模块一个做法,显然缺乏了一些周期的深度建模
如果周期和趋势的变换相同,或者周期性并不强,那这两者共用一样的模块我可以接受!但这个业务的周期性太强了,我不得不对周期项模块动刀,对症下药!!!
为了加强周期项的学习,我引入了频域建模的思路,通过频域变换核函数,让周期项中不同的周期显化出来,各个频率分量也被解耦出来,这时就可以设计一系列的模块来学习不同频率分量的重要度和相关性~
最后的实验效果证明,这个思路很对,改变业务问题的求解空间,结合业务具体特性,引入周期项建模提升了求解空间的天花板,模型自然能够学得更好,优化的结果指标也更漂亮
求解空间的优化在我的业务场景里,带来了13%的指标提升!!
魔改三、训练结构
上面介绍了,求解目标和求解空间的优化,那除此之外,还有求解的过程本身也有空间,这个无关模型和目标,它甚至与模型结构完全解耦,求解过程的优化,纯碎是增加更多求解本身的优势
在这一块,我探索了训练框架精度的提升,训练的方式(增加预训练),以及对比学习(感觉这个又不止是过程,也带入了新的损失)
总之求解过程的优化,可能更加偏理论和玄学,有时候效果好却难以解释,有时候假设性很强的论点又得不到实验的支撑~
在我的多番尝试下,对比学习带来了3%的提升
几次迭代的指标上升概览图如下:
可以看出占比指标和不同种子的稳定性都得到了大幅度的提升!
写在最后
算法优化的过程还有很多空间,比如样本、特征等等,我这里由于业务特性限制,这些很难做进一步的优化了,因此更多倾向于目标和结构,当然不同的业务问题面临的具体难点不一样,需要根据实际情况来定
虽然这些求解的方法不一定能套用,但是这种算法工程师抽象的应对问题的能力,值得一点参考吧~
算法工程师更多的是对实际问题的建模和思考,虽然写代码的能力可能不如AI,但思考能力和迁移能力一定比AI强,我想这也是在AI工具和智能体发展如此迅速的情况下,各位算法人对自己的定位更加清晰的认知吧~
最后,祝各位炼丹大师,炼丹顺利!!!
参考文献:
【1】TimeMixer: Decomposable Multiscale Mixing for Time Series Forecasting
【2】Filter:Harnessing Frequency Filters for Time Series Forecasting
【3】FEDformer: Frequency Enhanced Decomposed Transformer for Long-term Series Forecasting