廣告投放數據分析


1 提出問題:如何實現廣告的精准投放

  實現廣告的精准投放就是最大化投入產出的過程,需要知道我們的用戶在哪里,在哪些渠道能夠更大化用戶價值,以及各個渠道用戶價值的變化規律。通過對渠道方式和渠道質量的追蹤,以引流和轉化率為關鍵事件,做好渠道的優化和維護。

  本文通過研究阿里天池數據,僅從渠道,投放時間,投放人群,以點擊率為數據指標進行數據分析,從而給出更好的方案和建議,實現高效率高產出。

2 數據來源

2.1 數據源

 Ali_Display_Ad_Click是阿里巴巴提供的一個淘寶展示廣告點擊率預估數據集。

  https://tianchi.aliyun.com/dataset/dataDetail?dataId=56&lang=zh-cn

 

 2.2 數據理解

 數據集不存在投入產出字段,命題轉化為以瀏覽量、點擊率作為數據指標,進行數據分析。

3 分析思路

4 導入數據

#導入所需要的庫
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# from dateutil.parser import parse
import datetime as dt
plt.rcParams["font.sans-serif"]='SimHei'   #解決中文亂碼
plt.rcParams['axes.unicode_minus'] = False   #解決負號無法

#讀取文件,加載數據
df1 = pd.read_csv(r"E:\Data analysis\data\tianchi\AD data\user_profile.csv",encoding = "gbk")
df2 = pd.read_csv(r"E:\Data analysis\data\tianchi\AD data\raw_sample.csv",encoding = "gbk")
df3 = pd.read_csv(r"E:\Data analysis\data\tianchi\AD data\ad_feature.csv",encoding = "gbk")

  4.1 計算各個廣告的點擊次數

由於數據量巨大,宕機時間長,選擇部分數據分析,以下計算各個廣告的點擊次數。

 

 4.2 選擇子集

篩選廣告點擊湊數最多的710164作為新的數據集建表

 

 

 

 

5 數據分析

5.1 分析不同渠道點擊率

group1 = df.groupby("pid").agg({"clk":"sum","pid":"count"})
rate = (group1["clk"]/group1["pid"]).apply(lambda x: format(x, '.2%'))
group1

 

 

 

 

 由於渠道有限,僅從2個渠道源分析來看,430548_1007需要繼續維護渠道,提高轉化率,430548_1007需要加大渠道投入,做好引流。

5.2 分析不同投放時間點擊率

5.2.1 每日各時間段點擊率分析

