Rule-based Attribution:Data Input

The raw data is just an stimulation data set. when you are working on a real-world attribution problem from scratch often data will be much messier than this(depending on your data source - I’ve worked on a project that took me 2 months to understand the table schema). But this schema is where you want to arrive at after data preprocessing. User-ID/Path-ID, Time-Stamp, Channel, Conversion Indicator.

1). User-ID/Path-ID: It is important to keep in mind that attribution analysis can and can only done at User/Path level. If somebody hands you say, campaign level data and asks you to build an attribution model, you should let him/her now right away that it is impossible. Here I put User-ID and Path-ID, again depending on your business type(whether it is likely that a user will convert again in short time frame and if so how you would like to treat it), user-id and path-id can be identical or not.

2). Time-Stamp: time-stamp annotates the time of interaction. often you will be given machine generated timestamps but the only thing we care in this analysis is the ordinal value of timestamp rather than timestamp itself.

3). Channel: When I say channel, I refer to any level of granularities you’d like to attribute to. It can be marketing channels(Search,Display, Email..), or it can be sub-programs that live underneath these channels. Please always keep in mind, as you get more granular, data sparsity as well as computation complexity might become an issue.

4). Conversion Indicator: as its name implies, conversion Indicator indicates weather a ueser convert/a path leads to conversion.Depending on your KPIs, conversion can be purchases, subscriptions, lead form submissions, etc.

data <- read.csv("attribution_raw.csv",stringsAsFactors = FALSE)

Code

The code is very straight-forward, I will walk you through line-by-line:

Last Touch Attribution attributes credit of conversion to the last touchpoint customers have with our marketing channel.And in our model, Search gets most of the credit - which makes sense now that Search is a very typical lower funnel tactic. By using this attribution model, we are affirming the Response Generation channels.

First touch attribution, on the contrary, attributes conversion to the very first interaction customers have with our marketing channels. Here we see that display, previously assigned value of 0 in last touch attribution, now sees 2, as Display has some upper funnel tactic that helps generate awareness.

Lastly, Linear attribution is a simple average accross all channels that customers have interacted with.

Implication and Limitations

Rule-based attribution is very intuitive and easy to implement, you can even do the calculation in excel(you can also find the excel approach in my blog.). the low level of investment makes it a good starting point for us to gain some rudimentary understanding of channel relationship before we dive into more advanced attributions. For example, we can tell what are the tactics that successfully generated awareness and consideration in the upper funnel that later transition into conversion; what are the tactics that captures lower funnel conversions. etc. But the limitations of rule-based attribution are evident as well:

1). The credit-assignment is very arbitary. One can argue depending on his/her interest in it, that Awareness Generation is more important so First Touch Attribution should be used; which in turn, can be easily counter-argued by someone who regards response generation more valuable.

2). All paths that result in churn will be attributed value 0. This is equating throwing these data out, which most of time takes up a big chunk of the total data amount. by doing so, we run up to the risk of producing biased result.

In order to counter those limitations, advanced methods are applied to attribution challenges. In my next post, I will talk about one of advanced algorithms: Markov Chain.

