Releases: facebookexperimental/Robyn
Releases · facebookexperimental/Robyn
v3.12.0 [GitHub R]
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
v3.11.1 [CRAN]
What's Changed
- fix: one-pager decomp labels and warning by @laresbernardo in #1011
v3.11.0 [CRAN]
What's Changed
- Add objective weights by @gufengzhou in #826
- build(deps): bump @babel/traverse from 7.21.5 to 7.23.2 in /website by @dependabot in #842
- feat: check and fix all_sol_json & new pareto_df parameters inputs by @laresbernardo in #843
- feat + fix: bundle fixes and improvements on json files by @laresbernardo in #852
- fix: compatibility with legacy files on robyn_recreate() by @laresbernardo in #865
- Fix #850 & #838 by @michellegrushkometa in #864
- Robyn api by @yu-ya-tanaka in #863
- fix: crashed cut() when monthly data by @laresbernardo in #868
- fix: when all values on a column are negative crash by @laresbernardo in #871
- fix: winsorize errors with na.rm = TRUE #872 + InputCollect print when no prophet by @laresbernardo in #875
- Bundle of small fixes and feats by @laresbernardo in #882
- fix: foreach seed for reproducibility + dt_simulated_weekly dataset by @laresbernardo in #907
- Robyn api update notebook and endpoint by @yu-ya-tanaka in #912
- fix: avoid overwriting csv when scenario changes by @laresbernardo in #913
- fix: intercept param in outputs + ts_validation plot for convergence by @laresbernardo in #917
- build(deps): bump follow-redirects from 1.15.3 to 1.15.4 in /website by @dependabot in #899
- feat: enable baseline_level param for decomp_plot() + let NULL solID when single model available +docs: update robyn_response() examples by @laresbernardo in #923
- docs: clarify objective_weights order by @laresbernardo in #929
- feat: add clusters information to one-pagers, fix metric notes, reduce texts sizes, no ng check to recreate + fix: RNG warning by @laresbernardo in #928
- feat: keep custom exported data from JSON when recreating model & use raw_data if available + update docs by @laresbernardo in #930
- fix: mediaVecCollect's organic vars weren't being multiplied by coef values + InputCollect print when no prophet country set by @laresbernardo in #936
- fix: One or both dimensions exceed the maximum (50000px) error #874 by @laresbernardo in #939
- build(deps): bump follow-redirects from 1.15.4 to 1.15.6 in /website by @dependabot in #941
- build(deps): bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /website by @dependabot in #943
- build(deps): bump express from 4.18.2 to 4.19.2 in /website by @dependabot in #947
- fix: target = 1 error and better constraints check by @laresbernardo in #942
- Fixed error when ts_validation is false. by @yu-ya-tanaka in #965
- bl01: refresh fixes and improvements + others by @laresbernardo in #969
- build(deps): bump braces from 3.0.2 to 3.0.3 in /website by @dependabot in #997
- fix: refresh hyps check + use data available in json + refresh hyps + upper constraints fix when higher than mean by @laresbernardo in #974
- build(deps): bump ws from 7.5.9 to 7.5.10 in /website by @dependabot in #999
- docs: CRAN 3.11.0 by @laresbernardo in #1001
New Contributors
- @yu-ya-tanaka made their first contribution in #863
Full Changelog: v3.10.5...v3.11.0
v3.10.5: Objective function weight, Meta MMM API beta, website tab "Features" revamp, bug fixes
- Feat: New arg
objective_weights
inrobyn_run()
to allow manual tuning of weights for objective functions (NRMSE, DECOMP.RSSD, MAPE.LIFT). Default weight is even weights c(1,1,1). Note: This is experimental and there's no guidance on how weights biases modelling. Commit here - Feat: Meta MMM API connector demo, a beta script. Commit here
- Doc: Updated and revamped the website "features" tab, also reorganised the navigation. see here
Full Changelog: v3.10.3...v3.10.5
v3.10.3: Objects size reduction, RSSD penalty for 0 effect media [CRAN]
More details on Facebook's Robyn Community post
- Feat: Reduced object sizes up to 88% #687
- Feat: RSSD penalty for 0 media effects media (parameter) #680
- Feat: Always constraint prophet coefficients to 0-1 #686
- Feat: Windsorized NRMSE on multi-objective optimization plots [1/500 default threshold] to avoid extreme skewness #693
- Feat: New
intercept
parameter passed toglmnet()
#722 - Fix: Return meaningful error when, after filtering by modeling window, a variable has no variance #619
- Fix: Removed negative carryover outputs for Weibull PDF adstock #706
- Fix: Correctly pass
plot_folder
input onrobyn_refresh()
#708
Full Changelog: v3.10.2...v3.10.3
v3.10.2: Refresh model selection and small bugs
- Fix: when running
robyn_refresh()
, select the refresh model by error_score value correctly #674 - Fix: pass
penalty.factor
when dropping intercept too - Fix: when importing holidays data, force date values as dates #663 by @richin13
- Docs: update several documentations across functions and site
New Contributors
Full Changelog: v3.10.1...v3.10.2
v3.10.1 - New “Target Efficiency” scenario for budget allocator
More details in post: Hitting ROAS target using Robyn’s budget allocator
- Feat: allocator's new scenario "target_efficiency" for ROAS/CPA target #648
- Fix: inverted CPA in allocator viz table #640
- Fix: re-enable experimental add_penalty_factor feature
- Fix: re-include spend from skipped channels #645
Full Changelog: v3.10.0...v3.10.1
v3.10.0: Allocator upgrade
More details in post: The convergence of marginal ROAS in the budget allocation in Robyn
- Feat: all new one-pager for
robyn_allocator()
showing initial, bounded and less-bounded scenarios, using last month's worth of data by default. Relevant changes from previous versions: initial spend is now mean of date range selected, not non-zero mean anymore + deprecated "max_response_expected_spend" scenario + carryover information is now provided in the curves + inform user when budget is topped and can't be fully allocated + added mROAS / mCPA for better understanding of allocation. And one step closer to the forecast functionality. #600 - Feat:
robyn_response()
now requires date or date range for adstocking (last period by default) and accepts single or multiple values to return different use cases and scenarios. - Feat: new
transform_adstock()
exported wrapper function. - Feat: added NRMSE validation on test set.
- Feat: added prophet monthly component.
- Fix: issue with differences on
OutputCollect$OutputModels
andOutputModels
to producets_validation
plot. #596 - Fix: added correct solID for fixed hyperparameters (not 1_1_1).
- Recode: reduced the size of
xDecompVec
onOutputCollect
to only pareto-front models. - Recode: got rid of "ggcorrplot" and "rPref" package dependencies.
- Docs: added blueprint link to demo.R.
Full Changelog: v3.9.0...v3.10.0
v3.9.0: Time-series validation feature [CRAN]
- Feat: new time series validation via time-series train/val/test dynamic splits and Adjusted R2 and NRMSE metrics reported for each group feature #545. We are adding an additional
train_size
hyperparameter to pick the size of the training size, which by default will iterate in the range of 0.5-0.8. Given it's a hyperparameter, you can change the range or fix the value manually. Turn on/off this feature using thets_validation
new parameter onrobyn_run()
; default is set toFALSE
for now. This is an important step for the forecasting coming function. - Feat: new
ts_validation()
function to plot time-series validation and convergence results. Generated and exported by default whents_validation = TRUE
, and whenexport = TRUE
, creatingts_validation_plot.png
file. - Fix: updated Adjusted R2 calculation (
get_rsq()
) for time-series validation using same denominator. - Fix: results are not sorted by lowest errors now to keep iteration results actual order.
- Feat: added prophet monthly component to enrich decomposition results #525
- Fix: correct solID (not "1_1_1") for fixed hyperparameters recreated models.
- Recode: reduced the size of
xDecompVec
onOutputCollect
by keeping pareto-front models only. - Docs: changed standard inputs on demo.R file for modeling window to include more data (3 years by default).
New Contributors
- @michellegrushkometa made their first contribution in #559
Full Changelog: v3.8.2...v3.9.0
v3.8.2: Memory friendly outputs, progress bars for Pareto-front models, bugs and docs
- Feat: new status bars for Pareto-Front models per trial to provide information on calculation status
- Feat: included carryover results into pareto_aggregated.csv output and
OutputCollect$xDecompAgg$carryover_pct
- Feat: new error message shows which hyperparameters inputs are missing #543
- Fix: substantially reduced the size of
robyn_run()
androbyn_outputs()
results (around -80% compared with 3.8.1 version's size) by removing redundant and unused data from outputs #534 - Fix: invalid argument type in check_factorvars() and issue recreating calibrated models #520
- Fix:
add_penalty_factor
parameter now works correctly with JSON files androbyn_refresh()
#543 - Fix: correct hyper-parameters length for custom data #533
- Fix: bug in RobynLearn when checking numerical data #532
- Fix: removed .iData format for legacy demo .RData files
- Fix: passing custom
pareto_fronts
input instead of "auto" now works as expected - Docs: updated released version on website, meta.com emails, update CRAN link on
robyn_update()
Full Changelog: v3.8.0...v3.8.2