ctr/cvr预估之NFM模型

news2025/1/19 16:34:08

ctr/cvr预估之NFM模型

在数据驱动的广告和推荐系统中,准确预测用户的点击行为(Click-Through Rate, CTR)和转化行为(Conversion Rate, CVR)是提升营销效率和用户体验的关键。因子分解机(Factorization Machines, FM)模型,自2010年问世以来,以其卓越的性能和对稀疏数据的高效处理能力,在CTR/CVR预估领域取得了显著成就。然而,随着业务需求的不断演进和数据量的爆炸性增长,传统FM模型在捕捉更深层次特征交互方面显得力不从心。

在这样的背景下,神经因子分解机(Neural Factorization Machine, NFM)模型应运而生。NFM模型继承了FM的因子分解特性,同时引入深度学习框架,通过叠加神经网络层来挖掘更复杂的特征交互模式。这种结合传统机器学习与深度学习优势的创新模型,不仅能够处理大规模稀疏数据,更能捕捉数据中的隐含结构和深层次特征关系,为CTR/CVR预估带来了新的突破。

文章目录

  • ctr/cvr预估之NFM模型
  • 一、什么是NFM模型
  • 二、NFM模型提出背景
  • 三、NFM模型原理
  • 四、FM模型注意事项
  • 五、NFM模型的核心参数
  • 六、NFM模型实现代码


一、什么是NFM模型

NFM模型(Neural Factorization Machine,神经因子分解机)是一种结合了因子分解机(FM)和深度学习网络的推荐系统和点击率(CTR)预估模型。NFM旨在通过利用FM处理稀疏特征的能力,并结合深度神经网络来捕获更复杂的特征交互,从而提高模型的预测性能。

二、NFM模型提出背景

传统的FM模型只能进行特征的二阶组合,无法组合高阶的特征,而DNN具有组合高阶特征的能力和非线性能力,因此考虑将FM模型与DNN结合起来,2017年新加坡国立大学基于此提出了NFM模型。
NFM模型的主要思路是采用一个表达能力更强的函数来替代FM二阶隐向量内积的部分,以此捕捉更复杂的非线性关系。模型在Embedding层和DNN层中间引入了BI-Interaction Pooling层。此层是NFM的核心,用于模拟FM中的特征交叉项。不同于FM直接将特征向量的内积作为交叉项,NFM首先计算所有特征嵌入的元素级求和的平方与平方的求和的差,然后通过这种方式捕获特征间的交互信息。在Bi-Interaction层之后,NFM使用一个或多个深度神经网络层来进一步学习特征间复杂的非线性交互

三、NFM模型原理

FM模型拟合公式:
在这里插入图片描述
在FM基础之上进行改进,NFM模型拟合公式:
在这里插入图片描述
上面公式中的f(x)即为BI-Interaction Pooling层计算公式:
在这里插入图片描述
化简上式:
在这里插入图片描述

四、FM模型注意事项

  • Bi-Interaction Pooling的作用理解:在NFM中,Bi-Interaction Pooling层用于模拟FM中的特征交叉项。其计算过程涉及两部分:所有特征嵌入的元素级求和的平方,以及每个特征嵌入的平方的总和。理解这些计算如何捕捉特征间的交互非常重要,因为它直接影响到模型对特征组合的学习能力。

  • 深度神经网络的设计:NFM的深度神经网络部分用于在Bi-Interaction Pooling后进一步学习和提取特征间复杂的非线性关系。在设计网络结构时,需要注意选择合适的层数、每层的神经元数量以及激活函数,以达到最佳的特征表达和预测性能。

  • 特征嵌入的维度一致性:与FM模型类似,NFM要求各个特征的嵌入维度应保持一致(主要针对离散特征),这样在Bi-Interaction Pooling层和深度神经网络层之间进行特征组合时才能有效地进行操作。确保所有特征的嵌入维度相同,可以避免在模型训练过程中出现的维度不匹配问题。

五、NFM模型的核心参数

NFM核心参数与FM核心参数类似,见
NFM模型核心参数

六、NFM模型实现代码


import os
import pandas as pd
import numpy as np
import tqdm
from tqdm.autonotebook import *
import random
import warnings
import gc
import time
import datetime
from keras.preprocessing.text import Tokenizer, text_to_word_sequence
from keras.preprocessing.sequence import pad_sequences
from keras.preprocessing import text, sequence
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import LabelEncoder
from keras.layers import Dense, Embedding, Input, Flatten, Concatenate, Dropout,Reshape,concatenate,Lambda,Add,Subtract,Activation,BatchNormalization
import tensorflow as tf
import keras.backend as K
from keras.models import Model
warnings.filterwarnings('ignore')
……

完整代码参考公众号
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1847869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568技术笔记七 安装Ubuntu Linux

在新弹出的窗口中,单击“CD/DVD (SATA)”。如下图所示: 在右侧选择“使用ISO映像文件”。然后单击“浏览”,找到SAIL-RK3568开发板光盘->通用工具->虚拟机Ubuntu->ubuntu-18.04.4-desktop-amd64.iso。最后点击…

韩顺平0基础学java——第28天

p569-591 坦克大战!(绘图监听事件线程文件处理) 绘图 绘图原理 Component类提供了两个和绘图相关最重要的方法: 1. paint(Graphics g)绘制组件的外观 2. repaint()刷新组件的外观。 当组件第一次在屏幕显示的时候,程序会自动的调用paint()…

Dify知识库接入微信

