BudgetOptimizer#

class pymc_marketing.mmm.budget_optimizer.BudgetOptimizer(*, num_periods: ~typing.Annotated[int, ~annotated_types.Gt(gt=0)], model: ~pymc_marketing.mmm.budget_optimizer.Annotated[~pymc_marketing.mmm.budget_optimizer.OptimizerCompatibleModelWrapper, ~pydantic.functional_validators.InstanceOf()], response_variable: str = 'total_contribution', utility_function: ~collections.abc.Callable[[~pytensor.xtensor.type.XTensorVariable, ~pytensor.xtensor.type.XTensorVariable], float] = <function average_response>, budgets_to_optimize: ~xarray.core.dataarray.DataArray | None = None, custom_constraints: ~collections.abc.Sequence[~pymc_marketing.mmm.constraints.Constraint] = (), default_constraints: bool = True, budget_distribution_over_period: ~xarray.core.dataarray.DataArray | None = None, cost_per_unit: ~xarray.core.dataarray.DataArray | None = None, compile_kwargs: dict | None = None)[fuente]#

Una clase para optimizar la asignación de presupuesto en un modelo de mezcla de marketing.

El objetivo de esta optimización es maximizar la respuesta total esperada al asignar el presupuesto dado entre diferentes canales de marketing. La optimización se realiza utilizando el método de Programación Cuadrática de Mínimos Cuadrados Secuenciales (SLSQP), que es un algoritmo de optimización basado en gradientes adecuado para resolver problemas de optimización con restricciones.

Para más información sobre el algoritmo SLSQP, consulte la documentación: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html

Parámetros:
num_periodsint

Número de unidades de tiempo en la granularidad de tiempo deseada para asignar presupuesto.

modelo : MMMModelMMMModelo

El modelo de mezcla de marketing para optimizar.

response_variable : str, opcionalpython:str, opcional

La variable de respuesta a optimizar. El valor predeterminado es «total_contribution».

utility_function : UtilityFunctionType, opcionalTipoDeFunciónUtilidad, opcional

La función de utilidad a maximizar. El valor predeterminado es la media de la distribución de respuestas.

presupuestos_a_optimizar : xarray.DataArray, opcionalxarray.DataArray, opcional

Máscara que define un subconjunto de presupuestos a optimizar. Los presupuestos no optimizados permanecen fijos en 0.

custom_constraints : Secuencia[Restricción], opcionalSecuencia[Restricción], opcional

Restricciones personalizadas para el optimizador.

default_constraints : bool, opcionalbool, opcional

Si se debe agregar una restricción de suma predeterminada sobre el presupuesto total. El valor predeterminado es True.

distribución_presupuestaria_a_lo_largo_del_período : xarray.DataArray, opcionalxarray.DataArray, opcional

Fixed temporal distribution of each budget cell across periods. Must have dims ("date", *budget_dims) where the "date" dim has length num_periods. Values must sum to 1 along the "date" dim for every combination of the remaining dims (i.e., budget_distribution_over_period.sum(dim="date") must be all ones). Each value is the fraction of that cell’s total budget assigned to the corresponding period — e.g. fractions [0.4, 0.3, 0.2, 0.1] along "date" mean 40 % of the budget in period 0, 30 % in period 1, and so on. If None, budget is distributed uniformly (1 / num_periods per period).

Métodos

BudgetOptimizer.__init__(**data)

Cree un nuevo modelo analizando y validando los datos de entrada de los argumentos de palabras clave.

BudgetOptimizer.allocate_budget(presupuesto_total)

Asigne el presupuesto basado en total_budget, budget_bounds opcionales y restricciones personalizadas.

BudgetOptimizer.construct([_fields_set])

BudgetOptimizer.copy(*[, incluir, excluir, ...])

Devuelve una copia del modelo.

BudgetOptimizer.dict(*[, incluir, excluir, ...])

BudgetOptimizer.extract_response_distribution(...)

Extraiga el gráfico de distribución de respuestas, condicionado a los parámetros posteriores.

BudgetOptimizer.from_orm(obj)

BudgetOptimizer.json(*[, incluir, excluir, ...])

BudgetOptimizer.model_construct([_fields_set])

Crea una nueva instancia de la clase Model con datos validados.

BudgetOptimizer.model_copy(*[, actualizar, profundo])

!!! abstract "Documentación de Uso"

BudgetOptimizer.model_dump(*[, modo, ...])

!!! abstract "Documentación de Uso"

BudgetOptimizer.model_dump_json(*[, indent, ...])

!!! abstract "Documentación de Uso"

BudgetOptimizer.model_json_schema([...])

Genera un esquema JSON para una clase de modelo.

BudgetOptimizer.model_parametrized_name(params)

Calcule el nombre de la clase para las parametrizaciones de clases genéricas.

BudgetOptimizer.model_post_init(context, /)

Sobrescriba este método para realizar una inicialización adicional después de __init__ y model_construct.

BudgetOptimizer.model_rebuild(*[, forzar, ...])

Intente reconstruir el esquema de pydantic-core para el modelo.

BudgetOptimizer.model_validate(obj, *[, ...])

Valide una instancia del modelo pydantic.

BudgetOptimizer.model_validate_json(json_data, *)

!!! abstract "Documentación de Uso"

BudgetOptimizer.model_validate_strings(obj, *)

Valide el objeto dado con datos de cadena contra el modelo de Pydantic.

BudgetOptimizer.parse_file(ruta, *[, ...])

BudgetOptimizer.parse_obj(obj)

BudgetOptimizer.parse_raw(b, *[, ...])

BudgetOptimizer.schema([por_alias, ref_template])

BudgetOptimizer.schema_json(*[, por_alias, ...])

BudgetOptimizer.set_constraints(restricciones)

Establecer restricciones para el optimizador.

BudgetOptimizer.update_forward_refs(**localns)

BudgetOptimizer.validate(valor)

Atributos

DEFAULT_MINIMIZE_KWARGS

model_computed_fields

model_config

Configuración para el modelo, debe ser un diccionario que cumpla con [ConfigDict][pydantic.config.ConfigDict].

model_extra

Obtener campos adicionales establecidos durante la validación.

model_fields

model_fields_set

Devuelve el conjunto de campos que han sido establecidos explícitamente en esta instancia del modelo.

num_periods

mmm_model

response_variable

utility_function

budgets_to_optimize

custom_constraints

default_constraints

budget_distribution_over_period

cost_per_unit

compile_kwargs