私が愛用しているツールたち- python, jupyter-lab, nbdev, poetry, fastai, pycaret,prophet, streamlit, gurobi, mypulp, miro, etc. -久保幹雄（東京海洋大学）

Amazonで検索開発環境

python, jupyter-lab, nbdev, poetry
機械学習fastai, pycaret, prophet

メニュー

Webアプリ作成とデプロイ
streamlit

数理最適化

gurobi, mypulp
おまけ (コロナ禍でのSPRINT, 研究メモ，翻訳，研究連絡）
miro, notion, deepl, slack

なぜ今Pythonか？
Pythonをお薦めする18の理由

久保 幹雄
東京海洋大学Why Python (1) ?
• モジュールをimportすれば何でもできる!
• 最適化• データ解析• 統計• 飛ぶこともできる !?
import antigravity• Programming is funagain!
http://xkcd.com/353/

Why Python (2) ?
• 米国計算機科学科で採用数No.1• もちろんMITも！ (Introduction toComputer Science and Programming
Using Python by John Guttag)

Why Python (3) ?
• お金を稼ぐため!
プログラマの平均初任給（日本）

出典：マイナビ

Python! 385万

件数

Why Python (4)?
• もっとお金を稼ぐため!
Top 10 Programming Languages to Learn in 2014
No 1. Python
平均収入: $93,000
求人数: 24,533
Top Employers: Amazon, Dell, Google, eBay &Yahoo, Instagram, NASA, Yahoo
Example Sites: Google.com, Yahoo Maps,Reddit.com, Dropbox.com, Disqus.com
No 2. Java, No 3. Ruby, No. 4 C++, No5. JavaScriptNo 6. C#, No. 7 PHP, No8. Perl ….

Why Python (5)?
• もっと，もっと，お金を稼ぐため!

Pythonはデータサイエンティストの必需品
Help Wanted: Black Belts in Databy Rodrigo Orihuela and Dina Bass

Bloomberg Businessweek

Starting salaries for data scientists
have gone north of $200,000
McKinsey projects that by 2018 demand for data scientists
may be as much as 60 percent greater than the supply

http://www.bloomberg.com/news/articles/2015-06-04/help-wanted-black-belts-in-11

Why Python (6)?
• キーワード（覚えるべき予約語）が33個 (Pyhon 3.4) と圧倒的に少ない（Python3.9だと36個）．
Falseassert
delfor
inor
while

None
break
elif
from
ispasswith

Trueandclass
continue
else
exceptglobalif
lambda nonlocal
raise
return
yield

as

def
finallyimportnottryWhy Python (7)?
字下げの強要で，誰でも読みやすいプログラム
if (x > 1) { y=x+1;
z=x+y; } else { y=0; z=0; }if x > 1:
y=x+1
z=x+y
else:
y=z=0

（行儀の悪い）C++

Pythonだと誰でもこの高さ（インデント）がそろっていないとエラーする！

Why Python (8)?
• 短時間で開発可能（行数が短く，モジュール豊富）“Hello, world!”と出力するプログラム Python 3 版
C++版（覚える必要なし！）#include <iostream>
int main() {std::cout << "Hello, world!" <<std::endl;return 0;}

print （ “Hello, world!”)
python 2版

print “Hello, world”

Why Python (9)?
• 変数の宣言必要なし

Why Python (10)?
• インタープリタ（コンパイルする必要なし）

巷の声

Why Python (11)?
• メモリ管理も必要なし（自動ガーベッジ・コレクション）

Why Python (12)?
• 多くのプラットフォームで動作（Windows, Mac, Linux，iphone, ... )Why Python (13)?
• オブジェクト指向（すべてがオブジェクト）

Why Python (14)?

• しかもフリーソフト

Drawn by
Steven Hilton in2006

Why Python (15)?
• インストールが簡単
Python IDLE付き (Windows, Mac, Linux)
Batteries Included!

Why Python (16)?
• 追加モジュールのインストールも簡単
Anaconda
https://store.continuum.io/cshop/anaconda/
無料版で十分100以上の便利なモジュールを含む
Mac, Linux, Windowsをサポート
最近ではPoetryで仮想環境がおすすめWhy Python (17)?
• CやFORTRANとの接続が容易• 過去のプログラム遺産を再利用するための糊の役目• 高速化が必要な部分を C,FORTRAN で，インターフェイスはPythonでWhy Python (18)?

