基于ItemCF的Baseline

ItemCF是一种基于统计的方法,其核心步骤有两步:

• 第一步:根据用户的历史记录(session)来构建Item-Item的相似矩阵,这个相似矩阵是通过item-item的共现次数来构建的。

• 第二步:根据Item-Item相似矩阵与session来进行召回,具体做法就是遍历session中的所有item,然后根据item-item相似矩阵来推荐与session中相似的item

基础版本的itemcf线上得分0.165

import os
import pandas as pdfrom datetime import datetime
from tqdm import tqdmfrom collections import defaultdict
import math
import numpy as np
data_dir = 'D:\\360安全浏览器下载\\dressipi_recsys2022\\'
train_sessions = pd.read_csv(os.path.join(data_dir, 'train_sessions.csv'))
train_purchases = pd.read_csv(os.path.join(data_dir, 'train_purchases.csv'))
test_sessions = pd.read_csv(os.path.join(data_dir, 'test_leaderboard_sessions.csv'))
common_item = len(set(train_sessions['item_id'].unique()) & set(test_sessions['item_id'].unique()))
common_item / test_sessions['item_id'].nunique()

train_sessions = train_sessions.append(train_purchases)
train_sessions = train_sessions.append(test_sessions)
def get_sim_item(df, session_col, item_col, use_iif=False):user_item_dict = df.groupby(session_col)[item_col].agg(list).to_dict()sim_item = {}item_cnt = defaultdict(int)for user, items in tqdm(user_item_dict.items()):for i in items:item_cnt[i] += 1sim_item.setdefault(i, {})for relate_item in items:if i == relate_item:continuesim_item[i].setdefault(relate_item, 0)if not use_iif:sim_item[i][relate_item] += 1else:sim_item[i][relate_item] += 1 / math.log(1 + len(items))sim_item_corr = sim_item.copy()for i, related_items in tqdm(sim_item.items()):for j, cij in related_items.items():sim_item_corr[i][j] = cij / math.sqrt(item_cnt[i] * item_cnt[j])return sim_item_corr  
order = train_sessions['item_id'].value_counts().reset_index()
order = order.sort_values('item_id', ascending=False)
popular_items = list(order['index'])
sim_item_corr = get_sim_item(train_sessions, 'session_id','item_id',use_iif=True)

def recommend(sim_item_corr, popular_items, top_k, session_item_list, item_num=300):  rank = {}  for i in session_item_list:  if i not in sim_item_corr.keys():continuefor j, wij in sorted(sim_item_corr[i].items(), key=lambda d: d[1], reverse=True)[0:item_num]:  if j not in session_item_list:  rank.setdefault(j, 0)  rank[j] += wijrank = sorted(rank.items(), key=lambda d: d[1], reverse=True)[:top_k]rank = np.array(rank)item_list = list(rank[:,0].astype('int32'))score_list = rank[:,1]if len(item_list)<top_k:index = 0while(len(item_list)<top_k):item_list.append(popular_items[index])item_list = list(set(item_list))index +=1return item_list, score_list
item_list, score_list=recommend(sim_item_corr,popular_items,100,[9655,15654,2507])
top_k = 100
test_session_dict = test_sessions.groupby('session_id')['item_id'].agg(list).to_dict()
session_id_list = []
item_id_list = []
rank_list = []
for session_id,session_item_list in tqdm(test_session_dict.items()):item_list, score_list = recommend(sim_item_corr,popular_items,top_k,session_item_list)session_id_list += [session_id for _ in range(len(item_list))]item_id_list += list(item_list)rank_list += [x for x in range(1,len(item_list)+1)]

res_df = pd.DataFrame()
res_df['session_id'] = session_id_list
res_df['item_id'] = item_id_list
res_df['rank'] = rank_list
res_df.to_csv('baseline.csv',index=False)

