Amazon Web Services ブログ

lekker 社が顧客離反モデルの開発で Amazon SageMaker Debugger を利用して、より多くの洞察を得た方法

この記事は、「Preventing customer churn on optimizing incentive programs using stochastic programming」を翻訳したものです。

lekker Energie GmbH 社(以下、lekker 社)は、40万人以上の顧客を持ち、ドイツのエネルギー市場において、非常に広範なエリアにビジネスを展開する電気とガスの主要なプロバイダーです。lekker 社は顧客とサービスを重視した企業であり、市場の同種企業比較では常にトップの評価を得ています。一般家庭にグリーン電力を提供する最も重要なサプライヤーの一つとして、220人の従業員を擁する同社は、環境と消費者に優しい製品を提供しています。

ドイツのエネルギー市場は、1990年代に自由化されました。それ以来、顧客はエネルギーやガスの供給者を自由に選ぶことができるようになりました。自由化の際、ドイツ政府はスイッチングプロセスを標準化したため、エネルギーやガスの供給者を変更することは簡単にできます。しかし、自社の解約率を低く抑えることは、lekker 社にとって難しい課題です。既存のお客様の離脱を防ぐことは、新規のお客様を獲得するよりも数倍安価です。低い解約率を実現する最良の方法は、顧客を満足させることです。顧客の解約リスクに関する知識は、解約する可能性が高い顧客に lekker 社が集中できるため、ターゲットベースのキャンペーンに役立つ情報です。

この記事では、lekker 社が Amazon SageMaker Debugger を使用して、顧客の解約モデルについて深い洞察を得る方法について説明します。この Debugger は、モデルの学習中に自動的にデータを収集し、モデルの学習における問題を自動的に検出するビルトイン・ルール(組込みルール)を提供します。

データ加工処理

lekker 社は様々なデータベースやデータ構造を持つ多くのシステムを保有しており、Sparkと AWS Step Functions を使って AWS 上にデータレイクを構築しています。解約モデル開発の事前準備として、lekker 社はラベル作成のために期間、販売チャネル、エネルギー消費量などの顧客固有の情報を利用した Spark 処理ジョブを作成します。lekker 社は、積極的な離反と受動的な離反を区別しています。積極的な離反とは、契約を解約したお客様のことを指します。受動的な離反とは、lekker 社のサービス提供地域から外れた顧客や、支払いが遅れたために契約が解除された顧客を指します。積極的な解約をラベルとして使用することで、今回導入したモデルをリテンションキャンペーンにおけるマーケティングの期待値に、より適合させることができます。

顧客離反モデルの作成

lekker 社がAWSを利用する前は、ビジネスインテリジェンス(BI)プラットフォームとして使用していた Oracle データベースからデータを取得していました。BI チームとアナリストは異なる部門で組織されており、アクセス権も異なっていました。データサイエンティストは、スキーマオンリードでデータにアクセスする必要がありました。モデルの学習は、ローカルマシンやスケーラブルではないサーバーで行われていたため、コンピュータ機器の制約がすぐに出てきていました。モデルを学習させても、モデルのモニタリングやデバッグは困難であり、ブラックボックス型のモデルに対する経営陣の懐疑的な見方も強まっていました。また、オーケストレーションツールがなく、サーバーの可用性やキャパシティが限られていたため、モデルの展開が困難でした。

lekker 社が SageMaker の使用を決定した時、SageMaker は機械学習のワークフロー全体に沿ったソリューションを提供しているため、これらの問題のほとんどが解決されました。lekker 社は現在、ニーズに合わせてコンピューティングリソースを簡単にスケーリングし、配置した全ての利用可能なデータにアクセスすることができます。データサイエンティストは、同じノートブックでデータを探索・準備することができ、SageMaker Estimators を使用してモデルを作成・学習することが容易になりました。さらに lekker 社は SageMaker の自動モデルチューニングを頻繁に使用しており、異なるハイパーパラメータ設定を実行することで最適なモデルを導き出しています。lekker 社は Debugger を使用して、モデルの結果を評価して伝え、モデルの洞察を得ています。

Amazon SageMaker の学習の設定

SageMaker 上で XGBoost の学習を実行するために、lekker 社は SageMaker Estimator API を使用します。モデル学習用のインスタンスタイプ (ml.m5.4xlarge) を利用します。また、学習画像の画像URIとモデルのハイパーパラメータの辞書を利用します。以下のコードをご覧ください。

