基于python分析广告投放转化情况

该数据为网上公开脱敏数据,从广告展示到最终付费转化的全过程。

前言

数据来源:
kaggle

广告转化率、付费率、哪些广告转化率高,哪些特征的用户转化率高、哪些广告转化率高但付费率低,进而优化广告的投放策略。

数据分析流程步骤:
1.提出问题–>2.理解数据–>3.清洗数据并建立模型–>结论

一、提出问题

基于python分析广告投放转化情况

二、理解数据

基于python分析广告投放转化情况

三、清洗数据并建立模型

数据处理流程:
选择子集对应列–>列名重命名–>重复值处理–>空值处理–>一致化处理–>排序–>异常值处理–>特征工程–>建立模型

好的废话不多说,先上结果(这是第一种结果呈现的方式):

第一种

问题一,转化率是否与性别有关系?

基于python分析广告投放转化情况

问题二, 转化率是否与年龄段有关?

基于python分析广告投放转化情况

问题三, 转化率是否与爱好有关?

基于python分析广告投放转化情况

问题四, 展示次数、点击次数、咨询次数和付费次数的相关性怎样?

基于python分析广告投放转化情况

第二种

以下是第二种结果呈现的方式

1.选择子集对应列

import pandas as pd

data = pd.read_csv(r'data.csv',sep=',',header='infer')
# 选择子集(对应列)
choose_column_name= data[['ad_id','age','gender','interest','Impressions','Clicks','Spent','Total_Conversion','Approved_Conversion']]
choose_column_name.head(10)

基于python分析广告投放转化情况

2.列名重命名

rename_column = {
    "ad_id" : "广告ID",
    "age" : "年龄",
    "gender" : "性别",
    "interest" : "兴趣",
    "Impressions" : "展示次数",
    "Clicks" : "点击次数",
    "Spent" : "花费",
    "Total_Conversion" : "咨询次数",
    "Approved_Conversion" : "付费次数",
}
choose_column_name.rename(columns = rename_column,inplace = True)
choose_column_name.head(10)

基于python分析广告投放转化情况

3.重复值处理

choose_column_name.drop_duplicates().count()

基于python分析广告投放转化情况
操作后没有发现由重复值。

4.空值处理

choose_column_name.isnull().count()

基于python分析广告投放转化情况
没有空值所以不需要处理

5.一致化处理

choose_column_name.dtypes

基于python分析广告投放转化情况
类型不用处理

6.排序

choose_column_name.sort_values(by ="花费",ascending = True) 

基于python分析广告投放转化情况
对花费排序,没有发现异常值

7.异常值处理-看看描述性统计

choose_column_name.describe()

基于python分析广告投放转化情况
没有发现类似花费是负数等异常值

8.对兴趣列进行特征提取

interest_df = pd.DataFrame()
interest_df = pd.get_dummies(choose_column_name['兴趣'],prefix = 'interest')
interest_df.head()

基于python分析广告投放转化情况

choose_column_name = pd.concat([choose_column_name,interest_df],axis = 1)
choose_column_name.head()

基于python分析广告投放转化情况

9.对年龄进行特征提取

age_df = pd.DataFrame()
age_df = pd.get_dummies(choose_column_name['年龄'],prefix = 'Age')
age_df.head()

基于python分析广告投放转化情况

choose_column_name = pd.concat([choose_column_name,age_df],axis = 1)
choose_column_name.head()

基于python分析广告投放转化情况

10.建立模型

展示次数

# 建立模型
# 展示次数
# choose_column_name["展示次数"].sum()
"{0} {1} {2}".format("展现量:",choose_column_name["展示次数"].sum(),"(次)")
# 点击次数
# choose_column_name["点击次数"].sum()
"{0} {1} {2}".format("点击次数:",choose_column_name["点击次数"].sum(),"(次)")
# 咨询次数
# choose_column_name["咨询次数"].sum()
"{0} {1} {2}".format("咨询次数:",choose_column_name["咨询次数"].sum(),"(次)")
# 付费次数
# choose_column_name["付费次数"].sum()
"{0} {1:d} {2}".format("付费次数:",choose_column_name["付费次数"].sum(),"(次)")
# 获客成本
# choose_column_name["花费"].sum()
"{} {:n} {}".format("获客成本:",choose_column_name["花费"].sum(),"(美金)")
# 点击转化率
"{} {:%} {}".format("点击转化率:",choose_column_name["点击次数"].sum()/choose_column_name["展示次数"].sum(),"")
# 付费转化率
"{} {:%} {}".format("付费转化率:",choose_column_name["付费次数"].sum()/choose_column_name["咨询次数"].sum(),"")

