Сканировать QR-код Загрузить QR-код
Magazin domenov
Выберите типы платформ для обхода блокировки ссылок
Выберите разрешенные типы платформ

数据建模:会话切割

做运营数据分析的人,几乎都踩过同一个坑,只是很少有人愿意摊开来讲——会话切割不准。它一旦出问题,用户使用时长、启动次数这些关键指标就全跟着跑偏了。你很可能经历过这种困惑:明明看到同一个用户连续操作了五六分钟,报表里却显示来了两次,每次才几十秒。这背后,多半就是会话划分的规则跟实际行为脱了节。



想把这件事弄清楚,得先回到一个最基本的概念:用户会话到底是什么。在技术侧,它通常叫 session。说得直白一点,就是从用户打开 App 或网页开始,到他离开、不再有任何操作的那一瞬间为止,这段时间里产生的所有行为打包成一个“访问单元”。我们想知道用户这次来到底干了什么、逛了多久,全靠会话把这些零散的事件串起来。如果会话的边界模糊不清,后面的统计就变成了一笔糊涂账。

会话一旦定义清楚,很多日常运营和产品经理盯着的指标,才有了计算的依据。比如访问次数,就是所有会话的总个数,反映产品被打开过多少轮。平均交互深度,是把所有会话里发生的事件数(点击、滑动、播放等)加总后,再除以访问次数,它能看出用户每次访问大致有多活跃——是只点了一下就跑,还是到处逛来逛去。使用时间,指的是一次会话从开始到结束的时长,用它除以总次数,就得到平均使用时长,这个指标对判断用户黏性非常关键。页面级别的指标也离不开会话:页面平均停留时长,等于该页面停留总时长除以它的 PV;跳出率则特别容易被混淆,它指的是一个会话里只发生了一个事件就结束了,分页面跳出率(该页面跳出次数除以该页面 PV)和全站跳出率(全站跳出总次数除以总访问次数),用来衡量访问有多“浅”;还有页面退出率,就是用户从某个页面结束会话的比例,等于该页面退出次数除以它的 PV,它能告诉你,哪里是用户流失的“最后一站”。

这些数字看着简单,但前提是会话切得对。传统做法比较粗糙:预先设定一个时间阈值,比如 Web 端通常 30 分钟,App 端可能 1 分钟,只要用户在这段时间里没有任何操作,下一次操作就会自动划进一个新的会话,后台给同一个会话打上相同的 session_id 上报。这种一刀切的方式缺点很明显:阈值是拍脑袋定出来的,太死板。比如电商大促期间,用户反复比价,可能看完一个商品放下手机去倒了杯水,回来继续翻,间隔超过 30 分钟,系统就硬生生把一次连贯的购物决策切成了两段。这样一来,使用时长和访问深度数据就全失真了。更何况,不同业务场景对“活跃间隔”的理解本来就不一样,用一个固定值根本没法适应。



现在更灵活的做法,是把切割动作后移到数据清洗阶段,根据分析需求定制规则。举个简单的例子,假如将切割时间设为 1 分钟,那么处理流程大致是这样的:先把用户的所有行为按发生时间排好序,从历史第一个事件开始往后比对。如果前后两个事件间隔在 1 分钟内,并且中间匹配到了“启动 App”这个事件,就直接从启动 App 处切断,前面的算作一个会话,启动 App 作为新会话的起点;如果在 1 分钟内匹配到了“退出 App”,同样切断,退出前的事件包进当前会话;要是纯粹就是两个事件间隔超过了 1 分钟,中间没有启动或退出,也会自动切分,另起一个会话。这样做的好处是,会话的起止由用户真实的行为节点(比如启动、退出)和间隔逻辑共同决定,而不是死守一个数字。业务方可以根据不同场景,比如视频播放、游戏、资讯阅读,设定不同的切割时长和切断条件,让会话更贴近用户的真实意图。

对运营和产品同学来说,把会话切割的原理吃透,并不只是技术部门的事,而是确保自己每天看的活跃、留存、时长这些数据基线可靠的基础。否则数据失真,就相当于跟着一张画歪了的地图走,决策跑偏也就不奇怪了。下次再遇到指标异常,不妨先回头看看埋点背后的会话规则,说不定问题就出在那里。

(本文内容整理自公开资料,仅供学习交流,如涉及版权请联系删除)