Estimator(
    role=role,
    instance_count=1,
    instance_type='ml.m5.4xlarge',
    hyperparameters = {
        'num_round': '20',
        'rate_drop': '0.3',
        'scale_pos_weight': scale_pos_weight,
        'tweedie_variance_power': '1.4',
        'objective': 'binary:logistic'
        },
    image_uri = sagemaker.image_uris.retrieve('xgboost',region, version='1.0-1')
)

Debugger とルールの設定

lekker 社は以下の3つの用途で、Debugger を利用します:

  • ビルトインルールの利用した低パフォーマンス学習ジョブの特定
  • 自動ビジュアルの作成
  • 学習ジョブの重要なメトリクスを収集

次のコードは、離反モデルの学習から特徴の重要度やシャープレイ値などのメトリクスを収集するための Debugger フックの設定を示しています:

debugger_hook_config=DebuggerHookConfig(
    hook_parameters={'save_interval':'5'},
    collection_configs=[ 
        CollectionConfig(name="metrics"),
        CollectionConfig(name="feature_importance"),
        CollectionConfig(name="full_shap"),
        CollectionConfig(name="average_shap"),
    ]
 )

Debugger には、オーバーフィッティングやロスが減少しないなど、モデルの学習に関する問題をチェックするルールが組み込まれています。これらのルールは、SageMaker の処理ジョブとして別のコンテナやインスタンスで実行されるため、ルールの分析が実際の学習処理を妨げることはありません。lekker 社は、loss_not_decreasing ルールと xboost_report ルールを頻繁に使用しています。最初のルールは、学習曲線(ロスカーブ)を監視し、ロスが一定の割合で減少しない場合にトリガーします。xgboost_report ルールは、XGBoost モデルのデータをキャプチャし、ROC 曲線やエラープロットなどの視覚化された静的なHTMLレポートを作成し、主要な洞察力や推奨事項を提供します。以下のコードをご覧ください:

 rules=[
    Rule.sagemaker(
        rule_configs.loss_not_decreasing(),
        rule_parameters={
        "collection_names": "metrics",
        "num_steps": str(save_interval * 2),
        },
        ),
    Rule.sagemaker(rule_configs.create_xgboost_report())
 ]

Debugger のフック設定とルールのリストを指定した後、estimator.fit() で SageMaker の学習を開始します。fit 関数は、Amazon S3 の学習データと検証データへのパスを入力として受け取ります。以下のコードをご覧ください:

estimator.fit( 
    "train": TrainingInput(model_train_file, content_type="csv")
    "validation": TrainingInput(model_test_file, content_type="csv"))
  

SageMaker は自動的に ml.m5.4xlarge 学習インスタンスを起動し、学習用コンテナとデータセットをダウンロードし、モデルの学習を実行します。また、SageMaker の処理ジョブとしてルール分析を実行するためのインスタンスを起動します。SageMaker Studio でルールのステータスを確認したり、Python SDK からステータスを確認したりすることができます。

リアルタイムモニタリングのビジュアル化と実行

学習処理の実行中、lekker 社は Debugger のオープンソースの smdebug ライブラリを使用して、Amazon S3 にリアルタイムでアップロードされるデータを取得、問い合わせします。最初のステップは、ローカルまたは S3 のパス内にトライアルオブジェクトを作成することです:

from smdebug.trials import create_trial

s3_output_path = xgboost_estimator.latest_job_debugger_artifacts_path()
trial = create_trial(s3_output_path)
  

次に、データにアクセスしてクエリを実行します。学習曲線をプロットするには、メトリクスコレクションと記録されたステップの数を取得するだけです:

steps = trial.steps()
fig, ax = plt.subplots()
for tname in trial.collection("metrics").tensor_names:
    data = [value for value in trial.tensor(tname).values().values()]
    ax.plot(steps, data, label=tname)

次の図は、顧客離反モデルの学習中に、学習と検証のエラーが減少していることを示しています。これは、未観測データ(検証データ)に対してモデルがうまく機能していることを示しているため、モデルがよく訓練されていることを示しています。Debugger では、このような可視化を簡単に行うことができます。

