SageMaker TrainingによるADMET予測モデル構築

導入 ― ADMET予測の重要性

製薬開発において、化合物候補が臨床試験に進むまでには多大なコストと時間がかかります。
特に ADMET(Absorption, Distribution, Metabolism, Excretion, Toxicity) の予測は、早期に「有望な化合物」と「失敗する化合物」を振り分けるための必須ステップです。

従来は実験ベースで行われてきましたが、データ駆動の 機械学習モデル を活用することで、大規模な仮想スクリーニングを効率化できます。

今回は、AWSの SageMaker Training を用いて「ADMET予測モデル」を構築する方法を解説します。

全体アーキテクチャ

前回の記事(分子特徴量生成)で作成した特徴量(分子指紋+記述子)を入力として、以下の流れでモデルを構築します。

  1. 特徴量データの取得
    • S3の processed/features.csv からロード
  2. 学習ジョブ実行(SageMaker Training)
    • アルゴリズム例:XGBoost, PyTorch, TensorFlow
    • 評価指標:ROC-AUC, RMSE, Accuracy などタスク依存
  3. 評価・モデル保存
    • モデル成果物をS3に出力
    • CloudWatchでメトリクス監視
  4. モデル登録
    • SageMaker Model Registryでバージョン管理
    • 承認済みモデルのみデプロイ可能

学習スクリプトの例

train.py(XGBoostを用いたバイナリ分類:毒性予測タスク)

import argparse
import pandas as pd
import xgboost as xgb
from sklearn.metrics import roc_auc_score

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--train", type=str, default="/opt/ml/input/data/train/train.csv")
    parser.add_argument("--validation", type=str, default="/opt/ml/input/data/validation/validation.csv")
    parser.add_argument("--model-dir", type=str, default="/opt/ml/model")
    args = parser.parse_args()

    # データ読み込み
    train = pd.read_csv(args.train)
    val = pd.read_csv(args.validation)

    X_train, y_train = train.drop("label", axis=1), train["label"]
    X_val, y_val = val.drop("label", axis=1), val["label"]

    # XGBoostデータ形式に変換
    dtrain = xgb.DMatrix(X_train, label=y_train)
    dval = xgb.DMatrix(X_val, label=y_val)

    # モデル学習
    params = {
        "objective": "binary:logistic",
        "eval_metric": "auc",
        "max_depth": 6,
        "eta": 0.1,
        "subsample": 0.8
    }
    model = xgb.train(params, dtrain, evals=[(dval, "eval")], num_boost_round=200, early_stopping_rounds=10)

    # モデル保存
    model.save_model(f"{args.model-dir}/xgb_model.json")

    # 評価
    preds = model.predict(dval)
    auc = roc_auc_score(y_val, preds)
    print(f"Validation AUC: {auc}")

SageMaker Training ジョブ起動コード(Python SDK)

import sagemaker
from sagemaker.estimator import Estimator

role = sagemaker.get_execution_role()

xgb_estimator = Estimator(
    image_uri=sagemaker.image_uris.retrieve("xgboost", "ap-northeast-1", version="1.7-1"),
    role=role,
    instance_count=1,
    instance_type="ml.m5.xlarge",
    output_path="s3://your-bucket/models/admet/",
    base_job_name="admet-xgboost"
)

xgb_estimator.fit({
    "train": "s3://your-bucket/processed/train/",
    "validation": "s3://your-bucket/processed/validation/"
})

ベストプラクティス

データ分割

モデル選定

評価指標

監査ログ

医療・製薬ユースケースでの活用例

まとめ

SageMaker Trainingを活用することで、ADMET予測モデルの学習をクラウド上でスケーラブルかつ再現性高く実行できます。
製薬・医療の研究においては、単に精度を求めるだけでなく「再現性」「監査性」「セキュリティ」が同じくらい重要です。

弊社では、予測モデル開発・パイプライン構築 を支援しています。

ご関心のある方はぜひお問い合わせください。
👉 お問い合わせはこちら