Python ve GA4 ile arama trafiği nasıl tahmin edilir?

Yayınlanan: 2021-04-26

Arama motoru optimizasyonuna (SEO) odaklanan herhangi bir stratejide, veri analizi esastır. Bu alanda, kendi içinde diğerlerinden oldukça farklı bir davranış ve özelliklere sahip olan organik arama trafiğinin analizinde kariyerlerini geliştirmeyi seçen giderek daha fazla uzman var: ücretli arama, e-posta, organik sosyal, doğrudan vb. Bu anlamda ve bugün mevcut olan çok çeşitli araçlar sayesinde, bu tür çalışmalar sadece birkaç yıl öncesine kıyasla düşünülemez bir derecede gelişmeyi başardı.

İleriye doğru atılan bu büyük adım, esas olarak, karmaşık matematiksel işlemlere güvenmek zorunda kalmadan analitik modeller üretmemize izin veren yeni metodolojilerin ve gelişmelerin ortaya çıkmasından kaynaklanmaktadır. Halihazırda test edilmiş ve onlarla çalışmaya başlamaya hazır teknik ve algoritmalara sahip olduğumuz için şanslıyız.

Aşağıdaki makalede, hesaplanan trendin mevsimsellik ve önceki dönemlere göre ayarlandığı bir zaman serisinin bir dizi verisi için bir tahmin modeli oluşturmaya odaklanacağız. Daha spesifik olarak, mülkümüzün organik arama trafiğini Google Analytics 4'ten (bundan sonra GA4 olarak anılacaktır) tahmin edeceğiz. Bunu gerçekleştirmek için birçok seçenek var, ancak bu özel durum için geliştirmeyi tamamen Python'da yürütmeye karar verdim.
Bu makalenin dayandığı komut dosyası, açıkça farklılaştırılmış üç bölümden oluşmaktadır:

  • Veri çıkarma . Organik arama trafiğini toplamak için adım adım yeni GA4 API nasıl kullanılır?
  • Veri modelleme . Facebook'un açık kaynak kitaplığı olan Prophet'in zaman serisi tahminleri yapmak için kullanılması.
  • Veri görselleştirme . Trend değişikliklerini ve modellenmiş tahmini göster.

Python Kullanarak API'si Üzerinden GA4 Veri Çıkarma

Google Analytics Veri API'si (GA4) ile uğraşırken bilmemiz gereken ilk şey, GA4'ün geliştirme durumu olduğudur. Google'ın sayfasında detaylandırdığı gibi, şu anda erken aşamada bir sürümde. Spesifik olarak, bu makalenin yazıldığı tarih itibariyle henüz Beta aşamasındadır.

Unutulmamalıdır ki GA4 14 Ekim 2020 tarihinde yayınlanmıştır. Aradan sadece birkaç ay geçmiştir. Aslında, halihazırda bir Universal Analytics mülküne sahip olanlar ve yeni bir GA4 mülkü oluşturanlar, herhangi bir kısıtlama olmaksızın her iki sürümü yan yana kullanmaya devam edebilecekler. Universal Analytics mülklerinin ne zaman çalışmayı durduracağı kesin olarak bilinmiyor. Her durumda, benim tavsiyem, mümkün olan en kısa sürede GA4 türünde yeni bir özellik oluşturmak olacaktır. Bu şekilde daha geniş bir veri geçmişine sahip olacaksınız. GA4'ten geçen her günün yeni işlevleri entegre ettiği veya mevcut olanları iyileştirdiği de dikkate alınmalıdır. Şu anda sürekli bir gelişim içindedir.

Bu nedenle, elbette aşağıda açıklanan kodda küçük değişiklikler olabilir. Her ne kadar kesin olsa da, minimum olacaklar. Örnek olarak, RunReportRequest() sınıfında “varlık” (Alfa aşaması) alanını “özellik” (Beta aşaması) olarak yeniden adlandırmak gibi küçük önemsiz şeylerle zaten karşılaştım.
Her şeyden önce, API isteğini oluşturmadan önce, hangi öğelerin mevcut olduğunun anlaşılması gerekir. Temel olarak, aşağıdaki yapıyı takip etmekle ilgilidir:

GA4 Data v1 Beta API RunReportRequest için Türler

Gerçek oldukça farklı olsa da, ilk bakışta oldukça sezgiseldir. Bir talepte bulunmak için her zaman en azından aşağıdaki belgelere sahip olmak gerekir:

  • Google APIS geliştiricisi
  • Google Analytics Veri API'sini (GA4) Raporlama.

Bunun nedeni, alan adlarının, alanları JSON biçiminde temsil eden resmi belgelerden biraz farklı olmasıdır. Bir örnek, Filter sınıfının alan alan adıdır. Python'da onu field_name olarak tanımlamalıyız. İyi bir genel kural, her zaman bir deve vaka tipi alanından ("alanAdı" gibi) bir yılan vakasına ("alan_adı" gibi) gitmek olacaktır.

