java - 如何发送屏幕查看事件,以帮助Firebase预测做出更准确的预测

标签 java android firebase firebase-analytics firebase-predictions

我只有一个Activity,在Fragment中有多个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);
}

最佳答案

我认为这里有一些误解。

首先,您已经注意到,setCurrentScreen创建一个参数,该参数会自动附加到将来的事件。事件是发送到Firebase的唯一东西,并且附加了参数-参数只能与事件相关。 “屏幕参数”比正常参数要特殊一些,因为它们出现在崩溃报告日志中,您可以更轻松地使用它们来创建受众。这个answer总结了我刚才所说的话。

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

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

根据一般经验,应该使用用户操作而不是被动的观看者来吸引应用程序。例如,当用户选择股票,收藏,共享,搜索时,您可以采取行动。然后,在“预测”或A / B测试中,您可以查看所做的更改如何影响用户整体参与度中的特定部分-“用户是在做X的多还是少?”

TL; DR :不,因为日志记录事件很笼统,所以它不会影响用户流失预测,“预计此应用是否会在 future 7天使用?”但是,您可能试图弄清楚用户是要执行更多还是更少的某项操作,然后记录一个要在预测或A / B测试中使用的事件。

有关predefined predictions的信息,using the predictions feature的概述以及与full length example of how predictions can be used的交谈。

编辑,回答评论:

首先,我不是Firebase工程师,并且我怀疑Google员工是否会与您分享他们的商业机密,因此我在此猜测。我将使用一个结帐示例,因为这是我能想到的最简单的示例。

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

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

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

另一方面,对我来说有意义的是,如前所述,记录用户操作将更为有用。例如,可以使用item_added_to_card事件的数量来训练实际上可以预测事物的更准确的预测。用户添加到购物车中的物品越多,他们对购买商品的 promise 就越多。

再说一次,我对您的应用程序了解不多,但记录点击事件以查看详细的文章窗格,喜欢该文章或共享它,在我看来,它们可以提供比仅查看文章窗格更多的见解。但是,我认为这取决于您具有哪种用户行为。如果您购买商品的大多数用户还在文章屏幕上花费了很多时间,那么是的,我看不到记录事件有什么害处。

我试图传达的一般观点是,我认为预测将更好地用于衡量用户参与度的事件。因此,被动观看功能可以起作用,但是如果某些用户只想保持该屏幕打开,或者文章视图甚至是您的默认标签,该怎么办?然后,由于几乎所有用户都将通过该屏幕,因此它并没有真正为模型提供任何新信息。我的经验法则是:“如果用户单击它,请对其进行记录。”然后,您一定会获得大量的ML模型分析事件来查找模式,例如单击查看文章的用户更有可能购买商品。

PS:对这种模型进行逆向工程非常困难,我的假设可能完全错了。

关于java - 如何发送屏幕查看事件,以帮助Firebase预测做出更准确的预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47993845/

相关文章:

javascript - 类型错误 : Cannot read property 'dispatch' of null

java - 通过 c、c++ 或 Java 进行 SNMP 访问

java - 将字符串数组转换为 vector 的最佳方法?

java - 图片 Uri 错误

java - 对具有不同对象的数组列表进行排序

javascript - auth' 未从 React 应用程序中的 'firebase' 导出

java - 如何在函数调用中强制顺序

java - 使用ip本地访问登录

android - 从地址簿调用时如何将我的应用程序包含为拨号选项?

firebase - 如何使用Flutter从Firebase实时数据库中检索特定数据?