功能豐富的推薦系統

功能豐富的推薦系統

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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章