はじめよう実験計画

実験を早く終わらせるための技術

DSDApp|決定的スクリーニング計画のための無料webツール

決定的スクリーニング計画専用webツール(無料)

こちらです→DSDApp

webツール開発の背景と本記事の内容

決定的スクリーニング計画(Definitive Screening Design, 略してDSD)とは、2011年にJonesとNachthiemによって提唱された実験計画法であり、3水準の実験を2×要因数+1~5回の試行回数で終了させることが出来る画期的な手法です(例: 要因数=6の場合、6×2+1=13回が最小の計画)。DSDについてはこちらの記事をご覧ください。

www.doe-get-started.com

この度、DSDを実行できるwebツール、題して"DSDApp"の開発に取り組んだのは、次のような理由があったからです。DSDは非常にパワフルで効率的な実験計画法なのですが、①直交計画のように単純な水準の組合せで計画表を作成することが出来ないこと、②結果の解析には赤池情報量基準(AIC)などの基準を用いたモデル選択が推奨される、という主に2つのハードルがあり、DSDを適用するには、プログラミングのスキルか、あるいは高額な商用ソフトウェアが必要だという問題がありました。

本格的に使い倒す人なら、プログラミングの技術を習得するか、ソフトウェアを買ってもいいと思いますが、とりあえず試してみようという人にとっては、DSDのハードルは簡単には超えられないものがあります。

そこで、DSDをweb上でクリックだけで実行できるツールDSDAppを開発しましたので、ぜひ体験していただければと思います。以下、DSDAppの使用方法を説明します。

使用方法(簡単に)

DSDAppには3つの画面があります。

  1. 計画作成
  2. モデル構築
  3. 最適化

画面1で計画を作成し、その計画に従って実験をします。実験で得られた結果をcsvまたはtxtファイルに入力し、画面2でそのファイルをアップロードします。また、画面2では要因を指定してモデルを作成します。画面3では、作成したモデルを使って、目的変数を最大化/最小化/指定の値に最適化することができ、その値を得るためのパラメータ調整ができます。最適化では複数の目的変数を同時に最適化することもできます(多目的最適化)。

図1 DSDApp各画面

それでは、より詳細な操作方法を以下で説明します。

 

計画作成

図2は計画の作成画面です。Number of factors, Center runの数値を変更して、目的の要因数の決定的スクリーニング計画が出力されます。Downloadボタンを押すと、表示されている計画表をダウンロードできます。

また、Generate sample dataにチェックを入れると、事前に与えた式に従って目的変数yの値を付けることができるので、DSDの練習に使用できます。

図2 計画の作成画面

モデル構築

モデル構築の画面では、以下のstepでモデルを構築します。

(1) 結果ファイル(.csvまたは.txt)のアップロード→Table, Plotで読み込みできているか確認する。出力変数、入力変数、Fake factorの指定する。

図3 結果のアップロードと変数の指定

(2) Find active termsを押すとStep1に有効な主効果と2次効果の検出結果が表示される。Model selectionは特に指定がなければHereditary AICcでよい。これは主効果と主効果に含まれる項の二次効果のみをモデルに含まれる項の候補とする、という設定である。AICcにチェックを入れると、すべての1次・2次項が候補の対象になる。

図4 有効な主効果と2次効果の検出

(3) Step2の入力欄で有効な要因を指定してBuild modelを押す。モデルの結果はStep2タブに出力される。棒グラフは効果の大きさ、散布図は実測値 vs. モデルの予測値を表し、赤点が一直線上にあれば実測値とモデルの予測値が一致している。

図5 最終モデルの作成と評価

(4)作成されたモデルはPredictタブに表示される。変数を入力すると予測値が出力される。モデルを吟味し、最適化に進む場合はRegisterボタンをクリックする。

 

最適化

最適化の画面では、上で登録したモデルを用いて、目的変数を最大化(Maximize)/最小(Minimize)化/指定の値(Target)に近づけます。これらの異なる目的はPurposeのセレクターで選択します。最適化は満足度関数D(Y)を最大化することで行われます。

図6 最適化

図6では、Target Yに-10を、Upper Yに0を指定して最小化を実行しています。ここで、Target YとUpper Yは下図7のように設定し、満足度関数DはY<-10のときD=1、Y>0のときD=0となるようにしています。この満足度関数Dを最大化することで最小のYを得ようというやり方です。満足度関数を用いた最適化に関しては別の記事で説明しようと思いますが、意味合いとしては、Target Yは目標値であり、Upper Yは許容できる上限値です。

図7 満足度関数の例

図6に戻っていただいて、Maximize Desirabilityを押すと、Dを最大化(今回の例ではYの最小化)するような変数(A, B, C, D)の組が返されます。Predictionはその(A, B, C, D)におけるYの予測値です。Dtは満足度関数の値で、Dt=1.0はY~Target Yに最適化出来たことを意味します(Prediction値は-10より大きいので厳密にはDt=0.99~ですが、少数第2位を丸めてしまっているので1.0となっています)。Dt=0の場合はY>Upper Yなので、最適化できていません。

また、DSDAppでは、上記の最適化を多目的最適化に拡張することもできます。しかし、そのやり方をここで書くと長くなりそうなので、いつか説明動画を作りたいなと思っています。

 

あとがき

このアプリは、クレーン資格取得の学校で、授業中に構想を練りました。クレーンの資格は中学校の物理とか、ベクトルの計算とかの授業を1日中聞いていないといけなくて、何かしていないと死にそうで....でもそのおかげでアプリの動作や、構成などをゆっくり考えることが出来ました。

はじめてのアプリ制作でしたが、難しかったのはエラーを消すこと。ある一定の動作だけなら問題なく動くが、クリックする順番が違うと、赤字のエラーがバーッと出ることがあって、自分でいろんなところをクリックしまくって、エラーを見つけて、コードを修正する、ということの繰り返しが辛かった(笑)。世の中のアプリは本当にたくさんの努力の結晶なのだと、実感することが出来ました。

本記事で説明しきれていない部分も結構あるので、もし使ってくれる方がいれば、疑問点などコメント頂けると幸いです。

DSDAppはこちら