streamlitを使って簡単な機械学習アプリのデプロイに挑戦した

公開:2020/12/21
更新:2021/02/08
3 min読了の目安(約3100字TECH技術記事

だらさんなんでも Advent Calendar 2020、21日目の記事になります。

2020/12/22 追記
streamlit.io/sharing の認証が無事終わり、デプロイに成功しました!

https://share.streamlit.io/kjman678/streamlit/houseprice.py

お手軽にPythonでウェブアプリが作成できるStreamlitで機械学習アプリのデプロイに挑戦しました。

ローカルサーバーではちゃんと動くのですが、残念ながらherokuでのデプロイは出来ませんでした。

デプロイのログを見る限りエラーは発生していないようなのですが、ブラウザでURLを開くとアプリケーションエラーと表示されてしまいます。

streamlit.io/sharing を使うとGitHubと連携させるだけでデプロイできるそうですが、現時点でまだ正式登録待ちです。

検証の過程が役に立つかもと思い、途中ではありますがブログにアップします。

コードはこちら

環境は以下のとおり。

Windows10
python==3.6.9(Herokuのデフォルト)
streamlit==0.60.0
numpy==1.18.2
pandas==1.1.5
plotly==4.14.1
scikit-learn==0.23.2
lightgbm ==3.1.1

ローカルサーバー上の画面

作ろうとしたのは、kaggleのHousePriceコンペのデータセットを使ってWeb画面上で簡単な予測モデルを作成するアプリになります。

HousePriceのコンペ自体については下記のサイトをご参考ください。

https://nehori.com/nikki/2019/12/25/kaggle-2/
https://nehori.com/nikki/2019/12/31/post-14406/

ややこしいので欠損値を含むカラムは全て削除しています。

左の選択画面から特徴量を6つ選ぶと、train.csvの8割を使ってlightGBMで残り2割のデータのSalesPriceを予測し、実績データと予測データをグラフで比較することができます。

なお、特徴量は6つ全部違うものを選ぶ必要があります。

参考用に、読み込んでいるtrain.csvと、各特徴量とSalesPriceの相関係数を表示しています。

評価指標としてRMSEとR2スコアを表示します。

herokuでのデプロイ検証

先ほど書いたとおり、結果としてHerokuへのデプロイは出来なかったのですが、参考までに検証した事を記載します。

基本的には下記のサイトを参考にしました。

https://qiita.com/Nate0928/items/632e7d54c2f9c17e242b

Heroku CLIの導入は下記サイトをご参考ください。

https://qiita.com/tetsu-sh/items/f6fcbb6b85df04e5cf3f
https://note.com/on_bass/n/n0495484a2b2b

ターミナルからherokuへログインする際、[Can't open browther]となって処理が進まなかったのですが、後ろに --interactive と付けてやればOKです。

heroku login --interactive

https://qiita.com/shosho/items/41183091769a8693a8a5

herokuへのデプロイの手順は、heroku の HPのDeployタブをクリックすると手順が書いてありますので参考になります。

言語に対応するビルドパックを設定してあげないとエラーになるので設定しましょう。

heroku buildpacks:add heroku/python

https://devcenter.heroku.com/articles/python-support

setup.sh には、メールアドレスを記載するパターンと、記載しないパターンがあるようです。

GitHub等に公開するのであればメールアドレスは記載したくないところです。

記載しないパターンは下記サイトが参考になりました。

mkdir -p ~/.streamlit

echo "[server]
headless = true
port = $PORT
enableCORS = false
" > ~/.streamlit/config.toml

https://github.com/streamlit/streamlit/issues/1636

streamlit.io/sharing

streamlit.io/sharing を使えば GitHub と連携させることで無料でStreamlitから直接アプリをデプロイできるようです。

https://www.streamlit.io/sharing

招待をリクエストすると、毎週招待する旨のメールが届きました。

残念ながらアドベントカレンダーの担当日までにデプロイすることができませんでしたが、Streamlit.io/shareing の認証が下りるのを待ちたいと思います。

以上になります、最後までお読みいただきありがとうございました。