基于python分析广告投放转化情况
基于python分析广告投放转化情况

choose_column_name_gender = choose_column_name.groupby('性别')[['展示次数','点击次数','咨询次数','付费次数','花费']].sum()
choose_column_name_gender

基于python分析广告投放转化情况

choose_column_name_gender['点击转化率'] = choose_column_name_gender['点击次数']/choose_column_name_gender['展示次数']
choose_column_name_gender['咨询转化率'] = choose_column_name_gender['咨询次数']/choose_column_name_gender['点击次数']
choose_column_name_gender['付费转化率'] = choose_column_name_gender['付费次数']/choose_column_name_gender['咨询次数']
choose_column_name_gender

基于python分析广告投放转化情况
转化率是否与性别有关系?

%matplotlib inline
from matplotlib import pyplot as plt

ax1 = plt.subplot(1,3,1)
ax2 = plt.subplot(1,3,2)
ax3 = plt.subplot(1,3,3)

choose_column_name_gender.plot.bar(y='点击转化率',ax=ax1,figsize=(12,8),color=['#F8D800','#0396FF'])
choose_column_name_gender.plot.bar(y='咨询转化率',ax=ax2,color=['#F8D800','#0396FF'])
choose_column_name_gender.plot.bar(y='付费转化率',ax=ax3,color=['#F8D800','#0396FF'])
ax1.set_xticklabels(choose_column_name_gender.index,rotation=0)
ax2.set_xticklabels(choose_column_name_gender.index,rotation=0)
ax3.set_xticklabels(choose_column_name_gender.index,rotation=0)
plt.show()

基于python分析广告投放转化情况
其中女性的点击转化率更高,男性的咨询转化率、付费转化率高于女性。

choose_column_name_gender.info()

基于python分析广告投放转化情况

choose_column_name_age = choose_column_name.groupby('年龄')[['展示次数','点击次数','咨询次数','付费次数','花费']].sum()
choose_column_name_age
-----------------------------
choose_column_name_age['点击转化率'] = choose_column_name_age['点击次数']/choose_column_name_age['展示次数']
choose_column_name_age['咨询转化率'] = choose_column_name_age['咨询次数']/choose_column_name_age['点击次数']
choose_column_name_age['付费转化率'] = choose_column_name_age['付费次数']/choose_column_name_age['咨询次数']
choose_column_name_age

基于python分析广告投放转化情况

import matplotlib.pyplot as plt

ax1 = plt.subplot(3,1,1)
ax2 = plt.subplot(3,1,2)
ax3 = plt.subplot(3,1,3)

