Technical Articles and Newsletters

MATLAB 解析機能によるデータ駆動型の洞察: 電力負荷の予測のケース スタディ

著者 DeLand および Adam Filion

電気生産者、グリッド オペレーターおよびトレーダーは、配電網に対する今後の負荷の予測に基づいた意思決定を行う必要があります。 電力負荷の正確な予測は必須であり、ビジネス上のアドバンテージになります。

現在では、利用可能なデータ量が非常に多いことから、正確な予測モデルを作成することができます。課題は、生データを意思決定に使えるような洞察に変えるデータ解析フローの構築にあります。典型的なワークフローには次の 4 つの手順があり、それぞれに特有の課題があります。

  1. Web アーカイブ、データベースおよびスプレッドシートなどの異なるデータソースからのインポート
  2. 外れ値やノイズの除去、データセットの結合などのデータクレンジング
  3. 機械学習の手法を使用した集計データに基づいて正確で予測可能なモデルの構築
  4. 開発したモデルの実運用環境への適用、デプロイ

この記事では、MATLAB® を使用して電力負荷予測アプリケーションのデータ解析ワークフロー全体を完成させます。 アプリケーションを使用して、解析者はニューヨーク州内の地域を選択し、過去の電力負荷のプロットおよび予想される今後の負荷を表示します (図 1)。この結果を使用して電力負荷に対する天候の影響を把握し、どの程度の電力を生成または購入するかを決定します。 ニューヨーク州だけで年間に数十億ドル分の電気を消費していることを考えると、この結果は電力生産者にとって重要です。

図 1. ニューヨークの電力需要予測のための MATLAB アプリケーション

データのインポートと解析

このケース スタディでは、New York Independent System Operator (NYISO) Web サイトの電力負荷データと、National Climatic Data Center の天候データ (特に気温と露点) の 2 つのデータセットを使用します。

NYISO は電力データを ZIP ファイルで毎月発行しており、その中には日別のコンマ区切り (CSV) ファイルが含まれています。複数のファイルに分かれているデータを処理する典型的なアプローチは、それらを解析して解析対象のデータ値を確認し、それらの値を完全な形となるようにインポートすることです。

MATLAB のインポート ツールを使用すると、CSV ファイル内の列を選択して選択したデータをベクトル、行列、セル配列およびテーブルなどのさまざまな MATLAB データタイプとしてインポートできます。電力負荷 CSV には、タイム スタンプ、地域名および地域の負荷が含まれます。インポート ツールを使用して、CSV ファイルの列と対象の形式を選択します。サンプル ファイルから直接データをインポートするか、サンプル ファイルの形式と一致するすべてのファイルをインポートする MATLAB 関数を自動的に生成出来るため、これを利用するスクリプトを後ほど作成し、すべてのデータをソースからプログラムする事でインポート作業の自動化も可能です。

図 2. 上: インポート用に選択した CSV データ。下: データをインポートするために自動的に生成された MATLAB 関数。

データをインポートし、プロットすることで、トレンドを特定します。 時間と日付のスタンプを再フォーマットしたり、データ テーブルの行と列を入れ替えることなどのオペレーションを実行します。

データのクリーニングと集計

大半の実際のデータでは値が欠落していたり、エラーのある値が含まれていますが、データを解析する前にこれらを特定して対応しなければなりません。NYISO データを処理し、プロットすると、負荷には、正常な景気上昇や需要におさまらないスパイクがあることに気付きました (図 3)。これらのスパイクが異常でありデータ モデルでは無視してよいものか、それともモデルで考慮すべき現象を示しているのかどうかを判断する必要があります。現在のところ、正常な景気動向のみを調査することにして、モデルでこのような動向を考慮する必要があると判断する場合は後でこのスパイクに対応することにします。

図 3. 需要における異常なスパイクを示す電力負荷のプロット。

スパイクを自動的に特定するには、いくつか方法があります。たとえば、平滑化スプラインを適用して平滑化された曲線と元の曲線の差を計算することで、スパイクを正確に示します (図 4)。

図 4. 上: 異常データが丸で囲まれた、実際の負荷と平滑化された負荷のプロット。下: 実際の値と平滑化された値の差のプロット。

異常なポイントをデータから削除してから、削除によって欠落したデータ ポイントについて何らかのアクションを取る必要があります。 データセットのサイズを減らす目的で欠落したデータポイントについて無視するやり方や、別のサンプルの同等のデータを補間または使用することで、欠落したデータを近似値で代替して、データに偏りがないようにすることもできます。今回は正確なモデルを作成するための “良い” 値が十分にあるため、欠落した値を無視することにします。

同様の手法を使用して気温と露点のデータをクリーンアップしてから、2 つのデータセットを集計します。両方のデータセットは、MATLAB のテーブル型データタイプで格納されます。関数 outerjoin を呼び出して、MATLAB でテーブルの結合が出来ます。 結果が 1 つのテーブルになることで、タイム スタンプごとの負荷、気温および露点に容易にアクセスできます。

予測モデルの構築

MATLAB には、データをモデル化する手法がたくさんあります。パラメーターによって電力負荷に及ぼす影響が異なることがわかっている場合は、統計ツールまたは曲線近似ツールを使用して、線形回帰または非線形回帰によってデータをモデル化します。多くの可変要素が存在していて、基盤となるシステムが特に複雑であるか、方程式が未知である場合は、決定木またはニューラル ネットワークなどの機械学習手法を使用できます。

