Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Gurobi Machine Learning 2 機械学習と数理最適化の統合
Search
NearMeの技術発表資料です
PRO
October 13, 2023
0
410
Gurobi Machine Learning 2 機械学習と数理最適化の統合
NearMeの技術発表資料です
PRO
October 13, 2023
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
ガウス過程回帰とベイズ最適化
nearme_tech
PRO
0
35
確率的プログラミング入門
nearme_tech
PRO
2
35
Observability and OpenTelemetry
nearme_tech
PRO
2
29
観察研究における因果推論
nearme_tech
PRO
1
72
React
nearme_tech
PRO
2
33
Architecture Decision Record (ADR)
nearme_tech
PRO
1
820
遺伝的アルゴリズムを実装する
nearme_tech
PRO
1
46
Fractional Derivative!
nearme_tech
PRO
1
37
GitHub Projectsにおける チケットの ステータス更新自動化について
nearme_tech
PRO
1
58
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Embracing the Ebb and Flow
colly
84
4.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Documentation Writing (for coders)
carmenintech
65
4.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Teambox: Starting and Learning
jrom
133
8.8k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Transcript
0 Gurobi Machine Learning 2 機械学習と数理最適化の統合 2023-10-06 第63回NearMe技術勉強会 @yujiosaka
1 前回のおさらい
2 対象を4章限に分類
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) // どんな分類器でも可
4 介入の回数や予算に制約がある場合に効果を最大化させたい 例: 試験に合格したn人の学生に対して、奨学金を配ることで入学する学生数を最大化させたい。 ただし、奨学金には予算上限があり、1人あたり250万円以内、n*0.2人までにしか配れない。 過去の実績から、配った奨学金とその他の変数(家族の収入、家族構成、成績)から1人1人の学生の入 学率が予測できる時、どの学生に対して奨学金をどれだけ配るべきか? アップリフトモデリングが答えてくれない問題 数理最適化と機械学習の統合が必要 →
Gurobi Machine Learning
5 5 https://github.com/yujiosaka/causal-inference-demo-with-gurobi-machine-learning
6 既知のデータを学習することで、未知のデータについて予測する 通常高速 回帰 • スパムフィルタ • 画像認識 予測 •
株価予測 • 不動産価格予測 与えられた制約内で厳密な解を求めるのは苦手 機械学習の得意分野 制約を破ると罰則を与える等のアプローチがあるが、厳密な解は通常得られない(アート)
7 与えられた制約の中で、厳密な最適解を見つける 通常時間がかかる • セールスマン巡回問題 • 配送計画問題 • ナップサック問題 •
スケジューリング問題 リソース(時間、お金)に限りがある場合に用いられる 数理最適化の得意分野 意思決定に有効
8 よく使われる例 雨が降りそうだ(機械学習) 誰に傘を配ろうか?(数理最適化)
9 試験に合格したn人の学生に対して、奨学金を配ることで入学する学生数を最大化させたい。 ただし、奨学金には予算上限があり、1人あたり250万円以内、 かつ合計n*20万円までを予算上限としたい。 過去の実績から、配った奨学金とその他の変数(家族の収入、家族構成、成績)から1人1人の学生の入 学率が予測できる時、どの学生に対して奨学金をどれだけ配るべきか? 奨学金を配ると、その学生の入学はどれぐらい高くなるのか? どの学生に奨学金を配るべきか? 問題 (機械学習)
(数理最適化)
10 統合のアプローチ
11 • 機械学習で前処理(クラスタリング等)してから数理最適化を行う • 機械学習で予測モデルを用意してから、その予測モデルを数理最適化に当てはめる ◦ 予測モデルを数式に近似する ◦ 予測モデルを数理最適化の変数として埋め込む 機械学習
→ 数理最適化 Gurobi Machine Learning 費用制約のもとでのクーポン配信による売上最大化
12 • 過去の数理最適化の結果(変数と解)を学習させて、新しい問題を高速に解く ◦ 新しい問題に対して、数理最適化を介さずに機械学習の結果を返す ◦ 機械学習が解のヒントや制約を返し、数理最適化を高速化する 数理最適化 → 機械学習
MIPLearn
13 • 機械学習を使って数理最適化のパラメータを学習し、より良い組み合わせを選択 機械学習 ⊃ 数理最適化 数理最適化 ⊃ 機械学習 •
数理最適化を使って機械学習の特徴選択をサポートする • 数理最適化を使って決定木を最適化(できるらしい) ◦ 参考:https://www.youtube.com/watch?v=l1b3qEO8_Z
14 • 機械学習 → 数理最適化 • 数理最適化 → 機械学習 •
機械学習 ⊃ 数理最適化 • 数理最適化 ⊃ 機械学習 • 上記4つの組み合わせ 5つのアプローチ ← Gurobi Machine Learning
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
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 因果推論とアップリフトモデリングに近い分野
17 • 奨学金による入学する学生数の最大化 ◦ 奨学金を配ることで、学生の入学率はどのように変化するだろうか? ◦ 奨学金をどのように配ることで、学生の入学数を最大化できるだろうか? • 価格調整による収益の最大化 ◦
価格を調整することで、収益はどのように変化するだろうか? ◦ 価格をどのように調整することで、収益を最大化できるだろうか? 機械学習と数理最適化の統合 (機械学習) (数理最適化) (機械学習) (数理最適化) 価格調整による推定収益をGurobi Machine Learningの変数に組み込む 奨学金による学生の推定入学率をGurobi Machine Learningの変数に組み込む
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. 機械学習モデルを用意する
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. 普通の定式化を行う
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. 機械学習のモデルを制約に加える
21 Gurobi Machine Learningの使い方
22 モデルを数式に直接置換、または区分線形関数で近似 Gurobi Machine Learning の仕組み ロジスティック回帰 ReLU
23 サポートしているモデルや変換器が限定されている • モデル(scikit-learn, Keras, PyTorch) ◦ 線型回帰 ◦ ロジスティック回帰(唯一の二分類器)
◦ ニューラルネット(ReLu全結合のみ) ◦ 決定木・ランダムフォレスト ◦ 勾配ブースティング • 変換器 ◦ StandardScaler ◦ PolynomialFeatures ◦ ColumnTransformer サポートしていないモデルを使用しようとするとエラーになる Gurobi Machine Learning の制約
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
25 Thank you