一、项目背景

社交网站Facebook用户遍布全球各大洲,旗下产品用户数破10亿,约23%的世界人口是Facebook用户,而且移动端月均活跃用户达到总用户数的97%。由此许多出海企业在海外推广时,都会在Facebook进行广告投放。

本文就使用kaggle上的Facebook广告投放效果案例数据集,站在广告商家的角度,对xyz 公司投放的三组广告进行数据分析,帮助商家判断广告是否达到预期,并找到精准的受众群体,优化广告投放效果。

二、数据来源

字段解释

ad_id 广告 ID Impressions 曝光量 xyz_campaign_id XYZ公司每组广告ID Clicks 点击量 fb_campaign_id Facebook跟踪每组广告 ID Spent 广告花费 age 年龄段 Total_Conversion 咨询量 gender 性别 Approved_Conversion 购买量 interest 兴趣标签

主要业务指标

三、数据预处理

(一)数据概览

(1)导入库

# 导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import ticker
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'  # 正常显示中文
plt.rcParams['axes.unicode_minus'] = False  # 正常显示正负号

(2)导入数据

# 导入数据
df = pd.read_csv('C:/Facebook/KAG_conversion_data.csv', encoding='ISO-8859-1')
df

初步查看数据:包含11个字段,共1143行数据,格式统一,命名符合规范,没有发现问题。

(3)为了方便查看,将列名替换为中文

# 列名重命名
df.rename(columns={'ad_id':'广告ID','xyz_campaign_id':'广告组ID','fb_campaign_id':'FB跟踪每组广告ID','age':'年龄段','gender':'性别','interest':'兴趣标签',
                   'Impressions':'曝光量','Clicks':'点击量','Spent':'广告花费','Total_Conversion':'咨询量','Approved_Conversion':'购买量'}, inplace=True)
df.head()

(二)数据清洗

# 基本信息
df.info()

(1)数据类型转换

大部分为数值型,少部分为object类型,格式符合规范,不需要处理。

(2)缺失值处理

数据无缺失值,不需要处理。

(3)重复值处理

# 重复值
df.duplicated()

无重复值,不需要处理。

(4)异常值处理

# 异常值
df.describe()

无异常值,不需要处理。

四、数据分析

(一)分类变量分布情况

# 各字段种类分布情况
type_var = ['广告组ID', '年龄段', '性别', '兴趣标签']
df[type_var] = df[type_var].astype('category')

x = 0
fig = plt.figure(figsize=(28,12), dpi=100)
plt.subplots_adjust(wspace = 0.1, hspace = 0.3)  
plt.suptitle("各字段种类分布情况", x=0.5 ,y=0.95, size=25, weight='bold')

for i in df[type_var]:
    ax = plt.subplot(221+x)
    ax = sns.countplot(x=i, data=df, color= plt.cm.Paired(6))   
    plt.grid(axis='x')
    x+=1
plt.savefig("C:/Facebook/6.jpg", dpi=100, bbox_inches='tight')

由下图可知,该数据集包含了xyz公司一个广告系列中3个广告组的投放数据,广告组ID分别为916、936和1178。展示用户年龄范围在30到50岁均分为四个区间。包含2种用户性别,40种用户兴趣类别。

(二)变量之间的相关关系

# 各字段之间的关系
sns.pairplot(df,vars=["曝光量","点击量","广告花费","咨询量","购买量"], kind="reg", plot_kws={'line_kws':{'color':'seagreen'}}, corner=True)
plt.suptitle("各字段之间的关系", x=0.5 ,y=0.95, size=20, weight='bold')
plt.savefig("C:/Facebook/7.jpg", dpi=100, bbox_inches='tight')

① 曝光量与点击量成明显正比,具有较强的相关性,即曝光量越高,用户看到且点击广告的可能性就越大。

② 点击量与广告花费成明显正比,且相关程度极高,说明广告计费的方式为按点击量收费,即获得的点击量越多,广告花费就越高。而曝光量与广告花费也存在相关性,但其相关程度稍低,因为它们通过点击量间接相关。

