O(1)更新効率によるロバストな平均推定


9

特定の特性を持つ平均のロバストな推定を探しています。この統計を計算する要素のセットがあります。次に、新しい要素を1つずつ追加し、要素を追加するたびに統計(オンラインアルゴリズムとも呼ばれます)を再計算します。この更新の計算を高速に、できればO(1)に、つまりリストのサイズに依存しないようにしたいと思います。

通常の平均には、効率的に更新できるという特性がありますが、外れ値に対して堅牢ではありません。四分位間平均やトリム平均のような、平均の典型的なロバストな推定量は、効率的に更新できません(ソートされたリストを維持する必要があるため)。

効率的に計算/更新できる堅牢な統計についての提案があれば幸いです。


外れ値をスクリーニングするための「フェンス」を構築するために、データの最初のセグメント(最初の100や最初の1000など)を使用しないのはなぜですか?それらを再度更新する必要はないので、追加のデータ構造を維持する必要はありません。
whuber

@whuber最初のサンプルが残りのデータを表すことを保証できません。たとえば、データが与えられる順序はランダムではありません(最初に高い値が与えられ、次に低い値が与えられるシナリオを想像してください)。
ビットワイズ

1
それは重要な観察です。最初は平均高外れ値の「ロバスト」推定値を取得するため、通常よりも注意が必要であることを意味します。その見積もりを更新し続けることで、より低い値をすべて捨ててしまう可能性があります。したがって、データの配布全体の重要な部分が記録され、定期的に更新されるデータ構造が必要になります。アイデアについては、「オンライン」および「分位」というキーワードでスレッドをチェックしてください。そのような2つの有望なものはstats.stackexchange.com/questions/3372stats.stackexchange.com/q/3377にあります。
whuber

私は賞金を提供しますが、十分な評判がありません
Jason S 14

1
@whuberの最初のコメントのアイデアを続けるには、これまでに見られたすべてのデータから、サイズがまたは均一にサンプリングされたランダムなサブセットを維持できます。このセットと関連する「フェンス」はO(1)時間で更新できます。10001001000
Innuo 2014

回答:


4

このソリューションは、質問へのコメントで@Innuoによって行われた提案を実装します。

これまでに表示されたすべてのデータから、サイズが100または1000の均一にサンプリングされたランダムなサブセットを維持できます。このセットと関連する「フェンス」は時間で更新できます。O(1)

このサブセットを維持する方法がわかったら、そのようなサンプルから母集団の平均を推定する方法を選択できます。これは動作します一切の仮定をしない普遍的な方法で、ある任意の標準的な統計サンプリングの式を用いて予測することができ、精度の範囲内に入力ストリーム。(精度は、サンプルサイズの平方根に反比例します。)


このアルゴリズムは、データストリームサンプルサイズを入力として受け入れ、それぞれが母集団を表すサンプルストリームを出力します。。具体的には、場合、はからのサイズ単純なランダムサンプルです(置換なし)。x(t), M S T X T = X 1 X 2 ... X T 1 I T S I m X t t=1,2,,ms(t)X(t)=(x(1),x(2),,x(t))1its(i)mX(t)

これを実現するために、そのすべてで十分 -elementサブセットののインデックスであることの等しいチャンス有するで。これは、がに含まれる可能性が、提供される等しいことを意味します。{ 1 2 ... T } のx S T X I 1 I < T S T M / T T Mm{1,2,,t}xs(t)x(i), 1i<t,s(t)m/ttm

最初は、要素が格納されるまでストリームを収集します。その時点で可能なサンプルは1つだけなので、確率条件はごくわずかに満たされます。m

アルゴリズムはときに引き継ぎます。誘導仮定する単純なランダムサンプルであるのための。暫定的にます。LET一様確率変数(構築するために使用される任意の前の変数の独立して)。 もしその後のランダムに選択された要素置き換えるによって これが手順全体です。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 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)

