在数字营销领域,了解广告点击率(CTR)对于企业来说至关重要。通过分析CTR数据,企业可以判断广告是否能够吸引目标受众并产生更多的互动。本文将指导如何使用随机森林分类器来预测用户是否会点击广告,以及如何优化广告活动。
在开始数据分析之前,需要导入一些必要的Python库。这些库包括pandas、numpy、sklearn等,它们将帮助处理数据、划分训练测试集、构建随机森林模型以及评估模型性能。
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import plotly.graph_objects as go
import plotly.express as px
import plotly.io as pio
pio.templates.default = "plotly_white"
以上代码导入了plotly库,用于数据可视化。还设置了Plotly的默认模板为“plotly_white”,这是一种预定义的浅色或白色背景配色方案。
数据是任何数据分析任务的基础。在本例中,使用了Gaurav Dutta在Kaggle上上传的数据集,为了方便分析,将其放在了GitHub上。
url = "https://raw.githubusercontent.com/ataislucky/Data-Science/main/dataset/ad_ctr.csv"
data = pd.read_csv(url)
print(data.head())
数据集中包含了用户在网站上的每日时间、年龄、地区收入、每日互联网使用量、广告主题行、城市、性别、国家和用户访问网站的时间戳等特征,以及用户是否点击了广告的标记。
首先,分析用户在网站上的每日时间是否影响CTR。通过绘制箱线图,可以观察到用户在网站上停留时间越长,点击广告的可能性越大。
fig = px.box(data, x="Daily Time Spent on Site", color="Clicked on Ad", title="基于网站停留时间的点击率", color_discrete_map={'Yes':'blue', 'No':'red'})
fig.update_traces(quartilemethod="exclusive")
fig.show()
接下来,分析用户的每日互联网使用量是否影响CTR。结果显示,每日互联网使用量较大的用户更倾向于点击广告。
fig = px.box(data, x="Daily Internet Usage", color="Clicked on Ad", title="基于每日互联网使用量的点击率", color_discrete_map={'Yes':'blue', 'No':'red'})
fig.update_traces(quartilemethod="exclusive")
fig.show()
还分析了用户年龄对CTR的影响。数据显示,大约40岁的用户点击广告的频率最高。
fig = px.box(data, x="Age", color="Clicked on Ad", title="基于年龄的点击率", color_discrete_map={'Yes':'blue', 'No':'red'})
fig.update_traces(quartilemethod="exclusive")
fig.show()
最后,测试了用户收入对点击率的影响。虽然高收入消费者点击广告的可能性较低,但统计上的差异并不显著。
fig = px.box(data, x="Area Income", color="Clicked on Ad", title="基于收入的点击率", color_discrete_map={'Yes':'blue', 'No':'red'})
fig.update_traces(quartilemethod="exclusive")
fig.show()
总体点击率(CTR)是通过计算点击广告的用户比例得出的。在本例中,CTR为49.17%。
接下来,将构建一个机器学习模型来预测点击率。首先,需要将数据集划分为训练集和测试集。在模型训练之前,需要将“性别”列的值转换为数字,并将“广告主题行”和“城市”列从数据集中删除,因为它们不是机器学习模型的输入变量。
data["Gender"] = data["Gender"].map({"Male": 1,"Female": 0})
x=data.iloc[:,0:7]
x=x.drop(['Ad Topic Line','City'],axis=1)
y=data.iloc[:,9]
xtrain,xtest,ytrain,ytest=train_test_split(x,y,test_size=0.2,random_state=33)
现在,可以部署随机森林预测分类模型来训练数据。
model = RandomForestClassifier()
model.fit(xtrain, ytrain)
接下来,计算模型的准确性。
y_pred = model.predict(xtest)
print(accuracy_score(ytest, y_pred))
import warnings
warnings.filterwarnings("ignore")
print("广告点击率预测:")
a = float(input("每日网站停留时间:"))
b = float(input("年龄:"))
c = float(input("地区收入:"))
d = float(input("每日互联网使用量:"))
e = input("性别(男=1,女=0):")
features = np.array([[a, b, c, d, e]])
print("用户是否会点击广告 = ", model.predict(features))