③ 曝光量、点击量和咨询量与购买量之间都存在相关性,其相关性由强到弱排序大体上为:咨询量 > 曝光量 > 点击量。按照我们所期望的用户行为曝光 → 点击 → 咨询 → 购买,点击量与购买量的相关程度应该比曝光量与购买量的相关程度更强,这里的数据恰恰相反,说明有些用户看到广告后并没有点击,而是直接咨询或者购买。

(三)广告投放效果对比分析

效果指标:

    点击率(CTR)=  点击量 / 曝光量                   咨询转化率(CVR_T)=  咨询量 / 点击量                   购买转化率(CVR_A)=  购买量 / 咨询量

效果指标数据透视表:

# 效果指标透视表
ad_dataA = df.groupby('广告组ID').agg({'广告ID':'count','曝光量':'sum','点击量':'sum','咨询量':'sum','购买量':'sum'})
ad_dataA.rename(columns={'广告ID':'数据量'}, inplace=True)
ad_dataA['点击率'] = (ad_dataA['点击量']/ad_dataA['曝光量']).apply(lambda x:format(x,'.3%'))
ad_dataA['咨询转化率'] = (ad_dataA['咨询量']/ad_dataA['点击量']).apply(lambda x:format(x,'.2%'))
ad_dataA['购买转化率'] = (ad_dataA['购买量']/ad_dataA['咨询量']).apply(lambda x:format(x,'.2%'))
ad_dataA

大约55%的数据来自广告组1178,41%的数据来自广告组936,其余来自广告组916。广告组1178拥有最多曝光量,能接触到的用户比其他两组更多,也因此带来了更多的点击量、咨询量和购买量,不过这些还不足以评估它的广告效果,接下来将通过图表来可视化广告效果,并对其进一步分析。

效果指标对比:

# 设置画板
fig = plt.figure(figsize=(9,6), dpi=100)
# 设置字体大小
plt.rcParams['font.size']=12

# 添加子图
ax1 = fig.add_subplot(111)
# x轴设置
index=np.arange(len(ad_dataA))
plt.xticks(index+1/6, ad_dataA.index)
plt.xlabel("广告组ID")

# 左y轴设置
ax1.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=2))
ax1.set_ylabel('转化率')
plt.ylim(0,0.55) 
ad_dataA['咨询转化率'] = ad_dataA['咨询转化率'].str.strip('%').astype(float)/100
ad_dataA['购买转化率'] = ad_dataA['购买转化率'].str.strip('%').astype(float)/100
ax1.bar(index, ad_dataA['咨询转化率'], width=1/3, color=plt.cm.Paired(0)) 
for x,y in zip(index, ad_dataA['咨询转化率']):
    plt.text(x, y+0.005, str(np.round(y*100,2))+'%', ha='center',va='bottom')
ax1.bar(index+1/3, ad_dataA['购买转化率'], width=1/3, color=plt.cm.Paired(1))     
for x,y in zip(index+1/3, ad_dataA['购买转化率']):
    plt.text(x, y+0.005, str(np.round(y*100,2))+'%', ha='center',va='bottom') 
ax1.legend(['咨询转化率','购买转化率'])

# 右y轴设置
ax2 = ax1.twinx()
ax2.tick_params(axis='y')
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=3))
ax2.set_ylabel('点击率')
plt.ylim(0.00017,0.00035) 
ad_dataA['点击率'] = ad_dataA['点击率'].str.strip('%').astype(float)/100
ax2.plot(index+1/6, ad_dataA['点击率'], 'o-', color=plt.cm.Paired(6))
for a,b in zip(index+1/6, ad_dataA['点击率']):
    plt.text(a+0.05, b+0.000004, str(np.round(b*100,3))+'%', ha='center',va='bottom')
ax2.legend(['点击率'], loc=(0.783,0.793))

fig.suptitle('三组广告点击率、转化率对比', x=0.5 ,y=0.93, size=18, weight='bold')
plt.savefig("C:/Facebook/9.jpg", dpi=100, bbox_inches='tight')

① 三组广告的点击率均在0.02%左右,以0.02%为基准水平,广告组916和936的点击率较高,而广告组1178的点击率较低。

