Ranges, eight months
match flagged ← All logistic growth benchmarks80% ranges from 128 simulated paths on the 256-day history and 64 forecast days.
Input
benchmark/inputs/v1/logistic-implicit-floor-large.json: 256 history rows and 64 forecast rows.
Output
Largest difference: 2.3e-5 (< 0.0001% of the input's range).
Every forecast row from both libraries.
| Date | Effect Prophet | Python Prophet | Difference |
|---|---|---|---|
| 2020-09-13 | 90.5159 | 90.5159 | 1.9e-6 |
| 2020-09-14 | 90.4227 | 90.4227 | 2.3e-5 |
| 2020-09-15 | 90.6228 | 90.6228 | 1.8e-5 |
| 2020-09-16 | 91.0502 | 91.0502 | 1.7e-5 |
| 2020-09-17 | 91.5247 | 91.5248 | 1.5e-5 |
| 2020-09-18 | 91.7626 | 91.7626 | 7.1e-6 |
| 2020-09-19 | 91.6316 | 91.6316 | 1.7e-7 |
| 2020-09-20 | 91.3572 | 91.3572 | 2.5e-6 |
| 2020-09-21 | 91.2640 | 91.2640 | 2.3e-5 |
| 2020-09-22 | 91.4640 | 91.4640 | 1.8e-5 |
| 2020-09-23 | 91.8913 | 91.8914 | 1.7e-5 |
| 2020-09-24 | 92.3658 | 92.3659 | 1.6e-5 |
| 2020-09-25 | 92.6036 | 92.6036 | 6.7e-6 |
| 2020-09-26 | 92.4726 | 92.4726 | 6.1e-7 |
| 2020-09-27 | 92.1982 | 92.1982 | 2.9e-6 |
| 2020-09-28 | 92.1049 | 92.1049 | 2.2e-5 |
| 2020-09-29 | 92.3049 | 92.3048 | 1.7e-5 |
| 2020-09-30 | 92.7322 | 92.7322 | 1.8e-5 |
| 2020-10-01 | 93.2066 | 93.2067 | 1.6e-5 |
| 2020-10-02 | 93.4444 | 93.4444 | 6.3e-6 |
| 2020-10-03 | 93.3133 | 93.3133 | 9.4e-7 |
| 2020-10-04 | 93.0389 | 93.0389 | 3.2e-6 |
| 2020-10-05 | 92.9456 | 92.9455 | 2.2e-5 |
| 2020-10-06 | 93.1455 | 93.1455 | 1.7e-5 |
| 2020-10-07 | 93.5728 | 93.5728 | 1.8e-5 |
| 2020-10-08 | 94.0472 | 94.0472 | 1.7e-5 |
| 2020-10-09 | 94.2850 | 94.2849 | 6.1e-6 |
| 2020-10-10 | 94.1538 | 94.1538 | 1.2e-6 |
| 2020-10-11 | 93.8794 | 93.8794 | 3.5e-6 |
| 2020-10-12 | 93.7861 | 93.7860 | 2.2e-5 |
| 2020-10-13 | 93.9860 | 93.9859 | 1.7e-5 |
| 2020-10-14 | 94.4132 | 94.4132 | 1.8e-5 |
| 2020-10-15 | 94.8876 | 94.8877 | 1.7e-5 |
| 2020-10-16 | 95.1254 | 95.1253 | 5.9e-6 |
| 2020-10-17 | 94.9942 | 94.9942 | 1.4e-6 |
| 2020-10-18 | 94.7197 | 94.7197 | 3.6e-6 |
| 2020-10-19 | 94.6264 | 94.6264 | 2.2e-5 |
| 2020-10-20 | 94.8263 | 94.8263 | 1.7e-5 |
| 2020-10-21 | 95.2535 | 95.2536 | 1.8e-5 |
| 2020-10-22 | 95.7279 | 95.7280 | 1.7e-5 |
| 2020-10-23 | 95.9656 | 95.9656 | 5.7e-6 |
| 2020-10-24 | 95.8345 | 95.8345 | 1.5e-6 |
| 2020-10-25 | 95.5600 | 95.5600 | 3.8e-6 |
| 2020-10-26 | 95.4667 | 95.4666 | 2.1e-5 |
| 2020-10-27 | 95.6665 | 95.6665 | 1.6e-5 |
| 2020-10-28 | 96.0938 | 96.0938 | 1.9e-5 |
| 2020-10-29 | 96.5682 | 96.5682 | 1.7e-5 |
| 2020-10-30 | 96.8059 | 96.8059 | 5.6e-6 |
| 2020-10-31 | 96.6747 | 96.6747 | 1.6e-6 |
| 2020-11-01 | 96.4002 | 96.4002 | 3.9e-6 |
| 2020-11-02 | 96.3068 | 96.3068 | 2.1e-5 |
| 2020-11-03 | 96.5067 | 96.5067 | 1.6e-5 |
| 2020-11-04 | 96.9339 | 96.9340 | 1.9e-5 |
| 2020-11-05 | 97.4083 | 97.4083 | 1.7e-5 |
| 2020-11-06 | 97.6460 | 97.6460 | 5.5e-6 |
| 2020-11-07 | 97.5148 | 97.5148 | 1.7e-6 |
| 2020-11-08 | 97.2403 | 97.2403 | 3.9e-6 |
| 2020-11-09 | 97.1470 | 97.1470 | 2.1e-5 |
| 2020-11-10 | 97.3468 | 97.3468 | 1.6e-5 |
| 2020-11-11 | 97.7741 | 97.7741 | 1.9e-5 |
| 2020-11-12 | 98.2484 | 98.2485 | 1.7e-5 |
| 2020-11-13 | 98.4861 | 98.4861 | 5.5e-6 |
| 2020-11-14 | 98.3549 | 98.3549 | 1.8e-6 |
| 2020-11-15 | 98.0804 | 98.0804 | 4.0e-6 |
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) | 108.1047 | 4.4441 | 0.01 |
Timing
Median of all measured repetitions.
| Step | Effect Prophet | Python Prophet | Effect Prophet is |
|---|---|---|---|
| Convert input rows | 52 µs | 591 µs | 11× faster |
| Save model to JSON | 19 µs | 638 µs | 34× faster |
| Load model from JSON | 147 µs | 2.59 ms | 18× faster |
| Simulate uncertainty | 861 µs | 26.6 ms | 31× faster |
| First simulation in a new process | 170 ms | 1.54 s | 9.0× faster |
| Load and simulate in a new process | 157 ms | 1.49 s | 9.5× faster |
Settings
The case declaration both libraries ran.
json
{
"kind": "map",
"comparison": {
"kind": "equivalent-objective",
"evidenceId": "logistic-map-v1"
},
"configuration": {
"growth": "logistic",
"scaling": "minmax",
"seasonalityMode": "additive",
"holidaysMode": "additive",
"changepoints": {
"mode": "explicit",
"timestamps": [
"2020-02-10T00:00:00.000Z"
]
},
"changepointPriorScale": 0.2,
"seasonalities": [
{
"name": "weekly-custom",
"periodDays": 7,
"fourierOrder": 2,
"priorScale": 10
}
],
"events": [],
"regressors": []
},
"pythonOptimizer": {
"algorithm": "Auto",
"maxIterations": 10000,
"newtonFallback": true,
"sigFigs": 12
},
"uncertainty": {
"seed": 19,
"samples": 128,
"intervalWidth": 0.8,
"output": "intervals",
"algorithm": "scalar-continuous-time",
"evidence": "docs/validation/uncertainty.md#evidence-classes",
"samplerMemoryLimitBytes": 67108864
}
}