Skip to content

IOTデータの管理

より多くのモノがモノのインターネットに接続されるようになると、デバイスの状態、メタデータ、センサーの読み取り値などのテレメトリデータを含む、IoTデバイスから生成されるデータの量は指数関数的に増加します。例えば、監視システムでは、CCTVカメラの映像やさまざまなセンサーの読み取り値に依存して、侵入があったかどうかを検出します。IoTソリューションの価値を高めるためには、このようなデータを管理し、意味のあるものにすることが不可欠です。

データ分析技術は、ほとんどのIoTシステムに不可欠な要素です。収集されたIoTデータは通常、ダッシュボード、レポート、ビジュアライゼーション、アラートに変換されます。接続されているデバイスの状態を監視したり、デバイスの測定値をわかりやすく表示したり、パターンを識別したり、異常を検出したり、ルールに基づいてアクションを起こしたり、結果を予測したり、さらにはそれらに基づいてビジネス上の意思決定を行ったりと、このような設定が役立つユースケースは無数にあります。

この記事では、データの保存、データの処理と分析、ルールの適用など、IoTデータを扱うためのアプローチをいくつか紹介します。

データの保存

IoTデバイスは通常、限られたデータストレージ機能を持ち、バッテリーで動作し、一般にアクセス可能な場所に配備されることがあります。そのため、IoTデバイスが取得するデータの大部分は、MQTTやCoAPなどの通信プロトコルを使って通信され、IoTサービスに取り込まれて、さらに処理や保存が行われます。これまで以上に多くのデータが保存され、IoTアプリやサービスからアクセスされるようになっています。

蓄積されたIoTデータを管理する上で懸念されるのは、データ量の増加への対応だけではありません。他にも以下のようなことが考えられます。

  • ヘテロジニアスなデータへの対応
  • データの出所を追跡しながら分析に備えるために、データを変換、集約、統合すること
  • データの整合性とプライバシーを維持するためのデータのセキュリティ確保
  • ハイパフォーマンス、信頼性、柔軟性、拡張性とコストのバランスを考慮したストレージ技術の選択。

