【数据挖掘实战】——科大讯飞:跨境广告ROI预测

news2024/11/16 11:26:52

🤵‍♂️ 个人主页:@Lingxw_w的个人主页

✍🏻作者简介:计算机科学与技术研究生在读
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 

目录

一、赛题背景

二、赛事任务

三、赛题数据

四、评价指标

五、Baseline解题思路

1、读取数据

2、数据预处理

3、LGBMRegressor

4、可视化


一、赛题背景

跨境电商广告 ROI(收入/广告消耗)预测一直以来都是效果类广告领域的重要挑战。在当前全球化背景下,海外媒体流量成本不断攀升,加之广告主对广告投入产出的关注日益加强,使得对广告投放效果的预测成为当下迫切需要解决的问题。

在解决这个问题过程中,人工智能和大数据技术发挥着至关重要的作用。通过对广告投放数据的深入分析,我们可以挖掘出潜在的规律和趋势,从而为广告主提供更精准的效果预测。这样的预测结果可以帮助广告主更好地制定广告策略,优化广告素材和投放时机,以提高整体营销效能。

二、赛事任务

本次大赛提供了讯飞AI营销旗下独立站电商业务的广告投放数据作为训练样本。参赛选手需基于所提供的数据样本构建预测模型,并在每天的前 13 小时内,每小时生成当日 ROI 的预测值。这将有助于检验选手模型在不同时间点的预测准确性,进而优化广告投放策略。

三、赛题数据

出于数据安全保证的考虑,所有数据均为脱敏处理后的数据。训练集提供了若干天中13点以前每小时的样本,每条记录以广告ID和日期作为标识,其特征数据包含该小时内各类广告指标信息,标签是该广告在当天的ROI。测试集的区别仅为每条记录不包含当天的ROI字段。具体的数据字段定义将随数据集一起提供。

 下载地址:Datamining_project: 数据挖掘实战项目代码

赛题数据集由三部分组成:

  • 基础信息(用户、广告)

  • 当前投放信息(广告)

  • 累计投放信息(广告)

四、评价指标

依据提交的结果文件,采用加权平均绝对误差(Weighted Mean Absolute Error, WMAE)进行评价。

WMAE 的定义如下:

WMAE = (1/N) * Σ [w(t) * |y_true(t) - y_pred(t)|]

其中,N 是预测样本数量;w(t) 是时间加权因子,范围为 [0, 1],随着 t(当前小时)接近 12(一天中午以前)而递增。我们选用线性递增函数表示 w(t):w(t) = (t+1)/ 13,其中 t 为当前小时(0-12);y_true(t) 是真实的当天 ROI;y_pred(t) 是预测的当天 ROI。

通过使用 WMAE 作为评估指标,我们鼓励参赛者开发出在一整天各个时间点都表现良好的预测模型。排名将根据参赛者提交的预测结果的 WMAE 从低到高进行,WMAE 越低表示预测性能越好。请注意不要使用规则将每天其他小时的预测值用最后一小时预测值替代,任何利用数据泄露提交的结果,最终成绩都将被作废。

五、Baseline解题思路

赛题是一个比较典型的计算广告类型的题目,需要对ROI进行回归。但在题中包含了较多的ID类型,如用户ID和广告ID等。

此外赛赛题中还报告了时间因素,可从用户+广告的角度考虑进一步的特征工程。

导入需要的一些库;

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

1、读取数据

读取数据

train_data = pd.read_csv('跨境电商效果广告ROI预测挑战赛公开数据/train.csv')
test_data = pd.read_csv('跨境电商效果广告ROI预测挑战赛公开数据/testA.csv')

train_data['datetime'] = pd.to_datetime(train_data['datetime'])
test_data['datetime'] = pd.to_datetime(test_data['datetime'])
train_data['datetime_hour'] = train_data['datetime'].dt.hour
test_data['datetime_hour'] = test_data['datetime'].dt.hour

train_data.drop('datetime', axis=1, inplace=True)
test_data.drop('datetime', axis=1, inplace=True)

2、数据预处理

在训练模型之前,我们通常都要对训练数据进行一定的处理。将类别编号就是一种常用的处理方法,比如把类别“男”,“女”编号为0和1。可以使用sklearn.preprocessing中的LabelEncoder处理这个问题。

将n个类别编码为0~n-1之间的整数(包含0和n-1)。LabelEncoder

from sklearn.preprocessing import LabelEncoder

for col in ['ad_id', 'ad_set_id', 'campaign_id', 'product_id', 'account_id', 'post_id_emb', 'post_type', 'countries']:
    lbl = LabelEncoder()
    lbl.fit(list(train_data[col]) + list(test_data[col]))
    train_data[col] = lbl.transform(list(train_data[col]))
    test_data[col] = lbl.transform(list(test_data[col]))

3、LGBMRegressor

from lightgbm import LGBMRegressor
model = LGBMRegressor()

train_data['product_id_roi_mean'] = train_data['product_id'].map(train_data.groupby(['product_id'])['roi'].mean())
test_data['product_id_roi_mean'] = test_data['product_id'].map(train_data.groupby(['product_id'])['roi'].mean())

