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_periods
int 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 lengthnum_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_periodsper period).
- num_periods
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_boundsopcionales y restricciones personalizadas.BudgetOptimizer.construct([_fields_set])BudgetOptimizer.copy(*[, incluir, excluir, ...])Devuelve una copia del modelo.
BudgetOptimizer.dict(*[, incluir, excluir, ...])Extraiga el gráfico de distribución de respuestas, condicionado a los parámetros posteriores.
BudgetOptimizer.json(*[, incluir, excluir, ...])BudgetOptimizer.model_construct([_fields_set])Crea una nueva instancia de la clase
Modelcon 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"
Genera un esquema JSON para una clase de modelo.
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__ymodel_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"
Valide el objeto dado con datos de cadena contra el modelo de Pydantic.
BudgetOptimizer.parse_file(ruta, *[, ...])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_KWARGSmodel_computed_fieldsmodel_configConfiguración para el modelo, debe ser un diccionario que cumpla con [
ConfigDict][pydantic.config.ConfigDict].model_extraObtener campos adicionales establecidos durante la validación.
model_fieldsmodel_fields_setDevuelve el conjunto de campos que han sido establecidos explícitamente en esta instancia del modelo.
num_periodsmmm_modelresponse_variableutility_functionbudgets_to_optimizecustom_constraintsdefault_constraintsbudget_distribution_over_periodcost_per_unitcompile_kwargs