我試考・銀行の顧客ターゲティング、その目的とは?

前回までで、ようやく機械学習を行う環境が整いました。今回から、ようやく銀行の顧客ターゲティングに入っていきたいと、思います。

まず初めに、そもそも何のために機械学習して、予測AIを作るのか?について、ビジネス的な意味と、機械学習を使ったデータ分析のゴールを、自分なりに考えてみたいと、思います。

ある意味、ようやく前置きが終わったと思ったらまた前置きですが・・・よろしくお願いいたします。

はじめに

私が読んだ、ある機械学習の本に、ありました*1

ビジネスのゴールと、分析のゴールには、大きな隔たりがある

と。どういうことかと申しますと、

  • ビジネスのゴールとは、経済的なインパクト。
    • 売り上げが増加する、コストが削減される、リスクが低減される*2など。
  • 分析のゴールとは、データを分析した結果。
    • 不動産スペックから不動産価格を予測する、顧客属性から優良顧客と通常顧客に分類する、など。
  • よって、分析結果が、どのように経済インパクトに繋がるのか、連動ロジックを考えておくことが、重要。
  • それこそが、分析の課題設定

では、この銀行の顧客ターゲティングの、ゴールはと言いますと・・・元のUCIのサイトには、こうあります。

  • The data is related with direct marketing campaigns (phone calls) of a Portuguese banking institution. The classification goal is to predict if the client will subscribe a term deposit.

日本語に訳すと、こんな感じでしょうか。

  • これは、ポルトガルの銀行の、ダイレクトマーケティング(電話営業)キャンペーンに関する、データです。
  • 分類のゴールは、顧客が、定期預金口座を開設するかどうかを、予測することです。

日本語のサイトを見ると、「(単なる)口座を開設するかどうか」と書かれていることがありますが、「term deposit」なので、多分「定期預金口座」が正しいと、思います。

「口座開設」だと、口座も持っていない見込み顧客に、いきなり電話をかけることになってしまい、ちょっと変ですよね。まだ顧客じゃない人は、通常は顧客データベースに、登録されていないはずです。口座を開設してくれた既存顧客が、優良顧客(定期預金口座を、開設してくれる可能性がある)か、通常顧客かを分類する方が、しっくりきます。

ということで、分析のゴールは、既存顧客を優良顧客(定期預金口座を、開設してくれる可能性がある)と、通常顧客に、分類することと、考えます。

では、ビジネス上の目的は、何なのでしょう?実務ではない仮想問題では、そこは推測するしかありません。が、古今東西、ビジネス上の目的と言うと、大体、利益・売り上げの増加か、コスト削減と、相場は決まっています。繰り返しになりますが。そこで、その二つの立場に立ってみますと・・・

立場 目的 キャンペーンの目的
A 利益・売り上げの向上 一人でも多くの優良顧客を、発掘したい。
B コスト削減 なるべく無駄打ちを避けたい。可能な限り、100発100中の電話営業を、したい。

こうなるかと、思います。精度100%の予測AIが作れれば、上記は両立できるかもしれませんが、現状の機械学習技術だと、そうはいかないかと思います。

精度を指標にする場合の問題点

それでも、「可能な限り精度を高くすれば、一人でも多くの優良顧客を、可能な限り少ない無駄打ちで、発掘できるはずだ」と、一見思ってしまいませんか?

必ずしも間違いではないのですが、以下を、ご覧ください。

from google.colab import drive
drive.mount('/content/gdrive/')
%cd ./gdrive/My\ Drive/colab/bank
import pandas as pd
train = pd.read_csv("./dataset/train.csv")
train["y"].value_counts()


0 23954
1 3174
Name: y, dtype: int64


3174 / (23954 + 3174) * 100
11.70008846947803

前回構築したGoogle Colabの環境で、打ってみたコマンドです。このあたりでも触れましたが、優良顧客は全体の1割程度です。たまたまこのサンプルが偏っているのか、全体も同じような偏りをしているのかは、判断が分かれるところです。が、私は後者ではないかと、予測します。1銀行で3万人近くの顧客と言えば、それなりの数のサンプリングだと思いますし、電話営業の成約率ならまぁ、こんなものかなという、感覚があるからです。

つまり、全て非優良顧客と予測すれば、精度は90%近くになってしまいます。確かに、無駄な営業は一切なくなりますが、その代わり優良顧客は一人も発掘されません。「電話営業は非効率なんでそんなキャンペーンは止めましょう」なんていうのも、提案の一つではありますが、それを言うと話が終わってしまいます。

単純に精度を見るだけでは駄目だとするならば、一体何を見れば、良い予測AIが作れるのでしょうか。

RecallとPrecision

突然ですが、本問題は、「二項分類」になります。現状、AIが予測できる回帰*3・分類*4のうちの分類問題の一つ、True(この場合、優良顧客)/False(この場合、通常顧客)を予測する、問題です。二項分類問題の場合、「精度」は正解か不正解の簡単な二択に見えて、実はそうでもないのです。以下をご覧ください。