続きを読む【IoTデータを保存するためのヒント】(https://it.toolbox.com/blogs/erpdesk/six-tips-for-storing-iot-data-082916)

ヘテロジニアスなデータ

IoTデバイスが取得するデータは、構造化データ、半構造化データ、非構造化データなど、さまざまなデータ形式が混在して生成されます。これらのデータには、アナログ信号、離散的なセンサーの読み取り値、デバイスの健康状態のメタデータ、画像や動画の大容量ファイルなどが含まれます。IoTデータは一様ではないため、IoTデータを保存するための万能なアプローチは存在しません。

データを変換する

データは通常、デバイス上で変換されますが、できればデバイスゲートウェイ(存在する場合)で正規化を行います。また、データがタイムセンシティブな場合は、古いデータを削除することもあります。

また、データが時間に敏感な場合は、古いデータを削除することもあります。データを取得したセンサーのプロバンス情報や、データの場所やタイムスタンプも、この時点で添付されることが多いです。デバッグや履歴分析のために生データを保存しておくのは便利ですが、前処理済みのデータを保存しておけば、データを何度も分析する必要が生じたときに、高価な変換を繰り返す必要がなくなります。

帯域幅とストレージのコストを節約するために、データを変換した上で、送信するデータと保存するデータを選択するようにしてください。

データの保護

データの整合性とプライバシーを維持するためには、セキュアなプロトコルや暗号化を用いて、データを安全に伝送・保存する必要があります。これらのセキュリティ技術は、すべてのアーキテクチャレベルで適用され、機密情報がシステムの外部からいかなる方法でもアクセスできないようにする必要があります。

データストレージ戦略

データの保管方法には、自社内に保管する方法と、クラウド上に保管する方法がありますが、この2つを組み合わせた方法もあります。適切なデータストレージ戦略を決定するための重要な検討事項は、データ量、ネットワークへの接続性、電源の有無です。

例えば、航空機は基地局との接続が断続的であるため、重要なデータはオンプレミスのストレージメカニズムが必要となります。同様に、停電しやすい機器では、電源が回復したときや手動で機器を復旧させたときに重要なデータを復元するために、オンプレミスの不揮発性ストレージが必要になります(フライトレコーダーなど)。自律走行車は1年間にペタバイトのデータを生成するため、そのデータをリアルタイムでクラウドに転送することは現実的ではありません。一方で、温度センサーのように継続的な接続と電力供給が可能なデバイスは、すべてをクラウドに中継することができ、オンプレミスのストレージはまったく必要ありません。

また、データの用途も異なります。リアルタイム分析ではなく、アーカイブを目的としたデータは、採用する分析手法を補完するさまざまなアプローチで保存することができます。データへのアクセスは高速である必要があり、リアルタイムデータ分析のためのクエリをサポートする必要があります。

また、データを実際にクラウドにプッシュする前に、オンプレミスでデータの前処理をオフロードする「エッジ・コンピューティング(/depmodels/edge-computing)」というトレンドも生まれています。

データストレージ技術

デバイスやゲートウェイで処理される間、エッジで一時的に保存されるデータのために使用するデータストレージ技術は、物理的に堅牢であること(デバイスが設置される過酷な動作環境に耐えられること)に加えて、データが上流に送られる前にデータの前処理を迅速かつ正確に実行できるように、高速で信頼性の高いものでなければなりません。デバイスのデータストレージには、3DxPointやReRAMなどの次世代不揮発性RAM(NVRAM)技術を活用することができます。これらの技術は、NANDフラッシュよりも最大1000倍高速でありながら、DRAMよりも低消費電力です。

リアルタイム分析のようなアプリケーションでは、同時読み取りと書き込みをサポートし、高い可用性を備え、データアクセスとクエリのパフォーマンスを最適化するように設定可能なインデックスを含むストレージ技術を採用する必要があります。

大容量のアーカイブデータは、クラウドストレージに保存することができます。クラウドストレージは、アクセス速度は遅くなりますが、低コストで、データ量の増加に合わせて拡張できるという利点があります。動画などの大容量ファイルフォーマットデータへのアクセスは通常シーケンシャルなので、このようなデータはオブジェクトストレージ(OpenStack Object Storage known as Swiftなど)を使用して保存するか、Hadoop HDFSやIBM GPFSなどの分散ファイルシステムに直接書き込むことができます。Apache Hiveのようなデータウェアハウスツールは、分散型ストレージに保存されたデータの読み書きやアクセスを管理するのに役立ちます。

IoTのイベントデータに採用されることの多いデータストレージ技術には、NoSQLデータベースや時系列データベースなどがあります。

  • NoSQLデータベースは、高いスループットと低レイテンシーをサポートし、スキーマレスなアプローチにより新しいタイプのデータを動的に追加できる柔軟性があるため、分析に使用されるIoTデータによく選ばれています。IoTデータに使用されるオープンソースのNoSQLデータベースには、CouchbaseApache CassandraApache CouchDBMongoDB、Hadoop用のNoSQLデータベースであるApache HBaseなどがあります。ホスト型のNoSQLクラウドストレージソリューションとしては、IBMのCloudantデータベースやAWSのDynamoDBなどがあります。
  • 時系列データベースは、リレーショナルまたはNoSQLのアプローチに基づいています。時系列データベースは、時間ベースのデータにインデックスを付けたり、クエリを実行したりすることに特化して設計されており、時間的な性質を持つほとんどのIoTセンサーデータに最適です。IoTデータに使用される時系列データベースには、InfluxDBOpenTSBRiakPrometheusGraphiteなどがあります。

Apache Cassandraについては、このチュートリアル「Set up a basic Apache Cassandra architecture」で詳しく説明しています。"

データを分析する

IoTデータを有用なものにするためには分析する必要がありますが、IoTデバイスから生成される大量のデータを手動で処理することは現実的ではありません。そのため、ほとんどのIoTソリューションは自動分析に頼っています。分析ツールは、遠隔測定データに適用され、説明的なレポートの生成、ダッシュボードやデータの可視化によるデータの提示、アラートやアクションのトリガーとなります。

オープンソースのアナリティクスフレームワークやIoTプラットフォームは数多くあり、IoTソリューションにIoTデータの処理やアナリティクスを提供するのに利用できます。アナリティクスは、データの受信時にリアルタイムで行うことも、過去のデータをバッチ処理して行うこともできます。アナリティクスのアプローチには、分散アナリティクス、リアルタイムアナリティクス、エッジアナリティクス、機械学習などがあります。

分散型アナリティクス

IoTシステムでは、大規模なデータを分析するために分散分析が必要となります。特に、単一のノードでは保存や処理ができないほど膨大な量の履歴データを扱う場合には、分散分析が必要となります。例えば、IBM Watson IoT Historian Serviceのように、IoTデータを保存するCloudant NoSQLデータベースに接続して、デバイスデータを1時間ごと、1日ごと、1ヶ月ごとなどの期間ごとにデバイスごとのデータベースにバケット化して、複数のデータベースに分散して保存することができます。アナリティクスでは、地理的に複数の場所に分散している結果を集約することがあります。分散したデータベースにシームレスにクエリを実行できるように、分散したストレージとコンピュートインフラの橋渡しをするストレージドライバーやアナリティクスフレームワークを採用するとよいでしょう。

分散データの処理で注目すべきは、Hadoopコミュニティから生まれたフレームワークのエコシステムです。Apache Hadoopは、分散データを処理するためにMapReduceエンジンを使用するバッチ処理フレームワークです。Hadoopは非常に成熟しており、ビッグデータ分析のために最初に登場したオープンソースのフレームワークの一つです。また、Apache Sparkがありますが、これはHadoopの弱点を改善しようという意図で後から始められたものです。

HadoopとSparkは、データの完全なセットに対して分析を実行し、後から結果を出すような、時間的感度が問題にならないバッチ処理の履歴的IoTデータ分析に最適です。

リアルタイムのアナリティクス

大容量のIoTデータストリームの分析は、リアルタイムで行われることが多いです。特に、ストリームにタイムセンシティブなデータが含まれている場合、データをバッチ処理すると結果が遅すぎて役に立たない場合や、レイテンシーが懸念されるその他のアプリケーションの場合です。

リアルタイムアナリティクスは時系列データにも最適です。なぜなら、バッチ処理とは異なり、リアルタイムアナリティクスツールは通常、時間分析のウィンドウを制御することをサポートしており、例えば、データセット全体の単一の平均値を計算するのではなく、時間ごとの平均値を追跡するために、ローリングメトリクスを計算します。

リアルタイムのストリーム分析用に設計されたフレームワークには、Apache StormApache Samzaがあります(通常、KafkaやHadoop YARNと組み合わせて使用します)。ストリーム分析とバッチ分析のどちらにも使用できるハイブリッドエンジンには、Apache ApexApache SparkApache Flinkなどがあります。Apache Kafkaは、Spark、Storm、Hadoopなどのエンジンの上に置くことができるインジェスト層として機能します。これらのオープンソースフレームワークの選択ガイドについては、Choosing the right platform for performance, costsy stream processing applicationsをご覧ください。

エッジアナリティクス

IoTアナリティクスは通常、生のデバイスデータには適用されません。データは分析の前に、重複を排除するためのフィルタリングや、データの再配列、集約、正規化などの前処理が行われます。この処理は通常、取得時点でIoTデバイス自体、またはデータを集約するゲートウェイデバイスで行われ、どのデータをアップストリームに送る必要があるかを判断します。

データを生成するデバイスにできるだけ近い、ネットワークのエッジで適用される分析は、エッジ分析として知られています。Linux FoundationのオープンソースIoTエッジコンピューティングフレームワークであるEdgeX Foundryも、エッジアナリティクスをサポートしています。

エッジアナリティクスは、デバイスから多くのデータを送信する必要がないため、低レイテンシーであり、必要な帯域幅を減らすことができます。しかし、制約のあるデバイスでは処理能力が限られているため、ほとんどのIoTソリューションでは、エッジアナリティクスとアップストリームアナリティクスを含むハイブリッドなアプローチを採用しています。

機械学習

従来の数学的な統計モデルをアナリティクスに使用すると、目標の追跡、レポートやインサイトの作成、トレンドの予測、特定の結果の予測や最適化に使用するシミュレーションの作成などに使用できるため、価値があります。例えば、特定のアクションを適用した場合の結果を予測したり、特定の機器の故障までの時間を予測したり、IoTシステムの構成をコストやパフォーマンスの観点から最適化したりすることができます。

しかし、時系列で変化する多くの変数を含む動的なデータに適用した場合、どのような要因を探せばよいのか、どのような変数を変更すればコスト削減や効率化などの望ましい結果が得られるのかがわからない場合には、統計解析モデルの価値は低下します。このような場合には、統計モデルを使用する代わりに、データから学習する機械学習アルゴリズムを適用することができます。

機械学習は、過去のデータやリアルタイムのデータに適用できます。機械学習の手法は、パターンを識別し、重要な変数とそれらの間の関係を特定して、分析モデルを自動的に作成・改良し、それらのモデルを使ってシミュレーションや意思決定を行うことができます。機械学習のアプローチは、静的な統計分析モデルに比べて、新しいデータが入ってきたときに、時間をかけてモデルを改善することができ、結果が改善されるという利点があります。

最新の機械学習技術は、主にニューラルネットワーク(畳み込みニューラルネットワーク、長短期記憶ネットワーク)を用いた深層学習の分野で用いられています。また、能動学習、マルチモーダル学習、マルチタスク学習、トランスフォーマーを用いた言語モデルなどの研究も行われています。とはいえ、回帰、サポートベクターマシン、決定木などの伝統的な機械学習手法は、多くのアプリケーションで有効であることがわかっています。

IoT向けのスタンドアロンのオープンソース深層学習フレームワークには、TensorFlowPyTorchTheano、またはCognitive Toolkit CNTKがあります。また、Apache Sparkの上で動作する機械学習ツールもあり、例えば、深層学習エンジンであるH20DeepLearning4JSystemMLなどがあります。

ルールを適用してデータに作用する

ルールエンジンは、アナリティクスによってIoTデータから発見されたインサイトを利用し、ルールを適用して正確で再現性のある意思決定を行います。IoTへのルールの実装には様々なアプローチがあります。

  • ディシジョンツリー。意思決定ポイントは、ツリー(つまり、階層的なグラフベースの構造)を使用して、意思決定ポイントを表現します。ツリー構造の各リーフは、ディシジョンに対応しています。

決定木は、追跡される変数の状態の可能な数が増えると、指数関数的に成長します。

  • Data flow graphs.データフローグラフ(パイプとも呼ばれる)は、機能間のデータの依存関係や流れを表現するために使用されます。データフローグラフに基づいて構築されたフレームワークの例として、TensorFlowがあります。
  • Complex Event Processing (CEP)。CEPは時系列データの処理によく使われ、リアルタイムのセンサーデータにルールを適用するのに適しています。
  • 推論エンジン. If-then形式のルールを実装します。
  • ビジネスプロセスマネジメント.伝統的なBPMシステムの文脈では、ルールはしばしば決定表として実装される。

エンジンの実装に関わらず、ルールは、問題の回避、パフォーマンスの最大化、コストの最適化のために、システムを自律的に調整するアクションのトリガーとなる条件をコード化します。

オープンソースの分析・ルールエンジンは自己管理が可能ですが、多くのIoTプラットフォームでは、IBM's Analytics for Apache Sparkのようなオープンソース製品をベースにした分析・ルールソリューションのホスティングを提供しています。また、IoTプラットフォームには一般的に、バッチ分析とリアルタイム分析、機械学習とルールを組み込んだカスタム統合分析ソリューションが含まれています。

結論

IoTデータを活用するためのツールやアプローチについて、データの管理、アナリティクスによる知見の獲得、ルールの適用によるアクションの実行などの概要を紹介しました。

IoTデータアナリティクスは、コネクテッドシティのような大規模で複雑なIoTシステムの管理に不可欠であり、アナリティクスを使って需要を予測し、ルールを適用して、適応型信号機の制御やスマート照明の管理など、対応してサービスを調整します。

IoTデータアナリティクスは、小規模なIoTシステムの効率も向上させます。例えば、産業機器自動車のフリートの予測メンテナンスでは、資産に設置されたセンサーデータを利用して、メンテナンスが必要になる時期を予測します。これにより、メンテナンスを最適な時期にスケジュールすることができ、信頼性が向上します。また、不要なメンテナンスにかかる費用を回避し、ダウンタイムや生産性の低下を抑えることができます。