train_data['account_id_roi_mean'] = train_data['account_id'].map(train_data.groupby(['account_id'])['roi'].mean())
test_data['account_id_roi_mean'] = test_data['account_id'].map(train_data.groupby(['account_id'])['roi'].mean())

train_data['countries_roi_mean'] = train_data['countries'].map(train_data.groupby(['countries'])['roi'].mean())
test_data['countries_roi_mean'] = test_data['countries'].map(train_data.groupby(['countries'])['roi'].mean())

train_data['datetime_hour_roi_mean'] = train_data['datetime_hour'].map(train_data.groupby(['datetime_hour'])['roi'].mean())
test_data['datetime_hour_roi_mean'] = test_data['datetime_hour'].map(train_data.groupby(['datetime_hour'])['roi'].mean())

model.fit(
    train_data.iloc[:].drop('roi', axis=1),
    train_data.iloc[:]['roi'], categorical_feature=['ad_id', 'ad_set_id', 'campaign_id', 'product_id', 'account_id', 'post_id_emb', 'post_type', 'countries']
)

df = pd.read_csv('提交示例.csv')
df['roi'] = model.predict(test_data.iloc[:].drop('uuid', axis=1))
df.to_csv('submit.csv', index=None)

4、可视化

# coding: utf-8
import lightgbm as lgb
import pandas as pd
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV

# 加载数据
print('加载数据...')
df_train = pd.read_csv('../data/regression.train.txt', header=None, sep='\t')
df_test = pd.read_csv('../data/regression.test.txt', header=None, sep='\t')

# 取出特征和标签
y_train = df_train[0].values
y_test = df_test[0].values
X_train = df_train.drop(0, axis=1).values
X_test = df_test.drop(0, axis=1).values

print('开始训练...')
# 直接初始化LGBMRegressor
# 这个LightGBM的Regressor和sklearn中其他Regressor基本是一致的
gbm = lgb.LGBMRegressor(objective='regression',
                        num_leaves=31,
                        learning_rate=0.05,
                        n_estimators=20)

# 使用fit函数拟合
gbm.fit(X_train, y_train,
        eval_set=[(X_test, y_test)],
        eval_metric='l1',
        early_stopping_rounds=5)

# 预测
print('开始预测...')
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration_)
# 评估预测结果
print('预测结果的rmse是:')
print(mean_squared_error(y_test, y_pred) ** 0.5)

参考链接:

机器学习应用之LGBM详解 - 知乎

2023 iFLYTEK A.I.开发者大赛-讯飞开放平台

其他数据挖掘实战案例: [订阅链接]

【数据挖掘实战】——航空公司客户价值分析(K-Means聚类案例)

【数据挖掘实战】——中医证型的关联规则挖掘(Apriori算法)

【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)

【数据挖掘实战】——应用系统负载分析与容量预测(ARIMA模型)

【数据挖掘实战】——电力窃漏电用户自动识别(LM神经网络和决策树)

【数据挖掘实战】——基于水色图像的水质评价(LM神经网络和决策树)

 

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

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

相关文章

云服务器上使用Docker Compose创建Redis三主三从集群

一、环境 云服务器Ubuntu20.4Dokcer 24.0.2 二、步骤 目录结构是这样: 绿色的目录是用来存储容器中的文件,不需要我们手动创建,将路径配置在配置文件中即可。褐色的目录和文件需要自己手动创建。 我们一共创建7个容器: redis…

RabbitMq消息堆积问题及惰性队列

消息堆积问题 当生产者发送消息的速度超过了消费者处理的速度,就会导致队列的消息堆积,知道队列存储消息达到上限。最早接受的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。 解决消费对接问题 1.增加更多的消…

Hive执行计划之只有map阶段SQL性能分析和解读

文章目录 概述1.不带函数操作的select-from-where型简单SQL1.1执行示例1.2 运行逻辑分析1.3 伪代码解释 2.带普通函数和运行操作符的普通型SQL执行计划解读2.1 执行计划解读2.2 伪代码解释逻辑 概述 可能所有的SQLboy刚接触SQL语句的时候都是select xxx from xxx where xxx。在…

如何分析问题、找到性能瓶颈、掌握性能调优?一文讲懂性能测试

背景 当下云计算、大数据盛行的背景下,大并发和大吞吐量的需求已经是摆在企业面前的问题了,其中网络的性能要求尤为关键,除了软件本身需要考虑到性能方面的要求,一些硬件上面的优化也是必不可少的。 作为一名测试工作者&#xf…

Ubuntu18.04 离线安装gcc,g++,make依赖包

