4

我有一个ActivityViewPager中有多个Fragment如何发送屏幕浏览事件,以帮助Firebase预测更加准确地预测

目前,这是我的方式,送屏幕视图事件既谷歌Analytics(分析)和火力地堡


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"); 

一些测试后,我意识到我在乔治亚州,但不是在火力地堡就收到屏幕视图事件。

后来,我意识到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); 
} 

回答

4

我想这里有一些误解。

首先,你已经注意到,setCurrentScreen创建参数,它会自动连接到未来事件。事件是发送到Firebase的唯一东西,并附带了参数 - 参数只能与事件相关。 “屏幕参数”比常规参数更特别一些,因为它们出现在崩溃报告日志中,您可以更轻松地使用它们创建受众群体。这answer总结了我刚刚说的很好。

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

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

作为一般的经验法则,您应该用用户动作来胡说您的应用程序,而不是被动观看。例如,当用户选择股票,收藏,分享,搜索等时,您可以执行操作。然后,在预测或A/B测试中,您可以看到您所做的更改是如何影响用户总体参与度的特定部分的 - “用户做了或多或少的X?”

TL; DR:不,日志记录事件不会影响流失预测,因为它们是普通的,“这个应用预计会在未来7天内使用吗?”但是,您可能试图找出用户是要执行某个操作的更多还是更少的操作,然后记录要在预测或A/B测试中使用的事件。

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

编辑,回答评论:

我想最后说,我不是一个火力地堡的工程师,我怀疑Google员工将与大家分享他们的商业秘密前言本,所以我猜多数这里。我将使用一个结帐示例,因为这是我能想到的最简单的一个。好吧,为了尝试理解预测,我们首先需要了解一点机器学习。如果您考虑ML模型,那么ML模型有点笨拙:它们只是试图将一组输入映射到某些输出数(概率)。由于“预测”不接受事件参数,因此我猜测Google会在给定的用户会话期间发生分析事件序列。 AFAIK,输入提供给ML模型的顺序并不重要,所以事件发生的顺序将不会被考虑(Google可能已经想通了,dunno)。

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

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

另一方面,我认为记录用户动作正如我之前提到的会更有用。例如,可以使用事件的数量来训练能够实际预测东西的更精确的预测。用户添加到购物车的项目越多,他们可能会购买的东西就越多。

同样,我对你的应用程序了解不多,但记录点击事件以查看详细文章窗格,喜欢这篇文章,或者分享它对我来说似乎可以提供更多见解,而不仅仅是查看文章窗格。不过,我认为这取决于你有什么样的用户行为。如果大多数购买了东西的用户也在文章屏幕上花费了大量时间,那么是的,我不明白记录事件会有什么影响。

我试图得到的一般观点是,我认为预测可以更好地衡量用户参与的事件。因此,被动观看可能会奏效,但如果某些用户喜欢只是保持该屏幕打开状态,或者文章视图甚至是默认选项卡,该怎么办?然后它不会真正给模型提供任何新的信息,因为几乎所有的用户都会浏览该屏幕。我的经验法则是,“如果用户点击它,请记录它。”然后,您一定会为ML模型获得大量的分析事件来查找模式,例如点击查看文章的用户更有可能购买内容。

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

+0

但是,奇怪的是,Firebase预测可以做出准确的预测,而无需提供用于学习目的的屏幕信息。例如,实际上,查看'StockNewsFragment'的用户比查看'StockChartFragment'的用户更有可能执行'in_app_purchase'。如果不提供准确的屏幕视图信息,Firebase预测会如何预测用户是否可能执行'in_app_purchase'? –

+0

看到我更新的答案,它太长,以适应评论。 – SUPERCILEX

+0

劳伦斯刚刚发布了[这篇文章](https://medium.com/@lmoroney_40129/machine-learning-in-firebase-using-predictions-8a1df0c63b60),这证实了Predictions正在使用TensorFlow,但没有详细说明。 – SUPERCILEX