科大讯飞 | 短视频精准推荐挑战赛Baseline

科技   2024-08-13 08:00   新加坡  
嘿,记得给“机器学习与推荐算法”添加星标

转自: Coggle数据科学

  • 赛题名称:短视频精准推荐挑战赛
  • 赛题类型:推荐系统
  • 赛题任务:预测该用户下一天最有可能会点击观看哪N个视频

报名链接:https://challenge.xfyun.cn/topic/info?type=short-video-recommendation

unsetunset赛题背景unsetunset

在数字化时代,短视频平台迅速崛起,成为人们获取信息、娱乐和社交的重要渠道。随着用户数量的激增和内容创作的多样化,如何精准地推荐用户感兴趣的短视频内容,提升用户体验,成为短视频平台面临的关键挑战。

img

为了增强平台的用户粘性和内容分发效率,本次算法挑战赛聚焦在“短视频精准推荐”,旨在推动短视频推荐算法的创新和优化。

unsetunset赛题任务unsetunset

赛题将提供用户历时观看行为、视频信息、用户信息等数据,需要选手构建模型预测用户所喜欢的视频。

给定某平台实际短视频业务中脱敏和采样后的的用户行为数据,即平台展示给用户多个短视频,保留用户存在点击并产生停留的行为。任务目标预测该用户下一天最有可能会点击观看哪N个视频,其中N=5。

请必须推荐5个视频,且推荐视频不能重复。若对新用户掌握的信息不足以推荐5个,可结合热门视频推荐。

unsetunset数据说明unsetunset

本次大赛基于短视频业务脱敏和采样后的数据信息,预测用户将点击的视频。参赛队伍需要设计相应的算法进行数据分析和预测。本次比赛提供了海量的数据集,包含用户历史点击观看行为数据,视频相关信息数据。

特征字段字段描述
uid用户行为id,唯一表示,无重复
vid视频id
cid视频类别id
playtime观影时长
duration视频时长
date点击时间,如20230101
rankuid当天点击排序,rank为1则表示当天最后一次点击观看

unsetunset评价指标unsetunset

本次竞赛的评价标准采用MRR(Mean Reciprocal Rank)指标,评估代码参考:

def calculate_mrr(df_sorted, df_clicked):
    mrr_score = 0.0
    total_queries = len(df_clicked)

    for index, row in df_clicked.iterrows():
        # 获取当前用户的所有推荐
        recommendations = df_sorted[df_sorted['uid'] == row['uid']].reset_index(drop=True).head(5)
        # 检查点击的视频是否在推荐列表中,并且计算其排名
        if row['vid'in recommendations['vid'].values:
            rank = recommendations[recommendations['vid'] == row['vid']]['vid'].index[0] + 1
            mrr_score += 1 / rank

    # 计算平均MRR
    return mrr_score / total_queries if total_queries > 0 else 0

unsetunsetBaseline 思路unsetunset

对于训练集中的数据,构建一个频率字典 freq,记录每个视频 vid 后面跟随的视频 vid 的频率。遍历训练集中每个用户的最后3个点击,使用构建的频率字典预测用户可能感兴趣的前5个视频。

  • 频次统计
freq = {}
for u, df in tqdm(train_data.groupby('uid')):
    for v1, v2 in zip(df['vid'].values[:-1], df['vid'].values[1:]):
        if v1 not in freq:
            freq[v1] = {v2:1}
        else:
            if v2 in freq[v1]:
                freq[v1][v2] += 1
            else:
                freq[v1][v2] = 1
  • 测试集预测
submit = []
for u, df in tqdm(uid.groupby('uid')):
    if u not in example['uid'].values:
        continue

    df10 = df.tail(3)
    pred_freq = merge_dicts_by_adding_values(*[freq[x] for x in df10['vid'].values if x in freq])
    pred_vids = [k for k, v in sorted(pred_freq.items(), key=lambda item: item[1])][::-1]
    pred_vids = pred_vids[:5]

    for v in pred_vids_top5[:5]:
        submit.append([u, v])

代码地址:https://github.com/datawhalechina/competition-baseline/tree/master/competition/%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9EAI%E5%BC%80%E5%8F%91%E8%80%85%E5%A4%A7%E8%B5%9B2024

机器学习与推荐算法
专注于分享经典的推荐技术,致力于传播基础的机器学习、深度学习、数据挖掘等方面的知识。
 最新文章