② 三组广告的咨询转化率差别较大。其中,广告组916的咨询转化率高达51%,说明点击广告的用户超过一半会去咨询,表明广告内容质量高;而广告组1178的咨询转化率最低,只有7%,后面应查看情况提高。

③ 三组广告的购买转化率在30%~40%左右,整体服务质量还算理想。广告组916的购买转化率最高,超过40%,说明咨询过产品的用户接近一半购买了产品。

④ 综上,广告组916的转化效果最好,其点击率、咨询转化率、购买转化率在三组广告中均较高,虽然广告组1178带来的流量较多,但在同等质量和数量资源下,广告组916可以获到更好的转化。

(四)广告投放成本对比分析

成本与收益指标:

    单次点击成本(CPC)=  广告花费 / 点击量                   单次行动成本(CPA)=  广告花费 / 产品购买次数                   千次曝光成本(CPM)=(广告花费 / 曝光量)* 1000                   广告支出回报率(ROAS)=  广告收入 / 广告花费 = 购买量 * 1000 / 广告花费                                                         (假设一次购买将收入100元)

成本与收益指标数据透视表:

# 成本收益指标透视表
ad_dataB = df[['广告组ID','广告花费','曝光量','点击量','购买量']].groupby('广告组ID').sum()
ad_dataB['单次点击成本'] = ad_dataB['广告花费']/ad_dataB['点击量']
ad_dataB['单次行动成本'] = ad_dataB['广告花费']/ad_dataB['购买量']
ad_dataB['千次曝光成本'] = (ad_dataB['广告花费']/ad_dataB['曝光量'])*1000
ad_dataB['广告支出回报率'] = (ad_dataB['购买量']*100/ad_dataB['广告花费']).apply(lambda x:format(x,'.2%'))
ad_dataB

大约94%的花费用于广告组1178,5%的花费用于广告组936,其余用于广告组916。广告组1178的花费最高,那么其收益是否如我们所期望的那样也很高呢?

成本与收益指标对比:

var = ['单次点击成本', '单次行动成本', '千次曝光成本', '广告支出回报率']
fig = plt.figure(figsize=(10,6), dpi=100)
fig.suptitle('三组广告成本与回报率对比', x=0.5 ,y=1, size=16, weight='bold')
plt.subplots_adjust(wspace = 0.3, hspace = 0.4) 
index=np.arange(len(ad_dataB[var]))
plt.rcParams['font.size']=10

ax1 = fig.add_subplot(221)
plt.title(var[0])
plt.xticks(index, ad_dataB.index)
ax1.bar(index, ad_dataB[var[0]], width=0.5, color=plt.cm.get_cmap('Pastel1')(range(8)))
plt.ylim(0.00,1.75)
ax1.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
for x,y in zip(index, ad_dataB[var[0]]):
    plt.text(x, y+0.005, str(np.round(y,2)), ha='center',va='bottom')  

ax2 = fig.add_subplot(222)
plt.title(var[1])
plt.xticks(index, ad_dataB.index)
ax2.bar(index, ad_dataB[var[1]], width=0.5, color=plt.cm.get_cmap('Pastel1')(range(8)))
plt.ylim(0.00,73.00)
ax2.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
for x,y in zip(index, ad_dataB[var[1]]):
    plt.text(x, y+0.5, str(np.round(y,2)), ha='center',va='bottom')

ax3 = fig.add_subplot(223)    
plt.title(var[2])
plt.xticks(index, ad_dataB.index)
ax3.bar(index, ad_dataB[var[2]], width=0.5, color=plt.cm.get_cmap('Pastel1')(range(8)))
plt.ylim(0.00,0.41)
ax3.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
for x,y in zip(index, ad_dataB[var[2]]):
    plt.text(x, y+0.002, str(np.round(y,2)), ha='center',va='bottom') 

ax4 = fig.add_subplot(224)
plt.title(var[3])
plt.xticks(index, ad_dataB.index)
ad_dataB[var[3]] = ad_dataB[var[3]].str.strip('%').astype(float)/100
ax4.bar(index, ad_dataB[var[3]], width=0.5, color=plt.cm.get_cmap('Pastel1')(range(8)))
plt.ylim(0.00,18.0000)
ax4.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=2))
for x,y in zip(index, ad_dataB[var[3]]):
    plt.text(x, y+0.1, str(np.round(y*100,2))+'%', ha='center',va='bottom')
    