# 時間處理, 注意: unix時間戳,轉北京時間(差8個鍾)
df["time"]=pd.to_datetime(df['time_stamp'],unit="s",utc=True)+dt.timedelta(hours=8)#.tz_convert("Asia/Shanghai")
# 取日期,並新增列
df["date"] = df["time"].dt.normalize()
# 取hour,並新增列
df['hour'] = [dt.datetime.strftime(x,'%H') for x in df['time']]
# 每日各時間段點擊率分析
group2 = df.groupby("hour").agg({"pid":"count","clk":"sum"})
xdata_1 = group2.index
ydata_1 = group2["pid"]
rate_1 = (group2["clk"]/group2["pid"])
# 繪雙坐標圖
fig,ax=plt.subplots()
ax.bar(xdata_1,ydata_1)
ax.set_ylabel('瀏覽量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(xdata_1,rate_1,"r")
ax.set_xlabel('小時')
ax1.set_ylabel('點擊率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

a. 在瀏覽量達到一定數據時,每日的上午10點、下午3點的點擊率出現了小高峰。

b. 晚上由9點開始瀏覽量主鍵提升,但點擊率相對於前段時間較低,說明多數用戶是目的性流量走低。

c. 深夜0-2點點擊率超過12%,推測原因,可能是瀏覽量較低,偶然性提升,也可能是這部分人群的目的性較強,如果能獲知這些人群畫像,能高效的做好營銷轉化。

說明,目標客戶在深夜轉化的可能性更高。

5.2.2 每周各天點擊率分析

df["dayofweek"] = df["date"].dt.dayofweek
group3 = df.groupby("dayofweek").agg({"pid":"count","clk":"sum"})
# 繪雙坐標圖
fig,ax=plt.subplots()
ax.bar(group3.index,group3["pid"])
ax.set_ylabel('瀏覽量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group3.index,group3["clk"]/group3["pid"],"r")
ax.set_xlabel('星期')
ax1.set_ylabel('點擊率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

 可知,周六、日,周一點擊率較高,瀏覽量也不低,說明這幾天帶來的收益是更大的。

5.2.3 各天各時間段分析

# 5.2.3 各天各時間段分析
df["dayofweek"] = df["date"].dt.dayofweek
group4 = df.groupby(["dayofweek","hour"]).agg({"pid":"count","clk":"sum"})
group4["rate_3"] = group4["clk"]/group4["pid"]
# 前五
group4.sort_values(by="rate_3",ascending=False).head()

 

 5.3 分析人群特征點擊率

5.3.1 各年齡層次人群點擊率分析

# 5.3 分析人群特征點擊率
# 5.3.1 各年齡層次人群點擊率分析
group5 = df.groupby("age_level").agg({"pid":"count","clk":"sum"})
# 繪雙坐標圖
fig,ax=plt.subplots()
ax.bar(group5.index,group5["pid"])
ax.set_ylabel('瀏覽量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group5.index,group5["clk"]/group5["pid"],"r")
ax.set_xlabel('年齡層')
ax1.set_ylabel('點擊率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

 a. 廣告投放在1/2/5年齡層帶來的點擊率更高,需要從時間維度考慮,增大廣告投入對這三個年齡層的效果。

b. 對與年齡層6,可以從時間維度考慮增大樣本投入后會不會有更大的點擊率,從而判定是否需要更多的投入。

c. 對比年齡層1/5和3,說明可以放棄對年齡層3的投入,最好增加時間維度和投入資源維度。

d. 年齡層0需要投入更多的資源,觀察效果后判定舍去與否。

5.3.2 各個消費等級人群點擊率分析

# 5.3.2 各個消費等級人群點擊率分析
group6 = df.groupby("pvalue_level").agg({"pid":"count","clk":"sum"})
# 繪雙坐標圖
fig,ax=plt.subplots()
ax.bar(group6.index,group6["pid"])
ax.set_ylabel('瀏覽量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group6.index,group6["clk"]/group6["pid"],"r")
ax.set_xlabel('消費等級')
ax1.set_ylabel('點擊率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

  高檔人群點擊率偏低僅有7.13%,原因可能是產品的客單價是109,不符合這類人群的需求。

5.3.3 各購物深度人群點擊率分析

# 5.3.3 各購物深度人群點擊率分析
group7 = df.groupby("shopping_level").agg({"pid":"count","clk":"sum"})
# 繪雙坐標圖
fig,ax=plt.subplots()
ax.bar(group7.index,group7["pid"])
ax.set_ylabel('瀏覽量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group7.index,group7["clk"]/group7["pid"],"r")
ax.set_xlabel("購物深度")
ax1.set_ylabel('點擊率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

 

中、深度用戶點擊率略高,如果逐步轉化至付費階段,相比於淺度用戶,中、深度用戶后續付費根能行會更大。

5.3.4 各職業(是否大學生)人群點擊率分析

# 5.3.4 各職業(是否大學生)人群點擊率分析
group8 = df.groupby("occupation").agg({"pid":"count","clk":"sum"})
# 繪雙坐標圖
fig,ax=plt.subplots()
ax.bar(group8.index,group8["pid"])
ax.set_ylabel('瀏覽量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group8.index,group8["clk"]/group8["pid"],"r")
ax.set_xlabel("是否大學生群體(1-是,0-非)")
ax1.set_ylabel('點擊率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

 

大學生的點擊率略高,但總體區分度不大,說明樣本用戶群體對710164敏感度差異性不大,可能是價格109屬於平價款的原因。

6 結論和建議

6.1 渠道分析

只有2個渠道,區分度不大,從引流和轉化的角度看,430548_1007需要繼續維護渠道,提高轉化率,430548_1007需要加大渠道投入,做好引流。

6.2 投放時間分析

加大對深夜0-2點時間段廣告投放,周六、日和周一,投放效果更好。

6.3 人群分析

(1)加大對年齡層1/2/5年齡層投放效果,建議減少對高檔人群的投放,加大對中深度用戶投放,加大對城市等級2/4投放,廣告對職業不敏感,建議取消這部分投入

(2)多維度下其他特征,可以結合時間維度,多做測試,然后取舍。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM