本文目录导读:

计算用户标签权重值(如兴趣偏好、行为倾向等),没有唯一的公式,它完全取决于你的业务场景(是电商推荐、内容推荐还是风控?)以及你拥有的数据(点击、购买、时长、频率等)。
最常用的核心逻辑是:基于用户行为的时间衰减、行为强度、行为频次进行加权计算。
下面提供几个在不同场景下经典的脚本计算思路(以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 ):该用户的行为次数
- 好处:行为次数少时,权重会“向平均水平靠拢”。
脚本实现建议
- 不要实时跑:全量标签权重建议用 Spark/ETL 离线计算(每天/每小时更新一次)。
- 存储结构:推荐存入 Redis(Hash结构)或 HBase,key 为
user_id,value 为{tag1: weight1, tag2: weight2}。 - 增量更新:如果是实时计算(如用户刚买了一件商品),直接更新该用户该标签的分数:
new_weight = old_weight * decay(时间差) + new_action_score
你的公式原型
权重 = Σ(行为类型权重 × 时间衰减因子) × log(1 + 行为次数) + 静态属性评分
你可以根据业务目标调整三个核心参数:衰减速度(天/周)、行为类型权重表、次数降噪函数(线性/对数)。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播