plt.savefig("C:/Facebook/11.jpg", dpi=100, bbox_inches='tight')  

① 广告组916的表现优异,其单次点击成本和单次行动成本均最低,千次曝光成本处于中间水平,广告支出回报率高达1603%,以最低成本获取最高回报,表明现阶段该广告组的投放收益较好,达到了广告目的。

② 广告组936,其单次点击成本、单次行动成本和广告回报率均处中间水平,不过其千次曝光成本最高,考虑到广告是按点击付费的,其千次曝光成本略高可能是其高点击率带来的。

③ 广告组1178的表现依旧不理想,虽然其千次曝光成本最低,但其单次点击成本和单次行动成本均最高,特别是单次行动成本高达64%,且广告支出回报率只有157%,以最高成本获取最低回报,初步判断是推广的产品与受众不匹配。

(五)广告受众在三个维度上的分析

广告组1178的投放成本最高,但其转化率和回报率均不理想,基于广告组1178的表现欠佳,现将对其进行更详细地研究,并且提供一些投放优化建议。

(1)性别维度:

# 性别维度各项指标数据透视表
ad_dataC = df[df['广告组ID']==1178][['年龄段','性别','兴趣标签','曝光量','点击量','广告花费','咨询量','购买量']]
ad_dataD = ad_dataC[['性别','曝光量','点击量','广告花费','咨询量','购买量']].groupby('性别').sum()
ad_dataD['点击率'] = (ad_dataD['点击量']/ad_dataD['曝光量']).apply(lambda x:format(x,'.3%'))
ad_dataD['咨询转化率'] = (ad_dataD['咨询量']/ad_dataD['点击量']).apply(lambda x:format(x,'.2%'))
ad_dataD['购买转化率'] = (ad_dataD['购买量']/ad_dataD['咨询量']).apply(lambda x:format(x,'.2%'))
ad_dataD['广告支出回报率'] = (ad_dataD['购买量']*100/ad_dataD['广告花费']).apply(lambda x:format(x,'.2%'))
ad_dataD
var=['点击率', '咨询转化率', '购买转化率']
z = 0
fig = plt.figure(figsize=(15,3), dpi=100)
plt.suptitle("广告组1178不同性别曝光量与点击率、转化率对比", x=0.5 ,y=1.1, size=18, weight='bold')
plt.subplots_adjust(wspace = 0.2) 
index=np.arange(len(ad_dataD[var]))
plt.rcParams['font.size']=12

ax = fig.add_subplot(141)
ad_dataD['曝光量'].plot(kind='pie', autopct='%.2f%%', colors=plt.cm.get_cmap('Pastel2')((0,4)))
plt.ylabel('')
plt.title('曝光量', x=0.5 ,y=1)

for i in ad_dataD[var]:
    ax = fig.add_subplot(142+z)
    plt.title(var[z])
    plt.xticks(index, ad_dataD.index)
    ad_dataD[var[z]] = ad_dataD[var[z]].str.strip('%').astype(float)/100
    plt.yticks([])
    ax.bar(index, ad_dataD[var[z]], color=plt.cm.get_cmap('Pastel2')((0,4)))
    sns.despine(ax=ax,left=True, right=True, top=True)
    for x,y in zip(index, ad_dataD[var[z]]):
        plt.text(x, y, str(np.round(y*100,2))+'%', ha='center',va='bottom')
    z+=1  
    
plt.savefig("C:/Facebook/13.jpg", dpi=100, bbox_inches='tight')  

广告组1178在女性中曝光较多,占总曝光量的53%,虽然女性的点击率高于男性,但男性的转化率更高,其中,咨询转化率是女性的1.7倍,购买转化率是女性的1.2倍。

fig = plt.figure(figsize=(8,3), dpi=100)
plt.suptitle("广告组1178不同性别花费与回报率对比", x=0.5 ,y=1.1, size=15, weight='bold')
plt.subplots_adjust(wspace = 0.4) 
index=np.arange(len(ad_dataD[['广告支出回报率']]))
plt.rcParams['font.size']=10