1. 离线安装背景 因为项目现场的服务器无法连接互联网,只有内网环境,但是需要安装redis和nginx,所以需要安装gcc,g,make等依赖包。 2. 如何获取依赖包 需要准备一台可以连接互联网的电脑(如:个人电脑上的虚拟机安装一…

Java网络开发(Asynchronous异步)—— 从 Jsp 到 Ajax 的 axios 到 vue 同步请求 到 异步请求

目录 引出如果想做bilibili边看视频边评论怎么搞?Ajax是啥?& axios的语法1. Ajax(Asynchronous JavaScript And XML)简介2. axios语法 及其与 java后端交互(1)get请求(2)post请求…

海外社媒营销揭秘:品牌出海的关键策略与注意事项

在全球化的背景下,品牌出海已成为众多企业拓展市场的必然选择。而海外社媒营销作为一种有效的推广手段,不仅能够帮助品牌建立海外影响力,还可以增强品牌知名度、提高销售额。然而,要在海外社媒平台上实施成功的营销策略&#xff0…

网络安全零基础都能看的SQL注入

1.1 .Sql 注入攻击原理 SQL 注入漏洞可以说是在企业运营中会遇到的最具破坏性的漏洞之一,它也是目前被利用得最多的漏洞。要学会如何防御 SQL 注入,首先我们要学习它的原理。 针对 SQL 注入的攻击行为可描述为通过在用户可控参数中注入 SQL 语法&#x…

高压脉冲电源和高压放大器应用领域的区别

在之前的科普中我们讲解了高压脉冲电源和高压放大器的定义及二者区别,其实除此之外,它们在应用上也是有不同倾向性的,那么今天让安泰测试Agitek为大家分享高压脉冲电源和高压放大器应用领域究竟有什么不同? 高压脉冲电源的应用领…

躺不平摆不烂的测试员如何自救?

随着测试从业年龄的增加,毕业的概率大增,而机会骤减,从而使测试员陷入躺不平、摆不烂的状态。 相较于开发员,测试员是没有资格躺平的,毕竟测试员没可能从短短几年黄金时间,从工作中积累到足以躺平的财富&a…

wordpress去除分类URL的categpory

前言 在日常使用Wordpress搭建网站时,发现文章或者分类页的URL地址中默认带有Category,URL层级过长会影响我们网站SEO的优化,也不利于用户体验。这里讲一下如何去除URL中categpory的方法。 操作 第一步先登录到WordPress后台,然…

前端样式网站(前端css框架)

1. Bootstrap:Bootstrap The most popular HTML, CSS, and JS library in the world.Bootstrap 是最流行的 CSS 框架,提供了丰富的前端样式和组件,非常适合开发响应式网站和应用程序。 2. Bulma:Bulma: Free, open source, and modern CSS framework based on FlexboxBulma 是…

nodejs 版本切换(windows版)

一、按健winR弹出窗口,键盘输入cmd,然后敲回车。然后进入命令控制行窗口,并输入where node查看之前本地安装的node的路径。 二、找到上面找到的路径,将node.exe所在的父目录里面的所有东西都删除。 三、从官网下载安装包 https://github.com/…

一文看懂!shell编程-【提取IP地址、文件归档、发送消息】

【引言】 您是否曾经遇到过需要提取大量IP地址、归档文件、发送消息等烦琐的工作? 如果是,那么您一定不能错过这篇文章! 在本文中,我们将探讨Shell编程的各种技巧和方法,帮助您轻松完成这些任务。无需任何编程基础&…

这些常用的IC专业术语,你了解多少?

IC工程师在日常的学习和工作中或多或少会都遇到一些专业的IC词汇。下面就来为大家盘点一下各个岗位的专业高频名词。(文档内持续更新,全文档文末可领) 数字功能验证高频名词 CIN (Carry INput):进位输入 COUT(Carry OUTput)&…

关于数据库分库分表的一点想法

1 开篇 面对数据的激增,相信大家也都有分库分表的一些方案,这次的这个分享,算是自己的一个想法,可以当做一个参考方案,也欢迎相互讨论。 话不多说,直接进入主题。 日常开发中,实现数据库的分库…

系统稳定性与高可用保障

一、前言 高并发、高可用、高性能被称为互联网三高架构,这三者都是工程师和架构师在系统架构设计中必须考虑的因素之一。今天我们就来聊一聊三 H 中的高可用,也是我们常说的系统稳定性。 > 本篇文章只聊思路,没有太多的深入细节。阅读全…

“海底长城”合龙!揭秘深中海底隧道中的无损检测技术

作为工业大国,近年来国家在各类“大国工程”中投入巨大,同时也获得了喜人的成果,从长江三峡水利枢纽造福全国人民,到天问落火、空间站核心舱在轨开工,天舟二号货运飞船稳靠太空港,神舟十二号载人飞船成功发…

博睿数据应邀出席第五届双态IT北京用户大会,分享《如何帮助用户构建高级可观测性》

6月10日,第五届双态IT北京用户大会在北京召开,来自IT行业的各位专家齐聚一堂,分享行业理念、发展趋势、运维方法以及最佳实践。 博睿数据应邀出席大会,作《如何帮助用户构建高级可观测性》主题演讲,从云原生带来的挑战…

vue-cli3搭建项目实现移动端自适应----- flexible和 postcss-px2rem

1、安装 flexible和 postcss-px2rem npm i lib-flexible postcss-px2rem --save 2.在项目入口文件main.js 中引入lib-flexible import lib-flexible 3. 把目录 public/index.html 中的这个标签注释!由于flexible会动态给页面header中添加标签 4.配置postcss-px2r…