LS0tDQp0aXRsZTogJ0Jhc2ljIEF0dHJpYnV0aW9uOiBSdWxlLWJhc2VkIEF0dHJpYnV0aW9uJw0KYXV0aG9yOiAiRGF0YSBOaW5qYSAtIFJpbmEgTGluIg0KZGF0ZTogIkphbnVhcnkgMTQsIDIwMTgiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQojIyBSdWxlLWJhc2VkIEF0dHJpYnV0aW9uOkRhdGEgSW5wdXQNCg0KVGhlIHJhdyBkYXRhIGlzIGp1c3QgYW4gc3RpbXVsYXRpb24gZGF0YSBzZXQuIHdoZW4geW91IGFyZSB3b3JraW5nIG9uIGEgcmVhbC13b3JsZCBhdHRyaWJ1dGlvbiBwcm9ibGVtIGZyb20gc2NyYXRjaCBvZnRlbiBkYXRhIHdpbGwgYmUgbXVjaCBtZXNzaWVyIHRoYW4gdGhpcyhkZXBlbmRpbmcgb24geW91ciBkYXRhIHNvdXJjZSAtIEkndmUgd29ya2VkIG9uIGEgcHJvamVjdCB0aGF0IHRvb2sgbWUgMiBtb250aHMgdG8gdW5kZXJzdGFuZCB0aGUgdGFibGUgc2NoZW1hKS4gQnV0IHRoaXMgc2NoZW1hIGlzIHdoZXJlIHlvdSB3YW50IHRvIGFycml2ZSBhdCBhZnRlciBkYXRhIHByZXByb2Nlc3NpbmcuIDxiPlVzZXItSUQvUGF0aC1JRCwgVGltZS1TdGFtcCwgQ2hhbm5lbCwgQ29udmVyc2lvbiBJbmRpY2F0b3I8L2I+Lg0KDQoxKS4gVXNlci1JRC9QYXRoLUlEOiBJdCBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYXR0cmlidXRpb24gYW5hbHlzaXMgY2FuIGFuZCBjYW4gb25seSBkb25lIGF0IFVzZXIvUGF0aCBsZXZlbC4gSWYgc29tZWJvZHkgaGFuZHMgeW91IHNheSwgY2FtcGFpZ24gbGV2ZWwgZGF0YSBhbmQgYXNrcyB5b3UgdG8gYnVpbGQgYW4gYXR0cmlidXRpb24gbW9kZWwsIHlvdSBzaG91bGQgbGV0IGhpbS9oZXIgbm93IHJpZ2h0IGF3YXkgdGhhdCBpdCBpcyBpbXBvc3NpYmxlLiBIZXJlIEkgcHV0IFVzZXItSUQgYW5kIFBhdGgtSUQsIGFnYWluIGRlcGVuZGluZyBvbiB5b3VyIGJ1c2luZXNzIHR5cGUod2hldGhlciBpdCBpcyBsaWtlbHkgdGhhdCBhIHVzZXIgd2lsbCBjb252ZXJ0IGFnYWluIGluIHNob3J0IHRpbWUgZnJhbWUgYW5kIGlmIHNvIGhvdyB5b3Ugd291bGQgbGlrZSB0byB0cmVhdCBpdCksIHVzZXItaWQgYW5kIHBhdGgtaWQgY2FuIGJlIGlkZW50aWNhbCBvciBub3QuDQoNCjIpLiBUaW1lLVN0YW1wOiB0aW1lLXN0YW1wIGFubm90YXRlcyB0aGUgdGltZSBvZiBpbnRlcmFjdGlvbi4gb2Z0ZW4geW91IHdpbGwgYmUgZ2l2ZW4gbWFjaGluZSBnZW5lcmF0ZWQgdGltZXN0YW1wcyBidXQgdGhlIG9ubHkgdGhpbmcgd2UgY2FyZSBpbiB0aGlzIGFuYWx5c2lzIGlzIHRoZSBvcmRpbmFsIHZhbHVlIG9mIHRpbWVzdGFtcCByYXRoZXIgdGhhbiB0aW1lc3RhbXAgaXRzZWxmLg0KDQozKS4gQ2hhbm5lbDogV2hlbiBJIHNheSBjaGFubmVsLCBJIHJlZmVyIHRvIGFueSBsZXZlbCBvZiBncmFudWxhcml0aWVzIHlvdSdkIGxpa2UgdG8gYXR0cmlidXRlIHRvLiBJdCBjYW4gYmUgbWFya2V0aW5nIGNoYW5uZWxzKFNlYXJjaCxEaXNwbGF5LCBFbWFpbC4uKSwgb3IgaXQgY2FuIGJlIHN1Yi1wcm9ncmFtcyB0aGF0IGxpdmUgdW5kZXJuZWF0aCB0aGVzZSBjaGFubmVscy4gUGxlYXNlIGFsd2F5cyBrZWVwIGluIG1pbmQsIGFzIHlvdSBnZXQgbW9yZSBncmFudWxhciwgZGF0YSBzcGFyc2l0eSBhcyB3ZWxsIGFzIGNvbXB1dGF0aW9uIGNvbXBsZXhpdHkgbWlnaHQgYmVjb21lIGFuIGlzc3VlLiANCg0KNCkuIENvbnZlcnNpb24gSW5kaWNhdG9yOiBhcyBpdHMgbmFtZSBpbXBsaWVzLCBjb252ZXJzaW9uIEluZGljYXRvciBpbmRpY2F0ZXMgd2VhdGhlciBhIHVlc2VyIGNvbnZlcnQvYSBwYXRoIGxlYWRzIHRvIGNvbnZlcnNpb24uRGVwZW5kaW5nIG9uIHlvdXIgS1BJcywgY29udmVyc2lvbiBjYW4gYmUgcHVyY2hhc2VzLCBzdWJzY3JpcHRpb25zLCBsZWFkIGZvcm0gc3VibWlzc2lvbnMsIGV0Yy4NCg0KDQoNCmBgYHtyIGNhcnN9DQpsaWJyYXJ5KGRwbHlyKQ0KZGF0YSA8LSByZWFkLmNzdigiYXR0cmlidXRpb25fcmF3LmNzdiIsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQ0KYGBgDQoNCiNDb2RlDQoNClRoZSBjb2RlIGlzIHZlcnkgc3RyYWlnaHQtZm9yd2FyZCwgSSB3aWxsIHdhbGsgeW91IHRocm91Z2ggbGluZS1ieS1saW5lOg0KDQpgYGB7ciBwcmVzc3VyZSwgZWNobz1GQUxTRX0NCmRhdGEgJT4lDQogIGxlZnRfam9pbihkYXRhICU+JQ0KICBncm91cF9ieShQYXRoLklEKSAlPiUNCiAgc3VtbWFyaXNlX2F0KCJUaW1lLlN0YW1wIixmdW5zKG1heCxtaW4sbGVuZ3RoKSksYnkgPSAiUGF0aC5JRCIpICU+JSAjaGVyZSB3ZSBhcmUgZmluZGluZyB0aGUgdGltZSBvZiBmaXJzdCBpbnRlcmFjdGlvbiwgdGhlIHRpbWUgb2YgbGFzdCBpbnRlcmFjdGlvbiwgYW5kIG51bWJlciBvZiBpbnRlcmFjdGlvbnMgcmVzcGVjdGl2ZWx5Lg0KICB1bmdyb3VwKCkgJT4lDQogIG11dGF0ZShGaXJzdC5Ub3VjaC5BdHRyaWJ1dGlvbiA9IGlmZWxzZShUaW1lLlN0YW1wID09IG1pbixDb252ZXJzaW9uLDApLCAjaWYgdGhpcyBpbnRlcmFjdGlvbiBpcyBmaXJzdCBpbnRlcmFjdGlvbiwgYWxpZ24gYWxsIGNyZWRpdCB0byBpdDsNCiAgICAgICAgIExhc3QuVG91Y2guQXR0cmlidXRpb24gPSBpZmVsc2UoVGltZS5TdGFtcCA9PSBtYXgsQ29udmVyc2lvbiwwKSwgIyBpZiB0aGlzIGludGVyYWN0aW9uIGlzIGxhc3QgaW50ZXJhY3Rpb24sIGFsaWduIGFsbCBjcmVkaXQgdG8gaXQ7DQogICAgICAgICBMaW5lYXIuQXR0cmlidXRpb24gPSBDb252ZXJzaW9uL2xlbmd0aCkgJT4lICNhbGlnbiBjcmVkaXQgdG8gYWxsIHRvdWNoIHBvaW50IGV2ZW5seQ0KICBncm91cF9ieShDaGFubmVsKSAlPiUNCiAgc3VtbWFyaXNlX2F0KGMoIkZpcnN0LlRvdWNoLkF0dHJpYnV0aW9uIiwiTGFzdC5Ub3VjaC5BdHRyaWJ1dGlvbiIsIkxpbmVhci5BdHRyaWJ1dGlvbiIpLGZ1bnMoc3VtKSkgJT4lDQogIHVuZ3JvdXAoKQ0KICANCmBgYA0KDQpMYXN0IFRvdWNoIEF0dHJpYnV0aW9uIGF0dHJpYnV0ZXMgY3JlZGl0IG9mIGNvbnZlcnNpb24gdG8gdGhlIGxhc3QgdG91Y2hwb2ludCBjdXN0b21lcnMgaGF2ZSB3aXRoIG91ciBtYXJrZXRpbmcgY2hhbm5lbC5BbmQgaW4gb3VyIG1vZGVsLCBTZWFyY2ggZ2V0cyBtb3N0IG9mIHRoZSBjcmVkaXQgLSB3aGljaCBtYWtlcyBzZW5zZSBub3cgdGhhdCBTZWFyY2ggaXMgYSB2ZXJ5IHR5cGljYWwgbG93ZXIgZnVubmVsIHRhY3RpYy4gQnkgdXNpbmcgdGhpcyBhdHRyaWJ1dGlvbiBtb2RlbCwgd2UgYXJlIGFmZmlybWluZyB0aGUgPGI+UmVzcG9uc2UgR2VuZXJhdGlvbjwvYj4gY2hhbm5lbHMuDQoNCkZpcnN0IHRvdWNoIGF0dHJpYnV0aW9uLCBvbiB0aGUgY29udHJhcnksIGF0dHJpYnV0ZXMgY29udmVyc2lvbiB0byB0aGUgdmVyeSBmaXJzdCBpbnRlcmFjdGlvbiBjdXN0b21lcnMgaGF2ZSB3aXRoIG91ciBtYXJrZXRpbmcgY2hhbm5lbHMuIEhlcmUgd2Ugc2VlIHRoYXQgZGlzcGxheSwgcHJldmlvdXNseSBhc3NpZ25lZCB2YWx1ZSBvZiAwIGluIGxhc3QgdG91Y2ggYXR0cmlidXRpb24sIG5vdyBzZWVzIDIsIGFzIERpc3BsYXkgaGFzIHNvbWUgdXBwZXIgZnVubmVsIHRhY3RpYyB0aGF0IGhlbHBzIDxiPmdlbmVyYXRlIGF3YXJlbmVzczwvYj4uDQoNCkxhc3RseSwgTGluZWFyIGF0dHJpYnV0aW9uIGlzIGEgc2ltcGxlIGF2ZXJhZ2UgYWNjcm9zcyBhbGwgY2hhbm5lbHMgdGhhdCBjdXN0b21lcnMgaGF2ZSBpbnRlcmFjdGVkIHdpdGguDQoNCiNJbXBsaWNhdGlvbiBhbmQgTGltaXRhdGlvbnMgDQoNClJ1bGUtYmFzZWQgYXR0cmlidXRpb24gaXMgdmVyeSBpbnR1aXRpdmUgYW5kIGVhc3kgdG8gaW1wbGVtZW50LCB5b3UgY2FuIGV2ZW4gZG8gdGhlIGNhbGN1bGF0aW9uIGluIGV4Y2VsKHlvdSBjYW4gYWxzbyBmaW5kIHRoZSBleGNlbCBhcHByb2FjaCBpbiBteSBibG9nLikuIHRoZSBsb3cgbGV2ZWwgb2YgaW52ZXN0bWVudCBtYWtlcyBpdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVzIHRvIGdhaW4gc29tZSBydWRpbWVudGFyeSB1bmRlcnN0YW5kaW5nIG9mIGNoYW5uZWwgcmVsYXRpb25zaGlwIGJlZm9yZSB3ZSBkaXZlIGludG8gbW9yZSBhZHZhbmNlZCBhdHRyaWJ1dGlvbnMuIEZvciBleGFtcGxlLCB3ZSBjYW4gdGVsbCB3aGF0IGFyZSB0aGUgdGFjdGljcyB0aGF0IHN1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgYXdhcmVuZXNzIGFuZCBjb25zaWRlcmF0aW9uIGluIHRoZSB1cHBlciBmdW5uZWwgdGhhdCBsYXRlciB0cmFuc2l0aW9uIGludG8gY29udmVyc2lvbjsgd2hhdCBhcmUgdGhlIHRhY3RpY3MgdGhhdCBjYXB0dXJlcyBsb3dlciBmdW5uZWwgY29udmVyc2lvbnMuIGV0Yy4gQnV0IHRoZSBsaW1pdGF0aW9ucyBvZiBydWxlLWJhc2VkIGF0dHJpYnV0aW9uIGFyZSBldmlkZW50IGFzIHdlbGw6IA0KDQoxKS4gVGhlIGNyZWRpdC1hc3NpZ25tZW50IGlzIHZlcnkgYXJiaXRhcnkuIE9uZSBjYW4gYXJndWUgZGVwZW5kaW5nIG9uIGhpcy9oZXIgaW50ZXJlc3QgaW4gaXQsIHRoYXQgQXdhcmVuZXNzIEdlbmVyYXRpb24gaXMgbW9yZSBpbXBvcnRhbnQgc28gRmlyc3QgVG91Y2ggQXR0cmlidXRpb24gc2hvdWxkIGJlIHVzZWQ7IHdoaWNoIGluIHR1cm4sIGNhbiBiZSBlYXNpbHkgY291bnRlci1hcmd1ZWQgYnkgc29tZW9uZSB3aG8gcmVnYXJkcyByZXNwb25zZSBnZW5lcmF0aW9uIG1vcmUgdmFsdWFibGUuDQoNCjIpLiBBbGwgcGF0aHMgdGhhdCByZXN1bHQgaW4gY2h1cm4gd2lsbCBiZSBhdHRyaWJ1dGVkIHZhbHVlIDAuIFRoaXMgaXMgZXF1YXRpbmcgdGhyb3dpbmcgdGhlc2UgZGF0YSBvdXQsIHdoaWNoIG1vc3Qgb2YgdGltZSB0YWtlcyB1cCBhIGJpZyBjaHVuayBvZiB0aGUgdG90YWwgZGF0YSBhbW91bnQuIGJ5IGRvaW5nIHNvLCB3ZSBydW4gdXAgdG8gdGhlIHJpc2sgb2YgcHJvZHVjaW5nIGJpYXNlZCByZXN1bHQuDQoNCkluIG9yZGVyIHRvIGNvdW50ZXIgdGhvc2UgbGltaXRhdGlvbnMsIGFkdmFuY2VkIG1ldGhvZHMgYXJlIGFwcGxpZWQgdG8gYXR0cmlidXRpb24gY2hhbGxlbmdlcy4gSW4gbXkgbmV4dCBwb3N0LCBJIHdpbGwgdGFsayBhYm91dCBvbmUgb2YgYWR2YW5jZWQgYWxnb3JpdGhtczogTWFya292IENoYWluLg0KDQoNCg==