MMM.add_cost_per_target_calibration#
- MMM.add_cost_per_target_calibration(data, calibration_data, cpt_variable_name='cost_per_target', name_prefix='cpt_calibration')[source]#
Calibrate cost-per-target using constraints via
pm.Potential
.This adds a deterministic
cpt_variable_name
computed aschannel_data_spend / channel_contribution_original_scale
and creates per-row penalty terms based oncalibration_data
using a quadratic penalty:penalty = - |cpt_mean - target|^2 / (2 * sigma^2)
.- Parameters:
- data
pd.DataFrame
Feature-like DataFrame with columns matching training
X
but with channel values representing spend (original units). Must include the samedate
and any modeldims
columns.- calibration_data
pd.DataFrame
- DataFrame with rows specifying calibration targets. Must include:
channel
: channel name inself.channel_columns
cost_per_target
: desired CPT valuesigma
: accepted deviation; larger => weaker penalty
and one column per dimension in
self.dims
.- cpt_variable_name
str
Name for the cost-per-target Deterministic in the model.
- name_prefix
str
Prefix to use for generated potential names.
- data
Examples
Build a model and calibrate CPT for selected (dims, channel):
# spend data in original scale with the same structure as X spend_df = X.copy() # e.g., if X contains impressions, replace with monetary spend # spend_df[channels] = ... calibration_df = pd.DataFrame( { "channel": ["C1", "C2"], "geo": ["US", "US"], # dims columns as needed "cost_per_target": [30.0, 45.0], "sigma": [2.0, 3.0], } ) mmm.add_cost_per_target_calibration( data=spend_df, calibration_data=calibration_df, cpt_variable_name="cost_per_target", name_prefix="cpt_calibration", )