Slide 1

Slide 1 text

0 Gurobi Machine Learning 2 機械学習と数理最適化の統合 2023-10-06 第63回NearMe技術勉強会 @yujiosaka

Slide 2

Slide 2 text

1 前回のおさらい

Slide 3

Slide 3 text

2 対象を4章限に分類

Slide 4

Slide 4 text

3 変数Zを導入して、教師として学習 Pythonコード例 1モデル // 学習データ df = pd.DataFrame({ 'y': [1, 0, 1, 0], //合格したか?(response) 't': [1, 1, 0, 0], // 勉強したか?(treatment) 'x1': [0.2, 0.8, 0.3, 0.4], 'x2': [0.4, 0.4, 0.2, 0.2] }) x = df[['x1', 'x2']] z = 1 - (df['y'] ^ train['t']) // z = [1, 0, 0, 1] model.fit(x, z) // どんな分類器でも可

Slide 5

Slide 5 text

4 介入の回数や予算に制約がある場合に効果を最大化させたい 例: 試験に合格したn人の学生に対して、奨学金を配ることで入学する学生数を最大化させたい。 ただし、奨学金には予算上限があり、1人あたり250万円以内、n*0.2人までにしか配れない。 過去の実績から、配った奨学金とその他の変数(家族の収入、家族構成、成績)から1人1人の学生の入 学率が予測できる時、どの学生に対して奨学金をどれだけ配るべきか? アップリフトモデリングが答えてくれない問題 数理最適化と機械学習の統合が必要 → Gurobi Machine Learning

Slide 6

Slide 6 text

5 5 https://github.com/yujiosaka/causal-inference-demo-with-gurobi-machine-learning

Slide 7

Slide 7 text

6 既知のデータを学習することで、未知のデータについて予測する 通常高速 回帰 ● スパムフィルタ ● 画像認識 予測 ● 株価予測 ● 不動産価格予測 与えられた制約内で厳密な解を求めるのは苦手 機械学習の得意分野 制約を破ると罰則を与える等のアプローチがあるが、厳密な解は通常得られない(アート)

Slide 8

Slide 8 text

7 与えられた制約の中で、厳密な最適解を見つける 通常時間がかかる ● セールスマン巡回問題 ● 配送計画問題 ● ナップサック問題 ● スケジューリング問題 リソース(時間、お金)に限りがある場合に用いられる 数理最適化の得意分野 意思決定に有効

Slide 9

Slide 9 text

8 よく使われる例 雨が降りそうだ(機械学習) 誰に傘を配ろうか?(数理最適化)

Slide 10

Slide 10 text

9 試験に合格したn人の学生に対して、奨学金を配ることで入学する学生数を最大化させたい。 ただし、奨学金には予算上限があり、1人あたり250万円以内、 かつ合計n*20万円までを予算上限としたい。 過去の実績から、配った奨学金とその他の変数(家族の収入、家族構成、成績)から1人1人の学生の入 学率が予測できる時、どの学生に対して奨学金をどれだけ配るべきか? 奨学金を配ると、その学生の入学はどれぐらい高くなるのか? どの学生に奨学金を配るべきか? 問題 (機械学習) (数理最適化)

Slide 11

Slide 11 text

10 統合のアプローチ

Slide 12

Slide 12 text

11 ● 機械学習で前処理(クラスタリング等)してから数理最適化を行う ● 機械学習で予測モデルを用意してから、その予測モデルを数理最適化に当てはめる ○ 予測モデルを数式に近似する ○ 予測モデルを数理最適化の変数として埋め込む 機械学習 → 数理最適化 Gurobi Machine Learning 費用制約のもとでのクーポン配信による売上最大化

Slide 13

Slide 13 text

12 ● 過去の数理最適化の結果(変数と解)を学習させて、新しい問題を高速に解く ○ 新しい問題に対して、数理最適化を介さずに機械学習の結果を返す ○ 機械学習が解のヒントや制約を返し、数理最適化を高速化する 数理最適化 → 機械学習 MIPLearn

Slide 14

Slide 14 text

13 ● 機械学習を使って数理最適化のパラメータを学習し、より良い組み合わせを選択 機械学習 ⊃ 数理最適化 数理最適化 ⊃ 機械学習 ● 数理最適化を使って機械学習の特徴選択をサポートする ● 数理最適化を使って決定木を最適化(できるらしい) ○ 参考:https://www.youtube.com/watch?v=l1b3qEO8_Z

Slide 15

Slide 15 text

14 ● 機械学習 → 数理最適化 ● 数理最適化 → 機械学習 ● 機械学習 ⊃ 数理最適化 ● 数理最適化 ⊃ 機械学習 ● 上記4つの組み合わせ 5つのアプローチ ← Gurobi Machine Learning

