データクリーニング

データクリーニングとは、対象のデータセットにおける異常を特定して対処するプロセスです。データクレンジングまたはデータラングリングとも呼ばれます。データのクレンジングには、外れ値の管理、欠損データの推定、ノイズの除去といった、さまざまな手法を用いることができます。

エンジニアやデータ サイエンティストは、データをクリーニングすることで結果の精度を向上させ、欠陥や不完全さを含むデータに基づく誤った結論を未然に防ぐことができます。

MATLAB® は、データクリーニングを簡略化する関数やアプリを提供することで、解析や問題解決に集中して取り組めるよう支援します。

データクリーニングが重要な理由

データクリーニング手法は、信号処理、AI、金融工学など、さまざまな分野で用いられています。

信号処理

アナログセンサーから取得した信号はさまざまなノイズ源の影響を受けるため、データに不整合が生じます。前処理では、外れ値の除外や平滑化などのデータクリーニング手法を用いて、クリーンで意味のあるデータに対して解析が実行されるようにします。

適応フィルターやウェーブレット変換などの高度なノイズ除去手法は、ホワイトノイズの影響を受ける広帯域信号を扱うシステムにおいて、元の信号情報を損なうことなくノイズを除去するのに役立ちます。

図 1 は、365 日間にわたって記録された、ある人物の毎日の体重のプロットを示しており、欠損値が含まれています。プロットには、元の測定値と内挿値が表示されています。この 200 日目から 250 日目までを拡大したプロットには、特定された欠損値と内挿による置換値が示されています。

x 軸に日数、y 軸に体重 (kg) を示す MATLAB プロット。元の体重データが青色でプロットされ、欠損している体重の値を表す円が内挿法で補われています。

図 1. ある人物の毎日の体重データを示す MATLAB プロット。内挿法を用いて欠損しているエントリが補われています。

人工知能 (AI)

AI モデルの性能と信頼性は、入力データの質に大きく左右されます。データクリーニングは、AI モデルを偏りや誤りのある結果に導く可能性のあるノイズ、不整合、欠損値、外れ値を取り除くことができます。クリーンな入力データを用いることで、AI アルゴリズムは正しいパターンを学習し、精度の高い予測を行うことができます。

図 2 は、MATLAB の fillmissingfilloutlierssmoothdata 関数を用いて欠損データや外れ値データ、ノイズを取り除いた負荷消費データのプロットを示しています。このデータを AI モデルに入力することで、負荷消費を正確に予測できます。図 3 は、MATLAB で予測モデルの結果と実際のデータ、そして両者の誤差の大きさを示したプロットです。クレンジングしたデータセットを使わずにモデルの学習を行った場合、予測誤差が大きくなる可能性があります。

消費電力の生データと、データクリーニング後のクリーンなデータを示す MATLAB プロット。

図 2. MATLAB を使用したデータクリーニングの実行前と実行後の負荷消費を示すプロット。

MATLAB でバギング木ベースの回帰 AI モデルを使用して作成された消費電力データの負荷予測プロットと、実際のデータと予測データ間の差異を示す MATLAB プロット (x 軸は月、y 軸はメガワット単位の誤差)。

図 3. MATLAB を使用してプロットされた、負荷消費を予測する AI モデルの検証結果。a) 実際の消費データに対して予測データをプロットしたバギング木ベースの回帰モデル。b) 予測データと実際の消費データ間の誤差。

金融工学

正確な財務モデル、リスク評価、投資戦略には、クリーンなデータが不可欠です。金融アナリストは、データに関する課題が原因で、実際のモデリング作業よりもデータクリーニングに多くの時間を費やしています。欠損データや大規模データ、あるいは異なるデータソースがあると、予測の偏りや意思決定の誤りにつながる可能性があります。データクリーニングは、金融分析の精度と信頼性を高める有効な手法です。図 4 は、ある企業の年間平均株価の欠損値を示しています。MATLAB の fillmissing 関数を使用して、線形内挿で欠損データを補完しています。

