فئة Python التي تم إنشاؤها لمعالجة المشكلات المتعلقة بإسناد التسويق الرقمي.
أثناء التصفح عبر الإنترنت ، يكون لدى المستخدم نقاط اتصال متعددة قبل التحويل ، مما قد يؤدي إلى رحلات أطول وأكثر تعقيدًا.
كيف يتم تحويل التحويلات الائتمانية على النحو الواجب وتصميم الاستثمار على وسائل الإعلام؟
للإثارة ، نطبق نماذج الإسناد .
النماذج الإرشادية :
التفاعل الأخير :
الإسناد الافتراضي في Gogle Analytics ومنصات الوسائط الأخرى مثل إعلانات Google و Facebook Business Manager ؛
يُنسب إلى نقطة اللمس الأخيرة فقط للتحويل.
آخر انقر فوق غير المباشر :
يتم تجاهل جميع حركة المرور المباشرة ، وهكذا يذهب 100 ٪ من النتيجة إلى القناة الأخيرة التي وصل من خلالها العميل إلى موقع الويب قبل التحويل.
التفاعل الأول :
والنتيجة تعزى بالكامل إلى نقطة اللمس الأولى.
خطي :
كل نقطة اتصال هي على قدم المساواة.
تسوس الوقت :
كلما كانت نقطة اللمس الأكثر حداثة ، كلما زاد الائتمان.
القائم على الموقف :
في هذا النموذج ، يعزى 40 ٪ من النتيجة إلى نقطة اللمس الأخيرة ، يتم توزيع بنسبة 40 ٪ أخرى إلى الأول والما المتبقية بنسبة 20 ٪ على قدم المساواة بين قنوات منتصف الطريق.
نماذج الخوارزمية
قيمة Shapley
تستخدم في نظرية اللعبة ، هذه القيمة هي تقدير لمساهمة كل لاعب فردي في لعبة تعاونية.
تُعزى التحويلات إلى القنوات من خلال عملية تبادل الرحلات. في كل التقليب ، يتم إعطاء قناة لتقدير مدى إدراجها بشكل عام.
على سبيل المثال ، دعونا نلقي نظرة على الرحلة الناقصة التالية:
البحث العضوي> Facebook> Direct> $ 19 (كإيرادات)
للحصول على قيمة Shapley لكل قناة ، نحتاج أولاً إلى النظر في جميع قيم التحويل لتباديل المكون لهذه الرحلة المحددة.
البحث العضوي> 7 دولارات
Facebook> 6 دولارات
مباشرة> 4 دولارات
البحث العضوي> Facebook> 15 دولارًا
البحث العضوي> مباشرة> 7 دولارات
Facebook> مباشرة> 9 دولارات
البحث العضوي> Facebook> Direct> $ 19
يزيد عدد مكونات Joneys بشكل كبير كلما زادت القنوات المتميزة التي لديك: المعدل هو 2^n (2 إلى قوة n) للقنوات n .
بمعنى آخر ، مع 3 نقاط لمس مميزة هناك 8 التباديل. مع أكثر من 15 ، على سبيل المثال ، هذه العملية غير ممكنة .
بشكل افتراضي ، لا يؤخذ ترتيب نقاط اللمس في الاعتبار عند حساب قيمة Shapley ، فقط وجودها أو عدم وجودها. من أجل القيام بذلك ، يزداد عدد التباديل.
مع وضع ذلك في الاعتبار ، لاحظ أنه من الصعب جدًا استخدام هذا النموذج عند النظر في ترتيب التفاعلات. بالنسبة لقنوات N ، ليس هناك فقط 2^n التباديل لقناة معينة I ، ولكن أيضًا كل التقليب الذي يحتوي على أنا في وضع مختلف .
بعض القضايا والقيود المفروضة على قيمة Shapley
Markov Tains A Markov Chain هي عملية عشوائية معينة يعتمد فيها توزيع احتمال أي حالة التالية فقط على ماهية الحالة الحالية ، وتجاهل أي حالات مسبقة وتسلسلها.
في السمات متعددة القنوات ، يمكننا استخدام سلاسل Markov لحساب احتمال التفاعل بين أزواج القنوات الإعلامية مع مصفوفة الانتقال .
فيما يتعلق بمساهمة كل قناة في التحويلات ، يأتي تأثير الإزالة : لكل Jorney يتم إزالة قناة معينة ويتم حساب احتمال التحويل.
يتم الحصول على القيمة المنسوبة إلى قناة ، إذن ، من خلال نسبة الفرق بين احتمال التحويل بشكل عام والاحتمال أن يتم إزالة القناة المذكورة على الاحتمال العام مرة أخرى.
بمعنى آخر ، كلما كان تأثير إزالة القناة أكبر ، كلما زاد مساهمتها.
** عند العمل مع عمليات Markovian لا توجد قيود بسبب كمية أو ترتيب القنوات. تسلسلهم ، في حد ذاته ، هو جزء أساسي من الخوارزمية.
>> pip install marketing_attribution_models
from marketing_attribution_models import MAM
عند إنشاء كائن MAM ، يمكن استخدام قوالب إطار البيانات كإدخال اعتمادًا على قيمة المعلمة Group_Channels .
بالنسبة لهذا العرض ، سنستخدم إطار بيانات لم يتم فيه تجميع الرحلات بعد ، مع كل صف كجلسة مختلفة وبدون معرف رحلة فريد.
ملاحظة: تحتوي فئة MAM على معلمة مدمجة لإنشاء معرف الرحلة ، Create_Journey_ID_BADER_ON_CONVERSION ، أنه إذا تم إنشاء معرف على أساس معرف المستخدم ، فالإدخال في معلمة group_channels_id_list ، والعمود الذي يشير إلى أن هناك تحويل أو لا ، تم تعريف الاسم بواسطة معلمة Journey_with_conv_colname .
في هذا السيناريو ، سيتم طلب جميع الجلسات من كل مستخدم متميز وللحوافر يتم إنشاء معرف رحلة جديد. ومع ذلك ، فإننا نشجع بشدة أن يتم تخصيص إنشاء معرف الرحلة هذا بناءً على المعرفة الخاصة بالعمل في متناول اليد والاستنتاجات الاستكشافية. على سبيل المثال ، إذا لوحظ في عمل معين أن متوسط مدة الرحلة هو حوالي أسبوع ، فقد يتم تعريف الناقد الجديد بحيث لا يكون هناك أي تفاعل لمدة سبعة أيام. من الاهتمام.
بالنسبة للمعلمات الآن ، إليك كيفية تكوينها لقنوات group_ لدينا = السيناريو الحقيقي:
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 ، تم تنفيذ "مولد DataFrame العشوائي" من خلال استخدام معلمة Random_DF عند ضبطها على TRUE .
attributions = MAM ( random_df = True )
بعد إنشاء الكائن MAM ، يمكننا التحقق من قاعدة البيانات الخاصة بنا الآن مع إضافة رحلة jouse_id الخاصة بنا ومع الجلسات المجمعة في الرحلات باستخدام attriute ".DataFrame" .
attributions . DataFrame
رحلة | القنوات | time_till_conv_agg | تحويل _agg | conversion_value | |
---|---|---|---|---|---|
0 | المعرف: 0_J: 0 | فيسبوك | 0.0 | حقيقي | 1 |
1 | المعرف: 0_J: 1 | بحث جوجل | 0.0 | حقيقي | 1 |
2 | المعرف: 0_J: 10 | بحث Google> عضوي> تسويق عبر البريد الإلكتروني | 72.0> 24.0> 0.0 | حقيقي | 1 |
3 | المعرف: 0_J: 11 | عضوي | 0.0 | حقيقي | 1 |
4 | المعرف: 0_J: 12 | التسويق عبر البريد الإلكتروني> Facebook | 432.0> 0.0 | حقيقي | 1 |
... | ... | ... | ... | ... | ... |
20341 | المعرف: 9_J: 5 | مباشر> Facebook | 120.0> 0.0 | حقيقي | 1 |
20342 | ID: 9_J: 6 | بحث Google> بحث Google> Google Search | 48.0> 24.0> 0.0 | حقيقي | 1 |
20343 | ID: 9_J: 7 | عضوي> عضوي> بحث Google> Google Search | 480.0> 480.0> 288.0> 0.0 | حقيقي | 1 |
20344 | ID: 9_J: 8 | مباشرة> عضوية | 168.0> 0.0 | حقيقي | 1 |
20345 | المعرف: 9_J: 9 | بحث Google> Organic> Google Search> Emai ... | 528.0> 528.0> 408.0> 240.0> 0.0 | حقيقي | 1 |
يتم تحديث هذه السمة لكل نموذج إسناد تم إنشاؤه. فقط في حالة النماذج الإرشادية ، يتم إلحاق عمود جديد يحتوي على قيمة الإسناد المقدمة من النموذج المذكور.
ملاحظة: لا تتداخل السمة .DataFrame مع أي حسابات نموذجية. إذا تم تغييره عن طريق الاستخدام ، فإن النتائج التالية لا تتأثر.
attributions . attribution_last_click ()
attributions . DataFrame
رحلة | القنوات | time_till_conv_agg | تحويل _agg | conversion_value | |
---|---|---|---|---|---|
0 | المعرف: 0_J: 0 | فيسبوك | 0.0 | حقيقي | 1 |
1 | المعرف: 0_J: 1 | بحث جوجل | 0.0 | حقيقي | 1 |
2 | المعرف: 0_J: 10 | بحث Google> عضوي> تسويق عبر البريد الإلكتروني | 72.0> 24.0> 0.0 | حقيقي | 1 |
3 | المعرف: 0_J: 11 | عضوي | 0.0 | حقيقي | 1 |
4 | المعرف: 0_J: 12 | التسويق عبر البريد الإلكتروني> Facebook | 432.0> 0.0 | حقيقي | 1 |
... | ... | ... | ... | ... | ... |
20341 | المعرف: 9_J: 5 | مباشر> Facebook | 120.0> 0.0 | حقيقي | 1 |
20342 | ID: 9_J: 6 | بحث Google> بحث Google> Google Search | 48.0> 24.0> 0.0 | حقيقي | 1 |
20343 | ID: 9_J: 7 | عضوي> عضوي> بحث Google> Google Search | 480.0> 480.0> 288.0> 0.0 | حقيقي | 1 |
20344 | ID: 9_J: 8 | مباشرة> عضوية | 168.0> 0.0 | حقيقي | 1 |
20345 | المعرف: 9_J: 9 | بحث Google> Organic> Google Search> Emai ... | 528.0> 528.0> 408.0> 240.0> 0.0 | حقيقي | 1 |
عادةً ما يكون حجم البيانات التي تعمل معها واسعة ، لذلك من غير العملي أو حتى المستحيل تحليل النتائج المنسوبة إلى كل رحلة مع المعاملة. مع السمة group_by_channels_models ، يمكن رؤية جميع النتائج مجمعة بواسطة القناة.
ملاحظة : النتائج المجمعة لا تكتب بعضها البعض في حالة استخدام نفس النموذج في حالتين متميزتين. يتم عرض (أو أكثر) منهما في " group_by_channels_models ".
attributions . group_by_channels_models
القنوات | confult_last_click_heuristic |
---|---|
مباشر | 2133 |
التسويق عبر البريد الإلكتروني | 1033 |
فيسبوك | 3168 |
عرض جوجل | 1073 |
بحث جوجل | 4255 |
1028 | |
عضوي | 6322 |
يوتيوب | 1093 |
كما هو الحال مع سمة .DataFrame ، يتم أيضًا تحديث group_by_channels_models لكل نموذج يستخدم دون قيود عدم عرض نتائج الخوارزمية.
attributions . attribution_shapley ()
attributions . group_by_channels_models
القنوات | confult_last_click_heuristic | confult_shapley_size4_conv_rate_algorithmic | |
---|---|---|---|
0 | مباشر | 109 | 74.926849 |
1 | التسويق عبر البريد الإلكتروني | 54 | 70.558428 |
2 | فيسبوك | 160 | 160.628945 |
3 | عرض جوجل | 65 | 110.649352 |
4 | بحث جوجل | 193 | 202.179519 |
5 | 64 | 72.982433 | |
6 | عضوي | 315 | 265.768549 |
7 | يوتيوب | 58 | 60.305925 |
تتصرف جميع النماذج المرحلية على نفس الوقت عند استخدام السمات .DATAFrame و .group_by_channels_models ، كما هو موضح من قبل ، وإرجاع جميع أساليب النموذج الإرشادي إلى سلسلة pandas .
attribution_first_click = attributions . attribution_first_click ()
السلسلة الأولى من tuple هي النتائج في رحلة تحبيرية ، على غرار المرصودة في سمة .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
والثاني يحتوي على النتائج مع قناة التفاصيل ، كما هو موضح في .group_by_channels_models سمة.
attribution_first_click [ 1 ]
القنوات | confult_first_click_heuristic | |
---|---|---|
0 | مباشر | 2078 |
1 | التسويق عبر البريد الإلكتروني | 1095 |
2 | فيسبوك | 3177 |
3 | عرض جوجل | 1066 |
4 | بحث جوجل | 4259 |
5 | 1007 | |
6 | عضوي | 6361 |
7 | يوتيوب | 1062 |
من بين جميع النماذج الموجودة في الكائن MAM ، لا تحتوي فقط على النقر الأول والنقر الأول والخطي على معلمات قابلة للتخصيص ولكن group_by_channels_models ، والتي لها قيمة منطقية عند تعيينها إلى خطأ ، فإن النموذج لا يرجع إلى الإسناد بواسطة القنوات.
تم إنشاؤه لتكرار السمة الافتراضية لـ Google Analytics ( آخر نقرة غير مباشرة ) حيث يتم كتابة حركة المرور المباشرة في حالة وجود مصدر محدد لحركة مرور محددة بخلاف توجيه نفسه في فترة زمنية معينة (6 أشهر افتراضيًا).
إذا لم يتم تحديدها ، يتم تعيين المعلمة but_not_this_channel على "مباشرة" ، ولكن يمكن ضبطها على أي قناة أخرى ذات أهمية للشركة.
attributions . attribution_last_click_non ( but_not_this_channel = 'Direct' )[ 1 ]
القنوات | confult_last_click_non_direct_heuristic | |
---|---|---|
0 | مباشر | 11 |
1 | التسويق عبر البريد الإلكتروني | 60 |
2 | فيسبوك | 172 |
3 | عرض جوجل | 69 |
4 | بحث جوجل | 224 |
5 | 67 | |
6 | عضوي | 350 |
7 | يوتيوب | 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 ]
القنوات | confult_position_based_0.3_0.3_0.4_heuristic | |
---|---|---|
0 | مباشر | 95.685085 |
1 | التسويق عبر البريد الإلكتروني | 57.617191 |
2 | فيسبوك | 145.817501 |
3 | عرض جوجل | 56.340693 |
4 | بحث جوجل | 193.282305 |
5 | 54.678557 | |
6 | عضوي | 288.148896 |
7 | يوتيوب | 55.629772 |
هناك نوعان من الإعدادات القابلة للتخصيص: معدل الانحلال ، throght المعلمة decay_over_time * ، والوقت (في الساعات) بين كل decaiment من خلال معلمة التردد .
ومع ذلك ، تجدر الإشارة إلى أنه في حالة وجود أكثر من نقطة اتصال بين فترات التردد ، سيتم توزيع قيمة التحويل بالتساوي بين هذه القنوات.
كمثال:
attributions . attribution_time_decay (
decay_over_time = 0.6 ,
frequency = 7 )[ 1 ]
القنوات | confult_time_decay0.6_freq7_heuristic | |
---|---|---|
0 | مباشر | 108.679538 |
1 | التسويق عبر البريد الإلكتروني | 54.425914 |
2 | فيسبوك | 159.592216 |
3 | عرض جوجل | 64.350107 |
4 | بحث جوجل | 192.838884 |
5 | 64.611414 | |
6 | عضوي | 314.920082 |
7 | يوتيوب | 58.581845 |
UPPON يجري استدعاء ، هذا النموذج يعيد tuple مع أربعة مكونات. أول اثنين (فهرسة 0 و 1) يشبهان النماذج الإرشادية ، مع تمثيل .DataFrame و .group_by_channels_models على التوالي. أما بالنسبة للمكونات الثالثة والرابعة (المفهرسة 2 و 3) ، فإن النتائج هي مصفوفة الانتقال وجدول تأثير الإزالة .
للبدء ، من الممكن الإشارة إلى ما إذا كانت تحولات الحالة نفسها قد تم اعتبارها أم لا ( على سبيل المثال مباشرة إلى المباشر).
attribution_markov = attributions . attribution_markov ( transition_to_same_state = False )
القنوات | confult_markov_algorithmic | |
---|---|---|
0 | مباشر | 2305.324362 |
1 | التسويق عبر البريد الإلكتروني | 1237.400774 |
2 | فيسبوك | 3273.918832 |
3 | يوتيوب | 1231.183938 |
4 | بحث جوجل | 4035.260685 |
5 | 1205.949095 | |
6 | عضوي | 5358.270644 |
7 | عرض جوجل | 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 )
يتم الحصول على تأثير الإزالة ، الناتج الرابع contentbult_markov ، من خلال نسبة الفرق بين احتمال التحويل بشكل عام والاحتمالية بمجرد إزالة القناة على الاحتمال العام مرة أخرى.
ax , fig = plt . subplots ( figsize = ( 2 , 5 ))
sns . heatmap ( attribution_markov [ 3 ]. round ( 3 ), cmap = "YlGnBu" , annot = True , linewidths = .5 )
أخيرًا ، نموذج الخوارزف الثاني لـ MAM الذي يأتي مفهومه من نظرية اللعبة . الهدف هنا هو توزيع مساهمة كل لاعب (في حالتنا ، القناة) في لعبة التعاون المحسوبة باستخدام مجموعات من الرحلات مع أو بدون قناة معينة.
يحدد حجم المعلمة الحد الأقصى لمدة طول سلسلة القنوات في كل رحلة. بشكل افتراضي ، يتم تعيين القيمة على 4 ، وهذا يعني فقط القنوات الأربع الأخيرة التي سبقت التحويل .
يمكن أن تختلف طريقة الحساب للمساهمات الهامشية لكل قناة مع معلمة الطلب . بشكل افتراضي ، يتم تعيينه على FALSE ، مما يعني أن المساهمة محسوبة تجاهل ترتيب كل قناة في الرحلات.
attributions . attribution_shapley ( size = 4 , order = True , values_col = 'conv_rate' )[ 0 ]
مجموعات | التحويلات | Total_sequences | conversion_value | conv_rate | confult_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> Google D ... | 1 | 1 | 1 | 1.000000 | [0.2563402919193473 ، 0.2345560799963515 ، 0.259 ... |
4 | مباشرة> تسويق البريد الإلكتروني> Facebook> Google S ... | 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.2544401477637237 ، 0.2541071889956603 ، 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.23576319444623868 ، 0.2610913781266248 ، 0.247 ... |
1282 | YouTube> Organic> Instagram> Google Search | 3 | 3 | 3 | 1.000000 | [0.7223482210689489 ، 0.7769049003203142 ، 0.726 ... |
أخيرًا ، المعلمة التي تشير إلى ما هو المقياس المستخدم لحساب قيمة Shapley هي القيم _col ، والتي يتم تعيينها بشكل افتراضي على معدل التحويل . في القيام بذلك ، يتم أخذ الرحلات بدون تحويلات إلى حد ما.
ومع ذلك ، من الممكن التفكير في التحويلات الحرفية فقط عند استخدام النموذج كما هو موضح أدناه.
attributions . attribution_shapley ( size = 3 , order = False , values_col = 'conversions' )[ 0 ]
مجموعات | التحويلات | Total_sequences | conversion_value | conv_rate | confult_shapley_size3_conversions_algorithmic | |
---|---|---|---|---|---|---|
0 | مباشر | 11 | 18 | 18 | 0.611111 | [11.0] |
1 | مباشرة> التسويق عبر البريد الإلكتروني | 4 | 5 | 5 | 0.800000 | [2.0 ، 2.0] |
2 | مباشرة> التسويق عبر البريد الإلكتروني> بحث Google | 1 | 2 | 2 | 0.500000 | [-3.1666666666666665 ، -7.66666666666666 ، 11.8 ... |
3 | مباشرة> التسويق عبر البريد الإلكتروني> العضوية | 4 | 6 | 6 | 0.666667 | [-7.833333333333333 ، -10.833333333333332 ، 22.6 ... |
4 | مباشر> Facebook | 3 | 4 | 4 | 0.750000 | [-8.5 ، 11.5] |
... | ... | ... | ... | ... | ... | ... |
75 | Instagram> Organic> YouTube | 46 | 123 | 123 | 0.373984 | [5.833333333333332 ، 34.33333333333333 ، 5.83333 ... |
76 | Instagram> YouTube | 2 | 4 | 4 | 0.500000 | [2.0 ، 0.0] |
77 | عضوي | 64 | 92 | 92 | 0.695652 | [64.0] |
78 | العضوية> يوتيوب | 8 | 11 | 11 | 0.727273 | [30.5 ، -22.5] |
79 | يوتيوب | 11 | 15 | 15 | 0.733333 | [11.0] |
بعد الحصول على كل إسناد من نماذج مختلفة مخزنة في كائن .group_by_channels_models ، يمكن رسم النتائج ومقارنة النتائج
attributions . plot ()
في حال كنت مهتمًا فقط بالنماذج الخوارزمية ، يمكن أن يحددني ذلك في معلمة Model_type .
attributions . plot ( model_type = 'algorithmic' )