Module: schema.processors.reach_frequency_optimization_processor

Defines a processor for reach and frequency optimization inference on a Meridian model.

This module provides the ReachFrequencyOptimizationProcessor, which optimizes the average frequency for reach and frequency (R&F) media channels in a trained Meridian model to maximize ROI.

The processor takes a trained model and a ReachFrequencyOptimizationSpec object. The spec defines the constraints for the optimization, such as the minimum and maximum average frequency to consider for each channel.

Key Features:

  • Optimizes average frequency for all R&F channels simultaneously.
  • Allows setting minimum and maximum frequency constraints.
  • Generates detailed results, including the optimal average frequency for each channel, the expected outcomes at this optimal frequency, and response curves showing KPI/Revenue as a function of spend.
  • Outputs results in a structured protobuf format (ReachFrequencyOptimization).

Key Classes:

  • ReachFrequencyOptimizationSpec: Dataclass to specify optimization parameters and constraints.
  • ReachFrequencyOptimizationProcessor: The main processor class to execute the R&F optimization.

Example Usage:

from schema.processors import reach_frequency_optimization_processor
from schema.processors import common
from schema.processors import model_processor
import datetime

# Assuming 'mmm' is a trained Meridian model object with R&F channels
trained_model = model_processor.TrainedModel(mmm)

spec = reach_frequency_optimization_processor.ReachFrequencyOptimizationSpec(
    optimization_name="rf_optimize_q1",
    start_date=datetime.date(2023, 1, 1),
    end_date=datetime.date(2023, 4, 1),
    min_frequency=1.0,
    max_frequency=10.0,  # Optional, defaults to model's max frequency
    kpi_type=common.KpiType.REVENUE,
)

processor = (
    reach_frequency_optimization_processor.ReachFrequencyOptimizationProcessor(
        trained_model
    )
)
# result is a rf_pb.ReachFrequencyOptimization proto
result = processor.execute([spec])

print(f"R&F Optimization results for {spec.optimization_name}:")
# Access results from the proto, e.g.:
# result.results[0].optimized_channel_frequencies
# result.results[0].optimized_marketing_analysis
# result.results[0].frequency_outcome_grid

Classes

class ReachFrequencyOptimizationProcessor: A Processor for marketing reach and frequency optimization.

class ReachFrequencyOptimizationSpec: Spec dataclass for marketing reach and frequency optimization processor.