gpt4 book ai didi

data-modeling - 如何识别执行了 X 次操作的用户? [敏锐-io]

转载 作者:行者123 更新时间:2023-12-03 17:35:12 26 4
gpt4 key购买 nike

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

例如,如果我们有一个名为 pageviews 的集合,将用户作为其属性(例如: {"name": "pageviews", "properties":{"user":{"id":"4242"},"url":"https://keen.io/"}} ),以及另一个名为 purchases 的集契约(Contract)user里面的属性(property):

  • 我们如何获得至少访问了 3 次一个 url 并且完成了另一个事件“购买”的唯一用户数量?
  • 我们如何提取这些人?是否可以通过 Amazon S3 数据复制来实现? (亚马逊雅典娜?)。 “提取”功能似乎不能满足我们的提取问题,因为我们不能应用“分组依据”语句,也不能组合多个事件进行提取(我错了吗?)。

  • 我们的目标是将 Keen 不仅用作统计分析器,而且还用作我们分割/提取使用的强大数据支持。

    最佳答案

    以下是解决此问题的多种选择:

    解决方案1:您可以使用更简单的标准集吗?科恩 funnel分析类型具有用于识别已完成(或未完成)操作 A、B、C 等的特定用户 list 的自然语法。但是,它不能快速filter基于操作已完成的次数。这部分标准有多重要?您能否识别具有以下特征的用户:

    漏斗步骤

  • 查看 /keen.io/
  • 查看 /keen.io/products
  • 已购买

  • 这种简化将立即使您的问题在一个 funnel query 中得到解答。 .

    解决方案2:两步查询过程。
    在这个解决方案中,我们将运行两个单独的查询来获得结果。首先,我们将使用 select_unique识别执行更罕见操作(购买)的用户。在下一个查询中,我们将 count该特定页面的所有浏览量和 group_by 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
    }
    }

    有了这种数据,您可以再次使用带有过滤器的简单漏斗来识别符合您条件的用户

    漏斗步骤
  • 查看页面' https://keen.io ' 哪里 product_views_this_session gt 4
  • 已购买

  • 解决方案 4:使用 S3 Streaming + AWS Lambda + RDS 或 DynamoDB 实现计数器

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

    你的过程可能是这样的:
  • 开启 Keen IO Streaming to S3
  • 写个 AWS Lambda job审查传入的数据和
  • 计算每个用户执行每个操作的次数
  • 在 RDS 表中查找每个用户
  • 增加该用户和该操作的计数
  • 在同一个 Lambda 作业中,将事件重新发布到新集合中的 Keen,具有新属性,如下所示。

  • 新事件:
    {  
    "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 中所述的标准漏斗:

    漏斗步骤
  • 有事件的用户 user_product_view_enriched产品“A45”和 lifetime_views > X
  • 购买过的用户

  • 这种方法的局限性在于您不能随意更改计数器“启动”的时间和方式。例如,您可能稍后决定只计算过去 3 周内的观看次数,而不是计算生命周期内的观看次数。您必须在 S3 中查询原始数据才能得出这样的新计数,但您已经在那里有了数据,所以这不是什么大事。

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

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

    关于data-modeling - 如何识别执行了 X 次操作的用户? [敏锐-io],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44326607/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com