O (1) 업데이트 효율로 강력한 평균 추정


9

특정 속성을 가진 평균의 강력한 추정을 찾고 있습니다. 이 통계를 계산하려는 요소 세트가 있습니다. 그런 다음 한 번에 하나씩 새 요소를 추가하고 각 추가 요소마다 통계 (온라인 알고리즘이라고도 함)를 다시 계산하고 싶습니다. 이 업데이트 계산이 빠르기를 원합니다. 바람직하게는 O (1), 즉 목록의 크기에 의존하지 않습니다.

일반적인 평균에는이 속성이있어 효율적으로 업데이트 할 수 있지만 특이 치에는 강하지 않습니다. 사 분위 간 평균 및 트리밍 평균과 같은 평균의 강력한 추정량은 정렬 된 목록을 유지해야하므로 효율적으로 업데이트 할 수 없습니다.

효율적으로 계산 / 업데이트 할 수있는 강력한 통계에 대한 제안을 부탁드립니다.


왜 아웃 라이어를 선별하기 위해 "울타리"를 세우기 위해 처음 100 또는 첫 1000과 같은 데이터의 초기 세그먼트를 사용하지 않겠습니까? 다시 업데이트 할 필요가 없으므로 추가 데이터 구조를 유지 관리 할 필요가 없습니다.
whuber

@ whuber 초기 샘플이 나머지 데이터를 나타낼 것이라고 보장 할 수 없습니다. 예를 들어, 데이터가 주어진 순서는 무작위가 아닙니다 (먼저 높은 값이 주어진 다음 더 낮은 값이 주어진 시나리오를 상상해보십시오).
Bitwise

1
그것은 중요한 관찰입니다. 처음에는 평균 이상치에 대한 "견고한"추정치를 얻을 수 있기 때문에 평소보다 더 많은주의를 기울여야한다는 것을 의미합니다. 추정값을 계속 업데이트하면 더 낮은 값을 모두 버릴 수 있습니다. 따라서 전체 데이터 배포의 주요 부분을 기록하고 정기적으로 업데이트하는 데이터 구조가 필요합니다. 아이디어를 얻으려면 키워드 "online"및 "quantile"로 스레드를 확인하십시오. 그러한 유망한 두 가지는 stats.stackexchange.com/questions/3372stats.stackexchange.com/q/3377에 있습니다.
whuber

현상금을 제공하지만 평판이 충분하지 않습니다
Jason S

1
@ whuber의 첫 번째 의견에서 아이디어를 계속하기 위해 지금까지 본 모든 데이터에서 크기가 또는 인 균일하게 샘플링 된 임의의 하위 집합을 유지할 수 있습니다 . 이 세트와 관련 "울타리"는 O (1) 시간에 업데이트 할 수 있습니다. 1001000
Innuo

답변:


4

이 솔루션은 질문에 대한 의견으로 @Innuo의 제안을 구현합니다.

지금까지 본 모든 데이터에서 크기가 100 또는 1000 인 균일하게 샘플링 된 임의의 하위 집합을 유지할 수 있습니다. 이 세트와 관련 "울타리"는 시간에 업데이트 할 수 있습니다 .O(1)

이 부분 집합을 유지하는 방법을 알고 나면 그러한 표본에서 모집단의 평균을 추정하기 위해 원하는 방법을 선택할 수 있습니다 . 이것은 표준 통계 샘플링 공식을 사용하여 예측할 수있는 정확도 내에서 모든 입력 스트림 과 작동하는 가정을 전혀 사용하지 않는 보편적 인 방법 입니다. (정확도는 표본 크기의 제곱근에 반비례합니다.)


이 알고리즘은 입력으로서 데이터 스트림 수락 샘플 사이즈 하고, 샘플들의 스트림을 출력하는 있는 각 인구 나타낸다 . 구체적으로 , 는 에서 크기가 간단한 랜덤 표본입니다 (대체 없음).x(t), t=1,2,,ms(t)X(t)=(x(1),x(2),,x(t))1its(i)mX(t)

