デジタルマーケティングの帰属に関する問題に対処するために作成されたPythonクラス。
オンラインで閲覧している間、ユーザーは変換する前に複数のタッチポイントを持っているため、これはこれまで以上に長く複雑な旅につながる可能性があります。
メディアへのクレジットコンバージョンとオプトミズの投資を適切にクレジットする方法は?
これをアドレスするには、帰属モデルを適用します。
ヒューリスティックモデル:
最後の相互作用:
Gogle AnalyticsやGoogle AdsやFacebook Business Managerなどのその他のメディアプラットフォームのデフォルトの帰属。
最後のタッチポイントのみが変換のためにクレジットされています。
最後のクリック非方向をクリックします:
すべての直接トラフィックは無視されているため、結果の100%は、変換する前にクライアントがウェブサイトに到達した最後のチャンネルに送られます。
最初の相互作用:
結果は、最初のタッチポイントに完全に起因します。
線形:
すべてのタッチポイントも同様にクレジットされています。
時間の崩壊:
最近のタッチポイントがあればあるほど、より多くのクレジットが得られます。
位置ベース:
このモデルでは、結果の40%が最後のタッチポイントに起因し、さらに40%が最初のタッチポイントに起因し、残りの20%はミッドウェイチャネル間に等しく分布しています。
アルゴチズムモデル
Shapleyの価値
ゲーム理論で使用されるこの値は、協同組合ゲームでの個々のプレーヤーの貢献度の推定です。
コンバージョンは、旅に順応するプロセスによりチャネルにクレジットされます。各順列に、全体としてどれほどエッセンシックであるかを推定するためにチャネルが配られます。
一例として、次の低迷した旅を見てみましょう。
オーガニック検索> Facebook>ダイレクト> $ 19 (収益として)
各チャネルのShapley値を取得するには、まず、この指定された旅のコンポーネント順列のすべての変換値を考慮する必要があります。
オーガニック検索> $ 7
Facebook> $ 6
直接> 4ドル
オーガニック検索> Facebook> $ 15
オーガニック検索>ダイレクト> $ 7
Facebook>ダイレクト> $ 9
オーガニック検索> Facebook>ダイレクト> $ 19
コンポーネントの数は、より明確なチャネルを指数関数的に増加させます: nチャネルのレートは2^n(nの電力に2)です。
言い換えれば、3つの異なるタッチポイントで8つの順列があります。たとえば、15を超えると、このプロセスは実行不可能です。
デフォルトでは、Shapley値を計算する際にタッチポイントの順序は考慮されません。そうするために、順列の数が増加します。
それを念頭に置いて、相互作用の順序を検討するときにこのモデルを使用することはかなり難しいことに注意してください。 nチャネルの場合、特定のチャネルIに2^nの順列があるだけでなく、 Iを含むすべての順列が別の位置にあります。
Shapley価値のいくつかの問題と制限
マルコフチェーンマルコフ連鎖は、次の状態の確率分布が現在の状態とは内容にのみ依存し、前の状態とそのシーケンスを無視する特定の確率的プロセスです。
マルチチャネルの誘導では、マルコフチェーンを使用して、遷移マトリックスとメディアチャネルのペア間の相互作用の確率を計算できます。
各チャネルの変換における寄与に関して、除去効果が登場します。各ジョーニーについて、特定のチャネルが削除され、変換確率が計算されます。
チャネルに起因する値は、一般的な変換の確率と、前述のチャネルが一般的な確率で再び除去されると確率の差の比によって得られます。
言い換えれば、チャネルの除去効果が大きいほど、貢献が大きくなります。
**マルコビアのプロセスを操作する場合、チャネルの数量または順序のために制限はありません。それらのシーケンス自体は、アルゴリズムの基本的な部分です。
>> pip install marketing_attribution_models
from marketing_attribution_models import MAM
MAMオブジェクトを作成する場合、2つのデータフレームテンプレートを入力として使用できます。
このデモストレーションでは、各行が別のセッションとして、独自のジャーニーIDを使用して、旅がまだグループ化されていないデータフレームを使用します。
注: MAMクラスには、Journey IDの作成のための組み込みパラメーター、 Create_Journey_id_based_on_conversionがあり、 Trueの場合、IDがユーザーIDに基づいて作成され、 Group_Channels_ID_LISTパラメーターに入力され、コンバージョンがあるかどうかを示す列があります。名前は、 Journey_with_conv_colnameパラメーターで定義されています。
このシナリオでは、各異なるユーザーからのすべてのセッションが注文され、変換ごとに新しいジャーニーIDが作成されます。ただし、この旅のID作成は、手元のビジネスと探索的結論に固有の知識に基づいてカスタマイズされることを強くお勧めします。たとえば、特定のビジネスで平均旅の期間が約1週間であることに注意してください。新しいクリトレオンが定義される可能性があるため、ユーザーが7日間やり取りを行わないと、損失が発生したと仮定の下で旅が休みます。興味深い。
現在、パラメーターについては、 Group_ Channels = Trueシナリオ用に構成されている方法を次に示します。
attributions = MAM ( df ,
group_channels = True ,
channels_colname = 'channels' ,
journey_with_conv_colname = 'has_transaction' ,
group_channels_by_id_list = [ 'user_id' ],
group_timestamp_colname = 'visitStartTime' ,
create_journey_id_based_on_conversion = True )
MAMの機能を調査して理解するために、「ランダムデータフレームジェネレーター」がTRUEに設定された場合にRANDOM_DFパラメーターを使用して実装されました。
attributions = MAM ( random_df = True )
Object MAMが作成された後、 Journey_idの追加と、 Attriute ".dataframe"を使用してJourneysにグループ化されたセッションでデータベースをチェックアウトできます。
attributions . DataFrame
Journey_id | Channels_agg | time_till_conv_agg | converted_agg | Conversion_Value | |
---|---|---|---|---|---|
0 | ID:0_J:0 | 0.0 | 真実 | 1 | |
1 | ID:0_J:1 | Google検索 | 0.0 | 真実 | 1 |
2 | ID:0_J:10 | Google Search> Organic>電子メールマーケティング | 72.0> 24.0> 0.0 | 真実 | 1 |
3 | ID:0_J:11 | オーガニック | 0.0 | 真実 | 1 |
4 | ID:0_J:12 | メールマーケティング> Facebook | 432.0> 0.0 | 真実 | 1 |
... | ... | ... | ... | ... | ... |
20341 | ID:9_J:5 | direct> facebook | 120.0> 0.0 | 真実 | 1 |
20342 | ID:9_J:6 | Google検索> Google検索> Google検索 | 48.0> 24.0> 0.0 | 真実 | 1 |
20343 | ID:9_J:7 | オーガニック>オーガニック> Google検索> Google検索 | 480.0> 480.0> 288.0> 0.0 | 真実 | 1 |
20344 | ID:9_J:8 | 直接>オーガニック | 168.0> 0.0 | 真実 | 1 |
20345 | ID:9_J:9 | Google Search> Organic> Google Search> Emai ... | 528.0> 528.0> 408.0> 240.0> 0.0 | 真実 | 1 |
この属性は、生成されたすべての属性モデルに対して更新されます。ヒューリスティックモデルの場合にのみ、新しい列には、前述のモデルによって与えられた帰属値が含まれています。
注:属性.DataFrameは、モデルの計算を妨害しません。使用によって変更された場合、次の結果は影響を受けません。
attributions . attribution_last_click ()
attributions . DataFrame
Journey_id | Channels_agg | time_till_conv_agg | converted_agg | Conversion_Value | |
---|---|---|---|---|---|
0 | ID:0_J:0 | 0.0 | 真実 | 1 | |
1 | ID:0_J:1 | Google検索 | 0.0 | 真実 | 1 |
2 | ID:0_J:10 | Google Search> Organic>電子メールマーケティング | 72.0> 24.0> 0.0 | 真実 | 1 |
3 | ID:0_J:11 | オーガニック | 0.0 | 真実 | 1 |
4 | ID:0_J:12 | メールマーケティング> Facebook | 432.0> 0.0 | 真実 | 1 |
... | ... | ... | ... | ... | ... |
20341 | ID:9_J:5 | direct> facebook | 120.0> 0.0 | 真実 | 1 |
20342 | ID:9_J:6 | Google検索> Google検索> Google検索 | 48.0> 24.0> 0.0 | 真実 | 1 |
20343 | ID:9_J:7 | オーガニック>オーガニック> Google検索> Google検索 | 480.0> 480.0> 288.0> 0.0 | 真実 | 1 |
20344 | ID:9_J:8 | 直接>オーガニック | 168.0> 0.0 | 真実 | 1 |
20345 | ID:9_J:9 | Google Search> Organic> Google Search> Emai ... | 528.0> 528.0> 408.0> 240.0> 0.0 | 真実 | 1 |
通常、使用したデータの量は広範囲であるため、取引を伴う各旅に起因する結果を分析することは非現実的または不可能です。ただし、属性Group_by_channels_modelsを使用すると、すべての結果がチャネルごとにグループ化されます。
注:グループ化された結果は、同じモデルが2つの異なるインスタンスで使用されている場合に互いに上書きしません。それらの両方(またはそれ以上)は、「 group_by_channels_models 」に示されています。
attributions . group_by_channels_models
チャネル | Attribution_last_click_heuristic |
---|---|
直接 | 2133 |
メールマーケティング | 1033 |
3168 | |
Googleディスプレイ | 1073 |
Google検索 | 4255 |
1028 | |
オーガニック | 6322 |
YouTube | 1093 |
.dataframe属性と同様に、 Group_by_channels_modelsは、アルゴリズムの結果を表示しないという制限なしに使用されるすべてのモデルに対して更新されます。
attributions . attribution_shapley ()
attributions . group_by_channels_models
チャネル | Attribution_last_click_heuristic | Attribution_shapley_size4_conv_rate_algorithmic | |
---|---|---|---|
0 | 直接 | 109 | 74.926849 |
1 | メールマーケティング | 54 | 70.558428 |
2 | 160 | 160.628945 | |
3 | Googleディスプレイ | 65 | 110.649352 |
4 | Google検索 | 193 | 202.179519 |
5 | 64 | 72.982433 | |
6 | オーガニック | 315 | 265.768549 |
7 | YouTube | 58 | 60.305925 |
前に説明したように、すべてのヒューリスティックモデルは属性.dataframeおよび.group_channels_modelsを使用する場合に同じように動作し、すべてのHeuristicモデルのメソッドの出力は2つのPandasシリーズを含むタプルを返します。
attribution_first_click = attributions . attribution_first_click ()
タプルの最初のシリーズは、 .dataframe属性で観察されたものと同様の旅の粒度の結果です
attribution_first_click [ 0 ]
0 [1, 0, 0, 0, 0]
1 [1]
2 [1, 0, 0, 0, 0, 0, 0, 0, 0]
3 [1, 0]
4 [1]
...
20512 [1, 0]
20513 [1, 0, 0]
20514 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
20515 [1, 0, 0]
20516 [1, 0, 0, 0]
Length: 20517, dtype: object
2番目のものには、 .group_by_channels_models属性に見られるように、チャネルの粒度を持つ結果が含まれます。
attribution_first_click [ 1 ]
チャネル | Attribution_first_click_heuristic | |
---|---|---|
0 | 直接 | 2078 |
1 | メールマーケティング | 1095 |
2 | 3177 | |
3 | Googleディスプレイ | 1066 |
4 | Google検索 | 4259 |
5 | 1007 | |
6 | オーガニック | 6361 |
7 | YouTube | 1062 |
オブジェクトMAMに存在するすべてのモデルのうち、最後のクリック、最初のクリック、Linearにのみカスタマイズ可能なパラメーターはありません。Group_By_Channels_Models以外のパラメーターはありません。
Google Analyticsのデフォルトの誘導(最後のクリックNon Direct )を複製するために作成されました。これは、前のインターが特定のタイムスパン(デフォルトで6か月)に直接それ自体以外の特定のトラフィックソースを持っている場合に直接トラフィックが上書きされます。
不特定の場合、パラメーターbut_not_this_channelは「直接」に設定されていますが、ビジネスにとって他の関心のあるチャネルに設定できます。
attributions . attribution_last_click_non ( but_not_this_channel = 'Direct' )[ 1 ]
チャネル | Attribution_last_click_non_direct_heuristic | |
---|---|---|
0 | 直接 | 11 |
1 | メールマーケティング | 60 |
2 | 172 | |
3 | Googleディスプレイ | 69 |
4 | Google検索 | 224 |
5 | 67 | |
6 | オーガニック | 350 |
7 | YouTube | 65 |
このモデルには、各旅のチャネルの位置にそれぞれの重みが、ビジネス関連の決定に従って指定できるパラメーターlist_positions_first_middle_lastがあります。パラメーターのデフォルトの分布は、導入チャネルでは40% 、変換 /最後のチャネルで40% 、間隔のチャネルで20%です。
attributions . attribution_position_based ( list_positions_first_middle_last = [ 0.3 , 0.3 , 0.4 ])[ 1 ]
チャネル | Attribution_Position_Based_0.3_0.3_0.4_Heuristic | |
---|---|---|
0 | 直接 | 95.685085 |
1 | メールマーケティング | 57.617191 |
2 | 145.817501 | |
3 | Googleディスプレイ | 56.340693 |
4 | Google検索 | 193.282305 |
5 | 54.678557 | |
6 | オーガニック | 288.148896 |
7 | YouTube | 55.629772 |
2つのカスタマイズ可能な設定があります。減衰率、 decay_over_time *パラメーターのthroght、および周波数パラメーターを介した各除去の間の時間(時間単位)です。
ただし、周波数間隔に複数のタッチポイントがある場合、これらのチャネル間に変換値が等しく分布することは注目に値します。
例として:
attributions . attribution_time_decay (
decay_over_time = 0.6 ,
frequency = 7 )[ 1 ]
チャネル | Attribution_time_decay0.6_freq7_heuristic | |
---|---|---|
0 | 直接 | 108.679538 |
1 | メールマーケティング | 54.425914 |
2 | 159.592216 | |
3 | Googleディスプレイ | 64.350107 |
4 | Google検索 | 192.838884 |
5 | 64.611414 | |
6 | オーガニック | 314.920082 |
7 | YouTube | 58.581845 |
アポンが呼ばれているこのモデルは、 4つのコンポーネントを備えたタプルを返します。最初の2つ(インデックスされた0と1)は、それぞれ.dataframeと.group_by_channels_modelsを表現するヒューリスティックモデルと同じです。 3番目と4番目のコンポーネント(インデックス2および3)については、結果は遷移マトリックスと除去効果テーブルです。
開始するために、同じ状態遷移が考慮されているかどうかを示すことができます(例えば、直接的に直接)。
attribution_markov = attributions . attribution_markov ( transition_to_same_state = False )
チャネル | Attribution_markov_algorithmic | |
---|---|---|
0 | 直接 | 2305.324362 |
1 | メールマーケティング | 1237.400774 |
2 | 3273.918832 | |
3 | YouTube | 1231.183938 |
4 | Google検索 | 4035.260685 |
5 | 1205.949095 | |
6 | オーガニック | 5358.270644 |
7 | Googleディスプレイ | 1213.691671 |
この構成は、各チャネルの全体的な属性結果には影響しませんが、遷移マトリックスで観察される値に影響します。 transition_to_same_stateをfalseに設定するため、斜めは自分自身に移行する状態を示しています。
ax , fig = plt . subplots ( figsize = ( 15 , 10 ))
sns . heatmap ( attribution_markov [ 2 ]. round ( 3 ), cmap = "YlGnBu" , annot = True , linewidths = .5 )
4番目の属性_Markov出力である除去効果は、一般的な変換の確率と、前述のチャネルが一般的な確率で再び除去されると確率の差の比によって得られます。
ax , fig = plt . subplots ( figsize = ( 2 , 5 ))
sns . heatmap ( attribution_markov [ 3 ]. round ( 3 ), cmap = "YlGnBu" , annot = True , linewidths = .5 )
最後に、コンセプトがゲーム理論から来たMAMの2番目のアルゴリスモデル。ここでの目的は、特定のチャネルの有無にかかわらず、旅の組み合わせを使用して計算された協力ゲームに、各プレイヤー(私たちの場合はチャネル)の貢献を分配することです。
パラメーターサイズは、すべての旅でチャネルチェーンの長さの制限を定義します。デフォルトでは、値は4に設定されています。つまり、変換の前の4つの最後のチャネルのみが考慮されます。
各チャネルの限界寄与の計算方法は、順序パラメーターによって異なる場合があります。デフォルトではfalseに設定されています。つまり、貢献は、旅の各チャネルの順序を無視して計算されます。
attributions . attribution_shapley ( size = 4 , order = True , values_col = 'conv_rate' )[ 0 ]
組み合わせ | 変換 | Total_sequences | Conversion_Value | conv_rate | Attribution_shapley_size4_conv_rate_order_algorithmic | |
---|---|---|---|---|---|---|
0 | 直接 | 909 | 926 | 909 | 0.981641 | [909.0] |
1 | 直接>電子メールマーケティング | 27 | 28 | 27 | 0.964286 | [13.948270234099155、13.051729765900845] |
2 | 直接>電子メールマーケティング> Facebook | 5 | 5 | 5 | 1.000000 | [1.6636366232390172、1.5835883671498818、1.752 ... |
3 | 直接>電子メールマーケティング> Facebook> GoogleD ... | 1 | 1 | 1 | 1.000000 | [0.2563402919193473、0.2345560799963515、0.259 ... |
4 | 直接>電子メールマーケティング> Facebook> GoogleS ... | 1 | 1 | 1 | 1.000000 | [0.2522517802130265、0.2401286956930936、0.255 ... |
... | ... | ... | ... | ... | ... | ... |
1278 | YouTube> Organic> Google Search> Google DIS ... | 1 | 2 | 1 | 0.500000 | [0.2514214624662836、0.24872101523605275、0.24 ... |
1279 | YouTube> Organic> Google Search> Instagram | 1 | 1 | 1 | 1.000000 | [0.25444401477637237、0.254107188956603、0.253 ... |
1280 | YouTube> Organic> Instagram | 4 | 4 | 4 | 1.000000 | [1.2757196742326997、1.4712839059493295、1.252 ... |
1281 | YouTube> Organic> Instagram> Facebook | 1 | 1 | 1 | 1.000000 | [0.2357631944623868、0.2610913781266248、0.247 ... |
1282 | YouTube> Organic> Instagram> Google検索 | 3 | 3 | 3 | 1.000000 | [0.7223482210689489、0.7769049003203142、0.726 ... |
最後に、shapley値の計算に使用されるメトリックを示すパラメーターはvalues_colであり、デフォルトでは変換速度に設定されています。そうすることで、コンバージョンのない旅が急になります。
ただし、以下に示すようにモデルを使用する場合、文字通りの変換のみを考慮することは可能です。
attributions . attribution_shapley ( size = 3 , order = False , values_col = 'conversions' )[ 0 ]
組み合わせ | 変換 | Total_sequences | Conversion_Value | conv_rate | Attribution_shapley_size3_conversions_algorithmic | |
---|---|---|---|---|---|---|
0 | 直接 | 11 | 18 | 18 | 0.611111 | [11.0] |
1 | 直接>電子メールマーケティング | 4 | 5 | 5 | 0.800000 | [2.0、2.0] |
2 | Direct> Email Marketing> Google検索 | 1 | 2 | 2 | 0.500000 | [-3.1666666666666665、-7.666666666666666、11.8 ... |
3 | direct>電子メールマーケティング>オーガニック | 4 | 6 | 6 | 0.666667 | [-7.833333333333333、-10.833333333333332、22.6 ... |
4 | direct> facebook | 3 | 4 | 4 | 0.750000 | [-8.5、11.5] |
... | ... | ... | ... | ... | ... | ... |
75 | Instagram> Organic> YouTube | 46 | 123 | 123 | 0.373984 | [5.833333333333332、34.3333333333333、5.83333 ... |
76 | Instagram> YouTube | 2 | 4 | 4 | 0.500000 | [2.0、0.0] |
77 | オーガニック | 64 | 92 | 92 | 0.695652 | [64.0] |
78 | オーガニック> YouTube | 8 | 11 | 11 | 0.727273 | [30.5、-22.5] |
79 | YouTube | 11 | 15 | 15 | 0.733333 | [11.0] |
.group_by_channels_modelsオブジェクトに保存されているさまざまなモデルからすべての帰属を取得した後、洞察の結果をプロットして比較することができます
attributions . plot ()
アルゴリズムモデルのみに興味がある場合は、 Model_Typeパラメーターで指定できます。
attributions . plot ( model_type = 'algorithmic' )