Надійна оцінка середнього значення з ефективністю оновлення O (1)


9

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

Звичайне значення має таку властивість, що її можна ефективно оновлювати, але не є надійною для людей, які переживають люди. Типові надійні оцінювачі середнього рівня, як міжквартильна середня та обрізана середня, не можуть бути ефективно оновлені (оскільки вони вимагають ведення відсортованого списку).

Буду вдячний за будь-які пропозиції щодо надійної статистики, яку можна ефективно розрахувати / оновити.


Чому б просто не використати початковий сегмент даних - наприклад, перші 100 чи перші 1000 чи що завгодно - для встановлення «огорожі» для відстеження людей, що залишилися? Вам не доведеться оновлювати їх знову, тому не потрібно підтримувати додаткові структури даних.
whuber

@whuber Я не можу гарантувати, що початковий зразок буде представляти решту даних. Наприклад, порядок, у якому мені надаються дані, не є випадковим (уявіть собі сценарій, коли мені спочатку даються більш високі значення, а потім нижчі значення).
Побіт

1
Це важливе зауваження. Це означає, що вам потрібно подбати більше, ніж зазвичай, тому що спочатку ви отримаєте "надійну" оцінку середнього високого рівня людей. Продовжуючи оновлювати цю оцінку, ви зможете викинути всі нижчі значення. Таким чином, вам знадобиться структура даних, в якій ключові частини всього розподілу даних записуються та періодично оновлюються. Перегляньте наші теми з ключовими словами "в Інтернеті" та "Квантиль" щодо ідей. Два таких перспективних - на сайті stats.stackexchange.com/questions/3372 та stats.stackexchange.com/q/3377 .
whuber

Я б запропонував щедроту, але мені не вистачає репутації
Jason S

1
Щоб продовжити ідею в першому коментарі @ whuber, ви можете зберегти рівномірно вибіркове випадкове підмножина розміром або з усіх даних, що були переглянуті до цього часу. Цей набір та пов’язані з ним "огорожі" можна оновити за O (1) час. 1001000
Іннуо

Відповіді:


4

Це рішення реалізує пропозицію, зроблену @Innuo у коментарі до питання:

Ви можете підтримувати рівномірну вибірку випадкової підмножини розміром 100 або 1000 з усіх даних, що бачились дотепер. Цей набір та пов’язані з ним "огорожі" можна оновити за час.O(1)

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


Цей алгоритм приймає як вхідний потік даних x(t), t=1,2,, розмір вибірки m, і виводить потік зразків s(t) кожен з яких представляє населення X(t)=(x(1),x(2),,x(t)). Зокрема, для1it, s(i) являє собою просту випадкову вибірку розміру m з X(t) (без заміни).

Щоб це сталося, достатньо кожного mпідмножина елементів {1,2,,t} мають рівні шанси бути індексами x в s(t). Це передбачає шанс, щоx(i), 1i<t, є в s(t) дорівнює m/t за умови tm.

На початку ми просто збираємо потік до тих пір, поки mелементи збережені. На той момент існує лише одна можлива вибірка, тому умова ймовірності задовольняється тривіально.

Алгоритм переймає, коли t=m+1. Індуктивно припустимо, щоs(t) є простою випадковою вибіркою X(t) для t>m. Тимчасово встановленийs(t+1)=s(t). ДозволяєU(t+1) бути рівномірною випадковою змінною (незалежно від будь-яких попередніх змінних, використаних для побудови s(t)). ЯкщоU(t+1)m/(t+1) потім замініть випадковим чином обраний елемент s від x(t+1). Ось і вся процедура!

Ясно x(t+1) має ймовірність m/(t+1) перебування в s(t+1). Більше того, за індукційною гіпотезою,x(i) мала ймовірність m/t перебування в s(t) коли it. З вірогідністюm/(t+1)×1/m = 1/(t+1) його буде видалено з s(t+1), звідки ймовірність залишитися дорівнює

mt(11t+1)=mt+1,

саме так, як потрібно. Тоді за індукцією всі ймовірності включенняx(i) в s(t)є правильними, і зрозуміло, що немає особливої ​​кореляції серед цих включень. Це доводить, що алгоритм є правильним.

Ефективність алгоритму така O(1) тому що на кожному етапі обчислюється щонайбільше два випадкових числа і не більше одного елемента масиву mзначення замінюються. Вимога зберігання єO(m).

