Как уменшить количество данных для расчета процентиля?

Допустим есть измерения скорости ветра в 1000 городов за каждую секунду. Задача посчитать 99 процентиль для каждого города за последние 7 дней. Все данные надо хранить в оперативной памяти. Существует ли какой-то качественный алгоритм, чтобы сократить объём данных? Если бы надо было считать среднее, а не процентиль, мы могли бы считать среднее по каждому часу, а потом брать среднее от этих средних, и не было бы ни какой потери точности. Часы которые уже стали старее чем 7 дней мы бы выкидывали из оперативки. С процентилем так не работает. Процентиль от процентиля даёт уже другой результат, искажая в большую сторону.

Chat GPT выдал что есть два метода: R-Block Method и Quantile Replacement Method. Очень мало инфы по этим методам в Google, но как я добился от бота:

R-Block method это разбиение на блоки с экспонциально растущим размером, в каждом блоке считается процентиль, а потом берётся линейная интерполяция, я не понял для чего именно, но в моём случае вся интерполяция сводится к взятию среднего арифметического от этих процентилей в этих блоках.

Это мне не очень подходит, так как экспонциальный размер блока не применим на первый взгляд к этой задаче, а на блоках равного размера, я не почувствовал, что результат близок к правде.

Quantile Replacement Method по объяснению бота, это разбить на блоки, взять среднее по каждому, и от этих средних посчитать процентиль. В ходе эксперимента этот подход показал самый худший результат с сильно уменьшенным результатом.


Ответы (0 шт):