時系列ダウンサンプリングで長期的なスマートホームデータを縮小する方法

エヴァ・ウォンテクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

時系列のダウンサンプリングとは、長期的なスマートホームデータを、密度の高い過去のサンプルから、意図的により粗い時間解像度で集計した少数の要約値へ置き換えて縮小することです。

ホームサーバーは、温度、湿度、電力、バッテリー、モーション、空気質、機器のテレメトリーを数秒おきに何年も収集できます。HVACの短いサイクルやデバイスのデータ欠落を調査する際には、直近の生データが役立ちます。一方、古い履歴は通常、傾向、季節ごとの比較、動作範囲を調べるために使われます。ダウンサンプリングによって保持する情報を変えると、こうした長期的な分析に必要な行数、ストレージ容量、スキャン処理を減らせます。ただし、元のすべてのイベントを再現できると誤解してはいけません。

ダウンサンプリングは、単に圧縮するのではなく、過去の詳細を削除する

圧縮は同じ観測結果をより少ないバイト数で表現しようとするものです。一方、ダウンサンプリングは多数の観測結果を意図的に、導出された少数のデータポイントへ置き換えます。5秒間隔のストリームを1分または15分単位のバケットに変換し、各バケットには元のすべてのサンプルではなく、平均、最小値、最大値、件数、パーセンタイルなどの統計値を保持できます。

高解像度の生データを短期間だけ保持し、低精度の要約値を長期間保持する方法は、時系列データのライフサイクル設計でよく使われるパターンです。ストレージが削減されるのは、変更されていないデータセットをより効率的にエンコードするからではなく、保持するデータポイントの数を減らすからです。

この違いは、数か月後に短時間のイベントを確認したい場合に重要です。10秒間隔の測定値を1時間ごとの平均値に集約した後では、その平均値を生み出した正確なシーケンスを、どのような解凍処理でも復元できません。

そのため、保持設計では何の情報を犠牲にするのかを明確にしておく必要があります。生データをフォレンジック層、ダウンサンプリング後のデータをトレンド層と位置付ければ、高解像度の保持期間が終了した後も、どのような問いに答えられるのかが分かります。

バケット幅によって、履歴層で判別できる最短イベントが決まる

各集計ウィンドウの幅によって、どれだけの時間構造が残るかが決まります。1分間のバケットなら、1時間のバケットに埋もれて消えてしまう短い家電のサイクルも確認できます。一方、1時間単位の時系列は大幅に小さくなり、年間のエネルギー傾向や室温の推移には十分なことが多いでしょう。

継続的集約は、時間バケットの集約値を具体化します。これにより、バケットの境界は単なるグラフ設定ではなく、データモデルの一部になります。1分単位から1時間単位へ変更すると、どの変動を個別の過去の観測値として表示できるかも変わります。

解像度は、生データの保持期間が終了した後も重要な最短イベントを基準に選びます。ドアの開閉は数日間だけ細かな解像度が必要かもしれません。一方、月単位のエネルギー計画では、15分または1時間ごとの要約値を何年も使える場合があります。

集約関数によって、各ウィンドウ内で残る信号が決まる

同じバケット幅を使った2つのダウンサンプリング系列でも、平均、最大値、最小値、件数、最終値のどれを使うかによって、保持される情報は大きく異なります。室温の平均値は快適性の傾向を把握するのに便利ですが、二値の漏水アラームを平均すると、重大な1分間のイベントが意味の分かりにくい小数値に変わってしまう可能性があります。

頻繁に使う式を保存済みの集約系列として事前計算しておく方法は、要約値そのものを後のクエリに合わせる必要があることを示しています。HVACの動作を追跡する家庭では、あらゆる動作状態を1つの平均値で表そうとせず、平均温度、最高温度、稼働回数、デューティサイクルなどを保持するとよいでしょう。

最小値と最大値の組み合わせは平均値では隠れる急変を残し、件数はイベントの頻度を残します。最終値の要約は、ゆっくり変化する状態を保持するのに役立ちます。適切な組み合わせは、将来の問いがレベル、極値、継続時間、遷移、発生回数のどれに関するものかによって決まります。

ここから、誤解を招くダッシュボードが生まれることもあります。ZimaSpaceが短いバーストが平均値に埋もれる仕組みについて説明しているように、スマートホームのテレメトリーでも、一見落ち着いた長期平均と、運用上重要だった短時間のピークが同時に存在することがあります。

保持階層によって、最近の証拠を高密度に保ち、古い履歴を低コストにできる

ダウンサンプリングは、取り込み時に一律に適用するよりも、保持階層と組み合わせたときに最も効果を発揮します。現在の層ではトラブルシューティング用に生データを保持し、中間層では最近の比較用に分単位の要約値を保持し、長期層では季節分析や複数年の分析向けに、より粗い統計値を保持できます。

InfluxDBでは、高解像度の未加工データを保持期間の短いバケットに保存し、ダウンサンプリングしたデータを保持期間の長いバケットに保存できます。こうした層を分離すれば、過去のトレンドに価値があるという理由だけで、アーカイブにすべての生データを永久保存せずに済みます。

階層化すると、削除の意味も説明しやすくなります。生データの期限切れはフォレンジック解像度を意図的に失うことですが、派生系列を保持すれば、家庭があらかじめ選択した特定の長期統計は維持できます。

遅れて到着するデータと再処理が、安全境界を決める

集約は必ずしも一度だけ行えばよい処理ではありません。センサーが障害から復旧した後に再接続したり、ゲートウェイがバッファーに保存していたサンプルを遅れてアップロードしたり、修正されたメタデータによってデータポイントの所属する部屋やデバイスが変わったりするためです。そのため、終了したウィンドウを再計算しないダウンサンプリング済みバケットは、最終的に到着した生データの履歴と一致しなくなる可能性があります。

時系列システムでは、具体化された時間ウィンドウを更新して、初回計算後に到着したデータや修正を集約値へ反映できます。更新範囲は、ローカルシステムで現実的に許容される遅延量に合わせるべきであり、安定した数年分の履歴を常に再計算する必要はありません。

ただし、すでに削除した生データは、別のコピーがない限り再処理によって復元できません。そのため、順序が重要です。まず要約値を計算して検証し、遅延を受け入れる期間を設け、その後で選択した保持ポリシーに従って高解像度のソースデータを期限切れにします。

実際の境界は、単なる技術上のものではなく、情報上のものです。小さくなった履歴が家庭の長期的な問いに答えられるなら、ダウンサンプリングは成功しています。保持期間の終了後、最初に必要となった問いが、アーカイブから意図的に削除した詳細を求めるようなら、ダウンサンプリングが過剰だったということです。

テック&AIハブ

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.