Структура даних для цього алгоритму складається з вибірки s разом з індексом t населення X(t)що це зразки. Спочатку беремоs=X(m) і продовжити алгоритм для t=m+1,m+2,. Ось Rреалізація для оновлення(s,t) зі значенням x виробляти (s,t+1). (Аргумент nграє рольtі sample.sizeєm. Індексt буде підтримуватися абонентом.)

update <- function(s, x, n, sample.size) {
  if (length(s) < sample.size) {
    s <- c(s, x)
  } else if (runif(1) <= sample.size / n) {
    i <- sample.int(length(s), 1)
    s[i] <- x
  }
  return (s)
}

Щоб проілюструвати і протестувати це, я буду використовувати звичайний (ненадійний) оцінювач середнього значення і порівняти середнє значення, оцінене з s(t) до фактичного середнього значення X(t)(сукупний набір даних, що бачать на кожному кроці). Я вибрав дещо складний вхідний потік, який змінюється досить плавно, але періодично зазнає різких стрибків. Розмір вибіркиm=50 є досить малим, що дозволяє нам бачити коливання вибірки на цих ділянках.

n <- 10^3
x <- sapply(1:(7*n), function(t) cos(pi*t/n) + 2*floor((1+t)/n))
n.sample <- 50
s <- x[1:(n.sample-1)]
online <- sapply(n.sample:length(x), function(i) {
  s <<- update(s, x[i], i, n.sample)
  summary(s)})
actual <- sapply(n.sample:length(x), function(i) summary(x[1:i]))

На цьому етапі onlineє послідовність середніх оцінок, що виробляються підтриманням цієї робочої вибірки50Значення while actual- це послідовність середніх оцінок, отриманих з усіх даних, наявних у кожен момент. Діаграма показує дані (сірим кольором), actual(чорним кольором) та два незалежні програми цієї процедури вибірки (кольорами). Угода знаходиться в межах очікуваної помилки вибірки:

plot(x, pch=".", col="Gray")
lines(1:dim(actual)[2], actual["Mean", ])
lines(1:dim(online)[2], online["Mean", ], col="Red")

Малюнок


Для надійних оцінювачів середнього рівня відвідайте наш сайт та пов'язані з ними терміни. Серед можливостей, які варто врахувати, - це засоби, що спонсоруються, та М-оцінки.


мені незрозуміло, як виглядає поріг відхилення в такому підході (наприклад, поріг, за яким спостереження відкидаються як непрацездатні). Чи можете ви додати їх до сюжету?
user603

@ user603 "Поріг відхилення" або будь-який надійний метод, що використовується для оцінки середнього значення, не має значення: вибирайте будь-який метод, який ви хочете оцінити середнє. (Не всі надійні методи працюють шляхом встановлення порогів та відхилення даних, BTW.) Це було б зроблено в коді моєї відповіді, замінивши summaryна надійний варіант.
whuber

Щось мені не зрозуміло в цьому прикладі. Чи є сірі дані "хорошими" чи "пережилими". Якщо попереднє, здається, що пристосування є упередженим (воно повинно відповідати їм краще, оскільки ситуація буде схожа на тенденцію до зниження @ Bitwise, яку ми хотіли б дотримуватися). Якщо сірі дані при більш високих значеннях індексу не відрізняються, то здається, що відповідність упереджена вгору. Яку ціль ви хочете помістити тут? Нинішня придатність здається розірваною між цими двома сценаріями.
Deathkill14

@Death Як пояснено в тексті, що передує малюнку, сірі дані - це вихідний потік даних. Його середнє біг - чорна крива. Кольорові криві базуються на алгоритмі. Вертикальні відхилення кольорових кривих відносно чорної кривої зумовлені випадковістю вибірки. Очікувана величина відхилення при будь-якому індексі пропорційна стандартному відхиленню значень сірого кольору, що передує цьому індексу, і обернено пропорційна квадратному кореню розміру вибірки (прийнято як 50 у цьому прикладі).
whuber

3

Ви можете подумати, як пов’язати свою проблему з рекурсивною схемою управління. Така контрольна діаграма оцінить, чи є нове спостереження під контролем. Якщо це так, це спостереження включається в нову оцінку середнього та відхилення (необхідне для визначення меж контролю).

Деякі відомості про надійні, рекурсивні, універсарні діаграми управління можна знайти тут . Один з класичних текстів щодо контролю якості та контрольних діаграм, як видається, доступний в Інтернеті тут .

