📚词汇和术语
任务类型

在工程实践中,常见的机器学习建模任务包含回归、分类和聚类这三大任务。
回归任务:旨在预测连续数值,比如房价预测或销售量预测。
分类任务:旨在将数据分为不同类别,如垃圾邮件检测或疾病诊断。
聚类任务:旨在将数据分成类似的组,帮助发现数据中的潜在结构,比如市场细分或者客户群体分析。需要强调的是,在建模前我们可能不知道存在多少个细分市场和客户群体。
其中回归和分类任务又被称为有监督学习,在建模时需要用户对每条数据样本相应的标签,这样算法在学习过程中就受到了监督和指导。这种指导有助于算法理解输入和输出之间的关系,并在面对新的、未见过的数据时做出准确的预测或分类。
而聚类任务被称为无监督学习,因为在这种任务中,模型并不依赖预先标记或已知的输出来进行学习。相反,算法需要发现数据中的潜在结构或模式,将数据样本分成类似的组,而不需要预先知道这些类别的标签。
在工程实践中,有监督学习的任务通常更为常见,因为它适用于许多现实世界的问题,并且有标签的数据更容易获取和使用,因此本平台当前仅支持回归和分类这两种建模任务。
对于建模任务是回归还是分类需要用户自己根据实际情况进行定义,比如在量化投资场景中,我们可以预测明天股价的数值,这样标签是一个连续数值,就是回归任务。我们也可以选择预测明天股价的涨跌方向,这样标签就是上涨下跌的2个类别,就是二分类任务。当然我们还可以根据上涨下跌的不同程度,细分成更多的类别,这就是多分类任务。
建模模式

用户在上传完毕手动整理数据集,并配置和启动建模任务后,本平台默认会在后台先进行自动化特征工程(AutoFE),再进行自动化机器学习(AutoML)。用户也可以在高级配置中取消勾选。
在AutoFE环节,本平台将根据原始特征和平台算子构建并高效探索特征空间,从而自动进行特征生成衍生,构建共同增益最大的特征组,为用户提供更多解释数据的新角度和新方法。
在AutoML环节,本平台将根据上游的特征和标签自动进行算法的选择和超参数的调优。如果上游进行了AutoFE过程,则此处的特征包含了原始特征和AutoFE衍生特征,否则仅包含原始特征。我们推荐用户同时使用AutoFE和AutoML,这将可能获得更好的建模效果。
AutoFE
AutoFE的中文名称是自动化特征工程(Automated Feature Engineering)。本平台内置了逸思长天自研的自动化特征工程搜索算法,会根据用户上传的数据集原始特征和算子集合(详见:AutoFE算子手册)构建并高效探索特征空间,逐步进行特征生成衍生。
特征生成过程会有一定概率在浅层衍生特征的基础上进行更深层的特征衍生,通过同时最优化每个特征表征的方向,从而挖掘出更深层的数据规律。最后本平台会探索出共同增益最大的特征组,这些高级特征有显式的公式展示,有更好的可解释性,给用户提供了解释数据的新角度新方法。

在自动化特征工程技术领域,目前仍然存在着特征探索空间巨大且不好把控探索过程的挑战,所以我们逸思长天团队设计并平衡了采用和探索这两种模式。
在采用模式下,AutoFE会根据之前探寻过的最优路径进行搜索,而不去考虑那些次优路径,这样的好处是可以加快搜索过程的收敛,但也可能因为注重“短期利益”而错失远期效果更好的特征构造结果。
而探索模式下则恰恰相反,AutoFE会发散性的产生更多的路径,然后在部分表现较好的路径中进一步发散性的搜索。这样的好处是会探寻更多可能,但是也会消耗大量的时间。

用户可以在新建任务时选择 【高级设置】 通过“特征生成模式”选项进行设置,如下图:

在建模任务的常规配置部分增加了“开启深度特征搜索”选项,默认是勾选的。这意味着我们会对特征进行更深层的嵌套搜索,这也会花费更多的时间。否则就会浅层嵌套,比如:嵌套一层或者两层。如果用户觉得过于复杂的特征没有可解释性,这里可以取消勾选。

AutoML
AutoML的中文名称是自动化机器学习(Automated Machine Learning)。本平台内置了逸思长天自研的自动化机器学习算法,会根据上游的数据集,和机器学习算法及其对应的超参数集合,在用户给定的时间预算下搜索出最优的机器学习模型。

