Refit after a month of new data
match flagged ← All linear growth benchmarksfit(history, { map: { warmStart } }) from warmStartParameters of a fit of the first 226 days, against fit(df, init=warm_start_params(m)). 256 days in all, fitted with L-BFGS. Timings compare the refit with a fresh fit.
Input
benchmark/inputs/v1/linear-medium.json: 256 history rows and 64 forecast rows.
Output
Largest difference: 0.0024 (0.0025% of the input's range).
Every forecast row from both libraries.
| Date | Effect Prophet | Python Prophet | Difference |
|---|---|---|---|
| 2020-09-13 | 107.7958 | 107.7952 | 0.00059 |
| 2020-09-14 | 107.5632 | 107.5626 | 0.00060 |
| 2020-09-15 | 108.3425 | 108.3418 | 0.00063 |
| 2020-09-16 | 109.9333 | 109.9326 | 0.00068 |
| 2020-09-17 | 111.5460 | 111.5453 | 0.00070 |
| 2020-09-18 | 112.3359 | 112.3351 | 0.00072 |
| 2020-09-19 | 112.0777 | 112.0770 | 0.00074 |
| 2020-09-20 | 111.3662 | 111.3654 | 0.00079 |
| 2020-09-21 | 111.1336 | 111.1328 | 0.00080 |
| 2020-09-22 | 111.9129 | 111.9121 | 0.00082 |
| 2020-09-23 | 113.5037 | 113.5028 | 0.00088 |
| 2020-09-24 | 115.1164 | 115.1155 | 0.00089 |
| 2020-09-25 | 115.9063 | 115.9054 | 0.00092 |
| 2020-09-26 | 115.6482 | 115.6472 | 0.00094 |
| 2020-09-27 | 114.9366 | 114.9356 | 0.00099 |
| 2020-09-28 | 114.7040 | 114.7030 | 0.00099 |
| 2020-09-29 | 115.4833 | 115.4823 | 0.0010 |
| 2020-09-30 | 117.0741 | 117.0730 | 0.0011 |
| 2020-10-01 | 118.6868 | 118.6857 | 0.0011 |
| 2020-10-02 | 119.4767 | 119.4756 | 0.0011 |
| 2020-10-03 | 119.2186 | 119.2175 | 0.0011 |
| 2020-10-04 | 118.5071 | 118.5059 | 0.0012 |
| 2020-10-05 | 118.2744 | 118.2732 | 0.0012 |
| 2020-10-06 | 119.0537 | 119.0525 | 0.0012 |
| 2020-10-07 | 120.6445 | 120.6433 | 0.0013 |
| 2020-10-08 | 122.2572 | 122.2560 | 0.0013 |
| 2020-10-09 | 123.0471 | 123.0458 | 0.0013 |
| 2020-10-10 | 122.7890 | 122.7877 | 0.0013 |
| 2020-10-11 | 122.0775 | 122.0761 | 0.0014 |
| 2020-10-12 | 121.8448 | 121.8435 | 0.0014 |
| 2020-10-13 | 122.6242 | 122.6227 | 0.0014 |
| 2020-10-14 | 124.2150 | 124.2135 | 0.0015 |
| 2020-10-15 | 125.8277 | 125.8262 | 0.0015 |
| 2020-10-16 | 126.6176 | 126.6160 | 0.0015 |
| 2020-10-17 | 126.3594 | 126.3579 | 0.0015 |
| 2020-10-18 | 125.6479 | 125.6463 | 0.0016 |
| 2020-10-19 | 125.4153 | 125.4137 | 0.0016 |
| 2020-10-20 | 126.1946 | 126.1930 | 0.0016 |
| 2020-10-21 | 127.7854 | 127.7837 | 0.0017 |
| 2020-10-22 | 129.3981 | 129.3964 | 0.0017 |
| 2020-10-23 | 130.1880 | 130.1863 | 0.0017 |
| 2020-10-24 | 129.9299 | 129.9281 | 0.0017 |
| 2020-10-25 | 129.2183 | 129.2165 | 0.0018 |
| 2020-10-26 | 128.9857 | 128.9839 | 0.0018 |
| 2020-10-27 | 129.7650 | 129.7632 | 0.0018 |
| 2020-10-28 | 131.3558 | 131.3539 | 0.0019 |
| 2020-10-29 | 132.9685 | 132.9666 | 0.0019 |
| 2020-10-30 | 133.7584 | 133.7565 | 0.0019 |
| 2020-10-31 | 133.5003 | 133.4984 | 0.0019 |
| 2020-11-01 | 132.7887 | 132.7868 | 0.0020 |
| 2020-11-02 | 132.5561 | 132.5541 | 0.0020 |
| 2020-11-03 | 133.3354 | 133.3334 | 0.0020 |
| 2020-11-04 | 134.9262 | 134.9242 | 0.0021 |
| 2020-11-05 | 136.5389 | 136.5369 | 0.0021 |
| 2020-11-06 | 137.3288 | 137.3267 | 0.0021 |
| 2020-11-07 | 137.0707 | 137.0686 | 0.0021 |
| 2020-11-08 | 136.3592 | 136.3570 | 0.0022 |
| 2020-11-09 | 136.1265 | 136.1244 | 0.0022 |
| 2020-11-10 | 136.9058 | 136.9036 | 0.0022 |
| 2020-11-11 | 138.4967 | 138.4944 | 0.0023 |
| 2020-11-12 | 140.1094 | 140.1071 | 0.0023 |
| 2020-11-13 | 140.8993 | 140.8969 | 0.0023 |
| 2020-11-14 | 140.6411 | 140.6388 | 0.0023 |
| 2020-11-15 | 139.9296 | 139.9272 | 0.0024 |
Internal fit differences
The forecasts match, so this case passes. Both libraries search for the best-fitting parameters and stop when they are close enough. On this input they stopped at slightly different points, so these internal numbers differ by more than the threshold where we take a closer look.
| Check | Effect Prophet | Python Prophet | Threshold |
|---|---|---|---|
| Fitting objective (lower is a better fit) | -1762.2305 | -1762.1516 | 0.01 |
Timing
Median of all measured repetitions.
| Step | Effect Prophet | Python Prophet | Effect Prophet is |
|---|---|---|---|
| Fit | 26.7 ms | 88.3 ms | 3.3× faster |
| Refit from an earlier fit | 27.3 ms | 73.2 ms | 2.7× faster |
Settings
The case declaration both libraries ran.
json
{
"kind": "map",
"comparison": {
"kind": "equivalent-objective",
"evidenceId": "linear-output-first-v4"
},
"fitRequest": "growth-only",
"configuration": {
"growth": "linear",
"scaling": "absmax",
"seasonalityMode": "additive",
"holidaysMode": "additive",
"changepoints": {
"mode": "auto",
"count": 25,
"range": 0.8
},
"changepointPriorScale": 0.05,
"seasonalities": [
{
"name": "weekly",
"periodDays": 7,
"fourierOrder": 3,
"priorScale": 10
}
],
"events": [],
"regressors": []
},
"pythonOptimizer": {
"algorithm": "Auto",
"maxIterations": 10000,
"newtonFallback": true
},
"warmStart": {
"baseRows": 226,
"investigateParameterAbsolute": 0.01
}
}