商业与机器学习

背景

关于机器学习(Machine Learning,ML)技术方面的文章和书籍已经非常多了。但是关于企业、商业和ML结合的一些思路方法却非常少。最近看了Coursera上How Google Does ML的课程,刚好可以总结一下这方面的内容。

ML Surprise

所谓的surprise是这样的:如果我们把企业使用ML技术帮助自己的业务,最后获得成功所要进行的步骤分为如下几项:

定义KPI(Define KPIs)
收集数据(Collecting Data)
构建平台(Build Infrastructure)
优化ML算法(Optimize ML Algorithm)
和公司现有的系统进行集成(Integration)

大家认为每一项需要多久呢?很多人都认为是如下的时间分配:
商业与机器学习
也就是会花很多时间在最“cool”的东西上边:读最新的paper,然后调超参,调卷积层层数等等。而事实上是这样的:
商业与机器学习
所以其实绝大部分人,都会under estimate 收集数据所花的时间。同时也很容易under estimate为了迭代的训练算法以及规模化部署而构建平台所花的时间。另外,由于一旦ML建好了,我们就能测算很多数据了。因此这种情况下就不需要花很多时间来定义KPI,比方说进行大量的市场调研啊,或者从ppt里边搞出来一个什么KPI之类的。

那问题来了,既然ML not so important,我们还搞毛ML啊?其实主要是在通向ML的路上的每一步,本身就会产生很大的商业价值。

ML的10大陷阱

下面说一下有关ML的10大陷阱。这十大陷阱是会影响最终ML项目的成功的。

商业与机器学习

  1. 搞ML算法相关和搞相关的代码花的时间差不多。 并不是这样的。要做好ML,周边的数据集收集整理,相应的训练代码、部署代码等等都会花很多很多时间。
  2. 要做ML,但是还没有数据。 哈哈,full stop,先收集数据吧。没有数据,谈ML没任何用。
  3. 假设数据已经可以用啦。 如果还没收集数据,或者说没有权限拿到数据,又或者说公司里有不少数据,但是这些数据还没有很好的使用起来(做个分析啥的)的话,那就先把数据收集、整理一下吧。
  4. 忘记将人加到整个ML业务流程中来。 当ML部署好之后,假如真的把人工都丢掉,那就是真的将公司重大的业务至于巨大的风险之下。事实上,即使有了ML之后,也应该安排一部分人来处理ML未能很好处理的一些特殊情况。
  5. 你的产品为了ML而ML。 原话是“Product Launch Focus on ML Algorithm”。错了,你的产品一定是为了给用户提供价值的。用户才不管新你是不是ML。
  6. ML的优化目标错了。 比方说,Google的搜索结果优化目标不是提供相关的文章,而是优化点击率啥的,最后肯定用户都不用了。
  7. 你的ML是否真的给真实世界带来价值了。 很多ML功能其实真的没给世界带来啥有意义的价值,一般这个时候老板就说,有那个时间金钱还不如干点别的。
  8. 使用pre-trained模型vs自己训练。 这个就是如果pre-trained模型能够满足需求了,不要自己训练,毕竟很多pre-trained模型使用了大量的数据,而自己收集数据会很耗时。
  9. ML模型训练一次就好了。 如果光在自己电脑上训练了一次,就说我基本上完成任务啦。这个就大错特错了。事实上,这也就完成了10%。如果ML模型是和公司核心业务相关的,你需要retrain模型很多很多次,收集反馈,不断改进。
  10. 自己搞新模型。 这个其实是比较confused。事实上这一点想表达的是,自己搞模型是非常expensive的,很多算法模型都是highly tuned,而且算法创新都是花了数年甚至数十年。 所以尽可能的从现有的模型,或者有定义的模型,或者稍作改动然后用吧。

既然ML有这么多问题,这么多陷阱,这么多坏消息,那……有没有什么好消息呢?好消息就是,当团队一路走向ML的过程中,每一步都会带来很大的价值。当把每一步都做好了,ML其实就已经在等着了。而且如果ML对自己团队很难,那么其实对其他团队也很难。ML一旦做成,那么就会给用户带来很大的体验提升。这一点是竞争对手很难copy的。因为他们一样需要收集非常多的数据,然后不断地改进模型训练模型分析模型,这个过程没那么容易。

