Алгоритм динамічного моніторингу квантів


24

Я хочу оцінити кількість деяких даних. Дані настільки величезні, що їх неможливо розмістити в пам'яті. Дані не є статичними, нові дані продовжують надходити. Хтось знає який-небудь алгоритм для моніторингу квантових даних, що спостерігалися до цього часу, з дуже обмеженою пам'яттю та обчисленнями? Я вважаю алгоритм P2 корисним, але він не дуже добре працює для моїх даних, які надзвичайно важко розподілені.


Деякі ідеї (у контексті оцінювання медіанів) див. У розділі stats.stackexchange.com/q/346/919 .
whuber

3
Це питання crossposted на math.SE.
кардинал

Відповіді:


16

Алгоритм P2 - приємна знахідка. Це працює, роблячи кілька оцінок квантила, періодично оновлюючи їх, і використовуючи квадратичну (не лінійну, не кубічну) інтерполяцію для оцінки квантиля. Автори стверджують, що квадратична інтерполяція працює краще в хвостах, ніж лінійна інтерполяція, і кубічна буде надто метушливою і складною.

Ви не констатуєте, як саме цей підхід не підходить для ваших "важкохвостих" даних, але легко здогадатися: оцінки екстремальних квантилів для важкохвостих розподілів будуть нестабільними, поки не буде зібрано велику кількість даних. Але це буде проблемою (в меншій мірі) навіть якщо ви зберігали б усі дані, тому не чекайте чудес!

У будь-якому випадку, чому б не встановити допоміжні маркери - давайте назвемо їх і x 6 - за якими ви впевнені, що квантил буде лежати, і зберігати всі дані, що лежать між x 0 і x 6 ? Коли ваш буфер заповнюється, вам доведеться оновлювати ці маркери, завжди зберігаючи x 0x 6 . Простий алгоритм зробити це можна з комбінації (a) поточної оцінки P2 кількісного числа і (b) збережених підрахунків кількості даних менше x 0 та кількості даних, що перевищує x 6x0x6x0x6x0x6x0x6. Таким чином, ви можете з високою визначеністю оцінити кількісний показник так само добре, як якщо б у вас був весь доступний набір даних завжди, але вам потрібен лише порівняно невеликий буфер.

Зокрема, я пропоную структуру даних для підтримки часткової інформації про послідовність n значень даних x 1 , x 2 , , x n . Тут y - пов'язаний список(k,y,n)nx1,x2,,xny

y=(x[k+1](n)x[k+2](n)x[k+m](n)).

У цьому позначенні позначає i- е найменше з прочитаних досі значень n x . m - постійна, розмір буфера y .x[i](n)ithn xmy

Алгоритм починається з заповнення першими зібраними значеннями m і розміщення їх у відсортованому порядку, найменший до найбільший. Нехай q - квантил, який слід оцінити; наприклад, q = 0,99. Після читання x n + 1 можливі три дії:ymqqxn+1

  • Якщо , приріст k .xn+1<x[k+1](n)k

  • Якщо , нічого не робіть.xn+1>x[k+m](n)

  • В іншому випадку вставте в y .xn+1y

У будь-якому випадку приріст .n

У вставках процедура ставить в у в відсортованому порядку , і потім усуває одне зі значень крайніх в у :xn+1yy

  • Якщо , то видаліть x ( n ) [ k + 1 ] з y та приріст k ;k+m/2<nqx[k+1](n)yk

  • В іншому випадку видаліть з y .x[k+m](n)y

За умови, що достатньо велика, ця процедура з високою ймовірністю скопить справжній квантил розподілу. На будь-якому етапі n його можна оцінити звичайним способом через x ( n ) [ q n] і x ( n ) [ q n] , що, ймовірно, лежить в y . (Я вважаю, що m має масштабувати лише як квадратний корінь максимальної кількості даних ( Nmnx[qn](n)x[qn](n)ymN), але я не провів жорсткого аналізу, щоб довести це.) У будь-якому випадку алгоритм виявить, чи вдався він (порівнявши та ( k + m ) / n до q ).k/n(k+m)/nq

Тестування зі значенням до 100 000, використовуючи іq=.5(найскладніший випадок) вказує, що цей алгоритм має 99,5% успішності в отриманні правильного значення x ( n ) [ q n] . Для потоку зN=10 12 значень, що потребував би буфера усього два мільйони (але кращий вибір - три чи чотири мільйони). Для використання відсортованого подвійно пов'язаного списку для буфера потрібноO(log( √)m=2Nq=.5x[qn](n)N=1012=O(log(N))зусилля під час виявлення та видалення max або min єопераціямиO(1). Відносно дороге вставлення зазвичай потрібно робити лишеO(O(log(N))O(log(N))O(1)разів. Таким чином, обчислювальні витрати цього алгоритму становлятьO(N+O(N)у часі таO(O(N+Nlog(N))=O(N)на зберігання.O(N)