明らかに、確率有するにあるの。さらに、帰納法の仮説により、はときにに含まれる確率を持ちました。確率 =場合、から削除され、残りの確率は等しいM /T + 1 、S T + 1 、X I のM / T S T I T M /T + 1 × 1 / M 1 /T + 1 s 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,

必要に応じて。帰納法により、内のすべての包含確率は正しく、これらの包含間に特別な相関関係がないことは明らかです。これは、アルゴリズムが正しいことを証明しています。s t x(i)s(t)

アルゴリズムの効率はこれは、各ステージで最大2つの乱数が計算され、最大で値の配列の1つの要素が置き換えられるためです。ストレージ要件はです。m O m O(1)mO(m)

このアルゴリズムのデータ構造は、サンプルと、それがサンプリングする母集団のインデックスで構成されます。最初に、を取り、のアルゴリズムを続行し これは、を生成するために値でを更新する実装です。(引数がの役割を果たすとなる。、インデックス、発信者によって維持されるであろう。)T X T S = X M T = M + 1 M + 2 ... s t x s t + 1 t m tstX(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)
}

これを説明およびテストするために、通常の(ロバストでない)平均の推定量を使用し、から推定された平均を実際の平均と比較します各ステップで見られるデータの累積セット)。私はかなりスムーズに変化するが、定期的に劇的なジャンプを経験するやや難しい入力ストリームを選択しました。のサンプルサイズはかなり小さいため、これらのプロットでサンプリングの変動を確認できます。X t m = 50s(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で、値のこの実行中のサンプルを維持することによって生成された一連の平均推定値が、各瞬間に利用可能なすべてのデータから生成された一連の平均推定値です。プロットは、データ(灰色)、(黒)、およびこのサンプリング手順の2つの独立したアプリケーション(色)を示しています。合意は予想されるサンプリングエラーの範囲内です。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 14

@ user603「拒否のしきい値」、または平均を推定するために使用される堅牢な方法は関係ありません。平均を推定する方法を選択してください。(ところで、すべての堅牢な方法がしきい値を設定してデータを拒否することで機能するわけではありません。)これは、私の回答のコードで、summary堅牢なバリアントに置き換えることによって行われます。
whuber

この例では、何かがはっきりしません。灰色のデータは「良好」または「外れ値」ですか。以前の場合、適合は下に偏っているようです(状況は、私たちがフォローしたい@Bitwiseの下降傾向に似ているため、より適合しているはずです)。より高いインデックス値の灰色のデータが外れ値である場合、近似は上方にバイアスされているようです。ここに合わせたいターゲットは何ですか?現在の適合は、これら2つのシナリオの間で引き裂かれているようです。
Deathkill14

@Death図の直前のテキストで説明されているように、灰色のデータは元のデータストリームです。その移動平均は黒い曲線です。色付きの曲線はアルゴリズムに基づいています。黒の曲線に対する色付きの曲線の垂直方向のずれは、サンプリングのランダム性が原因です。任意のインデックスで予想される偏差の量は、そのインデックスの前のグレー値の標準偏差に比例し、サンプルサイズの平方根に反比例します(この例では50としています)。
whuber

3

問題を再帰管理図の問題に関連付けることを考えるかもしれません。そのような管理図は、新しい観察が管理されているかどうかを評価します。そうである場合、この観測は平均と分散の新しい推定に含まれます(管理限界を決定するために必要)。

堅牢で再帰的な一変量管理図の背景については、こちらをご覧ください。品質管理と管理図に関する古典的なテキストの1つは、こちらからオンライン入手できるようです。

直観的に、平均としてと分散を入力として使用して、時間での新しい観測値がいくつかのアプローチによって異常値であるかどうかを判断できます。が特定の数の標準偏差(外にある場合、を外れ値と宣言することになりますが、データが特定の分布の仮定に準拠していません。この道を進みたい場合は、新しいポイントが外れ値ではないかどうかを判断し、特別な忘却率なしでそれを平均推定値に含めたいとします。次に、あなたはより良いことはできません: σ 2 T - 1 T X T μ T - 1 σ 2 T - 1μt1σt12txtμt1σt12)

μt=t1tμt1+1txt

同様に、分散を再帰的に更新する必要があります。

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

ただし、従来の管理図をいくつか試してみることもできます。データの分布に対してより堅牢で、非定常性を処理できる他の管理図(プロセスのが徐々に高くなるなど)は、EWMAまたはCUSUMが推奨されます(詳細については、上記にリンクされているテキストを参照してください)チャートとその管理限界)。これらの方法は、単一の新しい観測値を外れ値以外の観測値から得られた情報と比較するだけでよいという利点があるため、通常、ロバストなものよりも計算量が少なくなります。必要に応じて、上記の更新式を使用して、これらのメソッドの管理限界計算で使用される長期プロセスおよび推定を調整できます。μ σ 2μμσ2

