Eylül 11th, 2019

Python ile Facebook İlgi Alanı Analizi

Güncelleme : Nazar değdi, yaklaşık 2 yıldır kullandığımız Keyword Stats özelliği artık yok. 🙂 Facebook’tan yapılan açıklamaya göre, geçtiğimiz aydan itibaren Keyword Stats özelliği kapatıldı. Yerine Facebook Insights API’de benzer görevi görebilecek bir özellik geleceğinden bahsedildi.

Facebook reklamı verirken bolca ilgi alanı seçiyoruz değil mi? Zaten bu konuda uzmansanız ve yeteri kadar da vaktiniz varsa split test uygulayıp sizin için en iyi ilgi alanlarını belirlemişsinizdir. Fakat gerek yeni başladığınız bir hesapta veya yeteri kadar zamanınız yoksa ilgi alanlarının hangilerinin verimli çalıştığını öğrenebilir miyiz ? Bu yazıyı hazırladığımıza göre tabi ki cevap, Evet 🙂 Python ile Facebook API’sine bağlanıp bu datayı nasıl çekeceğimizi anlatacağım. Yeni bir Python öğrencisi olarak :), bugüne kadar manuel yaptığım çalışmaları python’a aktararak burada peyderpey paylaşacağım.

Facebook API’si ile Keyword Stats Analizi

Facebook API’si Ad Manager’da vermediği bir datayı bizlere veriyor. Bu data ilgi alanları datası API’de ise Keyword Stats olarak geçiyor. Bu data ile bir kampanyada ki ilgi alanlarının her birine ait ( cpc, ctr, cost per action, impression ) datalarına ulaşabiliyoruz.

Peki Facebook bu veriyi neden Ad Manager’da Vermiyor ?

İşte kritik soru bu. Bu data %100 geçerli bir data değil. Yani siz reklamınızı hem “hotel”, hem “travel” ilgi alanına çıktınız. Bu iki ilgi alanına sahip bir kişi tıkladı. Bu tıklamayı facebook hangisine yazacak? İşte burada bir karmaşa çıkıyor. Facebook’un Ad Manager’da bunu sunabilmesi için %100 doğruluklu bir veri olması gerekiyor. Bu karmaşaya girmeyen Facebook total tıklamayı verip geçiyor.

Peki API bu datayı nasıl veriyor ?

API’de alacağınız rakamların, gerçek rakamlarla arasında oynamalar görebilirsiniz. Yani tıklama 300’dür siz onu 343 görebilirsiniz. Burada şu çıkarımı yapabilirsiniz, evet demek aynı kitleye sahip kişiler var. Aslında bu detay bizim çokta umurumuzda değil. Biz genel bir bakış atmak istiyoruz. Tek amacımız kitleler arası kıyaslama yapabilmek.

O zaman uyarılarımızı yaparak başlayalım.

1- Bu datayı çekebilmek için reklamınız en az 7 gündür aktif olmalı.
2- ID’sini yazacağınız reklamın içinde bulunduğu reklam setinde ilgi alanları olmalı.

Facebook API’sine Bağlanmak

Python ile Facebook API’sine bağlanabilmek için aşağıdaki kütüphaneleri sisteminize kurmanız ve çağırmanız gerekiyor.

from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.ad import Ad

Ayrıca Facebook Developers‘tan da bir Application oluşturmanız lazım. Bağlanırken App ID, App Secret ve Access Token‘a ihtiyacımız olacak. Google’da ufak bir aramayla ( “facebook api access token oluşurma”) görsel bir şekilde nasıl oluşturulduğuna ulaşabilirsiniz. Bu kısımları hızlı geçiyorum. Ardından pandas ve numpy kütüphaneleri ile görselleştirme için kullanacağımız kütüphaneleri import ediyoruz.

import pandas as pd
import numpy as np
#Görselleştirme Kütüphaneleri
import seaborn as sns
import matplotlib.pyplot as plt
from plotly.offline import plot
import plotly.graph_objs as go

