Я думаю, что вам может подойти Dynami c time warping (dtw). Я использовал его для чего-то подобного. По сути, это позволяет вам оценивать сходство временных рядов.
Вот известные мне python реализации:
Вот достойное объяснение того, как это работает
Вы можете использовать это, чтобы сравнить, насколько входящие временные ряды похожи на данные в вашем красном поле.
Например:
# Event were looking for
event = np.array([10, 100, 50, 60, 50, 70])
# A matching event occurring
event2 = np.array([0, 7, 12, 4, 11, 100, 51, 62, 53, 72])
# A non matching event
non_event = np.array([0, 5, 10, 5, 10, 20, 30, 20, 11, 9])
distance, path = fastdtw(event, event2)
distance2, path2 = fastdtw(event, non_event)
События
В результате будет получен набор индексов, в которых два временных ряда соответствуют наилучшим образом. На этом этапе вы можете оценить, какой метод вы предпочитаете. Я грубо посмотрел на корреляцию значений
def event_corr(event,event2, path):
d = []
for p in path:
d.append((event2[p[1]] * event[p[0]])/event[p[0]]**2)
return np.mean(d)
print("Our event re-occuring is {:0.2f} correlated with our search event.".format(event_corr(event, event2, path)))
print("Our non-event is {:0.2f} correlated with our search event.".format(event_corr(event, non_event, path2)))
Производит:
Our event re-occurring is 0.85 correlated with our search event.
Our non-event is 0.45 correlated with our search event.