이를 위해서는 의 모든 요소 서브 세트가 에서 의 인덱스가 될 가능성이 동일해야 합니다. 이 가능성을 의미하는 에 와 동일 제공 .m{1,2,,t}xs(t)x(i), 1i<t,s(t)m/ttm

처음에는 요소가 저장 될 때까지 스트림을 수집합니다 . 이 시점에서 가능한 샘플은 하나뿐이므로 확률 조건이 거의 충족됩니다.m

때 알고리즘이 대신 합니다. 유도 적으로 는 대한 의 단순한 랜덤 표본 이라고 가정합니다 . 임시적으로 . 하자 (구성하는 데 사용되는 이전의 독립 변수 균일 랜덤 변수 일 수 ). 경우 다음에 대체 임의로 선택된 요소 에 의해 . 그것은 전체 절차입니다!t=m+1s(t)X(t)t>ms(t+1)=s(t)U(t+1)s(t)U(t+1)m/(t+1)sx(t+1)

분명히 확률 갖는다 로되는 . 또한, 유도 가설에 의해, 는 때 있을 확률 를 가졌다 . 확률 = 으로 남아있을 확률은 에서 제거됩니다.x(t+1)m/(t+1)s(t+1)x(i)m/ts(t)itm/(t+1)×1/m1/(t+1)s(t+1)

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

정확히 필요한만큼. 유도함으로써, 에서 의 모든 포함 확률 은 정확하며 이러한 포함 사이에 특별한 상관 관계가 없음이 분명합니다. 알고리즘이 올바른지 확인합니다.x(i)s(t)

알고리즘 효율은 입니다. 각 단계에서 최대 2 개의 임의의 숫자가 계산되고 값 배열의 최대 하나의 요소 가 대체되기 때문입니다. 저장 요구 사항은 입니다.O(1)mO(m)

이 알고리즘의 데이터 구조는 샘플링 하는 모집단 의 인덱스 와 함께 샘플 로 구성됩니다 . 처음에는 을 취하고 대한 알고리즘을 진행합니다 다음은 을 생성하기 위해 값으로 를 업데이트 하는 구현 입니다. (인수 의 역할을 담당 하고 있다 . 인덱스 호출자에 의해 유지된다.)stX(t)s=X(m)t=m+1,m+2,.R(s,t)x(s,t+1)ntsample.sizemt

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에서이 러닝 샘플을 값 으로 유지하여 생성 된 평균 추정치 시퀀스가되는 반면 각 순간에 사용 가능한 모든 데이터 에서 생성 된 평균 추정치 시퀀스가 있습니다. 플롯은 데이터 (회색), (검정색) 및이 샘플링 절차의 두 가지 독립적 인 응용 프로그램 (색상)을 보여줍니다. 계약이 예상되는 샘플링 오류 내에 있습니다.50actualactual

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

그림


평균의 강력한 추정량을 얻으려면 사이트를 검색하십시오. 관련 용어. 고려할만한 가치 중 하나는 Winsorized 평균 및 M 추정기입니다.


이 접근 방식에서 거부 임계 값이 어떻게 나타나는지 명확하지 않습니다 (예 : 관측치가 특이 치로 거부되는 임계 값). 플롯에 추가 할 수 있습니까?
user603

@ user603 "거부 임계 값"또는 평균을 추정하는 데 사용되는 강력한 방법은 관계가 없습니다. 평균을 추정 할 방법을 선택하십시오. (모든 강력한 방법이 임계 값을 세우고 데이터를 거부하여 작동하는 것은 아닙니다. BTW) 이것은 summary강력한 변형 으로 대체 하여 내 대답의 코드에서 수행됩니다 .
whuber

이 예에서는 나에게 분명하지 않습니다. 회색 데이터가 "양호"또는 "이상 값"입니까? 이전의 경우에는 적합치가 하락한 것으로 보입니다 (상황이 우리가 따르고 자하는 @Bitwise의 하락 추세와 유사하기 때문에 더 적합해야 함). 높은 색인 값의 회색 데이터가 특이 치이면 적합도가 위쪽으로 편향되어있는 것 같습니다. 여기에 맞추고 싶은 목표는 무엇입니까? 이 두 시나리오 사이에 현재의 적합성이 없어진 것 같습니다.
Deathkill14