電力負荷予測には多くの可変要素を含む複雑なシステムが使用されるため、機械学習、特に教師あり学習を選択します。教師あり学習では、ヒストリカルな入力データ (温度) および出力データ (電力負荷) に基づいてモデルが構築されます。モデルの学習が終了すると、このモデルを使用して今後のトレンドを予測出来ます。 ニューラル ネットワークと Neural Network Toolbox™ を使用したワークフローは次のとおりです。

  1. MATLAB で Neural Fitting アプリを使用して以下を行う

    1. 時間、曜日、気温および露点を含む負荷の予測に関連があると思われる可変要素を指定
    2. 過去 24 時間の負荷などのラグ インジケーターを選択
    3. ターゲットまたは予測する可変要素 (この場合は電力負荷) を指定
  2. モデルの学習に使用するデータセットを、モデルのテストに使用するデータセットと共に選択

この例では、1 つのモデルだけを選択しました。実際のアプリケーションのほとんどでは、いくつかの異なる機械学習モデルを試して、学習およびテスト データについてそれらのパフォーマンスを評価します。Statistics and Machine Learning Toolbox™ にはさまざまな機械学習の手法があり、すべてが同様の関数の呼び出し方になり、異なる手法を容易に試すことができるようになっています。またこのツールボックスには、対話的に学習させる教師あり学習モデル向けに分類学習器アプリケーションも含まれています。

学習が完了すると、このテスト データを使用してモデルが新しいデータに対してどの程度優れたパフォーマンスを行っているかを確認できます (図 5)。

図 5. 上: 測定された負荷とニューラル ネットワークから予測された負荷のプロット。下: 測定値と予測値を比較したプロット。

ニューラル ネットワークのセットアップ、学習およびテストのステップを自動化するために、Neural Fitting アプリを使用してスクリプトから呼び出すことができる MATLAB コードを自動生成します。

学習済みのモデルをテストするために、そのモデルを予め用意しておいたデータに対して適用し、その予測値と実際の測定データを比較します。結果は、ニューラル ネットワーク モデルの平均絶対パーセント誤差 (MAPE) がテスト データに対して 2% 以下であることを示します。

テスト データセットに対してモデルを最初に実行すると、モデルの予測値が実際の負荷と大きく異なっている場合がいくつかあることに気付きます。たとえば、祝日の前後に予測したトレンドからの逸脱がみられます。また、2012 年 10 月 29 日のニューヨーク市でのモデルの負荷に対する予測が、数千メガワットと大幅にずれていることがわかります (図 6)。インターネット検索から、この日にはハリケーン サンディがこの地域のグリッドを狂わせたことがわかりました。 定期的な、予測可能である祝日等をモデルで処理するように調整するのは当然ですが、サンディのようなイベントは稀であり、そのための事象のみを考慮する事は困難です。

図 6. 2012 年 10 月 29 日のニューヨーク市について測定された負荷と予測された負荷のプロット。

予測モデルの開発、テストおよび調整のプロセスでは、非常に多くの繰り返し処理が必要になることが多くあります。 Parallel Computing Toolbox™ を使用することで、複数のステップを複数のプロセッサ コア上で同時に実行し、学習とテストの回数を削減できます。 非常に大規模なデータセットの場合は、MATLAB Parallel Server™ を搭載した多くのコンピューター上で並列実行する様に拡張も可能です。

モデルをアプリケーションとして配布

モデルが精度の要件を満たしたら、最後のステップは、それを運用システムに移行することです。 これにはオプションがいくつかあります。MATLAB Compiler™ を使用すると、スタンドアロン アプリケーションまたはスプレッドシート向けのアドインを生成できます。MATLAB Compiler SDK™ を使用すると、.NET および Java® コンポーネントを作成できます。 また、MATLAB Production Server™ を使用すると、多数のユーザーに同時にサービスを提供できるプロダクション環境にアプリケーションをデプロイ可能です。

今回の例では、RESTful API を介してアクセス可能な電力負荷予測ツールを MATLAB で開発しました。 この解析アプリケーションは、レポートとして数値予測とデータのプロットの両方を返します。 Production Server Compiler アプリを使用して、配布する MATLAB 関数を指定するだけで、依存関係の解析を自動的に実行し、必要なファイルを 1 つの配布可能なコンポーネントにパッケージ化します。MATLAB Production Server を使用してこのコンポーネントを処理エンジンとしてデプロイし、Web アプリケーション、その他のサーバーおよびモバイル機器を含む、ネットワーク上のすべてのソフトウェアまたはデバイスで解析を利用できるように出来ました。

図 7. Apache Tomcat および MATLAB Production Server を使用して運用環境に展開された MATLAB でのデータ解析。

次のステップ

ここで開発した電力負荷予測モデルは、非常に精度の高い予測を行うことができ、これらの予測は Web フロント エンド経由で使用されます。 モデルは数か月分のテスト データに対して検証されているため、実際の負荷を 2% 以内に収めて 1 日中予測を行うという機能が提供できています。

このモデルは、祝日カレンダーや天候に関する重大な警告などの追加のデータ ソースを組み込むように拡張できます。 全体のデータ解析ワークフローは MATLAB コードで作成されているため、データの追加のソースを既存のデータに簡単に結合でき、モデルの再学習も容易です。 新しいモデルを MATLAB Production Server に一度配布すると、電力負荷予測アプリケーションの背後にあるアルゴリズムは自動的に更新され、エンド ユーザーは Web ページをリフレッシュする必要さえありません

年作成 2015 - 92308v00


関連する産業分野の記事を見る