用开源工具和生成式 AI 普及营销组合模型(MMM)


用开源工具和生成式 AI 普及营销组合模型(MMM)

引言

营销组合模型(Marketing Mix Models,MMM)在业界已存在多年,近年来正经历一次复兴。随着数据隐私限制的增加,数字追踪信号被逐步弃用,营销人员重新转向 MMM,寻求战略性强、可靠且隐私安全的测量与归因框架。

与用户级追踪工具不同,MMM 使用聚合的时间序列和横截面数据来估计各营销渠道如何驱动业务 KPI。随着计算能力的增强以及贝叶斯建模的持续进步,MMM 重新回到了营销分析的中心位置。多年来,广告主和媒体机构一直依赖贝叶斯 MMM 来理解营销渠道的贡献与预算分配。


生成式 AI 在现代 MMM 中的作用

越来越多的公司正在将 GenAI 能力整合进 MMM,主要体现在以下几个方面:

  1. 数据准备与特征工程
  2. 流程自动化
    :自动生成 MMM 管道代码
  3. 洞察解释
    :将模型输出转化为通俗易懂的业务语言
  4. 场景规划与预算优化

尽管这些功能十分强大,但它们大多依赖于专有的 MMM 引擎。本文的目的不是讲解贝叶斯 MMM 的工作原理,而是演示一套开源且免费的系统设计方案,让营销人员无需订阅任何黑盒式行业供应商栈,即可自由探索 MMM。

该方案结合了:

  1. Google Meridian
     —— 开源贝叶斯 MMM 引擎
  2. Mistral 7B
     —— 开源大语言模型,作为 Meridian 贝叶斯推断输出的洞察交互层

开源工作流的优势

  1. 贝叶斯 MMM 的民主化
    :消除了专有 MMM 工具的黑盒问题
  2. 成本效益
    :降低了中小型企业获取高级分析能力的经济门槛
  3. 兼顾统计严谨性与可访问性
    :保留了 MMM 引擎所需的统计严谨性,同时使工具更易上手
  4. 通过 GenAI 洞察层,用户无需理解贝叶斯数学,只需通过自然语言提示即可了解渠道贡献、ROI 及预算分配策略
  5. 适应性强
    :GenAI 层可随新 LLM 的发布而更换,持续获取更强的洞察能力

实战示例:结合 LLM 层运行 Google Meridian MMM 模型

本示例使用 Mistral 7B 开源模型(通过 Llama 引擎从 Hugging Face 平台本地加载)。该框架与领域无关——任何开源 MMM 模型(如 Meta 的 Robyn、PyMC 等)以及不同版本的 LLM(如 GPT、Llama)均可按需替换。

重要说明

  • 使用包含”转化”等 KPI 及 TV、Search、Paid Social、Email、OOH 等营销渠道的合成数据集
  • Google Meridian 生成丰富输出(ROI、渠道系数与贡献、响应曲线等)。这些输出统计严谨,但需要专业知识解读。LLM 在此充当洞察翻译器
  • 选用 Mistral 7B 是因为其可在 Google Colab 免费 GPU 上运行,无需 API 即可生成基于指令的洞察

安装依赖

# 从 PyPI 安装最新版 Meridian
!pip install --upgrade google-meridian[colab,and-cuda,schema]

# 导入依赖
import IPython
from meridian import constants
from meridian.analysis import analyzer
from meridian.analysis import optimizer
from meridian.analysis import summarizer
from meridian.analysis import visualizer
from meridian.analysis.review import reviewer
from meridian.data import data_frame_input_data_builder
from meridian.model import model
from meridian.model import prior_distribution
from meridian.model import spec
from schema.serde import meridian_serde
import numpy as np
import pandas as pd

构建输入数据

builder = data_frame_input_data_builder.DataFrameInputDataBuilder(
    kpi_type='non_revenue',
    default_kpi_column='conversions',
    default_revenue_per_kpi_column='revenue_per_conversion',
)

builder = (
    builder.with_kpi(df)
    .with_revenue_per_kpi(df)
    .with_population(df)
    .with_controls(
        df, control_cols=["sentiment_score_control""competitor_sales_control"])
)

channels = ["tv""paid_search""paid_social""email""ooh"]

builder = builder.with_media(
    df,
    media_cols=[f"{channel}_impression"for channel in channels],
    media_spend_cols=[f"{channel}_spend"for channel in channels],
    media_channels=channels,
)

data = builder.build()  # 构建输入数据

配置并运行 Meridian MMM 模型

# Meridian 允许为每个渠道设置先验分布,
# 便于建模者融入对媒体行为的历史认知

roi_mu = 0.2# ROI 先验的均值
roi_sigma = 0.9# ROI 先验的标准差

prior = prior_distribution.PriorDistribution(
    roi_m=tfp.distributions.LogNormal(roi_mu, roi_sigma, name=constants.ROI_M)
)