Şimdi sırada bağlantımızı yapma vakti. APP ID, APP SECRET, ACCESS TOKEN değerlerimizi giriyoruz. Özellikle Access Token’ı alacağınız kullanıcı, reklam hesabına ulaşan kullanıcı olması gerekiyor.

my_app_id = 'ENTER YOUR APP ID'
my_app_secret = 'ENTER YOUR APP SECRET'
my_access_token = 'ENTER YOUR ACCESS TOKEN'
FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)

Bağlantımız tamam o zaman verimizi çekebiliriz. Ad ID kısmına incelemek istediğiniz AD ID’sini yazmanız gerekiyor. Reklam yöneticinde reklama girerseniz sağ üstte göreceksiniz.

ad = Ad('ENTER YOUR AD ID')
keywords = ad.get_keyword_stats([ "name","clicks", "cpc", "ctr", "cost_per_total_action", "impressions", "spend", "total_actions"])
print(keywords)

Eğer buraya kadar kısımda bir yanlışlık yapmadıysanız output olarak JSON’a benzer bir cursor object alıyoruz. Dediğim gibi acemilikten ben bunu dataframe’e çevirene kadar biraz uğraştım, daha iyi bilenler belki daha farklı bir yöntemle hızlıca çözümleyebilir. Aşağıda nasıl çözümlediğimi gösteren kodları paylaşıyorum.

data = []
for i in keywords: data.append(i)
df4 = pd.DataFrame.from_dict(pd.DataFrame(data).loc[0])
df4.columns = ["datas"]
fb_dataframe = df4['datas'].apply(pd.Series)
fb_dataframe.index = range(len(fb_dataframe))

Artık dataframe’imiz hazır. 7.index’te ki boş satırıda silerseniz bitti bu iş.

fb_dataframe.dropna(inplace=True)

Sıra görselleştirmeye geldi. Artık dataframe’imizi oluşturduk. Aslında sadece bu çıktı gibi 5-10 satır olan verilerde göz gezdirerek bile durumu analiz edebilirisiniz. Fakat çok sayıda ilgi alanınız varsa görselleştirme işinizi kolaylaştırır. Aşağıda farklı kütüphanelerden farklı görselleştirmeler yapacağız. matplotlib ve seaborn genel kullanımda olanlar. Plotly ise özellikle hover’lı scatter plot sebebiyle tercih sebebi olabiliyor. Şimdi bu çıktıya bir göz atalım.

Önce kolaylık olsun diye değişkenlerimizi tanımlayalım.

name = fb_dataframe['name']
clicks = fb_dataframe['clicks']
cpa = fb_dataframe['cost_per_total_action']
cpc = fb_dataframe['cpc']
ctr = fb_dataframe['ctr']
action = fb_dataframe['total_actions']

Ardından ilk görselleştirmemizi yapalım. Bakalım en çok tıklamayı hangi ilgi alanı kitlesinden almışız.

plt.figure(figsize=(15,10))
ax= sns.barplot(x=name, y=clicks)
plt.xlabel('Facebook Interest')
plt.ylabel('Clicks')
plt.title('Clicks / Interest Chart')

Gördüğünüz gibi tatil sektörüne hitap eden bir müşterimizde bu ilgi alanlarına reklam çıkmışız. Ve tıklamaların büyük çoğunluğu “Travel” yani ” Seyahat” kitlesinden gelmiş.

Peki en çok CPC hangisinde acaba ? Yani bir tıklama için en çok ödeme yaptığımız kitle hangisi ?

plt.figure(figsize=(15,10))
ax= sns.barplot(x=name, y=clicks)
plt.xlabel('Facebook Interest')
plt.ylabel('Clicks')
plt.title('Clicks / Interest Chart')

Gördüğünüz gibi Hotels kitlesi zaten çok fazla tıklama almadığımız bir kitleydi. Sebebi belli oluyor gibi 🙂 CPC olarak en yüksek ödemeyi yaptığımız kitle. Bir de CTR’a göz atalım.

