Try   HackMD

Definitions

There are miners

mM and questions
qQ
, each with a respective cutoff time
tq
. For any pair
(m,q)
, a miner
m
submits a time series of forecasts
(pm,q,t)ttq,

with
tTq
, a list of time points (depending on the question) preceding the cutoff
tq
. If a miner does not submit a forecast, we denote their submission by
p
.

Let

S(pm,q,t,oq) be the score of a given prediction when the question resolves to
oq{0,1}
(with
1
indicating that the underlying event occurred and
0
otherwise).

Peer Score

For a set of

n miners, the peer score on a question
q
at time step
t
takes the following form:
S(pm,q,t,oq)=1njm(log(pm,q,t)log(pj,q,t))=log(pm,q,t)log(GM(pj,q,t)jm),

where
GM(pj,q,t)jm
denotes the geometric mean of the predictions of all miners except
m
at time step
t
.

In order to prevent instabilities, we clip the miners' predictions. Indeed, otherwise one confident and wrong prediction—e.g., submitting

1 when the question resolves to
0
—would result in a score of
, effectively eliminating the miner. We clip the predictions to the interval
(0.1,0.99)
.

To incentivize full coverage, we adopt the following rule:

S(p,oq)=worst possible score on a given question.

Weights

We associate a weight

wq,t to each submission, depending on its time
tTq
. We choose exponentially decreasing weights based on the intuition that predicting gets exponentially harder as one goes back in time. Denote
Tq=[Aq,Bq].

We divide the time segment

[Aq,Bq] into
n
intervals defined by the endpoints
t0,t1,,tn
, where
t0=Aq
and
tn=Bq
. For each interval
[tj,tj+1]
(currently of equal length, e.g., 4 hours), we set the weight
wq,tj=ennj+1,

with
j
increasing from
0
to
n1
.

Averaging per Window

Each

pm,q,t is in fact the arithmetic average of the miner's predictions within a given time window
[tj,tj+1]
. That is,
pj=t[tj,tj+1]ptt[tj,tj+1]1.

Weighted Average

Given our weights

wq,t and the miner's time series
(pm,q,t)
, we compute the following time-weighted average for each miner:
Sm,q=twq,tS(pm,q,t,oq)twq,t.

Moving Average and Extremisation

We build a moving average

Lm,q=qQNSm,q,
where the sum is taken over the last
N
questions (with
N
chosen as the average number of questions a miner would receive during the immunity period).

We then extremise this moving average to reward better predictors and to filter out miners who, on average, do not contribute any signal:

Rm,q=max(Lm,q,0)2.

The weight of the miner is then given by the normalised value:

Wm,q=Rm,qmmRm,q.

New Miners

When a miner registers at time

t on the subnet, they will submit predictions for questions
q
that opened at a time
tq,0<t
. In such cases, we assign the new miner a score of
0
, which corresponds to the baseline (i.e., when a miner is neither contributing new information compared to the aggregate nor being penalized). We also assign them a score of
0
for questions in the moving average that resolved before the miner registered.


Definitions

There are miners

mM and questions
qQ
with respective cutoff times
tq
. For any
(m,q)
a miner
m
submits a time series
(pm,q,t)ttq
of forecasts ranging over
tTq
a list of time points depending on the question and preceding the cutoff
tq
. If a miner does not submit a forecast we denote his submission by
p
.

Let

S(pm,q,t,oq) be the score of a given prediction if the question resolved to
oE{0,1}
with value
1
if the underlying event occurred and
0
otherwise.

Peer score

For a set of

n miners the peer score on a question
q
and time step
t
takes the following form:

S(pm,q,t,oq)=1njm(log(pm,q,t)log(pj,q,t))=log(pm,q,t)log(GM(pj,q,t)jm)

where

GM(pj,q,t)jm) is the geometric mean of the predictions of all the miners except
m
for the time step
t
.

In order to prevent instabilities we clip the miners predictions. Indeed otherwise one confident and wrong prediction, e.g sending

1 while the question resolves to
0
, would result in a score of
de facto eliminating the miner. We clip the predictions to
(0.1,0.99)
.

In order to incentivise full coverage we have the following rule:

S(p,oq)=worst possible score on a given question

Weights

We associate a weight

wq,t to each depending on the time of the submission
tTq
.

We choose exponentially decreasing weights along the intuition that predicting gets exponentially harder as one goes back in time. Denote

Tq=[Aq,Bq].

We divide the time segment

[Aq,Bq] into
n
intervals
[tj,tj+1]
of equal length (currently 4 hours). Then for the interval
[tj,tj+1]
we set the weight
wq,tj=ennj+1
where
t0=Aq
and
tn=Bq
and where
j
increases from
0
to
n1
.

Averaging per window

Each

pm,q,t is in fact the arithmetic average of the miner's predictions in a given time window
[tj,tj+1]
i.e

pj=t[tj,tj+1]ptt[tj,tj+1]1

Weighted average

Given our weights (

wq,t) and the miner's time series
(pm,q,t)
we compute the following time weighted average for each miner:

Sm,q=twq,tS(pm,q,t,oq)twq,t

Moving average and extremisation

We build a moving average

Lm,q=qSm,q where
q
ranges over the last
N
questions. The parameter
N
is chosen to be the average number of questions a miner would get during the immunity period.

We finally extremise this moving average to reward more better predictors and filter our miners which on average do not contribute any signal.

Rm,q=max(Lm,q,0)2

The weight of the miner is then the normalised value:

Wm,q=Rm,qmmRm,q

New miners

When a miner registers at a time

t on the subnet they will send predictions for questions
q
that already opened at a time
tq,0<t
. When this happens we give the new miner a score of
0
which corresponds to the baseline, i.e when a miner is neither bringing new information compared to the aggregate nor is penalized. We will also give them a score of
0
on the questions in the moving average which resolved before the miner registered.