データサイエンス Archives | DataRobot https://www.datarobot.com/jp/blog/category/データサイエンス/ Deliver Value from AI Mon, 04 Mar 2024 03:37:05 +0000 ja hourly 1 https://wordpress.org/?v=6.4.3 DataRobot, Papermill, MLflowを活用した機械学習効率化とログ管理 | AIのプロが解説 https://www.datarobot.com/jp/blog/datarobot-papermill-mlflow/ Fri, 01 Mar 2024 07:09:29 +0000 https://www.datarobot.com/jp/?post_type=blog&p=13120 流通・鉄道・通信業界のお客様を担当し、技術ではMLOpsテクノロジーを中心に扱っているデータサイエンティストの濱上です DataRobotは実務担当者がモデリングからモデル運用まで行うための機械学習・AIプラットフォーム...

投稿 DataRobot, Papermill, MLflowを活用した機械学習効率化とログ管理 | AIのプロが解説DataRobot に最初に表示されました。

]]>
流通・鉄道・通信業界のお客様を担当し、技術ではMLOpsテクノロジーを中心に扱っているデータサイエンティストの濱上です

DataRobotは実務担当者がモデリングからモデル運用まで行うための機械学習・AIプラットフォームとして知られていますが、データサイエンティスト(DS)の業務を加速するためのエンジンにもなります。

今回は、DS向けにDataRobot×Papermill×MLflowを使うことで、どれくらい業務を加速し、チーム内のコラボレーションを高められるのかを紹介します。AIアクセラレーターサンプルコードを公開していますので、実際にコードを動かしてもらえればその威力を感じていただけます。

機械学習モデル構築は実験の繰り返し

機械学習モデルのビジネス利用は、一回モデルを作成して終わりではありません。Kaggleなどのコンペティションでもトップクラスになるためには試行錯誤を自動化することが重要ですが、時間と共にデータが変わっていく実ビジネスでは、この試行錯誤を自動化することがより重要になってきます。データの変化に対応が遅れてしまうと、機械学習モデルのビジネス利用により得られるインパクトが消失してしまうからです。

試行錯誤の過程では、大量のコードとモデルとメトリクスが作成されます。これらのアセットの対応関係が明確にわかるように、実験ログを管理することもとても大切です。

スクリーンショット 2024 02 26 15.24.59

試行錯誤の自動化とログ管理が成功への近道

試行錯誤の自動化や実験ログの管理ができていれば、データサイエンティスト(DS)が陥りがちな失敗を防ぐこともできます。

多くのデータサイエンティスト(DS)にとって、機械学習の実験はゲーム感覚で楽しい瞬間であり、精度が良いモデルを作るために時間を忘れてコーディングしたなんていう経験がある人も多いのではないでしょうか。しかし、機械学習に没頭しすぎて、もしくは1人のDSの力量に依存しすぎて、機械学習プロジェクトが失敗するケースが多々あります。以下の失敗例は、そんな失敗の一部を集めたものです。

機械学習の実験過程で陥りがちな失敗例(新)
機械学習の実験過程の失敗例その1:再現性
  • 膨大な試行錯誤により、実験ログの管理が疎かになり、モデルや出力結果を再現できない問題が発生
  • 担当者が変更した際にログが残っておらず異常時に対応できないような最悪のケースも
機械学習の実験過程の失敗例その2:ヒューマンエラー
  • コーディングはデータサイエンティストの経験や能力に依存するため、担当者レベルによってコードに技術的な誤りが発生することがある
  • 経験のあるデータサイエンティストでも作業量が増えるほどヒューマンエラーによるミスが増える
機械学習の実験過程の失敗例その3:コスト管理
  • モデル構築に膨大なリソースが発生し、投資対効果が悪化する
  • モデル構築にリソースが偏り、課題定義やモデル運用の設計に投入するリソースが薄くなる

DataRobot, Papermill, MLflowの連携による実験効率化とログ管理

それでは、本稿で紹介するDataRobot、 Papermill、MLflowがどのように上記課題を解決するか解説します。まず、それぞれの道具の概要です。

データサイエンティストの道具その1:DataRobot
  • DataRobotは、データサイエンティスト(DS)や開発者が機械学習モデルを迅速に開発、デプロイ、管理できるように設計された包括的かつオープンなエンドツーエンドのAIライフサイクル・プラットフォームです。
  • GUIベースの操作だけでなく、Pythonクライアントを使うことができます。したがって、コードベースで、データの準備からモデルのトレーニング、評価、デプロイメント、モニタリングに至るまでのプロセスを自動化し、機械学習プロジェクトの複雑さと時間を大幅に削減します。
データサイエンティストの道具その2:Papermill
  • Papermillは、ノートブックをパラメータ化して実行するためのオープンソースのツールであり、データサイエンスや機械学習のワークフローを自動化するために広く使用されています。
  • ノートブックを入力として受け取り、実行時にパラメータを渡すことで、ノートブック内のコードを動的に実行することができます。これにより、異なるデータセットやパラメータで同じ分析を繰り返し実行する際の効率が大幅に向上します。
データサイエンティストの道具その3:MLflow
  • MLflowは機械学習のライフサイクルを管理するためのオープンソースプラットフォームです。
  • 機械学習の実験管理、モデルのトラッキング、デプロイメント、およびワークフローの全体を通しての管理を簡素化することを目的としています。

DataRobot、Papermill、MLflowを使うメリット

この3つの道具を使うメリットは、実験効率化とログ管理です。DataRobotは、GUI操作だけではなく、コードベースでモデルのトレーニングを自動化することができます。モデルのトレーニングには特徴量やアルゴリズムの選定も含まれ、その機能だけでもDSにとって鬼に金棒です。

さらに、Papermillを使うことでノートブックをバッチ実行できるため、DataRobotを用いた実験を効率化できます。たとえば、需要予測などの時系列分析では、学習データの期間や検定期間や特徴量セットについてさまざまなパターンを試します。学習データの期間で3種類、検定期間で2種類、特徴量セットで3種類あるケースでは、合計で3×2×3の18回分の実験をする必要があり、DataRobotでは18のエクスペリメント(プロジェクト)を作成することに対応します。その都度、毎回ノートブックを手動で作成していては大変ですし、ヒューマンエラーも多くなります。そこで、Papermillを使うことで、18のノートブックを自動で作成し、バッチ実行することができます。

同時に、MLflowを使うことで、18の実験結果を1つのダッシュボードで表示できます。

スクリーンショット 2024 02 26 15.25.05

AIアクセラレーターのサンプルコード

それでは、AIアクセラレーターに公開されているサンプルコードを紹介します。サンプルコードでは、時系列モデルの作成を効率化しています。

以下の内容がシナリオです。

 ——-シナリオ——-

時系列モデルの作成では、試みるべき多くの実験があります。最も基本的なものには、複数の特徴量派生ウィンドウ(fdws)を試すことや、事前に既知の特徴量(kias)を有効にすることが含まれます。

<用語説明>

  • 特徴量派生ウィンドウ(fdws):DataRobotの時系列モデリングにおいて、DataRobotが自動で派生する特徴量のローリングウィンドウ(fdws= -28 ~ 0 daysと指定すれば、過去28日間の移動平均、ラグ、差分などの特徴量が自動で生成される)
  • 事前に既知の特徴量(kias):DataRobotの時系列モデリングにおいて、予測時点で値がわかっている特徴量のこと(休日やキャンペーンなど)

サンプルコードでは、実験を効率化するために、Papermillを用いてパラメータ(fdwsとkias)を変更しノートブックをバッチ実行します。パラメータを設定し、バッチ実行を指示するノートブックがバッチ実行用ノートブック(orchestration_notebook.ipynb)であり、その指示により複数の実験用ノートブック(experiment_notebook.ipynb)が作成され、バッチ実行が走るという関係になっています。機械学習モデル作成のエンジンはDataRobotを利用しており、実験ログはMLflowで管理します。

DataRobotPapermillMLflow連携の流れ
スクリーンショット 2024 02 26 14.02.48

以下、バッチ実行用ノートブック(orchestration_notebook.ipynb)のコードの中身を詳しく解説します。

①パラメータの設定

シナリオに沿って、特徴量派生ウィンドウ(fdws)と事前に既知の特徴量(kias)に異なるパラメーターを与えて実験します。以下のセルの例に示されているように、3(fdwsが35,70,14の3種類)×2(kiasがFalseとTrueの2種類) = 6の異なる実験を行います。

スクリーンショット 2024 02 26 22.56.03
②ノートブックのバッチ実行

①で定義したパラメータを実験用ノートブック(experiment_notebook.ipynb)に与え、バッチ実行します。for文でループ実行しており、ここでは6回分ループ実行が行われます。pmはPapermillのことで、引数として、

  • input_path: 実験用ノートブックのパス
  • output_path: 実験実行後のノートブックのパス
  • parameters: 実験用ノートブックに与えるパラメータ

を指定します。

以下のセルを実行すると、自動でノートブックが6つ作成されて、バッチ実行が動きます。

スクリーンショット 2024 02 26 22.57.07

それでは、次に、実験用ノートブック(experiment_notebook.ipynb)の中身を見てみましょう。

①機械学習モデルの作成

機械学習モデルの作成にはDataRobotを用います。以下のセルは、検定スキー(time_partition)や特徴量セットの設定をしています。特徴量ウィンドウ(FDW)と事前に既知の特徴量(KIA)は、バッチ実行用ノートブック(orchestration_notebook.ipynb)から与えられたパラメータです。

以下のセルを実行すると、自動で複数のモデルが構築され、最も精度が良いモデルをDataRobotが選択してくれます。

スクリーンショット 2024 02 26 22.57.58
②予測の実行

最も精度が良いモデルを使って予測を実行します。

スクリーンショット 2024 02 26 22.58.08
③実験ログ管理

予測値と実測値を比較して、精度を算出し、MLflowを使って実験ログを記録します。ここでは、変更したパラメータと各種精度指標のスコアを記録しています。

スクリーンショット 2024 02 26 22.58.48

サンプルコードを実行すると以下のようなアウトプットが得られます。アウトプットからわかるように、この3つの道具を使うことで、実験を効率化できるだけでなく、コードとモデルとメトリックスを実行後にアセットとしてそれぞれ残すことができ、後任者がコードとモデルの中身を再確認することもできます

スクリーンショット 2024 02 26 14.24.29

機械学習の実験効率化とログ管理を両立させる方法

今回は、実験効率化とログ管理のために、以下の方法をご紹介しました。

  • DataRobotとMLflowを使用して、機械学習の実験を追跡およびログする方法
    • 利点:実験間での結果の一貫した比較が可能
  • DataRobotとPapermillを使用して、機械学習の実験からアーティファクトを作成し、共同作業に必要な作業量を減らす方法
    • 利点:エラーを回避し、手動の作業量を減らすための実験の自動化が可能

ぜひサンプルコードを参考に、皆さまのプロジェクトにご活用ください。具体的な実装などでお困りの際は弊社まで問い合わせください。

投稿 DataRobot, Papermill, MLflowを活用した機械学習効率化とログ管理 | AIのプロが解説DataRobot に最初に表示されました。

]]>
AI活用のさらなるステージ:バイアスと公平性 Part 2 https://www.datarobot.com/jp/blog/bias_and_fairness_part-2/ Mon, 30 Jan 2023 23:42:27 +0000 https://www.datarobot.com/jp/?post_type=blog&p=10612 はじめに DataRobotで主に政府公共領域やヘルスケア業界のお客様を担当しているデータサイエンティストの若月です。 本稿ではAIシステムのコアとなる機械学習モデルのバイアスと公平性に注目し、2回に渡って解説しています...

投稿 AI活用のさらなるステージ:バイアスと公平性 Part 2DataRobot に最初に表示されました。

]]>
はじめに

DataRobotで主に政府公共領域ヘルスケア業界のお客様を担当しているデータサイエンティストの若月です。

本稿ではAIシステムのコアとなる機械学習モデルのバイアスと公平性に注目し、2回に渡って解説しています。Part 1では、以下のトピックを取り上げました。

  • バイアスと公平性とは、その重要性
  • バイアスの発生原因
  • 公平性指標

Part 2では、モデルのバイアスを軽減するための具体的な手法や公平性に配慮したモデル構築をするためのプロジェクト体制について考察し、さらにDataRobotが標準的に備えている公平性評価・バイアス軽減のための機能をご紹介します。

モデルのバイアスを軽減する

Part 1でご紹介した公平性指標に基づいてモデルのバイアスが検知できたとして、そのモデルからバイアスを軽減するにはどうすれば良いのでしょうか。実は機械学習においてバイアスを軽減しうるタイミングは大きく分けて3つあります。

  1. データ準備段階でのバイアス軽減(Pre-Processing Bias Mitigation)
  2. 学習時のバイアス軽減(In-Processing Bias Mitigation)
  3. 予測時のバイアス軽減(Post-Processing Bias Mitigation)

それぞれにおいてさまざまな方法が提案されていますが、そのうちのいくつかをご紹介します。


データ準備段階でのバイアス軽減

  1. データの生成・収集プロセス自体の見直し

Part 1で述べたようにバイアスの発生はデータの生成・収集プロセスに起因しているので、そのプロセス自体を見直すことは根本的にバイアスを排除するのに最も効果的な手段となります。例えば数の少ない属性のデータを収集するのは、コストとのトレードオフになり、かつあらゆるケースで可能な方法ではないですが、実施できる場合にはとても有効です。

一方でPart 1で述べたように、ラベル付けなどデータ生成に人間の判断が含まれることがあるとその判断によってバイアスが入り込んでしまうのは避けられません。また、後述する方法とは異なりデータを収集し直す必要があることからコストや時間もかかるというデメリットがあります。

  1. 特徴量の選定・特徴量エンジニアリング

特徴量の見直しもバイアスの軽減に有効な場合もあります。ただし、ここで気をつけなければならないのは「バイアスと直接関係する特徴量だけを学習データから除いても本質的なバイアスを除去できるとは限らない」ということです。

例えば採用の選考モデルで求職者の性別をモデルの特徴量から除外しても、それ以外の特徴量が性別と何らかの形で関連している(プロキシ特徴量になっている)と、それらを用いて学習したモデルは性別という情報を暗に含んでいることになります。
ここで、後述のサンプリングの節でも説明している「保護された特徴量をターゲットとして予測モデルを作成」する手法を用いると、どういった特徴量が保護された特徴量に関連しているか理解することができます。

図1 採用判断モデルにおいて性別と他の特徴量の関連を確認する
図1 採用判断モデルにおいて性別と他の特徴量の関連を確認する

図1のような仮想例において、性別の予測モデルで部活の特徴量のインパクトがとても強く、部活について図2のようなワードクラウドがインサイトとして得られたとします。この場合には、例えばmens tennis/womens tennisといった単語をtennisに名寄せするなどの特徴量エンジニアリングを行う、といった方法も考えられるでしょう。
DataRobotを使えばこのような様々なモデリングも非常に簡単に行うことができる上、視覚的にも理解しやすい情報を提供してくれます。

図2 部活にmens/womensといった単語が含まれており、部活が性別のプロキシ特徴量となっていたことわかる例
図2 部活にmens/womensといった単語が含まれており、部活が性別のプロキシ特徴量となっていたことわかる例
  1. サンプリング

手元のデータをそのまま全てモデリングに利用するのではなく、データ内のバイアスを軽減する目的でサンプリングを行います。サンプリングの方法としては、保護された特徴量をターゲットとして傾向スコアマッチングを行い、例えば男女間で近い特徴を持つデータのみを抽出してモデリングを行うなどが考えられます。ただし、サンプリングを行うことで意図しない別の観点でのバイアスが入り込む可能性も十分に考えられるため、注意して行う必要があります。(傾向スコアマッチングについては、弊社ブログの機械学習を用いた要因分析 – 実践編機械学習を用いた要因分析 – 理論編 Part 2に詳細に解説されているため、ぜひご確認ください)

図3 傾向スコアマッチングで近い特徴を持つデータを抽出
図3 傾向スコアマッチングで近い特徴を持つデータを抽出
  1. 学習データの重み付け

例えば特定の属性のデータが少ない場合、その属性を重視するよう行ごとの重み付けを行うことでバイアスを軽減できる可能性があります。重み付けをするとその行が学習時に複数回現われるような挙動になりますが、詳細については弊社の過去のブログ記事もご参照ください。

図4 重み付けの例
図4 重み付けの例

学習時のバイアス軽減

Adversarial Debiasing[1]

本来作りたい予測モデルに加え、その予測結果をもとに「保護された特徴量(=公平性を担保したいカテゴリ特徴量)」を予測する「敵対モデル(Adversary Model)」を作り、この二つのモデルの誤差からパラメータを更新する手法です(Generative Adversarial Networks[2], GANの考え方を取り入れています)。予測モデルの予測結果が完全に公平な”理想的”な状況では、敵対モデルの予測能力は限りなくランダムに近づくはずなので、予測モデルの誤差を最小化しつつ敵対モデルの誤差を最大化する最適な点を探します。このようなアプローチをとることで、精度とバイアス対処の両方を考慮したモデルを得ることができます。

図5 Adversarial Debiasingの概要
図5 Adversarial Debiasingの概要

予測時のバイアス軽減

  1. 閾値の調整