Slide 16

Slide 16 text

15 ● 予測モデルを数理最適化の変数に組み込む ● 機械学習の結果を数理最適化の変数に組み込むだけで良いのでは? Gurobi Machine Learning のユースケース 天候や過去の傾向から需要や配送時間を計算してからVPRを解く 都市をクラスタリングしてからネットワーク最適化を行う https://www.logopt.com/2020/10/19/%E3%82%B1%E3%83%BC%E3%82%B9%E3%82%B9%E3%82%BF%E3%83%87%E3%82%A3-%EF%BC%9

Slide 17

Slide 17 text

16 ● MNIST手書きデータセットに対する「最適な」敵対的サンプル生成 ● 非線形関数をReLuを使ったニューラルネットワークによって近似する ● 奨学金による入学する学生数の最大化 ● 価格調整による収益の最大化 Gurobi Machine Learning のサンプル集 https://gurobi-machinelearning.readthedocs.io/en/stable/mlm-examples/2DPeakFunction.html https://gurobi-machinelearning.readthedocs.io/en/stable/mlm-examples/adversarial_mnist.html https://gurobi-machinelearning.readthedocs.io/en/stable/mlm-examples/student_admission.html https://gurobi-machinelearning.readthedocs.io/en/stable/mlm-examples/price_optimization.html 因果推論とアップリフトモデリングに近い分野

Slide 18

Slide 18 text

17 ● 奨学金による入学する学生数の最大化 ○ 奨学金を配ることで、学生の入学率はどのように変化するだろうか? ○ 奨学金をどのように配ることで、学生の入学数を最大化できるだろうか? ● 価格調整による収益の最大化 ○ 価格を調整することで、収益はどのように変化するだろうか? ○ 価格をどのように調整することで、収益を最大化できるだろうか? 機械学習と数理最適化の統合 (機械学習) (数理最適化) (機械学習) (数理最適化) 価格調整による推定収益をGurobi Machine Learningの変数に組み込む 奨学金による学生の推定入学率をGurobi Machine Learningの変数に組み込む

Slide 19

Slide 19 text

18 import pandas as pd from sklearn.linear_model import LogisticRegression import gurobipy as gp from gurobi_ml import add_predictor_constr import gurobipy_pandas as gppd historical_data = pd.read_csv(...) studentsdata = pd.read_csv(...) regression = LogisticRegression() regression.fit(X=historical_data.loc[:, [“merit”, “SAT”, “GPA”]], y=historical_data.loc[:, ”enroll”]) Gurobi Machine Learningの使い方(奨学金による入学数最大化) 1. 機械学習モデルを用意する

Slide 20

Slide 20 text

19 m = gp.Model() # 入学率を変数 “y” とする y = gppd.add_vars(m, studentsdata, name='enroll_probability') # 1人あたりの奨学金の上限(250万円)を制約に加える studentsdata = studentsdata.gppd.add_vars(m, lb=0.0, ub=2.5, name='merit') # 配る奨学金の金額を変数 “x” とする x = studentsdata.loc[:, "merit"] Gurobi Machine Learningの使い方 2. 普通の定式化を行う

Slide 21

Slide 21 text

20 # 目的関数を定式化する m.setObjective(y.sum(), gp.GRB.MAXIMIZE) # 予算制約を定式化する m.addConstr(x.sum() <= 0.2 * nstudents) # 機械学習モデルを制約に加える pred_constr = add_predictor_constr(m, regression, studentsdata, y, output_type="probability_1") # 最適化を実行する m.optimize() # 結果を出力する pred_constr.input_values Gurobi Machine Learningの使い方 3. 機械学習のモデルを制約に加える

Slide 22

Slide 22 text

21 Gurobi Machine Learningの使い方

Slide 23

Slide 23 text

22 モデルを数式に直接置換、または区分線形関数で近似 Gurobi Machine Learning の仕組み ロジスティック回帰 ReLU

Slide 24

Slide 24 text

23 サポートしているモデルや変換器が限定されている ● モデル(scikit-learn, Keras, PyTorch) ○ 線型回帰 ○ ロジスティック回帰(唯一の二分類器) ○ ニューラルネット(ReLu全結合のみ) ○ 決定木・ランダムフォレスト ○ 勾配ブースティング ● 変換器 ○ StandardScaler ○ PolynomialFeatures ○ ColumnTransformer サポートしていないモデルを使用しようとするとエラーになる Gurobi Machine Learning の制約

Slide 25

Slide 25 text

24 デモ https://github.com/yujiosaka/causal-inference-demo-with-gurobi-machine-learning/blob/main/lab/1.%20Causal%20inference%20demo%20wit h%20Gurobi%20Machine%20Learning.ipynb

Slide 26

Slide 26 text

25 Thank you