随机种子
随机种子是用于初始化随机数生成器的起始点或种子值,一般为正整数。在机器学习和统计建模中,许多算法和模型会使用随机性,例如在数据拆分、权重初始化或样本抽样等过程中会用到随机数生成器。这些随机数的生成是基于初始种子值进行的。
随机种子能够控制模型在不同运行中的随机性,使得实验结果可以重现(在其他配置不变的情况下)。如果不设置随机种子,每次运行时生成的随机数可能不同,这会导致每次运行模型时得到不同的结果。而设置了随机种子之后,即使重新运行模型或算法,只要种子值相同,生成的随机数序列也将保持一致,从而确保了结果的可重复性。
保持结果的可重复性对于实验复现、模型评估和调试都非常重要。因此,在建模过程中,设置随机种子是一种常用的实践,以确保结果的一致性和可重现性。
验证集分割
验证集分割是为了评估模型的性能和泛化能力。本平台在建模初始环节会根据用户设定的分割方式和分割比例将数据集分成训练集和验证集两个部分。一般来说,训练集的比例要更多,以此让模型在训练阶段获取更多信息。

平台将使用训练集来训练模型,但最终模型的效果评估是对新的、未见过的验证集,平台页面中用户看到的建模结果的分数就是基于验证集的结果。
验证集分割将有助于提升模型的泛化能力,即模型对新数据的适应能力。如果模型在训练集上表现良好但在验证集上表现较差,可能存在过拟合的问题,即模型过度适应了训练数据,而无法很好地推广到新的数据上。
本平台支持常见的验证集分割方式如下:
随机抽样: 随机从整个数据集中抽取样本作为验证集和训练集,没有特定的分布要求。
分层抽样:根据标签或类别的分布,在切分验证集和训练集时保持相似的标签分布。这对于标签类别不平衡的情况特别有用,以确保训练集和验证集中都包含各个类别的代表性样本。
时间分割:在时间序列数据中,按照时间顺序切分验证集和训练集(防止扰乱时间顺序,影响时序特征构造)。这对于时间相关性强的数据集,例如:股票数据、天气数据等,是一种常用的切分方式。
手动分割:将训练集和验证集分割由用户手动上传数据集文件。
在工程实践中,分类任务的样本标签分布往往不够均衡时,比如在金融领域中,欺诈交易的发生率往往相对较低,此时如果还是用随机抽样方式进行数据集的分割,有不小的概率会导致验证集没有欺诈交易的样本,从而验证集评估的分数的有效性大大降低。

此时使用分层抽样的方式将避免上述情况发生。通过将总体数据根据样本标签先行分层,然后再分别对每类标签按比例单独抽样,从而能确保训练和验证集都有足够的欺诈交易样本。

除了手动分割之外的验证集分割方式都具有一定的随机性,有时很难按指定的要求去分割数据集。用户可以选择手动分割的方式,将训练集和验证集分割由用户自行决定,此时需要分别单独上传训练集和验证集这两份数据文件,如下图:

时间序列
时间序列顾名思义是按时间顺序排列的一系列数据点的集合。这些数据点通常以等间隔的时间间隔进行采集或观察。时间序列可以是各种类型的数据,如股票价格、气温、销售数据、传感器读数等。这种数据一般都会带有一个时间列标签,据此可以按时间进行升序排序。

对于某些特殊的时间序列数据可能还会有时间组标识,用来区分同一时间的这条数据是由谁产生的,如同一时间有多个股票的特征数据,或者传感器数据等等。

在传统经典的机器学习建模任务中,我们往往用一行数据的一个或多个特征(X1、X2、X3)来预测这行的Y标签,我们默认预测Y所需要的信息都已经包含在了这行的特征当中了。

但是对于时间序列的建模场景,如果我们认为当前的时间序列存在一定的模式、趋势和周期性,那么建模时就不仅仅要用当前时刻的特征信息来预测Y,更要回望当前时刻过去的特征信息去预测Y。

