first attempt at implementing the "Unique feature detection in time series" from Yandex

Original presentation (in Russian): http://download.yandex.ru/company/experience/yac2012/lobachev_yac_2012.pdf

Here's a more or less formal description of what the basic version does:

given time series T of size N, it creates N additional time series T'_i of the same size (N)
each T'_i series consists of N-1 zeroes and one 1 at position i, called marker (T'_i[i] = 1)
then it correlates T against each T'_i and returns positions (markers) where the highest correlation coefficients
occurred

A more intuitive explanation:

the algorithm creates a bunch of time series with an "ideal spike" (marker) and "moves" that spike
one position right for each series
like this:
{1,0,0,0,0}
{0,1,0,0,0}
{0,0,1,0,0}
{0,0,0,1,0}
{0,0,0,0,1}

then it correlates each marked series against the original series with an assumption that
if the original series has a spike at this position, then the correlation coefficient will
be close to 1

Detecting drops:

in order to be able to detect both spikes and drops, the original presentation proposes to consider deltas of values
(i.e. T[i] = T[i] - T[i-1])
this way drops can be transformed into spikes

Removing noise:

for noisy time series the original presentation proposes usage of linear filters
(e.g. T[i] = (T[i-1] + T[i] + T[i+1]) / 3)

Detecting wide spikes:

in order to detect wide spikes the original paper proposes usage of wide markers
that is, instead of creating a marker at one position, it's proposed to create markers that span across several points
marker with width=3:
{0,0.5,1,0.5,0}
the width of "ideal spikes" is advised to be the same as the filter's width (it's 3 in both examples)
a simple usage example