見出し画像

機械学習的な思想、数理最適化の思想

数理最適化というものに出会ったのは、かれこれ25年ほど前です。
それまでは普通にScriptを書いてましたが、
ある仕事でPrologを使いました。
分かってはいましたが、あれ?すげーな と。

通常の言語っぽい書き方
 1)条件文を書く
 2)条件文をループで包んで
 3)目的の条件に沿う答えが出てきたら停止

Prologの書き方
 1)やりたいことをゲームにする。
 2)ゲームのルールを書く。
 3)初期値とゴールの達成条件を書く。

実はPrologも内部では全く同じ動きをするんですが、少なくともユーザーは細かい部分までは考えず下請けに丸投げできる感覚があって凄く好きです。
Prologは深さ優先探索しかできないので、幅優先探索を書こうとすると段々と数理最適化の世界に近づきます。当時はそこまで考えませんでしたが。

準備

さて、まずは数理最適化です。
数年前まで機械学習を知らなかったのでこれが当たり前だと思ってました。

「何ができるの?」 例えば、
 ・今ある冷蔵庫の材料で最も品数を多く作る為のレシピ
 ・   〃      最も高額に売る  〃
 ・   〃      最も量を多くする 〃

数理最適化のアプローチは
 1)現場の運用を見る。
 2)物(アナログ、情報、伝達など)の流れを見る。
 3)そこを通過する際に発生するコスト(もしくはメリット)を数値化。
することによって、実際の世界で起きている現象を抽象的なモデルに置き換えていく事ができます。色んな方法がある様ですが、基本的にはグラフ理論を使っています。その後のモデリングで、グラフネットワークは表になったりすることもあります。これをPythonなりMathematicaで組めば良いです。

数理最適化のメリット
 ・過去の実績情報は要らない。
 ・どんな問題にも適用できる。
デメリット
 ・目的を説明するのが難しい(特に現場の人を相手に)
 ・熟練者の経験則(ロジック、アルゴリズム)を聞き出すのが難しい。
 ・一つの問題を解決するのに長い時間が掛かる。
 ・長年、計算アプリが無かった(最近はOK)
 ・モデリングのスキルは、それ自体が経験則。

特にデメリットの「経験則を聞き出す」というのは今でも難関です。
現場も悪気があって教えないのではなく、分かるから表現できないのです。
 「どうやって人間は倒れずに二足歩行してるんですか」
に分かりやすく答える事ができますか?
足を怪我したりして、歩きにくい経験をするとやっと分かってきます。
分かっていることを伝えるのは、本当に難しいのです。
なので、モデリングの方法自体も私は人にうまく伝える事ができません。

ここで、私にとっては救世主とも言える「機械学習」が登場します。
(私は推進派ですが、あまりにも多くの人が違った考えをしているのに困惑しています)


機械学習、便利ですね!
なにせ、ロジックを考える必要が無い!
勇んで勉強したのですが、違和感。
 「なんで分類問題ばかり載ってるの?」

皆の使い方が分類問題なのは良いんですが、私は多変量解析の代わりに使おうとしているんですよ。だから「回帰問題」が解けないと困る!
と焦っていたら、ちゃんと回帰もできるんじゃ無いですか。良かったと思ったら殆どの本で回帰は数%ほどの記述しか無いんですね。
世の中一般のニーズがそうなんだから、それは仕方が無い事です。

そう思っていると、今度は金融工学の機械学習の本で「時系列予測」ができることも知ります。それはできるでしょうね、これは良いことです。
 「ん?予測できるってことは、これって回帰問題では?」
良いけど、何でそう表現してくれないのかなぁ。
別に、近似した多項式の係数とか要らないのですよ。
ただ分類ではなくて新しいデータが来た時に予測値を出してくれれば良い。
これって「予測」だけど「回帰」ですよね?
問題はここです、「予測」という言葉が普通は使われてるので、皆さんその呪縛に囚われているのでは???と心配する訳です。
(そうでないなら良いです)

本題

