ConstruirModeloFusionado#

class pymc_marketing.mmm.budget_optimizer.BuildMergedModel(models, prefixes=None, merge_on='channel_data', use_every_n_draw=1)[fuente]#

Fusionar múltiples modelos compatibles con el optimizador en un solo modelo.

Este envoltorio combina varios envoltorios MMM compatibles con optimizadores al: - Fusionar sus InferenceData posteriores con prefijos por modelo - Opcionalmente reducir las muestras posteriores a través de use_every_n_draw - Exponer un Model de PyMC fusionado y persistente para optimización a través de

_set_predictors_for_optimization y una propiedad model dinámica para inspección cuando sea necesario

Parámetros:
modelos : list[OptimizerCompatibleModelWrapper]list[OptimizerCompatibleModelWrapper]

Una lista de envoltorios que cada uno expone idata y _set_predictors_for_optimization(num_periods: int) -> Model.

prefijos : list[str] | None, opcionalpython:list[python:str] | python:None, opcional

Prefijos por modelo utilizados al fusionar. Si None, se utiliza por defecto ["model1", "model2", ...] con un prefijo por modelo.

merge_on : str | None, opcional, por defecto «channel_data»python:str | python:None, opcional, predeterminado «channel_data»

Nombre de una variable que se espera que esté presente en todos los modelos y que debe permanecer sin prefijo y ser utilizada para alinear/combinar dimensiones (por ejemplo, "channel_data"). Si es None, ninguna variable se trata como compartida y todas las variables/dimensiones tienen prefijo.

use_every_n_draw : int, opcional, valor por defecto 1python:int, opcional, predeterminado 1

Factor de adelgazamiento aplicado al fusionar idatas. Mantiene cada n-ésimo sorteo.

Atributos:
prefijos : list[str]list[str]

La lista final de prefijos utilizados para cada modelo.

modelos : list[OptimizerCompatibleModelWrapper]list[OptimizerCompatibleModelWrapper]

La lista de envolturas proporcionada.

num_modelsint

Número de modelos que se están fusionando.

num_periodsint | None

Número de períodos de pronóstico inferidos del modelo primario (si está disponible).

idataarviz.InferenceData

El contenedor posterior (y de datos) fusionado y prefijado.

adstock : CualquieraCualquiera

Transferido del modelo principal cuando está disponible.

modelo : pymc.Modelpymc.Model

Devuelve el modelo PyMC combinado.

Ejemplos

Fusionar tres MMM multidimensionales en un único modelo de optimización:

from pymc_marketing.mmm.multidimensional import (
    MMM,
    MultiDimensionalBudgetOptimizerWrapper,
)
from pymc_marketing.mmm.budget_optimizer import (
    BuildMergedModel,
    BudgetOptimizer,
)

# Assume m1, m2, m3 are already fitted MMM instances
w1 = MultiDimensionalBudgetOptimizerWrapper(
    model=m1, start_date=start, end_date=end
)
w2 = MultiDimensionalBudgetOptimizerWrapper(
    model=m2, start_date=start, end_date=end
)
w3 = MultiDimensionalBudgetOptimizerWrapper(
    model=m3, start_date=start, end_date=end
)

merged = BuildMergedModel(
    models=[w1, w2, w3],
    prefixes=["north", "south", "west"],
    merge_on="channel_data",
    use_every_n_draw=2,
)

optimizer = BudgetOptimizer(
    model=merged,
    num_periods=merged.num_periods,
    response_variable="north_total_media_contribution_original_scale",
)

Modelo único: auto-prefijo y tiradas delgadas:

merged_single = BuildMergedModel(
    models=[w1],
    prefixes=None,  # auto -> ["model1"]
    merge_on="channel_data",
    use_every_n_draw=5,
)
m_opt = merged_single._set_predictors_for_optimization(
    num_periods=merged_single.num_periods
)

Fusionar todo con prefijos (sin variable compartida retenida):

merged_all_prefixed = BuildMergedModel(
    models=[w1, w2],
    prefixes=["a", "b"],
    merge_on=None,  # do not keep any unprefixed variable
)

Métodos

BuildMergedModel.__init__(models[, ...])

Atributos

model

Devuelve el modelo PyMC combinado.

adstock

idata