What's Changed
Exposure fitting, curve calibration & reach and frequency allocator (#1132)
- feat: enable exposure fitting
- Exposures (Imp/GRP etc) will be prioritised over spend for parent model fitting
- Deprecate function fit_spend_exposure, incl. Michaelis Menten. Nonlinear fitting between spend and exposure wasn't improving fitting significantly. Instead, future curve calibration feature will aim to improve curve identification.
- Use cpe (cost per exposure) as ratio for spend to exposure translation. use cpe_window to scale the whole dataset in order to obtain the right spend scale for modeling period.
- remove minpack.lm / nlsLM dependency
- update exposure plot
- feat: The curve calibrator - robyn_calibrate
- Simulate cumulative R&F dataset with frequency bucket
- add beta coef besides alpha and gamma to nevergrad hyperparameter to improve curve fit
- plot with freq_bucket as well as onepager per trial
- add df_curve_reach_freq as dummy dataset
- create robyn_calibrate that consumes curve input and outputs hyperparameter ranges as input.
- Rename previous internal robyn_calibrate function as lift_calibration
- early stop convergence with while loop
- update documentation
- prototype: reach and frequency allocator
This is the proof of concept of a R&F allocator that includes
- Simulated R&F data
- The R&F hill params are estimated using a multiplicative equation with Nevergrad
- visualisation of surface
- R&F allocator with nlopt
- constrain validation
- update: checks, input, transformation & website
- simplify various check functions
- adapt model.R, incl. reset run_transformations params to have clearer overview of params needed. simplify transformation.R by removing unnecessary checks
- In model.R & pareto.R: remove decompSpendDist from both scripts to reduce memory leak. Use xDecompAgg subsets instead
- In transformation.R & response.R: unify transformation namings in run_transformation and robyn_response
- In response.R: remove exposure extrapolation because it's already done in robyn_input. Also add inflexion point to output.
- In plots.R: fix onepager saturation plot issues
- In pareto.R: rewrite run_dt_resp() as response_wrapper and align transformation logic & naming.
- In pareto: Replace foreach response loop with lapply for simplicity.
- In pareto.R: Simplify plot data generation process, esp for saturation curve plot, actual vs predicted plot & immediate vs carryover plot.
- In pareto.R: Remove redundancy in xDecompVecCollect -> remove type rawMedia, rawSpend, predictedExposure, saturatedMedia & saturatedSpendReversed. Only keep adstockedMedia & decompMedia for response curve plotting.
- add set_default_hyppar for easier testing
- website update for all above changes
Contributors
Full Changelog: v3.11.0...v3.12.0