MMM 统一架构

统一架构是一种分层数据架构,采用协议缓冲区进行定义,旨在为任何营销组合建模分析 (MMM) 框架(例如 Google Meridian、Meta 开发的 Robyn)表示核心模型及其输出。这种架构将模型训练关注点与使用模型输出的实际应用分离开来。它通过一种与模型无关的方式,对模型输入、模型拟合统计信息、营销分析和优化(例如预算、覆盖面/频次)的表示形式进行标准化。

统一架构概览

主要功能

下面列出了营销组合模型 (MMM) 统一架构的主要功能和优势:

  • 与框架无关的标准化:无论底层框架(例如 Google 的 Meridian、Meta 的 Robyn)为何,都可建立用于表示 MMM 输入和输出的通用统一结构。这样就可以跨不同模型对结果进行一致的解读和比较。
  • 分离:将训练框架的关注点和模型表示形式分离开来。下游系统(例如可视化工具)可以与标准化架构输出进行交互,而无需依赖建模库的内部实现细节。
  • 支持下游工具:为各种下游应用提供协议。例如:
    • 报告生成
    • 可视化信息中心(例如 Meridian 方案规划工具)
    • 数据处理流水线
  • 互操作性和协作:使用协议缓冲区作为序列化格式。这可实现无关语言和平台且可扩展的数据交换,让使用不同编程语言(Python、Java、R 等)的团队都能处理模型输出。
  • 可扩展性和可伸缩性:统一架构采用模块化分层结构,能够随着 MMM 方法的发展不断添加新的功能、指标和分析,并且只需对核心架构进行极少的更改。
  • 持久保留、共享和版本控制:采用基于 protobuf 的架构,可以将经过训练的模型、输入以及得出的分析序列化到磁盘,方便在团队间共享它们以及对它们进行版本控制。
  • 社区驱动型演变:开源的统一架构能够鼓励广大 MMM 社区积极贡献内容。这种协作环境可以加速架构的开发,吸纳不同的观点,并确保架构能够紧跟快速发展的 MMM 行业的前沿动态。

概览

统一架构概览

统一架构大致分为四个部分:模型核心本身,以及三个扩展组:模型拟合、营销分析和营销优化。后三者均源自前者。模型扩展是附加到模型内核的可选数据结构。模型内核以静态数据的形式表示经过训练的营销组合模型的状态,而模型扩展表示对核心的衍生分析。

// mmm.proto

// A schema that contains derived metrics and modeled analysis by a trained
// marketing mix model.
message Mmm {
  // A MMM kernel contains the core information about the model used to generate
  // this output.
  model.MmmKernel mmm_kernel = 1;

  // Model fit result.
  fit.ModelFit model_fit = 2;

  // A list of marketing analysis generated by the MMM kernel.
  marketing.analysis.MarketingAnalysisList marketing_analysis_list = 3;

  // Marketing optimization on different perspectives using the MMM kernel.
  marketing.optimization.MarketingOptimization marketing_optimization = 4;
}

模型核心:mmm_kernel

MmmKernel 消息是一个通用模型封装容器。其中包含:

  • marketing_data:用于训练模型、进行营销分析以及优化预算分配的数据。
  • model:一个 Any 类型的字段,用于封装模型实现的序列化形式。使用 Any 类型可将模型实现表示为黑盒。

营销数据

MarketingDataPoint 中的营销信息包括 KPI 数据、媒体渠道详细信息和其他非媒体因素。

KPI 可以是收入类型,也可以是非收入类型。对于非收入类型,除了指定 KPI 值之外,用户还可以指定从 KPI 到收入的转换率。这称为 revenue_per_kpi

媒体渠道详细信息中包含地理位置信息、时间信息、KPI、控制变量、媒体变量、非媒体变量和覆盖面-频次变量所对应的字段。

如果无法获得付费媒体渠道的 MediaVariable 及其按地理位置和时间划分的媒体支出明细(即媒体支出是所有地理位置和时间段的汇总支出),则应提供一条包含 media_spend 的单独 MarketingDataPoint 消息,其中 geo_info 未设置,而 date_interval 涵盖整个时间维度的坐标。

非媒体因素包括那些与媒体没有直接关联但仍会影响目标响应的变量或因素。例如:促销活动、季节性因素和宏观经济因素。需要包含哪些内容取决于具体模型。可选的营销数据元数据字段包含时间、地理位置和 KPI 信息,这些信息对于序列化和反序列化过程非常有用。