Це розширена робота алгоритму P2. [посилання] sim.sagepub.com/content/49/4/159.abrief . Зберігання все ще занадто багато для мого додатка, який працює на невеликих датчиках із загальною кількістю 10К ОЗУ. Я можу споживати кілька сотень байт не більше ніж для кількісної оцінки.
sinoTrinity

@whuber Насправді я реалізую розширений P2 і тестую його за допомогою згенерованих зразків з різних розподілів, таких як рівномірний та експоненційний, де він чудово працює. Але коли я застосовую їх до даних моєї програми, розподіл якої невідомий, іноді вона не конвергується та дає відносну похибку (abs (оцінка - фактична) / фактична) до 300%.
sinoTrinity

2
@sino Якість алгоритму порівняно з використанням усіх даних не повинно залежати від важкості хвостів. Більш справедливим способом вимірювання помилок є такий: нехай - емпіричний cdf. Для оцінки д про д процентиля, яка різниця між F ( д ) і F ( д ) ? Якщо це на порядку 1 / n, ви робите жахливо добре. Іншими словами, лише який відсоток повертає алгоритм P2 для ваших даних? Fq^qF(q^)F(q)1/n
whuber

Ти правий. Я просто виміряв F (qˆ) і F (q) для випадку, про який я згадав, з відносною помилкою до 300%. Для q 0,7, qˆ майже 0,7, що призводить до незначної помилки. Однак для q 0,9 здається, що qˆ становить близько 0,95. Я думаю, тому у мене величезна помилка до 300%. Будь-яка ідея, чому це 0,95, а не 0,9? BTW, чи можу я розмістити тут рисунок, і як я можу розмістити математичну формулу, як ви?
sinoTrinity

2
@whuber Я впевнений, що моя реалізація відповідає розширеному P2. 0,9 все ще переходить до 0,95 або навіть більше, коли я одночасно оцінюю 0,8, 0,85, 0,9, 0,95 квантів. Однак 0,9 дуже близький до 0,9, якщо одночасно відслідковуються 0,8, 0,85, 0,9, 0,95 і 1,0 квантових.
sinoTrinity

5

Я думаю , що пропозиція Уубера чудова, і я спробував би це спершу. Однак якщо ви виявите, що ви дійсно не можете розмістити зберігання або це не виходить з іншої причини, ось ідея для іншого узагальнення Р2. Це не так детально, як те, що пропонує Уубер - більше схоже на дослідницьку ідею, а не як рішення.O(N)

0p/2p(1+p)/21

250p/12p11/12pp+(1p)/12p+11(1p)/1210pp and 1), or even using 22 Chebyshev nodes of the form p/2(1+cos(2i1)π22) and p+(1p)/2(1+cos(2i1)π22). If p is close to 0 or 1, you could try putting fewer points on the side where there is less probability mass and more on the other side.

If you decide to pursue this, I (and possibly others on this site) would be interested in knowing if it works...


+1 I think this is a great idea given the OP's constraints. All one can hope for is an approximation, so the trick is to pick bins that have a high likelihood of being narrow and containing the desired quantile.
whuber



2

I'd look at quantile regression. You can use it to determine a parametric estimate of whichever quantiles you want to look at. It make no assumption regarding normality, so it handles heteroskedasticity pretty well and can be used one a rolling window basis. It's basically an L1-Norm penalized regression, so it's not too numerically intensive and there's a pretty full featured R, SAS, and SPSS packages plus a few matlab implementations out there. Here's the main and the R package wikis for more info.

Edited:

Check out the math stack exchange crosslink: Someone sited a couple of papers that essentially lay out the very simple idea of just using a rolling window of order statistics to estimate quantiles. Literally all you have to do is sort the values from smallest to largest, select which quantile you want, and select the highest value within that quantile. You can obviously give more weight to the most recent observations if you believe they are more representative of actual current conditions. This will probably give rough estimates, but it's fairly simple to do and you don't have to go through the motions of quantitative heavy lifting. Just a thought.


1

It is possible to estimate (and track) quantiles on an on-line basis (the same applies to the parameters of a quantile regression). In essence, this boils down to stochastic gradient descent on the check-loss function which defines quantile-regression (quantiles being represented by a model containing only an intercept), e.g. updating the unknown parameters as and when observations arrive.

See the Bell Labs paper "Incremental Quantile Estimation for Massive Tracking" ( ftp://ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/kdd/p516-chen.pdf)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.