時系列のセンサー状態間隔が与えられた場合、監視されたトレーニング データから学習して一連の状態間隔に基づいてインシデントを検出する分類器を実装するにはどうすればよいですか? 問題を単純化するために、センサーの状態は または のいずれかに縮小されtrue
ますfalse
。
更新:同様の問題に対処する時間間隔のマイニング シーケンスに関するこのペーパー (PDF)を見つけました。多変量時系列における階層的時間パターンのマイニングに関する別の論文 (Google Docs)は、斬新なアプローチを採用していますが、階層データを扱っています。
トレーニング データの例
次のデータは、時間の経過に伴うグラフとして表されたインシデントのトレーニング例です。ここで、 はセンサーの状態間隔と状態間隔を/¯¯¯\
表します。true
\___/
false
Sensor | Sensor State over time
| 0....5....10...15...20...25... // timestamp
---------|--------------------------------
A | ¯¯¯¯¯¯¯¯¯¯¯¯\________/¯¯¯¯¯¯¯¯
B | ¯¯¯¯¯\___________________/¯¯¯¯
C | ______________________________ // no state change
D | /¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯
E | _________________/¯¯¯¯¯¯¯¯\___
インシデント検出 vs シーケンス ラベリング vs 分類
最初に問題を 2 カテゴリ シーケンス ラベル付け問題として一般化しましたが、カテゴリは実際には「通常の操作」とまれな「アラーム イベント」を表しているため、質問をインシデント検出と言い換えました。「通常運用」と「警報発生」のトレーニングデータを用意しています。
問題の複雑さを軽減するために、センサー イベントをブール値に離散化しましたが、必ずしもそうである必要はありません。
可能なアルゴリズム
隠れマルコフモデルは可能な解決策のようですが、状態間隔を使用することはできますか? シーケンス ラベラーがこの問題に対する最良のアプローチではない場合は、別の提案をいただければ幸いです。
ベイジアン確率論的アプローチ
センサーの活動は、時間帯によって大きく異なります (朝は忙しく、夜は静か)。私の最初のアプローチは、数日間にわたって正常なセンサー状態を測定し、時刻 (時間) ごとに状態確率を計算することでした。想定外の時間にセンサー状態が「想定外のしきい値」を超える合計確率は、インシデントを示します。しかし、これは、センサーにノイズが多い場合に誤った警報を発するように思われました。私はまだこれを実装していませんが、このアプローチにはメリットがあると思います。
特徴抽出
ベクトル状態は、特定の時間に発生し、特定の期間続く状態間隔の変化として表すことができます。
struct StateInterval
{
int sensorID;
bool state;
DateTime timeStamp;
TimeSpan duration;
}
例えば。プロセス テーブルからのいくつかの状態間隔:
[ {D, true, 0, 3} ]; [ {D, false, 4, 1} ]; ...
[ {A, true, 0, 12} ]; [ {B, true, 0, 6} ]; [ {D, true, 0, 3} ]; etc.
適切な分類器は、状態値の間隔と最近の状態変化を考慮して、状態変化の組み合わせがカテゴリのトレーニング データと厳密に一致するかどうかを判断します。
編集:複数のセンサーのアラームデータから特徴を抽出する方法と、それを以前のデータと比較する方法について、寝た後のいくつかのアイデア...
1 日の各時間について、各センサーについて次のデータを計算することから始めます。
- 平均状態間隔の長さ (
true
と のfalse
状態) - 状態変化間の平均時間
- 経時的な状態変化の数
各センサーは、次のようなデータを使用して、マトリックス内の他のすべてのセンサーと比較できます。
- センサー A が真の状態に変化した後、センサー B が真の状態に変化するまでにかかった平均時間。平均値が 60 秒の場合、1 秒の待機は 120 秒の待機よりも興味深いものになります。
- センサー A が 1 つの状態にある間にセンサー B が受けた状態変化の平均数
2 セットのトレーニング データが与えられた場合、分類器は、これらの特徴セットから分類の可能性が最も高いカテゴリを判断できる必要があります。
これは賢明なアプローチであり、これらの機能を比較するための優れたアルゴリズムは何でしょうか?
編集:状態変化 ( false->true
vs true-false
) の方向は重要であるため、すべての機能でそれを考慮する必要があります。