Everything at once, two years
match flagged ← All linear growth benchmarks768 daily rows with automatic changepoints, two seasonal patterns, six events and four regressors.
Input
benchmark/inputs/v1/map-mixed-features-automatic-large.json: 768 history rows and 128 forecast rows.
Output
Largest difference: 0.0069 (0.015% of the input's range).
Every forecast row from both libraries.
| Date | Effect Prophet | Python Prophet | Difference |
|---|---|---|---|
| 2022-02-07 | 46.5884 | 46.5852 | 0.0033 |
| 2022-02-08 | 47.3069 | 47.3037 | 0.0032 |
| 2022-02-09 | 47.5405 | 47.5370 | 0.0035 |
| 2022-02-10 | 47.9353 | 47.9317 | 0.0036 |
| 2022-02-11 | 49.5176 | 49.5144 | 0.0033 |
| 2022-02-12 | 49.5945 | 49.5911 | 0.0034 |
| 2022-02-13 | 50.5738 | 50.5691 | 0.0046 |
| 2022-02-14 | 49.6481 | 49.6433 | 0.0048 |
| 2022-02-15 | 50.3772 | 50.3722 | 0.0050 |
| 2022-02-16 | 49.3835 | 49.3795 | 0.0041 |
| 2022-02-17 | 49.4531 | 49.4490 | 0.0041 |
| 2022-02-18 | 49.2991 | 49.2950 | 0.0041 |
| 2022-02-19 | 48.8933 | 48.8895 | 0.0038 |
| 2022-02-20 | 48.1626 | 48.1589 | 0.0038 |
| 2022-02-21 | 46.1707 | 46.1668 | 0.0040 |
| 2022-02-22 | 48.6492 | 48.6441 | 0.0051 |
| 2022-02-23 | 50.3402 | 50.3350 | 0.0052 |
| 2022-02-24 | 51.0678 | 51.0625 | 0.0053 |
| 2022-02-25 | 49.7879 | 49.7838 | 0.0041 |
| 2022-02-26 | 50.1734 | 50.1694 | 0.0040 |
| 2022-02-27 | 49.9273 | 49.9235 | 0.0038 |
| 2022-02-28 | 49.1685 | 49.1649 | 0.0036 |
| 2022-03-01 | 49.7510 | 49.7472 | 0.0037 |
| 2022-03-02 | 50.8495 | 50.8457 | 0.0038 |
| 2022-03-03 | 53.1036 | 53.0990 | 0.0046 |
| 2022-03-04 | 51.8382 | 51.8335 | 0.0047 |
| 2022-03-05 | 51.9565 | 51.9517 | 0.0048 |
| 2022-03-06 | 49.4622 | 49.4585 | 0.0037 |
| 2022-03-07 | 49.1798 | 49.1760 | 0.0038 |
| 2022-03-08 | 49.9301 | 49.9262 | 0.0039 |
| 2022-03-09 | 51.1893 | 51.1854 | 0.0039 |
| 2022-03-10 | 55.5540 | 55.5492 | 0.0048 |
| 2022-03-11 | 52.1487 | 52.1443 | 0.0044 |
| 2022-03-12 | 55.1955 | 55.1885 | 0.0069 |
| 2022-03-13 | 57.6337 | 57.6278 | 0.0059 |
| 2022-03-14 | 52.3844 | 52.3795 | 0.0048 |
| 2022-03-15 | 51.3116 | 51.3077 | 0.0039 |
| 2022-03-16 | 52.1801 | 52.1759 | 0.0042 |
| 2022-03-17 | 50.8829 | 50.8787 | 0.0043 |
| 2022-03-18 | 50.6970 | 50.6926 | 0.0044 |
| 2022-03-19 | 50.6925 | 50.6881 | 0.0045 |
| 2022-03-20 | 49.4062 | 49.4017 | 0.0044 |
| 2022-03-21 | 50.5968 | 50.5915 | 0.0053 |
| 2022-03-22 | 51.0479 | 51.0425 | 0.0053 |
| 2022-03-23 | 51.1976 | 51.1920 | 0.0056 |
| 2022-03-24 | 49.6327 | 49.6282 | 0.0045 |
| 2022-03-25 | 49.8496 | 49.8451 | 0.0045 |
| 2022-03-26 | 50.0943 | 50.0898 | 0.0045 |
| 2022-03-27 | 49.8795 | 49.8750 | 0.0045 |
| 2022-03-28 | 49.2671 | 49.2628 | 0.0044 |
| 2022-03-29 | 49.9476 | 49.9434 | 0.0043 |
| 2022-03-30 | 50.5225 | 50.5176 | 0.0049 |
| 2022-03-31 | 48.7926 | 48.7889 | 0.0037 |
| 2022-04-01 | 52.2720 | 52.2667 | 0.0052 |
| 2022-04-02 | 50.2083 | 50.2045 | 0.0038 |
| 2022-04-03 | 49.2693 | 49.2656 | 0.0038 |
| 2022-04-04 | 48.7474 | 48.7436 | 0.0039 |
| 2022-04-05 | 49.3433 | 49.3393 | 0.0040 |
| 2022-04-06 | 50.5629 | 50.5587 | 0.0042 |
| 2022-04-07 | 51.1407 | 51.1364 | 0.0042 |
| 2022-04-08 | 53.7045 | 53.6992 | 0.0054 |
| 2022-04-09 | 53.9632 | 53.9580 | 0.0052 |
| 2022-04-10 | 52.4396 | 52.4342 | 0.0053 |
| 2022-04-11 | 49.7558 | 49.7516 | 0.0042 |
| 2022-04-12 | 50.2462 | 50.2424 | 0.0038 |
| 2022-04-13 | 51.3111 | 51.3071 | 0.0039 |
| 2022-04-14 | 51.6472 | 51.6431 | 0.0041 |
| 2022-04-15 | 51.7423 | 51.7380 | 0.0043 |
| 2022-04-16 | 52.0415 | 52.0370 | 0.0045 |
| 2022-04-17 | 52.8570 | 52.8513 | 0.0057 |
| 2022-04-18 | 51.7502 | 51.7444 | 0.0058 |
| 2022-04-19 | 51.9570 | 51.9511 | 0.0059 |
| 2022-04-20 | 51.7055 | 51.7009 | 0.0046 |
| 2022-04-21 | 52.1347 | 52.1301 | 0.0046 |
| 2022-04-22 | 51.2554 | 51.2506 | 0.0048 |
| 2022-04-23 | 51.2791 | 51.2743 | 0.0048 |
| 2022-04-24 | 50.9514 | 50.9465 | 0.0048 |
| 2022-04-25 | 48.9935 | 48.9887 | 0.0048 |
| 2022-04-26 | 51.7210 | 51.7150 | 0.0059 |
| 2022-04-27 | 53.1833 | 53.1774 | 0.0059 |
| 2022-04-28 | 54.2553 | 54.2494 | 0.0059 |
| 2022-04-29 | 52.8428 | 52.8382 | 0.0046 |
| 2022-04-30 | 53.0363 | 53.0318 | 0.0045 |
| 2022-05-01 | 52.3155 | 52.3110 | 0.0044 |
| 2022-05-02 | 51.7155 | 51.7114 | 0.0041 |
| 2022-05-03 | 52.2140 | 52.2098 | 0.0042 |
| 2022-05-04 | 53.3038 | 53.2995 | 0.0043 |
| 2022-05-05 | 55.6069 | 55.6013 | 0.0056 |
| 2022-05-06 | 56.3321 | 56.3264 | 0.0057 |
| 2022-05-07 | 56.6639 | 56.6582 | 0.0058 |
| 2022-05-08 | 52.9189 | 52.9144 | 0.0045 |
| 2022-05-09 | 52.3400 | 52.3356 | 0.0044 |
| 2022-05-10 | 52.6560 | 52.6515 | 0.0045 |
| 2022-05-11 | 53.7146 | 53.7100 | 0.0046 |
| 2022-05-12 | 55.0611 | 55.0568 | 0.0043 |
| 2022-05-13 | 55.2329 | 55.2286 | 0.0043 |
| 2022-05-14 | 57.4355 | 57.4300 | 0.0055 |
| 2022-05-15 | 56.5326 | 56.5269 | 0.0057 |
| 2022-05-16 | 55.5420 | 55.5361 | 0.0059 |
| 2022-05-17 | 54.0239 | 54.0189 | 0.0050 |
| 2022-05-18 | 55.1292 | 55.1240 | 0.0052 |
| 2022-05-19 | 55.0994 | 55.0942 | 0.0053 |
| 2022-05-20 | 55.1085 | 55.1035 | 0.0050 |
| 2022-05-21 | 53.7145 | 53.7096 | 0.0050 |
| 2022-05-22 | 52.1971 | 52.1920 | 0.0051 |
| 2022-05-23 | 52.9169 | 52.9107 | 0.0063 |
| 2022-05-24 | 53.3442 | 53.3379 | 0.0063 |
| 2022-05-25 | 54.4635 | 54.4571 | 0.0064 |
| 2022-05-26 | 53.5443 | 53.5389 | 0.0054 |
| 2022-05-27 | 53.9450 | 53.9396 | 0.0054 |
| 2022-05-28 | 54.2298 | 54.2246 | 0.0053 |
| 2022-05-29 | 53.5551 | 53.5500 | 0.0051 |
| 2022-05-30 | 53.0974 | 53.0925 | 0.0049 |
| 2022-05-31 | 53.5623 | 53.5574 | 0.0049 |
| 2022-06-01 | 56.2409 | 56.2351 | 0.0058 |
| 2022-06-02 | 56.4136 | 56.4078 | 0.0058 |
| 2022-06-03 | 55.3835 | 55.3778 | 0.0058 |
| 2022-06-04 | 53.5571 | 53.5523 | 0.0047 |
| 2022-06-05 | 52.7742 | 52.7694 | 0.0048 |
| 2022-06-06 | 52.0514 | 52.0465 | 0.0049 |
| 2022-06-07 | 53.1076 | 53.1026 | 0.0050 |
| 2022-06-08 | 54.3469 | 54.3420 | 0.0050 |
| 2022-06-09 | 54.1744 | 54.1693 | 0.0050 |
| 2022-06-10 | 56.0804 | 56.0742 | 0.0062 |
| 2022-06-11 | 57.3864 | 57.3806 | 0.0058 |
| 2022-06-12 | 56.5536 | 56.5478 | 0.0058 |
| 2022-06-13 | 53.8331 | 53.8284 | 0.0047 |
| 2022-06-14 | 54.2706 | 54.2657 | 0.0049 |
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 |
|---|---|---|---|
| Stationarity residual (lower is closer to the best fit) | 176.1731 | 173.4560 | 0.01 |
Timing
Median of all measured repetitions.
| Step | Effect Prophet | Python Prophet | Effect Prophet is |
|---|---|---|---|
| Convert input rows | 182 µs | 1.11 ms | 6.1× faster |
| Fit | 11.7 ms | 37.3 ms | 3.2× faster |
| Predict | 957 µs | 5.99 ms | 6.3× faster |
| Fit and predict | 12.9 ms | 43.1 ms | 3.3× faster |
| Convert, fit and predict | 11.6 ms | 44.5 ms | 3.8× faster |
| First forecast in a new process | 207 ms | 1.45 s | 7.0× faster |
| Save model to JSON | 24 µs | 1.71 ms | 71× faster |
| Load model from JSON | 269 µs | 5.75 ms | 21× faster |
| Load and predict in a new process | 171 ms | 1.41 s | 8.3× faster |
Settings
The case declaration both libraries ran.
json
{
"kind": "linear-map",
"comparison": {
"kind": "equivalent-objective",
"evidenceId": "linear-output-first-v4"
},
"configuration": {
"effectMap": "omitted",
"changepoints": {
"mode": "auto",
"count": 25,
"range": 0.8
},
"changepointPriorScale": 0.05,
"seasonalities": [
{
"name": "weekly-shared",
"periodDays": 7,
"fourierOrder": 2,
"priorScale": 10
},
{
"name": "monthly-active",
"periodDays": 30.5,
"fourierOrder": 3,
"priorScale": 8,
"conditionName": "active"
}
],
"events": [
{
"name": "release",
"date": "2020-04-10",
"lowerWindowDays": -1,
"upperWindowDays": 2,
"priorScale": 10
},
{
"name": "release",
"date": "2020-10-27",
"lowerWindowDays": -1,
"upperWindowDays": 2,
"priorScale": 10
},
{
"name": "release",
"date": "2022-03-11",
"lowerWindowDays": -1,
"upperWindowDays": 2,
"priorScale": 10
},
{
"name": "campaign",
"date": "2020-04-11",
"lowerWindowDays": -1,
"upperWindowDays": 0,
"priorScale": 6
},
{
"name": "campaign",
"date": "2021-05-15",
"lowerWindowDays": -1,
"upperWindowDays": 0,
"priorScale": 6
},
{
"name": "campaign",
"date": "2022-03-31",
"lowerWindowDays": -1,
"upperWindowDays": 0,
"priorScale": 6
}
],
"regressors": [
{
"name": "binary-auto",
"priorScale": 10,
"standardization": "auto"
},
{
"name": "numeric-auto",
"priorScale": 10,
"standardization": "auto"
},
{
"name": "numeric-always",
"priorScale": 7,
"standardization": "always"
},
{
"name": "numeric-never",
"priorScale": 5,
"standardization": "never"
}
]
},
"effectOptimizer": {
"algorithm": "auto",
"maxIterations": 10000,
"fallback": "newton",
"lbfgs": {
"historySize": 5,
"initAlpha": 0.001,
"tolObj": 1e-12,
"tolRelObj": 10000,
"tolGrad": 1e-8,
"tolRelGrad": 10000000,
"tolParam": 1e-8
}
},
"pythonOptimizer": {
"algorithm": "Auto",
"maxIterations": 10000,
"newtonFallback": true,
"sigFigs": 12
}
}