より実用的な機械学習モデルを目指して ~Cost-Sensitive Learningの活用~

Merpay Advent Calendar 2020 の13日目は、メルペイ Machine Learning チーム / Machine Learning Engineer の @yuhi がお送りします。

このエントリでは機械学習を現実世界の問題へ応用する際にしばしば用いられるコスト考慮型学習(Cost-Sensitive Learning)を紹介したいと思います。

目次

与信モデルにおける課題感について

Cost-Sensitive Learningを紹介する前に、本エントリの背景について説明したいと思います。

メルペイスマート払いにおける与信モデル

メルペイではメルペイスマート払いという与信サービスを提供しています。メルペイスマート払いの与信枠の決定には機械学習モデル(以下、与信モデル)が用いられています。与信モデルでは「メルペイスマート払いを利用したときの清算有無の二値分類」を解きたい問題として設定しています。

与信モデルの評価指標と事業KPI

与信事業においては誤分類時のコストの非対称性により、モデル評価指標で最適化された与信モデルが与信事業における最適な与信モデルであるとは限りません。

通常の機械学習モデルでは、精度最大化を目的としており、誤分類したとき間違え方を区別していません。すなわち、正解ラベルが0で予測値が1のときと、正解ラベル1で予測値が0のときのエラーは等価に扱われます。 他方で、与信ビジネスの事業構造として、清算有無ラベルの誤分類時のコストは非対称となっています。すなわち、清算有ラベルに対して清算無と予測して与信制限を行うと機会損失に繋がります。逆に、清算無ラベルに対して清算有と予測すると、事業的には利用額分が損失となってしまいます。そのうえその利用額によって損失も大きさも変わってくる性質もあります。

そのため、モデルの評価指標(例:AUCなど)としては良いが、事業のKPI(例:清算率)としては良くないという状況になる可能性があります。それだけではなく、利用額の大きいサンプル数は相対的に少なくなりますが、そのようなお客さまが経済的な事情などにより清算ができない状況にならないようにしていくべきです。 なにより、適正な与信をお客さまに提供することは、私たちのミッションでもある "信用を創造して、なめらかな社会を創る" ための前提となってくるため、与信モデルの磨き込みはその意味で大変重要であると考えています。

以上から、与信事業においては誤分類コストの非対称性により、モデル評価指標の最適化が事業KPIの最適化に必ずしもつながるとは限りません。

ここからは、事業KPIの改善手段の一つとして考えられる、Cost-Sensitive Learning について理論には触れずに概要を紹介したいと思います。

Cost-Sensitive Learning

Cost-Sensitive Learning は、コストを定義して、そのコストを用いて仮説を得る手法のことです。コストとして様々なものが提案されており、例えば誤分類コスト、データ取得コスト、計算コストなどが提案されていますが、目的に応じて使い分けたり、あるい自ら設計することもできます。 Cost-Sensitive Learningは大きく分けると2つのグループにカテゴライズできるようです:

  • Direct approaches: 学習アルゴリズムにコストを取り入れるアプローチ。学習アルゴリズムの修正を伴うため、学習器依存。
  • Meta-learning approaches: 学習データや仮説の出力値を修正するアプローチ。学習の前処理と後処理に相当し、学習アルゴリズムの修正を伴わないので、任意の学習器に適用可能。

定式化

ここでは二値分類における誤分類コストを考えます。Cost-Sensitive Learning は予測誤差を最小化する代わりにコストを最小化する学習手法です。 入力空間を \(\mathcal X\)、出力空間を \(\mathcal Y\) 、学習データを \((x_1, y_1),\dots,(x_n, y_n) \overset{i.i.d}{\sim} \mathcal X \times \mathcal Y\) 、仮説集合を \(\mathcal H \subset \{f \ | \ f: \mathcal X \to \mathcal Y\}\) とします。Cost-Sensitive Learning のゴールは期待コストを最小化する仮説を求めることです:

\(\displaystyle \argmin_{f \in \mathcal H} \mathbb E \big[Cost(f(x), y) \big].\)

ただし \(Cost:\mathcal Y \times \mathcal Y \to \mathbb R\) で、\(Cost\) をコスト関数と呼ぶことにします。

コスト行列

コスト関数を \(C(i,j)\) のように表記します。\(i\) は予測したクラス、\(j\) は真のクラスを表します。このときコスト関数は以下の表で表現することができます。これをコスト行列と呼びます。

True negative
\((y=0)\)
True positive
\((y=1)\)
Predict negative
\((f(x)=0)\)
\(C(0,0)\) \(C(0,1)\)
Predict positive
\((f(x)=1)\)
\(C(1,0)\) \(C(1,1)\)

また、コスト行列の満たすべき性質として "Reasonableness" が提案されています。

[1] 予測が正しい場合のコストの方が、予測が間違っている場合のコストより常に小さい。すなわち、\(C(0,0) < C(1,0), C(1,1) < C(0,1)\) を満たす。 [2] 任意の\(j\) に対して\(C(m,j) \geq C(n,j)\) となることを回避する。

2番目の条件は、任意の \(j\) に対して \(C(m,j) \geq C(n,j)\) が成立する場合には常に \(n\) と予測すればよいことになり、\(m\) と予測することができなくなるためです。 コスト行列を適切に設定することで、目的により合致した非対称な損失のようなものを実現することができそうです。

Example-dependent cost matrix