公平性指標として、Part 1で紹介した好ましいクラスの再現率を採用しているケースを想定してみましょう。二値分類の予測においては予測ラベルを決定するための閾値を決める必要がありますが、保護された特徴量のクラスごとに異なる閾値を設定することで、クラス間の公平性を改善できます。一方で公平性を担保するために閾値に手を加えると精度指標としてのモデルの再現率・適合率も変わるため、最終的な閾値はビジネス上求められる精度と公平性の2つの観点から決定する必要があります。

図6 クラスごとの閾値の設定
図6 クラスごとの閾値の設定
  1. Post-Processing Rejection Option-Based Classification[3]

分類問題において、「差別的な予測は予測閾値近傍のデータにおいて起こりやすい」という前提のもと、予測後に予測閾値近傍のデータ(予測結果)に対して予測ラベルを調整するという方法です。予測閾値付近のデータで下駄を履かせるなど調整をする、というとイメージしやすいかもしれません。

例えば採用の選考モデルで男性が女性よりも有利な予測をされているという状況の元で、予測閾値をわずかに下回った女性を採用(False → True)、予測閾値をわずかに上回った男性を不採用(True → False)、というように調整を行います。

図7 Post-Processing Rejection Option-Based Classificationのイメージ図
図7 Post-Processing Rejection Option-Based Classificationのイメージ図

実際のプロジェクトにおける留意点

公平性を欠いた機械学習モデルによるAIシステムが開発・運用されれば、プロジェクト中止や企業の社会的名声毀損など重大な結果につながる可能性があるのは本稿Part 1で述べた通りです。従って実際の機械学習プロジェクトにおいては、最初の企画段階でバイアスと公平性への留意点が漏れていないかプロジェクトメンバー間で議論することが必要です。さらには予測モデルで実現したい精度指標と同様に、バイアス評価を行うための公平性指標をプロジェクト毎に決定し、さらにモデルを実運用化する条件としてどの程度の値が求められるのかまで決定しておくべきです。

具体的な議論は機械学習プロジェクトのアイデアが固まり、詳細化していくフェーズにおいて行います。実務観点・データ観点双方から何に留意すべきか検討する必要がある以上、実務を十分に把握した分析担当者が議論をリードするのが理想的ではありますが、そのような知見・スキルを持ったメンバーがいなければ実務担当者と分析担当者が主体となって共同で議論を進める形をとることとなります。


しかし、プロジェクトを始める時点ではまだ具体的な問題点が判断できない、適切なバイアス評価方法が判断できない、といった状況であることも決して少なくないでしょう。その場合には、早期の段階からリスク管理担当者やコンプライアンス担当者をプロジェクトチームにアサインして、データ生成・収集プロセスやプロトタイプモデルのレビューに関わってもらう体制を持つことが推奨されます。

コンプライアンスの専門家による視点で公平性のリスクを早期に検知して対応すれば、プロジェクトの手戻りを防ぐことが期待できます。また、業界によっては関連する規制やガイドラインも存在しているので、それらを基準とすることもできます。例えば、米国では採用にあたりいわゆる”4/5ルール”が存在します。このルールに基づくと公平性指標指標としては「割合の平等性」を選択することになりますし、さらに指標としては低い方の値が0.8以上になることが求めらます。(公平性指標とその計算方法については本稿Part 1をご参照ください)


企業が組織的にAIを活用するステージになってくると、プロジェクトの進め方を組織内でテンプレート化することもあるかと思います。テンプレートの中にバイアスと公平性に関する議論並びに適切なメンバーによる承認を含めておくようにすれば、各プロジェクトにおいて議論が漏れる可能性を抑えられるでしょう。議論の主体となるのは先述のように業務担当者と分析担当者、承認者としては例えば各担当者の上長や独立したリスク管理担当者、コンプライアンス担当者などが考えられます。

図8 プロジェクトの各フェーズにおける役割
図8 プロジェクトの各フェーズにおける役割


参考までに、「人」に関わる意思決定プロセスをAIで高度化することを目的としたプロジェクト(例えば下記)においては、バイアスと公平性の観点から特に注意を払う必要があります。

  • 採用プロセスにおける書類選考のAIによる効率化
  • 住宅ローンの審査業務の効率化
  • 犯罪リスクの高い地域の可視化
  • 児童虐待リスクの予測
  • 介護のハイリスク者の抽出

DataRobotでできること

DataRobotでは二値分類のプロジェクトで公平性の評価とバイアス軽減を行えます(バイアス軽減については2022年12月現在、クラウド版のみでのご提供になります)。

これらはプロジェクトの開始前に「保護された特徴量」(=公平性を担保したいカテゴリ特徴量)を指定してから通常通りモデリングを行うだけで簡単に実施可能です。なお、バイアス軽減については先にご紹介した手法のうちデータ準備段階でのバイアス軽減として学習データの重み付けを、予測時のバイアス軽減としてPost-Processing Reject Option-Based Classification を利用でき、状況に応じて使い分けることができます。

具体的な操作手順や詳細は公式ドキュメントが詳しいのでそちらをご参照ください。

公平性指標の確認

Part 1で解説した公平性の指標に基づき、予測モデルの公平性をUI上で確認できます。プライマリーで適用する公平性指標はモデリング開始前に「高度なオプション」から設定が必要ですが、モデリング完了後にリーダーボードから個別のモデルについて他の各指標による評価も確認可能です。

下図は前述の賃金が高いか低いかを予測する二値分類モデルの例ですが、女性(赤い棒グラフ)は男性(青い棒グラフ)よりも”不利に”予測されていることがわかります。

図9 モデルの公平性指標の可視化
図9 モデルの公平性指標の可視化

クラスごとの精度確認

リーダーボード上で、「保護された特徴量」の各カテゴリ値ごとに精度指標値が表示されるため、精度がクラス間で偏っていないかを確認できます。下図では男女それぞれについていくつかの精度指標で精度を表示しています。
 

図10 モデルのクラス別の精度
図10 モデルのクラス別の精度

DataRobot MLOpsを用いた予測結果の公平性トラッキング

モデルのデプロイ後も、各デプロイに対して行われた予測に対して公平性指標を確認できます。こうして機械学習モデルが実運用ステージに入った後も”不公平な”予測が行われていないかをトラック可能です。

図11 MLOpsを用いた公平性指標のトラッキング
図11 MLOpsを用いた公平性指標のトラッキング

バイアス軽減

開始ボタンを押す前に、「高度なオプション」の「バイアスと公平性」から「プライマリー公平性指標」を選び、「バイアス軽減の技法」を「前処理の再加重」あるいは「 却下オプションに基づく分類による後処理」(Post-Processing Reject Option-Based Classification)から選択できます。

図12 バイアス軽減の設定方法
図12 バイアス軽減の設定方法

あとは通常通りモデリングを行うだけで、モデリング完了後、リーダーボードの上位モデルに対してバイアス軽減処理を施したモデルが自動的に作成されます。なおバイアス軽減オプションを使ったからといって、期待通りのバイアス軽減がなされているとは限らないため、必ず公平性指標の確認を行うことが必要です。

図13 バイアス軽減モデルの作成
図13 バイアス軽減モデルの作成

以上のように、DataRobotを使うと公平性指標の計算・確認やバイアス軽減といった公平性の高いモデル作成に必要なタスクも特別なコーディングを要することなく簡単に行うことができます。もちろんモデルの構築も含め自動で行ってくれるので、機械学習プロジェクトメンバーは『公平性をどのように評価するか、どのようにバイアスに対処するか』のような、人間にしかできない重要な検討項目にフォーカスできます。

まとめ

本稿Part 1では

  1. バイアスと公平性とは、その重要性
  2. バイアスの発生原因
  3. 公平性指標

Part 2では

  1. バイアス軽減のさまざまな手法
  2. 実際の機械学習プロジェクト推進における留意点
  3. モデルのバイアスに対してDataRobotができること

を幅広くご紹介しました。繰り返しになりますが、公平性の観点は一つではないので、プロジェクトの特性に応じて対処方法を選定することが必要です。冒頭で述べたように、AIを幅広い業務で活用するのが当たり前になってきている今こそ、バイアスの小さな機械学習モデルをあらゆるレイヤーで作っていけるよう組織・体制を構築していくことが求められています。
一方、全てのプロジェクトで、上記指標の確認やバイアスを軽減したモデリングを分析者に求めたとしても、それら分析は実装の観点で障壁が高いことも事実です。DataRobotでは、誰でも簡単に、全てのプロジェクトでバイアスの確認やバイアス低減のための実装を行うことができます。バイアスに関する理解と、実装を可能にするプラットフォームで、次の時代に求められるAIプロジェクトを一緒に進めていきましょう。

参考文献

[1] B. H. Zhang, B. Lemoine, and M. Mitchell, “Mitigating Unwanted Biases with Adversarial Learning”, AIES ’18: Proceedings of the 2018 AAAI/ACM Conference on AI, Ethics, and Society, 2018

[2] Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio, “Generative Adversarial Nets”, Advances in Neural Information Processing Systems 27 (NIPS 2014), 2014

[3] Kamiran, F., Karim, A., Zhang, X, “Decision theory for discrimination-aware classification”,  2012 IEEE International Conference on Data Mining (ICDM 2012), 2012

投稿 AI活用のさらなるステージ:バイアスと公平性 Part 2DataRobot に最初に表示されました。

]]>
AI活用のさらなるステージ:バイアスと公平性 Part 1 https://www.datarobot.com/jp/blog/bias_and_fairness_part-1/ Tue, 13 Dec 2022 06:43:18 +0000 https://www.datarobot.com/jp/?post_type=blog&p=10492 はじめに DataRobotで主に政府公共領域やヘルスケア業界のお客様を担当しているデータサイエンティストの若月です。 機械学習によるAIが普及する中で、AIが倫理的な、公平な判断をしているかという観点にも焦点があてられ...

投稿 AI活用のさらなるステージ:バイアスと公平性 Part 1DataRobot に最初に表示されました。

]]>
はじめに

DataRobotで主に政府公共領域ヘルスケア業界のお客様を担当しているデータサイエンティストの若月です。

機械学習によるAIが普及する中で、AIが倫理的な、公平な判断をしているかという観点にも焦点があてられるようになってきました。2020年に公開されたドキュメンタリー映画「CODED BIAS」では、白人男性より黒人女性の方が顔認識の精度が低くなってしまう例などをあげ、AIに関する社会問題を紹介しています。バイアスと公平性は、AIが社会に浸透してきた今こそ注目をしなければならない領域です。

本稿Part 1ではバイアスと公平性がなぜ重要なのか、その発生要因、機械学習モデルのバイアスをどのように評価するのかについて解説します。(Part 2では具体的にどのように機械学習モデルのバイアスを軽減するのか、機械学習プロジェクトにおいてどういった点に留意する必要があるのか、そしてDataRobotでどのようなことができるのかについて解説します)

バイアスと公平性とは

実証実験段階をクリアしたAIの社会実装が進む昨今、AIガバナンスの重要性が叫ばれるようになってきています。日本においても内閣府による「人間中心のAI社会原則」[1](2019年)や、経済産業省による「我が国のAIガバナンスの在り方」[2](2021年ver1.1に更新)「AI原則実践のためのガバナンス・ガイドライン」[3](2022年ver1.1に更新)が発表されています。このようにAIの社会実装のガイドライン整備が進んできているのは、AIがただの実証実験にとどまらず、実際のビジネス・業務において当たり前のように活用されるようになったことの証左と言えるでしょう。一方で、筆者の所見ではAI活用のあり方を十分に設計・検討した上で実践できている組織は、2022年現在においてはまだ多いとは言えないように見受けられます。

AIガバナンスは非常に広範に渡る概念ではありますが、中でもモデルの公平性についてはモデル開発者・利用者含むステークホルダー全員がしっかりと意識する必要があります。先述の「人間中心のAI社会原則」においても、「公平性、説明責任及び透明性の原則」が定められており、AIの利用によって人々が不当な差別・不当な扱いを受けないように説明責任・信頼性が担保される必要があるとされています。

blog bias 1
図1 人間中心のAI社会原則[1]をもとにDataRobotが作成

なぜAIの利用による差別が発生しうるのでしょうか。機械学習では過去のデータに基づいて将来の予測を行うので、学習したデータに意図的か意図的でないかにかかわらずバイアスが含まれていた場合、そこから得られる予測結果は偏見・ステレオタイプを含んだ不公平なものになっている恐れがあります。

たとえば、採用活動における書類選考過程をAIを用いて効率化しようとするプロジェクトがあったとします。データサイエンティストは過去の履歴書データなどを使ってモデルを作成しますが、もし過去の応募者・内定者の男女比に偏り(バイアス)があった場合、そのデータから作成した機械学習モデルは男女のどちらか一方に有利な評価を行う不公平なものになってしまっている可能性があります。無論「不公平な」モデルを実際に使用して意思決定を行うのは男女雇用機会均等の観点から望ましくないといえます。

このように単純に精度のみを追い求めて(知らず知らずのうちに)公平性を欠いたAIモデルを作ってしまい、もし将来不公平なモデルが作られていたこと/運用されていたことが発覚すればプロジェクトの中止、最悪の場合企業・組織の社会的信用にまで影響を与えてしまう可能性があります(米国における再犯予測システムの事例)。したがってプロジェクトに携わる全員が正しくモデルの公平性を理解し、推進する必要があります。

バイアス発生の根本原因

不公平なAIモデルが作られる原因となるバイアスはデータそのものに内在しますが、バイアス発生の根本原因はデータの収集・生成プロセスにあると言えるでしょう。具体的にまとめると以下3つの根本原因が考えられます。

データ量

データ量が少ない、もしくは全体としてはデータ量が多くても特定の属性に関するデータ量が少ないという状況では、属性によっては適切な予測ができないかもしれません。

例えば、国政選挙において誰が当選するかを予測するAIを仮想的に考えてみましょう。日本では2022年現在も、女性の政治参加率の低さがたびたび指摘されています。実際にそれを裏付けるデータとして女性国会議員の割合をみると2018年2月現在で衆議院10.1%(47人)、参議院20.7%(50人)と報告されています(内閣府による発表[4])。

女性が少ない過去の実績データを使って作成したモデルによって国会議員全体の当選予測をしようとすると、データ数の多い男性候補者に比べて女性候補者の適切な予測ができない可能性があります。このように、社会的・歴史的背景によってそもそも特定の属性のデータが少ない、というバイアスは様々な分野で見られます。

サンプリング

データ量の例とも一部共通しますが、本来の母集団から特定の属性のみを抽出しているような状況では選択(セレクション)バイアスが発生します(参考:機械学習を用いた要因分析 – 理論編 Part 2)。例えば金融機関における与信審査において機械学習モデルを使って判定を行っている場合、モデルによって選別された”属性の良い”グループのみのデータが収集されることになるので、これもセレクションバイアスといえます。

blog bias 2
図2 与信審査におけるセレクションバイアス

ラベルづけ等、意思決定におけるバイアス

ビジネスデータにおいては人がラベルづけすることも多いですが、その人の判断そのものにバイアスが含まれていた場合、生成されたラベルにもバイアスが入り込むことになります。仮に、ある企業で男性の方が採用時に優遇されているという慣行(逆も然り)があったなら、採用予測モデル構築のために使われるトレーニングデータにはバイアスが含まれていると言えます。
公平性の考え方:公平性指標

モデルの公平性はどのように判断できるでしょうか。実はモデルの公平性を定量的に測定する指標がいくつか提案されていますが、どの指標を選択するかはプロジェクトによって変わってきます。例えば採用活動において男女の公平性を担保しようとしても、採用する男女の絶対数を合わせるのか、応募者に対する採用人数の比率を男女で合わせるのか、それは組織の方針によって決まってくるでしょう。以下では公平性指標の概要をご紹介します。(詳細は、DataRobotの公式ドキュメントもご参照ください)

具体例を示しながら説明するため、本章ではある従業員の賃金が一定金額以上かどうか(高いか低いか)を予測する二値分類モデルを仮想例として取り上げます。また、”好ましい”あるいは”好ましくない”という用語が出てきますが、この例では賃金が高いのが”好ましい”予測で、賃金が低いのが”好ましくない”予測とします。

それでは、以下のような男性10名、女性5名のデータをもとにいくつかの公平性指標を算出してみましょう。いずれの指標も男女間で値が近いほど公平である、と判断します。 本例ではモデルを性別に対して公平にしていきたいので、特徴量「性別」を予測結果に対して公平性を担保したいカテゴリ特徴量(以下”保護された特徴量”)と考えます。

blog bias table1
表1 男女別の賃金予測(二値分類)のデータ例

公平性指標の一覧

各公平性指標の具体的な説明に入る前に、どのようなものがあるのか一覧で見てみましょう。

blog bias table2 new
表2 公平性指標の一覧と計算値

また、数式の表現については以下をご参照ください。

blog bias text1

割合の平等性(Proportional Parity)

定義: 保護された特徴量の各クラス(男女)について、好ましい(賃金が高い)予測がなされたデータの全体に対する割合。


イメージ: 賃金が高いと予測した割合が男女で公平であるかどうかを確認します。


計算: 表1のデータでは、賃金が高いと予測されているのが男性だと10人中5人なので0.5になるのに対して、女性は5人中1人なので0.2です。なお、DataRobotでは最も値が高くなるクラスで正規化した値がデフォルトで表示されるので、男性だと0.5/0.5 = 1.0, 女性だと0.2/0.5 = 0.4となります。(この表示ルールは他の指標でも同様です)