ax = fig.add_subplot(121)
ad_dataD['广告花费'].plot(kind='pie', autopct='%.2f%%', colors=plt.cm.get_cmap('Pastel1')((3,7)))
plt.ylabel('')
plt.title('广告花费', x=0.5 ,y=1)

ax = fig.add_subplot(122)
plt.title('广告支出回报率')
plt.xticks(index, ad_dataD.index)
ad_dataD['广告支出回报率'] = ad_dataD['广告支出回报率'].str.strip('%').astype(float)/100
plt.yticks([])
ax.bar(index, ad_dataD['广告支出回报率'], color=plt.cm.get_cmap('Pastel1')((3,7)))
sns.despine(ax=ax,left=True, right=True, top=True)
for x,y in zip(index, ad_dataD['广告支出回报率']):
    plt.text(x, y, str(np.round(y*100,2))+'%', ha='center',va='bottom')
    
plt.savefig("C:/Facebook/14.jpg", dpi=100, bbox_inches='tight') 

广告组1178在女性中花费较高,占总花费的58%,但男性的回报率更高,是女性的1.7倍。

结论:

女性需求整体大于男性,但在咨询与购买环节,没有承接好女性需求,造成一部分流失。

建议:

① 价高女性咨询和付费环节,从产品本身进一步分析女性转化率低的具体原因,优化女性转化率。

② 将男性作为主要投放对象,优化投放素材,提高男性点击率。

(2)年龄维度

# 年龄维度各项指标数据透视表
ad_dataE = ad_dataC[['年龄段','曝光量','点击量','广告花费','咨询量','购买量']].groupby('年龄段').sum()
ad_dataE['点击率'] = (ad_dataE['点击量']/ad_dataE['曝光量']).apply(lambda x:format(x,'.3%'))
ad_dataE['咨询转化率'] = (ad_dataE['咨询量']/ad_dataE['点击量']).apply(lambda x:format(x,'.2%'))
ad_dataE['购买转化率'] = (ad_dataE['购买量']/ad_dataE['咨询量']).apply(lambda x:format(x,'.2%'))
ad_dataE['广告支出回报率'] = (ad_dataE['购买量']*100/ad_dataE['广告花费']).apply(lambda x:format(x,'.2%'))
ad_dataE
var=['点击率', '咨询转化率', '购买转化率']
z = 0
fig = plt.figure(figsize=(20,5))
plt.suptitle("广告组1178不同年龄段曝光量与点击率、转化率对比", x=0.5 ,y=1.01, size=18, weight='bold')
plt.subplots_adjust(wspace = 0.3) 
index=np.arange(len(ad_dataE[var]))
plt.rcParams['font.size']=12

ax = fig.add_subplot(141)
ad_dataE['曝光量'].plot(kind='pie', autopct='%.2f%%', colors=plt.cm.get_cmap('Pastel2')((0,4)), 
                     radius=1.3, wedgeprops={'width': 0.6}, pctdistance=0.75)
plt.ylabel('')
plt.title('曝光量', x=0.5 ,y=1.1)

for i in ad_dataE[var]:
    ax = fig.add_subplot(142+z)
    plt.title(var[z])
    plt.xticks(index, ad_dataE.index)
    plt.yticks(index, ad_dataE.index)
    ad_dataE[var[z]] = ad_dataE[var[z]].str.strip('%').astype(float)/100
    plt.yticks([])
    ax.bar(index, ad_dataE[var[z]], color=plt.cm.get_cmap('Pastel2')((0,4)))
    sns.despine(ax=ax,left=True, right=True, top=True)
    for x,y in zip(index, ad_dataE[var[z]]):
        plt.text(x, y, str(np.round(y*100,3))+'%', ha='center',va='bottom')
    
    z+=1  
plt.savefig("C:/Facebook/16.jpg", dpi=100, bbox_inches='tight') 

