4

我有一个Activity, 有多个Fragments ViewPager

目前,这是我将屏幕视图事件发送到 Google Analytics 和 Firebase 的方式


public static void trackView(Activity activity, String view) {
    trackFBView(activity, view);
    trackGAView(view);
}

private static void trackFBView(Activity activity, String view) {
    if (activity == null) {
        return;
    }

    FirebaseAnalytics firebaseAnalytics = getFirebaseAnalytics();
    if (firebaseAnalytics == null) {
        return;
    }

    firebaseAnalytics.setCurrentScreen(activity, view, null);
}

private static void trackGAView(String view) {
    Tracker tracker = Utils.getTracker();
    if (tracker == null) {
        return;
    }
    tracker.setScreenName(view);
    tracker.send(new HitBuilders.ScreenViewBuilder().build());
}

public static FirebaseAnalytics getFirebaseAnalytics() {
    if (false == isGooglePlayServicesAvailable()) {
        return null;
    }

    return FirebaseAnalytics.getInstance(JStockApplication.instance());
}

在我ViewPager的监听器中,这就是我发送屏幕视图事件的方式。

private ViewPager.OnPageChangeListener getOnPageChangeListener() {
    return new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {

            if (position == 0) {
                Utils.trackView(DetailedStockFragmentActivity.this, "InfoFragment");

经过一些测试,我意识到我确实在 GA 中收到了屏幕视图事件,但在 Firebase 中没有。

后来,我意识到firebaseAnalytics.setCurrentScreen实际上并没有向 Firebase 发送屏幕视图事件。firebaseAnalytics.setCurrentScreen只需准备一个隐式参数。它只会在下一个事件期间发送到 Firebase。

目前,在我的片段中,我没有明确触发任何事件。

我想知道,为了帮助 Firebase 做出更好的预测(帮助 Firebase 识别用户查看哪个屏幕),我想知道,我应该如下明确发送“屏幕视图”事件吗?

private static void trackFBView(Activity activity, String view) {
    if (activity == null) {
        return;
    }

    FirebaseAnalytics firebaseAnalytics = getFirebaseAnalytics();
    if (firebaseAnalytics == null) {
        return;
    }

    firebaseAnalytics.setCurrentScreen(activity, view, null);

    // Question: Should I do this to help Firebase makes better prediction?
    firebaseAnalytics.logEvent(view + "_ScreenView", null);
}
4

1 回答 1

4

我认为这里有一些误解。

首先,正如您所注意到的,setCurrentScreen创建一个自动附加到 future events的参数。事件是唯一发送到 Firebase 并附加参数的东西——参数只能与事件相关。“屏幕参数”比普通参数更特殊一点,因为它们出现在崩溃报告日志中,您可以更轻松地使用它们来创建受众。这个答案总结了我刚才所说的很好。

第二个误解是关于 Firebase 预测的工作原理。截至今天的预测只能对事件进行。也就是说,如果您创建自定义预测,它不会使用任何参数,并且只能预测用户是否会执行操作(事件)。

对于您的情况,我需要更多地了解您要做什么。如果您正在寻找用户参与度,那么“流失”预测已经包含了这一点。(不,记录分析事件不会影响预测,因为它基于全局“用户是否在使用这个应用程序”的想法。)另一方面,如果你想知道是否用户正在使用您应用程序的一部分,那么您将创建一个自定义事件,例如select_stock并使用预测来猜测用户是否会查看股票。我喜欢将预测或 A/B 测试视为用于衡量参与度或正在执行的特定操作的增加。

作为一般的经验法则,您应该在您的应用程序中加入用户操作,而不是被动观看。例如,您可以针对用户选择股票、收藏、分享、搜索股票等进行操作。然后,在预测或 A/B 测试中,您可以看到所做的更改如何影响用户整体参与的特定部分——“用户做的 X 多还是少?”

TL;DR:不,记录事件不会影响流失预测,因为它们是一般性的,“这个应用程序预计会在接下来的 7 天内使用吗?” 但是,您可能会尝试确定用户是否将执行或多或少的某个操作,然后记录一个事件以用于预测或 A/B 测试。

有关预定义预测的信息、使用预测功能的概述以及如何使用预测的完整示例的谈话。

编辑,回答评论:

我想先说我不是 Firebase 工程师,我怀疑 Google 员工会与你分享他们的商业机密,所以我主要是在这里猜测。我将使用结帐示例,因为这是我能想到的最简单的示例。

好的,要尝试理解预测,我们需要先了解一点机器学习。如果您考虑一下,ML 模型有点愚蠢:它们只是试图将一组输入映射到一些输出数字(概率)。由于 Predictions 不接受事件参数,我猜想 Google 会提供给定用户会话期间发生的分析事件序列。AFAIK,将输入提供给 ML 模型的顺序无关紧要,因此不会考虑事件发生的顺序(Google 可能已经想出了解决方法,不知道)。

有了我们对 ML 模型的假设,我们可以回到我们的结帐示例。基本上,我认为您实际上只会通过跟踪用户访问的屏幕来误导或至少记录无意义的事件。假设用户浏览了“购物车”、“输入您的地址”和“结帐”屏幕。在这种情况下,该模型将自我训练以查看这些事件集与购买高度相关。

你可能会想,“嗯,那太好了!” 不是那么快,这种预测是没有用的,因为它实际上并没有预测任何东西。它只是说,“哦,看,进入结账屏幕的用户通常会购买东西。” 我认为在这种情况下,记录屏幕事件实际上会使您的预测变得更糟:假设用户访问了结帐屏幕,但随后因为害怕给您信用卡或其他东西而离开。模型会想,“他们访问了那个屏幕,所以他们完全会买东西”,但这是错误的。

不,另一方面,对我来说,我之前提到的记录用户操作会更有用。例如,可以使用item_added_to_card事件数量来训练更准确的预测,以实际预测事物。用户添加到购物车中的商品越多,他们购买商品的意愿就越大。

同样,我对您的应用了解不多,但记录点击事件以查看详细的文章窗格、喜欢文章或分享文章,在我看来,它们可以提供比简单查看文章窗格更多的见解。但是,我认为这取决于您拥有什么样的用户行为。如果您购买了东西的大多数用户也在文章屏幕上花费了大量时间,那么是的,我不明白记录事件会带来多大的伤害。

我想表达的一般观点是,我认为预测在衡量用户参与度的事件上会做得更好。因此,被动收视率可能会起作用,但如果某些用户只想保持该屏幕打开,或者文章视图甚至是您的默认选项卡怎么办?然后它并没有真正为模型提供任何新信息,因为几乎所有用户都会通过该屏幕。我的经验法则是,“如果用户点击它,就记录它。” 然后,您肯定会为 ML 模型获得大量分析事件来查找模式,例如点击查看文章的用户更有可能购买东西。

PS:逆向工程这种模型很难,我的假设可能完全错误。

于 2017-12-30T05:04:10.483 回答