脚本如何计算用户标签权重值

wen 实用脚本 29

本文目录导读:

脚本如何计算用户标签权重值

  1. 核心思想框架
  2. 场景一:电商/内容推荐(最经典)
  3. 场景二:风控/反作弊(高敏感度)
  4. 场景三:内容标签(简单加权)
  5. 关键算法公式详解(供扩展)
  6. 脚本实现建议
  7. 你的公式原型

计算用户标签权重值(如兴趣偏好、行为倾向等),没有唯一的公式,它完全取决于你的业务场景(是电商推荐、内容推荐还是风控?)以及你拥有的数据(点击、购买、时长、频率等)。

最常用的核心逻辑是:基于用户行为的时间衰减、行为强度、行为频次进行加权计算。

下面提供几个在不同场景下经典的脚本计算思路(以Python伪代码为例),你可以直接套用或修改。

核心思想框架

通常标签权重 = 基础分 × 行为权重 × 时间衰减系数 × 数量权重

  • 基础分:标签本身的属性(如“高消费”比“低消费”分高)。
  • 行为权重:用户做了什么事(购买 > 收藏 > 点击 > 浏览)。
  • 时间衰减:近期行为比远期行为权重大(如指数或对数衰减)。
  • 数量权重:行为次数越多,权重越大,但通常用对数(Log)防止刷屏。

推荐(最经典)

目标:计算用户对“数码产品”这个标签的偏好分数。

数据假设:用户行为日志表 user_behavior 包含:user_id, tag, action_type, timestamp

脚本逻辑

import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# 1. 定义参数
now = datetime.now()  # 假设当前时间
action_weight = {
    'purchase': 10.0,  # 购买权重最高
    'collect': 5.0,
    'cart': 4.0,
    'click': 2.0,
    'view': 1.0       # 浏览权重最低
}
decay_factor = 0.95   # 时间衰减系数(每天衰减5%)
def calculate_tag_weight(df_user_behaviors):
    """
    计算单个用户对某一个标签的权重
    """
    total_score = 0.0
    for _, row in df_user_behaviors.iterrows():
        action_score = action_weight.get(row['action_type'], 1)
        # 2. 时间衰减计算 (天数间隔)
        days_diff = (now - row['timestamp']).days
        time_decay = pow(decay_factor, days_diff)
        # 3. 单次行为得分
        single_score = action_score * time_decay
        total_score += single_score
    # 4. 可选:对总次数进行降噪(防刷屏)
    # 总次数权重 = log(1 + 总次数)
    count = len(df_user_behaviors)
    count_weight = np.log1p(count)  # log(1+count)
    final_weight = total_score * count_weight
    return round(final_weight, 2)
# 调用示例:用户123对“手机”标签的所有行为
user_phone_behaviors = pd.DataFrame({
    'action_type': ['view', 'click', 'purchase'],
    'timestamp': [
        datetime.now() - timedelta(days=10),
        datetime.now() - timedelta(days=5),
        datetime.now() - timedelta(days=1)
    ]
})
weight = calculate_tag_weight(user_phone_behaviors)
print(f"用户对【手机】标签权重: {weight}")

风控/反作弊(高敏感度)

目标:计算用户“欺诈风险”标签的分数。 特点:高频、短时、异常行为会放大权重。

脚本逻辑

def risk_tag_weight(actions, base_score=0):
    """
    actions: 用户近期的高危行为列表
    """
    risk = base_score
    for action in actions:
        # 1. 行为本身权重(高风险行为直接加高分)
        if action['type'] == 'rapid_login':  # 1秒内多次登录失败
            risk += 30
        elif action['type'] == 'device_fraud':
            risk += 50
        # 2. 速度惩罚(时间差越小,权重越大)
        time_since_last = action.get('time_diff_seconds', 999)
        if time_since_last < 10:  # 10秒内连续操作
            risk += 20 * (10 / (time_since_last + 1))
        # 3. 无时间衰减(近7天行为直接累加,超过7天权重为0)
        if action['days_ago'] > 7:
            continue
    # 4. 触发阈值判断(非线性放大)
    if risk > 100:
        risk = 100 + (risk - 100) ** 1.5  # 超过100分,指数级增长
    return min(risk, 200)  # 上限200

内容标签(简单加权)

适用于CRM或用户画像系统,不需要复杂时间衰减。

def simple_tag_weight(user_profile):
    """
    基于用户静态属性+行为统计的简单加权
    """
    weight = 0
    # 1. 静态基础分
    if user_profile['age'] in ['18-25']:
        weight += 5  # 年轻用户对“潮牌”基础分高
    if user_profile['city_level'] == '一线':
        weight += 3
    # 2. 行为统计(近30天)
    weight += min(50, user_profile['purchase_count'] * 2)   # 购买1次=2分,上限50
    weight += min(20, user_profile['favorite_count'] * 1)    # 收藏1次=1分,上限20
    weight += min(10, user_profile['browse_count'] * 0.1)    # 浏览10次=1分
    # 3. 反向惩罚(不感兴趣)
    if user_profile['dislike_count'] > 5:
        weight -= 10
    return max(0, weight)  # 权重不能为负

关键算法公式详解(供扩展)

Hacker News 排序算法(适合近实时权重)排序,但用户行为也适用。热度随时间呈指数衰减

  • 公式:( Score = \frac{P - 1}{(T + 2)^G} )
    • ( P ):行为次数(upvote/购买)
    • ( T ):距离发帖/行为的小时数
    • ( G ):重力因子(通常1.8)
  • 好处:前期权重上升快,后期快速下降。

贝叶斯平均(适合新用户/长尾标签)

防止少量行为导致权重虚高。

  • 公式:( Weight = \frac{C \times m + \sum (reviews)}{C + N} )
    • ( C ):先验常数(通常取全局平均次数)
    • ( m ):全局平均权重
    • ( N ):该用户的行为次数
  • 好处:行为次数少时,权重会“向平均水平靠拢”。

脚本实现建议

  1. 不要实时跑:全量标签权重建议用 Spark/ETL 离线计算(每天/每小时更新一次)。
  2. 存储结构:推荐存入 Redis(Hash结构)或 HBase,key 为 user_id,value 为 {tag1: weight1, tag2: weight2}
  3. 增量更新:如果是实时计算(如用户刚买了一件商品),直接更新该用户该标签的分数:
    new_weight = old_weight * decay(时间差) + new_action_score

你的公式原型

权重 = Σ(行为类型权重 × 时间衰减因子) × log(1 + 行为次数) + 静态属性评分

你可以根据业务目标调整三个核心参数:衰减速度(天/周)行为类型权重表次数降噪函数(线性/对数)

抱歉,评论功能暂时关闭!