blog bias table3
表3 男性・女性ごとに賃金が高いと予測されるデータの割合に着目する

同数の平等性(Equal Parity)

定義: 保護された特徴量の各クラス(男女)について、好ましい(賃金が高い)と予測された数。


イメージ: 賃金が高いと予測した数(割合ではない)が男女で公平であるかどうかを確認します。


計算: 表1の例では、賃金が高いと予測されているのが男性5人に対して、女性は1人です(正規化すると男性1.0, 女性0.2)。分類結果の絶対数を合わせたいときはこの指標を使うのが良いでしょう。

blog bias table4
表4 男性・女性ごとに賃金が高いと予測されるデータの数に着目する

好ましいクラスのバランス(Favorable Class Balance) / 好ましくないクラスのバランス(Unfavorable Class Balance)

定義: 好ましいクラスのバランスは、保護された特徴量の各クラス(男女)について、実績として好ましい(賃金が高い)クラスに属するデータの予測スコアの平均


イメージ: 賃金が高いと予測したラベルの割合ではなく、賃金が高いと予測する確率に公平性があるかどうかを確認します。予測する確率でランキングを作る際に用いられます。


計算: 表1の例では、「好ましいクラスのバランス」は正規化前の値が男性は0.614に対して女性は0.55です。「好ましくないクラスのバランス」では逆に、実績として賃金が低いクラスに属するデータの予測スコアの平均になります。

blog bias table5
表5 「好ましいクラスのバランス」では男性・女性ごとに実績として賃金が高いデータの予測スコアに着目する
blog bias table6
表6 「好ましくないクラスのバランス」では男性・女性ごとに実績として賃金が低いデータの予測スコアに着目する

好ましいクラスの再現率の平等性(True Favorable Rate Parity) / 好ましくないクラスの再現率の平等性(True Unfavorable Rate Parity)


定義: 好ましいクラスの再現率の平等性は、保護された特徴量の各クラス(男女)について、好ましい(賃金が高い)クラスの再現率(Recall)。

イメージ: 精度評価指標として再現率を重視するようなプロジェクト(例えば医療業界における疾患の判定など)において、男女間での差が少ないモデルであることを担保したいときに用いられます。


計算: 「好ましいクラスの再現率の平等性」は表1の例では、正規化前の値が男性は4/7 = 0.57に対して女性は1/2 = 0.50です。
「好ましくないクラスの再現率の平等性」では逆に賃金が低いクラスの再現率を確認します。

blog bias table7
表7 「好ましいクラスの再現率の平等性」では男性・女性ごとに賃金が高い実績データに着目し、予測データから再現率を計算する(今回の例の場合、精度指標としての再現率に一致する)
blog bias table8
表8 「好ましくないクラスの再現率の平等性」では男性・女性ごとに賃金が低い実績データに着目し、予測データから再現率を計算する

好ましいクラスの適合率の平等性(Favorable Predictive Value Parity) / 好ましくないクラスの適合率の平等性(Unfavorable Predictive Value Parity)


定義: 好ましい予測値の平等性は、保護された特徴量の各クラス(男女)について、好ましい(賃金が高い)クラスの適合率(Precision)。


イメージ: 好ましいクラスの再現率の平等性と同じ発想ですが、精度評価指標として適合率を重視するようなプロジェクト(例えば児童虐待やハラスメントの判別など、モデルが検知した結果が間違っていたときに大きな問題になりかねないために偽陽性をなるべく少なくしたいテーマ)において、男女間での差が少ないモデルであることを担保したいときに用いられます。


計算: 「好ましいクラスの適合率の平等性」は、表1を例にすると、正規化前の値が男性は4/5 = 0.8に対して女性は1/1 = 1.0です。
「好ましくないクラスの適合率の平等性」では逆に賃金が低いクラスの適合率を確認します。

blog bias table9
表9 「好ましいクラスの適合率の平等性」では男性・女性ごとに賃金が高い予測データに着目し、実績データから適合率を計算する(今回の例の場合、精度指標としての適合率に一致する)
blog bias table10
表10 「好ましくないクラスの適合率の平等性」では男性・女性ごとに賃金が低い予測データに着目し、実績データから適合率を計算する

繰り返しになりますが、どういった指標を用いるかはプロジェクトによって変わってきますし、実際の計算例をみても男女間での差異が指標によってもかなり異なってくることが見て取れます(指標次第で男女間での値の大小が逆転しているものすらあります!)。従って、「〇〇を選べば良い」といった類のものではなく、ユースケースやドメイン知識、組織のポリシーに基づいて適切な指標をプロジェクトの担当者が選択する必要があります

別の仮想例として「採用時の応募者一次スクリーニングプロジェクト」を考えてみましょう。もし組織の採用ポリシーが「応募人数に対する採用人数の割合について、男女間で大きな差が生じないようにする」であれば、公平性の指標は「割合の平等性」を採用するのが適正と考えられます。しかし、もし採用ポリシーが「応募者の男女比に関係なく、男女同数の内定者をだす」であれば、「同数の平等性」を採用するのが適正と考えられます。

このように、公平性指標の選択には絶対基準が存在するわけではなく、機械学習モデルで解決しようとしている課題(ユースケース)やそのモデルの運用ポリシー、組織のポリシー・ルールを反映させた指標を柔軟に選ぶ必要があります。

まとめ

以上、本稿Part1では以下のトピックに注目して解説しました。

  • バイアスと公平性とは、その重要性
  • バイアスの発生原因
  • 公平性指標

本稿で述べた通り、バイアスと公平性はAIが組織的に活用されるようになった今こそ、改めてその重要性を認識する必要があります。AIの活用が実証実験にとどまっていた段階ではあまり意識が向けられていなかったかもしれませんが、これからますますAIの活用が広がる中でデータサイエンティストはもちろん、意思決定者からAIのユーザーに至るまで全員の理解は必須と言っても過言ではないでしょう。まずは読者の皆様が携わられている機械学習プロジェクトにおいて公平性を欠いたモデルが作られていないか、考えてみてはいかがでしょうか。
次回、本稿Part 2では以下を解説します。2023年1月に公開予定です。

  • バイアス軽減のさまざまな手法
  • 実際の機械学習プロジェクト推進における留意点
  • モデルのバイアスに対してDataRobotができること

参考文献

[1] 「人間中心のAI社会原則」(内閣府) (https://www8.cao.go.jp/cstp/ai/ningen/ningen.html) (2022年11月7日に利用)

[2] 「我が国のAIガバナンスの在り方 ver1.1」 (経済産業省)(https://www.meti.go.jp/shingikai/mono_info_service/ai_shakai_jisso/2021070901_report.html) (2022年11月7日に利用)

[3]「AI原則実践のためのガバナンス・ガイドライン ver. 1.1」 (経済産業省)(https://www.meti.go.jp/shingikai/mono_info_service/ai_shakai_jisso/20220128_report.html) (2022年11月7日に利用)

[4]「男女共同参画白書(概要版) 平成30年版」(内閣府) (https://www.gender.go.jp/about_danjo/whitepaper/h30/gaiyou/html/honpen/b1_s01.html) (2022年11月7日に利用)

投稿 AI活用のさらなるステージ:バイアスと公平性 Part 1DataRobot に最初に表示されました。

]]>
DataRobotを用いたアップリフトモデリング https://www.datarobot.com/jp/blog/upliftmodeling/ Tue, 25 Oct 2022 00:59:46 +0000 https://www.datarobot.com/jp/?post_type=blog&p=10419 ターゲットマーケティングなどで近年注目されているアップリフトモデリングは、介入効果を個別またはサブグループごとに予測することで介入すべき対象を明らかにする手法です。本記事では、アップリフトモデリングのメリットや適用範囲・注意点を説明し、DataRobotを用いたシンプルな操作によるモデル構築方法をご紹介します。

投稿 DataRobotを用いたアップリフトモデリングDataRobot に最初に表示されました。

]]>
DataRobotで小売・流通業界のお客様を担当しているデータサイエンティストの濱上です。

 本稿では、マーケティング、ヘルスケア、公共政策などの分野での活用が期待されるアップリフトモデリングをご紹介します。アップリフトモデリングのコンセプトは目新しいものではありませんが、AI・機械学習の発展により、誰でもアップリフトモデリングを実践できるようになりました。しかしながら、アップリフトモデリングに必要なデータセットや適用範囲を理解していないと、全く意味のないモデルが構築されてしまいます。そこで、本稿では、アップリフトモデリングの注意点やユースケースを説明し、 DataRobotを利用したモデリング方法をご紹介します。

1. アップリフトモデリングとは

 人生は選択の連続です。皆さんも、『もし転職すれば年収はどれくらいになるだろうか』とか、『もしジムに通えばどれくらいダイエットできるだろうか』などと考えることがあるかもしれません。ビジネスにおいても、「このユーザーにダイレクトメール(DM)を送れば購入してもらえるだろうか」とか、「値引きしなくても購入してもらえるだろうか」などと営業・マーケティング担当は日々、頭を悩ませているかもしれません。そもそも人間は2人分の人生を送れないので、「仮定のアクション」をとればどのような結果になるのかを想像するのです。

 少し哲学的な話になりましたが、因果推論[1]の文脈では、現実とは反対の状況をシミュレーションすることを反実仮想といいます。本稿で紹介するアップリフトモデリングとは、まさに反実仮想の考えを用いて介入効果を予測する方法であり、マーケティング、ヘルスケア、公共政策などさまざまなフィールドで応用できます。

1−1.アップリフトモデリングの定義とメリット

 一般的に、アップリフトモデルは以下のように定義されます。[2]

  • アップリフトモデルとは、個別ないしサブグループごとに介入効果を予測・推論するモデルのこと。

 介入効果とは、ある対象に介入したときに観察される結果Aと、同じ対象に介入しなかったときに観察される結果Bとの差のことです(図1)。例えば、あるユーザーにクーポンを送付したときの購入確率が50%、同じユーザーにクーポンを送付しなかったときの購入確率が20%のとき、介入効果は 50% – 20% = 30% と計算されます。

 このように、ユーザーごとに介入効果を計算できれば、介入効果が高いユーザーに絞ってクーポンを送付することで費用対効果を改善できます。しかし、実際には、ある1人のユーザーに「介入したとき」と「介入しなかったとき」を両方とも体験してもらうことはできません。つまり、そのユーザーにクーポンを送ってしまえば、クーポンを送らなかったとしても購入したのかどうかは分かりません。

  そこで、アップリフトモデルの出番です。アップリフトモデルを使って、我々がそのユーザーに「介入したとき」と「介入しなかったとき」の結果をシミュレーションし、介入効果を算出します。魔法のようなモデルと感じるかもしれませんが、モデリングに使用するデータセットを工夫すればそのようなモデルを構築することが可能です。データセットの工夫については後ほど詳しくご紹介します。

図1.介入効果
図1.介入効果

1−2.アップリフトモデリングを使うべきときとは

 アップリフトモデリングは、効果検証のいかなるケースでも使えるわけではありません。

 具体的に、アップリフトモデリングが適しているのは、以下のように我々が介入を検討している対象が4つのグループに分けられると想定されるときです(図2)。それぞれ見ていきましょう。

 「鉄板」ユーザーとはクーポンを発行する場合も買うし、クーポンを発行しない場合も買うユーザーです。一方で、「説得可能」なユーザーは、クーポンを発行しない場合は買わないが、クーポンを発行する場合に買うユーザーです。営業・マーケティング担当者は「鉄板」ユーザーではなく「説得可能」なユーザーにこそクーポンを送付したいはずです。また、クーポンを発行しても買わない「無関心」なユーザーやクーポンの発行により逆に買わなくなる「あまのじゃく」なユーザーにはクーポンを送付すべきではありません。

 介入効果の観点では、効果が大きい順に「説得可能」 >>「鉄板」,「無関心」>「あまのじゃく」という順番になります。アップリフトモデルで個々のユーザーの介入効果を推定して達成したいことは、「説得可能」なユーザーの選別です。

図2.アップリフトモデリングのユースケース
図2.アップリフトモデリングのユースケース

1−3.レスポンスモデルとの比較

 アップリフトモデリングは上図のように4つのグループがあるときに適していますが、世の中には「鉄板」が存在しないケースがあります。例えば、新しいブランドで、世間にまったく認知されていない製品です。

 このようなケースでは、何もせずとも買ってくれるような「鉄板」ユーザーはいないので、広告やプロモーションなどの介入を行うことが前提となります。そのため、これから介入すべきユーザーを選定するためには、これまでに介入した時の結果のデータのみを使用してモデリングします。このモデルは、介入したユーザーの中で、どのようなユーザーがレスポンス(=購入)する確率が高いのか学習し、予測するモデルなのでレスポンスモデルと呼ばれます(表1)。[3]

 一方で、アップリフトモデリングでは、介入しなくても購入する「鉄板」がいるため、介入したデータ(介入群データ)に加えて、介入していないデータ(対照群データ)もモデリングに利用します。介入していないユーザーの中で、どのようなユーザーが購入する確率が高いのか学習させるためです。

 モデル構築を担当する分析者は目の前の状況がどちらのユースケースに適しているのか見極めて両者を適切に使い分けることが大切です。

1
表1.レスポンスモデルとアップリフトモデル

ここから、DataRobotを用いてアップリフトモデルを構築するための手順をご紹介します。まず、アップリフトモデリングの成功に欠かせないデータセットの工夫について話します。

2−1.データ準備

 アップリフトモデリングでは、介入群データと対照群データを使用すると述べました。ここで重要なのが、介入対象となるユーザーの選択にバイアスがあってはいけないという点です。では、なぜ、このような「選択バイアス」があるといけないのでしょうか。

 例として、外食デリバリーサービスの利用を促すDMを各世帯に送付するケースを考えます。このサービスの購入には、世帯人数、平均年齢、世帯収入、居住地、リモートワークの有無、夫婦共働きか、など様々な因子が関係していそうです。例えば、共働き世帯は外食デリバリーサービスを利用しやすいかもしれません。(なお、疫学分野ではこれらの因子を『曝露因子』と呼びます。)

 そこで、共働き世帯に絞ってDMを送付したとします。その結果、思惑どおり、DM送付した世帯は、DM送付していない世帯よりも全体としてサービスの購入確率が大きいことが分かりました。しかし、その購入確率の差は、DM送付が功を奏したからなのか、単純に共働き世帯が購入しやすいからなのか、それとも世帯収入などその他の因子が影響したからなのか判別できません。

 この状況を図で表すと次のような関係となります(図3)。原因から結果に向けて矢印が伸びています。われわれは、「DM送付」と「購入」の間の因果関係を知りたいのに、上記の仮想ケースでは「共働き世帯か」という尺度でDM送付対象を決めてしまったが故に、注目している因果関係の大きさ(=介入効果)を見積もることができなくなっています。

 このように介入対象の選択にバイアスがかかってしまうと介入効果を正しく計ることができません。なお、ここで「共働き世帯か」のように、注目している要因にも結果にも影響する因子のことを交絡因子といいます。交絡因子がある状況でどのように因果推論するのかについては弊社ブログ「機械学習を用いた要因分析(理論編1理論編2)」で詳しく解説しています。

図3.因果関係を表す図
図3.因果関係を表す図

 それでは、選択バイアスのないデータを準備するにはどうすればいいでしょうか。理想はランダム化比較試験(RCT)を実施することです。[4] RCTでは、母集団を介入群と対照群にランダムに振り分けます。しかし、実世界においては選択バイアスがかかったデータしか手元になかったり、そもそも倫理的・コスト的にRCTが難しかったりするケースが見られます。そこで、観察データを用いた観察研究の文脈において選択バイアスを取り除くための方法として層別化や傾向スコアマッチングなど様々な手法が知られています。弊社ブログ「機械学習を用いた要因分析(実践編)」では、DataRobotを用いた傾向スコアマッチングのやり方をご紹介していますので、ぜひご覧ください。(なお「機械学習を用いた要因分析(理論編2)」に記載があるように、重要な交絡因子を網羅していることがこの手法を適用するための前提条件となるので、その点は十分にご留意ください。)

 選択バイアスの影響が無視できると考えられるデータセットを準備できてはじめてアップリフトモデリングを構築することができます。それでは、バイアスのないデータセットが準備できたとして、DataRobotでどのようにモデリングするのかご紹介します。

2−2.モデリングと予測実行

 DataRobotはシンプルなユーザーインターフェースでAIモデルを作成でき、モデル評価やインサイト確認、予測実行までスムーズに行うことができます。アップリフトモデリングでも基本的なモデリング手順は変わりません(図4)。

 まず、学習データをDataRobotにアップロードしモデルを作成します。なお、ここで使用する学習データは、母集団をランダムに介入群(DM送付=True)と対照群(DM送付=False)に分けてDMを送付した結果、各ユーザーが購入したかどうかTrueまたはFalseでラベル付けしたものです。[5]

 次に、モデルの中身(インサイト)を確認します。

 最後に、予測データをモデルに投入し、各ユーザーごとに介入効果を予測します。ここで、予測データは各ユーザーにつきDM送付=Trueの行とDM送付=Falseの行を用意します(図5)。このように2行用意することで、同一人物に「介入したとき」と「介入しなかったとき」の2パターンをシミュレーションすることができるのです。その2パターンの購入確率の差が、介入効果になります。この図では、UserID=10001の介入効果は0%に対し、UserID=10002の介入効果は20%であるため後者にDMを送付したほうがよいと判断できます。