AIがTrueと予測 AIがFalseと予測
実際にTrueだった顧客 True Positive(TP) False Negative(FN)
実際にFalseだった顧客 False Positive(FP) True Negative(TN)

正解・不正解にも、二つずつあることが、分かります。

  • 正解
    • AIがTrueと予測して、実際にもTrueなもの(TP)
    • AIがFalseと予測して、実際にもFalseなもの(TN)
  • 不正解
    • AIがTrueと予測したけど、実際にはFalseなもの(FP)
    • AIがFalseと予測したけど、実際にはTrueなもの(FN)

ここで、以下のビジネスの目的に、立ち返ってみたいと思います。

立場 目的 キャンペーンの目的
A 利益・売り上げの向上 一人でも多くの優良顧客を、発掘したい。
B コスト削減 なるべく無駄打ちを避けたい。可能な限り、100発100中の電話営業を、したい。

立場Bに立ってみた場合、AIが「優良顧客」と予測したのに、実際は「通常顧客」だと、困ります。無駄打ち営業になってしまうからです。なので、Bの立場だと、なるべくFP(False Positive)を減らしつつ、精度を高めていけば、良いAIが作れるのではないかと、考えられます。

立場Aに立ってみた場合、本当は「優良顧客」なのに、AIが「通常顧客」と予測してしまうと、困ります。一人でも多くの優良顧客を発掘したいのに、取りこぼしてしまう可能性が、あるからです。なので、Aの立場だと、なるべくFN(False Negative)を減らしつつ、精度を高めていけば、良いAIが作れるのではないかと、考えられます。

結論としては、前者の場合、TP/(TP+FP)を見ればよいことに、なります。この値が1に近ければ近いほど、AIが優良顧客と予測した顧客は、本当に優良顧客である確率が高いと、言えます。この指標のことを、Precision/適合率と言います。

また、後者の場合は、TP/(TP+FN)を見ればよいことに、なります。この値が1に近ければ近いほど、本当の優良顧客を、AIがちゃんと優良顧客と予測してくれる確率が高いと、言えます。この指標のことを、Recall/検出率と言います。

トレードオフとF-score

ちょっと難しい話ではありますが・・・RecallとPrecisionは、トレードオフの関係に、あります。すなわち、Recallを上げればPrecisionは下がり、Precisionを上げれば、Recallが下がります。

このケースで想像してみますに・・・とにかく電話をかけまくれば、一人でも優良顧客を発掘できる確率は、高まります。つまり、Recallはあがります。でも、外れを引く確率も高まるので、Precisionは下がりそうです。

逆に、確度の高そうな人に絞って電話をかければ、電話一本当たりの勝率は高まりそうです。つまり、Precisionは上がります。ただ、「低確率ではあるものの、もしかしたら定期預金口座開設してくれるかもしれない」人は取りこぼすので、Recallは下がります。

こんな感じでしょうか。よって、極端にRecallを重視すれば、成果は上がる代わりに無駄打ちは多くなりますし、極端にPrecisionを重視すれば、無駄な営業コストは削減出来る代わりに、成果も少ないキャンペーンに、なりそうです。

そうなってくると、そんな極端な指標ではなく、もっとバランスの取れた指標はないのかと思うのが、人情ですよね。そんな人情派のあなたにぴったりの指標が、F-scoreです。計算式上は以下で表され、まさしく、RecallとPrecisionのバランスを取った指標になります。

F-score = 2×Recall×Precision/(Recall + Presision)

まとめと次回予告

というわけで、ビジネスの目的から分析のゴールを考えると、良い予測AIを作るためには、以下のようになるかと、考えました。

ビジネスの目的 分析のゴール
金に糸目はつけず、とにかく一人でも多く優良顧客を発掘 Recallの高い予測AIを、作る
あまりお金をかけず、効率的に優良顧客を発掘したい Precisionの高い予測AIを、作る
ほどほどにお金をかけ、ほどほどに優良顧客を発掘する、バランスの取れたキャンペーンを打ちたい F-scoreの高い予測AIを、作る

で、実際に、SIGNATEのコンペで、何の指標を元にランキングされているかというと・・・「ROC AUC」という指標です。

個人的になんですが、Recall・Precision・F-scoreまでは、ビジネス上の目的とも結びつけやすく、理解しやすい気がします。一方、AUCが高いと、ビジネス的にどういう意味があるのか?って、理解が難しい。そう思ったこと、ありませんか?

ちょっと長くなってきたので、今回はここらへんまでにして、次回、その意味を自分なりに考えてみたいと、思います。最後まで読んでいただいて、ありがとうございました。

参考資料

Watson Studioで始める機械学習・深層学習ーーノンプログラミングでやさしく体験

Watson Studioで始める機械学習・深層学習ーーノンプログラミングでやさしく体験

フリーライブラリで学ぶ機械学習入門

フリーライブラリで学ぶ機械学習入門

*1:Amazonアフィリエイト設定したら、リンク貼ろうと思います。

*2:リスク対策コストが減ると考えれば、これも広義にはコスト削減ですね。

*3:予測結果が、連続値。売り上げなど。

*4:予測結果が、離散値。True/Flaseの二項分類や、上/中/下の多項分類など。