学習ジョブが完了すると、lekker 社では xgboost_report ルールの出力を使用して、顧客離反モデルに関するさらなる洞察を得ます。次の図は、学習ジョブにおけるモデルの特徴の重要性を示しています。最も重要な特徴は、顧客の契約継続期間(メンバーシップ期間月数)です。lekker 社は、12ヶ月や24ヶ月などの固定期間の契約を提供しています。顧客が契約をキャンセルした場合、解約は固定契約期間の終了時に表示される。そのため、12ヶ月目と24ヶ月目に解約が集中するのです。

何がモデルの結果に影響を与えるかという知識は、モデルを説明する上で重要です。 lekker 社は、学習中に Debugger が記録した SHapley Additive exPlanations(SHAP)値を使用しています。SHAPは予測モデルの局所的な解釈可能性のために作られたものです。機械学習モデルの出力をゲーム理論的なアプローチで説明するものです。

以下の図では、青が低い特徴量を、赤が高い特徴量を表しています。x軸は SHAP値を示しており、結果に対する影響を表しています。高い値は予測値の増加を、低い値は予測値の減少を示します。線の太さは、この特定のポイントにいる顧客の数を表しています。離反モデルでは、契約継続時間が短い顧客は、予測解約確率が低くなります。これは、契約構造の結果であり、顧客の解約は早くても契約から12ヶ月後に決定されるからです。

SageMaker を使用しているユーザーは、SageMaker Debugger または SageMaker Clarify を使用してモデルの SHAP値を取得できます。両者の主な違いは、Debugger は学習中にそれらの値を記録するのに対し、Clarify はモデルの学習後にそれらを取得することです。学習段階で SHAP値を検査することで、無関係な入力特徴を特定して排除することにより、モデルをさらに改善することができます。

モデルが学習されると、Clarify を使ってあらゆるデータセットの SHAP値を得ることができます。モデルをエンドポイントとしてデプロイした後は、Clarifyを使ってエンドポイントからキャプチャしたデータの SHAP値を監視することができます。もう一つの重要な違いは、Debugger が XGBoost モデルの学習中に SHAP値を収集できるのに対し、Clarify はモデルにとらわれず、どのモデルでも動作することです。

結果

SageMaker が提供するすべてのツールとサービスを利用して、lekker 社は離反モデルの精度を20%近く向上させることができました。さらに、このモデルは以前のバージョンよりも安定しています。これにより F1スコアは80%以上、AUCは96%まで上昇しました。

lekker 社のデータサイエンティストである Steffen Kremers 氏は次のように述べています。「モデルの洞察に関連するすべての情報を得られたので、何が起こっているのかを明確に理解することができました。特に、Debugger のレポートに完全に統合されている特徴分析のコンセプトは、最も影響力のある特徴に関する有益な情報を提供してくれました。特徴量エンジニアリングと特徴量選択の両方にとって重要な情報です」

離反モデルが導入されて以来、lekker 社ではさらに3つのモデルを SageMaker に移行し、運用統合しました。lekker 社は、以前に行った学習モデルをこれらのモデルに移行し、すべてのモデルが以前よりも良い結果をもたらすことを確認しました。lekker 社は、MLがもたらす洞察力を目の当たりにして、ML活動の拡大に着手しています。

まとめ

この記事では、lekker 社がどのようにワークロードをオンプレミスから SageMaker に移行したか、そしてそれがどのように彼らのデータサイエンスチームの加速と革新を早めるのに役立ったかを示しました。 lekker 社は、モデルをより深く洞察するために Debugger を広範囲に使用しており、モデルの改善とより良い説明に役立てています。Debugger の機能と、このサービスがお客様のビジネスにどのように役立つかについては、Amazon SageMaker Debugger をご覧ください。顧客離反の最適化についての詳細は、ブログポスト「Preventing customer churn on optimizing incentive programs using stochastic programming」をご覧ください。

本ブログは、ソリューションアーキテクトの丹羽が翻訳しました。原文はこちらです


著者について

Steffen Kremers は、ドイツを本社に置くlekker 社のデータ・サイエンティストです。彼は、ユースケースのアイデアの開発からモデルの構築、モデルの展開まで、機械学習のプロセス全体をサポートしています。

 

 

 

Nathalie Rauschmayr は、AWS のアプライド・サイエンティストで、顧客の深層学習アプリケーションの開発を支援しています。

 

 

 

Lu Huang は、AWS Deep Engine チームのシニア・プロダクト・マネージャで、Amazon SageMaker Debugger を管理しています。