Skip to content

Releases: facebookexperimental/Robyn

v3.10.5: Objective function weight, Meta MMM API beta, website tab "Features" revamp, bug fixes

24 Oct 03:00
Compare
Choose a tag to compare
  • Feat: New arg objective_weights in robyn_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

17 May 17:19
Compare
Choose a tag to compare

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 to glmnet() #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 on robyn_refresh() #708

Full Changelog: v3.10.2...v3.10.3

v3.10.2: Refresh model selection and small bugs

14 Apr 14:03
bce870e
Compare
Choose a tag to compare
  • 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

27 Mar 14:21
Compare
Choose a tag to compare

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

28 Feb 15:29
Compare
Choose a tag to compare

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 and OutputModels to produce ts_validation plot. #596
  • Fix: added correct solID for fixed hyperparameters (not 1_1_1).
  • Recode: reduced the size of xDecompVec on OutputCollect 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

15 Dec 15:16
eabd4c8
Compare
Choose a tag to compare
  • 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 the ts_validation new parameter on robyn_run(); default is set to FALSE 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 when ts_validation = TRUE, and when export = TRUE, creating ts_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 on OutputCollect 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

Full Changelog: v3.8.2...v3.9.0

v3.8.2: Memory friendly outputs, progress bars for Pareto-front models, bugs and docs

23 Nov 17:30
Compare
Choose a tag to compare
  • 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() and robyn_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 and robyn_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

v3.8.0 - Bootstrapped CI, Immediate vs Carryover, Multi-channel calibration

28 Oct 07:50
Compare
Choose a tag to compare
  • Feat: Added in-cluster bootstrapped confidence intervals (CI) for ROAS and CPA. We treat each cluster of Pareto-optimal model candidates as a sample from a local optimum of the entire population. Default parameters can be customized manually with boot_n and sim_n arguments.
  • Feat: New robyn_calibrate() function that replaces previous un-exported function calibrate_mmm(). The new calibration method is able to separate immediate & carryover effects. When calibrating using experimental results, only the immediate response and its future carryover serve as a calibration target, as opposed to previously the total response. The historical response is excluded from calibration.
  • Feat: Enabled multi-channel calibration so we can use experiments that measured more than one channel with a single experiment to be used for calibration (i.e. incrementality experiment measured all fb but you had fb_brand and fb_perf as two separate media channels/variables).
  • Feat: Added 2 new plots into model one-pager: bootstrapped CI plot and immediate vs carryover response plot.
  • Feat: Changed default Pareto-fronts from 3 to ”auto" to pick the N that contains at least 100 models (threshold can be changed manually with min_candidates parameter).
  • Recode: improved CodeFactor's code quality score from C- to A
  • Feat: Additional CI outputs containing revamped plot and CSV file.
  • Feat: Enabled turning off parallel calculations when cores = 1.
  • Fix: Fixed few minor bugs and doumentations (#496, #506, #507, #515)

Full Changelog: v3.7.2...v3.8.0

v3.7.2 - CRAN update, partial results, more reproducibility

01 Sep 20:15
Compare
Choose a tag to compare
  • Feat: wrap robyn_mmm() with a tryCatch() to return partial results if the function crashes after a certain time running and warns the user when this happens
  • Feat: auto-detect categorical variables (no need to set factor_vars parameter in robyn_inputs())
  • Feat: include R and Robyn's versions to JSON files and InputCollect for reproducibility
  • Feat: export/save raw data input for reproducibility (raw_data.csv file)
  • Feat: set Robyn::dt_prophet_holidays as default input on dt_holidays parameters
  • Fix: inverted counters in check_hyperparameters() message #474
  • Fix: force date format before binding rows in robyn_refresh() #480
  • Fix: check_context() was being skipped in some cases
  • Fix: when only 1 categorical value with 2 unique values crashed one-hot-encoding
  • Docs: updated templates for issues and pull requests

Full Changelog: v3.7.1...v3.7.2
Full Changelog since last CRAN update: v3.6.3...v3.7.2

v3.7.1 - JSON import/export, reactivate spend exposure fitting Latest

26 Aug 15:38
Compare
Choose a tag to compare
  • Feat: new robyn_read() and robyn_write() functions to save and load Robyn models in a transparent, flexible, and cost-efficient way using JSON instead of RDS files (read more); also, new print methods for both objects containing the most relevant information
  • Feat: new robyn_recreate() to rebuild any model's InputCollect and OutputCollect objects based on their JSON files and data
  • Feat: reactivated spend exposure fitting and plotting #463
  • Feat: updated robyn_response() to receive numeric vectors #464
  • Feat: enabled calibration_input on robyn_refresh() to calibrate on the fly and more robust checks on data inputs
  • Feat added Robyn and R versions as the caption in one-pagers to help users debug
  • Feat: trimmed spend response curves on robyn_allocator() and robyn_onepagers() plots outputs
  • Fix: missed intercept calculation in fitted vs residual plot #462
  • Fix: when single categorical value had 2 levels it crashed the one-hot-encoding process
  • Fix: datasets with no categorical data crashed when using one-hot-encoding #419
  • Fix: no need to manually sort the dates before passing the data to robyn_inputs(). Ref: check_datevar() #448
  • Fix: fixed ggplot warnings on some plots (previously hidden with suppressWarnings)
  • Other: added badges with website and Facebook group in README files (see here), updated documentation and website, and more data checks on user inputs

New Contributors

Full Changelog: v3.7.0...v3.7.1