终于有时间思考更加宏观的东西啦, 你说面对的系统或者问题有几类? 你是否都是指望把所有的数据train到一个模型里,然后收工回家? 接下来尝试总结一些系统的类型,纯手工制作。
观察型系统
这类任务是非常普遍的,最简单的进销存类的预测任务。 通过观察销量的变化,从而准备充足的货量,既不让产品过剩也不让产品脱销。
这里一定要强调一下,这是一个观察型的任务, 本身我备货多与少不影响需求的变化,预测需求仅仅是为了让供给更加匹配,防止过程中的损失。
这类任务最常选用的是训练模型去解决相应的问题,你可以放心的使用巨型复杂的模型,因为你不必担心解释的问题,只需要预测准就好,使用多少参数都是能接受的,且这个过程中是不会对需求产生任何干预,也不用担心真值受损的问题。
类似的还有图像识别任务,你只需要提升图像的识别准确率,而你也仅仅需要识别的准确率,可以用预测的结果直接做决策,也不会依赖识别过程。
特征不够 or 模型拟合能力不够
这里说一个比较笨的方法吧。 一般是抽出来一些错误的case进行人工归因,其实不需要标注多少。观察归因的分布, 如果标注后的分布大部分都是一个原因,并且通过现有特征无法是没办法表达的,应该就是有一些特征没有刻画完整, 如果原因的分布散列,感觉啥原因都有,分布比较分散,这是因为模型对所有类型的样本学习都不充分,那基本上就是模型拟合能力的问题啦。
这里还可以介绍一种方法是解决这个问题, 如下图所示, 是一个简单的单维特征的拟合, 如果我我们发现改变采样方式(例如采样虚线前面的部分,评估指标劣化很大),评估指标抖动很大,其实说明你模型的拟合能力存在一定问题,体现在泛化性上,模型学到的内容比较有限。如果你通过不同的采样方式评估,发现评估指标变化不大,都是一如既往的差,那可能就是特征的问题,是缺少关心维度的表现。
虽然我们有一些方式进行宏观的判断,但是这两种原因也是经常同时出现的, 例如你特征刻画不好,势必会带来拟合能力浪费, 反过来拟合能力不够,也会造成特征能力的浪费。
干预型系统
与观察型系统相对比就是干预性任务, 这类任务是典型问题是O2O的供需问题。 当我发现一个区域内的供需极度异常,系统需要做动作去干预需求。 例如缩圈和调价。 你会发现这种任务天然的瑕疵是,真值是被干扰的,如上文说到的缩圈和调价,本身又干预了需求的分布,这个时候,如果你想做模型拟合,真值的分布是有问题的。
而且这类系统还有一个问题是,解决这个问题最重要的点不是需求预测的有多准,而是知道需求增加以后, 采用什么样的干预手段才是最重要的。 所以这里的建模思路并不会把建模的重心放到构建一个巨复杂的模型拟合需求。 而是通过其他方法,获取目前造成供需紧张的原因以及采用什么样的手段奏效。
这类系统一般一定会引入因果类的模型,不管因果图还是因果强化类的模型,一定把干预和归因放到模型选型的首位。 而不会花很大的功夫建模预测某个值的变化,其实也是预测不准的。
最优化型系统
最后一种是纯优化型系统,典型的问题是匹配问题,或者在O2O里叫做分单问题。 问题描述是我有几个订单,和几个骑手,如何匹配让整个骑手的代价最小的配送完所有订单。
这类问题一般会采用运筹规划去建模, 这里暂时不需要考虑未来的某个环境变化。 只需要关心,当前时刻我的环境就是这个样子的,那么针对这个环境我的最好的选择是什么。最后这个问题定义好以后求出来的就是一个最优解。 当然你如果想考虑未来一段时间的变化,会把这个问题变得更加复杂,会转移成观察问题或者干预问题。
控制型系统
这里还可以介绍一类问题,这类问题就是控制问题, 实际的业务中经常是解决成本控制问题或者是稳定飞行的问题。 这类问题往往是给你一个系统的目标,然后系统通过监控控制和系统的反馈结果,最终将系统控制到一个稳定状态。 其实纯粹从业务的是视角去看, 供需调控问题,宏观上是一个控制问题,需要做一系列的动作将环境控制到一个稳态上。
可以看的出来,控制系统有几个关键角色, 参考值、误差累积、控制函数、传递函数、输出。
总结
说了这么多,主要是想回答模型选型的问题。 大部分算法工程师遇到问题就想训练一个模型,给工程同学渗透是遇到问题建个模型就行,然后就关注预测的准确与否就可以啦。 预测不准就加特征,用更加复杂的模型等等。不行就只能跑路啦。
其实模型选型是有一定的门路可寻的,至少不是一招鲜吃遍天的工作,当我们拿到一个问题的时候,就是想明白这个需求是要解决什么样的问题, 如果是观察型任务,就要回答是特征不够还是模型拟合能力不足的问题。从而有一定的技术钻研空间。