Інтуїтивно, використовуючи середнє значення, μt1 і дисперсія σt12 як вхідні дані, ви можете визначити, чи нове спостереження вчасно tявляє собою грубість за низкою підходів. Можна було б заявитиxt зовнішній вигляд, якщо він знаходиться поза певною кількістю стандартних відхилень μt1 (дано σt12), але це може виникнути проблеми, якщо дані не відповідають певним припущенням про розповсюдження. Якщо ви хочете піти цією дорогою, то, припустимо, ви визначили, якщо нова точка не є стороннім, і хотіли б включити її у свою середню оцінку без особливої ​​швидкості забуття. Тоді ви не можете зробити краще, ніж:

μt=t1tμt1+1txt

Аналогічно, вам доведеться рекурсивно оновлювати дисперсію:

σt2=t1tσt12+1t1(xtμt)2

Однак ви можете спробувати ще кілька звичайних контрольних діаграм. Інші контрольні діаграми, які є більш надійними для розповсюдження даних і все ще можуть впоратися з нестаціонарністю (як-отμякщо ваш процес повільно йде вище) рекомендуються EWMA або CUSUM (докладніші відомості про графіки та їх межі управління див. у підручнику, пов'язаному вище). Ці методи, як правило, є менш обчислювальними, ніж надійні, оскільки вони мають перевагу просто порівнювати єдине нове спостереження з інформацією, отриманою з інших спостережень. Ви можете уточнити свої оцінки довгострокового процесуμ і σ2 використовуються в контрольних обчисленнях обмежень цих методів за формулами оновлення, наведеними вище, якщо вам подобається.

Що стосується такої діаграми, як EWMA, яка забуває про старі спостереження та надає більше ваги новим, якщо ви вважаєте, що ваші дані є нерухомими (тобто параметри генеруючого розподілу не змінюються), то не потрібно забувати старі спостереження експоненціально. Ви можете встановити фактор забування відповідно. Однак якщо ви вважаєте, що це нестаціонарність, вам потрібно буде вибрати хороше значення для фактору забуття (ще раз перегляньте підручник, як це зробити).

Я також повинен зазначити, що перед тим, як розпочати моніторинг та додавати нові спостереження в Інтернеті, вам потрібно буде отримати оцінки μ0 і σ02(початкові значення параметрів на основі навчального набору даних), на які не впливає інше. Якщо ви підозрюєте, що у ваших даних про навчання є люди, що випадають, ви можете заплатити одноразову вартість використання надійного методу їх оцінки.

Я думаю, що підхід у цих напрямках призведе до найшвидшого оновлення вашої проблеми.


1
Використання контрольних діаграм - цікава ідея. Здається, що може бути важко подолати виклики, викладені в коментарях до цього питання. У нестаціонарному випадку, якщо ви "забуваєте" більш старі значення, можливо, оцінки можуть бути дуже упередженими. Наприклад, як виконувались ваші пропозиції у потоці даних, наданому користувачемxt=cos(πt/106)+2t/106? (Це падає дуже поступово, раптом стрибає і піднімається дуже поступово, раптово стрибає знову і т.
Д.

@Bitwise каже, що початковий зразок може не представляти майбутніх даних. Без інформації про те, наскільки різними будуть інші дані, ви по суті нічого не можете зробити. Однак, якщо вихідні дані містять інформацію про нестаціонарність процесу (скажімо, тенденцію до зменшення), то в обліку можна дозволити нові спостереження за тим, що ми очікуємо, що вони будуть нижчими. Однак потрібна деяка інформація про нестаціонарність. Ви пропонуєте один патологічний тип нестаціонарності. Деякі методи, наприклад, EWMA, є оптимальними для конкретного процесу, але, як правило, досить хороші. Ваш процес вимагає більш спеціальної роботи.
Deathkill14

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

Власне, я погоджуюся, що не слід відкидати проблему, з якою стикається. Не могли б ви зв’язати мене з методами @Innuo, які обговорювали (я не можу їх знайти в цій публікації - чи були вони у наведених вище посиланнях, і я їх пропустив?). Дякую.
Deathkill14

@Innuo опублікував короткий коментар на сайті stats.stackexchange.com/questions/56494/…, припустивши, що єдиний випадковий зразок усіх раніше спостережуваних даних може підтримуватися вO(1)час. Хоча не зовсім зрозуміло, як саме це було б зроблено, з'єднання його з надійним оцінювачем середнього було б універсальним рішенням, застосовним до будь-якого потоку даних.
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.