More Related Content
Similar to Reviewing_machine_learning_program.pdf (20)
More from yusuke shibui (11)
Reviewing_machine_learning_program.pdf
- 2. 自己紹介
shibui yusuke
● いろいろ → Launchable(いまここ)
● MLOpsとかいろいろエンジニア
● たまにセールスとかEMとか
● もともとクラウド基盤の開発、運用
● ここ6年くらいMLOpsとバックエンドとインフラとたまに
データ分析とAndroidで仕事
● Github: @shibuiwilliam
● Meety: https://meety.net/matches/OPJgijxiEMHE
● 最近の趣味:猫と副業と自宅勤務改善
cat : 0.55
dog: 0.45
human : 0.70
gorilla : 0.30
物体検知
2
- 8. Jupyter Notebook
● 利点
○ 書いてすぐ実行できる。
○ 部分実行や途中実行もできる。
○ テーブルやグラフを可視化できる。
○ データサイエンスや機械学習開発のデファクトスタンダードになってる。
● 難点
○ リントもフォーマットもできない。
○ レビューコメントを書けない。
○ 部分実行や途中実行されていると、プログラムの実行順序がわからない。
○ 適当に作って適当に放置される(レポジトリで管理されない)。
○ ファイルサイズが大きい。
- 10. ● 目的が大事
○ 多くの場合、Jupyter Notebookは中間成果物。
○ 分析や機械学習の正しさを証明、検証するためのツール。
Jupyter Notebookが本番システムに組み込まれることはない。
○ プログラムと考えるよりもレポートやドキュメントとして扱うと精神衛生上健全。
● レビュー対象
○ データ!!!
○ 分析や機械学習の正しさ
○ 前処理、後処理、評価の正しさ
○ 可視化
○ 説明
● 非レビュー対象
○ コード品質
Jupyter Notebookをレビューする
- 11. ● レビュー会
○ Jupyter Notebookを通して実行した状態でレビューする。
■ レビュー会(30〜60分)でJupyter Notebookに書いた分析や機械学習をレビューする。
■ レビュー対象のJupyter NotebookはColabやクラウド(Vertex AIやSagemaker等)の
共通開発環境にデータとともに保存する。ローカル環境禁止。
■ レビュー会ではJupyter Notebookを上から下まで順番に実行した結果を報告する
(部分実行や途中実行は禁止)。
■ 分析・テスト結果は必ず全て可視化する。
○ コード品質は諦める。
○ ただし、最低限読めるプログラムを書く。
Jupyter Notebookをレビューする
- 14. .ipynb -> .py へ書き直す
データ分析
前処理
学習
評価
推論
ここは書き直す
必要がある。
ここは書き直さない
場合もある
- 16. データ検証例
import pandas as pd
import pandera as pa
schema = pa.DataFrameSchema({
"gender": pa.Column(str,
checks=pa.Check(lambda x: x in _genders ,
element_wise=True, error=f"gender must be {_genders}"),
),
"height_cm": pa.Column(float,
checks=[
pa.Check(lambda x: 130 <= x <= 210 ,
element_wise=True, error=f"height must be between [130, 210]",
),
pa.Hypothesis.two_sample_test(
sample1="male", sample2="female", groupby="gender",
relationship="greater_than", alpha=0.01, equal_var=True,
),
],
),
})
df = pd.DataFrame(data = {"gender": genders, "height_cm": heights})
df = schema(df)
● Pythonのpandasとpanderaによるデータ検証
● カラムごとにdata schemaを定義し、
チェックを挟むことで取得したデータの
正しさを検証する
● Hypothesis testingを活用することで
複数カラム間の妥当性をテストすることが
可能
- 19. 機械学習のフローと単一責任の原則
データ取得
前処理
学習
評価
推論
モデル定義
評価指標
データ元
class CoolML():
def __init__(self)
def load_data(self)
def __load_user_data(self)
def __load_item_data(self)
def preprocess_and_train(self)
def evaluate(self)
def predict(self)
def run_all(self)
class DataWarehouseAccessor()
class UserDataLoader()
class ItemDataLoader()
class Normalize()
class CoolModel()
def define_model(self)
class EvaluationMetrics()
class ModelTrainer()
def train(self)
def evaluate(self) -> EvaluationMetrics
class Predictor()
class Pipeline()
def __init__(self, data_loader:DataLoader,
preprocess:Preprocess, model:CoolModel,
predictor:Predictor)
データアクセスと
データロートを
分ける
前処理と学習を分ける
定義と実行を分ける
推論を処理含めて
クラスにまとめる
パイプラインにする