如何发送屏幕视图事件,以帮助Firebase预测做出更准确的预测

时间:2017-12-27 14:26:20

标签: java android firebase firebase-analytics firebase-predictions

我有一个ActivityFragment中有多个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识别用户查看哪个屏幕),我想知道,我应该发送" Screen 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);

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

1 个答案:

答案 0 :(得分:4)

我认为这里有一些误解。

首先,正如您所注意到的那样,setCurrentScreen会创建一个参数,该参数会自动附加到未来的事件。事件是发送到Firebase的唯一内容并且附加了参数 - 参数只能与事件相关。 "屏幕参数"比普通参数更特殊,因为它们出现在崩溃报告日志中,您可以更轻松地使用它们来创建受众。这个answer总结了我刚刚说的很好。

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

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

作为一般经验法则,您应该使用用户操作而不是被动收视率来加密您的应用。例如,您可以在用户选择股票,收藏股票,分享股票,搜索股票等时进行操作。然后,在预测或A / B测试中,您可以看到您做出的改变正在影响用户整体参与的特定部分 - "用户是否正在做更多或更少的X?"

TL; DR :不,记录事件不会影响流失预测,因为它们是一般的,"此应用预计将在未来7天内使用或不&#34?;但是,您可能试图确定用户是否要执行更多或更少的某个操作,然后记录一个事件以用于预测或A / B测试。

predefined predictions上的信息,using the predictions feature的概述以及与full length example of how predictions can be used的对话。

编辑,回答评论:

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

好的,为了尝试理解Predictions,我们首先需要了解一点机器学习。如果你考虑它,ML模型有点愚蠢:它们只是试图将一组输入映射到某些输出数字(概率)。由于Predictions不接受事件参数,我猜测Google会在给定用户会话期间发生的分析事件序列中提供信息。 AFAIK,输入提供给ML模型的顺序并不重要,因此事件发生的顺序不会被考虑在内(谷歌可能已经找到了解决方法,dunno)。 / p>

根据我们对ML模型的假设,我们可以回到我们的结账示例。基本上,我认为你实际上只是通过跟踪用户访问的屏幕来制造错误或至少记录无意义的事件。让我们说用户通过" Cart," "输入您的地址,"和"结帐"屏幕。在这种情况下,该模型将训练自己,以确定这些事件集与购买高度相关。

你可能会想,"嗯,这很棒!"不是那么快,这种预测是没用的,因为它实际上并没有预测任何东西。它只是说,"哦,看,一个用户进入结账屏幕通常会买东西。"在这种情况下,我认为记录屏幕事件实际上会使您的预测更糟:让我们说用户访问结帐屏幕,然后离开,因为他们害怕给你他们的信用卡或其他东西。该模型将会思考,"他们访问了该屏幕,因此他们将完全购买东西,"但那是错的。

否则,对我来说,如前所述记录用户操作会更有用。例如,可以使用item_added_to_card个事件的数量来训练实际预测东西的更准确的预测。用户添加到购物车的商品越多,购买商品的可能性就越大。

同样,我对您的应用程序了解不多,但是记录点击事件以查看详细的文章窗格,喜欢该文章或分享它似乎我觉得他们可以提供更多的见解,而不仅仅是查看文章窗格。但是,我认为这取决于您拥有的用户行为类型。如果你购买东西的大多数用户也花了很多时间在文章屏幕上,那么是的,我不知道记录活动会有什么影响。

我试图了解的一般观点是,我认为Predictions在衡量用户参与度的事件中会做得更好。因此,被动的收视率可能有效,但如果某些用户喜欢将该屏幕保持打开状态,或者文章视图甚至可能是您的默认选项卡呢?然后它并没有真正为模型提供任何新信息,因为几乎所有用户都会通过该屏幕。我的经验法则是,"如果用户点击它,请记录它。"然后,您确定要为ML模型获取大量分析事件以查找模式,例如点击查看文章的用户更有可能购买东西。

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