@Death 그림 바로 앞의 텍스트에서 설명한 것처럼 회색 데이터는 원래 데이터 스트림입니다. 그 평균은 검은 색 곡선입니다. 색상 곡선은 알고리즘을 기반으로합니다. 흑색 곡선에 대한 유색 곡선의 수직 편차는 샘플링의 무작위성으로 인한 것입니다. 모든 지수에서 예상되는 편 차량은 해당 지수 이전의 회색 값의 표준 편차에 비례하고 표본 크기의 제곱근에 반비례합니다 (이 예에서는 50으로 간주).
whuber

3

재귀 관리도의 문제와 관련이 있다고 생각할 수도 있습니다. 이러한 관리도는 새로운 관측치가 관리되고 있는지 평가합니다. 그렇다면이 관측치는 평균 및 분산의 새로운 추정치에 포함됩니다 (제어 한계를 결정하는 데 필요함).

강력하고 재귀적인 일 변량 관리도에 대한 배경 지식은 여기에서 확인할 수 있습니다 . 품질 관리 및 관리 차트에 대한 고전적인 텍스트 중 하나는 여기 온라인 에서 볼 수 있습니다 .

직관적으로, 평균 및 분산 을 입력으로 사용하면 시간 에서 새로운 관측치 가 여러 접근 방식으로 특이 치 인지 확인할 수 있습니다 . 가 의 특정 표준 편차를 벗어난 경우 특이 값을 로 선언 하는 것이지만 (데이터 제공 데이터가 그렇지 않으면 문제가 발생할 수 있습니다. 특정 분포 가정을 따르지 않습니다. 이 길을 가고 싶다면, 새로운 점이 특이 치가 아닌지 판단하고 특별한 추격 률없이 평균 추정치에 포함시키고 싶다고 가정하십시오. 그렇다면 당신은 다음보다 더 잘 할 수 없습니다 :μt1σt12txtμ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
whuber

@Bitwise는 초기 샘플이 미래 데이터를 나타내지 않을 수 있다고 말합니다. 나머지 데이터가 얼마나 다른지에 대한 정보가 없으면 본질적으로 아무것도 할 수 없습니다. 그러나 초기 데이터에 공정 비정규 성 (예 : 하향 추세)에 대한 정보가있는 경우, 더 낮은 것으로 예상한다는 사실을 고려하여 새로운 관찰이 허용 될 수 있습니다. 그러나 비정규성에 대한 일부 정보가 필요합니다. 병리학 적 유형의 비정규 성을 제안합니다. EWMA와 같은 일부 방법은 특정 프로세스에 최적이지만 일반적으로 꽤 좋습니다. 프로세스에는 더 많은 사용자 정의 작업이 필요합니다.
Deathkill14

(나는 당신이 처리 할 수없는 "병리학 적"으로 기각하는 매우 수학적 움직임이기 때문에 수학자를 발견합니다. :-). 그러나 @Innuo가 제안한 방법과 같은 방법은 실제로 이러한 병리와 다른 세계, 특히 무작위 추출이 샘플링에 포함될 때 발생할 수있는 모든 것을 막을 수 있습니다.
whuber

사실, 나는 당면한 문제를 일축해서는 안된다는 데 동의합니다. @Innuo가 논의한 방법에 저를 연결시켜 주시겠습니까? (이 게시물에서 찾을 수 없습니다-위에서 제공 한 링크에 있었지만 놓쳤습니까?). 감사합니다.
Deathkill14

@Innuo는 stats.stackexchange.com/questions/56494/에 간단한 의견을 올렸 습니다. 이전에 관찰 된 모든 데이터의 균일 한 무작위 샘플이 시간 내에 유지 될 수 있음을 제안합니다 . 정확히 어떻게 수행되는지는 확실하지 않지만 강력한 평균 추정값과 결합하면 모든 데이터 스트림에 적용 가능한 범용 솔루션이됩니다. O(1)
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.