• ビジネス解析のためのモジュールが豊富Jupyter+nbdevで文芸的プログラミング• Knuthが１９８４年に提案したプログラミングのパラダイム• 文芸的プログラミングツール WEB (CWEB)

元テキストファイル

PascalC
コンパイル
TeX

Jupyter Lab.
このままでも文芸的プログラミング => 隠したいコードやメモ，ライブラリ自動生成

Markdownセル

コードセル

nbdev• 深層学習パッケージ fastai の開発ためのツール
https://nbdev.fast.ai/
jupyter notebooks(.ipynb)+ 制御フラグ#export#hide#default_exp

nbdev_build_lib

ライブラリ
(.py)

nbdev_build_docs

ドキュメント(.html)githubgit add .
git commit –m “comment” github
git pushPagenbdev で公開中のプロジェクト (1)• Python言語による実務で使える100+の最適化問題
https://mikiokubo.github.io/opt100/

nbdev で公開中のプロジェクト (2)• アナリティクス（データサイエンス）練習問題集
https://mikiokubo.github.io/analytics/

nbdevの利点と弱点• 利点本にもなる（らしい）
並列自動テスト （私はオフにしている）
pypiとcondaに自動アップロード
• 弱点
導入が面倒
バグが多い
開発が粗い（開発者が気まぐれ）Poetry• https://python-poetry.org/• 仮想環境 + パッケージ管理• パッケージの依存関係の処理• パッケージの公開• (pipenvよりは）高速Pyproject.tomlの例[tool.poetry.dependencies]
python = "^3.8"
uvicorn = "^0.12.3"
fastapi = "^0.61.2"
pymongo = "^3.11.1"
mongoengine = "^0.21.0"
dnspython = "^2.0.0"
colorlover = "^0.3.0"
pandas = "^1.1.4"
matplotlib = "^3.3.3"
networkx = "^2.5"
numpy = "^1.19.4"
plotly = "^4.13.0"

Fastai• https://docs.fast.ai/• PyTorchのラッパ• 短いコードで深層学習• 無料の講義ビデオ付き• （割と）新しい手法が実装ずみ• 画像，自然言語処理，表モデル，協調フィルタリング• 自分でアーキテクチャを設計したいときにはPyTorch（ソースを改変）• 強化学習はなし• データサイエンス練習問題集
https://mikiokubo.github.io/analytics/14fastai.html

Pycaret• https://pycaret.org/• （自動）機械学習• 前処理＋モデル構築＋訓練＋アンサンブル＋デプロイ• 回帰，分類，クラスタリング，異常検知，自然言語処理，アソ
シエーション・ルール・マイニング• 結果の可視化• モデルの解釈 (SHAP: SHapley Additive exPlanations)• データサイエンス練習問題集
https://mikiokubo.github.io/analytics/19pycaret.html

Prophet• https://facebook.github.io/prophet/• （自動）需要予測• ベイズ推論（pystan利用）• データサイエンス練習問題集
https://mikiokubo.github.io/analytics/15forecast.html

（自動）機械学習(Auto ML)と深層学習(DL)とベイズ推論を用いた予測手法について
東京海洋大学久保幹雄

（量的）予測と回帰• 予測（時系列）モデル
過去のデータが与えられたとき，未来の値を予測
𝑦𝑦�𝑡𝑡 = 𝑓𝑓 𝑦𝑦𝑡𝑡−1 , 𝑦𝑦𝑡𝑡−2 , ⋯ , 𝑦𝑦1• 回帰モデル
訓練データ集合が与えられたとき，検証データ集合における損出関数を最小にするパラメータを推定
𝑦𝑦� = 𝑔𝑔 𝑥𝑥, 𝜃𝜃

従属変数
独立変数
（目的変数） （説明変数）

時系列モデル• ARIMAモデル
𝑦𝑦𝑡𝑡 − 𝑦𝑦𝑡𝑡−𝑑𝑑 = 𝑐𝑐 + 𝜙𝜙1 𝑦𝑦𝑡𝑡−1 + 𝜙𝜙2 𝑦𝑦𝑡𝑡−2 + ⋯ + 𝜙𝜙𝑝𝑝 𝑦𝑦𝑡𝑡−𝑝𝑝 + 𝜀𝜀𝑡𝑡 + 𝜃𝜃1 𝜀𝜀𝑡𝑡−1 + ⋯ + 𝜃𝜃𝑞𝑞 𝜀𝜀𝑡𝑡−𝑞𝑞
integratedautoregressive• 3次指数平滑(Holt-Winter)モデル
𝑠𝑠0 = 𝑥𝑥0

