{% extends "backcast/base.html" %} {% load static humanize %} {% block title %}{% if results %}{{ results.symbol }} · your {{ results.horizon }}-day forecasts · {% endif %}Score your forecasts · Backcast{% endblock %} {% block description %}Upload forecasts you made elsewhere and score them against the naive forecast, with the same tests as a backtest.{% endblock %} {% block head %} {% endblock %} {% block content %}

Score your own forecasts

Made forecasts some other way? Upload them and Backcast scores them against the naive forecast, on the same days, with the same tests it uses on its own models.

{% include "backcast/_combobox.html" with field_id="symbol" label="Ticker or company" value=symbol describedby="score-error" required=True fill_only=True %}
Forecast horizon
{% for h in horizons %} {% endfor %}
{% if results %}

{{ results.symbol }}

Your {{ results.horizon }}-day forecasts against naive

{% include "backcast/_results.html" %}
{% endif %}

The file

One row per forecast, with a header row. date is the trading day whose close you forecast from, and forecast is the price you expected that many trading days later, scored as the median.

date,forecast,q10,q90
2025-03-03,241.10,232.50,249.80
2025-03-04,238.75,230.20,247.40

q10 and q90 are optional: with them you also get the 80% interval's coverage and score. Add q20 to q80 as well and CRPS is scored too.

You need at least {{ min_origins }} forecasts whose target date has passed; later ones are left out. The prices have to go back {{ trend_days }} trading days before your first forecast, and Backcast loads five years of them, so start within about the last four years. The file can be up to {{ max_upload|intcomma }} bytes.

Backcast checks the dates but can't tell whether a forecast used prices from after its date. Nothing you upload is saved: the results are on this page only, so there's no link to share.

{% endblock %}