欠損値を含む企業の年間平均株価 (生データ) の MATLAB プロットと、線形内挿を用いた欠損データ補完によって処理されたクリーンなプロット。

図 4. 線形内挿による企業の年間平均株価の欠損データ補完を示す MATLAB プロット。

データクリーニングの仕組み

データクリーニングの反復的なプロセスには、使用するデータセットや最終的な分析の目的、利用可能なツールやソフトウェアによって、さまざまな手法が用いられます。データクリーニングには通常、以下のいずれか、または複数の手順が含まれます。

一般的なデータクリーニングの手順

欠損データの補完

欠損データとは、データセット内の値や情報の欠如を指し、NULL、0、空の文字列、または無効な (NaN) データポイントという形で表面化します。値が欠損する理由には、データの取得、伝送、変換など、さまざまな要因があります。欠損データは、データ分析とモデリングの品質や有効性に大きく影響する可能性があるため、データクリーニングの過程で適切に対処することが重要です。

欠損データは次の 3 つのカテゴリに分類できます。正しいカテゴリを特定することで、適切な補完手法の選択が可能になります。

  1. ランダム欠損 (MAR) — このカテゴリでは、欠損値のある変数はデータセット内の他の変数に依存します。たとえば、屋上の太陽光発電設備が放射照度、系統電圧、周波数などのテレメトリデータを送信している場合、夜間や雨天時には十分な放射照度が得られずシステムが稼働しないため、系統電圧や周波数の欠損値が発生します。つまり、これらの欠損値は放射照度の不足が原因です。
  2. 完全ランダム欠損 (MCAR) — このカテゴリでは、欠損値の根本的な原因はデータセット内の他の変数とまったく関連性はありません。たとえば、気象テレメトリにおいて、センサーの故障やチャネルの高ノイズが原因でパケットが欠損する場合などがあります。
  3. 非ランダム欠損 (MNAR) — このシナリオが該当するのは、欠損データの根本的な原因がその変数自体に関連する場合です。たとえば、温度情報を送信するセンサーが測定の上限に達した場合、しきい値で飽和し、その結果として欠損値が発生します。

欠損データの特定は一見簡単そうに思えますが、欠損データを適切な推定値に置き換えるのは複雑なプロセスです。可視化や無効な値の検索などを通じて、まずは欠損値を特定するところから始めます。欠損値を置き換えるには、実際の値に近いと思われる値を生成する必要があります。データの性質に応じて、欠損値を補完する手法は異なります。以下はその例です。

  • 気温のようにゆっくり変化するデータは、最も近い有効な値をそのまま使うだけでも十分です。
  • 天候のように季節性があり、変動が比較的規則的なデータセットの場合は、移動平均や中央値、k 最近傍法などの統計的手法を用いることができます。
  • 株価や経済指標のような直前の値との依存関係が強いデータセットでは、欠損データを生成する内挿法が適しています。

図 5 は、加工されていない太陽放射データと fillmissing 関数を用いて補完された欠損値を示しています。この例では、移動中央値法を用いて欠損値を補完しています。

図 5. 加工されていない太陽放射のデータセットの時系列プロットとMATLAB の fillmissing 関数を用いて補完された欠損値を示す時系列プロット。

外れ値の管理

外れ値とは、データセット内の大多数の観測値から大きく逸脱しているデータ点のことです。これらは、一見データの一般的なパターンに従っていない異常に高い値または低い値です。外れ値は、データセットの統計解析や解釈を歪め、誤った結果を招く可能性があります。外れ値は、測定誤差やデータ入力ミス、自然変動、あるいは調査対象となるプロセスに内在する異常など、さまざまな理由で発生する可能性があります。