𝑠𝑠𝑡𝑡 = 𝛼𝛼 𝑥𝑥𝑡𝑡 − 𝑐𝑐𝑡𝑡−𝐿𝐿 + 1 − 𝛼𝛼 𝑠𝑠𝑡𝑡−1 + 𝑏𝑏𝑡𝑡−1𝑏𝑏𝑡𝑡 = 𝛽𝛽 𝑠𝑠𝑡𝑡 − 𝑠𝑠𝑡𝑡−1 + 1 − 𝛽𝛽 𝑏𝑏𝑡𝑡−1

𝑐𝑐𝑡𝑡 = 𝛾𝛾 𝑥𝑥𝑡𝑡 − 𝑠𝑠𝑡𝑡−1 − 𝑏𝑏𝑡𝑡−1 + 1 − 𝛾𝛾 𝑐𝑐𝑡𝑡−𝐿𝐿

𝑦𝑦𝑡𝑡+𝑚𝑚 = 𝑠𝑠𝑡𝑡 + 𝑚𝑚𝑏𝑏𝑡𝑡 + 𝑐𝑐𝑡𝑡−𝐿𝐿+1+ 𝑚𝑚−1 mod 𝐿𝐿

moving average

手法の比較
機械学習（深層学習を含む）

ベイズ推論（確率的プログラミング）
明確な推論（ホワイトボックス）
完全な柔軟性
分布まで考慮した
不確実性

確率的プログラミング

生成モデル
𝑃𝑃 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝜃𝜃

事前分布
𝑃𝑃 𝜃𝜃
パラメータ
データの分布
観測データ

ベイズの公式𝑃𝑃 𝜃𝜃 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 ∝ 𝑃𝑃 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝜃𝜃 𝑃𝑃 𝜃𝜃

事後分布𝑃𝑃 𝜃𝜃 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑

ベイズ推論確率的プログラミングの手法と実装• マルコフ連鎖モンテカルロ法（Markov Chain Monte Carlo methods：MCMC）＝データに合った近似確率分布を生成するシミュレーション• PyMC3 (4)• Stan予測に特化したとして実装として Prophet (Facebook)=> Stanを用いた予測モデル

MCMC• 適当な初期パラメータ 𝜃𝜃• 収束するまで以下を反復• 提案分布にしたがい新しい点 𝜃𝜃 𝑛𝑛𝑛𝑛𝑛𝑛 を生成• 推移確率を計算
𝑛𝑛𝑛𝑛𝑛𝑛𝑞𝑞 = 𝑃𝑃 𝜃𝜃

𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 /𝑃𝑃 𝜃𝜃 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑• 推移確率が1以上なら確率1で，そうでなければ確率 𝑞𝑞で 𝜃𝜃＝𝜃𝜃 𝑛𝑛𝑛𝑛𝑛𝑛

