♂️ 个人主页:@艾派森的个人主页
✍作者简介:Python学习者
希望大家多多支持,我们一起进步!
如果文章对你有帮助的话,
欢迎评论 点赞 收藏 加关注+
目录
1.项目背景
2.项目简介
2.1研究目的及意义
2.2研究方法与思路
2.3技术工具
3.算法原理
4.项目实施步骤
4.1理解数据
4.2探索性数据分析
4.3数据预处理
4.4特征工程
4.5模型构建
4.6模型评估
5.实验总结
源代码
近几年,随着经济的高速发展,广告市场的发展受到极大的促进,广告客户的数目和消费开支也在持续增加。数据表明,在2015-2019年这段时间里,广告业的规模一直保持着较大幅度的增长。2015年,广告业的市场规模从5973亿元,到2019年的8937亿元,以每年10.6%的速度递增。中商工业研究院预计,中国广告业将在2021年达到10229亿元。
中国的广告业进入了一个新的阶段,网络广告的渗透率逐步上升。2020年,中国广告市场的增长速度因疫情而下滑6%,但互联网广告市场凭借互联网增长惯性、用户增长红利和疫情对线上业务的机会,仍保持了13%的增速。与2020年相比,2021年的增长速度将会超过11%,而网络广告的增长速度将会有所减缓,但是增长速度将会接近12%。网络广告的渗透率从2018年的51.3%上升到2020年的59.5%,到2022年的60.7%。在移动网络广告中,以视频为主导的信息流已逐渐成为主流。手机连通网的广告市场占有很大的比重,从2018到2020年的88%-90%,并有望在2022年内继续保持不变。
在未来,网络广告的传播渠道和媒体资源将会越来越丰富,从而更好地适应各种广告主的个性化、个性化的广告宣传需要,在未来的网络广告中,无论是头部媒体还是长尾媒体,都将拥有广阔的发展空间。同时,借助网络的优势,在未来,实现线上、线下的全链条营销,将是一个企业的双赢选择。
广告投放策略的重中之重就是广告媒介和广告内容,在选择广告媒介上,需要结合媒体规格、点位、播放频次和广告投放费用,以便广告主轻松选择广告媒介。其次在广告内容设计上,需要吸引消费者产生消费的前提是引起兴趣与关注,引导消费者了解产品、认同产品,这便与广告的详细内容、整体创意有关,在投放机制正确的前提下,广告内容将在最后引起消费,从而达到广告投放目的。投放广告是品牌曝光的有效手段,但想要消费者从广告中认识到认知最后认同,广告投放策略就会变得非常重要。本次实验,我们使用Python大数据分析方法研究广告投放收益分析。
1.使用pandas读取广告收益数据,然后了解数据基本信息。
2.通过matplotlib中的scatter散点图可视化观察电视、广播、报纸三者与收益的相关性。
3.使用pandas中的dropna和drop_duplicates删除原始数据集中的缺失值和重复值。
4.使用train_test_split拆分原始数据集,训练集比例设置为0.8,测试集比例设置为0.2。
5.使用sklearn中的线性回归算法构建回归模型,其中以电视、广播和报纸三列数据为自变量,收益为因变量训练模型。
6.使用sklearn中的平均绝对误差、均方误差和R方对模型进行评估。
Python版本:3.9
代码编辑器:jupyter notebook
线性回归是一个主要影响因素作为自变量来解释因变量的变化,在现实问题研究中,因变量的变化往往受几个重要因素的影响,此时就需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,这就是多元回归亦称多重回归。当多个自变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归。 设y为因变量X1,X2…Xk为自变量,并且自变量与因变量之间为线性关系时,则多元线性回归模型为:Y=b0+b1x1+…+bkxk+e
其中,b0为常数项,b1,b2…bk为回归系数,b1为X1,X2…Xk固定时,x1每增加一个单位对y的效应,即x1对y的偏回归系数;同理b2为X1,X2…Xk固定时,x2每增加一个单位对y的效应,即,x2对y的偏回归系数,等等。如果两个自变量x1,x2同一个因变量y呈线相关时,可用二元线性回归模型描述为:y=b0 +b1x1 +b2x2 +e
建立多元线性回归模型时,为了保证回归模型具有优良的解释能力和预测效果,应首先注意自变量的选择,其准则是:
(1)自变量对因变量必须有显著的影响,并呈密切的线性相关;
(2)自变量与因变量之间的线性相关必须是真实的,而不是形式上的;
(3)自变量之间应具有一定的互斥性,即自变量之间的相关程度不应高于自变量与因变量之间的相关程度;
(4)自变量应具有完整的统计数据,其预测值容易确定。
首先加载广告收益数据集并调用.head()方法查看数据前五行
接着调用.shape查看数据集有多少行多少列
结果显示数据集共有1000行,4列数据。
调用.describe()对原数据集进行描述性统计
描述性统计结果中,我们可以看到电视、广播、报纸、收益这四列数据的总数、均值、方差、最大值、最小值、四分位数等信息。
接着调用.info()查看数据基本信息
从结果中可以看出,这四列数据都是浮点型数据。
最后,使用散点图分别观察电视、广播和报纸与收益之间的相关性。
从图中可看出电视投放与收益之间的正相关性较强,电视投放越大,收益越高。
从图中可看出广播投放与收益也有着较强的正相关性,但是相关性没有电视投放的强,当广播投放越多的时候,也存在着少量异常数据。
从图中可看出报纸投放与收益的相关性很弱,正相关性较弱。
这里对原始数据集进行删除缺失值和重复值,最后得到的有效数据共有991条。
这里我们选取了电视、广播、报纸三列数据作为自变量,收益作为因变量。在拆分数据集的时候,训练集的比例为0.8,测试集的比例为0.2
这里调用sklearn中的LinearRegression构建线性回归模型,并且使用拆分的训练集数据进行训练,最后使用模型预测测试集并查看前十条预测结果。
从结果可看出模型的平均绝对误差为21.44,均方误差为795.58,模型的R方为0.86,模型效果较好。
在数据探索阶段,我们分析了三种广告投放渠道与收益之间的关系,结果表明三种渠道效果电视>广播>报纸。所以该企业应该在这三种渠道投放费用为电视>广播>报纸,这样能使得收益最大化。最后建模阶段,我们选用了线性回归模型,最后得到的模型R方值为0.86,效果较好。
心得与体会:
通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。
在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等
在此次实战中,我还学会了下面几点工作学习心态:
1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。
2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。
3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。
这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。
import pandas as pd
import warnings
warnings.filterwarnings('ignore') # 忽略警告
# 读取数据
data = pd.read_excel('广告投放收益数据.xlsx')
print(data.head())
# 查看数据有几行几列
print(data.shape)
# 描述性统计
print(data.describe())
# 数据基本信息
print(data.info())
import matplotlib.pylab as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False #解决符号无法显示
# 电视投放与收益之间的相关性
plt.scatter(data['电视'],data['收益'])
plt.title('电视投放与收益之间的相关性')
plt.xlabel('电视投放')
plt.ylabel('收益')
plt.show()
# 广播投放与收益之间的相关性
plt.scatter(data['广播'],data['收益'])
plt.title('广播投放与收益之间的相关性')
plt.xlabel('广播投放')
plt.ylabel('收益')
plt.show()
# 报纸投放与收益之间的相关性
plt.scatter(data['报纸'],data['收益'])
plt.title('报纸投放与收益之间的相关性')
plt.xlabel('报纸投放')
plt.ylabel('收益')
plt.show()
# 删除缺失值
data.dropna(inplace=True)
# 删除重复值
data.drop_duplicates(inplace=True)
print(data.shape)
X = data.drop('收益',axis=1)
y = data['收益']
# 拆分数据集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y,test_size=0.2)
# 构建线性回归模型
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(x_train,y_train)
y_pred = lr.predict(x_test)
print(y_pred[:10])
# 模型评估
from sklearn.metrics import mean_absolute_error,mean_squared_error,r2_score
print('模型平均绝对误差MAE:',mean_absolute_error(y_test,y_pred))
print('模型均方误差:',mean_squared_error(y_test,y_pred))
print('模型R方值:',r2_score(y_test,y_pred))