外れ値の管理には、設定可能な 2 つの手順が含まれます。

  1. 検出
  2. 外れ値の検出とは、有効な動作範囲を定め、その範囲から外れたデータ点を外れ値として識別することです。有効な動作範囲の定義に用いられる手法は、データセットの属性やソース、目的に応じて選択されます。こうした手法は、可視化ベースまたは固定しきい値ベースの外れ値検出といった単純な手法から、中央絶対偏差などの統計的手法やユークリッドやマハラノビスといった距離ベースの手法まで多岐にわたります。

  3. 外れ値の補完
  4. 外れ値は、特定後に生成された値に置き換えることができます。外れ値を置換する際に用いる生成手法は、欠損値の補完手法と類似しています。

図 6 は、入力データと、中央値を用いて検出して線形内挿で補完した 2 つの外れ値を示しています。

MATLAB の [外れ値データの削除] ライブ エディター タスクを対話的に使い、中央値しきい値法で検出された外れ値と線形内挿法で補完された外れ値を示すグラフ。

図 6. 中央値しきい値法による外れ値の検出と線形内挿法による外れ値の補完のために用いられる [外れ値データの削除] ライブ エディター タスク。

平滑化

平滑化は、データセット内のノイズ、変動性、不規則性を低減して、内在するパターンや傾向をより明確にするために使用されるデータ解析手法です。統計、信号処理、時系列解析、画像処理など、さまざまな分野で広く利用されています。

平滑化手法は、他のデータクリーニング手法と同様に、データの特性や領域に大きく依存します。移動平均フィルター、重み付けされた移動平均フィルター、移動中央値ベースフィルターなどの単純な統計的手法から、スプライン、フーリエ変換平滑化、カルマンフィルター処理などのより複雑な手法まで、幅広く利用できます。平滑化関数を使用するには、データセットを順序付けて、固定間隔でサンプリングしておく必要があります。

MATLAB の smoothdata 関数によるデータクリーニング手法を適用する前のノイズを含む生の入力データと、適用後のデータを示すプロット。

図 7. MATLAB の smoothdata 関数で移動平均フィルターを適用して、ノイズを含むデータセットを平滑化したプロット。

ディープラーニング モデルを使用したデータクリーニング

従来のデータクリーニング手法は、一般的に知られている統計モデルや数学モデルで表現できるデータには効果的に機能します。しかし、人間の音声や EEG 信号のような標準的なモデルにはうまく適合しない複雑なデータセットの場合は、ディープラーニング モデルを活用してデータクリーニングを実行できます。

図 8 のでは、音声信号に周りで稼働する洗浄機のノイズが多く含まれています。平滑化や外れ値の除去などのデータクリーニング手法では、洗浄機データのノイズがオーディオスペクトル上で音声信号と重なっているため、効果的に取り除くことはできません。全結合畳み込みなどのディープラーニング ネットワークは、音声信号をクリーニングしてノイズを除去できるため、ノイズを取り除いて元の信号を残すことができます。

MATLAB でプロットした、クリーンな音声信号と洗浄機のノイズが混入した音声信号を示すグラフと、音声信号のノイズ除去に用いた全結合ネットワークと畳み込みネットワークの出力を比較した 2 つのグラフ。

図 8. クリーンな音声信号、ノイズが混入した音声信号、2 つのディープラーニング ネットワーク (全結合と畳み込み) によるノイズ除去後の出力を示す MATLAB プロット。

Excel を使用したデータクリーニング

Microsoft® Excel® は、データのクリーニングと準備によく使用されるツールです。重複の削除や検索と置換などの組み込みコマンドを使用してデータセットを標準化できます。また、条件付き書式を適用して不整合を強調表示したり、ピボットテーブルを使用してエラーを特定して修正したりすることも可能です。しかし、大規模なデータセットの場合、欠損値の処理やデータセットの統合、カスタムロジックの適用などの作業は多くの場合手作業で行う必要があります。自動化が不十分だと、予期しないエラーや不整合が生じやすくなるため、特に複雑なデータセットを扱う際は注意が必要です。