广告组1178在年龄段30-34的曝光最多,占总曝光量的32%,虽然其点击率是四个年龄段中最低的,但其转化率却是最高的。年龄段45-49的曝光同样较多,占总曝光量的30%,其点击率也非常理想,是四个年龄段中最高的,但其转化率下滑严重。

fig = plt.figure(figsize=(8,3), dpi=100)
plt.suptitle("广告组1178不同年龄段花费与回报率对比", x=0.5 ,y=1.1, size=15, weight='bold')
plt.subplots_adjust(wspace = 0.4) 
index=np.arange(len(ad_dataE[['广告支出回报率']]))
plt.rcParams['font.size']=10

ax = fig.add_subplot(121)
ad_dataE['广告花费'].plot(kind='pie', autopct='%.2f%%', colors=plt.cm.get_cmap('Pastel1')((3,7)))
plt.ylabel('')
plt.title('广告花费', x=0.5 ,y=1)

ax = fig.add_subplot(122)
plt.title('广告支出回报率')
plt.xticks(index, ad_dataE.index)
ad_dataE['广告支出回报率'] = ad_dataE['广告支出回报率'].str.strip('%').astype(float)/100
plt.yticks([])
ax.bar(index, ad_dataE['广告支出回报率'], color=plt.cm.get_cmap('Pastel1')((3,7)))
sns.despine(ax=ax,left=True, right=True, top=True)
for x,y in zip(index, ad_dataE['广告支出回报率']):
    plt.text(x, y, str(np.round(y*100,2))+'%', ha='center',va='bottom')
    
plt.savefig("C:/Facebook/17.jpg", dpi=100, bbox_inches='tight')    

广告组1178在年龄段45-49的花费最高,占总花费的34%,但其回报率却非常低。花费第二的是年龄段30-34,其回报率最高。

结论:

① 各年龄段需求呈递增式增长,咨询和购买都有所下滑,需对产品进一步分析,是否存在宣传与实际不符的情况。

② 年龄段30-34为主要受众群体,大部分购买行为都发生在这一群体,也许是广告不够吸引,他们的点击率最低。

③ 年龄段45-49的点击率很高,说明广告受这一群体的喜爱,但他们的转化率与回报率非常低,似乎对广告内容或咨询服务不太满意。

建议:

① 优化广告内容,减少夸大宣传,规避虚假宣传风险。性转化率。

② 针对年龄段30-34的用户群体优化广告素材,提高吸引力,同时增加这一群体的曝光量。

③ 减少对年龄段45-49的曝光量,考虑到中老年对网上购物比较谨慎,需要针对这一群体优化引导话术,提升服务质量。

(3)兴趣维度

# 兴趣维度各项指标数据透视表
ad_dataF = ad_dataC[['兴趣标签','曝光量','点击量','广告花费','咨询量','购买量']].groupby('兴趣标签').sum()
ad_dataF['点击率'] = (ad_dataF['点击量']/ad_dataF['曝光量']).apply(lambda x:format(x,'.3%'))
ad_dataF['咨询转化率'] = (ad_dataF['咨询量']/ad_dataF['点击量']).apply(lambda x:format(x,'.2%'))
ad_dataF['购买转化率'] = (ad_dataF['购买量']/ad_dataF['咨询量']).apply(lambda x:format(x,'.2%'))
ad_dataF['广告支出回报率'] = (ad_dataF['购买量']*100/ad_dataF['广告花费']).apply(lambda x:format(x,'.2%'))
ad_dataF
ad_dataF = ad_dataF.sort_values(by='曝光量', ascending=False)

fig = plt.figure(figsize=(10,5), dpi=100)
plt.suptitle("广告组1178不同兴趣标签曝光量与点击率、转化率对比", x=0.5 ,y=0.93, size=14, weight='bold')
ax1 = fig.add_subplot(111)

index=np.arange(len(ad_dataF['曝光量']))
plt.xticks(index, ad_dataF.index, rotation=40)
plt.xlabel("兴趣标签")
plt.rcParams['font.size']=8

ax1.set_ylabel('曝光量')
ax1.bar(index, ad_dataF['曝光量'], color=plt.cm.get_cmap('Pastel2')((0,4))) 