図4.モデリングと予測実行手順
図4.モデリングと予測実行手順
図5.予測データ(拡大)
図5.予測データ(拡大)

①モデルの作成

 まず、学習データをDataRobotにアップロードします。アップロードが完了すると以下のようなモデリング設定画面に移行します(図6)。何を予測しますか?に予測ターゲットを入力します。本データセットでの予測ターゲットは「購入」です。次に、開始ボタンを押してモデリングを開始します。

図6.モデリングの設定
図6.モデリングの設定

②モデルの確認

 モデリングが終了するとモデルの順位表であるリーダーボードの画面に移行します。リーダーボードでは各モデルの予測精度やインサイトを確認できます。

 それでは、1つモデルを選択し、解釈タブを開いてインサイトを確認します。まず、知りたいのは、「DM送付」が「購入」に対してどれくらいインパクトがあるのかです。そのインパクトは特徴量のインパクトで確認できます(図7)。グラフの縦軸は特徴量の名前、横軸は相対的なインパクトの大きさを示しています。

 グラフから「DM送付」は3番目にインパクトが大きい特徴量であることが分かります。仮に、「DM送付」のインパクトが非常に小さいときは、DM送付による効果が実際にはあったとしても、大きな効果として予測値に反映されないため介入効果の解釈が難しくなります。その場合は、もしインパクトの大きい交絡因子があればその特徴量で層別し、それぞれの群のデータでモデリングする(層別分析[6])などの工夫が必要です。

図7.特徴量のインパクト
図7.特徴量のインパクト

 特徴量のインパクトから、「DM送付」が「購入」に対してどれくらいインパクトがあるのかを確認できます。一方、この情報からは「DM送付」と「購入」の間にどのような関係性があるのかまでは分かりません。そこで、特徴量ごとの作用を確認します(図8)。

 特徴量ごとの作用では、DM送付=TrueのときとDM送付=Falseのときで、購入確率にどれくらい差があるのか分かります。DM送付=Trueのときのほうが約4%購入確率が高いことが分かりますね。しかし、これは、あくまでデータ全体の平均的な傾向です。ユーザーの中には、DM送付が購入意思に影響しない「鉄板」や「無関心」のユーザーもいるかもしれませんが、特徴量ごとの作用ではユーザーごとの介入効果は分かりません。そこで、次に、ユーザーごとの介入効果を予測してみましょう。

図8.特徴量ごとの作用
図8.特徴量ごとの作用

③予測実行

 それでは、実際にDataRobotを使って介入効果を予測します。今回は最初にアップロードしたデータの20%に相当するホールドアウトをダウンロードし、介入効果を予測するための予測データを作成しました。

 予測データを予測を作成にアップロードし、予測を実行予測をダウンロードの順にクリックし(図9)、CSV形式で予測値を確認できます。最後に、DM送付=Trueのときの予測値とDM送付=Falseのときの予測値の差をとって、各ユーザにおける介入効果を算出します。

図9.予測実行
図9.予測実行

2−3.モデル評価

 各ユーザーの介入効果の予測値を表に示します(図10)。この表では予測された介入効果が大きいユーザーから順にソートしてあります。したがって、上から順にDM送付していくことで高い費用対効果が得られると期待できます。

 一方で、果たして本当に、表の上に並ぶユーザーほど介入効果が大きいのか疑問に思いませんか?そこで、介入効果の実測値を算出してみましょう。この予測データには、各ユーザーが購入した(購入=True)か購入していない(購入=False)かの実測値があるので、介入効果の実測値を算出できます。なお、予測データも介入群と対照群の分け方にバイアスがない、もしくは補正されたものを使用する必要があります。(さらに、予測データに属する群と学習データに属する群の間にバイアスがないことも前提となります。)

 それでは、介入効果の実測値を算出します。まず、この表を使って、上から順にグループ0、グループ1‥‥グループ9というように10個のグループに分けます。グループの数は任意です。次に、各グループの中で、DM送付=Trueのユーザーの購入確率の平均とDM送付=Falseのユーザーの購入確率の平均を計算します。グループ0ではそれぞれ25%、16.6%と算出されます。次に、その差をとることで介入効果の実績値を算出します。25%-16.6%=8.4%が介入効果の実績値です。一方で、各グループで介入効果の予測値の平均を算出します。グループ0では予測値の平均は8.0%になります。

図10.介入効果の実測値の算出
図10.介入効果の実測値の算出

 その他のグループ1~9でも同様に介入効果を計算します。その結果が以下のグラフです(図11)。横軸がグループで、縦軸が購入確率です。青とオレンジのバーが、DM送付=TrueないしDM送付=Falseのときの平均購入確率(実測値)で、緑のバーがその差の介入効果の実測値です。そして、赤のバーが介入効果の予測値の平均となっています。緑と赤のバーを比較すると、赤の予測値が小さくなるにつれて、緑の実績値も小さくなっていることが分かります。予測が当たっている証拠です。

 さらに、グラフをよく見るとグループ5までは介入効果の実測値はプラスですが、グループ6以降はゼロまたはマイナスになっています。したがって、グループ6以降のユーザーにDMを送付しても、それによる効果は見込めないことが分かります。言い換えると、アップリフトモデルにより、DMを送付すべきユーザーを全体の60%に絞り込むことができたのです。

 DM送付には、作成、印刷、郵送費などのコストがかかりますので、ユーザー全員に送付するのに比較して40%もコストを削減することができ、且つ同じだけの効果が得られることになります。このように、グラフを描くことで、介入効果が高いグループを絞りこめているか判断できます。なお、複数のアップリフトモデルの精度を比較したいときは、The Area Under the Uplift Curve(AUUC)[7]やQini係数[2]などの評価指標で比べるほうがより細かな差を判定できます。

図11.介入効果の実測値と予測値の比較
図11.介入効果の実測値と予測値の比較

3. まとめ

 以上、アップリフトモデリングのコンセプトからDataRobotを用いたモデリングおよび予測実行までご紹介してきました。本稿で述べたことをまとめると以下になります。

  • アップリフトモデリングの成功のためには、ユースケースを把握し、データ準備においては選択バイアスのないもしくは取り除いたデータを用意することが必要不可欠である。
  • DataRobotを用いれば、シンプルな操作でアップリフトモデルを構築でき、予測実行まで簡単に行える。

皆様の業務においてアップリフトモデリングの活用イメージが膨らんでおりましたら幸いです。

参考文献

  1. 因果推論の入門書として以下の書籍をお薦めいたします。
    1. データ分析の力 因果関係に迫る思考法 (光文社新書), 伊藤 公一朗 (著)
    2. 岩波データサイエンス Vol.3, 岩波データサイエンス刊行委員会 (編集)
  2. Gutierrez, P., Gérardy, J. Y. (2017) Causal Inference and Uplift Modelling: A Review of the Literature. Proceedings of The 3rd International Conference on Predictive Applications and APIs, 1-13.
  3. Radcliff, N. (2007) Using control groups to target on predicted lift: Building and assessing uplift model. Direct Market J Direct Market Assoc Anal Council, 1:14–21.
  4. RCT大全 ランダム化比較試験は世界をどう変えたのか(みすず書房),アンドリュー・リー(著),上原裕美子(訳)
  5. Kevin Hillstrom’s dataset from E-Mail Analytics And Data Mining Challenge(2008)で公開されているデータセットを一部加工
  6. 岩波データサイエンス Vol.3, 岩波データサイエンス刊行委員会 (編集) p.17-20
  7. Jaskowski, M., Jaroszewicz, S. (2012) Uplift modeling for clinical trial data. In ICML Workshop on Clinical Data Analysis

投稿 DataRobotを用いたアップリフトモデリングDataRobot に最初に表示されました。

]]>
機械学習における不均衡データへの対処法 https://www.datarobot.com/jp/blog/inbalanceddata/ Wed, 05 Oct 2022 08:59:45 +0000 https://www.datarobot.com/jp/?post_type=blog&p=10028 片方のクラスが極端に少ない、あるいは大半の値がゼロといったゼロ過剰などのバランスの悪いデータを不均衡データといいます。このようなデータの偏りは、予測結果の偏りにつながるなどという問題があります。本記事では、不均衡データへの代表的な対処法を紹介し、DataRobotにおいてこの問題をどう扱うかについて解説します。

投稿 機械学習における不均衡データへの対処法DataRobot に最初に表示されました。

]]>
はじめに

DataRobot で小売・流通業のお客様を担当しているデータサイエンティストの井原です。

データサイエンスにおけるモデリング段階で、実際に得られるデータのサンプル数が限られている場合があります。特に、特定のデータが少なくそのパターンを見つけにくい場合、目的とことなった結果を算出しているのに、表面上は問題がないようにみえてしまうことがあります。
本稿では、機械学習のモデリングにおいて偏りのあるデータに遭遇したときに、どう対処したらよいかを状況別に分けて紹介します。なお、ここで扱うデータはテーブルデータを前提としています。

不均衡データとはなにか

 機械学習の予測モデルを作る際に、予測対象となるターゲットのバランスが悪い場合があります。例えば、分類において片方のクラスが極端に少ない状況がこれに該当します。このような偏りのあるデータは不均衡データ(インバランスデータ)と呼ばれます。

 例えば、予測ターゲットが「正常」あるいは「異常」である二値分類のデータセットのうち、「正常」のラベルをもつサンプルが100,000、「異常」のラベルをもつサンプルが10の場合、異常のサンプル数が極端に少ない不均衡なデータになっています。

 このようにデータが不均衡になる原因として、サンプルの少ないクラスの事象は稀にしか起こらないイベントであることがよくあります。しかし、稀なイベントにも関わらず、実は全体に大きな影響を及ぼすことが多く、この稀なイベントを予測することは重要な課題です。

 データの不均衡は特定の分野に限らず幅広い分野で起こりえます。不均衡データが起こりやすい課題の例として、機械の故障検知、割引キャンペーンによって購買する人の検出、社員の退職予測、薬で副作用が起こる人の予測、クレジットカードの不正利用の検知などが挙げられます。これらの課題に共通しているのは、前述の通り、予測対象が稀なイベントであるという点です。ではこのような不均衡なデータを分析する際には何に注意をしたらよいのでしょうか。

不均衡データの分析における問題点

 不均衡なデータは通常のデータと比較して、サンプル数の少ない少数派クラス(マイノリティクラス)に対するモデルの感度が低くなります。そのため、不均衡データに適切な対処をせずにモデルを作ってしまうと精度、計算量、インサイトなどの面で問題が生じます。

 まずは精度面での問題をみていきましょう。例えば、割引キャンペーンによって購入する人を予測したい場合、モデリングに使用する過去のデータは購入した人が非常に少ないデータになっていることがあります。ここで、割引キャンペーン対象者1万人のうち、実際に購入まで至ったのは100人だったとしましょう。(図1)このような不均衡データを元にこれからの対象者がキャンペーンによって購入するかどうかをターゲットとしてモデリングしたときに、全員を「購入なし」と分類したとしても正解率 (Accuracy) は99%になります。 

図1: 不均衡データの悪い影響が出ているモデルの混同行列
図1: 不均衡データの悪い影響が出ているモデルの混同行列

数値だけ見ると良い予測精度ですが、モデリングの当初のターゲットである「割引キャンペーンで購入する人」100人は全く当てられていません。このように、何も意識せずに不均衡なデータでモデリングをすると、誤った結果を導いてしまうことがあります。

 不均衡データはモデルの精度面だけではなく、計算コストの問題も抱えています。前述の割引キャンペーンの例では、モデルを学習するときに、ほとんどの時間を「購入なし」に費やします。長い計算時間をかけても、結果的に「購入あり」の判別にはそれほど貢献できないモデルしか作ることができません。

 少数派のクラスが多数派のクラスより重要視されるような場合、モデル構築時にこの不均衡をどう考慮すればよいのでしょうか。

不均衡データの一般的な対処法

 不均衡データの代表的な対処法としてデータの工夫や適切な最適化指標の選択があります。ここでは不均衡データの対処法について、データサイズと不均衡具合の観点で状況を3つに分け、それぞれの対処法を紹介します。

  1. データサイズがそれほど大きくない場合 (~数GB)

 データサイズが大きくなく計算量がそれほど問題にならない場合は、目的に沿った精度を得ることに注力します。不均衡データの対策として、多数派クラス(マジョリティクラス)のサンプルを捨てることによる偏りの低減(Negative Down Sampling)がよく使われますが、多数派のデータを捨てても精度が上がることはあまりなく最終的な問題解決にはなりません。

 計算量が問題にならない規模の不均衡データで確認したい点は最適化指標です。分類の最適化指標は、重要視する結果がターゲットそのもの(例:対象者が購入するかどうか)あるいはターゲットの確率(例:対象者が購入する確率)どちらであるか、特定のクラスを重要視するかどのクラスも同じように扱うのかなど、状況に応じて決める必要があります。目的に沿った最適化指標を選んでいないと、誤った結果になることがあります。例えば、二値分類でよく使われるROC曲線下の面積(ROC-AUC)は、片方のクラスを重視することはなく両方のクラスを同等に扱います。不均衡データの場合にこの最適化指標を使うと、多数派のクラスを重視しすぎてモデルの質によらずに高い値を取りやすくなることが多々あります。[1]

 最適化指標の選択方法の詳細についてはここでは触れませんが、不均衡なデータセットでも結果が変わらないLogLossや、少数派クラスを重きを置いたPR曲線の下の領域(PR曲線のAUC、AUC-PR)を最適化指標として使用するとよいでしょう。

  1. 少数派クラスのサンプル数が少なくデータサイズが大きい場合 (約1~10%, 数十GB~)

 データサイズが大きいために計算時間がかかっているが少数派クラスのサンプル数はある程度確保できている場合、問題は全体のサンプル数が多すぎることです。そのため、まずは計算量を減らすことで効率よく分析を進めていきます。

 このような場合に一番最初に試すことは、少数派も多数派もまとめてランダムにサンプリングを行い、全体のデータサイズを小さくすることです。少数派と多数派の比率を維持したい場合は層化抽出を行いましょう。この理由は、データサイズが大きくなればなるほど精度が向上していくとは限らず、むしろ通常はある程度のデータサイズから精度改善が緩やかになるためです。

 ここで、どれくらいのサンプリングを行えばよいのかという疑問が生じます。データセットのサイズによる予測ののび具合は、学習データのサンプル数と予測性能の関係を表した学習曲線で確認します。まずは計算時間が許容できる範囲内で小さめのデータセットから試していくと良いでしょう。

 ある程度の精度を保ちながらデータのサイズを小さくすることで、計算時間を削減することができ、特徴量エンジニアリングなど他のところに時間をかけて精度改善の検討ができるようになります。

  1. 少数派クラスのサンプル数が極端に少ないのにデータサイズが大きい場合(約1%以下, 数十GB)

 データの不均衡具合とデータサイズの大きさが問題である場合、両方の問題を解決する必要があります。ランダムサンプリングで全体のサンプル数を減らすと、今回重要視している少数派クラスのサンプル数も減ってしまいます。そこで、多数派のクラスだけをサンプリングする Negative Down Sampling によって計算量を削減します。

 ここで気になるのは、Negative Down Samplingによる精度低下です。これに対しては、サンプリングのシードを変えて繰り返しアンサンブルするブートストラップ法を用いることによって精度低下を補う方法がよく使われます。

 少し違った視点として、問題設計を変える方法もあります。故障検知など、異常状態のデータがなかなか取れない状況では、教師なしの異常検知として課題の再設定をすることもあります。

今回は、データセットサイズと不均衡具合に応じた状況別の一般的な対処法を紹介しています。データによっては該当しない対処法もありますので、あくまで一般的な方法だと理解しておいてください。

DataRobotにおける不均衡データの対処法

 前章では、状況別で以下のような不均衡データの対処法がありました。

  1. 不均衡データにロバストな最適化指標の設定
  2. 学習曲線の確認による適切なデータサイズの決定
  3. Negative Down Samplingによる計算量の削減
  4. Balanced Bootstrapによる精度低下の補填
  5. 異常検知問題としての取り扱い

これらの方法をDataRobotで行うにはどうすればよいのでしょうか。もちろんDataRobotが自動で設定する点もありますが、ユーザ側で指定する箇所もあります。DataRobotがカバーしている機能の範囲を知り、正しく分析を進めていく方法をみていきましょう。

1. 不均衡データにロバストな最適化指標の設定

 不均衡なデータでモデリングする場合、DataRobotは自動的にターゲット変数の値の分布から最適なモデル最適化指標を選択します。

 これまでは分類問題を前提で話を進めてきましたが、不均衡データの問題は分類、回帰どちらでも起こりえる問題です。図2の分類の不均衡データセットの例では、DataRobotは前述のLogLossを最適化指標として選択しています。

図2:DataRobotで不均衡データを使ってモデリングする際の推奨最適化指標 (LogLoss)
図2:DataRobotで不均衡データを使ってモデリングする際の推奨最適化指標 (LogLoss)

