時系列データの平滑化


14

私は睡眠中に加速度計データを記録するアンドロイドアプリケーションを構築します。これにより、睡眠の傾向を分析し、必要に応じて、浅い睡眠中に希望する時間近くにユーザーを起床します。

アラームと同様に、データを収集して保存するコンポーネントをすでに構築しています。睡眠データを本当に意味のある明確な方法で表示して保存するという獣に取り組む必要があります。これは、分析にも役立つことが望ましい方法です。

数枚の写真が2000語を言います:(担当者が少ないため、リンクは1つしか投稿できません)

これは、30秒間隔で収集された、フィルタリングされていないデータ、つまり移動の合計です。

そして、移動平均平滑化の私自身の明示によって平滑化された同じデータ

編集)両方のチャートにキャリブレーションが反映されます-最小の「ノイズ」フィルターと最大カットオフフィルター、およびアラームトリガーレベル(白い線)があります

残念ながら、これらはどちらも最適なソリューションではありません。1つ目は平均的なユーザーにとって少しわかりにくいもので、2つ目は理解しやすいもので、実際に起こっていることの多くを隠しています。特に、平均化により動きのスパイクの詳細が削除されます。これらは意味があると思います。

では、なぜこれらのチャートはそれほど重要なのでしょうか?これらの時系列は、ユーザーへのフィードバックとして一晩中表示され、後で確認/分析するために保存されます。スムージングは​​、理想的にはメモリコスト(RAMとストレージの両方)を削減し、これらのリソース不足の携帯電話/デバイスでのレンダリングを高速化します。

明らかにデータを平滑化するより良い方法があります。線形回帰を使用して動きの「シャープ」な変化を見つけ出し、移動平均平滑化を修正するなど、漠然としたアイデアがあります。より最適に解決できるものに真っ先に飛び込む前に、私は本当にいくつかのガイダンスと入力が本当に必要です。

ありがとう!

回答:


16

まず、圧縮と分析/プレゼンテーションの要件は必ずしも同じではありません。実際、分析では、すべての生データを保持、さまざまな方法でデータをスライスおよびダイスすることができます。そして、何があなたのために最もうまくいくかは、あなたがそれから抜け出したいものに非常に依存します。しかし、あなたが試すことができるいくつかの標準的なトリックがあります:

  • 生データではなく違いを使用する
  • 低レベルのノイズを除去するには、しきい値を使用します。(小さな変更を無視するには、差分と組み合わせます。)
  • 移動ではなく活動レベルをキャプチャするために、平均ではなく一定の時間ウィンドウにわたる分散を使用します
  • 時間ベースを固定間隔から可変長の実行に変更し、いくつかの基準が保持される変更の単一データポイントシーケンスに累積します(たとえば、同じ方向の差、あるしきい値まで)。
  • データを実際の値から序数(低、中、高など)に変換します。個々のサンプルではなく、時間ビンでこれを行うこともできます。たとえば、5分間のストレッチごとのアクティビティレベル
  • 適切な畳み込みカーネル *を使用して、移動平均よりも微妙に滑らかにするか、急激な変化などの関心のある特徴を選択します。
  • FFTライブラリを使用してパワースペクトルを計算する

最後のものは、あなたの目的には少し高価かもしれませんが、おそらく「睡眠リズム」などの点で、いくつかの非常に便利なプレゼンテーションオプションを提供するでしょう。(私は、Androidについて何も知りませんが、それはだ考えているいくつか/多くの/すべての携帯電話は、あなたがの利点を取ることができることをDSPハードウェアに組み込まれている場合があります。)


*中央畳み込みがデジタル信号処理にとっていかに重要であるかを考えると、オンラインでアクセス可能なイントロを見つけることは驚くほど困難です。または、少なくとも3分間のグーグルで。提案を歓迎します!


10

スプラインや黄土を含む多くのノンパラメトリックな平滑化アルゴリズムがあります。しかし、彼らは突然の変化もスムーズにします。ローパスフィルターも同様です。突然のジャンプは許可するが、ノイズは滑らかにするウェーブレットベースのスムーザーが必要になると思います。

Percival and Walden(2000)および関連するRパッケージを調べてください。Javaソリューションが必要ですが、Rパッケージのアルゴリズムはオープンソースであり、翻訳できる場合があります。


3

これは、あなたが求めているものにやや接線的ですが、カルマンフィルターを見てみる価値があります。


1

Savitzky-Golayの平滑化は良い答えかもしれません。これは、スライディングタイムウィンドウでの最小二乗平滑化(そのデータの畳み込み)の非常に効率的な実装であり、各タイムウィンドウのデータに固定定数を乗算するだけです。値、導関数、二次導関数などを近似できます。

スライディング時間ウィンドウのサイズとその時間ウィンドウに適合する多項式の度合いに基づいて、結果を許容するスパイクの程度を選択します。これはもともとクロマトグラフィー用に開発されたもので、ピークは結果の重要な部分です。SGスムージングの望ましい特性の1つは、ピークの位置が保持されることです。たとえば、3次曲線近似の5〜11ポイントウィンドウはノイズをカットしますが、ピークは保持します。

ウィキペディアには優れた記事がありますが、Savitzky-Golay フィルターと呼ばれています(システム制御理論と時系列分析から、通常の用語にわずかな暴力を加え、元の論文では正しくスムージングと呼ばれています)。また、二次導関数の推定値の式に関するWikipediaの記事に(議論の余地がある)エラーがあることに注意してください-その記事のTalkセクションを参照してください。編集:ウィキペディアの記事が修正されました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.