Skip to content

Ranges, eight months ​

match flagged ← All logistic growth benchmarks

80% 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.

DateEffect ProphetPython ProphetDifference
2020-09-1390.515990.51591.9e-6
2020-09-1490.422790.42272.3e-5
2020-09-1590.622890.62281.8e-5
2020-09-1691.050291.05021.7e-5
2020-09-1791.524791.52481.5e-5
2020-09-1891.762691.76267.1e-6
2020-09-1991.631691.63161.7e-7
2020-09-2091.357291.35722.5e-6
2020-09-2191.264091.26402.3e-5
2020-09-2291.464091.46401.8e-5
2020-09-2391.891391.89141.7e-5
2020-09-2492.365892.36591.6e-5
2020-09-2592.603692.60366.7e-6
2020-09-2692.472692.47266.1e-7
2020-09-2792.198292.19822.9e-6
2020-09-2892.104992.10492.2e-5
2020-09-2992.304992.30481.7e-5
2020-09-3092.732292.73221.8e-5
2020-10-0193.206693.20671.6e-5
2020-10-0293.444493.44446.3e-6
2020-10-0393.313393.31339.4e-7
2020-10-0493.038993.03893.2e-6
2020-10-0592.945692.94552.2e-5
2020-10-0693.145593.14551.7e-5
2020-10-0793.572893.57281.8e-5
2020-10-0894.047294.04721.7e-5
2020-10-0994.285094.28496.1e-6
2020-10-1094.153894.15381.2e-6
2020-10-1193.879493.87943.5e-6
2020-10-1293.786193.78602.2e-5
2020-10-1393.986093.98591.7e-5
2020-10-1494.413294.41321.8e-5
2020-10-1594.887694.88771.7e-5
2020-10-1695.125495.12535.9e-6
2020-10-1794.994294.99421.4e-6
2020-10-1894.719794.71973.6e-6
2020-10-1994.626494.62642.2e-5
2020-10-2094.826394.82631.7e-5
2020-10-2195.253595.25361.8e-5
2020-10-2295.727995.72801.7e-5
2020-10-2395.965695.96565.7e-6
2020-10-2495.834595.83451.5e-6
2020-10-2595.560095.56003.8e-6
2020-10-2695.466795.46662.1e-5
2020-10-2795.666595.66651.6e-5
2020-10-2896.093896.09381.9e-5
2020-10-2996.568296.56821.7e-5
2020-10-3096.805996.80595.6e-6
2020-10-3196.674796.67471.6e-6
2020-11-0196.400296.40023.9e-6
2020-11-0296.306896.30682.1e-5
2020-11-0396.506796.50671.6e-5
2020-11-0496.933996.93401.9e-5
2020-11-0597.408397.40831.7e-5
2020-11-0697.646097.64605.5e-6
2020-11-0797.514897.51481.7e-6
2020-11-0897.240397.24033.9e-6
2020-11-0997.147097.14702.1e-5
2020-11-1097.346897.34681.6e-5
2020-11-1197.774197.77411.9e-5
2020-11-1298.248498.24851.7e-5
2020-11-1398.486198.48615.5e-6
2020-11-1498.354998.35491.8e-6
2020-11-1598.080498.08044.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.

CheckEffect ProphetPython ProphetThreshold
Stationarity residual (lower is closer to the best fit)108.10474.44410.01

Timing ​

Median of all measured repetitions.

StepEffect ProphetPython ProphetEffect Prophet is
Convert input rows58 µs591 µs10× faster
Save model to JSON24 µs669 µs27× faster
Load model from JSON137 µs2.62 ms19× faster
Simulate uncertainty1.55 ms25.9 msNot compared: different work
First simulation in a new process177 ms1.48 sNot compared: different work
Load and simulate in a new process163 ms1.45 sNot compared: different work

Some steps aren't compared, because the two libraries' public calls produce different outputs. Their times show what each call costs, not which library is faster.

  • Simulate uncertainty, First simulation in a new process, Load and simulate in a new process: Python's predict(vectorized=False) also builds the point forecast and every component, while Effect Prophet's predictUncertainty returns only the ranges.

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
  }
}

Inspired by Prophet from Meta. Not affiliated with Meta.