Devam etmeden önce, projemizi başlatmak için bir an duralım. Python'da betik geliştirirken çoğu durumda olduğu gibi, gerekli kitaplıkları içe aktarmak ve yürütme ortamını hazırlamak için biraz zaman harcamamız gerekiyor.

  • Python'da yeni bir proje oluşturun. Bu durumda PyCharm yazılımı kullanılmıştır.
  • Google Cloud Platform'da Google Analytics Data API'yi etkinleştirin ve oluşturulan hizmet hesabı dosyasını (JSON türü) indirin ve Python projesinin oluşturulduğu klasöre kaydedin. Bu dosyayı açarken, [email protected] gibi bir şey olacak olan client_email alanının değeri kopyalanmalıdır.
  • Bu client_email değerini, verilerin çıkarılacağı GA4 özelliğine ekleyin. Bunu kullanıcı yönetimi bölümünde yapmanız gerekecek. En azından, ona 'Okuma ve Analiz Etme' izin düzeyinin verilmesi gerekli olacaktır.
  • İstemci terminali (PyCharm) aracılığıyla, API isteklerinin yapılacağı proje dizinine Google Analytics Veri kitaplığını kurun:
    pip install google-analytics-data

Bundan sonra yapmanız gereken tek şey, aşağıda göreceğiniz gibi temel olarak üç bölümden (istemci, istek ve yanıt) oluşan istek oluşturmak ve toplanan verileri görüntülemek veya kaydetmek.

GA4'e basit bir istekte bulunmak için kod

İstek değişkenine eklenen herhangi bir boyut, metrik, filtre, veri sırası, tarih aralığı vb., bir değişkene ( metrikler = [Metrik (..)] bağlantılı bir sınıf olarak eklenmelidir (önceki resim "RunReportRequest Türleri") ). Bu, toplanacak verilerin yapısını anlamayı çok daha kolay hale getirir. Bu anlamda, en üst düzeydeki her sınıf için belirli bir ithalat gerçekleştirilmelidir. Yani belirli bir zaman aralığı için bir boyut ve metrik eklemek istiyorsanız, en azından aşağıdaki nesneler gerekli olacaktır…

 google.analytics.data_v1beta'dan BetaAnalyticsDataClient'i içe aktarın
google.analytics.data_v1beta.types adresinden RunReportRequest'i içe aktarın
google.analytics.data_v1beta.types adresinden DateRange'ı içe aktarın
google.analytics.data_v1beta.types adresinden Dimension içe aktarın
google.analytics.data_v1beta.types'den Metrik'i içe aktarın

Elbette belirli değişkenlere belirli değerler eklemek de mümkündür ( name = 'eventCount' ). Bu nedenle, daha önce açıklanan dokümantasyonun anlaşılması ve batırılması esastır.

Buna ek olarak, 2. adımda daha önce indirilen dosyanın yolunu içerecek olan os.environ [“GOOGLE_APPLICATION_CREDENTIALS”] değişkenine özel dikkat gösterilmelidir. Bu kod satırı, izinleri yönetirken bazı sorunları önleyecektir. Google API'sı.

Kod doğru bir şekilde yürütüldüyse, şuna benzeyen bir sonuç göreceksiniz: {Date, Events}, {20210418, 934}, {…}, ….

Tarama Verileri³

Ek veri kümelerine sorunsuz bağlantılarla analizinizi genişletin. CRM, izleme çözümü veya başka herhangi bir kaynaktan gelen geri bağlantılar, SEO trafiği, sıralamalar ve özel veri kümeleri hakkındaki verilere dayalı olarak SEO stratejinizi analiz edin.
Daha fazla bilgi edin

Facebook Prophet aracılığıyla veri tahmini

Günümüzde, veri geçmişine dayalı olarak herhangi bir tahmin türünü gerçekleştirmek için birçok ücretsiz ve mevcut seçenek bulunmaktadır. Bu özel durumda, Peygamber kütüphanesini seçtim, ama gerçekten nedir?

Facebook'un Veri Bilimi ekibi tarafından, doğrusal olmayan eğilimlerin haftalık ve yıllık olarak günlük bir mevsimselliğe göre ayarlandığı ek bir modele dayalı bir zaman serisi veri kümesinin davranışını tahmin etmek için oluşturulan açık kaynaklı bir kitaplıktır (R ve Python için mevcuttur). tatil günlerinin etkilerini dikkate alın.
Önerilen uygulamaya (organik arama trafiği tahmini) geri dönersek, yapılacak ilk şey aşağıdaki kitaplıkları kurmaktır:

  • Pandalar ( pip kurulum pandaları ). Veri yapılarını yönetin ve analiz edin.
  • Plotly ( pip kurulum arsa ). Her türlü grafik oluşturma.
  • Peygamber ( conda install -c conda-forge fbprophet -y ).

