アップリフトモデリング(Uplift modeling)について分かりやすく解説!

目次
ウマたん当サイト【スタビジ】の本記事では、アップリフトモデリング(Uplift modeling)について分かりやすく解説していきます!アップリフトモデリングの実用場面や実装方法について見ていきますよ!マーケティングの領域で非常に活躍する分析方法ですので、ぜひ利用してみてください。
こんにちは!
データサイエンティストのウマたん(@statistics1012)です!
クーポンやキャンペーンを打って実際に効果があるのか?
クーポンが効く人だけに効率良く配りたい!!
そんなマーケティングコミュニケーションの悩みを解決してくれるのが
「アップリフトモデリング(Uplift modeling)」
ロボたんクーポンやDMの効果を定量的に測るのって難しいと思うんだけど、それができるのかー!
ウマたんアップリフトモデリングを使えば可能なんだ!いわゆる因果推論の世界になってくるよ!
この記事では、そんなアップリフトモデリングについて簡単に解説していきたいと思います!
本当に意味のある施策を行うためにぜひアップリフトモデリングをマスターしましょう!
以下のYoutube動画でも分かりやすく解説しています!
アップリフトモデリングとは

まずはじめに、そもそもアップリフトモデリングとは何なのか見ていきましょう!
アップリフトモデリングとは、マーケティング施策を効率化するためにターゲティング精度を高める手法です。
例えば、ECサイトで顧客の購買促進のためにクーポンを配るとしましょう!
出来るだけ効率よく効果を最大化してクーポンを配りたい。
しかし、クーポンを配布しなくても購入してくれるお客様には配布したくないですよね?
また、クーポンの場合はなかなかないとは思いますがクーポンを配布したら逆に購入しなくなってしまうお客様にはもちろんクーポンを配りたくないですよね?
クーポン配布の有無での購買有無は4つのセグメントで以下のように分けることが出来ます。

出来るだけ、説得可能のユーザー群に絞ってクーポンを配布したいところです。
あまのじゃくのユーザー群には絶対にクーポンを配布してはいけません。
※ここでは、クーポンとしていますが、クーポンの部分は他の施策に置き換えても問題ありません。
統計的因果推論の世界では介入効果という言葉を使いますが、ここで言うクーポンがいわゆる介入になります。
【分かりやすく解説】統計的因果推論の手法7つを理解しPythonで実装していこう!当サイト【スタビジ】の本記事では、非常に奥が深い分野である統計的因果推論について見ていきたいと思います。相関関係と因果関係は違うということをしっかり理解し、どのように因果を見つけていけばよいか様々な方法を見ていきましょう!
アップリフトモデリングの仕組み

さて、アップリフトモデリングはどのようなステップでおこなっていくのでしょうか?
以下の論文やサイト、書籍を参考にしています。
より詳しく知りたい方は、是非参考文献を見てみてください!
アップリフトモデリングは、ABテストと非常に似ていますが厳密にはABテストとは違います。
ABテストは実験群と統制群にランダムにグループを分けて、実験群にはある施策を介入させ統制群には施策を介入させません。
ABテストについて徹底解説!カイ二乗検定による有意差判定!当サイト【スタビジ】の本記事では、ビジネスシーンで頻出のABテストについてカイ二乗検定による有意差判定など統計的観点も取り入れながら詳しく解説していきますよ!ABテストを使いこなせればあなたのビジネスがグロースすること間違いなし!ぜひAbテストを理解しましょう!
これにより介入効果について調べます。
基本的にアップリフトモデリングでも同様のステップを踏むのですが、アップリフトモデリングでは実験群と介入群それぞれの特徴量にも注目します。
どんな特徴量を持つサンプルが介入に対して反応したのかを測ることで、反応しやすい特徴量を持っているグループを特定することができるのです。
ロボたんうーん、なんとなく分かるような分からないような・・・
ウマたん分かりやすい例を挙げて見てみようか!
書籍「仕事ではじめる機械学習」で言及されている例を取り上げてみましょう!
ある広告バナーのクリック率が
であり有意差ありと判定されたとしましょう。
これだけ見るとクリエイティブAを採用すべきだとということになりますが、男女別にこのクリック率を分類してみると・・・
男性では、
女性では、
であることが判明しました。
性別で層別分析をしてみると大きな違いが発見できました。
この結果をふまえると、男性にはクリエイティブAで女性にはクリエイティブBを出すべきであるということが分かります。
このように特徴量によって介入効果の違いを測ることは単純な手作業でも出来ますが、特徴量が多くなると介入効果と特徴量の関係を紐解くのが非常に困難になります。
そこで登場するのがアップリフトモデリングなのです!
アップリフトモデリングでは以下のステップで実装していきます。
- 実験したい介入行為を設計し、実験群と統制群で何を行うかを決める
- 顧客の一部に対して、ランダム化比較実験(RCT)を実施する
- RCTの結果を学習データとテストデータに分ける
- 学習データからアップリフトモデリングの予測器を作成する
- アップリフトモデリングのスコアのグラフから、スコアがいくつ以上の顧客に対して、介入効果を実施するのかを決める
(引用元:「仕事ではじめる機械学習」※一部省略)
学習データからアップリフトモデリングの予測器を作成する部分では、実験群と統制群それぞれで別のモデルを作ります。
その上で、実験群で作られたモデルによるスコアと統制群で作られたモデルによるスコアの差もしくは比によって最終的なアップリフトモデリングのスコアが決まります。
統制群モデルではスコアが低いけど実験群モデルではスコアが高いようなユーザーに対して介入していくためです。
アップリフトモデリングを実際に使う場面

