読者です 読者をやめる 読者になる 読者になる

システム社会への警告

数理コーディネータの必要性

私はこれまで

在庫や需要予測などの様々な分析パッケージを検証してきました。

お客さんの多くの悩みは導入したシステムの予測精度が合わない。検証してくださいと要求され、検証を行うと多くの計算上のミスを発見します。

お客さんの悩みの主訴はプログラムは正常に動くのだけど予測精度が経験上の認識と違う、そもそもの値の範囲が大きすぎる。

例えば、 ルートの中身が0であったり。DIV/0であったりします。通常のデバックで発見されるはずですが、便宜上、適当な数値でのエラー回避処理がなされまったく検討違いの値が代入され、さも正しい値が出力されているかのように示されています。

 

具体例

私が見た在庫最適化ソリューションの需要予測をするために必要な変数パラメータを入力する テキストボックスには何の制約条件処理を施していなく。

「安全在庫量=安全係数×出庫量の標準偏差×√調達リードタイム」の設定インターフェースの調達リードタイムのルートの中に0をインプットできるようになっていたり

 上記の式で安全係数のパラメータにも0が入力できる無制限のインプットとなっていました 上記の安全係数は標準正規分布(Standard Normal Distribution)なので入力パラメータに0と入力すれば平均 μ の意味合いが計算されなくなってしまいます

あくまでもこの0は予測は偏りのないものと仮定しているわけですから安全係数として0を入力してしまうと係数の考え方と異なる計算結果になってしまいます。

 つまりここでは標準正規分布表に従った数値の配列を選択するように入力設計をすべきです。

http://www.koka.ac.jp/morigiwa/sjs/standard_normal_distribution.htm

 係数といういみでは以下の表の5つの係数を入力できれば十分条件となるわけです。

  N(0, 1)     N(50, 16)     N(μ,σ2)    確率(%)
 -1 → 1  -46 → 54  μ - σ → μ + σ 68.3
 -1.96 → 1.96  -42.16 → 57.84  μ - 1.96σ → μ + 1.96σ 95.0
 -2 → 2  -42 → 58  μ - 2σ → μ + 2σ 95.4
 -2.58 → 2.58  -39.68 → 60.32  μ - 2.58σ → μ + 2.58σ 99.0
 -3 → 3  -38 → 62  μ - 3σ → μ + 3σ 99.7

プログラム的なミスで言えば    

  1. アルゴリズムとは違った形での実装
  2. 添え字 i について i = 1, ..., N まで、和をとる必要があるにもかかわらず途中までしか和を計算していない。
  3. 使用前に、0で初期化すべき変数を初期化していない。
  4. 配列への代入の際に、間違った場所に代入している。
  5. 使用する必要のない大きな配列をいくつも宣言している。一時的にか使用しない配列を多量に宣言。         
  6. 0*0, 0+0 などの完全に無駄な演算を多量に行っている。一度計算して求まっている値を各反復で繰り返し行っている。
  7. 参照元が誤っている。
  8. 小数点の丸める桁の統一がされていない

その他、非効率・無意味なルーティンを度々行っている。

 

この課題の解決の方法は至って簡単である

金融工学ならば金融工学のモデル公式を当てはめれば良い

在庫最適や需要予測のモデルの公式を検証して見ればよい。

やり方としては、インプットするデータをエクセルなどで計算可能なデータサンプルをとり、実際にエクセルでモデルや公式を再現して値を算出し、プログラムが出す。値と検証してみると良い。 値が近似値にもなってなければ、導入したプログラムはいい加減な計算をしているということになる。

 

多くの経営者やユーザーはプログラムが止まることなく それらしいアウトプットがでればシステムは正しいと認識するであろうが、システムが動いても、計算式があやまっていたり、論理構造があやまっていたり、制約条件が適切でなかったり、前提が違っていたりしたら、そのシステムは無用の長物です。

バックテストは重要です

なので業務用の分析システムを導入する時は必ず数式やモデルのバックテストを行い

モデル計算の値を検証しなければ、なりません

手順としては

  1. 取引情報が正しく取り込まれているか。
  2. 評価レートが正しく設定されてるか(しきい値やパラメータ)
  3. 評価計算は正しいか
  4. モデル内部の前提に無理はないか
  5. システム実装に誤りないか
  6. ヒストリカルデータには品質上の問題はないか
  7. 分散・共分散の推定方法は妥当か
  8. インプリメーションエラーについての検証と対策

私はこういった数式検証、モデル検証は現代社会にとってもっとも大切なことであると考えています。

 

私はこういった課題解決をしていくために仕事をしていきたい。

 

坂入 譲