Ardından, her zaman olduğu gibi, bu kitaplıklarla ilişkili içe aktarma işlemlerini gerçekleştirmelisiniz. Bundan sonra yapmanız gereken tek şey, tahminin modellemesini ve buna karşılık gelen görselleştirmeyi gerçekleştirmektir. Bunu yapmak için, Peygamber örneğinde, sadece şu süreci izlemelisiniz:

  • Tahmini oluşturmak için istenen niteliklerle yeni bir Prophet nesnesi başlatın.
  • GA4'ten ayıklanan verileri bir veri çerçevesi olarak ileterek uygun yöntemi isteyin. Bu istek bazı durumlarda birkaç saniye sürebilir. Toplanan verileri içeren veri çerçevesi, yalnızca adları her zaman aynı olan iki sütundan oluşmalıdır: ds (tarih türü alanı) ve y (çalışma için metrik).
  • Tahminin seçilen tarih aralığından ulaşması gereken dönemlerin sayısını ve verilerin toplanma sıklığını (haftalık, aylık vb.)
  • Yeni gelecek veri çerçevesinin her satırına bir tahmin değeri (yhat) atayacak tahmin yöntemini isteyin.
  • Oluşturulan tahminleri görüntüleyebilmek için çizim yöntemini isteyin.
  • Verilerin trendini ve mevsimselliğini görsel olarak anlamaya yardımcı olan plot_components yöntemini isteyin.
 m = Peygamber()
uygun(df)
gelecek = m.make_future_dataframe(dönemler=365)
tahmin = m.tahmin(gelecek)
m.plot(tahmin)
m.plot_components(tahmin)
plt.göster()

İstenen tahmin sadece altı adımda oluşturulmuş ve nispeten basit görünse de, tahminin oluşturulmasında anahtar olacak birkaç unsur göz önünde bulundurulmalıdır. Hepsi bir şekilde tahminin uygunluğunu etkiler. Sonuç olarak, bu makalenin durumunda, organik arama trafiğimizin mantığına uygun bir tahmin üretmekle ilgilidir. Bunun için Peygamber'in bazı daha gelişmiş ayarlarını anlamak gerekir.

  • Özel günler ve tatiller. Özel günler ekleme imkanı vardır.
  • aykırı değerler Tahmini etkiliyorlarsa ortadan kaldırılmalıdırlar.
  • Değişim noktaları. Analiz edilen süre boyunca trend değişikliklerinin tespiti.
  • Teşhis. Verilerin tarihsel çalışmasına göre tahmin hatasının ölçümüne dayalı doğrulama.
  • Arttırmak. Doğrusal veya lojistik arasında seçim.
  • Mevsimsellik. Toplamsal veya çarpımsal arasında seçim.

Bütün bunlar ve daha birçok seçenek, Peygamber kütüphanesinin bu dokümantasyonunda mükemmel bir şekilde detaylandırılmıştır.

Trafik tahminini görselleştirebilmek için tam komut dosyası oluşturma

Şimdi geriye kalan tek şey, yapbozun tüm parçalarını tek bir senaryoda birleştirmek. Bu tür bir bulmacayı çözmenin genel yolu, önceden ayrıntılı olarak verilen süreçlerin her biri için düzenli ve temiz bir şekilde yürütülebilecekleri bir işlev oluşturmaktır:

 def ga4(özellik_kimliği, başlangıç_tarihi, bitiş_tarihi):
[…]

def tahmin(dim, karşılandı, başına, sıklık):
[…]

eğer __name__ == "__main__":
boyut, metrik = ga4(PROPERTY_ID, START_DATE, END_DATE)
tahmin(boyut, metrik, DÖNEM, FREK)

Tahminin nihai sonucunu görselleştirmeden önce, analiz edilen organik arama trafiğine bakmak iyi bir fikirdir.

İlk bakışta, alınan farklı stratejilerin ve eylemlerin zaman içinde nasıl bir etkisi olduğunu görebilirsiniz. Diğer kanallardan farklı olarak (örneğin, Ücretli Arama kampanyaları), Organik Arama'dan elde edilen trafik genellikle çok az sayıda kayda değer salınımlara (vadi veya zirveler) sahiptir. Zamanla kademeli olarak artma veya azalma eğilimi gösterir ve bazen mevsimsel olaylardan etkilenir. Genellikle gözle görülür dalgalanmalar, arama motoru algoritmasındaki (Google, Bing vb.) güncellemelerle ilişkilendirilir.