model_spec = spec.ModelSpec(prior=prior, enable_aks=True)

mmm = model.Meridian(input_data=data, model_spec=model_spec)

mmm.sample_prior(500)
mmm.sample_posterior(
    n_chains=10, n_adapt=2000, n_burnin=500, n_keep=1000, seed=0
)

模型性能评估

model_fit = visualizer.ModelFit(mmm)
model_fit.plot_model_fit()

将 Meridian 输出整合为 LLM 输入 JSON

import json

# 将所有输出整合为一个字典
genai_input = {
"roi": roi.to_dict(orient='records'),
"coefficients": coeffs.to_dict(orient='records'),
"priors": priors.to_dict(orient='records'),
"response_curves": response_curves.to_dict(orient='records')
}

# 转换为 JSON 字符串供 LLM 使用
genai_input_json = json.dumps(genai_input, indent=2)

下载 Mistral 7B 模型

# 从 Hugging Face 下载 Mistral 7B
!wget -O /content/models/mistral-7b-instruct-v0.2.Q4_K_M.gguf \
https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/resolve/main/mistral-7b-instruct-v0.2.Q4_K_M.gguf

# 安装 Python 版 Llama 引擎
!pip install llama-cpp-python --upgrade

使用 Mistral 7B 生成营销洞察

from llama_cpp import Llama

# 初始化模型
llm = Llama(
    model_path="/content/models/mistral-7b-instruct-v0.2.Q4_K_M.gguf",
    n_ctx=2048,
    n_gpu_layers=35,
    seed=42,
    verbose=False,
    temperature=0.2
)

# 构建提示词
prompt = f"""
You are a marketing mix modeling expert.

1. Summarize the efficiency of each marketing channel based on MMM output
2. Explain the key drivers of ROI for each channel in simple business terms.
3. Channels with diminishing returns
4. If we want to maximize total ROI with the current budget, how should we reallocate spend across channels

JSON:
{genai_input_json}
"""


# 生成建议
response = llm(prompt, max_tokens=300)

# 输出结果
print(response["choices"][0]["text"])

示例输出

  1. 根据 MMM 输出,电视、户外广告(OOH)和搜索广告的 ROI 分别为 3.0、2.5 和 1.5,为正值;而社交媒体和电子邮件的 ROI 较低,分别为 0.9 和 0.7。
  2. 各渠道 ROI 关键驱动因素(通俗解释):
    • 电视:每投入 1 美元可产生 3 美元销售额
    • 社交媒体:每投入 1 美元可产生 0.9 美元销售额
    • 搜索广告:每投入 1 美元可产生 2.5 美元销售额
    • 邮件营销:每投入 1 美元可产生 0.7 美元销售额
    • 户外广告:每投入 1 美元可产生 1.5 美元销售额
  3. 收益递减渠道:社交媒体和电子邮件,其响应曲线显示销售增长与营销投入不成比例。
  4. 为最大化总 ROI,建议将社交媒体和电子邮件的部分预算转移至电视和户外广告,因为后者具有更高的投资回报率。

实际考量

  • 模型质量和洞察仍依赖于输入数据质量
  • 提示词设计
    至关重要,以避免产生误导性洞察
  • 输入数据处理以及模型输出报告和可视化的自动化,将有助于该技术栈的规模化运行

总结

本示例展示了一种潜在的开源贝叶斯 MMM 增强方案,结合 GenAI 工作流,将复杂的贝叶斯结果转化为营销人员和管理层可采取行动的洞察。

这种方法并非简化 MMM 背后的数学,而是保留其严谨性,同时尝试使其对知识储备有限、预算有限的更广泛受众更易获取。

随着隐私安全营销分析成为常态,开源 MMM 系统与 GenAI 增强的结合提供了一条可持续发展之路:透明、适应性强,并能随业务和底层技术的演进而不断进化。


参考资源

  • Google Meridian
    :https://developers.google.com/meridian/notebook/meridian-getting-started
  • Mistral 7B LLM
    :https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF
  • Hugging Face
    :https://huggingface.co/
  • Google Colab
    :用于原型设计的免费 GPU 环境

往期推荐

如何使用 Gemma 4 和 Python 实现工具调用

从4周到45分钟:为4700多份PDF设计文档提取系统

掌握智能体 AI 系统中记忆的 7 个步骤

超越提示工程:5 种检测与缓解 LLM 幻觉的实用技术

参考内容

原文标题:Democratizing Marketing Mix Models (MMM) with Open Source and Gen AI
原文链接:https://towardsdatascience.com/democratizing-marketing-mix-models-mmm-with-open-source-and-gen-ai/

本文所有代码片段和输出均为说明性内容,仅供教育目的使用。本文反映了对开源工具的独立探索,不暗示任何商业认可。