recsys2022比赛baseline - 基于ItemCF相关推荐

  1. 百度图神经网络——论文节点比赛baseline代码注解

    文章目录 一.项目介绍 二.BaseLine内容注解 1.Config部分注解 2. 数据读取与处理部分 2.1 边数据的加载与处理 2.2 数据的完整加载与处理 2.3 数据读取与分割 3. 模型加 ...

  2. java itemcf_大规模电商推荐数据分析-基于ItemCF的召回

    这篇文章算是对这一个月以来天池比赛<CIKM 2019 EComm AI:用户行为预测>的一个总结,我们队伍第一次打这种"海量数据"的比赛,最终成绩能保留在第一页就已经 ...

  3. Kaggle肠胃道图像分割比赛baseline

    日前,Kaggle发布了UW-Madison 胃肠道图像分割大赛.要求参赛者: 基于实际癌症患者的核磁共振扫描图像,利用深度学习提出一个模型,自动分割MRI scans图像的肠和胃.比赛时间截止到20 ...

  4. 【NLP】kaggle临床患者病历评分比赛baseline

    来源:投稿 作者:William 编辑:学姐 William 研究生毕业于美国TOP20大学 现就职国内某互联网大厂 赛题分析+baseline 1.赛题链接 https://www.kaggle.c ...

  5. 【Paddle打比赛】基于PaddleNLP法研杯2022 -犯罪事实实体识别

    一.第五届中国法研杯 LAIC2022 司法人工智能挑战赛 [犯罪事实实体识别] 比赛地址: http://data.court.gov.cn/pages/laic.html 1.任务介绍 本赛道由中 ...

  6. Paddle打比赛】基于PaddleOCR的AIWIN手写体识别

    一.[Paddle打比赛]AIWIN 手写体OCR识别竞赛 1.赛题背景 http://ailab.aiwin.org.cn/competitions/65#learn_the_details 银行日 ...

  7. Kaggle_NBME NLP比赛Baseline详解(2)

    这部分主要讲代码 分四个部分讲解 1.Dataset设计 2.Model设计 3.Loss函数设计 4.一些QA 1.Dataset设计 目标:每次迭代计算的时候要取出部分数据放入模型 实现的方法:继 ...

  8. 基于ItemCF算法的电影推荐系统 的代码详解

    """ import random import math import os import json import time #声明一个ItemCFRec类 class ...

  9. Ranking第7名,2020 CrowdHuman大赛Baseline发布

    今年5月,2020 CrowdHuman人体检测大赛启动上线,本届比赛是CrowdHuman人体检测赛的第二期.2019年北京智源人工智能研究院联合旷视科技共同推出了两个检测任务的新基准:Object ...

最新文章

  1. usr share里没有mysql_无法在ubuntu 12.04上安装mysql,找不到消息文件’/usr/share/mysql/errmsg.sys’...
  2. 因为我说:volatile 是轻量级的 synchronized,面试官让我回去等通知!
  3. 跟着百度学PHP[17]-PHP扩展CURL的POST传输数据
  4. DFTug - Getting Started(上篇)
  5. java 更新ui_你怎么解决Android开发中更新UI报错的异常吗-百度经验
  6. 线程的状态转换、sleep()、wait()、yeild()、终止线程的方法、线程之间的协作(join()、wait() notify() notifyAll()、await() signal() )
  7. TestNG 入门教程
  8. 防止页面被iframe包含进去
  9. C语言基于dag的基本块优化,基于dag的基本块优化参考.docx
  10. Android笔记 使用Json从数据库读取数据+demo
  11. struts集成spring官方例子
  12. 【数据分析】目标优化矩阵表确定权重
  13. 6. JavaScript String 对象
  14. 电子设计从零开始(第2版)pdf
  15. python注释中文_python注释不能识别中文
  16. E盾网络验证企业版个人版离线版加密防破解易语言源码加密对接好的自绘界面2
  17. Elasticsearch安装拼音分词器插件
  18. 数字麦克风灵敏度信噪比等指标解读
  19. Some useful linux commands
  20. Vue Uncaught SyntaxError: Unexpected token ‘<‘ 路由问题

热门文章

  1. 电商网站业务流程图示例
  2. 用MATLAB画圣诞树的源代码
  3. 前端LayUI框架快速上手详解(一)
  4. 5月6日----5月9日二年级课程表
  5. 我用DoS把自己网站弄挂了
  6. 编码通信与魔术初步(四)——通信编码魔术的基本原理
  7. mysql 表设计工具_非常好用的一个表设计工具(EZDML)
  8. python爬取知乎热榜了解时事
  9. Python日记——柿子要捡软的捏,记第一只小爬虫
  10. 并不对劲的方格取数问题