Агрегировать и интерполировать перекрывающиеся данные временных рядов - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь объединить данные счетчиков из двух разных типов измерений. Первый тип меры дает точное значение счетчика в данный день.

| Id | Day | Value |
|----|-----|-------|
|  1 |   1 | 10000 |
|  2 |  15 | 10100 |

Второй тип меры дает относительное значение счетчика за период.

| Id | Period  | Value |
|----|---------|-------|
|  3 | 5 - 27  |   500 |
|  4 | 11 - 21 |   300 |

Так, например, известно, что значение было 10000 в первый день, и оно было увеличено на 500 в течение 5-27 дневного периода. Учитывая это, я пытаюсь объединить и интерполировать два источника, чтобы сгенерировать один временной ряд со значением total для каждого дня:

| Day | Value |
|-----|-------|
| 1   | 10000 |
| 2   | 10010 |
| 3   | 10020 |
...
| 15  | 10100 |
...

Я много читал о временных рядах и обнаружил несколько методов нормализации и интерполяции значений первого типа меры. Тем не менее, я не могу найти методы, чтобы смешать это со вторым типом: относительные и потенциально перекрывающиеся меры за период . Я попробовал несколько ручных техник, но наткнулся на слишком много проблем. Например, я попытался разделить значения диапазона на более мелкие порции для каждого дня (и усреднить перекрывающиеся показатели), но мне не удается согласовать это с другими показателями:

| Day | Measures | Aggregate | Total    |
|-----|----------|-----------|----------|
| 1   | [1]      | 10000     | 10000    |
...
| 5   | [3]      | 21.74     | 10021.74 | // (500 / 23 days) = 21.74
...
| 9   | [3]      | 21.74     | 10108.70 | // Higher than measure of day 15 (10100)!

Возможно ли даже достичь этого результата, учитывая характер измерений? Если да, какие методы можно использовать? Я пытаюсь добиться этого в JavaScript или непосредственно в моей базе данных PostgreSQL, но проблема здесь не связана ни с одним языком.

Спасибо

...