模型拟合扩展:model_fit

模型拟合扩展会显示预测结果与标准答案随时间的变化情况,以及效果指标。它还包含拟合优度统计信息(R 平方、MAPE、wMAPE、RMSE)。请注意,模型拟合的结构涵盖应该适用于所有 MMM 的通用概念。具体做法是,捕捉各种与模型无关的预测点,将它们与实际观测到的值进行比较,然后从汇总结果中得出指标。

营销分析扩展:marketing_analysis_list

营销分析扩展可解读输入数据,还会深入分析媒体支出和非媒体因素对效果的影响。

媒体分析和非媒体分析

MediaAnalysis 可深入分析媒体渠道对 KPI(包括收入和非收入 KPI)的影响。如果媒体是非付费媒体,由于缺少支出信息,将不会提供响应曲线以及与支出相关的效果指标。NonMediaAnalysis 与媒体分析类似,区别在于它不涉及支出值。因此,它不包含响应曲线,而且效果中也不会设置衍生自支出值的字段。

效果

效果是业务成果(例如总销售收入或转化次数)。它通过各种指标表示媒体渠道或非付费媒体因素的预计影响。它是用于衡量处理变量因果效应的主要指标。

效果可以通过以下其中一项进行定义:

  • KPI:一个具体、可量化的指标,用于衡量某种效果的达成进度。它是模型的响应变量。KPI 有两种类型:(a) 收入 KPI(例如货币价值),(b) 由用户定义的通用非收入 KPI(例如点击率)。
  • 投资回报率、边际投资回报率、每次贡献成本:媒体渠道可以是收入型渠道,也可以是非收入型渠道,这意味着所有 proto 字段(投资回报率、边际投资回报率、每次贡献成本)都可以填充。非媒体渠道没有支出,因此与支出相关的字段(投资回报率、边际投资回报率)不应填充。
  • 贡献和效果:含义可能会因具体情况而略有不同。对于媒体中的收入 KPI,将在计算中使用货币收入值;对于非收入 KPI,则使用用户定义的通用 KPI 值。

营销优化扩展组:marketing_optimization

营销优化可以从许多不同的方面入手。此扩展组包含与优化相关的所有扩展。

BudgetAllocation 扩展

这里定义的结构涵盖与模型无关的概念,旨在根据用户提供的一些限制条件、优化目标等,在多个营销渠道间实现最佳预算分配。

BudgetOptimizationResult 是针对特定时间段内所有适用渠道的营销支出进行计算后得出的结果。这需要用户输入优化目标,以及每个渠道的预算限制。这种优化分为两类:固定预算和灵活预算。对于固定预算优化,目标是在不改变预算总额的情况下,通过优化各渠道的预算分配来最大限度地提高目标指标值。另一方面,灵活预算优化的目标是在预算总额可灵活调整且满足某些预定义限制条件的情况下,通过优化各渠道的预算分配来最大限度地提高目标指标值。

优化后的结果按渠道表示。每个渠道的结果都包含该渠道的实际效果、经过模型优化的效果,以及优化过程中使用的渠道预算限制。

除了优化结果之外,BudgetOptimization 还包含 IncrementalOutcomeGrids 列表,这些网格具有不同类型的增量效果或不同的网格粒度。每个 IncrementalOutcomeGrid 都表示一个网格,其中详细列出了各渠道的营销支出增量效果。这种网格非常实用,例如,可用于绘制增量影响与支出的趋势图,或者根据网格搜索优化算法执行在线预算优化。请注意,这种网格是基于以下假设构建的:各渠道之间没有交互效应,也就是说,一个渠道的支出不会影响其他渠道。

OptimalFrequency 扩展

最佳平均频次(可选,前提是模型中已经存在覆盖面和频次数据)是指为了最大限度地提高目标值,在渠道中向每个唯一身份用户展示广告的最佳频次。此扩展的可用性取决于数据和 MMM 功能。

安装

若要安装统一架构软件包,请先克隆 Meridian GitHub 代码库,然后在安装 Meridian 时包含 [schema] 额外组件。此软件包包含相关的 proto 定义。

$ git clone https://github.com/google/meridian.git;
$ cd meridian;
$ pip install .[schema];

转换层

根据所用的 MMM 框架和特定于模型的算法,生成相应 MMM proto 消息的转换层或处理器会有所不同。作为参考,请查看 Google Meridian 的处理器示例。