Closed
Bug 1232777
Opened 9 years ago
Closed 9 years ago
Investigate using Adjust to correlate A/B experiments with retention and engagement
Categories
(Firefox for Android Graveyard :: General, defect)
Tracking
(Not tracked)
RESOLVED
WONTFIX
People
(Reporter: Margaret, Assigned: mcomella)
References
Details
Right now we use FHR for this, but FHR is going away.
https://docs.adjust.com/en/tracker-generation/#segmenting-users-dynamically-with-campaign-structure-parameters
Assignee | ||
Comment 1•9 years ago
|
||
It looks like we use FHR to do this by adding the experiment to our list of addons as a dummy add-on [1].
[1]: https://dxr.mozilla.org/mozilla-central/rev/cb66ffeb6725e8344818e8e2f707ae2eaeb953b4/mobile/android/base/java/org/mozilla/gecko/health/BrowserHealthRecorder.java#647
Comment 2•9 years ago
|
||
(In reply to Michael Comella (:mcomella) from comment #1)
> It looks like we use FHR to do this by adding the experiment to our list of
> addons as a dummy add-on [1].
>
> [1]:
> https://dxr.mozilla.org/mozilla-central/rev/
> cb66ffeb6725e8344818e8e2f707ae2eaeb953b4/mobile/android/base/java/org/
> mozilla/gecko/health/BrowserHealthRecorder.java#647
Yep and this is going away.
Assignee | ||
Comment 3•9 years ago
|
||
re the link in comment 0, it looks like we have four levels of hierarchy for Adjust urls:
Network
Campaign
Adgroup
Creative
Network is the only attribute that must be created manually on the website, so this likely won't work for us. Which remaining level we want to use is up to the way we currently structure our data and how we want our A/B testing to be involved in this. I'm assuming we'll want to see all the installs for a particular ad group of a campaign no matter which A/B test the user is on, so I'd take it we'd want to use the Creative level.
It seems that each level is defined as a single String so if we were to use it, we'd have to prefix/affix the experiment to the Creative String. However, this further divides the Creative value, so it may make it difficult (e.g. analyzer needs to click two boxes for the dashboard) or impossible (previously mentioned feature does not exist) for an analyzer to use the Creative field for whatever purpose it's being used for now.
Finkle, do you know what's going on with the current use of these values or who I should ask?
Note: I'm still unclear where these urls are created and how we could modify them.
Flags: needinfo?(mark.finkle)
Comment 4•9 years ago
|
||
Yeah, I have no idea how to use these strings yet. We asked Adjust to give us some additional hints. We could also try to play in the Adjust sandbox mode and see what gets sent from a local build.
Bug 1215366 has links to some protected CSV files
Flags: needinfo?(mark.finkle)
Comment 5•9 years ago
|
||
Here is the type of hierarchy I could see us using it:
Network = "android_ab_tests"
Campaign = "2015-12-16_onboarding"
Adgroup = "control" / "version_a" / "version_b" / "version_c"
creative = (optional)
I setup the email marketing team in a similar fashion so that they could track generated installs. We log all engagement and product marketing URL hierarchy here: https://docs.google.com/spreadsheets/d/151_fWwEPxmPN_AbHCp-sqAkshDCLaABRrVaowxoFS10/edit#gid=0
In our case, all our tests fall under their own "network" isolated from all the campaign data. We can easily see all variations (adgroup) within a test (campaign). For the most part, I think "creative" is not needed.
The URLs can be made on the fly. No need to add them within Adjust. As soon as we pass URLs with new parameters, Adjust saves them as is.
I hope this helps.
Comment 6•9 years ago
|
||
I have one small concern. (which might be nothing)
Are we sure that we won't be overwriting campaign data that might already be tracked via a paid install?
Or will Adjust track our real campaign AND our fake A/B test campaign.
Assignee | ||
Comment 7•9 years ago
|
||
(In reply to Alex Davis [:adavis] from comment #6)
> Are we sure that we won't be overwriting campaign data that might already be
> tracked via a paid install?
> Or will Adjust track our real campaign AND our fake A/B test campaign.
Shucks – I was just about to ask the same question! I suppose we can test this in the sandbox.
To add a bit of clarifying info, with Alex's scheme in comment 5, I interpreted that users would send one referrer url for the ad campaign data and one for the A/B test data. (My scheme in comment 3 was assuming we could not send multiple referrer urls)
Assignee: nobody → michael.l.comella
Assignee | ||
Comment 8•9 years ago
|
||
The SDK readme on github does not indicate how to set these values, however, the documentation implies the there can only be one "attribution" (or referrer uri) per install (item 15):
You can register a listener to be notified of tracker attribution changes. [ed: Okay, "changes", plural, but we're contradicted later]
The listener function will be called when the SDK receives the final attribution information. [ed: final attribution information] Within the listener function you have access to the attribution parameter. Here is a quick summary of its properties:
String trackerToken the tracker token of the current install.
---
Note that is *the* tracker token of the current install.
Later, at [1]:
If you use this facility, please note that in-app attribution data access is designed to forward the data to you, in a similar manner as server-to-server callbacks.
---
My interpretation is that these values are set via the web SDK (I'm assuming there is one), stored on their servers, and unchangeable via the Android application itself.
Finkle, does this seem plausible? I'll dig into the source to see if I can find out anything else useful.
If we were stuck with this setup, we could add a randomly generated ID to the "Creative" field (or maybe telemetry, somewhere) and clients can bucket themselves via a local algorithm. It's not as good as the existing solution, as I understand it, but it could work...
[1]: https://github.com/adjust/sdks/blob/master/doc/attribution-data.md
Flags: needinfo?(mark.finkle)
Assignee | ||
Comment 9•9 years ago
|
||
Oh, or maybe the dashboards can give us enough info with these `AdjustEvent`s.
Comment 10•9 years ago
|
||
It seems like this path is leading us into the Weeds™️. Let's put a pause on this route and see if we can find a different approach. Bug 1205835 might be the simplest, easiest way forward for getting retention and experiments. Yes, it might take some time to get it going, but it doesn't make sense to create an awful hack with Adjust.
Flags: needinfo?(mark.finkle)
Assignee | ||
Comment 11•9 years ago
|
||
We spoke during the front-end team meeting – I'm going to look into these `AdjustEvent`s now that I have access to the sandbox dashboard and can determine if we can link those with retention data. If that doesn't pan out, I'll work on implementing Telemetry.
Assignee | ||
Comment 12•9 years ago
|
||
I got close – I can seemingly filter the dashboard by "Users that triggered" custom `AdjustEvent`s but when I do so, the "Retained Users" field changes to "Converted Users" and I'm not quite sure what that means. I sent an email to adjust support to clarify and see if:
* We can get "Retained Users" w/ these custom `AdjustEvent`s
* If not, to find out what the "Converted Users" field is and if it's is sufficient for retention
* To get an example of what this dashboard looks like (since we don't have custom events, we have no data, and the dashboard is not shown. This dashboard does not work in sandbox mode)
* Any alternative ways they might suggest implementing this.
I thought of another other approach with Adjust's attribution/event callbacks but it seems inferior to writing our own Telemetry uploader. This approach was to use the callbacks to send the Android application a callback when the retention event is fired (if there is such an event). In this callback, we could add in our A/B test buckets, forward the data to our own servers and create our own dashboard. However, there are some unknowns – if the callback does not complete (e.g. user closes the application), does Adjust resend the ping? afaik these events are not synchronous – how long is it before Adjust sends the ping?
Given the unknowns and the fact that this implementation would require us to contact our own servers, it'd probably be easier to write the simple Telemetry uploader and free ourselves from the Adjust dependency. This is especially true given we've (afaik) already created the Telemetry protoctols and have the infrastructure to process the output.
Reporter | ||
Comment 13•9 years ago
|
||
(In reply to Michael Comella (:mcomella) from comment #12)
> I got close – I can seemingly filter the dashboard by "Users that triggered"
> custom `AdjustEvent`s but when I do so, the "Retained Users" field changes
> to "Converted Users" and I'm not quite sure what that means. I sent an email
> to adjust support to clarify and see if:
> * We can get "Retained Users" w/ these custom `AdjustEvent`s
> * If not, to find out what the "Converted Users" field is and if it's is
> sufficient for retention
> * To get an example of what this dashboard looks like (since we don't have
> custom events, we have no data, and the dashboard is not shown. This
> dashboard does not work in sandbox mode)
> * Any alternative ways they might suggest implementing this.
>
> I thought of another other approach with Adjust's attribution/event
> callbacks but it seems inferior to writing our own Telemetry uploader. This
> approach was to use the callbacks to send the Android application a callback
> when the retention event is fired (if there is such an event). In this
> callback, we could add in our A/B test buckets, forward the data to our own
> servers and create our own dashboard. However, there are some unknowns – if
> the callback does not complete (e.g. user closes the application), does
> Adjust resend the ping? afaik these events are not synchronous – how long is
> it before Adjust sends the ping?
>
> Given the unknowns and the fact that this implementation would require us to
> contact our own servers, it'd probably be easier to write the simple
> Telemetry uploader and free ourselves from the Adjust dependency. This is
> especially true given we've (afaik) already created the Telemetry protoctols
> and have the infrastructure to process the output.
Yes, uploading pings that are processed by the existing telemetry pipeline would be easier to handle from the server side.
Using Adjust for A/B testing seemed like a nice option if we could get it mostly for free, but it sounds like we can't, so I think we should move forward with building our own telemetry uploader. The structure of these pings can be really simple to start, so this shouldn't be too hard. Or rather, the challenges will be in just doing the work to implement it, rather than conceptual challenges trying to understand a system we don't control.
Assignee | ||
Comment 14•9 years ago
|
||
We're moving forward with telemetry (bug 1205835) which will later include A/B testing experiments.
Assignee | ||
Updated•9 years ago
|
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → WONTFIX
Updated•4 years ago
|
Product: Firefox for Android → Firefox for Android Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•