16.8. Zengin Öznitelikli Tavsiye Sistemleri¶ Open the notebook in SageMaker Studio Lab
Etkileşim verileri, kullanıcıların tercih ve ilgi alanlarının en temel göstergesidir. Daha önce tanıtılan modellerde kritik bir rol oynar. Ancak, etkileşim verileri genellikle son derece seyrektir ve bazen gürültülü olabilir. Bu sorunu çözmek için öğelerin öznitelikleri, kullanıcı profilleri ve hatta etkileşimin hangi bağlamda gerçekleştiği gibi yan bilgileri tavsiye modeline entegre edebiliriz. Bu özniteliklerin kullanılması, özellikle etkileşim verilerinin eksik olduğu durumlarda, bu özniteliklerin kullanıcıların ilgi alanlarının etkili bir tahmincisi olabileceği için önerilerde bulunmaya yardımcı olur. Bu nedenle, tavsiye modellerinin bu özniteliklerle başa çıkma ve modele bir miktar içerik/bağlam farkındalığı verme kabiliyetine sahip olması esastır. Bu tür öneri modellerini göstermek için, çevrimiçi reklam önerilerinde tıklama oranı (CTR) hakkında başka bir görev tanıtıyoruz (McMahan et al., 2013) ve anonim bir reklam verisi sunuyoruz. Hedefli reklam hizmetleri yaygın ilgi gördüler ve genellikle tavsiye motorları olarak çerçevelenirler. Kullanıcıların kişisel zevkine ve ilgi alanlarına uyan reklamların önerilmesi, tıklama oranının iyileştirilmesi açısından önemlidir.
Dijital pazarlamacılar, müşterilere reklam göstermek için çevrimiçi reklamcılık kullanır. Tıklama oranı, reklamverenlerin gösterim sayısı başına reklamlarında aldıkları tıklama sayısını ölçen bir metriktir ve aşağıdaki formülle hesaplanan bir yüzde değer olarak ifade edilir:
Tıklama oranı, tahmin algoritmalarının etkinliğini gösteren önemli bir sinyaldir. Tıklama oranı tahmini, bir web sitesindeki bir şeyin tıklanma olabilirliğini tahmin etme görevidir. CTR tahmini modelleri sadece hedefli reklam sistemlerinde değil, aynı zamanda genel öğe (örn. filmler, haberler, ürünler) öneri sistemlerinde, e-posta kampanyalarında ve hatta arama motorlarında da kullanılabilir. Ayrıca kullanıcı memnuniyeti, dönüşüm oranı ile de yakından ilişkilidir ve reklamverenlerin gerçekçi beklentileri belirlemelerine yardımcı olabileceğinden kampanya hedeflerini belirlemede yardımcı olabilir.
import os
from collections import defaultdict
from mxnet import gluon, np
from d2l import mxnet as d2l
16.8.1. Çevrimiçi Reklam Veri Kümesi¶
İnternet ve mobil teknolojinin önemli gelişmeleriyle, çevrimiçi reklamcılık önemli bir gelir kaynağı haline geldi ve İnternet endüstrisinde gelirin büyük çoğunluğunu oluşturmaktadır. Gündelik ziyaretçilerin ödeme yapan müşterilere dönüştürülmesi için kullanıcıların ilgi alanlarını çeken reklamları veya ilgili reklamları görüntülemek önemlidir. Tanıtılan veri kümesi bir çevrimiçi reklam veri kümesidir. Bir reklamın tıklanıp (1) tıklanmadığını (0) belirten hedef değişkeni temsil eden ilk sütunla birlikte 34 alandan oluşur. Diğer tüm sütunlar kategorik özniteliklerdir. Sütunlar reklam kimliğini, site veya uygulama kimliğini, cihaz kimliğini, zamanı, kullanıcı profillerini vb. temsil edebilir. Özniteliklerin gerçek anlamı anonimleştirme ve gizlilik endişesi nedeniyle açıklanmamıştır.
Aşağıdaki kod veri kümesini sunucumuzdan indirir ve yerel veri klasörüne kaydeder.
#@save
d2l.DATA_HUB['ctr'] = (d2l.DATA_URL + 'ctr.zip',
'e18327c48c8e8e5c23da714dd614e390d369843f')
data_dir = d2l.download_extract('ctr')
Sırasıyla 15000 ve 3000 örnekten/satırdan oluşan bir eğitim kümesi ve bir test kümesi bulunmaktadır.
16.8.2. Veri Kümesi Sarmalayıcı¶
Veri yükleme kolaylığı için, CSV dosyasından reklam veri kümesini
yükleyen ve DataLoader
tarafından kullanılabilen bir
CTRDataset
’i uyguluyoruz.
#@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_v: idx for idx, feat_v in enumerate(feat_values)}
for i, feat_values in feat_mapper.items()}
self.defaults = {i: len(feat_values) for i, feat_values 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']
Aşağıdaki örnek, eğitim verilerini yükler ve ilk kaydı yazdırır.
train_data = CTRDataset(os.path.join(data_dir, 'train.csv'))
train_data[0]
(array([ 143., 144., 227., 238., 957., 1250., 1471., 1566., 1624.,
1706., 2008., 2061., 2064., 2304., 2305., 2360., 2745., 2746.,
2747., 2748., 2892., 2988., 3165., 3170., 3194., 3195., 3597.,
3673., 3687., 3690., 3728., 3761., 3775., 3812.]),
[1.0])
Görüldüğü gibi, tüm 34 alan kategorik özniteliklerdir. Her değer,
karşılık gelen girdinin birebir kodlama dizinini temsil eder. \(0\)
etiketi, tıklanmadığı anlamına gelir. Bu CTRDataset
, Criteo ekran
reklam yarışması veri
kümesi
ve Avazu tıklama oranı tahmini veri
kümesi gibi diğer
veri kümelerini yüklemek için de kullanılabilir.
16.8.3. Özet¶
Tıklama oranı reklam sistemlerinin ve tavsiye sistemlerinin etkinliğini ölçmek için kullanılan önemli bir metriktir.
Tıklama oranı tahmini genellikle ikili sınıflandırma problemine dönüştürülür. Hedef, verilen özniteliklere göre bir reklamın/öğenin tıklanıp tıklanmayacağını tahmin etmektir.
16.8.4. Alıştırmalar¶
Sağlanan
CTRDataset
ile Criteo ve Avazu veri kümelerini yükleyebilir misiniz? Gerçek değerli özniteliklerden oluşan Criteo veri kümesinin kodunu biraz gözden geçirmeniz gerekebilir.