Dify知识库接入微信 看到此文章,相信您已经搭建好了Dify知识库,还没有Dify知识库请先部署好后再来尝试将Dify接入微信 准备材料如下 搭建好的Dify知识库里的api接口和key24小时不关机的服务器一个 (推荐浪浪云的服务器简单方便)需要一个微信…

数学建模整数规划学习笔记

与线性规划的本质区别在于决策变量是否取整。 (1)分支定界法 若不考虑整数限制先求出相应松弛问题的最优解: 若松弛问题(线性规划)无解,则ILP(整数规划)无解。 若求得的松弛问题最…

校园任务平台系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,论坛管理,任务咨询管理,用户管理,基础数据管理 前台账户功能包括:系统首页,个人中心,任务资讯公告&#…

代码随想录第29天|贪心算法

基础知识 原理: 选择每一阶段的最优解, 从而达到全局最优解套路: 无, 只能举反例, 想不出反例则可以尝试用贪心算法 455. 分发饼干 思路: 使用贪心策略 每次用大饼干满足大胃口的孩子(用小饼干则会浪费)或用小饼干满足小胃口的孩子 一定是遍历孩子, 不能遍历饼干, 否则结果不…

大模型时代,新手和程序员如何转型入局AI行业?

在近期的全国两会上,“人工智能”再次被提及,并成为国家战略的焦点。这一举措预示着在接下来的十年到十五年里,人工智能将获得巨大的发展红利。技术革命正在从“互联网”向“人工智能”逐步迈进,我将迎来新一轮技术革新和人才需求…

鸿蒙开发:【组件启动规则(FA模型)】

组件启动规则(FA模型) 启动组件是指一切启动或连接应用组件的行为: 启动PageAbility、ServiceAbility,如使用startAbility()等相关接口。连接ServiceAbility、DataAbility,如使用connectAbility()、acquireDataAbili…

MySQL之复制(八)

复制 复制和容量规划 备库什么时候开始延迟 一个关于备库比较普遍的问题是如何预测备库会在何时跟不上主库。很难去描述备库使用的复制容量为5%与95%的区别,但是至少能够在接近饱和前预警并估计复制容量。首先应该古纳差复制延迟的尖刺。如果有复制延迟的曲线图&…

如何将现有系统逐步优化成微服务设计

目录 基础服务改造核心步骤准备阶段实施阶段 基础服务设计 本文诞生于学习架构实践专栏后的深思以及总结,结合公司之前“大泥球”的架构风格,改造服务设计的思维。 改造公司系统服务主要原因:1、代码类似“屎山”,牵一发而动全身&…

Freertos-----任务之间的消息传递(使用消息队列信号量方法)

这次来分享任务之间的数据传递的方法,方法有很多种,我展示2种,让大家对freertos有更深刻的印象 目录 消息队列 信号量 消息队列 首先直接打开普中的例程,然后在里面加上ADC的驱动代码,先初始化外设先,我…

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗?

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗? 今天亚足联官方宣布了世预赛18强赛分组抽签仪式时间,本次抽签仪式将于6月27日15点在马来西亚吉隆坡举行。除了抽签时间之外,足联还…

L55--- 257.二叉树的所有路径(深搜)---Java版

1.题目描述 2.思路 (1)因为是求二叉树的所有路径 (2)然后是带固定格式的 所以我们要把每个节点的整数数值换成字符串数值 (3)首先先考虑根节点,也就是要满足节点不为空 返回递归的形式dfs(根节…

Service方法增加@Asyn注解后导致bean无法找到 NoSuchBeanDefinitionException

Service方法增加Asyn注解后导致bean无法找到 NoSuchBeanDefinitionException 场景处理方法原因 场景 首先确认的是Service添加了Service或Component等注解,另外也增加了ComponentScan确定扫描的包路径是包含对应Service的,但就是无法找到这个bean。 通…

C51与MDK共存版本安装教程

目录 一、安装准备 1.1 新建文件夹 1.2 网盘链接-加Q 667198390 二、 双版本共存安装教程 2.1 安装Keil5 C51 2.2 安装Keil5 MDK 2.3 C51和MDK的共存 2.4 生成许可证 2.5 安装STM32Pack包 一、安装准备 1.1 新建文件夹 如下图: 在合适的网盘里&#xff08…

阿里云如何实现express的自动化部署(保姆级教程)

本篇文章将详细介绍一下阿里云如何实现express的自动化部署,作者本人总结的保姆级教程!!! 首先去阿里云官网 (阿里云-计算,为了无法计算的价值) 搜索函数计算fc 如果没有开通过选择免费开通,…

计算机组成原理 | 计算机系统概述

CPI:(Clockcycle Per Instruction),指每条指令的时钟周期数。 时钟周期:对CPU来说,在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟周期 是一个时钟脉冲所…

【第24章】Vue实战篇之用户信息展示

文章目录 前言一、准备1. 获取用户信息2. 存储用户信息3. 加载用户信息 二、用户信息1.昵称2.头像 三、展示总结 前言 这里我们来展示用户昵称和头像。 一、准备 1. 获取用户信息 export const userInfoService ()>{return request.get(/user/info) }2. 存储用户信息 i…

服装连锁实体店bC一体化运营方案

一、引言 随着互联网的快速发展和消费者购物习惯的变化,传统服装连锁实体店在面对新的市场环境下亟需转型升级。BC(Business to Consumer)一体化运营方案的实施将成为提升服装连锁实体店竞争力和顾客体验的关键举掖。商淘云详细介绍服装连锁…

深度学习论文: Depth Anything V2

深度学习论文: Depth Anything V2 Depth Anything V2 PDF: https://arxiv.org/pdf/2406.09414v1 代码:https://depth-anything-v2.github.io/ PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks …