Skip to content

Ranges with mixed effects ​

match ← All logistic growth benchmarks

80% ranges for a bounded model with a switchable weekly pattern, events and a regressor.

Input ​

benchmark/inputs/v1/logistic-uncertainty-mixed.json: 96 history rows and 24 forecast rows.

Output ​

Largest difference: 1.8e-11 (< 0.0001% of the input's range).

Every forecast row from both libraries.

DateEffect ProphetPython ProphetDifference
2020-04-0665.825365.82531.8e-11
2020-04-0766.246966.24691.7e-11
2020-04-0867.293267.29321.7e-11
2020-04-0967.569567.56951.6e-11
2020-04-1067.517167.51711.6e-11
2020-04-1168.006168.00611.6e-11
2020-04-1267.899867.89981.5e-11
2020-04-1367.935667.93561.5e-11
2020-04-1468.694268.69421.4e-11
2020-04-1568.930168.93011.4e-11
2020-04-1670.900570.90051.5e-11
2020-04-1769.889269.88921.3e-11
2020-04-1869.904469.90441.3e-11
2020-04-1969.759369.75931.3e-11
2020-04-2070.595270.59521.2e-11
2020-04-2170.097870.09781.1e-11
2020-04-2270.693270.69321.1e-11
2020-04-2371.265171.26511.1e-11
2020-04-2471.572471.57241.1e-11
2020-04-2571.361371.36131.0e-11
2020-04-2671.777871.77781.0e-11
2020-04-2771.348171.34819.6e-12
2020-04-2871.659571.65959.2e-12
2020-04-2972.227072.22708.9e-12

Timing ​

Median of all measured repetitions.

StepEffect ProphetPython ProphetEffect Prophet is
Convert input rows79 µs563 µs7.1× faster
Save model to JSON25 µs676 µs28× faster
Load model from JSON244 µs4.02 ms16× faster
Simulate uncertainty629 µs34.6 ms55× faster
First simulation in a new process190 ms1.50 s7.9× faster
Load and simulate in a new process156 ms1.51 s9.7× 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,
        "conditionName": "active"
      }
    ],
    "events": [
      {
        "name": "campaign",
        "date": "2020-01-22",
        "lowerWindowDays": 0,
        "upperWindowDays": 0,
        "priorScale": 10
      },
      {
        "name": "campaign",
        "date": "2020-04-16",
        "lowerWindowDays": 0,
        "upperWindowDays": 0,
        "priorScale": 10
      }
    ],
    "regressors": [
      {
        "name": "promotion",
        "priorScale": 10,
        "standardization": "never",
        "mode": "multiplicative"
      }
    ]
  },
  "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.