ソフトセンサーを試してみたい、プラントのデータを使ってソフトセンサーで推定してみたら、どれくらいの誤差で推定できるのか確認してみたい、という方はいらっしゃると思います。
試してみて良い結果が出ると、さらにソフトセンサーを勉強するモチベーションも上がりますしね。
ただ、とりあえず試してみるといっても、
- ソフトセンサー (回帰モデル) を構築するためには、ツールとかアプリの使い方を調べたり、プログラミングを学んだりしないといけない
- 適応型ソフトセンサーにするためには、ソフトセンサー (回帰モデル) を更新する機能を自分で搭載する必要がある (プログラミングが必須)
といった感じで、かなりハードルは高めです。ちなみに適応型ソフトセンサーについてはこちらをご覧ください。
また、ちょっと試してみるにしても、間違って解析してしまって、悪い結果が出たらそれで諦めてしまい、もったいないです。逆に良い結果が出ても、それが間違えによって良い結果になっていたら、それに気付くまでの時間がもったいないです。たとえば、適応型ソフトセンサーで予測するプロセス変数 (目的変数 Y) には測定時間がかかるにもかかわらず、Y の値を予測した直後に Y の実測値が得られてソフトセンサーを更新してしまい、後にソフトセンサーを実装したときに、思ったより推定精度が上がらない、、、などです。
つまり、
簡単に、妥当な (適応型) ソフトセンサーを試してみる
ことが求められているわけです。
そこで今回は、クリックだけで適応型ソフトセンサーを試せるアプリ 「DCE soft sensor」 を作りました。なお Windows 10 Pro でのみ動作確認をしており、特に macOS では使用できないと思います。ご注意ください。
搭載されている手法は、ガウス過程回帰 (Gaussian Process Regression, GPR) と
Locally-Weighted Partial Least Squares (LWPLS, 局所PLS) です。
なお GPR は Moving Window (MW) 型の適応型ソフトセンサーである MWGPR にもできますし、LWPLS はデータベースを更新して just-in-time モデリングすることもできます。
この MWGPR と LWPLS により以下の 5 つのことができます。
- データセットをある時刻を基準にしてトレーニングデータとテストデータに分け、トレーニングデータを用いて目的変数 Y と説明変数 X との間でソフトセンサー Y = f(X) を構築し、テストデータの Y の値をソフトセンサーに X の値を入力することで推定する
- X の時間遅れを考慮してソフトセンサーを構築したり、ソフトセンサーで予測したりする
- クロスバリデーションにより GPR, LWPLS の最適なハイパーパラメータを選択する
- テストデータにおいて Y の測定時間を考慮して、新たな Y の実測値を用いてデータベースを更新することで、ソフトセンサーを適応型ソフトセンサーにする
- MWGPR では Y の予測値と一緒に、その標準偏差も出力し、予測値の信頼性、すなわち AD を考慮する
さらに機能が追加されました!
それでは今回のアプリ DCE soft sensor の説明をします。まず以下から zip ファイルをダウンロードし、解凍してください。
解凍しましたら、その dce_soft_sensor フォルダの中で、dce_soft_sensor.exe を探してください (ファイルの数が多くてすみません。。。)。下図のように見つかると思います (拡張子を表示しない設定ですと、「dce_soft_sensor」 しか表示されないかもしれません)。
見つかりましたら、dce_soft_sensor.exe (もしくは dce_soft_sensor) をダブルクリックしてください。少し時間が経った後に、下のようなウィンドウが開くと思います。
同時に以下のような黒いウィンドウも開きますが、気にしなくて構いません (不具合が起きたときの原因探索に役立ち、問題ないときは特に使用しません)。
続いて DCE soft sensor の設定についてです。まず DCE soft sensor では、下図のような 「time_series_data.csv」 という名前のデータセットのファイルが必要です。
「time_series_data.csv」 の決まりごとは下の 6 つです。
- 新しい時刻ほど下になるようにサンプルを並べ、一番左の列 (A列) は、0, 1, 2, … と、0 から 1 ずつ増える値にする
- B 列を Y にする
- C 列以降を X にする
- Y が測定されていない時刻の Y の値は、直近の Y の測定値と同じ値を入れておく (上図において、時刻 20 で新たな Y の値が測定されている)
- A 列の時刻は、Y の測定値が得られた時刻ではなく、サンプリングした時刻とする (上図において、時刻 20 にサンプリングして、それから Y の測定値が得られるまでに時間 15 がかかったとするとき、時刻 35 に Y の測定値を入れるのではなく、サンプリングした時刻 20 に測定値を入れる)
- csv を dce_soft_sensor.exe と同じフォルダに置く
なおサンプルデータセットは、こちらの本にある排煙脱硝装置 (Sulfur Recovery Unit, SRU) のデータセットです。リンク先から元のデータセットをダウンロードできます。今回はソフトセンサーの対象っぽくするため、y は 20 分ごとに測定されていると仮定しました。
次にウィンドウの 「* Set parameters for prediction」 についてです。「Start time of test data :」 には、テストデータがはじまる時刻を設定してください。時刻は time_series_data.csv における A 列の時刻に対応します。設定した時刻より前までのサンプルが、トレーニングデータになります。なお、設定した値が 0 以下だったり、元のデータセットのサンプル数以上だったりしたときは、3 割のサンプルがテストデータになるように自動的に設定されます。
「Measurement delay in Y :」 には Y の測定にかかる時間を設定してください。適応型ソフトセンサーでテストデータを予測するときに、X の値から Y の値を予測した後、その時刻に Y の測定値がある場合は、設定した時間だけあとに Y の測定値が得られ、データベース (トレーニングデータ) が更新されることになります。
「Max time delay in X to Y :」 と 「Span of time delay in X to Y :」 で、Y に対する X の時間遅れを設定します。前者で最大の時間遅れを、後者で時間遅れの幅を設定します。例えば、「Max time delay in X to Y :」 が 10、「Span of time delay in X to Y :」 が 2 のときには、Y に対して 0, 2, 4, 6, 8, 10 だけ遅れた X の変数を使用することになります (0 は時間遅れなしです)。なお時間は time_series_data.csv における A 列の時刻に対応します。
「* Select modeling method」 では MWGPR か LWPLS を選択します。MWGPR を選択した場合は、「Window size :」 で窓幅を設定します。テストデータを予測するときは、直近に測定された 「Window size :」 の数のサンプルで GPR モデルが構築されます。LWPLS を選択した場合は、「Max sample size :」 でデータベースに (トレーニングデータとして) 保管しておく Y の測定された最大のサンプル数を設定します。テストデータを予測するときに、Y の測定されたサンプルが 「Max sample size :」 を上回った場合は、最も古いサンプルが削除されます。
DCE soft sensor では GPR のカーネル関数や LWPLS のハイパーパラメータを、クロスバリデーションにより最適化します。「* Select fold number in cross-validation」 ではクロスバリデーションにおける分割数を設定します。初期設定では、5-fold クロスバリデーションになっています。それを 2-fold クロスバリデーション、10-fold クロスバリデーション、leave-one-out クロスバリデーションに変更できます。「number of samples」 が leave-one-out クロスバリデーションに対応しています。クロスバリデーションについてはこちらをご覧ください。
サンプルが多いときには 2 や 5 がよく、逆にサンプルが少ないときには number of samples (leave-one-out クロスバリデーション) がよいと思います。目安としては、
- 1000サンプル以上 : 2-fold クロスバリデーション
- 1000 から 100 くらいまで : 5-fold クロスバリデーション
- 100 から 30 くらいまで : 10-fold クロスバリデーション
- 30未満 : leave-one-out クロスバリデーション (number of samples)
といった感じです。
「* Select kernel functions in MWGPR」 では、こちらに記載されている 11 個のカーネル関数から、用いるもののみを選択できます (LWPLS を選択したときは関係ありません)。
「Select all」 をクリックすると、すべてのカーネル関数が選択されます。選択されたカーネル関数が複数の場合は、その中で 「* Select fold number in cross-validation」 で選択したクロスバリデーション後の r2 が最大となるカーネル関数が選ばれます。
設定が終了したら、「Modeling and prediction」 をクリックして実行しましょう。以下のように解析が進みます。
- X の時間遅れ変数を考慮した上で、トレーニングデータとテストデータに分割する
- トレーニングデータを用いたクロスバリデーションにより、GPR のカーネル関数や LWPLS のハイパーパラメータの値を選択する
- 選択されたカーネル関数やハイパーパラメータで、トレーニングデータを用いてソフトセンサーを構築する
- トレーニングデータの推定結果を results フォルダに estimated_y_in_detail_[手法の名前].csvとして保存する
- クロスバリデーションの結果をウィンドウに表示するとともに、results フォルダに estimated_y_in_cv_in_detail_[手法の名前].csvとして保存する
- 適応型ソフトセンサーでテストデータを予測し、予測結果をウィンドウに表示するとともに、results フォルダに estimated_y_in_test_[手法の名前].csv, estimated_y_in_test_in_detail_[手法の名前].csvとして保存する
終了すると以下のようなウィンドウになります (MWGPR の場合)。
なお保存される csv ファイルの詳細は以下のとおりです。
- estimated_y_in_detail_[手法の名前].csv: トレーニングデータにおいて、Y の測定値のあるサンプルごとに、実測値 (actual_y)、推定値 (estimated y), 推定誤差 (error_of_y(actual_y-estimated_y) が並んでいます
- estimated_y_in_cv_in_detail_[手法の名前].csv: トレーニングデータにおいて、Y の測定値のあるサンプルごとに、実測値 (actual_y)、クロスバリデーション推定値 (estimated y), 推定誤差 (error_of_y(actual_y-estimated_y) が並んでいます
- estimated_y_in_test_in_detail_[手法の名前].csv: テストデータにおいて、Y の測定値のあるサンプルごとに、実測値 (actual_y)、推定値 (estimated y), 推定誤差 (error_of_y(actual_y-estimated_y) が並んでいます
- estimated_y_in_test_[手法の名前].csv: テストデータにおけるサンプルごとに、予測値(predicted y)、予測値の標準偏差(std of predicted y) [MWGPR のみ] が並んでいます
またウィンドウの左上の図は、トレーニングデータにおける Y の実測値 (actural y) vs. クロスバリデーション推定値 (estimated y in CV) のプロットです。右下の図は、テストデータにおける Y の実測値 (actural y) vs. 推定値 (estimated y) のプロットです。右下の図は、横軸を時刻 (time_series_data.csv の A 列に対応) にしたときの、実測値 (赤点)、推定値 (青線) のプロットです。なお MWGPR のときは、推定値の標準偏差の±2倍 (2σ) も黒線で表示されます
なお終了するときは、「Quit」 ボタンか右上の × ボタンをクリックしてください。
ご自身のデータセットを、time_series_data.csv と同様の形式で整理していただければ (上のの 6 つの決まりごとをお守りください)、このアプリで解析することができます。Y の数は 1 つにする必要がありますが、X の数およびサンプル数はいくつでも構いません。
以上が本アプリの説明になります。ぜひご活用いただき、さらなるソフトセンサー解析のためのモチベーションにつなげていただければと思います。
また、「DCE soft sensor」を現場で使えるように、オンライン予測およびオンラインモデル更新の機能を追加いたしました。詳しくはこちら↓をご覧ください。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。