時間t 0 ... t Nに多くのプロセスx 0 ... x Nによって取得されたxの一連の測定値があるとします。時間tで、私が知っている長期的な傾向はなく、xは指数平滑法などのアルゴリズムから予測できるという仮定に基づいて、 xの現在の値を推定したいとします。多くのプロセスがあり、Nが非常に大きくなる可能性があるため、いくつかの値 (以前の状態など) しか保存できません。
ここでの 1 つのアプローチは、通常の指数平滑化アルゴリズムを適応させることです。サンプルが定期的に取得される場合、次のような推定量y nを維持します。
y n = α . y n-1 + ( 1 - α ). × n
サンプリングが不規則な場合、このアプローチは適切ではありません。多くのサンプルを一緒に使用すると、不均衡な影響が生じるからです。したがって、この式は次のように適用できます。
y n = α n . y n-1 + (1 - α n )。× n
どこ
α n = e -k.(t n - t n-1 )
前の 2 つのサンプル間の間隔に応じて平滑化定数を動的に調整する IE。私はこのアプローチに満足しており、うまくいっているようです。これはここで与えられた最初の回答であり、この種の手法の優れた要約は、この 2012 年の論文 ( PDF ) で Eckner によって与えられています。
さて、私の質問は次のとおりです。上記を適応させて、発生率を推定したいと思います。ときどきイベントが発生します。同様の指数手法を使用して、イベントの発生率を推定したいと考えています。
2 つの明白な戦略は次のとおりです。
- データ系列x nとして最後の 2 つのイベント間の遅延を使用して、最初または 2 番目の手法を使用するには。
- 最後の 2 つのイベント間の遅延の逆数 (つまり、速度) をデータ系列x nとして使用して、最初または 2 番目の手法を使用します。
私が知る限り、これらはどちらも良い戦略ではありません。まず、500 ミリ秒ごとに発生するイベント (一方で) と、他方で 200 ミリ秒の遅延と 800 ミリ秒の遅延で発生するイベントを取り上げます。明らかに、これらは両方とも 1 秒間に 2 回発生するため、指定されたレート推定値は同じになるはずです。最後のサンプルの時間を無視するのは無謀に思えるので、2 番目の戦略に集中します。200 ミリ秒/800 ミリ秒のサンプル ストリームをシミュレートすると、約 1.5 の推定値が生成されるため (逆数ではなく) 遅延を使用しても、適切な予測因子にはなりません (逆数の平均は平均の逆数ではないことに基づく)。
しかし、はるかに重要なことは、どちらの戦略も、実際に実際に起こっていること、つまり突然すべてのイベントが長時間停止することに対応していないことです。したがって、 yの「最新」の値は最後のイベントの値であり、レートの推定値は計算されません。したがって、レートは一定に見えます。もちろん、データを遡及的に分析していれば問題ありませんが、リアルタイムで分析しています。
これを行う別の方法は、スレッドを定期的に (たとえば 10 秒ごとに) 実行し、この 10 秒間隔で発生回数をカウントすることです。統計は頻繁に必要とされないため、これは非常にリソースが多く、ミューテックスの問題のためにすべてをポーリングするスレッドを実行するのは嫌いです。したがって、(どういうわけか)最後のサンプルが取得されてからの時間(たとえば)によって読み取られた状態を調整するアルゴリズムを使用したいと思います。これは、パフォーマンスがサンプルとは無関係に選択された時間に測定される場合、合理的なアプローチのように思われます。測定時間は平均してサンプル間の期間の半分になるため、レートの非常に粗い平滑化されていない推定値は、最後のサンプルからの時間。さらに複雑なことに、測定時間はサンプルとは無関係ではありません。
これには簡単な答えがあると感じていますが、私にはわかりません。イベントがポアソン分布であると仮定し、最後のサンプルからの間隔と何らかの形の移動平均に基づいてλの推定値を導き出すのが正しいルートだと思いますが、私の統計はさびすぎてこれを機能させることができません。
ここにこの質問のほとんどだましがありますが、答えはあまり満足のいくものではないようです(理由を説明したいと思います)。推定する変数が 1 つあり、それについて何も知らないことを考えると、カルマン フィルターは重く見えると付け加えておきます。他にも多くの似たようなものがありますが、そのほとんどは値の大きなビンを保持することを提案するか (ここではメモリの観点からは現実的ではありません)、上記の 2 つの問題に対処していません。