多元线性回归和广义线性回归 (2)— 广告投放金额预估

本文通过实例介绍了如何利用多元线性回归和广义线性模型预估广告投放金额。文章讨论了市场需求、建模流程中的数据探索、预处理、特征工程和模型评估,强调了数据质量和模型评估标准的重要性。
摘要由CSDN通过智能技术生成

背景

在上一篇博文 多元线性回归和广义线性回归 (1)中主要记录了多元线性回归模型的拟合思路以及模型求解的过程,但其还未解答如何评估模型的好坏。在这篇博文中,我将通过一个简单的实例记录一下回归模型的建立流程以及常用的模型评估方法。

实例介绍

市场需求

如今许多广告运营的团队每年都会向公司申请定额的营销预算,这些预算一部分会分配给传统营销渠道,例如电视,商业广告等,也有一部分资金会流向社交媒体营销。传统营销渠道的花费基本都在团队可预见的范围内,但是社交媒体平台由于用户流动性大,喜好变化迅速等原因,无法让广告运营部门迅速提供一个合理且有前瞻性的预算,这导致许多品牌商一直在迫切地寻求一种简单易操作的Media Spend Estimator,希望它既能估算出自己未来新产品的营销预算,也能大致了解到竞争对手进入社交媒体这个战场时所投入的筹码。

在这里插入图片描述

Facebook, Twitter等作为全球社交媒体营销最高效的平台,现目前还未能向品牌商们提供相应的预估途径。但在了解了Facebook,Twitter等平台基本的广告投放规则后,一个简单粗糙的Media Spend Estimator的创建还是非常可行的。

这些平台会让广告工作者事先设定好在该平台上想要触达的人群,人数以及触达的目的,平台会根据你的投入预算,利用推荐算法帮助你做个性化营销。倘若触达的目的是让被营销的用户点击博文并跳转进入自己的网站,那么用户每点击一次,该平台就会收取一次费用。不过如果投入的金额太少,平台在进行了预算评估后,推送效果可能会不尽人意,但如果投入的金额过多,又会浪费大量的流量资源,反而降低了营销效率。

话句话说,一个实用的评估模型在社交媒体营销精准快的高需求下,是十分必要的。(以下的截图显示,某品牌商在2018年一年中,仅在Twitter这个平台就花费了1000万来做广告投放。)
在这里插入图片描述

建立模型的注意事项

为了解决如何建立一个实用的预测模型,我们需要事先明白建立模型的意义。
在实际工作中,建立机器学习模型是为了回答具体的问题,其本质是构建一个能理解数据背后模式和关系的模型,而不仅仅是分析数据本身。

  1. 理解问题 在搜集数据之前,我们需要确保我们能理解问题所指向的本质,例如用户的需求是什么,建立模型的目的是什么,我们能够调用的资源有哪些等等。
  2. 确定模型的复杂度 模型的复杂度与数据的复杂程度有关,如果是建立一个短期的预测模型,通常只需要少量关键的参数便可以实现,但如果要从长远考量,可能需要考虑到更加复杂的经济,社会因素,公司未来的盈利走势等等,模型就会因需要容纳更多的数据信息变得更加复杂。
  3. 数据的准备 高性能模型区别于低性能模型的一个重要原因就是训练数据的质量。为了保证模型泛化能力,首先我们需要清楚数据的需求量。通常来说,数据量是影响参数个数的十倍以上,建模就可以正常进行;或者我们可以通过学习曲线来确定是否数据量越多,模型的收益越好,通过该曲线我们可以找到一个最合适的数量区间。其次,我们要对数据进行一定程度的清洗。例如要确保因变量符合正态分布,如果有理缺失值异常值,需要及时对其进行处理,观察与调整连续型变量和分类变量的异常情况等。
  4. 误差容忍度 根据实际需解决的问题,我们需要建立一个合理的模型评判标准,例如预测准确率达到百分之多少是可以接受的。

针对该实例,通过结合脸书广告投放的规则,我的猜测是:曝光率,触达人数,营销目的,持续天数以及用户互动情况等因素可能会影响到最终的Ads Spend。为了探讨我的假设,我从Facebook Ads Manager上下载了共三千多条广告营销记录,以Spend作为响应量,试图建立一个简单的回归预测模型。

建模流程

在这里插入图片描述

数据探索

1.导入必要的库与数据集

### 导入需要的库
import pandas as pd
import warnings
import matplotlib.pyplot as plt
import seaborn as sns
import glob
from datetime import datetime,timedelta
%matplotlib inline
warnings.filterwarnings('ignore')

2.导入数据集
这里为了不泄露所下载的广告数据的名字,广告名这一栏被我做了处理。

### 导入需要的库
files = glob.glob('A*') #为了方便导入,我把下载好的数据文件名的首字母改为A
Data = pd.DataFrame()
for f in files:
    temp = pd.read_excel(f)
    Data=Data.append(temp)
Data.head()

数据预处理

1.筛选数据集
根据我的猜测,我筛选出了以下一些我认为对广告花销有影响的变量。

  1. Amount Spent (USD): 广告花销 (被预测的对象)
  2. Starts,Ends:广告起始时间(广告持续的时间会影响广告的曝光与转化率)
  3. Objective:投放广告的目的(不同的目的会触达不同类别的人群,例如我只想打造品牌,那么我只需要增加我的曝光量,但是如果我想提升销量,那么我会更加注重购物链接的点击率等指标,这需要广告主在了解自身客户画像的前提下做定向投放。故预测其会对模型产生影响)
  4. Platform:平台(脸书或IG,社交平台调性不同,其社交社区所对应的用户属性也不同)
  5. Impressions,Reach:曝光量必然是一个重要因素
  6. Post Engagement:广告博文的用户互动量,预测其会对模型产生影响
#这里我粗暴地删除掉了没有花销数据的记录
Data=Data.dropna(axis = 0, subset = ['Amount Spent (USD)'] )
Data2=Data[['Starts','Ends','Objective','Amount Spent (USD)','Platform','Impressions','Reach','Post Engagement','Post Reactions','Post Comments','Post Shares']]

2.处理时间数据

# 将时间戳转换为日期
Data2['Starts']=Data2['Starts'].apply(lambda x: str(x)[0:10])
Data2['Ends']=Data2['Ends'].apply(lambda x: str(x)[0:10])

# 计算出每个广告的持续时间(用结束日期减去开始日期)
# from datetime import datetime,timedelta
Data2['Starts']=Data2['Starts'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d'))
Data2['Ends']=Data2['Ends'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d'))
Data2['Period 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值