MATLAB は、Excel では時間のかかるデータクリーニング作業を効率化できるため、特に大規模なデータセットで有効です。MATLAB のスクリプトや関数を使えば、データクリーニングのための変換処理が明確になるため、どのような手順が実行されているかを常に確認でき、必要に応じて調整することも可能です。たとえば、欠損値を手動で検索する代わりに、fillmissing 関数を使って自動的にデータの欠損部分を処理できます。MATLAB と Excel を組み合わせることで、複雑で手間のかかるデータセットも一貫して処理でき、プロセス全体を管理しやすくなります。

MATLAB を使用したデータクリーニング

データクリーニングは、工学や科学分野のワークフローの多くで重要となる最初のステップです。MATLAB には、効率的にデータクリーニングを行うために使用するさまざまな関数や、対話形式のローコード手法 (アプリやライブ エディター タスク) が用意されています。

対話型の機能

高水準関数を使用したコードの記述は、特に言語構文や関数の使い方に精通している場合、非常に効率的な手段となります。しかし、適切なデータクリーニング手法の特定には反復作業が伴うのが一般的で、そのたびにコードを微調整するのは手間と時間がかかります。MATLAB の対話型ツールを使用すると、さまざまなデータクリーニング手法を素早く試して、データセットでの効果を可視化しながら、最適な方法を選ぶことができます。ライブ エディター タスクやデータ クリーナーなどのアプリを使用すると、コーディングの負担を軽減しながら、データの探索からクリーニング、準備、解析に至るまで、作業を容易に進めることができます。さらに、MATLAB コードを自動生成して、再利用することもできます。

ライブ エディター タスク

ライブ エディター タスクは、ライブ スクリプトに組み込むことができるシンプルなポイントアンドクリック インターフェイスまたは簡易アプリです。タスクでは、対話的に設定したパラメーターに基づいて一連の MATLAB コマンドが自動的に実行され、結果がすぐに表示されます。タスクは、開発期間の短縮だけでなく、エラーやプロット時間の削減にも役立ちます。[欠損データの削除]、[外れ値データの削除]、[データの平滑化] などの一連のライブ エディター タスクを使用して、さまざまなデータクリーニング操作を対話的に実行できます。

MATLAB の [データ前処理] ツールバーのスクリーンショット。データクリーニングに使用できる対話型タスクが表示されています。

図 9. MATLAB でデータ前処理に使用できるライブタスクの一覧。

図 10. [欠損データの削除] ライブ エディター タスクを使用した対話的な欠損データの補完。

データ クリーナー アプリ

データ クリーナー アプリを使用すると、加工されていない列方向データを処理してクリーニングすることができます。さまざまなデータクリーニング手法を対話的に繰り返し適用し、その効果を可視化することができます。

このアプリを使用して、以下を行うことができます。

  • MATLAB ワークスペースやファイルから列方向データにアクセス
  • 可視化、データ、概要の各ビューを通じたデータの探索
  • 変数の並べ替え、変数名の変更、変数の削除
  • timetable におけるデータの時間再調整、table 変数のスタック/スタック解除、欠損データの削除、外れ値データの削除、データの平滑化、またはデータの正規化
  • データの解析方法に基づいた、実行済みデータクリーニング手順の編集と並べ替え
  • クリーニングしたデータを MATLAB ワークスペースにエクスポート、またはデータクリーニング用の MATLAB コードをスクリプトまたは関数としてエクスポート

図 11. MATLAB のデータ クリーナー アプリを使用した時系列データの探索とクリーニング。

MATLAB でデータをクリーニングする方法
ビデオの長さ 5:28

MATLAB でデータをクリーニングする方法

MATLAB のデータ クリーナー アプリを使用して、簡単なクリーニング手順で乱雑なデータをクリーニングし、解析やモデル開発用に準備する方法について説明します。

データクリーニングは、データ解析における重要な最初のステップで、データを後の解析に適した形に整えるために実施します。詳しくは、以下のリソースをご確認ください。