Prophetのモデル(一般化加法モデル）
𝑦𝑦𝑡𝑡 = 𝑔𝑔𝑡𝑡 + 𝑠𝑠𝑡𝑡 + ℎ𝑡𝑡 + 𝜖𝜖𝑡𝑡

𝑦𝑦𝑡𝑡：予測値

𝑠𝑠𝑡𝑡：季節変動（フーリエ級数）

𝜖𝜖𝑡𝑡

：誤差項

𝑔𝑔𝑡𝑡 ：傾向変動（変化点ありの線形・ロジスティック曲線）ℎ𝑡𝑡：休日（イベント）効果（特定日を指定して分布を予測）機械学習による予測（回帰）• 決定木のアンサンブル• バギング = bootstrap aggregating（ランダム森，Extra木）• ブースティング（適応型ブースティング，勾配ブースティング(GBM)，
Light GBM， Extreme GBM，カテゴリーブースティング）• 深層学習＝複雑な関数を任意の精度で近似して出力するアーキテクチャ• 畳み込みニューラルネット（2次元畳み込み）• LSTM（Long Short Term Memory）=実用的な回帰型ニューラルネットワーク(Recurrent NN)• 埋め込みニューラルネット

ランダム森

ブートストラップsepal_length

sepal_width

petal_length

petal_width

05.1

3.5

1.4

0.2

1

4.9

3

1.4

0.2

2

4.7

3.2

1.3

0.2

3

4.6

3.1

1.5

0.2

45

3.6

1.4

0.2

<species
Irissetosa
Irissetosa
Irissetosa
Irissetosa
Irissetosa≥<Prediction
virginica
sepal length (cm) sepal w idth (cm) petal length (cm) petal w idth (cm)
6.30
3.30
6.00
2.50

≥

<Prediction
virginica
sepal length (cm) sepal w idth (cm) petal length (cm) petal w idth (cm)
6.30
3.30
6.00
2.50

≥

バギング

Prediction
virginica
sepal length (cm) sepal w idth (cm) petal length (cm) petal w idth (cm)
6.30
3.30
6.00
2.50

決定木 1<≥

Prediction
virginica
sepal length (cm) sepal w idth (cm) petal length (cm) petal w idth (cm)
6.30
3.30
6.00
2.50

決定木 2<≥

Prediction
virginica
sepal length (cm) sepal w idth (cm) petal length (cm) petal w idth (cm)
6.30
3.30
6.00
2.50

決定木 3<≥

Prediction
virginica
sepal length (cm) sepal w idth (cm) petal length (cm) petal w idth (cm)
6.30
3.30
6.00
2.50

ブースティング
Data

決定木（弱学習器）

残差データ

自動機械学習 Auto ML• たくさんの機械学習の手法を同時に行い良いものを選ぶ．
• 良いものをアンサンブル

ModelMAE

MSE

RMSE

R2RMSLEMAPE

TT (Sec)

etExtra TreesRegressor0.4636

0.42480.63340.98370.07050.05230.0440gbr

Gradient
Boosting
Regressor

0.66010.79450.86530.97040.09100.07090.0100xgboostExtremeGradient
Boosting

0.69840.86080.90450.96750.08930.06980.0360rf

RandomForestRegressor

0.71230.88450.92100.9667

0.09450.07500.0500catboost

CatBoost
Regressor

0.58460.90410.8906

0.96550.10630.0776

1.4960ada

AdaBoost
Regressor

0.9116

1.34161.1366

0.94850.10200.09030.0160dt

DecisionTree
Regressor

0.9474

1.49131.2042

0.94180.10320.08360.0060lightgbm

Light
Gradient
Boosting
Machine1.13572.4086

1.52620.90370.16360.13450.0120畳み込みニューラルネット (1)Conv2dConv2dReLU

ReLU

Max Pool
Max Pool
Filters
Filters

Flatten畳み込みニューラルネット (2)
𝑦𝑦0
1000

Flatten

Loss

0000FC

Back Propagation

0Kitty回帰型ニューラルネット<1>
𝑊𝑊𝑥𝑥 @ 𝑎𝑎

𝑊𝑊𝑎𝑎
𝑎𝑎<0>

𝑊𝑊𝑥𝑥 @
𝑥𝑥 <1>

𝑎𝑎<0> tanh𝑥𝑥 <1><2>
𝑊𝑊𝑥𝑥 @ 𝑎𝑎

𝑦𝑦 <1>

𝑎𝑎<1>

𝑊𝑊𝑎𝑎

𝑊𝑊𝑥𝑥 @𝑎𝑎<1> tanh𝑥𝑥 <2>

𝑥𝑥 <2><2>
𝑊𝑊𝑥𝑥 @ 𝑎𝑎

𝑦𝑦 <2>

𝑎𝑎

<2>

𝑊𝑊𝑎𝑎

𝑊𝑊𝑥𝑥 @𝑦𝑦 <2>𝑎𝑎<2> tanh𝑥𝑥 <3>

𝑥𝑥 <3>

𝑎𝑎<3>・・・

LSTM（時系列データに対する予測）

𝑊𝑊𝑓𝑓

𝑎𝑎<𝑡𝑡−1>+*

𝑐𝑐 <𝑡𝑡−1>
𝑊𝑊𝑢𝑢

𝑊𝑊𝑐𝑐

𝑎𝑎<𝑡𝑡−1>
𝑊𝑊𝑜𝑜 @=<𝑡𝑡>
𝑥𝑥

𝑥𝑥 <𝑡𝑡>

𝜎𝜎𝜎𝜎

tanh
𝜎𝜎

Γ𝑓𝑓

Γ𝑢𝑢

𝐶𝐶̃ <𝑡𝑡>

𝑐𝑐 <𝑡𝑡>
tanh

*
Γ𝑜𝑜

*

𝑎𝑎<𝑡𝑡>

埋め込み層を用いた深層学習
カテゴリーデータ

５

埋め込み

１０×W

＝×W

＝・・・
出力

連続データ入力

使い分け
時系列分析

回帰分析
はい

機械学習

いいえ

独立変数多い？

いいえ
自動機械学習

埋め込み型
深層学習

特徴量の重要度
や決定木を見たい

精度重視

pycaretfastai

定常？

はいベイズ推論(S)ARIMA(X)(1,2,3次)指数平滑

prophetstatsmodels.tsa

Gurobi• https://www.gurobi.com/• 混合整数最適化ソルバー• 作成者: Zonghao Gu, Edward Rothberg，Robert Bixby• 大規模な混合整数二次（錘）最適化をマルチコアで求解• 商用（でもアカデミックフリー）• （おそらく）最速• Pythonインターフェィスあり• （ほぼ）同じインターフェィスのオープンソース・パッケージ
mypulp (pulpのラッパ；ソルバーはCBC）

数理最適化ソルバーの性能向上• CPLEX 1.2 (1991) -> CPLEX 11 (2007) : 29000倍• Gurobi 1.0 (2009) -> Gurobi 9.0 (2019) : 59倍• 合わせると．．． 170万倍• 計算機の速度向上
59.7 Gflops/s (1993) -> 93.0 Pflops/s (2016）• 合わせると．．． 2.2兆倍
以前は 7 万年かかっていた計算が１秒以下！

最適化の効果• 人間（ベテラン）の作った解の10%程度の削減• 物流費用はGDPの8%程度（途上国ではその倍以上）• 例えば日本だとGDPは560兆円程度

最適化を使えば，物流費だけで年間4兆円削減可能！
サプライ・チェインの費用はさらに大きい！

Streamlit• https://www.streamlit.io/• Pythonだけで簡単にWebアプリ• プログラムを上から実行していくだけ（コールバック不要）• 関数をキャッシュすることによる高速化（デコレータ使用）• github経由で簡単にデプロイ（無料）こういうのが簡単に作れる（DLで予測）

MIRO• https://miro.com/• オンライン・ホワイトボード（画面共有）• コロナ禍でSPRINTを行うためのツール（zoomと併用）• 授業にも便利（学生参加型の演習）• アカデミック登録で無制限

Notion• https://www.notion.so/• ゼミ学生との研究共有• 講義の簡易HP

DeepL• https://www.deepl.com/• 深層学習による翻訳• 読み上げ機能• 無料アプリあり

Slack• https://slack.com/• 授業やゼミの連絡や質問（チャット）• リアルタイムに関係者全員に（頻繁に）連絡可能

SPRINT

Noriko Yoshida
Tokyo university of marine science and technology

SPRINTとは
今までにない革新的な問題発見と解決の方法

SPRINTの始まりと現在• 日本で出版• 2017年4月• GVで用いられる• スタートアップ企業が活用• Googleでスタート• GVデザインパートナー
Jake Knappが開発

2010年
01

2012
02 年

2017
03 年

使う道具が決まっている

あとはコーヒーとヘルシーなスナックも！

SPRINTの工夫 その③

ホワイトボードを2台使用する

SPRINTの工夫 その④メンバーの知識と知恵は全部ここに記録し、ホワイトボードが共通の頭脳となる

SPRINT中はデバイス使用禁止

SPRINTの工夫 その⑤

図：Jake Knappのスライドより気が散るものは部屋の外で使ってね。休憩時間は自由に使用できます！

SPRINTのプロセス
１．問題の神髄を見極める
２．出来るだけ多くの解決策を考えてみる
３．いくつかのアイデアを選び、研ぎ澄ます
４．最終的なアイデアに絞り込む
５．プロトタイプの作成
６．結果を知って、学習する

5日間のプロセスが決まっている

図：日本語版「SPRINT」（ダイヤモンド社）より

MIROのSPRINTテンプレート