Масштабная / параметрическая весовая функция для анализа временных рядов - PullRequest
1 голос
/ 22 июня 2019

У меня есть данные временных рядов, и я хотел бы взвесить свои данные, чтобы недавние наблюдения были взвешены выше, чем более старые наблюдения.Поэтому я ищу параметрическую весовую функцию, которая удовлетворяет нескольким свойствам.Это должно выглядеть следующим образом:

взвешивание (время, minTime, maxTime, minWeight, наклон) =?

, при этом

  • время , очевидно, является временем наблюдения веса и должно быть между minTime и maxTime (время> = minTime, время <= maxTime), </li>
  • minTime - самое старое время наблюдения,
  • maxTime - самое новое время наблюдения,
  • minWeight - минимальный вес для возврата (а такжеперехват с осью веса; интервал: [0,1]),
  • Наклон регулирует форму кривой.

Выход: Выходные данные должны быть в интервале [minWeight, 1.0].

image">

У кого-нибудь есть идея, как может выглядеть эта весовая функция,или какие-то подсказки или примеры кода / псевдокод?


Некоторые функции, на которые я смотрел:

  • Функции root или power, такие как

f (x) = x ^ (н / м) , если n

f (x) = x ^ (н / м) , если n = m - линейная функция

f (x) = x ^ (n / m) , если n> m - степенная функция

enter image description here

изменение масштаба (время, minTime, maxTime) = (время - minTime) / (maxTime - minTime)

Эта весовая функция обеспечивает вес в интервале [0, 1].Но форма кривой всегда линейна (и не может быть скорректирована), а минимальное значение всегда равно 0 (я также хотел бы отрегулировать это).

Я думаю, что я слишком глуп, чтобы собрать все части вместе.Может кто-нибудь помочь?

1 Ответ

1 голос
/ 23 июня 2019

Проблема может быть упрощена путем введения новых осей t' и w', как показано здесь

enter image description here

С этими координатами уравненияпросты:

w'^2 = t'       - high-score
w' = t'         - normal-score
w' = t'^2       - low-score

так что осталось только заменить w' на: (w - w0)/(1 - w0) и t' на: (t - t0)/(t1 - t0), чтобы получить:

(w - w0)^2/(1 - w0)^2 = (t - t0)/(t1 - t0)      - high-score
(w - w0)/(1 - w0) = (t - t0)/(t1 - t0)          - normal-score
(w - w0)/(1 - w0) = (t - t0)^2 / (t1 - t0)^2    - low-score

Теперь мыприходится решать за w:

w = w0 + (1 - w0)sqrt((t - t0)/(t1 - t0))       - high-slope
w = w0 + (1 - w0)(t - t0)/(t1 - t0)             - normal-slope
w = w0 + (1 - w0)(t - t0)^2 / (t1 - t0)^2       - low-slope

Тот же метод можно использовать, если вы выбираете другие функции вместо sqrt() и ^2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...