You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于活动日志估算用户单程序使用时长

基于活动日志的用户使用时长估算方案

核心逻辑实现(R语言)

针对你提出的规则,这里提供基于dplyr的分组处理实现,适配POSIXct时间戳与difftime类型差值:

library(dplyr)

# 模拟与你的日志格式对齐的数据结构
log_data <- tibble(
  user_id = c(1,1,1,1,2,2),
  event_time = as.POSIXct(c("2024-05-20 10:00:00", "2024-05-20 10:00:15", 
                            "2024-05-20 10:02:00", "2024-05-20 10:02:03",
                            "2024-05-20 11:05:00", "2024-05-20 11:06:10")),
  time_diff = as.difftime(c(NA, 15, 105, 3, NA, 70), units = "secs")
)

# 按用户分组计算会话时长
session_duration <- log_data %>%
  group_by(user_id) %>%
  arrange(event_time) %>%
  # 标记会话分组:时间差为空(首条日志)或超60秒时开启新会话
  mutate(session_id = cumsum(is.na(time_diff) | time_diff > 60)) %>%
  # 计算每个会话的累计时长
  group_by(user_id, session_id) %>%
  summarise(
    session_length = case_when(
      n() == 1 ~ 5,  # 单条日志会话默认计5秒
      TRUE ~ sum(time_diff[!is.na(time_diff) & time_diff <= 60])
    ),
    .groups = "drop"
  )

print(session_duration)

代码说明

  • 先按用户分组并按时间排序,确保日志时序正确
  • 用cumsum生成会话ID:当时间差为空或超过60秒时,会话ID递增,完成会话划分
  • 单条日志直接赋值5秒;多条日志仅累加符合条件(≤60秒)的时间差

更优估算方案征集

以下几个方向可优化时长估算的准确性,欢迎补充讨论:

  • 动态超时阈值:根据用户历史行为调整超时时间(比如高频操作用户设更短阈值,低频用户设更长)
  • 操作权重赋值:不同类型的日志(如点击、输入、浏览)对应不同基础时长,替代统一的5秒默认值
  • 收尾会话补全:最后一条日志后若未触发超时,可按固定时长(如30秒)或用户平均操作间隔补全会话时长
  • 异常日志修正:处理时间戳乱序、重复日志等异常情况,避免会话划分错误
  • 滑动窗口统计:用滑动窗口计算用户活跃时段,结合停留时长模型(如幂律分布)优化估算

数据片段与预期输出

输入数据片段

user_idevent_timetime_diff
12024-05-20 10:00:00NA
12024-05-20 10:00:1515 secs
12024-05-20 10:02:00105 secs
12024-05-20 10:02:033 secs
22024-05-20 11:05:00NA
22024-05-20 11:06:1070 secs

预期输出

user_idsession_idsession_length
1115
123
215
225

内容的提问来源于stack exchange,提问作者Mathias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:10:27