Optimize _geometric_adstock for 99% function speedup, reducing total model train time by ~40% - Python version #1217
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Project Robyn
Summary
This PR optimizes
_geometric_adstock
, the main performance bottleneck, reducing its execution time by ~99% and improving the total model train time by ~40% on Python version.Fixes
This PR does not address an existing GitHub issue but significantly improves performance.
Type of change
Motivation & Context
_geometric_adstock
previously accounted for 39% of the total model train time, significantly slowing down model execution.scipy.signal.lfilter
, replacing a Python loop with a highly efficient SciPy-based implementation (built on NumPy).Performance Benchmark (tutorial1.ipynb, Trial=1, iterations=2000)
Before Optimization:
_geometric_adstock
: 108.9s (39% of total model train time)After Optimization:
_geometric_adstock
: 0.495s (99% faster)