MCPcopy Index your code
hub / github.com/Chapter-7/Recommended-News

github.com/Chapter-7/Recommended-News @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
67 symbols 199 edges 5 files 16 documented · 24%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Recommended-News

基于天池新闻推荐赛数据集实现的新闻推荐

赛题简介

此次比赛是新闻推荐场景下的用户行为预测挑战赛。该赛题以新闻 APP 中的新闻推荐为背景,旨在依据用户历史浏览点击新闻文章的数据信息,预测用户未来的点击行为,即用户的最后一次点击的新闻文章。其设计初衷是引导参赛者了解推荐系统中的业务背景,以解决实际问题。

数据概况

数据来源于某新闻 APP 平台的用户交互数据,涵盖 30 万用户,近 300 万次点击,涉及 36 万多篇不同的新闻文章,且每篇新闻文章均有对应的 embedding 向量表示。为确保比赛公平性,从中抽取 20 万用户的点击日志数据作为训练集,5 万用户的点击日志数据作为测试集 A,5 万用户的点击日志数据作为测试集 B。

数据表

  • train_click_log.csv:训练集用户点击日志
  • testA_click_log.csv:测试集用户点击日志
  • articles.csv:新闻文章信息数据表
  • articles_emb.csv:新闻文章 embedding 向量表示
  • sample_submit.csv:提交样例文件

字段表

Field Description
user_id 用户 id
click_article_id 点击文章 id
click_timestamp 点击时间戳
click_environment 点击环境
click_deviceGroup 点击设备组
click_os 点击操作系统
click_country 点击城市
click_region 点击地区
click_referrer_type 点击来源类型
article_id 文章 id,与 click_article_id 相对应
category_id 文章类型 id
created_at_ts 文章创建时间戳
words_count 文章字数
emb_1,emb_2,…,emb_249 文章 embedding 向量表示

评价方式理解

结合最后的提交文件 sample_submit.csv 来理解评价方式。最终提交的格式要求针对每个用户给出五篇文章的推荐结果,并按照点击概率从前往后排序。而真实情况是每个用户最后一次点击的文章仅有一篇真实答案,通过查看推荐的五篇文章中是否命中真实答案来进行评价。例如对于 user1,提交格式为:user1,article1,article2,article3,article4,article5。

文件简介

news1

主要功能是实现一个基于物品协同过滤 内存优化函数 reduce_mem:将DataFrame中的数值型列转换为更低精度的数据类型,从而减少内存使用。 数据采样 get_all_click_sample:从训练数据中随机抽取部分用户的点击记录,用于调试。 数据读取 get_all_click_df:根据运行模式(线上或线下),加载并合并训练和测试数据,生成全量的用户点击记录表。

用户点击行为字典 get_user_item_time:为每个用户生成点击文章的时间序列,便于后续计算物品相似度。 热门文章提取 get_item_topk_click:获取点击次数最多的前K篇文章,用于推荐结果的补全。

ItemCF推荐算法 物品相似度计算 itemcf_sim:

基于用户的点击行为,计算文章之间的相似度矩阵。 使用用户点击的文章序列,通过统计共现频率和惩罚因子(对用户点击文章数较多的情况进行平滑)计算相似度。 保存生成的物品相似度矩阵以供后续使用。 基于ItemCF的推荐 item_based_recommend:

根据用户的历史点击文章,利用物品相似度矩阵为用户推荐相关的文章。 若推荐的文章数量不足,则使用热门文章进行补全。

news2

实现新闻推荐数据的可视化分析

用户点击日志分析:

查看训练集数据基本信息(head()、info()、describe())。 确认用户总数、点击文章数量分布等统计信息。 直方图可视化:展示点击日志的各个列(如 click_article_id、click_environment、rank)的分布。

文章数据分析: 查看文章基本属性(如 words_count、category_id)的分布。 统计文章主题数量(category_id)及其出现频次。 分析嵌入向量数据的结构和维度。

数据整合与用户行为分析

用户重复点击行为: 合并训练和测试集点击日志。 分析用户是否重复点击同一篇文章,统计重复点击次数的分布。

用户点击环境变化: 随机采样用户,分析其点击环境属性(如设备类型、操作系统、地区等)的变化。 通过条形图直观展示用户点击环境的分布。

点击次数分布: 用户点击文章的总次数分布。 新闻文章被点击次数的分布,特别是高频和低频新闻。

新闻共现与属性分布分析

新闻共现频次: 统计用户连续点击的新闻对(共现)的次数。 可视化两篇新闻共现次数的分布。

新闻属性分布: 不同新闻主题(category_id)的分布及低频主题情况。 新闻字数(words_count)的描述性统计及分布。

用户新闻偏好: 用户点击的新闻主题数量分布(度量兴趣广泛性)。 用户点击新闻平均字数的分布(长文或短文偏好)。

点击时间相似度分析

点击时间分析: 使用 MinMaxScaler 对点击时间和文章创建时间归一化,便于比较。 计算每个用户两次点击的时间差和前后点击文章创建时间差,分析用户的点击行为模式。

文章相似性分析: 利用文章嵌入向量,计算用户前后点击的两篇文章之间的余弦相似度。 随机采样用户,通过折线图展示点击文章相似度的分布。

通过一系列分布图、条形图、折线图和散点图,展示用户点击行为和文章属性的多维度特征。

news3

定义多种工具函数 获取用户-文章-时间函数 获取文章-用户-时间函数 获取历史和最后一次点击 获取文章属性特征 获取用户历史点击的文章信息 获取点击次数最多的Top-k个文章 定义多路召回字典 召回效果评估

计算相似度矩阵 itemCF i2i_sim userCF u2u_sim item embedding sim

实现召回评估,包括 YoutubeDNN召回 itemCF recall itemCF sim召回 embedding sim 召回 userCF召回 userCF sim召回 user embedding sim召回

解决冷启动问题。实现多路召回合并

news4

实现特征向量提取,包括: 对训练数据做负采样 将召回数据转换成字典 用户历史行为相关特征 用户和文章特征 用户相关特征 用户特征直接读入 文章的特征直接读入 召回文章的主题是否在用户的爱好里面

news5

使用LGB模型,DIN模型是进行排序,进行加权融合

Core symbols most depended-on inside this repo

release_memory
called by 7
news2.py
submit
called by 7
news5.py
get_user_item_time
called by 7
news3.py
get_hist_and_last_click
called by 7
news3.py
reduce_mem
called by 6
news4.py
get_item_topk_click
called by 6
news3.py
metrics_recall
called by 6
news3.py
norm_sim
called by 4
news5.py

Shape

Function 67

Languages

Python100%

Modules by API surface

news3.py28 symbols
news4.py22 symbols
news1.py9 symbols
news5.py4 symbols
news2.py4 symbols

For agents

$ claude mcp add Recommended-News \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact