予測
Positive Negative
実際 Positive TP FN
Negative FP TN
from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt
# AUC スコア
auc = roc_auc_score(y_true, y_pred_proba)
# ROC 曲線のプロット
fpr, tpr, thresholds = roc_curve(y_true, y_pred_proba)
plt.plot(fpr, tpr, label=f'AUC = {auc:.2f}')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()
plt.show()
from sagemaker.experiments import Run
# 実験の実行
with Run(
experiment_name='customer-churn-experiment',
run_name='xgboost-v1',
sagemaker_session=session
) as run:
# ハイパーパラメータをログ
run.log_parameters({
'max_depth': 5,
'eta': 0.2,
'num_round': 100
})
# モデルのトレーニング
estimator.fit({'train': train_data})
# メトリクスをログ
run.log_metric(name='auc', value=0.85)
run.log_metric(name='accuracy', value=0.82)
from sagemaker.model_monitor import DataCaptureConfig
# データキャプチャ設定
data_capture_config = DataCaptureConfig(
enable_capture=True,
sampling_percentage=100,
destination_s3_uri=f's3://{bucket}/data-capture'
)
# シャドウバリアントでデプロイ
predictor = model.deploy(
initial_instance_count=1,
instance_type='ml.m5.xlarge',
data_capture_config=data_capture_config
)
# 本番バリアントとシャドウバリアントを比較
predictor.update_endpoint(
initial_instance_count=1,
instance_type='ml.m5.xlarge',
variant_name='production-variant',
initial_variant_weight=90
)
predictor.update_endpoint(
initial_instance_count=1,
instance_type='ml.m5.xlarge',
variant_name='shadow-variant',
initial_variant_weight=10
)
from sagemaker import clarify
# Clarify プロセッサーの作成
clarify_processor = clarify.SageMakerClarifyProcessor(
role=role,
instance_count=1,
instance_type='ml.m5.xlarge',
sagemaker_session=session
)
# SHAP 分析の実行
explainability_config = clarify.SHAPConfig(
baseline=[baseline_data],
num_samples=100,
agg_method='mean_abs'
)
clarify_processor.run_explainability(
data_config=data_config,
model_config=model_config,
explainability_config=explainability_config
)
from sagemaker.debugger import Rule, rule_configs, DebuggerHookConfig
# デバッガールールの設定
rules = [
Rule.sagemaker(rule_configs.vanishing_gradient()),
Rule.sagemaker(rule_configs.overfit()),
Rule.sagemaker(rule_configs.overtraining()),
Rule.sagemaker(rule_configs.loss_not_decreasing())
]
# デバッガー設定
debugger_hook_config = DebuggerHookConfig(
s3_output_path=f's3://{bucket}/debugger-output'
)
# Estimator にデバッガーを追加
estimator = TensorFlow(
entry_point='train.py',
role=role,
instance_count=1,
instance_type='ml.p3.2xlarge',
framework_version='2.12',
debugger_hook_config=debugger_hook_config,
rules=rules
)
estimator.fit(train_data)
# デバッガーの結果を確認
for rule in estimator.latest_training_job.rule_job_summary():
print(f"{rule['RuleConfigurationName']}: {rule['RuleEvaluationStatus']}")
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
for train_idx, val_idx in skf.split(X, y):
X_train, X_val = X[train_idx], X[val_idx]
y_train, y_val = y[train_idx], y[val_idx]
# トレーニングと評価