同様に、回帰でも、例えばターゲットの値の大半をゼロが占めるような不均衡データ(ゼロ過剰)を扱うことがあります。このようなゼロ過剰の場合には、最適化指標としてTweedie Devianceがよく使われます。DataRobotは回帰の不均衡データの場合でも自動的に適切な最適化指標を選択します。なぜTweedie Devianceが使われるのかを知りたい方はドキュメントページDataRobotの指標をご確認ください。

 ここで、結果のROC曲線も確認しておきましょう。ROC曲線の情報を活用することで、不均衡なデータがモデルのパフォーマンスに与える影響を最小限に抑えることができます。前述の割引キャンペーンの例で考えてみましょう。キャンペーンを実施する際に、できる限りたくさんの人にキャンペーンで購入してほしいのですが、全員にキャンペーンチラシを送るとコストがかさんでしまいます。コストを抑えて購入率の高い人にだけ送付するのか、機会損失を防ぐために多めの人にキャンペーンを案内しておくのかについては、予算やキャンペーンの内容によって変わってきます。予測分布グラフの予測しきい値(図3)を調節することにより、割引キャンペーンで購入すると予測されたが実際は購入しなかった人(偽陽性)と購入しないと予測されたが実際は購入した人(偽陰性)それぞれがどれだけ許容できるかを決定します。これによって、少数派のクラスに対する予測が改善される可能性があります。

図3:ROC曲線タブ内の予測分布グラフ
図3:ROC曲線タブ内の予測分布グラフ

 不均衡データの場合、モデル評価指標のひとつであるマシューズ相関係数を参考にするとよいでしょう。(図4)マシューズ相関係数は混同行列の予測と実測の一致度合いを表す指標で、完全に一致していたら+1、不一致なら-1を取ります。データセットの多数派クラスと少数派クラスの大きさに比例した結果を返すため、不均衡なデータセットから構築されたモデルを評価するのに適しています。

図4:ROC曲線タブ内のマシューズ相関係数
図4:ROC曲線タブ内のマシューズ相関係数
2. 学習曲線の確認による適切なデータサイズの決定

 データセットのサイズを大きくすることに意味があるかどうかを判断ために、サンプルサイズごとの学習曲線を確認します。「どれくらいの規模のデータを用意すればよいのか」は不均衡データを扱うときだけでなく、一般的に機械学習モデルを作る際によく聞かれる質問です。扱うデータにより状況が異なるので決まった回答はありませんが、学習曲線でサンプルサイズを増やしたときにどれくらいスコアが上がるのかを確認することにより、必要なサンプルサイズのあたりを付けることができます。

 DataRobotでは、最初から全てのデータを使わず、最初はデータの一部を使って短時間でモモデリングを行います。図5では、全体の16%のデータから始まって32%、64%とデータを増やしたときに学習曲線(LogLossのスコアがどう減っているか)を確認できます。

図5:モデルページの学習曲線
図5:モデルページの学習曲線

もしデータを増やしたときにスコアがあまり変わっておらずビジネス面での影響が軽微である場合は、サンプルサイズを大きくする必要はないと判断できます。

3. Negative Down Samplingによる計算量の削減

 計算量を削減するために、多数派のクラスのサンプル数だけを減らすNegative Down Samplingを行い、クラスごとのサンプル数のバランスを取ります。(図6)しかし、これではサンプリングバイアスが生じ、少数派サンプルが過大評価されてしまいます。そこで、得られたデータセットの効果が元のクラスのバランスと同じになるように重みづけをします。

図6:サンプリング前とサンプリング後の多数派クラスと少数派クラスのサンプル数
図6:サンプリング前とサンプリング後の多数派クラスと少数派クラスのサンプル数

DataRobotではこの一連の作業をスマートダウンサンプリングとよんでいます。モデリング時にスマートダウンサンプリングのオプションを有効化して使用できます。(図7)なお、データセットのサイズが500MB以上、かつ多数派クラスが少数派クラスの2倍以上データ以下の時には、自動的にスマートダウンサンプリングが適用されます。

図7:スマートダウンサンプリングのオプションの有効化
図7:スマートダウンサンプリングのオプションの有効化

スマートダウンサンプリングの目的は、精度改善ではなくあくまで計算の高速化であることにご注意ください。

4. Balanced Bootstrapによる精度低下の補填

 サンプリングによる精度低下の影響を低減するため、ブートストラップ法を使うことは前章で取り上げました。DataRobotでは、“Balanced” という接頭辞がつくブループリントがBalanced Bootstrapに対応したモデルです。(図8)

図8:Balanced Bootstrapに対応したモデル
図8:Balanced Bootstrapに対応したモデル

このモデルが選ばれるかどうかは手動モードでなければDataRobotによって自動的に決定されるため、不均衡データに対してモデリングすると含まれることがあります。また、リポジトリから ”Balanced” から始まるモデルを選択する方法、あるいは高度なチューニングからbalanced_bootstrapのオプションをTrueにする方法で、手動で設定することも可能です。(図9)

図9:高度なチューニングでBalanced Bootstrapを使うオプションを設定
図9:高度なチューニングでBalanced Bootstrapを使うオプションを設定
5. 異常検知問題としての取り扱い

 DataRobotは分類や回帰の教師あり学習だけではなく、教師なしの異常検知にも対応しています。(図10)どうしても少数派クラスのサンプル数が十分に得られない場合は課題設定を見直すことも検討してください。

図10:DataRobotで異常検知を行う設定
図10:DataRobotで異常検知を行う設定

関連トピック

 最後に、不均衡データの対処法としてよく挙げられるデータの拡張(水増し)について触れます。計算量を減らす目的で行ったNegative Down Samplingでは多数派クラスのサンプル数を減らしましたが、逆に少数派クラスのサンプル数を水増しする方法(アップサンプリング)はどうでしょうか。水増しをした際に元データと水増しデータのサンプルのクラスラベルが同じと保証される場合は、精度向上の可能性があるでしょう。

 例えば、画像データで判別モデルを作る際に、画像を左右反転させたり角度を変えてデータ拡張(Data Augmentation)を行います。この拡張方法がある程度うまくいく理由は、大半の場合は左右反転してもターゲットが同じためです。データ拡張でも例えば人を判別する際に上下反転でデータ拡張を行ってもそれほど精度が上がらないことが大半です。人が逆さまの状態になっていることはあまりないためです。このことから、データを拡張する際には、元のデータと水増ししたデータが同じ対象物と認識できる場合、判別に有用な情報を増やす事ができると言えます。

 現在提案されているテーブルデータにおける少数派クラスのサンプル水増し方法は、元データと水増しデータのクラスラベルが同じであるという仮定が成立していないことがあります。データ拡張を検討する場合は、本当に問題を解決できる手段であるかどうかを考えて実施することが必要です。

最後に

 今回は、偏りのあるデータにおける一般的な対処法とDataRobotにおける対処法を取り上げました。より最適化指標や評価指標について深く知りたい方はモデル最適化指標点評価指標の選び方マシューズ相関係数とはをご覧ください。不均衡データでもこんなに細かい対処はしなくてもよいのではないかと思われたかもしれません。しかし実際、最初に挙げた例のように「全て多数派クラスとして分類」を誤ったアクションにつなげてしまっている状況を時々みかけます。不均衡データに対するそれぞれの対処法で解決できる内容を理解することで、モデリングを実ビジネスに活用していただければと思っています。

 この投稿は、DataRobot Communityに投稿された質問が元になっています。DataRobotの操作方法だけでなく、予測モデリングやプロジェクト管理など、AIプロジェクトを行う上でのお困りごとがありましたらお気軽にコミュニティに投稿してください。

関連ページ

参考文献

[1] T. Saito and M. Rehmsmeier, “The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets,” PLoS One. 2015; 10(3): e0118432. Published online 2015 Mar 4. doi: 10.1371/journal.pone.0118432

投稿 機械学習における不均衡データへの対処法DataRobot に最初に表示されました。

]]>
需要予測におけるクラスタリング技術の活用 https://www.datarobot.com/jp/blog/product-clustering-techniques-in-demand-forecasting/ Wed, 25 May 2022 01:47:22 +0000 https://www.datarobot.com/jp/?post_type=blog&p=9378 需要予測を行う際、特に消費財を扱うような小売業では、数万といった多くのSKUの予測モデルを作成する必要があります。モデル数を増やすと精度向上が期待できますが、管理が煩雑というトレードオフがあります。本ブログでは、多数の商品の需要予測を効率よく行うためのクラスタリング関連のテクニックを紹介します。

投稿 需要予測におけるクラスタリング技術の活用DataRobot に最初に表示されました。

]]>
(このブログポストは Product Clustering Techniques in Demand Forecasting の和訳です)

需要予測は、多くの DataRobot ユーザーが取り組んでいる時系列のユースケースです。過去の販売データ、商品/製品の特徴、イベントカレンダー、経済指標に関するデータを使って、未来の需要予測を行います。この予測をもとに在庫管理やサプライチェーンの計画をして、業務全体の効率化を図ることができます。

さまざまな企業での需要予測における共通課題は、商品ライン、すなわちSKU (Stock Keeping Unit) の多さにどう対処するかです。ここでの問題は、SKU の数が多い場合、全ての SKU について正確な予測を作成するのは簡単ではないということです。特に、消費財を扱う典型的な小売業での需要予測モデルは、何千、何万もの SKU を予測しなければならないこともあります。

SKU 数が多い場合の需要予測モデルのパフォーマンスを向上させるためのいくつかのテクニック(手法)があります。これらのテクニックは商品のクラスタリングを中心としたもので、互いに「近い」または類似している商品カテゴリや SKU をクラスタリングし、一緒にモデル化します。

このブログでは、これらの手法に注目して解説します。需要予測のユースケースでは、これらのテクニックを一つだけでなく、複数適用することもできます。

1. 商品グループごとのクラスタリング

SKU のクラスタリングで最も直感的な方法は、商品グループによってクラスタリング(グループ化)することです。商品の種類によって需要のパターンが異なることは当然です。例えば、高価な宝飾品の需要は比較的低めで金の価格に大きく左右されますが、一般的にネックレスやイヤリングなどのファッション性の高いアクセサリーは需要パターンに一貫性があり取引量も多くなります。テーマ性のある宝飾品の販売パターンには強い季節性があり、バレンタインデーや母の日などの特定イベントにピークを迎えます。このように、ドメイン知識から需要の性質が似ていると考えられる商品グループを一緒にモデル化することでモデルに影響を及ぼす要因をよりよく捉え、結果的に予測精度を高めることができます。また、これらのデータセットを作るために機械学習などの方法を取る必要はなく、商品カテゴリごとにグルーピングすることで簡単に用意できます。

2. 売上プロファイルごとのクラスタリング

商品グループごとにモデルを構築する手法は、シンプルでわかりやすい出発点です。しかし、同じ商品グループでも、販売パターンや性質が大きく異なる商品が存在することもあります。そのような場合には、過去の売上をプロットしてパターンを可視化しながら陳腐化した商品や売上数にゼロがたくさんある商品を特定し、より良いサブクラスタリングを作成することができます。また、可視化によって潜在的なデータの問題を発見したり、ビジネス部門が気づいていないような興味深い販売パターンから洞察を得たりすることができます。

過去の販売パターンを可視化する場合、数千の SKU を可視化するには多少のコーディングスキルが必要かもしれませんが、Python や R で実現するのはそれほど難しい作業ではありません。また、Tableau(英語)や PowerBI などの BI ツールを使えば、これらのタスクを簡単に実行できます。

3. DataRobot でのパフォーマンスクラスタモデルの活用

pasted image 0 3

上図のようなパフォーマンスクラスタモデルでは、ベースとなるモデルを用いたときの各系列の推定精度に基づいて系列データをクラスタリングします。ここではベースモデルとして eXtreme Gradient Boosting モデル(XGB)を使用しています。XGB の推定を数回繰り返した後、モデル性能が類似している系列データを個々のクラスタに割り当てます。上記モデルには5つのクラスタがあります。

モデルが作成したクラスタの数と各クラスタに含まれる系列の数に関する情報は、係数のセクションで確認できます。また、系列 ID とクラスタ番号の対応付けは、同じウィンドウのエクスポートオプションからダウンロードできます。

パフォーマンスクラスタモデルにおけるクラスタ数はモデルのハイパーパラメータの一つで、DataRobot オプション内の高度なチューニングの画面からモデル作成者が最大20クラスタまで設定可能です。

4. DataRobot における系列のインサイト機能の活用

また、系列のインサイトタブを使用して、個々の系列を調査することもできます。系列のインサイトは、異なるバックテストで選択した評価指標(例:SMAPE)に基づき、各系列がどれくらいの精度なのかを教えてくれます。

ここから、モデルのパフォーマンスおよび/または商品グループや販売プロファイルが類似している系列を発見できます。商品クラスタリングはモデル駆動型とビジネス駆動型を組み合わせて行えるので、この商品クラスタリングに基づいて、個々の DataRobot プロジェクトを構築します。

最後に、DataRobot にはデータの蓄積がないコールドスタートとデータがある程度確保できるウォームスタートの両方を同じモデルで扱うことができるブループリントがあります。一般的に、これらのブループリントは2段階のアプローチを使用します。

  1. データ全体に対して、平均化された派生特徴量に対してうまく作用する主効果モデルを構築します。
  2. ステップ1で得た他の商品に共通してみられる特徴量(利用可能な場合)を過去のデータが全くない商品に対して使用して予測を行い、各系列に対するインパクトの大きさを得ます。部分的にデータがある商品に対しては、データ全体に共通する特徴量だけでなく、系列パターンも使用して予測を行います。
pasted image 0 6

以上をまとめると、需要予測のユースケースにおいて、商品クラスタリングのテクニックを使用してモデルの精度パフォーマンスを向上させることができます。また、モデル主導型とビジネス主導型の商品クラスタリングを組み合わせて使用することで、需要予測モデルを最適化できます。DataRobot の Automated Time Series (AutoTS) の詳細については、Automated Time Series の製品ページや、AutoTS HowTo (DataRobot University) の自習教材、 時系列予測に関連するオンデマンドウェブセミナーをご覧ください。

オンデマンド
DataRobot AIX 22 Japan オンデマンド

AIの可能性を示す基調講演や、業界事例を紹介したお客様講演を多数ご視聴いただけます。

オンデマンドで見る
オンデマンドウェビナー
AI の需要予測を用いた在庫最適化
オンデマンドで見る

投稿 需要予測におけるクラスタリング技術の活用DataRobot に最初に表示されました。

]]>
Kaggle スキルのビジネス活用 https://www.datarobot.com/jp/blog/business-use-of-kaggle-skills/ Wed, 20 Apr 2022 02:48:40 +0000 https://www.datarobot.com/jp/?post_type=blog&p=9194 機械学習モデルの精度向上とコスト削減は、どちらでも重要です。もちろん妥協点が必要ですが、最適解を見つけるのは最大の価値を生み出せます。本ブログではDataRobotのお客さんの課題を解決するため、kaggleで鍛えたスキルを活用して、高精度かつ低コストを実現できた事例を紹介します。

投稿 Kaggle スキルのビジネス活用DataRobot に最初に表示されました。

]]>
はじめに

DataRobot のデータサイエンティスト、詹金(センキン)です。

近年機械学習の急速な進歩によって、AI 導入の技術面のハードルも下がり始めていることから、様々な企業が積極的に機械学習の活用を始めています。企業側は、機械学習モデルの精度を重視する一方で、コスト削減も重視しており、そのいずれもが重要です。もちろん妥協点を見出すことは一定程度必要となりますが、単純に妥協するのではなく、そのトレードオフの中で最適解を見出していくことこそが最大のビジネス価値を生み出すための重要なポイントです。

本稿では DataRobot のお客様の課題を解決する過程で実際に Kaggle で学んだ技術を活用して、高精度と低コストを同時に実現することができた事例を紹介します。

精度とコスト両立の最善策

筆者は DataRobot のデータサイエンティストとして、お客様のビジネス価値向上のため、チームメンバーと協働して様々なプロジェクトに携わってきましたが、当然のことながらその中では構築したモデルの精度以外にもビジネス指標、コスト、解釈性、継続運用適性などを考える必要がありました。そして、最終的には顧客ビジネスに成功を提供できるかどうかで評価がなされます。

一方、私が趣味として長年に渡って参加してきた Kaggle コンペティションでは、基本的にはデータ、評価指標が初めから揃えられていますので、基本的には精度向上にのみ集中すれば良い仕組みになっています。最先端技術の適用や斬新なアイディアを着想できるかどうかが多くの場合には勝負を左右しますが、課題の本質を理解した上でのシンプルな解法が優勝ソリューションとなることも少なくありません。

Kaggle とビジネスの間にはこのように多くの違いがありますが、共通点もあります。その共通点とは低コストかつ高精度の解法、すなわち卓越したアプローチが結果に大きなインパクトを与えうることです。本稿では、実際のテーマ中でノイズ除去が大きな効果を発揮した事例、強力な特徴量を得られた事例などについて紹介したいと思います。そのような優れた解法を見つけることは、Kaggleで勝つのに役に立つだけでなく、ビジネス価値を最大化することにも繋がるのです。

blog kaggle business1
blog kaggle business1

センサーデータの解析事例

