算法工程师为什么成天做数据,都做哪些数据?( 二 )


这其实并不完全是工程师鼠目寸光 , 也是整个职场氛围的影响的结果 。大家都看重业绩和绩效 , 以至于大家都陷入了局部最优解 , 但是却离整体最优解越来越远 。
要想避免这种情况 , 需要有高瞻远瞩、统筹规划的架构师或者是leader , 能够抗住升级模型的风险压力 。对可能出现的情况以及将来要做的事情有充足、详细的规划 , 并且有足够的经验应对各种可能出现的事情 。但是大家也都知道 , 拥有这种能力的leader在职场里凤毛麟角 。大公司里都不多见 , 小公司里就更加难得了 。
做哪些数据说完了模型的问题 , 我们来聊聊数据 , 既然不能频繁地变更模型 , 工程师们就只能更多地来做数据了 , 那么工程师们到底又在做哪些数据 , 需要花费这么多时间呢?
训练数据【算法工程师为什么成天做数据,都做哪些数据?】大公司里有完整的流程 , 我们把流程设计好了之后 , 训练数据、测试数据、模型训练以及部署可以一条龙流水线作业 。但是在中小型公司里 , 这往往是做不到的 。
原始数据是不能直接用来训练模型的 , 这中间需要复杂的处理流程 。首先 , 需要做采样 。就拿CTR预估的场景来举例 , 一般情况下真实场景下的点击率不会超过10% 。但是模型训练一般正负样本的比例是1:3左右 , 那么这就需要我们对负样本进行采样 。
采样你还不能直接采 , 因为可能这些样本当中还存在很多脏数据或者是非法的数据 。我们需要先把这些有问题的数据过滤了之后 , 再进行采样 , 这样才能保证我们的数据是干净的 。采样了之后 , 我们需要进行特征和字段的查找补全 。因为数据往往是分开存储的 , 比如用户的基础信息是一张表 , 用户的行为数据又是一张表 , 商品的信息是一张表 , 各种各样的数据存放在各种各样的地方 。我们有了样本之后 , 还需要去查找很多的数据 , 才能把所有需要用到的字段搜集齐 。
当我们搜集了所有需要的数据之后 , 我们才能开始真正样本的制作 , 也就是使用这些我们查找以及搜集到的原始数据生成输入模型的样本特征 。每一个特征可能都有自己独特的生成逻辑 , 这也是一个庞大的工程 。这一步做完还没结束 , 还会需要把数据转化成模型需要的格式 。比如tfdata或者是tensor、json之类的 。
这么一系列步骤 , 大公司一般都有一整套完整的自动调度流程 ,  工程师们不需要操心 , 只需要拿来用就好了 。但是在中小型公司 , 可能就只有一些手动工具了 , 需要数据都需要手工去跑一些任务或者是脚本 。跑的过程当中还有可能会失败以及遇到各种问题 , 虽然说起来平平无奇 , 也没什么价值 , 但这些事情都是需要工作量的 。
新的特征特征怎么做?在kaggle之类比赛当中 , 可能就是使用pandas写两个函数 , 或者是几行处理的逻辑就搞定了 。但实际上绝不是这么简单 。
我举一个最简单的例子好了 , 比如我们将年龄进行归一化 , 做成一个标准化年龄的特征 。这个简单吧 , 我们就用比较简单的最大最小值归一化方法好了 , 公式是:

算法工程师为什么成天做数据,都做哪些数据?

文章插图
 
归一化之后 , 这个特征值会被缩放到0-1的区间里 。但是这里面用到了两个参数 , 一个是最大值 , 一个是最小值 。这两个参数怎么来?你可能会觉得这还不简单 , 我们遍历下数据不就知道了 。但问题是这个数据你并不是只用一次 , 以后每次生成训练数据都需要生成这个特征 , 难道每次跑的时候都手动遍历一下数据找下最大最小值吗?而且数据是在变化的 , 每一天用户年龄的最大和最小值可能都不一样 , 假如说我们要跑好几天的训练数据怎么办?
设计一个新的特征是简单的 , 但是里面的一些参数会让事情变得复杂 , 我们往往需要设计复杂的机制来将新完成的特征加入流程 。
效果分析还有一块数据处理的大头在效果分析 , 效果分析有两种 , 第一种是做一些之前没有的指标以及相关的分析 , 或者是应老板的要求做一些业务指标的分析 , 达成我们的绩效 。


推荐阅读