前節ではコスト行列としてクラスラベルにのみ依存するコスト行列を考えましたが、 サンプル依存のコスト行列(example-dependent cost matrix)が提案されています。このコスト行列はサンプルに依存するためサンプル毎に異なるコストを指定することが可能です。

True negative
\((y_i=0)\)
True positive
\((y_i=1)\)
Predict negative
\((f(x_i)=0)\)
\(C(0,0)_i\) \(C(0,1)_i\)
Predict positive
\((f(x_i)=1)\)
\(C(1,0)_i\) \(C(1,1)_i\)

例えば不正検知や与信モデルではサンプルによって金融的なインパクト(不正金額など)が変わることが想定されるため、Example-dependent cost matrixのようにそのインパクトに応じてコストを設定することは妥当な仮定のように思われます。

Example-dependent cost matrix を用いたモデル

Example-dependent cost matrix を用いたモデルとして Cost-Sensitive Logistic Regression が提案されています。 Cost-Sensitive Logistic Regressionでは負の対数尤度関数を最小化するのではなく合計コスト \(J^c(\theta)\) を直接最小化するようなパラメータを求めます。

\(\begin{aligned} \displaystyle J^c(\theta) &= \sum_{i=1}^nCost(f(x_i), y_i) \\ &= \sum_{i=1}^n \mathbb I[y_i=1] \Big\{h_{\theta}(x_i)C(1, 1)_i + (1-h_{\theta}(x_i))C(0, 1)_i\Big\} \\ &\quad\quad+ \mathbb I[y_i=0]\Big\{h_{\theta}(x_i)C(1, 0)_i + (1-h_{\theta}(x_i))C(0, 0)_i\Big\}. \end{aligned}\)

ただし、\(\mathbb I[A] = \begin{cases} 1 &\text{if } \text{A is True}, \\ 0 &\text{if } \text{A is False} \end{cases}\)、\(h_{\theta}(x_i)\)はサンプル\(x_i\)の予測ラベル(0 または 1)です。 合計コスト \(J^c(\theta)\) は、パラメータ \(\bold \theta\) に関して凸ではないことに注意が必要です。

評価指標としては下記の Savings を用いています。これはコストの改善率を表しています。コストをより解釈しやすい指標に変換した指標になっており、モデルの改善インパクトを直感的に把握できそうです。

\(\begin{aligned} \displaystyle Savings(f) &= \frac {Cost(f) - Cost_l(f)} {Cost_l(f)}. \end{aligned}\)

ただし、

\(\begin{aligned} \displaystyle Cost_l(f) &= \min\{Cost_0(f), Cost_1(f)\}, \\ Cost_0(f) &= \sum_{i=1}^nCost(0, y_i), \\ Cost_1(f) &= \sum_{i=1}^nCost(1, y_i). \end{aligned}\)

\(Cost_0(f)\) はすべて と予測したときの合計コスト、\(Cost_1(f)\) はすべて \(1\) と予測したときの合計コストです。単純な予測器を比較してどの程度コストが改善するかを表す指標になっています。

さいごに

与信事業における課題感と網羅的ではありませんがコスト考慮型学習(Cost-Sensitive Learning)について、簡単に紹介いたしました。 近年では金融分野(不正検知や与信スコアなど)への応用も報告されており、私たちとしては課題を解決して "より良い" 与信モデルを構築するために Cost-Sensitive Learning などの有用な技術を積極的に取り入れていきたいと考えております。 私たちのチームでは Cost-Sensitive Learning のPoCを実施しており、現在は PoC で見つかった課題や Production へ組み込むための準備を進めています。残念ながら詳細については現時点で言及することはできませんが、また違う機会で成果などを発表できればと思います。

なお、このPoCではメルペイ Machine Learning チームにインターンで参画されていた @fukuchan に論文サーベイから設計、実装、評価まで幅広く担当していただきました。ここに御礼申し上げます。

以上となります。最後までお付き合いいただきありがとうございました。 14日目のMerpay Advent Calendar 2020 執筆担当は、Fronend Engineer の @tokuda109 さんです。引き続きお楽しみください。

メルペイではミッション・バリューに共感できるMachine Learning Engineer を募集しています。一緒に働ける仲間をお待ちしております。 ソフトウェアエンジニア (Machine Learning) [Merpay]

References

[1] Liu XY., Zhou ZH. "Towards Cost-Sensitive Learning for Real-World Applications". In: Cao L., Huang J.Z., Bailey J., Koh Y.S., Luo J. (eds) New Frontiers in Applied Data Mining. PAKDD 2011. Lecture Notes in Computer Science, vol 7104. Springer, Berlin, Heidelberg. (2012) [2] Elkan. C. "The foundations of cost-sensitive learning". In Proceedings of the 17th international joint conference of artificial intelligence (pp. 973–978)(2001) [3] A. C. Bahnsen, D. Aouada and B. Ottersten, "Example-Dependent Cost-Sensitive Logistic Regression for Credit Scoring". 13th International Conference on Machine Learning and Applications, Detroit, MI, 2014, pp. 263-269, doi: 10.1109/ICMLA.2014.48. [4] A. C. Bahnsen, "Example-Dependent Cost-Sensitive Classification", PhD thesis (2015) [5] Fernández Hilario, A., García López, S., Galar, M., Prati, R.C., Krawczyk, B., Herrera, F. "Learning from Imbalanced Data Sets". Springer (2018)