如何识别执行X次操作的用户? [敏锐-IO]

时间:2017-06-02 10:23:50

标签: data-modeling keen-io

我们计划将Keen用作我们的跟踪核心,但结合请求和提取数据对我们来说是一件大事。

如果我们有一个名为pageviews的集合,其中一个用户作为其属性(如:{"name": "pageviews", "properties":{"user":{"id":"4242"},"url":"https://keen.io/"}}),另一个名为purchases的集合具有相同的user 1}}内部属性:

  1. 我们如何才能获得至少访问过3次网址且已完成另一项“购买”活动的唯一身份用户数量?

  2. 我们如何提取这些人?是否可以使用Amazon S3数据复制执行此操作? (与亚马逊雅典娜?)。 “提取”功能似乎不能满足我们的提取问题,因为我们无法应用“分组依据”语句,我们无法将多个事件组合在一起进行提取(我错了吗?)。

  3. 我们的目标是将Keen不仅用作统计分析器,还可以作为我们分割/提取使用的强大数据支持。

1 个答案:

答案 0 :(得分:5)

以下是解决此问题的各种选项:

解决方案1:您可以使用更简单的标准设置吗? Keen的funnel分析类型具有自然语法,用于识别已完成(或未完成)操作A,B,C等的特定用户库存。但是,它不能快速{ {3}}基于次数已完成操作。这部分标准有多重要?您可以识别具有以下内容的用户:

渠道步骤

  1. 查看了/keen.io/
  2. 查看了/keen.io/products
  3. 进行了购买
  4. 这种简化会立即使您的问题在单个filter中得到回答。

    解决方案2:两步查询流程。 在此解决方案中,我们将运行两个单独的查询以获得结果。首先,我们将使用funnel query来识别执行了更罕见的操作(购买)的用户。在下一个查询中,我们将select_unique该特定网页的所有视图和count user.id来计算每个用户查看该网页的次数。我们将查询1的结果用作查询2中过滤器的一部分,以便我们仅查询已进行购买的相关用户。然后,我们可以选择已购买的用户并查看该页面3次或更多次。

    var client = new Keen({
      projectId: "PROJECT_ID",
      readKey: "READ_KEY"
    }); 
    
    var usersWhoPurchased = []
    
    // Query 1
    var usersWhoPurchasedQuery = new Keen.Query("select_unique", {
      event_collection: "purchases",
      target_property: "user.id",
      timeframe: "this_7_days"
    });
    
    // Get Query 1 Results
    client.run(usersWhoPurchasedQuery, function(err, response){
      usersWhoPurchased = response['result']
    });
    
    
    // Query 2
    var activityCountsByUserQuery = new Keen.Query("count", {
      event_collection: "pageviews",
      group_by: "user.id",
      timeframe: "this_7_days",
      filters: [
      	{
      	  property_name: "url",
      	  operator: "eq",
      	  property_value: https://keen.io/
      	},
      	{
      	  property_name: "user.id",
      	  operator: "in",
      	  property_value: usersWhoPurchased
      	}
      ]
    });
        
    // Get Query 2 Results
    client.run(activityCountsByUserQuery, function(err, response){
      console.log(response)
      var countsByUser = response['result']
    });
    
    
    // countsByUser = [
    //   {
    //     "user.id": "A",
    //     "result": 1
    //   },
    //   {
    //     "user.id": "B",
    //     "result": 0
    //   },
    //   {
    //     "user.id": "C",
    //     "result": 3
    //   }
    // ]
    // Sort countsByUser to identfy those with >3

    此方法在您扩展时会有一些注意事项,并开始最大化您可以包含在过滤器中的用户数(数百或数千,具体取决于ID长度)。它们可以分解和分批查询。

    解决方案3:包括事件计数。 这种方法并不适用于所有情况,但是当它发挥作用时,它可以非常强大和优雅。我们的想法是在客户端运行计数,并将它们作为事件的用户属性包含在内。例如,您的网页浏览事件中的用户对象可能包含以下属性:

    {  
       "collection_name":"pageviews",
       "properties":{  
          "user":{  
             "id":"4242"
          },
          "url":"https://keen.io/",
          "product_views_this_session":4
       }
    }
    

    使用这类数据,您可以再次使用带过滤器的简单渠道来识别符合条件的用户

    渠道步骤

    1. 查看过的网页“group_byproduct_views_this_session gt 4
    2. 进行了购买
    3. 解决方案4:使用S3 Streaming + AWS Lambda + RDS或DynamoDB实施计数器

      如果您尚未打开它,请启用所有原始Keen数据到Amazon S3的流式传输。一旦它存在,您可以对传入的数据和静态数据执行各种额外的步骤。

      您的流程可能是这样的:

      1. 开启https://keen.io
      2. 撰写审核传入数据的Keen IO Streaming to S3
      3. 计算每个用户执行每项操作的次数
      4. 在RDS表中查找每个用户
      5. 增加该用户和该操作的计数
      6. 在同一个Lambda作业中,使用新属性重新发布到新集合中的事件回到Keen,如下所示。
      7. 新活动:

        {  
           "collection_name":"user_product_view_enriched",
           "properties":{  
              "user":{  
                 "id":"4242"
              },
              "url":"https://store.io/productA45",
              "view_history":{  
                 "product":"A45",
                 "lifetime_views":5,
                 "counting_since":"<timestamp>"
              }
           }
        }
        

        以这种格式将数据重新输入Keen,您可以使用解决方案3中所述的标准渠道:

        渠道步骤

        1. user_product_view_enriched中包含产品“A45”和lifetime_views&gt;的用户X
        2. 进行购买的用户
        3. 对此方法的限制是您不能随意更改计数器“启动”的时间和方式。例如,您可能稍后决定只想在过去3周内计算视图而不是终生。您必须在S3中查询原始数据以获得这样的新计数,但是您已经拥有了这些数据,因此它不是那么大的交易。

          解决方案5:使用EMR和/或Athena对原始S3数据实施更复杂的查询

          编写一个常规批处理作业来查询原始S3数据并识别您感兴趣的用户。这里有很多选项,我不是专家,但我知道是可能的。