先日、「営業Dxpo」なる展示会に行きました。
私はゴリゴリでも無いですが、技術屋であり生産管理屋なので専門外です。
しかしそういう展示会にこそ、宝が眠っているんです。
無事に「誰でも機械学習を触れちゃう安価なアプリ」を見つけました。
 「需要予測アプリ。。。ですか。。。(全然期待してない)
  どの業界向けのアプリですか?」
 「どこでも使えます」
 「ん?妙なことを。。。 デモを見せてもらっても良いですか?」
 「はい」

  ここから先、私はアニメ研究会の上映を見た“浅草みどり“状態。
  もしくはビズリーチのCM。

 「おー、Exelを入れるだけで良いんだ。。。
  え?ひょっとして定性データをワンホットエンコーディングしてる?
  自動的に?すっごい大変なのに。
  え?ハイパーパラメーターの交差検証もしてる?
  分類も予測もしてる?
  しかも、時系列データの扱いも勝手にやってくれる?
  それでどの項目が効いてるのか分かるの?回帰じゃん!
  ほほほほほ、ひでぶー (謎の接尾語)」

興奮が冷めて思ったのは、販売側の人は「予測」の用途しか頭にありません。何で?これって回帰もできるアプリでしょ?重回帰分析は予測じゃねーでしょ?何でデータ分析が可能ですって言わないのかな・・・?実際、Kaggleの人たちってデータのアナライズのツールに機械学習使うって聞いたけど?

どうしてここまで私が回帰にこだわるのか?それは会社の現場は「分類」を求めるのかもしれませんが、上の人たちは「回帰」を求めてるからです。
 「この施策を打てば利益が120%になる?それは凄いね。で、何で?」
どうしてそうなったのか?その理由が知りたいんです。
この機械学習のアプリを決済するのは「回帰」が欲しくて堪らない人達ですよ?どうして「予測」としか言わないのかな???
この件については販売の営業さんにヒアリングしたい。。。

さらにもう一件、不思議なことを聞きました。
某システム会社のすげーシステムです。
私はその場には居なかったので、想像で。
 「当社のシステムはこんなにすげー事が数理最適化で計算できます。
  しかし、お伺いする限りでは御社にはシステムに入力するに値する
  正確なデータが無いようですね。残念です」
これを聞いて、ん?と思いました。

数理最適化というのは私が思うに、データなんぞ少なくても多少は不正確でもそれなりの答えを出せる“べき“だと。
そうか、できないんですかね?
だったらそんな数理最適化、クソじゃねーか。

機械学習、○件以上の教師データが必要なんですよ。だからこの案件には使えませんね? そんな機械学習クソじゃねーか。

数理最適化と機械学習という異なる技術を知ってしまった結果、お互いをいい感じにミックスする使い方を悶々と妄想しています。
 ・データが少なくても良くて(数理最適化でカバーすればいい)
 ・データがガチガチに正確ではなくても良くて(機械学習で 〃 )
そんな事ができる筈なんですけどね。
不思議なことに販売するシステム屋さんは
 機械学習を売りたいくせに、
  機械学習を数理最適化の欠点みたいに見做した事しか言わないで
 数理最適化を売りたいくせに、
  数理最適化を機械学習の欠点みたいに見做した事しか言わず。
なんか、いい感じにミックスすればいいのに。
私の頭の中では出来てるんですが、まだ具体的なものにはしてませんが。
もう少しかかりそう。


蛇足

似たような困ったことは量子コンピューターでも起きてます。
「え?その問題って別に量子コンピューターでなくても解けますよね?
 あなた、組合せ最適化問題のこと、知ってます?」
逆に、量子コンピューターで解けるかもしれないけど、そのアルゴリズム誰が書くの?あなただよ?ってことも。
この辺りはProlog的なアプローチができると面白い。


とか、展示会で声をかけられて
 「シフト勤務スケジューリングできます」
 「おー、ナース・スケジューリングですか。
  それはいい」
 「😃」
 「いえね、ちょうど3次元のナース・スケジューリングを
  作らないといけないんですよ。出来ますか?」
 「アウアウ 失礼しました」
 →その日のうちに本屋に行って、
  列生成法でクリアできることを見つけましたが。

この記事が気に入ったらサポートをしてみませんか?