如何做机器学习算法应用工程师?

1.定义

  在我目前的理解上,算法工程师分为两类。其中一类是偏研究型的算法工程师,例如复现paper,改善模型,发paper,出专利,这一类人才大都是科研大佬。第二类则是更加贴近业务的算法工程师,不如称为「算法应用工程师」。这一类同学主要是与业务同学进行搭档,通过现有的一些成熟模型来帮助业务同学解决问题。

2.工作内容

  在我的工作中,大多数时间都花在定义问题、数据预处理(包含ETL、特征工程、特征筛选等)、模型评估上,而模型的训练、调参等所花费的仅仅是少数时间。这也印证了吴叔叔(Andrew Ng)所说的“实用化的机器学习基本就是在做特征工程”

  下面分别从这三个方面来具体说下:
  
  首先是定义问题。定义问题包括很多方面,例如业务需求定义、模型产出形式、变量的定义与衍生、目标y的定义等等。在大多数时候,业务方同学对自己的需求并不是那么明晰,很可能只是说“我需要一个简单的用户画像or某个客群识别or某个值的预测”,但是具体的细节例如这个模型未来的使用场景、变量的要求等等都是不清楚的,需要在不断的讨论与数据验证过程中进行定义与修改。甚至更多的时候要考虑到模型在未来业务变化的情况下是否能保持稳定的产出,尽量减小模型的衰减。
  
  其次是数据的预处理。这一步是非常消耗时间的,大多数情况下,数据并不是现成的放在面前,就等你跑个模型。我相信大多数学生党所接触到的机器学习都是拿到几张二维表,直接做个表连,然后调几个包,处理下特征,跑个模型。但真正在工业界(至少在我接触到的业务中),数据都是原始的、底层的,甚至是非结构化的,更甚至好不容易找到个相关数据源,但发现不维护了,数据质量得不到保证,就只能更换数据源。这类原始数据中充斥着各种脏数据,而我们的大多数工作就是在处理这些脏数据,让它们变成可以让我们的模型所使用的数据。其次很重要的就是特征的处理,俗话说“Garbage in, Garbage out”不是没有道理的。以前我做Kaggle的时候,总是想着,特征不用那么精细化处理,我随便调几个包,填个空值、做个特征排序就OK了。但其实在真正的业务中,是要对某一个特征的分布、数据的源头、加工逻辑有着严格的把控,一旦某个特征加工逻辑有问题就会导致结果非常差。由于我是做金融领域模型的,所以某些模型需要解释性,因此变量的筛选和特征工程就要做得非常精细化,否则即使模型效果再好,但没办法解释就无法上线(这也是为啥我们很少用DNN去做某些模型)。
  
  第三点就是模型评估。在学校自己做project的时候,模型的评估无非就是MSE,MAE,混淆矩阵,precision,recall,F1 score等等,在validation上看看这些值,画几个图,再调调参数。但在工业界里,模型的评估是非常重要的一个环节。模型评估包含模型本身的性能、模型稳定性、变量的稳定性、可维护性等等方面,还要结合具体的业务指标进行验证。因为业务是经常发生变化的,所以要对模型的衰减有一个预估,保证在业务可接受的时间内稳定运行。
  
  最后简单说几个和在学校做模型不同的地方:
  
  1.工业界基本遵循“奥坎姆剃刀”原则,在不牺牲很大性能的情况下,更加愿意选择简单、稳定性强、可解释性强、可维护性好的算法与模型。其本身并不是像kaggle那样要追求那么高精准的结果,一个算法和模型的完成要综合考虑到方方面面。
  2.特征工程十分重要!否则就是上面提到的“Garbage in, Garbage out”
  3.业务规则>模型。做业务支持算法的同学可能对此有体会,有时候几个资深业务专家的规则的结果甚至要强于模型。现在我做模型也基本是规则+模型一起做。
  4.数据分析很重要!这里包括对数据的理解、对统计学的认知等,一个好的算法工程师也一定是一个好的数据分析师。
  5.统计学很重要!!!
  6.对算法的原理、应用场景要非常熟悉,这也是一个算法工程师的基本功。

3.工作流程

梳理需求,整理可行性算法,数据整理,数据预处理,模型训练,模型评估,重新想可行性算法,,数据整理,数据预处理,模型训练…
    

参考:https://www.zhihu.com/question/31284094/answer/331809395

猜你喜欢

转载自blog.csdn.net/weixin_37251044/article/details/80679310
今日推荐