さて、続いてアップリフトモデリングを実際にどのような場面で利用するのか見ていきたいと思います。
アップリフトモデリングは、顧客に態度変容を起こさせるような施策の効果を最大化し、さらにその上でコストを最小限におさえることを目的に利用されます。
コストという観点からすると、アクションを打つのにコストが大きくかかるような施策にはアップリフトモデリングは非常に有用です。
例えば、E-メールに関しては送付にかかるコストがそれほどかからないため、先程のユーザー群の無関心層や鉄板層を無理に除外する必然性はあまりありません。
しかし、これが紙のDMになると1通送るのに大きなコストがかかるため鉄板層や無関心層をターゲットから除外するのには大きな意味があります。
何でもかんでもアップリフトモデリングを使えばよいというわけではないので注意が必要です。
アップリフトモデリングはWebマーケティングの領域で非常に利用されます。
Webマーケティングなどマーケティング周りについては以下の記事を参考にしてみてください!
【何から学ぶ?】マーケティングの独学勉強法とおすすめサイトをまとめていく!当サイト【スタビジ】の本記事では、マーケティングの勉強範囲と勉強方法について徹底的にまとめていきます。3年間で必死にマーケティングを独学で勉強してきたノウハウを結集させて必ずあなたをマーケティングを習得できる道のりの第1歩目までおしあげます。
独学でWebマーケティングを勉強して稼げるようになるロードマップ!当サイト【スタビジ】の本記事では、Webマーケティングの勉強法についてまとめていきます。Webマーケティングは、これからの世の中を生き抜く上で非常に重要なスキル。Webマーケティングをインプットし実践まですることで初めて身に付きます。この記事ではインプット編と実践編に分けて解説していきますよ!
アップリフトモデリングのPythonでの実装方法
それでは、最後にアップリフトモデリングをPythonで実装していきましょう!
コードは「仕事ではじめる機械学習」から実装に必要な部分だけピックアップしています。
まずは、アップリフトモデリングに適したシミュレーションデータを生成していきます。
import random
def generate_sample_data(num, seed=1):
is_cv_list = []
is_treat_list = []
feature_vector_list = []
random_instance = random.Random(seed)
feature_num = 8
base_weight = [0.02, 0.03, 0.05, -0.04, 0.00, 0.00, 0.00, 0.00]
lift_weight = [0.00, 0.00, 0.00, 0.05, -0.05, 0.00, 0.00, 0.00]
for i in range(num):
is_treat = random_instance.choice((True, False))
feature_vector = [random_instance.random() for n in range(feature_num)]
cv_rate = sum([feature_vector[n] * base_weight[n] for n in range(feature_num)])
if is_treat:
cv_rate += sum([feature_vector[n] * lift_weight[n] for n in range(feature_num)])
is_cv = cv_rate > random_instance.random()
is_cv_list.append(is_cv)
is_treat_list.append(is_treat)
feature_vector_list.append(feature_vector)
return is_cv_list, is_treat_list, feature_vector_list
ここでは、CVしたかどうかのデータ(is_cv_list)と実験群かどうかのデータ(is_treat_list)と8つの特徴量(feature_vector_list)を生成しています。
lift_weightで介入があった場合にCVスコアに影響を及ぼす特徴量を作っています。
続いて生成したデータを用いてロジステック回帰でモデルを構築していきます。
from sklearn.linear_model import LogisticRegression
# trainデータの生成
sample_num = 100000
train_is_cv_list, train_is_treat_list, train_feature_vector_list = generate_sample_data(sample_num, seed=1)
# 学習器の生成
treat_model = LogisticRegression(C=0.01)
control_model = LogisticRegression(C=0.01)
# データをtreatmentとcontrolに分離
treat_is_cv_list = []
treat_feature_vector_list = []
control_is_cv_list = []
control_feature_vector_list = []
for i in range(sample_num):
if train_is_treat_list[i]:
treat_is_cv_list.append(train_is_cv_list[i])
treat_feature_vector_list.append(train_feature_vector_list[i])
else:
control_is_cv_list.append(train_is_cv_list[i])
control_feature_vector_list.append(train_feature_vector_list[i])
# 学習器の構築
treat_model.fit(treat_feature_vector_list, treat_is_cv_list)
control_model.fit(control_feature_vector_list, control_is_cv_list)
ロジスティック回帰でなくても、分類タスクに使える機械学習手法であればアップリフトモデリングに適用させることが可能です。
そしてテストデータを同様に発生させて、先程の学習モデルによってスコアを予測していきます。
# seedを変えて、テストデータを生成
test_is_cv_list, test_is_treat_list, test_feature_vector_list = generate_sample_data(sample_num, seed=42)
# それぞれの学習器でCVRを予測
treat_score = treat_model.predict_proba(test_feature_vector_list)
control_score = control_model.predict_proba(test_feature_vector_list)
# スコアの算出、スコアは実験群の予測CVR / 統制群の予測CVR
# predict_probaはクラス所属確率のリストを返すため1番目を参照する
# model.classes_ を参照すると、どのクラスが何番目かを知ることができる
score_list = treat_score[:,1] / control_score[:,1]
実験群を基に作った学習モデルで予測したCVスコアと統制群を基に作った学習モデルで予測したCVスコアの比率からアップリフトモデリングのスコアを算出します。
ここからはどのくらいのアップリフトモデリングのスコアを閾値として施策を打つかを判断していくことになります。
アップリフトモデリング まとめ
アップリフトモデリングについて解説してきました!
アップリフトモデリングを使いこなせるようになれば、ビジネスに大きな価値を生み出せること間違いなし!
是非アップリフトモデリングの強力さを知って自分のビジネスへ活かしてみましょう!
ウマたんまずは自分の手で実装してみて、使い方を学んでいこう!
機械学習、データサイエンス、Pythonについては以下の記事で詳しく解説していますのであわせてチェックしてみてください!
【5分で分かる】機械学習の独学勉強ロードマップを徹底的にまとめていく!当サイト【スタビジ】の本記事では、機械学習の独学勉強ロードマップについて徹底的にまとめていきます。機械学習をいきなり理論からしっかり勉強しようとすると挫折しかねません。そこで、この記事ではなるべく挫折しないロードマップをお伝えしてきますよ!
【5分で分かる】データサイエンティストに必要なスキルと独学勉強ロードマップ!当サイト【スタビジ】の本記事では、データサイエンティストに求められるスキルとそれを身に付けるための勉強法について徹底的にまとめていきます!入門者でも、しっかりデータサイエンティストについて理解しある程度独学で駆け出しの状態までいけることを目指します。
【Python独学勉強法】Python入門を3ヶ月で習得できる学習ロードマップ当サイト【スタビジ】の本記事では、過去僕自身がPythonを独学を駆使しながら習得した経験をもとにPythonを効率よく勉強する方法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。読んだ内容を、スタアカの「データ加工集計可視化」コースで身につける
データサイエンス・AIを、動画と課題で体系的に学べるオンラインスクール。最初のレッスンは無料で見られます。





