特征的计算方法从根本上决定了特征存储的特点及其对不同机器学习应用的适用性。在考察了各种转换技术(包括流处理和嵌入)之后,我们现在审视一个主要的选择:是定期进行大规模批量特征计算,还是在需要时(通过连续流处理或精确地在请求时(按需))生成特征。此选择涉及延迟、数据时效性、计算成本、系统复杂性和数据一致性方面的重大权衡。批量计算:可伸缩性与简易性批量计算指在预定时间间隔(例如每小时或每天)处理大量数据。此方法通常使用分布式处理框架,如 Apache Spark 或 Apache Flink(在批量模式下),对数据湖(例如 S3、ADLS、GCS,使用 Parquet 等格式)或数据仓库(例如 BigQuery、Redshift、Snowflake)中的数据进行操作。优点:成本效益: 大块数据处理可优化资源利用,通常使每个计算特征值的成本更低,尤其是对于涉及大量历史数据的复杂转换。高吞吐量: 批处理系统旨在高效处理海量数据集,使其适用于大规模特征工程任务。训练一致性简化: 生成训练数据集通常需要时间点准确的特征。批处理自然符合创建历史快照的需求,简化了在特定事件时间戳下准确连接特征的任务。工具成熟: 批处理的生态系统已完善,提供各种工具和熟悉的编程模型(SQL、PySpark DataFrames)。缺点:固有延迟: 最显著的缺点是数据时效性。特征仅与上次成功运行的批处理一样新。如果批处理每天运行,特征可能长达24小时,使其不适用于需要接近实时信息的应用。资源调度: 批处理作业通常会导致资源需求高峰,需要细致的容量规划或依赖弹性计算环境。批量计算非常适合变化缓慢、源于大量历史分析的特征,或可接受中等时效性(数小时或数天)的情况。示例包括计算客户生命周期价值、根据长期行为对用户进行细分,或为需要复杂历史查询的模型训练生成特征。实时计算:时效性与响应能力实时计算包含两种主要模式:流式计算和按需计算。流式计算: 随着新数据事件的到达,特征持续计算。流处理框架,如 Apache Flink、Kafka Streams 或 Spark Streaming,从消息队列(例如 Kafka、Pulsar)消费数据,并增量更新特征值,通常将结果存储在低延迟的在线存储中。按需计算: 特征仅在发出推理请求时计算。这可能涉及简单查找、对请求中提供的数据进行转换,或从操作性系统中获取非常新的数据。优点:最大时效性: 流式计算提供的特征延迟通常以秒或毫秒衡量。按需计算相对于推理请求上下文提供零时效性。这对于实时欺诈检测、算法交易或基于即时用户行为的动态内容个性化等用例而言必不可少。即时响应: 系统可以即时响应最新的可用信息。缺点:复杂性增加: 构建、管理和监控可靠的实时数据管道通常比批处理更复杂。挑战包括状态管理、容错、精确一次语义以及处理乱序事件。潜在成本更高: 维持始终运行的流式基础设施可能会产生高昂的运营成本。如果计算并非微不足道,按需计算可能会增加模型服务关键路径的延迟。一致性挑战: 确保通过流式计算用于服务的特征与用于训练的特征(通常通过批处理生成或需要跨流的复杂时间点连接)保持一致,是一个常见难题,可能导致在线/离线偏差。我们将在第3章中处理此问题。计算限制: 在纯粹的流式或按需环境中,对长时间历史窗口执行复杂聚合通常计算不可行或成本过高。当特征时效性是应用的首要需求时,实时计算是必需的。流式计算适合基于近期事件序列的特征(例如过去5分钟内的点击次数),而按需计算则适用于从请求上下文(例如一天中的时间)或简单快速查找中得出的特征。混合方法:平衡权衡在实践中,许多复杂的机器学习系统采用混合方法。主要、稳定的特征可能通过批量计算,而快速变化或事件驱动的特征则由流式管道处理。在线存储随后聚合来自这两种来源的特征以供服务。例如,推荐系统可能使用:批量: 每日更新的用户嵌入和长期偏好配置文件。流式: 捕获当前会话中用户活动(查看的商品、添加到购物车的商品)的特征,以接近实时的方式更新。按需: 从请求上下文(例如设备类型、一天中的时间)中提取的特征。虽然混合系统提供了灵活性,但它们需要精心设计来管理集成点,并确保不同计算路径之间的一致性。做出选择:决定因素选择合适的计算策略在很大程度上取决于每个特征的具体需求:因素适合批量适合流式适合按需时效性需求数小时 / 数天毫秒 / 秒即时(相对于请求)计算类型复杂、历史聚合增量、窗口聚合简单查找、基于请求的转换数据源数据湖 / 数据仓库事件流(Kafka, Pulsar)请求负载、操作型数据库成本特点规模化后单位值成本较低持续运营成本每次推理请求增加成本系统复杂性通常较低较高(状态、容错)较低(计算)/ 较高(延迟)训练数据生成时间点正确性更简单需要仔细的时间对齐需要仔细的时间对齐批量、流式和按需特征计算特性的比较。最佳选择取决于为具体特征需求平衡这些因素。理解这些权衡对于设计高效且实用的特征工程管道来说非常基本。此选择不仅影响特征存储的架构,还影响机器学习模型的下游性能和准确性。随着我们进入数据一致性(第3章)和性能优化(第4章)的讨论,这些计算策略的影响将变得更加清晰。