EWMAのような、古い観測を忘れて新しい観測に重みを与えるチャートに関して、データが定常的であると考える場合(生成分布のパラメーターは変化しないことを意味します)、古い観測を指数関数的に忘れる必要はありません。それに応じて忘却係数を設定できます。ただし、それが非定常性であると考える場合は、忘却係数に適切な値を選択する必要があります(これを行う方法については、教科書を再度参照してください)。

オンラインで新しい観測値の監視と追加を開始する前に、外れ値の影響を受けないおよび(トレーニングデータセットに基づく初期パラメーター値)の推定値を取得する必要があることにも言及する必要があります。トレーニングデータに外れ値があると思われる場合は、堅牢な方法を使用してそれらを推定する1回限りのコストを支払うことができます。σ 2 0μ0σ02

私はこれらの線に沿ったアプローチが問題の最速の更新につながると思います。


1
管理図の使用は興味深いアイデアです。ただし、質問に対するコメントで概説されている課題を克服することは難しいようです。非定常の場合、古い値を「忘れている」場合、推定値に大きな偏りがある可能性があるようです。たとえば、によって与えられたデータのストリームに対して提案はどのように実行されますか?(これは非常に徐々に低下し、突然ジャンプし、非常にxt=cos(πt/106)+2t/106
ゆっくり

@Bitwiseは、最初のサンプルが将来のデータを表さない可能性があると述べています。残りのデータがどの程度異なるかについての情報がないと、基本的に何もできません。ただし、初期データがプロセスの非定常性に関する情報(たとえば、下降傾向)を持っている場合は、新しい観測値が低いと予想されるという事実を考慮して、新しい観測値を許可できます。ただし、非定常性に関するいくつかの情報が必要です。非定常性の1つの病理学的タイプを提案します。EWMAなどのいくつかの方法は特定のプロセスに最適ですが、一般的には非常に優れています。あなたのプロセスはよりカスタムなジョブを必要とするでしょう。
Deathkill14 14

(あなたが扱うことができないものを「病理学的」なものとして却下するという非常に数学的な動きなので、私はあなたの中に数学者を見つけました:-)。しかし、私はあなたの予後とは異なることを頼みます:@Innuoによって提案されたような方法は確かにそのような「病理」および特にランダム化がサンプリングに組み込まれている場合、現実世界があなたに投げかける可能性のあるすべてのものから保護することができます。
whuber

実際、私が直面している問題を無視してはならないことに同意します。@Innuoで説明した方法に私をリンクしていただけませんか(この投稿からそれらを見つけることができません。これらは上記で提供したリンクにあり、見逃していましたか?)。ありがとうございました。
Deathkill14

@Innuoは、stats.stackexchange.com / questions / 56494 /…に簡単なコメントを投稿しました。これは、以前に観測されたすべてのデータの一様なランダムサンプルが時間で維持できることを示唆しています。それがどのように行われるかは正確には明確ではありませんが、それを平均のロバストな推定量と結合することは、あらゆるデータストリームに適用できる普遍的なソリューションを構成します。O(1)
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.