choose_column_name_age.plot.bar(y='点击转化率',ax=ax1,figsize=(12,10),color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_age.plot.bar(y='咨询转化率',ax=ax2,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_age.plot.bar(y='付费转化率',ax=ax3,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])

ax1.set_xticklabels(choose_column_name_age.index,rotation=0)
ax2.set_xticklabels(choose_column_name_age.index,rotation=0)
ax3.set_xticklabels(choose_column_name_age.index,rotation=0)

plt.show()

基于python分析广告投放转化情况
年龄段30-34点击转化率是最低的,但是咨询转化率和付费转化率是最高的。

年龄段30-34点击转化率是否与爱好有关?

import matplotlib.pyplot as plt
ax1 = plt.subplot(3,1,1)
ax2 = plt.subplot(3,1,2)
ax3 = plt.subplot(3,1,3)

choose_column_name_nianqinren = choose_column_name[ choose_column_name['年龄'] == '30-34']
choose_column_name_nianqinren = choose_column_name_nianqinren.groupby('兴趣')[['展示次数','点击次数','咨询次数','付费次数','花费']].sum()
choose_column_name_nianqinren['点击转化率'] = choose_column_name_nianqinren['点击次数']/choose_column_name_nianqinren['展示次数']
choose_column_name_nianqinren['咨询转化率'] = choose_column_name_nianqinren['咨询次数']/choose_column_name_nianqinren['点击次数']
choose_column_name_nianqinren['付费转化率'] = choose_column_name_nianqinren['付费次数']/choose_column_name_nianqinren['咨询次数']
# 转化率后十的爱好
# choose_column_name_nianqinren.sort_values(by ="付费转化率",ascending = True).head(10)

choose_column_name_nianqinren.sort_values(by=['点击转化率']).plot.bar(y='点击转化率',ax=ax1,figsize=(12,10),color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_nianqinren.sort_values(by=['咨询转化率']).plot.bar(y='咨询转化率',ax=ax2,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_nianqinren.sort_values(by=['付费转化率']).plot.bar(y='付费转化率',ax=ax3,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])

ax1.set_xticklabels(choose_column_name_nianqinren.index,rotation=0)
ax2.set_xticklabels(choose_column_name_nianqinren.index,rotation=0)
ax3.set_xticklabels(choose_column_name_nianqinren.index,rotation=0)

plt.show()

基于python分析广告投放转化情况
转化率是否与爱好有关?

choose_column_name_hobby = choose_column_name.groupby('兴趣')[['展示次数','点击次数','咨询次数','付费次数','花费']].sum()
choose_column_name_hobby['点击转化率'] = choose_column_name_hobby['点击次数']/choose_column_name_hobby['展示次数']
choose_column_name_hobby['咨询转化率'] = choose_column_name_hobby['咨询次数']/choose_column_name_hobby['点击次数']
choose_column_name_hobby['付费转化率'] = choose_column_name_hobby['付费次数']/choose_column_name_hobby['咨询次数']
# 转化率后十的爱好
choose_column_name_hobby.sort_values(by ="付费转化率",ascending = True).head(10)  #False

基于python分析广告投放转化情况

# 付费转化率前十的爱好
choose_column_name_hobby.sort_values(by ="付费转化率",ascending = False).head(10)  #False

基于python分析广告投放转化情况

import matplotlib.pyplot as plt

ax1 = plt.subplot(3,1,1)
ax2 = plt.subplot(3,1,2)
ax3 = plt.subplot(3,1,3)

choose_column_name_hobby.sort_values(by=['点击转化率']).plot.bar(y='点击转化率',ax=ax1,figsize=(12,10),color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_hobby.sort_values(by=['咨询转化率']).plot.bar(y='咨询转化率',ax=ax2,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_hobby.sort_values(by=['付费转化率']).plot.bar(y='付费转化率',ax=ax3,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])

ax1.set_xticklabels(choose_column_name_hobby.index,rotation=0)
ax2.set_xticklabels(choose_column_name_hobby.index,rotation=0)
ax3.set_xticklabels(choose_column_name_hobby.index,rotation=0)

plt.show()
# choose_column_name_hobby['点击转化率'].sort_values(ascending = False)

基于python分析广告投放转化情况
不同爱好之间付费转化率差距极大,兴趣ID为65、102、31的付费转化率比较高,
兴趣ID为104,105,108的付费转化率低于平均值。

相关性分析

import numpy as np
import matplotlib.pyplot as plt
import random
import statsmodels.formula.api as smf

fig = plt.figure()
# 画图区域分成1行1列。选择第一块区域。
ax1 = fig.add_subplot(1,1, 1)
# 标题
ax1.set_title("展示次数与点击次数之间的相关性")

# RANDOM_X = np.array(random_x) # 散点图的横轴。
# RANDOM_Y = np.array(random_y) # 散点图的纵轴。

# RANDOM_X = choose_column_name['展示次数'] # 散点图的横轴。
# RANDOM_Y = choose_column_name['点击次数'] # 散点图的纵轴。

# 画散点图。
ax1.scatter(choose_column_name['展示次数'], choose_column_name['点击次数'])
# 横轴名称。
ax1.set_xlabel("展示次数")
# 纵轴名称。
ax1.set_ylabel("点击次数")
#------------------------------------------------
# 数据量。
# SIZE = 600
# 纵轴数据。np.linspace 返回一个一维数组,SIZE指定数组长度。
# 数组最小值是-6,最大值是6。所有元素间隔相等。整个数组是
# 个等差数列。
# Y = np.linspace(-6, 6, SIZE)
# # 横轴数据。
# X = np.linspace(-2, 3, SIZE)
# ax1.plot(choose_column_name['展示次数'], choose_column_name['点击次数'])
#------------------------------------------------
plt.show()

基于python分析广告投放转化情况

fig = plt.figure()
# 画图区域分成1行1列。选择第一块区域。
ax1 = fig.add_subplot(1,1, 1)
# 标题
ax1.set_title("点击次数与付费次数之间的相关性")

# RANDOM_X = np.array(random_x) # 散点图的横轴。
# RANDOM_Y = np.array(random_y) # 散点图的纵轴。

# RANDOM_X = choose_column_name['展示次数'] # 散点图的横轴。
# RANDOM_Y = choose_column_name['点击次数'] # 散点图的纵轴。

# 画散点图。
ax1.scatter(choose_column_name['点击次数'], choose_column_name['付费次数'])
# 横轴名称。
ax1.set_xlabel("点击次数")
# 纵轴名称。
ax1.set_ylabel("付费次数")
#------------------------------------------------
# 数据量。
# SIZE = 600
# 纵轴数据。np.linspace 返回一个一维数组,SIZE指定数组长度。
# 数组最小值是-6,最大值是6。所有元素间隔相等。整个数组是
# 个等差数列。
# Y = np.linspace(-6, 6, SIZE)
# # 横轴数据。
# X = np.linspace(-2, 3, SIZE)
# ax1.plot(choose_column_name['展示次数'], choose_column_name['点击次数'])
#------------------------------------------------
plt.show()

基于python分析广告投放转化情况

fig = plt.figure()
# 画图区域分成1行1列。选择第一块区域。
ax1 = fig.add_subplot(1,1, 1)
# 标题
ax1.set_title("点击次数与咨询次数之间的相关性")

# RANDOM_X = np.array(random_x) # 散点图的横轴。
# RANDOM_Y = np.array(random_y) # 散点图的纵轴。

# RANDOM_X = choose_column_name['展示次数'] # 散点图的横轴。
# RANDOM_Y = choose_column_name['点击次数'] # 散点图的纵轴。

# 画散点图。
ax1.scatter(choose_column_name['点击次数'], choose_column_name['咨询次数'])
# 横轴名称。
ax1.set_xlabel("点击次数")
# 纵轴名称。
ax1.set_ylabel("咨询次数")
#------------------------------------------------
# 数据量。
# SIZE = 600
# 纵轴数据。np.linspace 返回一个一维数组,SIZE指定数组长度。
# 数组最小值是-6,最大值是6。所有元素间隔相等。整个数组是
# 个等差数列。
# Y = np.linspace(-6, 6, SIZE)
# # 横轴数据。
# X = np.linspace(-2, 3, SIZE)
# ax1.plot(choose_column_name['展示次数'], choose_column_name['点击次数'])
#------------------------------------------------
plt.show() 

基于python分析广告投放转化情况

fig = plt.figure()
# 画图区域分成1行1列。选择第一块区域。
ax1 = fig.add_subplot(1,1, 1)
# 标题
ax1.set_title("咨询次数与付费次数之间的相关性")

# RANDOM_X = np.array(random_x) # 散点图的横轴。
# RANDOM_Y = np.array(random_y) # 散点图的纵轴。

# RANDOM_X = choose_column_name['展示次数'] # 散点图的横轴。
# RANDOM_Y = choose_column_name['点击次数'] # 散点图的纵轴。

# 画散点图。
ax1.scatter(choose_column_name['咨询次数'], choose_column_name['付费次数'])
# 横轴名称。
ax1.set_xlabel("咨询次数")
# 纵轴名称。
ax1.set_ylabel("付费次数")
#------------------------------------------------
# 数据量。
# SIZE = 600
# 纵轴数据。np.linspace 返回一个一维数组,SIZE指定数组长度。
# 数组最小值是-6,最大值是6。所有元素间隔相等。整个数组是
# 个等差数列。
# Y = np.linspace(-6, 6, SIZE)
# # 横轴数据。
# X = np.linspace(-2, 3, SIZE)
# ax1.plot(choose_column_name['展示次数'], choose_column_name['点击次数'])
#------------------------------------------------
plt.show() 

基于python分析广告投放转化情况
方式二

import pandas as pd
import matplotlib.pyplot as plt

import statsmodels.formula.api as smf

#read file
df = choose_column_name[['点击次数','咨询次数']]
# print(df)

#Draw a scatter diagram
plt.figure(figsize=(8, 6))
plt.scatter(df['点击次数'], df['咨询次数'],label='data')
plt.legend(loc='best')

#The univariate linear regression model is established
result = smf.ols(r'咨询次数~点击次数',data=df).fit()
# print(result.params)
# print(result.summary())

#Draw a fitting diagram.
y_fitted = result.fittedvalues
a = plt.subplots(figsize=(8,6))
plt.plot(df['点击次数'], df['咨询次数'], 'r-',label='OLS')
# plt.plot(df['点击次数'], df['咨询次数'], 'o', label='data')
plt.legend(loc='best')
plt.show()

四、结论

数据呈现的结果和方式,在于人,而不是工具,工具只是帮助你更好的实现这个过程。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年5月30日 上午10:38
下一篇 2022年5月30日

相关推荐