機械学習モデルの精度は、学習データの品質に大きく依存します。高い品質のデータを得られなければ、どれだけ最先端のモデルを用いても良い結果を出すことはできないでしょう。実データはほとんどの場合でシグナル (予測の手がかり) とノイズ (雑音) が混在しており、そのノイズまでモデリングの対象にしてしまうと、シグナルを捉えることが難しくなってしまうのです。

特に時系列データ解析においては激しい変動が含まれることがあり、それに伴ってノイズが存在する場面が非常に多くみられます。例えばセンサーで測定されたデータには、センサーの誤作動、環境の変化などに起因するあらゆるノイズが含まれており、予測誤差が大きくなる原因となります。他の例としては、ウェブサイトのアクセスデータであれば、スパム行為、検索エンジンのクローラなどの存在によって、一般ユーザーの行為分析が難しくなります。シグナルとノイズの見分け方は機械学習のモデル改善における一つの重要なポイントです。モデル精度向上のためには、シグナルとノイズの比率(SNR: signal-to-noise ratio)を高める必要があり、多くの手間をかけて特徴量エンジンニアリングやモデリングの工夫を行うことでより多くシグナルを抽出しようと試みるのが通常ですが、一筋縄ではいかないこともよくあります。シグナルを大きくするアプローチとノイズを除去するアプローチの両者を比較すると、ノイズの除去の方がより手軽であり、また効果が大きい場面も多いといえます。

筆者が実務においてノイズを除去する手法を用いることで大幅な精度改善に成功した事例を以下に紹介します。お客様の課題としては、とある材料の製造プロセスにおける予兆を検知したいというもので、装置内のセンサーで測定した種々の観測値を予測することができれば、製造パラメータの制御によって燃料費の削減が可能になります。ここでネックになったのがデータの品質がとても低いという点で、安定操業期間と操業停止期間などを含む、非常にノイジーなものでした。当初、お客様は統計手法を用いて、例えば移動平均などの典型的な特徴量を作ってモデリングを試みたとのことでしたが、評価指標の決定係数 (R2乗) は0.5以下にしかなりませんでした。R2乗は通常0から1の範囲の値をとり、値が大きいほどモデルが適切にデータを表現できていることを意味し、小さいほど表現できていないことを意味します。ですので、0.5以下では精度が高いとはとても言えず、実際そのモデルは実用に足るものではありませんでした。移動平均特徴量は一定程度ノイズを軽減することができますが、ノイズが非常に大きかったために不十分だったのです。

そのとき、筆者が思い浮かべたのが Web Traffic Time Series Forecasting という Kaggle コンペの上位チームのソリューションでした。そのコンペは Wikipedia の pageview を予測するコンテストだったのですが、とてもノイズの大きい時系列データに対する解析問題でした。優勝チームは RNN seq2seq を使って、ノイズが入ったデータであってもロバストにエンコード・デコードできるように学習することができており、素晴らしい解法でした。しかし、それよりさらに興味深かったのが8位チームの解法で、機械学習モデルではなく、カルマンフィルタ (kalman filter) でノイズを除去し、統計手法を加えることでロバストな予測モデルを構築するというもので、極めて簡潔かつ強力 (simple and powerful) であり、これこそが実務で追求するべき生産性の高い技術ではないかと当時とても感心した覚えがあります。

カルマンフィルタとは、状態空間モデルと呼ばれる数理モデルにおいて、内部の見えない「状態」を効率的に推定するための計算手法です。状態空間モデルでは、例えば、センサーなどから得られる情報を「観測値」として、そこから「状態」を推定し、これに基づいて制御を行います。「観測値」にノイズがあっても、「状態」がノイズを除去して、本来の正しい観測値になるでしょう。

さっそくカルマンフィルタを用いて全ての観測値を処理した上で移動平均特徴量を作成してDataRobot でモデリングしてみたところ、従来手法では0.5以下だった R2乗が0.85以上に一気に向上し、魔法のような大幅改善を実現することができました。しかも数万行データに対して数十秒で処理は完了し、低コストで高精度な予測モデルを実現できたのです。

※カルマンフィルタ処理前後の比較

※カルマンフィルタ処理前後の比較
※カルマンフィルタ処理前後の比較

※ノイズ除去前の精度スコア

※ノイズ除去前の精度スコア
※ノイズ除去前の精度スコア

※ノイズ除去後の精度スコア

※ノイズ除去後の精度スコア
※ノイズ除去後の精度スコア

python でカルマンフィルタを扱える pykalman というライブラリがあり、使い方がシンプルなので便利です。

from pykalman import KalmanFilter

def Kalman1D(observations,damping=1):
    observation_covariance = damping
    initial_value_guess = observations[0]
    transition_matrix = 1
    transition_covariance = 0.1
    initial_value_guess
   
    kf = KalmanFilter(
            initial_state_mean=initial_value_guess,
            initial_state_covariance=observation_covariance,
            observation_covariance=observation_covariance,
            transition_covariance=transition_covariance,
            transition_matrices=transition_matrix
        )
   
    pred_state, state_cov = kf.smooth(observations)
    return pred_state

observation_covariance = 1 # <- Hyperparameter Tuning
df[‘sensor_kf’] = Kalman1D(df[‘sensor’].values, observation_covariance)

音声データの解析事例

機械学習モデルの精度は、学習データの品質により限界が決まりますが、特徴量エンジニアリングの技術を使いこなすことができれば、そのポテンシャルを最大限に引き出せます。特徴量の作成は機械学習モデルの構築プロセスの中で最も手間がかかる部分で、異なる特徴量の組み合わせを用いた実験に膨大な時間を費やしてしまうことも少なくありません。しかし、データの本質を理解して、業務知識を表現できる特徴量を抽出することができれば、少数の特徴量でも高精度のモデルを構築することができるのです。

筆者が実務においてシンプルな特徴量で精度改善を実現した事例の一つを紹介したいと思います。お客様の課題は、自動車のエンジンノッキングを制御する工程で、従来はエンジンノッキングのレベルは熟練者の聴覚で判定されていましたが、これは特殊な訓練が必要な上に判定が難しく、またバラツキが発生してしまうのが悩みでした。このノックレベリングを自動化することができれば、大きなコスト削減になります。最初に作成したベースラインモデルは、音声波形データのスペクトログラム、統計特徴量、スペクトログラム画像などを利用しました。このアプローチによって R2乗が0.7までは到達したのですが、それ以上の改善がなかなか難しいという状況でした。

このとき、筆者が思い浮かべたのが Kaggle の LANL Earthquake Prediction コンペの上位チームのソリューションでした。このコンペは地震の研究で使用される実験装置から得られた「音響データ(acousticdata)」のみを使って、地震発生までの時間(timeto_failure) を予測するコンペだったのですが、優勝チームを含む多数の上位チームがメル周波数ケプストラム(MFCC)を含む非常に少数の特徴量に絞り込むことで過学習リスクを軽減し、ロバストなモデルを構築するアプローチを採用していました。

MFCC は、人の聴覚上重要な周波数成分が引き伸ばされてケプストラム全体における割合が増えることで、人が聞いた音の特徴をよく表すと考えられています。また、N 次のメルフィルタバンクを通すことにより、人の聴覚上重要な特徴を保ちながらケプストラムの次元を N まで減らすことができ、機械学習における計算負荷を減らせるメリットもあります。

エンジンノッキングのレベル判定のタスクに対して、この MFCC 特徴量は非常に適しており、このお客様のモデルに追加することで R2乗を0.8以上に大幅に改善することに成功しました。そして数百音声ファイルに対して数十秒で処理を完了することができ、ここでも低コストで高精度を実現することができました。

python で MFCC 特徴量を抽出できる librosa というライブラリがあり、以下にサンプルコードを記載しますのでご参考ください。

import librosa

fn = ‘audio file path’
y, sr = librosa.core.load(fn)
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20)
mfcc_mean = mfcc.mean(axis=1)

DataRobot における Custom Model

現在、DataRobot プラットフォーム上で pykalman、librosa などを利用することも実は可能になっています。Composable ML を使用することで、DataRobot にビルトインされた様々なタスクに加え、 Python または R でユーザーが設計したカスタムタスクを組み合わせることで、独自の機械学習パイプラインを簡単に構築することができるのです。また、タスク用のカスタムコンテナ環境を使用することで、依存関係の追加がいつでも可能です。

※カスタムコンテナ環境

※カスタムコンテナ環境
※カスタムコンテナ環境

※KalmanFilterを組み合わせるカスタムタスク

※KalmanFilterを組み合わせるカスタムタスク
※KalmanFilterを組み合わせるカスタムタスク

まとめ

ここまで説明してきましたとおり、機械学習モデルの精度向上とコスト削減を両立するためには、単に妥協してしまうのではなく、最適解を見つけるのが重要なポイントです。DataRobot の実際の顧客事例に基づいて、Kaggle コンペから学んだ簡潔かつ強力な技術を応用することで、低コストでありながら高パフォーマンスな予測モデルを実現できたことを説明してきました。DataRobot Composable ML は Python または R でカスタム環境、タスクを構築することができ、DataRobot プラットフォームと連携して、最適なモデルを構築することができます。また、全自動化による高い生産性とカスタマイズ性を両立する新機能である Composable ML につきましても、是非ご活用頂ければと思います。

参考 Kaggle コンペ

メンバー募集

DataRobot では AI の民主化をさらに加速させ、金融、ヘルスケア、流通、製造業など様々な分野のお客様の課題解決貢献を志すメンバーを募集しています。AI サクセスマネージャ、データサイエンティスト、AI エンジニアからマーケティング、営業まで多くのポジションを募集していますので、興味を持たれた方はご連絡ください。

オンデマンド
DataRobot AIX 22 Japan オンデマンド

AIの可能性を示す基調講演や、業界事例を紹介したお客様講演を多数ご視聴いただけます。

オンデマンドで見る

投稿 Kaggle スキルのビジネス活用DataRobot に最初に表示されました。

]]>
機械学習パーティショニングのまとめ Part 2 https://www.datarobot.com/jp/blog/summary-of-ml-partitioning-part-2/ Fri, 16 Jul 2021 03:33:08 +0000 https://www.datarobot.com/jp/?post_type=blog&p=6367 「データのパーティション」には多くの種類とそれぞれに特性があります。本稿では適切なパーティションを選択するために、各パーティションの手法ごとに利用シーンやメリット・デメリットを考察します。

投稿 機械学習パーティショニングのまとめ<br> Part 2DataRobot に最初に表示されました。

]]>
– 適切なパーティショニングを選択するために –

はじめに

DataRobot でテレコム・鉄道分野のお客様を担当しているデータサイエンティストの佐藤です。
Part 1※に続き、本稿では各パーティショニングの手法を、手法詳細・利用シーン・メリット・デメリットの観点から考察していきます。(DataRobot Auto ML の「高度なオプション」に設定画面がある手法については画面も示します)

※パーティショニングとは何か?パーティショニングの重要性などに興味がある方は機械学習パーティショニングのまとめ Part 1をご参照ください。

パーティショニングの種類

マニュアルパーティション

図1. パーティション特徴量の追加例
図1. パーティション特徴量の追加例1
図2. DataRobot上のマニュアルパーティション設定画面
図2. DataRobot上のマニュアルパーティション設定画面
  • 手法詳細
    データにパーティショニングを指定する“パーティション特徴量“を追加し(上図1)、その値をベースにデータを分割する。
  • 利用シーン
    自身で各レコードごとにパーティションの設定をしたい場合に利用する。
  • メリット
    パーティション特徴量を利用することにより、自身で細かく検定データを指定してコントロールできる。
  • デメリット
    各レコードごとにどのパーティションに所属するかを検討する必要があるので、工数がとてもかかる。また、恣意的なパーティショニングが適応されるため、検討する材料として抜け漏れが発生する可能性がある。

