コードの整理とリファクタリング

DVCによるデータバージョニング入門

Ravi Bhadauria

Machine Learning Engineer

プロトタイプ vs 本番コード

  • プロトタイプコードは素早く反復できる
  • ただし本番には不向き
    • 未検証でエラーが起きやすい
    • 非モジュール的で重複コードが多い
    • 再現性が低い可能性
DVCによるデータバージョニング入門

良い本番コードの特徴

  • 再現可能: 環境や時期が変わっても同じ出力を再現

  • モジュール化: 独立・検証可能なモジュールで構成

  • 一貫性: すべてのパラメータの単一の情報源

    • 設定/パラメータファイル

本番コードの3つの特性を示す模式図

DVCによるデータバージョニング入門

設定ファイルと YAML

  • ファイルはサポート形式で用意

    • YAML, JSON, TOML, Python
    • 既定は params.yaml
  • 本講座では YAML を使用

    • YAML Ain't Markup Language
    • 言語・アプリ間でデータを標準形式で受け渡し可能
    • シンプルで見やすい形式
    • 拡張子は .yaml または .yml が有効
1 https://dvc.org/doc/command-reference/params#description
DVCによるデータバージョニング入門

YAML の文法

  • パラメータは辞書(マップ)で指定

    • キーと値は : で区切る
  • コメントは # から

  • データ型

    • 整数、浮動小数、文字列
  • データ構造

    • 配列
    • 入れ子の辞書
  • インデントが重要

# Key-value pairs
a: 1
b: 1.2
c: "String value"
# Arrays
a: [1, 2.2, 3, 4.8]
b:
  - 5
  - "String value"
# Nested dictionaries
a:
  b: "Some value"
  c: "Some other value"
DVCによるデータバージョニング入門

設定ファイルの例

# データ前処理のパラメータ
preprocess:
  ...
  target_column: RainTomorrow
  categorical_features:
    - Location
    - WindGustDir
    - ...

# モデルの学習/評価パラメータ train_and_evaluate: rfc_params: n_estimators: 2 ...
DVCによるデータバージョニング入門

モジュール関数の例

# model.py 内
def evaluate_model(model, X_test, y_test):
    """テストデータでモデルを評価し、指標を返す。"""
    y_pred = model.predict(X_test)
    precision = precision_score(y_test, y_pred)
    ...
    return { "accuracy": accuracy, "precision": precision,
        "recall": recall, "f1_score": f1 }
# エントリポイントコード(train_and_evaluate.py)
from model import evaluate_model
metrics = evaluate_model(model, X_test, y_test)
DVCによるデータバージョニング入門

プロジェクトのコード配置例

機械学習リポジトリのコードレイアウト図

DVCによるデータバージョニング入門

練習しましょう!

DVCによるデータバージョニング入門

Preparing Video For Download...