- 数据自助服务实践指南:数据开放与洞察提效
- (美)桑迪普·乌坦坎达尼
- 1250字
- 2022-05-20 19:18:50
4.3 定义需求
特征存储服务是特征的集中存储仓库,既可以提供特征在数周或数月等长时间内的历史值,也可以提供几分钟内的近实时特征值。特征存储的需求分为特征计算和特征服务两部分。
4.3.1 特征计算
特征计算需要与数据湖和其他数据源进行深度集成。特征计算管道需要考虑三个维度。
首先,考虑要支持的不同类型的特征。特征可以与单个数据属性关联,也可以是复合聚合而成。此外,相对于标称时间,特征可以是相对静态的,而不是连续变化的。计算特征通常需要特征存储支持多个基本函数,类似于数据用户目前使用的功能,例如:
- 将分类数据转换为数值数据。
- 将来自不同分布特征的数据归一化。
- 独热编码或特征二值化。
- 特征分级(例如,将连续特征转换为离散特征)。
- 特征哈希(例如,减少独热编码特征的内存占用)。
- 计算聚合特征(例如,计数、最小值、最大值和标准差)。
其次,考虑特征工程需要支持的编程库。在处理大规模数据集的用户中,Spark是数据整理的首选。处理小型数据集的用户更喜欢使用NumPy和pandas等框架。特征工程作业使用notebook、Python文件或.jar文件构建,并在Samza、Spark、Flink和Beam等计算框架上运行。
最后,考虑保存特征数据的数据存储系统。存储系统可以是关系型数据库、NoSQL数据存储、流计算平台以及文件和对象存储。
4.3.2 特征服务
特征存储需要支持强大的协作能力,特征的定义和生成应该可以跨团队共享。
特征组
特征存储有两个接口:向存储写入特征,以及在训练和推理时读取特征。特征通常被写入文件或特定项目数据库。基于同一个处理作业计算的特征或来自同一原始数据集的特征可以进一步分组。例如,对于Uber汽车共享服务,一个地理区域的所有行程相关特征都可以作为一个特征组来管理,因为它们都可以由一个扫描行程历史的作业来计算。特征可以与标签关联(在监督学习的情况下),并被具体化为一个训练数据集。特性组通常共享一个公共列(例如时间戳或客户ID),这样能够将特征组加入一个训练数据集中。特征存储创建并管理训练数据集,并将其持久化为TFRecords、Parquet、CSV、TSV、HDF5或.npy文件。
性能扩展
关于性能扩展,需要考虑以下因素:
- 特征存储中支持的特征数量。
- 调用特征存储进行在线推理的模型数量。
- 用于日常离线推理和训练的模型数量。
- 训练数据集中包含的历史数据量。
- 生成新样本时回填特征数据集的每日管道数。
此外,在线模型推理还有特定的性能扩展要求,例如,计算特征值的TP99延时值。对于在线训练,要考虑回填训练集的时间和数据库模式突变。通常,历史特征需要少于12小时,而近实时特征值需要少于5分钟。
特征分析
特征应该是可搜索的和易于理解的,以确保它们在机器学习项目中被重用。数据用户需要能够识别转换以及分析特征,发现异常值、分布漂移和特征相关性。
4.3.3 非功能性需求
以下是在设计特征存储服务时应该考虑的一些关键非功能性需求:
自动监控和告警
服务的运行状况应该易于监控。生产过程中的任何问题都应该产生自动告警。
响应时间
服务应该在毫秒级响应特征搜索查询请求,这一点很重要。
直观的界面
为了使特征存储服务高效,需要所有跨组织的数据用户都采用它。因此,拥有易于使用和理解的API、命令行界面和Web门户非常重要。