ランダムパーティション(holdout法

図3. ランダムパーティション(holdout法)のイメージ
図3. ランダムパーティション(holdout法)のイメージ
図4. DataRobot 上のランダムパーティション(holdout法)設定画面
図4. DataRobot 上のランダムパーティション(holdout法)設定画面
  • 手法詳細
    データを任意の一定割合でランダムに学習データと検定データに分割する。
  • 利用シーン
    データ量が多く、テストデータが学習データと同等の性質を持つと考えられる場合に利用する。
  • メリット
    純粋にランダムサンプリングを行うだけなので、計算量が少なく、計算時間が他のパーティショニングに比べ短い。
  • デメリット
    後述の k分割交差検定と比較すると検定データの量が1回分のみなので汎化性能を厳密に評価することができず、モデルの信頼性が低くなる可能性がある。

k分割交差検定(k-Fold

図5. k分割交差検定(k-Fold)のイメージ
図5. k分割交差検定(k-Fold)のイメージ
図6. DataRobot 上のk分割交差検定(k-Fold)設定画面
図6. DataRobot 上のk分割交差検定(k-Fold)設定画面
  • 手法詳細
    ホールドアウトを除いたデータをランダムサンプリングによって k 個の塊(Foldと呼ぶ)に分割し、Fold の一つを検定データ、残りの Fold を学習データとする。上図5のように、対象となる学習データと検定データを k 回組み替えてモデルの学習と検定を行う。
  • 利用シーン
    数値を予測する回帰問題において、データに時系列性やグループ性がない場合に利用する。なお、データをカテゴリーに分類する分類問題では後述の層化抽出法を組み合わせるのが一般的。
  • メリット
    全データで検定(バリデーション)を行うことができるので汎化性能が高くなり、信頼性が高くなる。各 Fold ごとのスコアから、データに偏りが発生しているか、発生しているとしたらどういう特徴があるかの Deep Dive がしやすい。
  • デメリット
    ランダムパーティションに比べて計算量が k 倍に増加するため時間がかかる。そのためデータ量が大きい場合には実装するのが現実的でない場合がある。(DataRobot Auto ML ではデータレコード総数がある閾値を超えると、一つの Fold での検定スコアが良くないモデルに対して自動で k分割交差検定を行わないようにしています)

Leave-one-out法

図7. Leave-one-out 法のイメージ
図7. Leave-one-out 法のイメージ
  • 手法詳細
    データの一つ(1行)を検定データとし、その他のデータを学習データとする。これをデータの総数分だけ、対象となる学習データ・検定データを組み替えてモデルの学習と検定を行う(k分割交差検定の k が行数分になったケース。DataRobot Auto ML では「高度なオプション」から k の値を変更することができます)
  • 利用シーン
    データ数が少なく、データ全体を有効活用する必要があるケースで利用する。
  • メリット
    データが少量であったとしても全てのデータを利用することができるので、学習用のデータ量が増加するほか、検定を細かく行えるので、汎化性能を高めることができる。
  • デメリット
    データ総量分だけ分割しているので、計算時間がk分割交差検定よりさらにかかる。

層化抽出法 + k分割交差検定(Stratified k-Fold

図8. 層化抽出法(Stratified k-Fold)のイメージ
図8. 層化抽出法(Stratified k-Fold)のイメージ
図9. DataRobot 上での層化抽出法設定画面
図9. DataRobot 上での層化抽出法設定画面
  • 手法詳細
    ホールドアウトを除いたデータを k 個の Fold に分割する際、Fold 内のカテゴリ分布(例:ポジティブクラスとネガティブクラスの割合)がなるべく一致するようにサンプリングを実施する。
  • 利用シーン
    分類問題のように、パーティション毎のカテゴリ分布が重要なケースにおいて一般的に利用する。
  • メリット
    ターゲットの比率が各 Fold で一定になるため、未知のデータも同様であるという仮定が成り立つのであれば良好な検定スキームになる。
  • デメリット
    データや課題の特性を考慮せずに層化抽出を行うとターゲットリーケージが発生したり、実は母集団と同一のカテゴリ分布ではなくてデータに偏りが発生する場合がある。

グループパーティション(Group k-Fold

図10.グループパーティション(Group k-Fold)のイメージ
図10.グループパーティション(Group k-Fold)のイメージ
図11.DataRobot 上のグループパーティション(Group k-Fold)設定画面
図11.DataRobot 上のグループパーティション(Group k-Fold)設定画面
  • 手法詳細
    あるグループに属するデータが全て学習データや検定データの同一の Fold に含まれるように分割を行い、特定のグループに属するデータが学習データと検定データをまたがることがないようにする。
  • 利用シーン
    ”同一人物が繰り返し出てくる場合”、”同じ製造ロット”や”同じ国”などデータ内に特有のグループが存在し、学習データに含まれない未知のグループに対して予測したい場合に利用する。
  • メリット
    k-Fold などで学習を実施する際に、ある特定の人物や製造ロットなどのグループを過学習したモデルができてしまうリスクがを低減されるので、予測時のターゲットリーケージを防ぐことができる。
  • デメリット
    k-Fold と同様に計算時間が多くかかる上、ドメイン知識がないとグルーピングする基準などの設定が少し難しい場合がある。また、グループ数が少ない場合は特定のグループの性質を過学習するリスクにも注意が必要になる。

日付/時刻パーティション

図12.日付/時刻パーティションのイメージ
図12.日付/時刻パーティションのイメージ
図13.DataRobot上の日付/時刻パーティション設定画面
図13.DataRobot上の日付/時刻パーティション設定画面
  • 手法詳細
    日付/時刻のような時系列性を持つデータを使った機械学習を行う際に、必ず過去のデータで学習して、それより未来のデータで検定を行うよう、データの時系列の順序性を考慮してデータを分割する。
  • 利用シーン
    データが時系列性をもつ場合に利用する。(過去のある時点のデータと未来のある時点のデータ間が独立ではなく関係性があると認められる場合)
  • メリット
    データに時系列性がある場合にターゲットリーケージを防止できる。また、トレーニング期間や検定期間を設定することで必要以上に昔のデータなどを利用しないで学習を行うことができる。
  • デメリット
    検定データの量が減少したり、データを十分に使うことができなくなる場合がある。

発展的な手法

Adversarial Validation

図14.Adversarial Validationのイメージ
図14.Adversarial Validationのイメージ
  • 手法詳細
    まず、ホールドアウトを除いたデータ(= 仮の学習データ)にFalse、ホールドアウトに True と2値フラグを立てて、それらを分類する2値分類モデルを作成する。仮の学習データの中でホールドアウトとうまく分類できないデータ、つまり、ホールドアウトに類似するデータを抽出し、次の予測モデル作成ステップで学習データとして使用する。
  • 利用シーン
    機械学習モデリングを実施する前の段階で、適切な学習データを抽出する目的で用いられる。すなわち、学習データとして使いたいデータの一部と将来予測を行いたい未知データ(ホールドアウトで近似)との間に分布的な偏りが存在すると考えられるときに利用する。
  • メリット
    ホールドアウトに対して学習データの偏りがなくなり、その学習データから作成したモデルで適切な予測ができるようになる。
  • デメリット
    ホールドアウトに対して学習データの分布を合わせるため、将来予測を行いたい未知データとホールドアウトが似ている、という仮定が成立していないと予測モデルの汎化性能が下がる可能性がある。また、学習データの量が少なくなるため、学習が十分にできない可能性がある。

Stratified Group k-Fold

図15.Stratified Group k-Foldのイメージ
図15.Stratified Group k-Foldのイメージ
  • 手法詳細
    層化抽出と Group k-Fold を合わせた手法。特定のグループに属するデータが全て一つの Fold に含まれるようにデータ分割を行なって学習データと検定データにまたがることがないようにしつつ、Fold 中に含まれているカテゴリー値の割合も同一にする層化抽出を行う。
  • 利用シーン
    グループ性を持ちつつ、分類問題で割合が重要なケースにおいて利用する。
  • メリット
    グループ性と分類問題の両方を考慮することができる。
  • デメリット
    Group k-Fold と同様に計算時間が多くかかる。また、層化抽出法と同様にデータが母集団と同一でないと偏りが発生する可能性がある。

Nested Cross Validation(Double Cross Validation

図16.Nested Cross Validationのイメージ
図16.Nested Cross Validationのイメージ
  • 手法詳細
    モデルのハイパーパラメーターチューニングとモデル評価で別々のパーティショニングを行なって、2重のループで交差検定を実施する。内側のループ(図16の右側)でハイパーパラメーターの最適化を行い、外側のループ(図16の左側)ではモデルの評価スコアリングを行う。外側のループにおける k-1個の Fold(学習データ)に属するデータを使って内側のループでの交差検定を行うため、外側のループで使用する検定データは決して内側のループの交差検定で使用されない。(DataRobot は多数のモデルを作成して評価するため、標準的に Nested CV を行なっています)
  • 利用シーン
    複数のモデルを作成した時に、公平にモデルを評価・比較する目的で利用する。
  • メリット
    ハイパーパラメーターのチューニングとモデル評価スコアリングで同一のデータが検定データに使われないようにしてオーバーフィッティングを回避するため、フェアに複数のモデルの精度パフォーマンスを評価できる。
  • デメリット
    外側ループの k-1個の Fold 内で、ハイパーパラメーター最適化のためさらに交差検定が行われるため、より多くの計算時間がかかる。

まとめ

本稿では、Part 1・Part 2 を通してパーティショニングの重要性や各利用ケースにおけるパーティショニングの種類などを考察してきました。パーティショニングには様々な手法があり、それらの中からデータの性質や分析目的に合わせて手法を適切に選択しなければ実業務で利用できるようなモデルを作成することはできません。
本稿で考察されているパーティショニングやその選択基準などが皆様にとって最適なパーティショニングを選択する上での一助となれば幸いです。

参考文献

Stratified Group Validation
https://www.kaggle.com/jakubwasikowski/stratified-group-k-fold-cross-validation

Nested Cross Validation
https://www.kaggle.com/c/data-science-bowl-2019/discussion/127469
https://machinelearningmastery.com/nested-cross-validation-for-machine-learning-with-python/

ソリューション
テレコム業界

テレコム業界ほど大量のデータを扱っている業種はあまりありません。DataRobot は、ネットワーク基盤をより効率的に計画・管理し、また顧客の行動をより適切に理解し、より効果的にビジネスをすすめる為の、他に類を見ない多くの機能を提供します。

もっと詳しく

投稿 機械学習パーティショニングのまとめ<br> Part 2DataRobot に最初に表示されました。

]]>
機械学習パーティショニングのまとめ Part 1 https://www.datarobot.com/jp/blog/summary-of-ml-partitioning-part-1/ Wed, 07 Jul 2021 03:48:02 +0000 https://www.datarobot.com/jp/?post_type=blog&p=6175 モデリングを行う際に結果に大きく影響を与えるのが「データのパーティション」です。パーティションは特徴量エンジニアリングなどと異なり、表面上に見えにくいため軽視されがちですが、適切なパーティションを選ばないことにより運用で痛手を負うケースがあります。

投稿 機械学習パーティショニングのまとめ <br>Part 1DataRobot に最初に表示されました。

]]>
– 適切なパーティショニングを選択するために –

はじめに

DataRobot でテレコム・鉄道分野のお客様を担当しているデータサイエンティストの佐藤です。
データサイエンスに携わり、モデルを作成しようと思った際に必ずと言っていいほどぶつかる壁が”適切なパーティショニングの選択”です。筆者もデータサイエンティストとして駆け出しの頃にパーティショニングがなぜ必要なのか?今予測したい問題においてどのパーティショニングを選択するべきなのか?非常に悩んだ覚えがあります。

本稿では、当時の私のようにパーティショニングについて悩んでいる方を対象に、何を基準にどういうケースにおいてそれぞれのパーティショニングを選択するべきなのかを考察します。

※より一つ一つのパーティショニングの方法を知りたいという方は、「機械学習パーティショニングのまとめ Part 2」をご参照ください。

パーティショニングとは?

データサイエンスの領域におけるパーティショニングとは、データを分割する方法の総称を示しています。データのパーティショニングには大きく2つの種類があり、一つが垂直方向のパーティショニング。もう一つが水平方向のパーティショニングです。

blogpartitioning1
図1.テーブルデータにおけるデータのパーティショニング例

垂直方向のパーティショニングはデータを列で分割することを示しているので、データサイエンスの領域では特徴量を管理して別テーブルとして利用するケースなどで利用されることが多い手法です。複数のプロジェクトで利用されるような特徴量に関しては共通の特徴量セットとして保持しておき、それ以外のオプショナルの特徴量は別テーブルとしてパーティショニングして保持し、必要に応じて利用するケースがあります。
これにより、不要な特徴量をハンドリングする必要がなく、過学習の防止や計算時間の短縮が見込めるようになります。ただし、データのパーティショニングと聞くと一般的には水平方向のパーティショニングのことを指すことが多く、垂直方向のパーティショニングについて本稿では取り扱いません。

水平方向のパーティショニングはデータを行方向で分割することを指します。機械学習ではデータを学習用、検定用、ホールドアウト用(Training, Validation, Holdout)に分けることが一般的であり、実運用に耐えうるような汎化性能が高いモデルを構築するためには正しいデータパーティショニングに基づいた検定(Validation)などが必要になります。
以下、本稿ではパーティショニングは水平方向のパーティショニングを指します。

パーティショニングと機械学習

blogpartitioning2
図2.学習、検定、ホールドアウトの分割イメージ

先述の通り、機械学習ではパーティショニングによってデータを学習用、検定用、ホールドアウトに分割する必要がありますが、そもそもなぜこのようにデータを分ける必要があるのでしょうか?仮に全てのデータを学習データにして予測モデルを作成した場合、学習データへの予測結果は良いが、実際に新しいデータに対してどの程度の精度が出るのかを評価することができません。例えれば、入学試験の過去問題は完璧に解けるが、それ以外の模擬試験や本試験を解けるかはわからない状態になってしまいます。

※学習に用いたデータを使用して検定(モデル評価)を行う方法を in-sample validation、学習用と検定用を分けて行う検定方法を out-of-sample validation と呼びます。AIC(赤池情報量基準)BIC(ベイズ情報量基準)などのモデル評価指標は in-sample validation として有名で、どの程度データに適合(fit)しているかという項と複雑性を表す項の組み合わせで構成されていますが簡易的なものです。

out-of-sample validation として用いられる交差検定(Cross Validation、詳しくは Part 2を参照)は計算量が膨大になるため、以前は非常に時間がかかる手法でした。しかし、近年コンピュータの計算速度の向上により大量のデータでも交差検定を現実的な時間で処理できるようになったため、機械学習においては out-of-sample validation が一般的に利用されています。

ここで登場するのが検定データとホールドアウトという概念です。検定データは模擬試験であり、ホールドアウトは本試験に相当します。機械学習ではこの検定データ(模擬試験)でどの程度精度が出るかを確認しながら学習していくことにより、学習データ(=過去問題)のみにフィットするようなモデルの作成を防ぎます。

また、模擬試験が解けたからといって絶対に本試験が解けるとはなりません。入学試験であれば出題傾向や出題方法が変われば結果も大きく変わります。機械学習でも同様に学習時には結果を絶対に見ることができないホールドアウトというデータも確保しておくことで、未知のデータに対する精度を推定します。

DataRobot 上ではホールドアウトはモデリングを行う上で DataRobot も人間も見ることができないので、ホールドアウトの精度を高めるためのモデリングやホールドアウトの精度が最も高いモデルを選択するということができません。(こうしてホールドアウトデータを未知のデータとして位置づけ、また、ホールドアウトのデータに基づいてモデルが過学習しないよう歯止めをかけています)
つまり、同じデータセットから作成した複数のモデルの中でベストなモデルを選択する場合、一般的にホールドアウトの結果を確認する前に、交差検定の結果などからモデルを選択する必要があります(この順番は非常に重要です!)。このように交差検定の結果などを参考にどのモデルを採用するか選択するのもデータサイエンティストの技量の一つなので、今後データサイエンティストを目指す方には是非腕を磨いて頂きたいポイントです。

パーティショニングの重要性

適切な機械学習モデルを作成するためには、パーティショニングを行う際、以下の3つの要素を考慮する必要があります。

  1. 実際のプロセスや現象を遵守した、学習用・検定用・ホールドアウトの選択(時系列パーティション・グループパーティション)
  2.  1の制限内でホールドアウトを見ずに検定用データ、学習データ、の性質をできるだけホールドアウトデータに近づける(ランダム・層化抽出・Adversarial Validation)
  3. 上記を考慮した上でモデルの安定性を高める(交差検定・Leave-one-out法)

これらの要素を軽視すると適切なモデル評価ができていないリスクがあり、その結果として汎化性能(未知データを精度良く予測する能力)の欠如やデータリーケージ(後述)が起こっている、そもそもモデルとして正しくないモデルが生成される可能性があります。
一方、パーティショニング手法には多くの種類があり、適切な手法を選択することは難しく、また、どのようなケースでも常にベストな「万能パーティショニング」などは存在しません。したがって、モデルを作成するにあたっては予測したい問題に対して、どのパーティショニング手法が利用できるかを見極め、そのパーティショニングのメリットとデメリットを理解した上で適切なパーティショニングを選択することが必要になります。(DataRobot は代表的なパーティショニング手法を全て網羅しており自動で適切な手法を選択してくれますが、常に人間の目でその手法が本当にベストなのかどうかを考察することが重要です)

パーティショニングを軽視したケースでの失敗例

それではここでよくあるパーティショニングの失敗ケースを3つ、皆様に共有いたします。

  • 問題の前提条件を無視したパーティショニング
  • 時系列を無視したパーティショニング
  • グループを無視したパーティショニング

一つ目の問題の前提条件を無視したパーティショニングの例として、実業務では中国の出店における売上を予測したいが、実際に手元にある学習用のデータは日本の出店に関するデータしか所有していないようなケースを考えてみます。この状態で予測モデルを作成すると実際に作成されたモデルが日本国内でのみ活用できるにも関わらず、中国での出店における売り上げの予測をするため適切な予測をすることができません。実運用に導入される前に適切なパーティショニングが行われているかどうかの確認しなくては、大きな損失を出してしまいます。
このように本来予測したい対象を適切に表現していないようなデータを学習用に用いることで、実運用に導入時に初めて失敗に気づき失敗するケースです。

二つ目の時系列を無視したパーティショニングの例として、「アナと雪の女王」の興行収入を予測する際に「アナと雪の女王2」(続編)の興行収入の値を使って学習するケースを考えてみます。確かにシリーズ続編での値を使えればより当てやすくなりますが、実際には「アナと雪の女王」は「アナと雪の女王2」の前にリリースされており、その時点では「アナと雪の女王2」の興行収入を知ることはできません。このように予測したいターゲットに対して、本来未知であるべき答えとなるような値を使って学習を行うことを「データのリーケージ」といいます。特に時系列問題においては非常に起こりやすい問題なので、パーティショニングを実施する際には予測時の状況を想像し、そのときに”どのデータ”の”いつまで”の値が取得可能なのかを注意する必要があります。
※なお、予測時よりも未来の時点の値であっても自身がコントロールできるような値であれば学習データとして利用することは可能で、例えば「予算執行計画が決まっているプロモーション費用」や「休業するかどうかのフラグ」などが挙げられます。

三つ目のグループを無視したパーティショニングの例として、パンの製造ラインで「ふわふわ感」を予測する問題で、各ロット毎に品質に多少の偏りが発生しているケースを考えてみます。その場合、もし学習データと検定データのどちらにも同一の製造ロットで生産された製品(パン)が含まれていると、製造ラインで計測される温度やその他センサーのデータから学習するのではなく、「この製造ロットで生産されたのでふわふわ感はこれだ」という様に、製造ロットの ID 番号等ロットを識別する情報を過学習してしまいリーケージが発生する可能性があります。実運用上はこのようにある特定のグループが(ここではパン製造ロット)全く同一の品質で将来また出現するとは考えられないので、検定データやホールドアウトデータは必ず学習データと違うグループのデータだけで構成されなければなりません。この制約条件を保証してデータリーケージを防止するためには、Group K Fold のようなパーティショニング手法を選択する必要があります。

blogpartitioning3
図3. ロットのID番号に依存したデータリーケージ例

以上のような失敗を未然に防ぐために、Part 2では各パーティショニングの種類、それぞれの特徴と使い分けについて考察します。

基本的なパーティショニングの選択基準

blogpartitioning4
表1. 基本的なパーティショニングの選定基準

各パーティショニングの種類と詳細に入る前に基本的なパーティショニング方法について説明します。
上記表1は最も基本的なパーティショニング手法を選定する上で、どのような基準で選択するべきかを一覧表にまとめたものです。多くの場合、まず予測したい問題が回帰問題なのか?分類問題なのか?また、データ量は多く存在するのか?それとも少ないのか?という軸で評価したのち、一般的な予測問題なのか?時系列性があるのか?グループ性があるのか?といった観点から適切なパーティショニング手法を選択する必要があります。

※なお、上記で述べているパーティショニングは世に提案されている様々な手法の一部であり、予測する問題に応じて適切な組み合わせなどを選択する必要があります。

まとめ

ここまでのPart 1の記事では、パーティショニングとは何か?パーティショニングと機械学習の関係性、パーティショニングの重要性と基本的なパーティショニングの選択基準を考察してきました。
機械学習パーティショニングまとめ Part 2」では各パーティショニングの種類、それぞれの特徴と使い分けについてより詳細を考察していきます。

参考文献

Akaike, H. (1973). Information theory and an extension of the maximum likelihood principle, 2nd International Symposium on Information Theory (eds. B. N. Petrov and F. Csaki), 267-281, Akademiai Kiado, Budapest. (Reproduced in Breakthroughs in Statistics, Vol.1, Foundations and Basic Theory (eds. S. Kotz and N.L. Johnson), Springer-Verlag, New York, (1992).)
https://link.springer.com/chapter/10.1007/978-1-4612-1694-0_15

Schwarz, G. (1978). Estimating the dimension of a model, Annals of Statistics, 6, 461-464.
https://projecteuclid.org/journals/annals-of-statistics/volume-6/issue-2/Estimating-the-Dimension-of-a-Model/10.1214/aos/1176344136.full

ソリューション
テレコム業界

テレコム業界ほど大量のデータを扱っている業種はあまりありません。DataRobot は、ネットワーク基盤をより効率的に計画・管理し、また顧客の行動をより適切に理解し、より効果的にビジネスをすすめる為の、他に類を見ない多くの機能を提供します。

もっと詳しく

投稿 機械学習パーティショニングのまとめ <br>Part 1DataRobot に最初に表示されました。

]]>
オフセット項を利用して機械学習モデルにビジネスロジックを組み込む https://www.datarobot.com/jp/blog/using-offset-term-to-incorporate-business-logic-into-machine-learning-models/ Wed, 23 Jun 2021 02:37:13 +0000 https://www.datarobot.com/jp/?post_type=blog&p=6057 オフセット項を利用することによって、ビジネスロジックや既存のドメイン知識をそのままモデルに組み込むことができます。少し高度なテクニックですが、オフセット項を身につけるとより機械学習の幅が広がります。

