未来を創る、テックコミュニティー

5/14 代表勉強通信~PyCaret, Github, Flask, Heroku,デプロイ

草場代表
2020/05/14

こんばんは。代表の草場です。

昨日に引き続き、PyCaretを使い倒そうタイムです。本日は、こちらの「Build and deploy your first machine learning web app」です。PyCaretを使用して機械学習パイプラインを開発し、年齢、BMI、喫煙状況などの基本的な患者の健康リスクメトリクスに基づいて患者の入院費を予測するための前処理変換と回帰モデル作成をします。Webアプリケーション構築にはFlaskを、バージョン管理にはGitHubを、デプロイにはHerokuを用いています。以下の流れです。

機械学習パイプラインのトレーニング(PyCaret)→フロンtエンドのWebアプリ作成(Flask)→バージョン管理(GitHub)→デプロイ(Heroku)

記事には以下の記載があります。「機械学習モデルのデプロイとは、ウェブアプリケーション、エンタープライズソフトウェア、APIが新しいデータポイントを提供し、予測値を生成することで、訓練されたモデルを消費できるように、本番環境でモデルを利用できるようにするプロセスです。」
今回は、リアルタイムで予測する方法です。
目的は、「患者の人口統計情報と健康情報をWebフォームに入力して料金を予測するWebアプリケーションを構築する」ことです。使用するデータはKaggleのinsurance.csvです。

まず、モデルのトレーニングと検証を行い、デプロイのための機械学習パイプラインを開発。そして独立変数(年齢、性別、bmi、子供、喫煙者、地域)の入力フォームを持つ基本的なHTMLフロントエンドを構築。その後、Flask Frameworkを使用してWebアプリケーションのバックエンドを構築。最後にWebアプリケーションをHerokuにデプロイします。

■モデルのトレーニングと検証
まずは適当にフォルダ準備(自分はデスクトップに「PyCaret」フォルダ作成)。Jupyter NotebookでPyCaretを使い、回帰モデルをトレーニングします。引用記事では二種類実験していますが、今回はスケーリング、正規化、連続データの間隔へのピニングなどの前処理をおこなったもののみ載せます。開いたJupyter Notebookにて、以下を実行。簡単だ。
import pandas as pd
data = pd.read_csv(‘insurance.csvを置ているパスを記載’)
from pycaret.regression import *
r2 = setup(data, target = ‘charges’, session_id = 123, normalize = True,
polynomial_features = True, trigonometry_features = True, feature_interaction=True, bin_numeric_features= [‘age’, ‘bmi’])
結果。

一気に前処理完了。モデルの保存をします。
save_model(lr, model_name = ‘作業しているフォルダのパス/deployment_modelとか適当な名前’)
これで、pklファイルが生成されました。

■ウェブアプリケーションの構築
上記で作成したモデルに接続してリアルタイムで新しいデータの予測を生成するWebアプリ構築に入ります。・フロントエンド
まずはHTMLを使ってフロントエンドの構築をします。詳細なコードはPyCaret公式のGitHubを参照ください。事前に勉強しておいてよかった。。。

・バックエンド
バックエンドはFlaskを使用。コードはこちらPyCaret公式のGitHubをご覧ください。これも勉強しておいてよかった。。。
ということで、python app.pyを実行。URLにアクセスすると、年齢、性別、BMI、子供人数、タバコ吸うか、住んでる地域が求められます。記入してPredictをすると、保険金の予測値を表示します。いいねシンプル。

■WebアプリをHeroku使ってデプロイ
GitHubのリポジトリを使ってHerokuアカウントとリンクするととても簡単にデプロイできるので、今回はそれを採用します。今回は、PyCaret公式GitHubをフォーク。リポジトリのフォークのやり方は、このGitHubの記事を参照ください。
Herokuにログインし、Create new appを選択。

地域はUSかEourpeしかないのでUS選択。以下の画面になるので、Connect to GitHubクリック。


するとリポジトリを指定する画面が出るので、使うリポジトリを記入してクリック。以下の画面になります。

Manual deployのDeploy Branchをクリックすると数分待ちます。

すると、、完了!

https://my-fisrt-ml-app-yeah.herokuapp.com/

簡単でしたね。PyCaretをもっと使いこなそうと思います。

この記事を書いた人
草場代表
エディター