Komut dosyasının çıktısı, trend, mevsimsellik, tahmin veya veri sıklığı gibi önemli faktörlerin ayrıntılı olarak açıklandığı aşağıdaki resimlerde görülebilir.
Elde edilen tahmini analiz edersek, genel bir şekilde “bugüne kadar uygulanan aynı SEO stratejisine devam edersek, arama motorlarından gelen trafik kademeli olarak artmaya devam edecek” sonucuna varılabilir. “Web sitesinin performansını iyileştirme, kaliteli içerik üretme, alakalı linkler sağlama vb. çabalarımıza değdiğini” garanti edebiliriz.

Organik arama trafiğinin trendini, mevsimselliğini ve tahminini, trendini görselleştirme

Sonuç olarak, kodu bütünüyle paylaşacağım, böylece yalnızca kopyalayıp Python'un IDE'sinde (Entegre Geliştirme Ortamı) çalıştırmanız gerekir. Bunun düzgün çalışması için yukarıda belirtilen tüm kitaplıkların kurulu olması gerektiğini söylemeye gerek yok.

 pandaları pd olarak içe aktar
fbpeygamberi içe aktar
fbpeygamberden import Prophet
fbprophet.plot'tan add_changepoints_to_plot'u içe aktarın
matplotlib.pyplot'u plt olarak içe aktar
işletim sistemini içe aktar

google.analytics.data_v1beta'dan BetaAnalyticsDataClient'i içe aktarın
google.analytics.data_v1beta.types adresinden DateRange'ı içe aktarın
google.analytics.data_v1beta.types adresinden Dimension içe aktarın
google.analytics.data_v1beta.types'den Metrik'i içe aktarın
google.analytics.data_v1beta.types'den içe aktarma Filtresi
google.analytics.data_v1beta.types adresinden FilterExpression'ı içe aktarın
google.analytics.data_v1beta.types adresinden FilterExpressionList'i içe aktarın
google.analytics.data_v1beta.types adresinden RunReportRequest'i içe aktarın

EMLAK_
START_DATE = '2020-01-01'
END_DATE = '2021-03-31'
DÖNEMLER = 4
FREK = 'M'

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "[Kimlik bilgileriyle birlikte json dosyasının yolunu buraya ekleyin]"

def ga4(özellik_kimliği, başlangıç_tarihi, bitiş_tarihi):
istemci = BetaAnalyticsDataClient()

request = RunReportRequest(property='properties/' + property_id,
boyutlar=[Boyut(ad='tarih')],
metrics=[Metrik(name='eventCount')],
date_ranges=[DateRange(start_date=start_date,
end_date=end_date)],
boyut_filter=FilterExpression(
and_group=FilterExpressionList(ifadeler=[
FilterExpression(filter=Filtre(field_name='sessionDefaultChannelGrouping',
string_filter=Filter.StringFilter(
value='Organik Arama',
match_type=Filter.StringFilter.MatchType(
1)))),
FilterExpression(filter=Filtre(field_name='eventName',
string_filter=Filter.StringFilter(
değer='session_start',
match_type=Filter.StringFilter.MatchType(
1))))
]))
)

yanıt = client.run_report(istek)

x, y = ((2) aralığındaki i için [])
answer.rows'daki satır için:
x.append(row.dimension_values[0].value)
y.append(row.metric_values[0].value)
print(row.dimension_values[0].value, row.metric_values[0].value)

dönüş x, y

def tahmin(x,y,p,f):
print('Peygamber %s' % fbprophet.__version__)

veri = {'ds': x, 'y': y}
df = pd.DataFrame(veri, sütunlar=['ds', 'y'])

m = Peygamber(büyüme='doğrusal',
changepoint_prior_scale=0.5,
mevsimsellik_mode='katkı maddesi',
Daily_seasonality=Yanlış,
haftalık_sezonluk=Doğru,
yearly_seasonality=Doğru,
tatiller=Yok,
)
uygun(df)
gelecek = m.make_future_dataframe(dönemler=p, sıklık=f)
tahmin = m.tahmin(gelecek)

print(tahmin[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head())

fig = m.plot(tahmin, xlabel='Tarih', ylabel='Ziyaretler')
add_changepoints_to_plot(fig.gca(), m, tahmin)
m.plot_components(tahmin)
plt.göster()

eğer __name__ == "__main__":
channel_group, event_count = ga4(PROPERTY_ID, START_DATE, END_DATE)
tahmin(channel_group, event_count, PERIODS, FREQ)

Umarım bu makale size ilham kaynağı olmuştur ve bundan sonraki projelerinizde çok işinize yarayacaktır. Bu tür bir uygulama hakkında öğrenmeye devam etmek veya daha teknik Dijital Pazarlama hakkında daha fazla bilgi edinmek istiyorsanız, lütfen bana ulaşın. Daha fazla bilgiyi aşağıdaki yazar profilimde bulabilirsiniz.