uni farm

uplift model - 概要 -

upliftについて、考え方とアプローチ方法をまとめておく

用語

treatment(group): なにがしかの変更(介入)を加えたグループ。ターゲティングの対象となるグループ。日本語だと統制群と言ったりする control(group): なにがしかの変更(介入)を加えないグループ。ターゲティング対象外となる

考え方

広告などによりユーザが買うかどうかを予測したいとき、単純に買うか否かではなく

広告が原因で買う、もしくは広告が原因で離脱するような人を特定してからターゲティングを行うようにしたい。これができれば広告に対する効果のほどが予測できる

マーケティングキャンペーンにおいて、treatment、control2つのグループを比較することで、キャンペーンに対する効果のほどを測定できる

ターゲティングとするかの分け方は、以下の4つにわけられる

  1. キャンペーンに対して反応する人たち。注力する対象。キャンペーンがなかったらアクションがなかったと思われる人たち(controlでは反応なし、treatmentでは反応あり)
  2. なにもしなくても反応する人たち。対象外にしてよい(controlで反応あり、treatmentでも反応あり)
  3. キャンペーンにも反応しない人たち。このキャンペーンについては対象外にしてよい
  4. 反応をしなくなる人たち、退会などを行う。寝た子を起こす行為。こちらからなにかしてはいけない

従来の方法

反応があった人のみで機械学習モデルを作成する。反応するか否かのスコアがわかる

two model approach

treatment sampleとcontrol sampleを用いて機械学習モデルを作成する

各々のモデルから、あるユーザが反応するかどうか調べることができる

すべてのユーザについてスコアを予測、それぞれのスコア(S_t、S_c)によって、各ユーザを上4つのターゲティンググループに分けていく

効果を測るには、S_t - S_cを用いる。liftと呼ばれたりする

各スコアtreatmentが80%、controlが50%とすると、treatmentにする(ターゲティングする)と30%だけ効果が見込めるといえる

高いほど、介入したほうがいいグループであり、 低いほど、介入しないほうがいいグループといえる

モデルを作るには、大量のデータ点が必要である。また、2つのモデルからスコアの差分を利用するため、スコアの高いエラー(high erros)が2倍になる可能性がある。これを生じないようにするため、過学習には注意する。モデルの検証が重要である

モデルの検証にはS_t - S_cのbinをもちいる。

各binにおける、treatmentの応答率(R_t)、とcontrolの応答率(R_c)を実際の値より求める。

liftの値を縦軸に、S_t-S_cを横軸に取る。

liftが高い領域は、キャンペーンに反応する人たち

liftが平均以下〜マイナスより大きい人は、対象外にしてもいい、何もしなくても反応する人たち、もしくはキャンペーンに反応しない人たちである

liftがマイナスの領域は、反応しない、もしくは反応しなくなるグループ

https://medium.com/@abhayspawar/uplift-models-for-better-marketing-campaigns-part-2-f04f90d84aef

qiniという指標で測ることができる。giniのようなもの。

treatmentの指標変数を用いた単一モデル

treatmentかcontrolかを予測するモデルを作成

対象とすべき人(1)と対象にすべきでない人(0)がわかる

テストデータにてtreatmentの予測確率と、controlの予測確率を取得し、その差分をliftとして計算できる

指標変数(indicator variable) = treatmentか否かのこと?

4象限アプローチ

4つのターゲティンググループにクラス分類するモデルを作成する

target = []
for index, row in train_data.iterrows():
    if (row['Promotion'] == "Yes") & (row['purchase'] == 1):
        # TR group
        target.append(0)
    elif (row['Promotion'] == "No") & (row['purchase'] == 1):
        # CR group
        target.append(1)
    elif (row['Promotion'] == "Yes") & (row['purchase'] == 0):
        # TN group
        target.append(2)
    else: #CN group
        target.append(3)
train_data['target'] = target

https://medium.com/datadriveninvestor/simple-machine-learning-techniques-to-improve-your-marketing-strategy-demystifying-uplift-models-dc4fb3f927a2 より引用

参考

  • 仕事ではじめる機械学習
2022, Built with Gatsby. This site uses Google Analytics.