投稿 オフセット項を利用して機械学習モデルにビジネスロジックを組み込むDataRobot に最初に表示されました。

]]>
DataRobot で金融業界のお客様を担当しているデータサイエンティストの小川幹雄です。

機械学習が世の中で広まる中で、様々なバックグラウンドの方がデータサイエンティストとしてモデルを作成しています。昔は計量経済学などの統計バックグラウンドを持った方が多かったですが、ライブラリの充実や AutoML の登場によって統計バックグラウンドを持たない方も増えてきています。

今回紹介するオフセット項は、統計バックグラウンドの方ならばご存知の方も多いかと思いますが、モデルにおいてパラメータを学習させない特徴量を利用するテクニックです。一見、自動でパラメータを学習してくれる機械学習の良さを消しているオフセット項ですが、このテクニックを利用すると、より幅広く機械学習を利用できるようになりますので、本稿ではその使い所を解説したいと思います。

なぜ今オフセット項について学ぶのか

オフセット項に関して取り上げている最近の書籍は正直多くはありません。実は入門書的な本でも取り上げられるテクニックであるにもかかわらず、機械学習が広まる中で知名度を獲得できなかった理由はなんでしょうか。筆者の個人的な推察としては、機械学習アルゴリズムを主軸としたモデリングがマジョリティを占める中、GLM(Generalized Linear Model、 一般化線形モデル)を一度も使ったことがない人が増えていることが原因だと考えています。実際、多くの場面で機械学習アルゴリズムは大幅に GLM の精度を超えてきました。それに伴い、GLM は廃れ、オフセット項も目にする機会が減ってきたと考えています。

ただ最近この流れが少し変わってきたと思っています。COVID-19 の影響で、単純に「精度がいいモデルを使えば大丈夫」が成り立たないケースが増えてきました。このようなケースでは過去データをシンプルに学習させるだけでなく、この先の未知の状況を加味した補正や物事の構造をモデルに反映させていくこと、すなわち「GLM が得意だったこと」が求められています。今のような時代だからこそ、機械学習アルゴリズムを主軸として利用していたデータサイエンティストにも古典的なオフセット項のような技術も身につけていただくのが良いのではないかと感じて今回のテーマとさせていただきました。

オフセット項での予測値の振る舞い

ここからオフセット項の振る舞いについて簡単な数式を利用して紹介していきます。数式が苦手という方でも、オフセット項にどのような値を入れるとどのように予測値が変化するかも合わせて解説していくので、実際にどのように予測値が変化するのかというポイントを手元でも試していただけるとわかりやすいかと思います。

オフセット項 Offsets の振る舞いはリンク関数 linkfunction、ターゲットのベクトルY、特徴量のベクトルX、パラメータβに対して以下のような数式で表されます。

linkfunction(Y) = Offsets +

オフセット項にはパラメータがついていないので、モデルの学習時にターゲットに対しての関係性が更新されることはありません。もう一つ大事な特徴としては、オフセット項はリンク関数の影響は受けるので、リンク関数の種類によってターゲットに対しての振る舞いが変わってきます。今回は連続値問題と二値分類問題において予測値がどう振る舞うかについて説明していきます。

連続値問題

連続値問題では、リンク関数に log 関数が使われているかいないかがポイントになります。DataRobot ではターゲットの分布に対して自動的に最適化指標が決められますが、最適化指標が RMSE の場合には、リンク関数は identity(そのまま)となるので、以下の数式のようにオフセット項の値はそのまま予測値に足し合わされるだけのものとなります。あまりこのパターンでオフセット項を使うメリットはありません。

Y = Offsets +

次に、Poisson DevianceGamma DevianceTweedie Deviance が選ばれている場合には、リンク関数は log 関数が使われます。この場合には、以下の数式のように expOffsets は掛け算した関係になります。

log(Y) = Offsets +

Y = expOffsets + Xβ = expOffsets x exp

よって、オフセット項の値を自然対数表に合わせて設定することによって予測値をコントロールすることができます。オフセット項を0.40547にするとexp0.40547=1.5より予測値が1.5倍、0.69315にするとexp0.69315=2より予測値が2倍になります。人口と面積から人口密度が出る関係のように、予測値との関係が割り算で表せられるケースにおいては、リンク関数に log 関数を使った上でオフセット項を利用することによって、割り算の関係性をそのままモデルに組み込むことができます。

二値分類問題

次に二値分類問題のときについて解説していきます。二値分類ではリンク関数はlogit 関数となり、オフセット項は以下の数式のような関係性になり、expOffsets がオッズ(確率pにおけるオッズ=p/(1-p))に対してかかる関係性になります。

logit(Y) = Offsets +

log(Y/1-Y) = Offsets + Xβ

Y/1-Y = expOffsets + = expOffsets x exp

例えば、オフセット項を0.40547にするとexp0.40547 = 1.5より、オッズが1.5倍になります。これは予測値が0.5の場合、オッズは0.5/(1 – 0.5) = 1となります。オッズが1.5倍なので1.5 = y/(1 – y),0 ≤ y ≤ 1となり、予測値は0.6となります。

参考までに以下にオフセット項が0(exp0 = 1)でベースとなる予測値を青い線、オフセット項を0.40547(exp0.40547 = 1.5)としたときにベースとなる予測値から変化した予測値をオレンジの線、ベースとなる予測値とオフセット項によって変化させた予測値の比をグレーの線で表したチャートを記載します。二値分類ではオフセットはオッズにかかることから、予測値が小さいときほど比率としては予測値に与える影響は大きく、予測値が大きいほど比率としては予測値に与える影響が小さくなることがわかります。

オフセット項の活用例

以下、オフセット項を活用するケースを3つ紹介します。一つ目は(1)特定の関係性をもつことが自明でそれをモデルに組み込んだ上でモデリングを行いたいときです。二つ目は、(2)学習データには存在しない入力においても予測値をコントロールしたいときです。この二つにおいては設定するロジックがしっかりと自明のものである必要があります。最後の一つは、(3) 一定レベルの構造知識がある場合に、その構造をモデルに残したいときです。完全に関係性を把握していなくとも、一定レベルの構造知識がある場合に、その構造を残したままモデリングできるテクニックです。

(1)自明の関係性をモデルに組み込む:

「データ解析のための統計モデリング入門」のオフセット項の説明でも出てくる、予測ターゲットが密度やコンバージョン率など、それぞれが面積や回数などと割り算の関係性を持っている割算値のケースです。本稿では Web 広告などでよく使われるコンバージョン率の分析を行いたいときの例で考えていきます。CV rate がコンバージョン比率、Con がコンバージョン数、Click が合計クリック数とすると、

CV rate = Con/Click

CV rate に対するモデルを作ることを考えると以下のような数式になります。

CV rate = exp

Con = Click x exp = explog(Click) x exp = explog(Click)+

log(Con) = log(Click) +

数式からも log(Click)コンバージョン数をターゲットにリンク関数に log 関数を利用した時のオフセット項と一致することがわかります。

具体的な例として、金融業界でよく行われているデフォルト予測や保険金請求額予測などの例について考えていきます。これらは同じ状態であれば観測期間が長いほど発生確率が高いと考えられます。この際に、学習データで観測期間を揃えたり、ターゲットを期間で割ってあげるなどのアプローチも考えられますが、それでは、トータルとしての金額などのスケール情報を失ったり、元の分布を歪めてしまうことに繋がります。

以下の図で表しているように、各契約期間における単位金額に変換する場合に、契約期間1年を1として、契約期間ごとにオフセット項をセットしていきます。1年を1としたときのそれぞれの契約期間は、データ抽出のタイミングにおいて契約 A では1年間の契約が終わっているので1(オフセット項 = log(1) = 0)、契約 B はまだ契約が始まったばかりで1ヶ月しか経ってないので、1/12 = 0.083(オフセット項 = log(0.083) = -2.4889)、契約 C は18ヶ月なので18/12 = 1.5(オフセット項 = log(1.5) = 0.4054)、契約 D は途中で解約があったため6ヶ月で6/12 = 0.5(オフセット項 = log(0.083) = -0.6931)となります。

オフセット項を利用することによって、自明のロジックをモデルに組み込み、契約期間以外の要素がどれくらいしっかりと効いていたのかを正しく分析する事ができます。(本稿の後半では実際に DataRobot を利用した分析手順を紹介します)

ただし作成されたモデルの精度だけを比較した場合には、オフセット項を利用せずに学習したモデルのほうが検定データにおける精度では高い傾向にありますので、オフセット項が手元のデータにおける精度を必然的に上げるテクニックではないということは覚えておいていただくと良いと思います。

(2)学習データに存在しない特定の入力に対しての予測値を制御する:

予測値を特定の入力に対してコントロールしたいケースは、学習データに存在しないまたはあまり出てこない値に対応させたい場合に有効です。コロナ禍によって戦後GDPが過去最悪となりましたが、GDP を特徴量として倒産予測などを行っている場合では、GDP が学習データにないレベルまで悪化した場合に、他が同じ状況であれば GDP がよい状況よりも倒産確率が高く出ることが望ましいでしょう。ほかにも融資範囲の拡大などによって、これまでの機械学習用の学習データには存在しないが、ビジネルロジックとして補正するルールを持っている場合に、そのルールをモデルに反映させたいときがあります。

モデリングのフェーズでは(1)と同じ様にオフセット項を設定して学習させます。オフセット項はパラメータを学習させない特徴量であるがゆえに、予測時において、学習データに含まれていない入力があったとしても、予測値を想定の動きにコントロールすることができます。

特に、カテゴリデータにおける未知のクラスへの対応においてオフセット項は効果的です。オフセット項を利用しない場合には、カテゴリデータの未知なクラスへの対応としては、学習時に「その他」などのクラスを作っておき、未知のクラスをすべて「その他」クラスと扱うのが一般的です。ただ、この手法では未知のクラスが良くも悪くも「その他」と同じ扱いにしかならないので、重要なクラスが将来に登場する場合には微妙なモデルとなります。オフセット項をカテゴリに利用することによって、未知のクラスであってもモデルをドメイン知識に従い、思った方向にコントロールすることができるようになります。

(3)2段階モデリング+オフセット項でモデルに構造性をもたせる:

ある特定の特徴量セットが構造的に必ず影響することは知っているが、他に影響する特徴量はわからないケースにおける分析では、2段階モデリングにオフセット項を利用するテクニックを適用できる場合があります。特にデータ量が多くないにもかかわらず多くの特徴量が利用できる場合、すべての特徴量を学習に利用すると、重要視してほしくない特徴量を重要視して、重要視してほしい特徴量は重要視しないというモデルができる可能性があります。このような場合に、特定の特徴量は半強制的にモデルに組み込む必要がある(重要視したい)というドメイン知識があるならば、下図のような「2段階モデリング+オフセット」という技が有効です。

  • 1段階目(1st Stage):ドメイン知識から有効と理解している特徴量のみを選択してモデルを作成
  • 2段階目(2nd Stage):1段階目のモデルの予測値をオフセットとして、残りの特徴量+オフセットで学習

このステップを踏むことによって、ドメイン知識から優先的に効かせたい特徴量をモデルに効かせやすくする事ができます。

上記は DataRobot 立ち上げメンバーでアクチュアリー出身の Xavier Conort が Kaggle で実際に利用したテクニックでもありまして、日本アクチュアリー協会の例会で彼がプレゼンした資料でも紹介されています。

DataRobot におけるオフセットの設定

それでは、DataRobot を利用してオフセット項を含むモデルを作成する手順を以下解説します。

データ準備

学習データでは、どの特徴量(列)をオフセット項とするかを決めます。その後は、特徴量の各値に対してのターゲットの関係性を数値で入れていきます。オフセット項は以下の性質を満たす必要があります。

  • すべて数値
  • 十分なカーディナリティを持った値(すべて同じ値は NG)
  • 欠損値を含んでいないこと

注意点として、オフセット項のターゲットとの関係性は先の章で解説したようにリンク関数によって変わってくるので、どのリンク関数が使われるのか意識する必要があります。また、もしオフセット項扱いとする特徴量がデータセットに含まれている場合には、そちらは除いておきます。

DataRobot でのモデリング設定と対応ブループリント

DataRobotにデータをアップロードしたら、ターゲットを選択し、「高度なオプション」からオフセット項を設定します。設定は「高度なオプション」->「その他」の一番下にあります。

設定箇所にはオフセット項として作った特徴量名を入力します。上記画像の例だと offsets としていますが、特に名前に縛りはありません。またオフセット項は複数選択することができるので、複数の自明のロジックをモデルに組み込むことも可能です。インフォメーションボタンを押すとオフセット項として対応している形式についての説明を改めて見ることができます。

また DataRobot では、最適化指標に合わせたリンク関数が自動で選択されます。オフセット項をセットすると、現在の最適化指標でどのリンク関数が使用されるのか表示され、別のリンク関数を利用するために選ぶべき最適化指標が表示されます。オフセット項と想定したリンク関数が使用される最適化指標がセットできたことが確認できれば、今まで通りオートパイロットを開始します。

オフセット項はもともとGLMでよく使われるテクニックですが、DataRobot では GLM だけでなく、SVM や LGBM、xGBoost、Neural Net などにも対応していますので、最新のアルゴリズムに古典的なオフセット項の手法を合わせて使うということも簡単にできるようになっています。

モデル解釈

モデル解釈の部分では、オフセット項に設定した特徴量は、ターゲットに対しての関係性が自明のため、特徴量のインパクトや特徴量の作用は表示されません。オフセット項以外の特徴量に関しては、オフセット項における予測値への補正をなくした状態で通常と同じ様に計算されます。要するに純粋にオフセット項以外の特徴量の影響を見ることができるようになっています。

SHAP 値の加法性を確認したいときは、オフセット項の影響を予測値から取り除いた状態で成り立ちます。例えば、リンク関数が log 関数の場合において、オフセット項に0.33647という値を使用している場合、exp0.33647=1.4となるので、予測値を1.4で割った上で、SHAP 値の加法性が満たされます。

Prediction = expOffsets x exp(SHAPvalue1 + SHAPvalue2 + … + SHAPbasevalue)

予測時の動作

作成したモデルで予測を実施する場合には、通常の DataRobot の予測のフローと全く同じで、ターゲット以外の全ての特徴量を含んだデータ(オフセット項で利用した列も含む)を利用します。

オフセット項以外の残りの特徴量の値が同じ場合に、オフセットの値を変化させることによって元々想定していた関係性通りに予測値を補正できることを試していただければと思います。

DataRobot におけるエクスポージャー

連続値問題においてオフセット項をターゲットに対して比例関係で利用したい場合、先にも紹介したように、以下のような数式となります。

log(Y ) = Offsets +

Y = expOffsets + = expOffsets x exp

数式からもオフセット項を比例関係で利用するには expOffsets と自然対数表を見ながら設定する必要がありますが、入力データの直感性がないので、後でデータを見返すとややこしい場合もあるかと思います。

このような場合には DataRobot では「エクスポージャー」を使うとより直感的操作をすることができます。エクスポージャーは連続値問題かつリンク関数が log 関数となる最適化指標でしか利用できないという制約はありますが、エクスポージャーに0.25と入れると予測値が0.25倍、2.0と入れると2倍と直感的に利用することができます。

内部動作的にはオフセット項で行うべき変換を DataRobot 内で自動的に行なっているだけなので、用途限定の便利なオフセット項機能と思って使っていただければと思います。

exposure = expOffsets

注意点としては上記の式からもわかるように、エクスポージャーの値はすべて0より大きい数値である必要があります。

最後に

オフセット項を実際の機械学習プロジェクトでどれくらいの確率で採用するかと問われれば、これまでの筆者の金融業界での経験では40〜50回に1回という感覚です。しかしながらオフセット項を理解することによって、機械学習モデルをコントロールするという感覚を身につける手助けになると思います。そして、ただ手元のデータを DataRobot に学習させて検定データでのスコアを見るだけでなく、そもそも手元のデータをどのように学習させたいかという機械学習モデルをコントロールする力を身につけることによって、スモールデータでの分析であったり、正しい汎化性能をもたせたモデルの構築がよりうまくなると思います。

本稿には数式がいくつか出てきましたが、数学が苦手な方もお手元のデータセットでオフセット項の動きを試していただくと感覚がつかみやすいと思います。AutoML が盛り上がってきた今こそ、先が見通せない不透明さをカバーするのに役立つ古典的手法も引き出しとして持っておき、実践されてみてはいかがでしょうか。

オンデマンドビデオ
AI Experience Virtual Conference 2021

「DataRobot AI Cloud」に関する基調講演や、業界をリードするDX推進企業の取り組み、AIサクセスを実現するビジネスリーダーによるパネルセッションをオンデマンドビデオで確認

オンデマンドで見る

投稿 オフセット項を利用して機械学習モデルにビジネスロジックを組み込むDataRobot に最初に表示されました。

]]>