ax2 = ax1.twinx()
ax2.tick_params(axis='y')
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=3))
ax2.set_ylabel('点击率')
plt.ylim(0.00012,0.00044)
ad_dataF['点击率'] = ad_dataF['点击率'].str.strip('%').astype(float)/100
ax2.plot(index, ad_dataF['点击率'], 'o-', markersize=4, color=plt.cm.Paired(6)) 
ax2.legend(['点击率'], loc=(0.53,0.905))

ax3 = ax1.twinx()
ax3.spines['right'].set_position(('outward',60))
ax3.tick_params(axis='y')
ax3.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=2))
ax3.set_ylabel('转化率')
plt.ylim(-0.3000,0.6000)
ad_dataF['咨询转化率'] = ad_dataF['咨询转化率'].str.strip('%').astype(float)/100
ad_dataF['购买转化率'] = ad_dataF['购买转化率'].str.strip('%').astype(float)/100
ax3.plot(index, ad_dataF['咨询转化率'], 'o-', markersize=4, color=plt.cm.tab20(7))
ax3.plot(index, ad_dataF['购买转化率'], 'o-', markersize=4, color=plt.cm.tab20b(3))
ax3.legend(['咨询转化率','购买转化率'], loc=(0.370,0.885))

plt.savefig("C:/Facebook/19.jpg", dpi=100, bbox_inches='tight')  

广告组1178的兴趣标签中,高曝光低点击低转化:16、10、28、15、107。高曝光高点击低转化:27、63、25、26。低曝光高点击低转化:100、23、106、104、114。低曝光高点击高转化:2、65、31、36。低曝光低点击高转化:102。

ad_dataF = ad_dataF.sort_values(by='广告花费', ascending=False)
fig = plt.figure(figsize=(10,5), dpi=100)
plt.suptitle("广告组1178不同兴趣标签花费与回报率对比", x=0.5 ,y=0.93, size=14, weight='bold')
ax1 = fig.add_subplot(111)

index=np.arange(len(ad_dataF['广告花费']))
plt.xticks(index, ad_dataF.index, rotation=40)
plt.xlabel("兴趣标签")
plt.rcParams['font.size']=8

ax1.set_ylabel('广告花费')
ax1.bar(index, ad_dataF['广告花费'], color=plt.cm.get_cmap('Pastel1')((3,7))) 
    
ax2 = ax1.twinx()
ax2.tick_params(axis='y')
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=2))
ax2.set_ylabel('广告支出回报率')
ad_dataF['广告支出回报率'] = ad_dataF['广告支出回报率'].str.strip('%').astype(float)/100
ax2.plot(index, ad_dataF['广告支出回报率'], 'o-', markersize=4, color=plt.cm.Dark2(5)) 
ax2.legend(['广告支出回报率'], loc=(0.410,0.928))

plt.savefig("C:/Facebook/20.jpg", dpi=100, bbox_inches='tight')  

广告组1178的兴趣标签中,高花费低回报:16、27、10、28、63。低花费高回报:101、2、112、31、102、36。

结论:

① 曝光较多的兴趣标签与点击率、转化率并不匹配;点击率较高的兴趣标签与转化率也不匹配。大部分用户兴趣标签属于点击率较高但转化率较低的情况。

② 广告能吸引兴趣标签为27、63、25、26、63的用户群体,说明广告素材质量较好,兴趣标签为100、23、106、104、114的用户群体对产品的需求较高,但它们在咨询与购买环节流失严重,需结合产品进一步分析。

建议:

① 将兴趣标签为101、2、112、31、102、36、65的用户群体作为主要的投放群体。

② 对兴趣标签为16、10、28、15、107的用户群体减少曝光量,对兴趣标签为2、65、31、36、102的用户群增加曝光量。

③ 针对兴趣标签为27、63、25、26、63的用户群体,优化广告内容;针对兴趣标签为100、23、106、104、114的用户群体,优化广告素材,同时针对以上两个群体,特别是104群体,优化服务质量,并进一步分析转化率低的原因。

通过以上的分析,可以发现广告组1178的投放目标受众定位不精准,导致花费了大量金钱,广告效果却不佳。同时也找出了更加精准的目标受众,给广告投放提出了优化建议。