Cara memperkirakan lalu lintas pencarian dengan Python dan GA4
Diterbitkan: 2021-04-26Dalam strategi apa pun yang berfokus pada optimisasi mesin pencari (SEO), analisis data sangat penting. Semakin banyak spesialis di bidang ini yang memilih untuk mengembangkan karir mereka dalam analisis lalu lintas pencarian organik, yang dengan sendirinya memiliki perilaku dan kekhasan yang sangat berbeda dari yang lain: pencarian berbayar, email, sosial organik, langsung, dll. pengertian ini dan berkat berbagai alat yang tersedia saat ini, studi semacam ini telah berhasil berkembang ke tingkat yang tidak terpikirkan dibandingkan dengan beberapa tahun yang lalu.
Langkah besar ke depan ini terutama disebabkan oleh munculnya metodologi dan perkembangan baru yang memungkinkan kita untuk menghasilkan model analitik tanpa harus bergantung pada operasi matematika yang rumit. Kami beruntung memiliki teknik dan algoritme yang telah kami uji dan siap untuk mulai bekerja dengannya.
Dalam artikel di bawah ini, kita akan fokus pada pembuatan model prediktif untuk sekumpulan data deret waktu di mana tren yang dihitung disesuaikan dengan musim dan periodisitas sebelumnya. Lebih khusus lagi, kami akan memprediksi lalu lintas pencarian organik properti kami dari Google Analytics 4 (selanjutnya GA4). Ada banyak opsi untuk melakukan ini, namun untuk kasus khusus ini saya telah memutuskan untuk menjalankan pengembangan sepenuhnya dengan Python.
Skrip yang menjadi dasar artikel ini terdiri dari tiga bagian yang dibedakan dengan jelas:
- Ekstraksi data . Cara menggunakan GA4 API baru selangkah demi selangkah untuk mengumpulkan lalu lintas penelusuran organik.
- pemodelan data . Penggunaan Nabi, perpustakaan sumber terbuka Facebook untuk membuat prediksi deret waktu.
- visualisasi data . Tampilkan perubahan tren dan prediksi model.
Ekstraksi Data GA4 Melalui API-nya Menggunakan Python
Hal pertama yang perlu kita ketahui ketika kita berurusan dengan Google Analytics Data API (GA4) adalah bahwa GA4 adalah status pengembangannya. Seperti yang dirinci oleh Google di halamannya, saat ini dalam versi tahap awal. Secara khusus, hingga artikel ini ditulis, masih dalam tahap Beta.
Perlu dicatat bahwa GA4 diterbitkan pada 14 Oktober 2020. Baru beberapa bulan berlalu. Bahkan, mereka yang telah memiliki properti Universal Analytics dan membuat properti GA4 baru akan dapat terus menggunakan kedua versi secara berdampingan, tanpa batasan apa pun. Tidak diketahui secara pasti kapan properti Universal Analytics akan berhenti berfungsi. Bagaimanapun, rekomendasi saya adalah membuat properti baru bertipe GA4 sesegera mungkin. Dengan cara ini Anda akan memiliki riwayat data yang lebih luas. Juga harus dipertimbangkan bahwa setiap hari yang melewati GA4 mengintegrasikan fungsionalitas baru atau meningkatkan yang sudah ada. Saat ini dalam evolusi konstan.
Karena itu, tentu saja mungkin ada sedikit perubahan pada kode yang dijelaskan di bawah ini. Meskipun pasti, mereka akan minimal. Sebagai contoh, saya telah menemukan hal-hal sepele seperti mengganti nama bidang "entitas" (fase Alpha) sebagai "properti" (fase Beta) dalam kelas RunReportRequest() .
Pertama dan terpenting, sebelum membuat permintaan API, diperlukan pemahaman tentang elemen apa saja yang tersedia. Pada dasarnya, ini semua tentang mengikuti struktur di bawah ini:
Jenis untuk RunReportRequest dari GA4 Data v1 Beta API
Sepintas itu cukup intuitif, meskipun kenyataannya sangat berbeda. Untuk membuat permintaan, Anda harus selalu memiliki setidaknya dokumentasi berikut:
- Pengembang Google API
- Melaporkan API Data Google Analytics (GA4).
Ini hanya karena nama bidang sedikit berbeda dari dokumentasi resmi, yang mewakili bidang dalam format JSON. Contohnya adalah fieldname field dari kelas Filter. Dalam Python kita harus menggambarkannya sebagai field_name. Aturan umum yang baik adalah selalu beralih dari bidang jenis kotak unta (seperti "fieldName") ke kotak ular (seperti "field_name").
Sebelum melanjutkan, mari kita berhenti sejenak untuk menginisialisasi proyek kita. Seperti dalam sebagian besar kasus ketika mengembangkan skrip dengan Python, kita harus meluangkan waktu untuk mengimpor perpustakaan yang diperlukan dan menyiapkan lingkungan eksekusi.
- Buat proyek baru dengan Python. Dalam hal ini, perangkat lunak PyCharm telah digunakan.
- Aktifkan Google Analytics Data API di Google Cloud Platform dan unduh file akun layanan yang dibuat (tipe JSON) dan simpan di folder tempat proyek Python dibuat. Saat membuka file ini, nilai bidang client_email harus disalin, yang akan menjadi seperti [email protected].
- Tambahkan nilai client_email ini ke properti GA4 tempat data akan diekstraksi. Anda harus melakukan ini di bagian manajemen pengguna. Minimal, perlu memberikan tingkat izin 'Baca & Analisis'.
- Melalui terminal klien (PyCharm) instal pustaka Data Google Analytics di direktori proyek tempat permintaan API akan dibuat:
pip install google-analytics-data
Dari sini, yang perlu Anda lakukan adalah membuat permintaan, yang, seperti yang Anda lihat di bawah, pada dasarnya terdiri dari tiga bagian (klien, permintaan, dan respons), dan melihat atau menyimpan data yang dikumpulkan.
Kode untuk membuat permintaan sederhana ke GA4
Setiap dimensi, metrik, filter, urutan data, rentang tanggal, dll. yang ditambahkan ke variabel permintaan harus ditambahkan sebagai kelas (lihat gambar sebelumnya “Jenis untuk RunReportRequest”) yang ditautkan ke variabel ( metrik = [Metrik (..)] ). Ini membuatnya lebih mudah untuk memahami struktur data yang akan dikumpulkan. Dalam pengertian ini, untuk setiap kelas tingkat tertinggi harus dilakukan impor tertentu. Artinya, jika Anda ingin menambahkan dimensi dan metrik untuk rentang waktu tertentu, setidaknya objek berikut akan diperlukan…
dari google.analytics.data_v1beta impor BetaAnalyticsDataClient dari google.analytics.data_v1beta.types impor RunReportRequest dari google.analytics.data_v1beta.types impor DateRange dari google.analytics.data_v1beta.types mengimpor Dimensi dari google.analytics.data_v1beta.types impor Metrik
Tentu saja, dimungkinkan juga untuk menambahkan nilai tertentu ke variabel tertentu ( name = 'eventCount' ). Untuk alasan ini, penting untuk memahami dan tenggelam dalam dokumentasi yang dijelaskan sebelumnya.
Selain itu, perhatian khusus harus diberikan pada variabel os.environ [“GOOGLE_APPLICATION_CREDENTIALS”] , yang akan berisi jalur ke file yang sebelumnya diunduh pada langkah 2. Baris kode ini akan menghindari beberapa masalah saat mengelola izin ke Google API.
Jika kode telah dieksekusi dengan benar, Anda akan melihat hasil yang terlihat seperti ini: {Tanggal, Peristiwa}, {20210418, 934}, {…}, ….
Data Perayapan³
Prediksi data melalui Facebook Prophet
Saat ini ada banyak opsi gratis dan ada untuk melakukan semua jenis prediksi berdasarkan riwayat data. Dalam kasus khusus ini saya telah memilih perpustakaan Nabi, tetapi apakah itu sebenarnya?
Ini adalah perpustakaan sumber terbuka (tersedia untuk R dan Python) yang dibuat oleh tim Ilmu Data Facebook untuk memperkirakan perilaku kumpulan data deret waktu berdasarkan model aditif di mana tren non-linier disesuaikan dengan musim harian, pengambilan mingguan, dan tahunan. memperhitungkan efek hari libur.
Kembali ke implementasi yang diusulkan (prediksi lalu lintas pencarian organik), hal pertama yang harus dilakukan adalah menginstal pustaka berikut:
- Pandas ( pip install pandas ). Mengelola dan menganalisis struktur data.
- Plotly ( pip install plotly ). Penciptaan grafis dari semua jenis.
- Nabi ( conda install -c conda-forge fbprophet -y ).
Kemudian, seperti biasa, Anda harus melakukan impor yang terkait dengan perpustakaan ini. Setelah ini, satu-satunya yang tersisa untuk Anda lakukan adalah melakukan pemodelan prediksi dan visualisasi yang sesuai. Untuk melakukan ini, dalam kasus Nabi, Anda hanya harus mengikuti proses ini:
- Inisialisasi objek Nabi baru dengan atribut yang diinginkan untuk menghasilkan prediksi.
- Minta metode fit, dengan meneruskan data yang diekstraksi dari GA4 sebagai kerangka data. Permintaan ini dapat memakan waktu beberapa detik dalam beberapa kasus. Kerangka data dengan data yang dikumpulkan hanya boleh terdiri dari dua kolom yang namanya selalu sama: ds (bidang jenis tanggal) dan y (metrik yang akan dipelajari).
- Buat kerangka data masa depan baru yang mengatur jumlah periode hingga prediksi yang harus dicapai dari rentang tanggal yang dipilih dan frekuensi pengumpulan data (mingguan, bulanan, dll.)
- Minta metode prediksi, yang akan menetapkan setiap baris dari kerangka data masa depan yang baru sebuah nilai prediksi (yhat).
- Minta metode plot untuk dapat melihat prediksi yang dihasilkan.
- Minta metode plot_components yang membantu memahami tren dan musim data secara visual.
m = Nabi() m.fit(df) masa depan = m.make_future_dataframe(periode=365) ramalan = m.prediksi(masa depan) m.plot(perkiraan) m.plot_components(perkiraan) plt.tampilkan()
Meskipun prediksi yang diinginkan telah dihasilkan hanya dalam enam langkah dan tampaknya relatif sederhana, beberapa elemen harus dipertimbangkan yang akan menjadi kunci untuk menghasilkan prediksi. Mereka semua mempengaruhi ketepatan prediksi dalam satu atau lain cara. Pada akhirnya, ini tentang menghasilkan prediksi yang sesuai dengan logika, dalam kasus artikel ini, lalu lintas penelusuran organik kami. Untuk ini, perlu untuk memahami beberapa pengaturan Nabi yang lebih maju.
- Hari dan hari libur khusus. Ada kemungkinan untuk menambahkan hari-hari khusus.
- Pencilan. Mereka harus dihilangkan jika mereka mempengaruhi estimasi.
- Titik perubahan. Deteksi perubahan tren selama waktu yang dianalisis.
- Diagnosa. Validasi didasarkan pada pengukuran kesalahan prediksi menurut studi historis data.
- Meningkat. Seleksi antara linier atau logistik.
- Musiman. Pilihan antara aditif atau perkalian.
Semua ini dan banyak lagi opsi lainnya dirinci dengan sempurna dalam dokumentasi perpustakaan Nabi ini.
Membuat skrip lengkap untuk dapat memvisualisasikan prediksi lalu lintas
Yang tersisa sekarang adalah menggabungkan semua potongan teka-teki dalam satu skrip. Cara biasa untuk mengatasi teka-teki jenis ini adalah dengan membuat fungsi untuk setiap proses yang telah dirinci sebelumnya, sedemikian rupa sehingga dapat dieksekusi dengan cara yang teratur dan bersih:
def ga4(id_properti, tanggal_mulai, tanggal_akhir): […] perkiraan def (redup, terpenuhi, per, frekuensi): […] jika __name__ == "__main__": dimensi, metrik = ga4(PROPERTY_ID, START_DATE, END_DATE) perkiraan (dimensi, metrik, PERIODE, FREQ)
Sebelum memvisualisasikan hasil akhir prediksi, ada baiknya untuk melihat lalu lintas penelusuran organik yang dianalisis.
Sekilas, Anda dapat melihat bagaimana berbagai strategi dan tindakan yang diambil memiliki efek dari waktu ke waktu. Tidak seperti saluran lain (misalnya, kampanye Penelusuran Berbayar), lalu lintas yang dihasilkan dari Penelusuran Organik biasanya memiliki sedikit perubahan yang berarti (lembah atau puncak). Itu cenderung tumbuh atau menurun secara bertahap dari waktu ke waktu dan kadang-kadang dipengaruhi oleh peristiwa musiman. Biasanya, fluktuasi yang mencolok dikaitkan dengan pembaruan dalam algoritme mesin pencari (Google, Bing, dll.).
Keluaran dari skrip dapat dilihat pada gambar berikut, di mana faktor-faktor penting seperti tren, musiman, prediksi, atau frekuensi data dirinci.
Jika kita menganalisis prediksi yang diperoleh, dapat disimpulkan secara umum bahwa “jika kita melanjutkan dengan strategi SEO yang sama yang diterapkan hingga saat ini, lalu lintas dari mesin pencari akan terus tumbuh secara bertahap”. Kami dapat memastikan bahwa “upaya kami untuk meningkatkan kinerja situs web, menghasilkan konten berkualitas, menyediakan tautan yang relevan, dll. telah membuahkan hasil”.
Memvisualisasikan tren, musim dan prediksi, tren lalu lintas penelusuran organik
Sebagai penutup, saya akan membagikan kode secara keseluruhan sehingga Anda hanya perlu menyalinnya dan menjalankannya di IDE (Integrated Development Environment) Python Anda. Tak perlu dikatakan bahwa semua perpustakaan yang disebutkan di atas harus telah diinstal agar ini berjalan dengan baik.
impor panda sebagai pd impor fbprophet dari fbprophet import Prophet dari fbprophet.plot impor add_changepoints_to_plot impor matplotlib.pyplot sebagai plt impor os dari google.analytics.data_v1beta impor BetaAnalyticsDataClient dari google.analytics.data_v1beta.types impor DateRange dari google.analytics.data_v1beta.types mengimpor Dimensi dari google.analytics.data_v1beta.types impor Metrik dari google.analytics.data_v1beta.types impor Filter dari google.analytics.data_v1beta.types impor FilterExpression dari google.analytics.data_v1beta.types impor FilterExpressionList dari google.analytics.data_v1beta.types impor RunReportRequest PROPERTI_ START_DATE = '01-01-2020' TANGGAL_AKHIR = '2021-03-31' PERIODE = 4 FREQ = 'M' os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "[Tambahkan di sini jalur file json dengan kredensial]" def ga4(id_properti, tanggal_mulai, tanggal_akhir): klien = BetaAnalyticsDataClient() permintaan = RunReportRequest(property='properties/' + property_id, dimensi=[Dimensi(nama='tanggal')], metrics=[Metric(name='eventCount')], date_ranges=[DateRange(tanggal_mulai=tanggal_mulai, tanggal_akhir=tanggal_akhir)], dimensi_filter=Ekspresi Filter( and_group=FilterExpressionList(ekspresi=[ FilterExpression(filter=Filter(field_name='sessionDefaultChannelGrouping', string_filter=Filter.StringFilter( nilai='Penelusuran Organik', match_type=Filter.StringFilter.MatchType( 1)))), FilterExpression(filter=Filter(field_name='eventName', string_filter=Filter.StringFilter( nilai='session_start', match_type=Filter.StringFilter.MatchType( 1)))) ])) ) respon = client.run_report(permintaan) x, y = ([] untuk i dalam rentang(2)) untuk baris di response.rows: 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) kembali x, y perkiraan def (x, y, p, f): print('Nabi %s' % fbprophet.__version__) data = {'ds': x, 'y': y} df = pd.DataFrame(data, kolom=['ds', 'y']) m = Nabi(pertumbuhan='linier', changepoint_prior_scale=0,5, musiman_mode='tambahan', daily_seasonality=Salah, mingguan_musiman=Benar, yearly_seasonality=Benar, hari libur=Tidak ada, ) m.fit(df) masa depan = m.make_future_dataframe(periode=p, frekuensi=f) ramalan = m.prediksi(masa depan) print(perkiraan[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head()) fig = m.plot(perkiraan, xlabel='Tanggal', ylabel='Kunjungan') add_changepoints_to_plot(fig.gca(), m, perkiraan) m.plot_components(perkiraan) plt.tampilkan() jika __name__ == "__main__": channel_group, event_count = ga4(PROPERTY_ID, START_DATE, END_DATE) perkiraan(channel_group, event_count, PERIODS, FREQ)
Saya harap artikel ini telah menjadi inspirasi dan akan sangat berguna bagi Anda dalam proyek-proyek Anda berikutnya. Jika Anda ingin terus belajar tentang jenis implementasi ini atau mempelajari lebih lanjut tentang Pemasaran Digital yang lebih teknis, silakan hubungi saya. Anda dapat menemukan informasi lebih lanjut di profil penulis saya di bawah ini.