plt.figure(figsize=(15,10))
ax= sns.barplot(x=name, y=ctr)
plt.xlabel('Facebook Interest')
plt.ylabel('CTR')
plt.title('CTR / Interest Chart')

CTR grafiğimizde ise Airbnb ve Tatilbudur kitlesi ön plana çıkıyor. Yani bu kitlelerdeki kişiler reklamlarımızı daha sevmiş gibi. Şimdi bir üstteki CPC grafiğine bakarsanız burada bu kitlelerin üstüne en düşük CPC’ye sahip olduğu kitleler olduğunu fark edeceksiniz.

QuickWins: Zaten biliyorduk, ama grafiklere baktığımızda da netleşen bir şekilde CTR’ınız ne kadar yüksekse CPC’niz o kadar düşüyor. Reklam görselinin kalitesi vs bir yana, hedef kitleye verdiğiniz mesajı doğru alan kitlelerde CPC’niz düşük oluyor. Bu kitlelerin hepsine aynı reklam gösterilmesine rağmen verdiği tepkiler farklı olabiliyor.

O zaman CPC ve CTR arasında da bir scatter plot çizelim. İşte Plotly’ı burada kullanıyorum.

labels = name
x = np.arange(len(labels)) # the label locations
width = 0.12 # the width of the bars
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, ctr, width, label='CTR')
rects2 = ax.bar(x + width/2, cpc, width, label='CPC')
ax.set_ylabel('CPC')
ax.set_title('CTR vs CPC')
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()
fig.tight_layout()
plt.show()

Gördüğünüz gibi CTR’ı çok düşük CPC’si yüksek olan Hotels.com kitlesi bu kampanya için çok avantajlı olmadığı gözüküyor. Tatilbudur ve Airbnb kitlesi ise tıklama analizimize göre daha avantajlı bir durumda.

Peki bize satış getiren kitleler hangileri.

plt.figure(figsize=(15,10))
ax= sns.barplot(x=name, y=action)
plt.xlabel('Facebook Interest')
plt.ylabel('Actions')
plt.title('Actions / Interest Chart')

İşte burada da actions verisinin grafiğini oluşturduk. Aslında actions verisi tam anlamıyla satış değil. Bu veri içerisinde dönüşüm, sepete ekleme vb kampanya amacınıza hizmet eden actionları içerebiliyor. Airbnb ve Tatilbudur kitleleri çok uygun maliyetli olmasına rağmen satışı yok gözüküyor. Sebebi nedir ?

Sebebi benim, müşteri verileri olması sebebiyle time range’i düşük tuttum. Yani aslında bu analizde bir iki kitle haricinde anlamlı veri yok. ( Yorumlarken, tüm datayı bensimyerek yorum yapmış olabilirim 🙂 ) Benim amacım burada bu verilerden nasıl faydalanabileceğiniz, KeywordStats‘ı daha önce duymadıysanız, aktif bir şekilde kullanabilmeniz. Kendi verilerinizde daha geniş bir zaman dilimiyle daha anlamlı verilere ulaşabilirsiniz.

Ayrıca tüm bu çalışmaları facebook graph api explorer üzerinden de yapabilirsiniz. Bu optimizasyonlarla reklam bütçenizi bir hayli düşürebiliyorsunuz. En önemlisi sizin için değerli kitlelere ulaşabiliyorsunuz. Daha düşük cost per action‘ı olan kitleler her zaman daha değerli olabiliyor.

Aslında bu yazıyı yazarken şunu fark ettim genel olarak facebook reklam stratejisi üzerine de bir yazı dizisi oluşturabiliriz. Eğer ilginizi çekiyorsa aşağıda bulunan newsletter alanında blog yazılarımızı taze taze okuyabilirsiniz. 🙂

Yorumlar
İlginizi Çekebilir