功能丰富的推荐系统

功能丰富的推荐系统

Feature-Rich Recommender Systems

交互数据是用户偏好和兴趣的最基本指示。在以前引入的模型中起着至关重要的作用。然而,交互数据通常非常稀疏,有时可能会有噪声。为了解决这个问题,可以在推荐模型中集成一些附加信息,比如条目的特性、用户的概要信息,甚至是交互发生的上下文。利用这些特性有助于提出建议,因为这些特性可以有效地预测用户的兴趣,特别是在缺少交互数据的情况下。因此,推荐模型也必须具备处理这些特性的能力,并赋予模型一些内容/上下文感知能力。为了演示这种类型的推荐模型,介绍了另一个关于在线广告推荐的点击率(CTR)的任务,并给出了一个匿名广告数据。有针对性的广告服务引起了广泛的关注,并经常被当作推荐引擎。推荐符合用户个人口味和兴趣的广告对于提高点击率非常重要。

数字营销人员使用在线广告向客户展示广告。点击率是衡量广告客户在广告上获得的点击次数的一个指标,用公式计算的百分比表示:
在这里插入图片描述
点击率是预测算法有效性的一个重要指标。点击率预测是一项预测网站上的东西被点击的可能性的任务。CTR预测模型不仅适用于有针对性的广告系统,也适用于一般商品(如电影、新闻、产品)推荐系统、电子邮件活动,甚至搜索引擎。还与用户满意度、转化率密切相关,有助于设定广告活动目标,因为可以帮助广告商设定现实的期望值。

from collections import defaultdict

from d2l import mxnet as d2l

from mxnet import gluon, np

import os

  1. An Online Advertising Dataset

随着互联网和移动技术的飞速发展,网络广告已经成为互联网行业重要的收入来源,并产生了绝大部分的收入。重要的是要展示相关的广告或激起用户兴趣的广告,以便将散客转化为付费客户。介绍的数据集是一个在线广告数据集。由34个字段组成,第一列表示目标变量,该变量指示广告是否被单击(1)或否(0)。所有其列都是分类特性。这些列可能表示广告id、站点或应用程序id、设备id、时间、用户配置文件等。由于匿名化和隐私问题,这些特征的真正语义尚未公开。

以下代码从服务器下载数据集并将其保存到本地数据文件夹中。

#@save

d2l.DATA_HUB[‘ctr’] = (d2l.DATA_URL + ‘ctr.zip’,

‘e18327c48c8e8e5c23da714dd614e390d369843f’)

data_dir = d2l.download_extract(‘ctr’)

Downloading …/data/ctr.zip from http://d2l-data.s3 accelerate.amazonaws.com/ctr.zip…

有一个训练集和一个测试集,分别由15000个和3000个样本/行组成。

  1. Dataset Wrapper

为了方便数据加载,实现了一个CTRDataset,从CSV文件加载广告数据集,供DataLoader使用。

#@save

class CTRDataset(gluon.data.Dataset):

def __init__(self, data_path, feat_mapper=None, defaults=None,

             min_threshold=4, num_feat=34):

    self.NUM_FEATS, self.count, self.data = num_feat, 0, {}

    feat_cnts = defaultdict(lambda: defaultdict(int))

    self.feat_mapper, self.defaults = feat_mapper, defaults

    self.field_dims = np.zeros(self.NUM_FEATS, dtype=np.int64)

    with open(data_path) as f:

        for line in f:

            instance = {}

            values = line.rstrip('\n').split('\t')

            if len(values) != self.NUM_FEATS + 1:

                continue

            label = np.float32([0, 0])

            label[int(values[0])] = 1

            instance['y'] = [np.float32(values[0])]

            for i in range(1, self.NUM_FEATS + 1):

                feat_cnts[i][values[i]] += 1

                instance.setdefault('x', []).append(values[i])

            self.data[self.count] = instance

            self.count = self.count + 1

    if self.feat_mapper is None and self.defaults is None:

        feat_mapper = {i: {feat for feat, c in cnt.items() if c >=

                           min_threshold} for i, cnt in feat_cnts.items()}

        self.feat_mapper = {i: {feat: idx for idx, feat in enumerate(cnt)}

                            for i, cnt in feat_mapper.items()}

        self.defaults = {i: len(cnt) for i, cnt in feat_mapper.items()}

    for i, fm in self.feat_mapper.items():

        self.field_dims[i - 1] = len(fm) + 1

    self.offsets = np.array((0, *np.cumsum(self.field_dims).asnumpy() [:-1]))

def __len__(self):

    return self.count

