MMM.add_cost_per_target_calibration#
- MMM.add_cost_per_target_calibration(data, calibration_data, name_prefix='cpt_calibration')[source]#
Calibrate cost-per-target using constraints via
pm.Potential.This adds a deterministic
cpt_variable_namecomputed aschannel_data_spend / channel_contribution_original_scaleand creates per-row penalty terms based oncalibration_datausing a quadratic penalty:penalty = - |cpt_mean - target|^2 / (2 * sigma^2).- Parameters:
- data
pd.DataFrame Feature-like DataFrame with columns matching training
Xbut with channel values representing spend (original units). Must include the samedateand any modeldimscolumns.- calibration_data
pd.DataFrame - DataFrame with rows specifying calibration targets. Must include:
channel: channel name inself.channel_columnscost_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, name_prefix="cpt_calibration", )