业务中ML从无到有的5个阶段

商业与机器学习
业务中,ML从无到有一共有5个阶段(事实上上边这个图也适用于很多业务的流程,并不一定是说ML的5个阶段):

  1. Individual Contributor(一个人做)
  2. Delegation(一个小型团队/业务代表团一起做)
  3. Digitization(数字化)
  4. Big Data and Analysis(大数据+分析)
  5. Machine Learning(ML)

其中1, 2,3是将input转出到output
4是用来挖掘一些业务中的insight
5则是根据insight,去指导input/output过程。

下面逐一解释:

  1. Individual Contributor。 一个人做某一项业务。类似公司前台,需要接待、回答问题、收发个快递等等。这个阶段没有数字化,也没有并行化。

    这个时期是一个很好的原型时期,可以尝试很多idea,失败的成本很低。如果要跳过这个阶段,那么这个业务压根就没有验证过。这样怎么可能让老板或者投资人出钱招100人,或者是构建一个大的软件呢?而且如果一上来就搞大的,很可能其中有很多点子是脑补出来,是错的。

    如果在这个阶段时间过长呢?那这个操作人员就会越来越熟练,然后跳槽了。另外当需求来临的时候,也没法及时扩大规模,从而错失机会。

  2. Delegation。 一个小团队做。当一个人做的那个业务越来越重要,规模越来越大了之后,公司就需要扩大相关的团队。从一个人变成几个人。比方说收银员。他们是相同的业务,以及几乎相同的动作并行做。

    如果跳过这个阶段,那么就错失了将这个业务流程化的机会。而且没法真正的挖掘商业价值。毕竟这个阶段的成本并不小,商业价值的大小就在这里更好地衡量了。同时,由于是一个团队一起做,那么每个人很可能会产生轻微的差异,同时负责的业务样本更多了,这时是一个很好的理解产品的机会。另外非常重要的一点,牛x的ML系统也是需要一个团队的人来review的。Google里有专门的团队专门review搜索的结果。跳过这个阶段,那么后续也没法做。

    如果待在这个阶段太久会有什么问题呢?整个团队越来越庞大,服务于单个用户的边际成本一直会比较高。同时越来越多的声音告诉你,这件事儿自动化没戏。此时公司就会被锁定在这个阶段了。

  3. Digitization。 数字化。我们可以将2中的一些核心的,重复度非常高的业务单独拿出来,让计算机来做。一个例子就是ATM,自动取款机。这个会优化用户体验,降低运营成本。谁都不会去柜台排队就为了取100块钱的。

    如果这个阶段跳过了,那么也会有很大的问题。因为首先ML本身也需要IT Infrastructure。ML只是处理哪些数字的问题。并不服务用户。因此既然ML和IT Infra是一起的,其中一个失败就失败了。另外,ML的成功是要求高度自动化的。如果说Digitization这块需要人工干预,那整个项目也就都不可能自动化了。因此应该多做一些software的事情,来证明这个业务的自动化本身是有价值的,而把ML作为the ice on the cake。

    如果待在这个阶段时间过长,那么竞争对手就会开始分析数据,得出insight,改善他们的服务,那很多用户就很可能流失了。

  4. Big Data and Analysis。 当我们数字化了一些业务之后,下一步做什么呢?我们需要收集一些数据,分析出一些运营和用户方面的insight。一个例子就是丰田的精益管理。丰田会对每一个生产点进行测量记录,然后不断地根据数据改进这个过程。这个过程是一个很好的调整内部运营和服务外部用户的过程。因为一开始的时候,各种KPI啊,用户的相关指标都是假设的。现在有了足够多的的数据,我们完全可以进行更近一步的分析和确认了。

    如果跳过这个阶段呢?那么我们根本没有整理和清洗数据。如果你自己作为一个人没法画出数据的直方图,那ML也没法帮你画出来。同时,你很难定义清楚ML究竟带来了多大的价值。

    如果待在这个阶段太久呢?会限制公司能够解决问题的规模和速度。Google曾经在搜索算法上停滞了4年之久。现在是都NLP了。但是之前就停滞了。

  5. ML 经过了大数据分析这个步骤,我们就可以进行ML来将整个过程自动化了。一个例子就是youtube的视频推荐。这个阶段就是非常fancy的阶段了。可以让用户有更好的体验等等。