这里需要强调的是,尽管有的数据的表现是时间序列的形态,但是由于其不存在趋势周期等历史规律,所以这类建模任务也不属于时间序列建模任务,比如彩票号码中奖预测,显然是和过去信息是无关的。所以,对于一个建模任务是属于经典机器学习还是时间序列机器学习,需要各位自行去判断了,但是显然没有时间列索引一定不能是时间序列。
接着我们细化到时间序列机器学习的操作,主关注两个问题:
对于时间列格式,由于其的确存在较高的灵活度,所以我们将其交给用户进行定义,用户在上传数据集后,会选择哪一列为时间列,然后此时会有配置按钮供用户配置。
以金融领域的期货数据日频数据为例,由于其数据为日级别,所以用户在配置时选择日期格式即可,并且这里的"2018-11-20"也满足"yyyy-mm-dd"格式,如果你的格式不是这种日期表现,而是"11/20/2018",那么你可以自定义修改为"mm/dd/yyyy"。

这里提供为大家了一个关于时间的对照表供大家参考:

接着我们看如何吸收历史特征信息,在刚才介绍时间序列建模的数据提到,要回望当前时刻过去的特征信息去预测Y,那么需要回望多少呢,其实这需要根据业务的具体情况而定。
比如在金融投资中的股票量价数据,过去5天、10天的数据包含了短期市场信息,20天、60天则是中期,120天和240天则是长期,240天在股票市场中也接近一年的交易天数。但是对于水利场景中的水位预测,可能就没必要考虑这么多天,过去1、2、3、4、5这5个回望窗口的信息就足够了。
因此我们也将这个配置开放给用户自己去定义,用户需要输入一串连续递增的数字,来表示不同的时间窗口,并使用英文逗号隔开。自动化特征工程将据此回望吸收过去的特征信息,如5,10分别对应着过去5条、10条数据的特征。需要注意的是所填数字表示按时间顺序排列的先前数据条目数,如果设置了时间组标识,则会考虑相同标识下之前的数据条目数。

比如:我们可能搜索出过去5天的收盘价平均值:ts_mean(close, 5),还会结合窗口生成可能:ts_mean(close, 10) 以及 ts_mean(close, 20)等等,并会随着搜索深度的提升,对特征进行更深层的嵌套构造(更多算子可以参考:AutoFE算子手册中的时序算子部分)。

此外,在时序数据建模中,面对外部环境不断变化的场景,在验证集分割方面仅支持根据时间进行比例分割的方法,防止随机抽样和分层抽样导致数据的时间间隔不连续。这种方法能够有效应对时间变化导致的数据动态性,允许模型在不同时间段上进行训练和验证,更好地反映真实环境下的变化情况。
比如:在信贷风控的预测用户未来是否逾期的场景中,工程师一般会根据时间将数据升序排列,然后选择某一个时点,将数据切分成远期和近期两个部分,接着用远期的数据训练、近期的数据验证,以此来评估过去的某种行为规律在当前是否仍然还适用。
为了兼容其他模式的分割比例参数,本平台对于时间分割模式下的分割比例也是采用0到1的小数输入形式,默认是0.25,即代表75%的远期数据用于训练,25%的近期数据用于预测。用户可以根据实际情况手动调整。

重采样
在机器学习的分类任务中,经常会出现数据集标签样本不均衡的问题,尽管我们可以用roc_auc等方法(详见:模型评价指标)去合理评估样本不均衡下的建模结果,但是在模型训练时还是会更多吸收标签样本较多类的数据信息,因此我们仍可以有很多选择去调整数据集分布,一般包括上采样、下采样这两种方法,它们又统称为重采样(Oversampling)。
上采样(Upsampling):通过增加样本数量来平衡数据集中不同类别的样本,比如复制、SMOTE合成等。
下采样(Downsampling):通过减少某个类别的样本数量来平衡数据集,比如随机或选择性删除等。
由于下采样可能会损失样本的有效信息,上采样的合成方法造出的结果也是非真实的数据,加上不同建模任务的标准也不同。目前用户可以在高级设置中选择自动、上采样、下采样这3种采样模式,默认是自动,如下图:

除非用户的数据集在分割数据集之后,由于数据点样本过少,出现了验证集中不存在少标签样本的情况,此时会触发平台的重采样机制,该过程会将用户该类别样本进行复制,使得验证集至少可以有一个该类别的样本。模型最终结果可能会受到些许影响。

在这种情况下,平台会提示触发重采样的建模结果,此时建议有两种方式进行解决:
同时触发重采样会在建模任务列中对应的任务出现“重采样”提示,如下图:

最后更新于
这有帮助吗?