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

如何基于包含网页访问步骤的DataFrame计算页面转移概率矩阵

解决方案

核心思路

  • 先把宽格式的会话步骤表转为(源页面,目标页面)的连续访问二元组,确保统计范围不会跨会话
  • 按需过滤指定源页面后,再统计转移次数和概率,避免不必要的全量计算
  • 最后通过透视表生成你需要的行(源页面)×列(所有目标页面)的转移概率矩阵

代码实现

import pandas as pd

# 预处理:提取所有连续访问页面对,仅需执行一次
step_cols = [f"step{i}" for i in range(1, 31)]
pairs = []
for _, row in df_raw.iterrows():
    # 过滤当前会话不足30步的空值,保留实际访问路径
    valid_steps = [row[col] for col in step_cols if pd.notna(row[col])]
    # 生成连续的(当前页,下一页)二元组
    for i in range(len(valid_steps) - 1):
        pairs.append((valid_steps[i], valid_steps[i+1]))
pair_df = pd.DataFrame(pairs, columns=["source_page", "target_page"])

# 生成转移矩阵的通用方法,支持指定源页面
def get_transition_matrix(source_pages: list = None):
    # 传入指定源页面时先过滤,减少后续计算量
    filtered_pairs = pair_df if source_pages is None else pair_df[pair_df["source_page"].isin(source_pages)]
    # 统计每个源-目标对的访问次数
    count_df = filtered_pairs.groupby(["source_page", "target_page"]).size().reset_index(name="visit_count")
    # 计算每个源页面的总流出次数
    count_df["total_out"] = count_df.groupby("source_page")["visit_count"].transform("sum")
    # 计算转移概率
    count_df["prob"] = count_df["visit_count"] / count_df["total_out"]
    # 转为宽表矩阵,无跳转记录的概率填0
    transition_matrix = count_df.pivot(
        index="source_page", 
        columns="target_page", 
        values="prob"
    ).fillna(0)
    return transition_matrix

使用示例

# 生成指定5个源页面的5×3000小规模矩阵
custom_matrix = get_transition_matrix(source_pages=["首页", "商品列表页", "商品详情页", "购物车", "结算页"])

# 全量3000×3000矩阵生成,直接不传参数即可
# full_matrix = get_transition_matrix()

算力说明

  • 小规模矩阵计算仅需过滤对应源页面的二元组统计,算力消耗可忽略
  • 全量3000×3000矩阵计算无压力:哪怕是100万条会话,最多仅生成2900万条二元组数据,普通配置机器用pandas即可在几秒内完成计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:36:01