def __getitem__(self, idx):

    feat = np.array([self.feat_mapper[i + 1].get(v, self.defaults[i + 1])

                     for i, v in enumerate(self.data[idx]['x'])])

    return feat + self.offsets, self.data[idx]['y']

下面的示例加载训练数据并打印出第一条记录。

train_data = CTRDataset(os.path.join(data_dir, ‘train.csv’))

train_data[0]

(array([ 143., 145., 227., 237., 957., 1250., 1471., 1566., 1624.,

    1960., 2008., 2061., 2154., 2304., 2305., 2360., 2745., 2746.,

    2747., 2748., 2892., 2988., 3165., 3170., 3194., 3195., 3230.,

    3653., 3687., 3693., 3729., 3752., 3784., 3803.]), [1.0])

可以看出,这34个字段都是范畴特征。每个值表示对应项的一个热索引。标签0表示未单击。这个CTRDataset还可以用于加载其数据集,如Criteo display Advertision challenge数据集和Avazu点击率预测数据集。

  1. Summary

· Click-through rate is an important metric that is used to measure the effectiveness of advertising systems and recommender systems.

· Click-through rate prediction is usually converted to a binary classification problem. The target is to predict whether an ad/item will be clicked or not based on given features.

热门文章

暂无图片
编程学习 ·

SpringBoot解决跨域

第一种:书写解决跨域的类public class AccessControlAllowOriginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) …
暂无图片
编程学习 ·

单调栈解决Next Greater Number一类题

单调栈是什么? 单调栈使得每次新元素入栈后,栈内元素都保持有序(单调递增或者单调递减)。 单调递增栈:栈中数据出栈的序列为单调递增序列。 单调递减栈:栈中数据出栈的序列为单调递减序列。 注意:这里所说的递增递减是出栈的顺序,不是栈中数据的顺序。 单调栈的应用 通…
暂无图片
编程学习 ·

MySQL基础(十二):锁机制

文章目录一、锁的概述1、什么是锁?2、锁的分类二、MySQL中的三种锁1、表锁(偏读)(1)表锁的特点(2)表加读锁、写锁的语法(3)读锁特性实验(4)写锁特性实验(3)结论2、行锁(偏写)(1) 由于行锁支持事务,复习老知识(2)建表sql(3)行锁加读锁、写锁语法(4)读锁…
暂无图片
编程学习 ·

Python超轻量数据库之SQLite

欢迎关注【无量测试之道】公众号,回复【领取资源】, Python编程学习资源干货、 Python+Appium框架APP的UI自动化、 Python+Selenium框架Web的UI自动化、 Python+Unittest框架API自动化、资源和代码 免费送啦~ 文章下方有公众号二维码,可直接微信扫一扫关注即可。1、什么是 SQ…
暂无图片
编程学习 ·

Python代码

hello world!!! import numpy as npfrom sklearn import linear_modelfrom mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as pltxx, yy = np.meshgrid(np.linspace(0,10,10), np.linspace(0,100,10)) zz = 1.0 * xx + 3.5 * yy + np.random.randint(0,100,…
暂无图片
郑州普通话 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络:信息往一个方向流动。包括MLP和CNN 循环神经网络:信息循环流动,网络隐含层输出又作为自身输入,包括RNN、LSTM、GAN等。 RNN模型结构如下图所示: 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
代理记账 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络:信息往一个方向流动。包括MLP和CNN 循环神经网络:信息循环流动,网络隐含层输出又作为自身输入,包括RNN、LSTM、GAN等。 RNN模型结构如下图所示: 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
cgfy ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息,消息是不定长,首先所有信息先放入 Commitlog中,每一条消息放入Commitlog的时候都需要上锁,确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…
暂无图片
coreui ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
未来博客 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
建站日记 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快?它有哪些限制? 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库,像vue内置了动画处理、keep-alive等功能,react则需要去找第三方库…
暂无图片
mfbz ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络:信息往一个方向流动。包括MLP和CNN 循环神经网络:信息循环流动,网络隐含层输出又作为自身输入,包括RNN、LSTM、GAN等。 RNN模型结构如下图所示: 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
mfbz ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法! 拓扑排序的过程中,由于需要查找所有以某顶点为尾的弧,即找到该顶点的所有出边,故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同,由于要查找入度为0的点…
暂无图片
珊珊日记 ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法! 拓扑排序的过程中,由于需要查找所有以某顶点为尾的弧,即找到该顶点的所有出边,故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同,由于要查找入度为0的点…
暂无图片
珊珊日记 ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息,消息是不定长,首先所有信息先放入 Commitlog中,每一条消息放入Commitlog的时候都需要上锁,确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…