วิธีคาดการณ์ปริมาณการค้นหาด้วย Python และ GA4

เผยแพร่แล้ว: 2021-04-26

ในกลยุทธ์ใดๆ ที่เน้นไปที่การเพิ่มประสิทธิภาพกลไกค้นหา (SEO) การวิเคราะห์ข้อมูลเป็นสิ่งสำคัญ มีผู้เชี่ยวชาญในสาขานี้มากขึ้นเรื่อยๆ ที่เลือกพัฒนาอาชีพของตนในการวิเคราะห์ปริมาณการค้นหาทั่วไป ซึ่งในตัวมันเองมีพฤติกรรมและลักษณะเฉพาะค่อนข้างแตกต่างจากที่เหลือ: การค้นหาที่เสียค่าใช้จ่าย อีเมล โซเชียลทั่วไป โดยตรง ฯลฯ ใน ความรู้สึกนี้และต้องขอบคุณเครื่องมือที่มีอยู่มากมายในปัจจุบัน การศึกษาประเภทนี้จึงสามารถพัฒนาไปสู่ระดับที่คิดไม่ถึงเมื่อเปรียบเทียบกับเมื่อไม่กี่ปีที่ผ่านมา

การก้าวไปข้างหน้าครั้งสำคัญนี้มีสาเหตุหลักมาจากการปรากฏตัวของวิธีการและการพัฒนาใหม่ๆ ที่ทำให้เราสามารถสร้างแบบจำลองการวิเคราะห์โดยไม่ต้องพึ่งพาการดำเนินการทางคณิตศาสตร์ที่ซับซ้อน เราโชคดีที่มีเทคนิคและอัลกอริธึมที่ทดสอบแล้วและพร้อมที่จะเริ่มทำงานกับพวกเขา

ในบทความด้านล่าง เราจะเน้นที่การสร้างแบบจำลองการคาดการณ์สำหรับชุดข้อมูลของอนุกรมเวลาที่ปรับแนวโน้มที่คำนวณได้ตามฤดูกาลและช่วงก่อนหน้า โดยเฉพาะอย่างยิ่ง เราจะคาดการณ์ปริมาณการค้นหาทั่วไปของพร็อพเพอร์ตี้ของเราจาก Google Analytics 4 (ต่อไปนี้จะเรียกว่า GA4) มีตัวเลือกมากมายในการดำเนินการนี้ อย่างไรก็ตาม สำหรับกรณีนี้ ฉันได้ตัดสินใจที่จะดำเนินการพัฒนาทั้งหมดใน Python
สคริปต์ที่ใช้บทความนี้ประกอบด้วยสามส่วนที่แตกต่างอย่างชัดเจน:

  • การดึงข้อมูล วิธีใช้ GA4 API ใหม่ทีละขั้นตอนเพื่อรวบรวมปริมาณการค้นหาทั่วไป
  • การสร้างแบบจำลองข้อมูล การใช้ Prophet ซึ่งเป็นห้องสมุดโอเพ่นซอร์สของ Facebook ในการทำนายอนุกรมเวลา
  • การแสดงข้อมูล แสดงการเปลี่ยนแปลงแนวโน้มและการคาดการณ์แบบจำลอง

การดึงข้อมูล GA4 ผ่าน API โดยใช้ Python

สิ่งแรกที่เราต้องรู้เมื่อจัดการกับ Google Analytics Data API (GA4) คือ GA4 คือสถานะการพัฒนา ตามรายละเอียดโดย Google บนหน้าเว็บ ขณะนี้อยู่ในเวอร์ชันเริ่มต้น โดยเฉพาะอย่างยิ่ง ณ วันที่บทความนี้ยังอยู่ในช่วงเบต้า

ควรสังเกตว่า GA4 เผยแพร่เมื่อวันที่ 14 ตุลาคม 2020 ผ่านไปเพียงไม่กี่เดือน อันที่จริง ผู้ที่มีพร็อพเพอร์ตี้ Universal Analytics อยู่แล้วและผู้สร้าง GA4 ใหม่จะสามารถใช้ทั้งสองเวอร์ชันเคียงข้างกันต่อไปโดยไม่มีข้อจำกัดใดๆ ไม่ทราบแน่ชัดว่าพร็อพเพอร์ตี้ Universal Analytics จะหยุดทำงานเมื่อใด ไม่ว่าในกรณีใด คำแนะนำของฉันคือการสร้างคุณสมบัติใหม่ประเภท GA4 โดยเร็วที่สุด วิธีนี้จะทำให้คุณมีประวัติข้อมูลที่กว้างขึ้น ควรพิจารณาด้วยว่าในแต่ละวันที่ผ่าน GA4 จะรวมฟังก์ชันใหม่หรือปรับปรุงฟังก์ชันที่มีอยู่ ขณะนี้อยู่ในวิวัฒนาการอย่างต่อเนื่อง

ด้วยเหตุนี้ จึงอาจมีการเปลี่ยนแปลงเล็กน้อยในโค้ดที่อธิบายไว้ด้านล่าง แม้ว่าแน่นอนว่าพวกเขาจะน้อยที่สุด ตัวอย่างเช่น ฉันเคยเจอเรื่องเล็ก ๆ น้อย ๆ เช่น การเปลี่ยนชื่อฟิลด์ "entity" (เฟสอัลฟ่า) เป็น "คุณสมบัติ" (เฟสเบต้า) ภายในคลาส RunReportRequest()
ก่อนอื่น ก่อนสร้างคำขอ API จำเป็นต้องมีความเข้าใจว่ามีองค์ประกอบใดบ้าง โดยพื้นฐานแล้ว มันคือทั้งหมดที่เกี่ยวกับการปฏิบัติตามโครงสร้างด้านล่าง:

ประเภทสำหรับ RunReportRequest ของ GA4 Data v1 Beta API

ได้อย่างรวดเร็วก่อนจะค่อนข้างใช้งานง่ายแม้ว่าความเป็นจริงจะแตกต่างกันมาก ในการยื่นคำร้อง จำเป็นต้องมีเอกสารดังต่อไปนี้เป็นอย่างน้อย:

  • นักพัฒนา Google APIS
  • กำลังรายงาน Google Analytics Data API (GA4)

นี่เป็นเพียงเพราะชื่อฟิลด์แตกต่างจากเอกสารอย่างเป็นทางการเล็กน้อย ซึ่งแสดงถึงฟิลด์ในรูปแบบ JSON ตัวอย่างคือชื่อฟิลด์ของคลาสตัวกรอง ใน Python เราควรอธิบายว่าเป็น field_name กฎทั่วไปที่ดีคือให้เปลี่ยนจากฟิลด์ประเภทเคสอูฐ (เช่น “fieldName”) เป็นเคสงู (เช่น “field_name”)

ก่อนดำเนินการต่อ ขอหยุดสักครู่เพื่อเริ่มต้นโครงการของเรา ในกรณีส่วนใหญ่เมื่อพัฒนาสคริปต์ใน Python เราต้องใช้เวลาในการนำเข้าไลบรารีที่จำเป็นและเตรียมสภาพแวดล้อมการดำเนินการ

  • สร้างโครงการใหม่ใน Python ในกรณีนี้ ซอฟต์แวร์ PyCharm ถูกใช้ไปแล้ว
  • เปิดใช้งาน Google Analytics Data API ใน Google Cloud Platform และดาวน์โหลดไฟล์บัญชีบริการที่สร้าง (ประเภท JSON) และบันทึกไว้ในโฟลเดอร์ที่สร้างโครงการ Python ในการเปิดไฟล์นี้ จะต้องคัดลอกค่าของฟิลด์ client_email ซึ่งจะคล้ายกับ [email protected]
  • เพิ่มค่า client_email นี้ในพร็อพเพอร์ตี้ GA4 ที่จะดึงข้อมูล คุณจะต้องดำเนินการในส่วนการจัดการผู้ใช้ อย่างน้อยที่สุด จำเป็นต้องให้สิทธิ์ระดับ 'อ่านและวิเคราะห์'
  • ผ่านเทอร์มินัลไคลเอ็นต์ (PyCharm) ติดตั้งไลบรารีข้อมูล Google Analytics ในไดเรกทอรีโครงการที่จะส่งคำขอ API:
    pip install google-analytics-data

จากนี้ไป สิ่งที่คุณต้องทำคือสร้างคำขอ ซึ่งดังที่คุณเห็นด้านล่าง โดยทั่วไปประกอบด้วยสามส่วน (ไคลเอนต์ คำขอ และการตอบสนอง) และดูหรือบันทึกข้อมูลที่รวบรวม

รหัสสำหรับการขออย่างง่ายถึง GA4

มิติข้อมูล เมตริก ตัวกรอง ลำดับข้อมูล ช่วงวันที่ ฯลฯ ใดๆ ที่เพิ่มลงในตัวแปรคำขอจะต้องเพิ่มเป็นคลาส (ดูภาพก่อนหน้า “ประเภทสำหรับ RunReportRequest”) ที่เชื่อมโยงกับตัวแปร ( metrics = [Metric (..)] ). ทำให้เข้าใจโครงสร้างของข้อมูลที่จะรวบรวมได้ง่ายขึ้นมาก ในแง่นี้ สำหรับแต่ละชั้นของระดับสูงสุด จะต้องดำเนินการนำเข้าเฉพาะ นั่นคือ หากคุณต้องการเพิ่มมิติข้อมูลและเมตริกสำหรับช่วงเวลาเฉพาะ อย่างน้อยต้องมีออบเจ็กต์ต่อไปนี้...

 จาก google.analytics.data_v1beta นำเข้า BetaAnalyticsDataClient
จาก google.analytics.data_v1beta.types นำเข้า RunReportRequest
จาก google.analytics.data_v1beta.types นำเข้า DateRange
จาก google.analytics.data_v1beta.types นำเข้ามิติ
จาก google.analytics.data_v1beta.types นำเข้า Metric

แน่นอน คุณสามารถเพิ่มค่าเฉพาะให้กับตัวแปรบางตัวได้ ( name = 'eventCount' ) ด้วยเหตุผลนี้ จึงจำเป็นต้องทำความเข้าใจและทำความเข้าใจในเอกสารที่อธิบายไว้ก่อนหน้านี้

นอกจากนี้ ต้องให้ความสนใจเป็นพิเศษกับตัวแปร os.environ [“GOOGLE_APPLICATION_CREDENTIALS”] ซึ่งจะมีเส้นทางไปยังไฟล์ที่ดาวน์โหลดก่อนหน้านี้ในขั้นตอนที่ 2 โค้ดบรรทัดนี้จะหลีกเลี่ยงปัญหาบางอย่างเมื่อจัดการการอนุญาตไปยัง Google API

หากโค้ดถูกรันอย่างถูกต้อง คุณจะเห็นผลลัพธ์ที่มีลักษณะดังนี้: {Date, Events}, {20210418, 934}, {…}, ….

Oncrawl Data³

ขยายการวิเคราะห์ของคุณด้วยการเชื่อมต่อที่ราบรื่นไปยังชุดข้อมูลเพิ่มเติม วิเคราะห์กลยุทธ์ SEO ของคุณตามข้อมูลบนลิงก์ย้อนกลับ ปริมาณการใช้ SEO การจัดอันดับ และชุดข้อมูลที่กำหนดเองจาก CRM โซลูชันการตรวจสอบ หรือแหล่งอื่นๆ
เรียนรู้เพิ่มเติม

ทำนายข้อมูลผ่านเฟสบุ๊ค ศาสดา

ทุกวันนี้มีตัวเลือกฟรีและที่มีอยู่มากมายในการดำเนินการคาดการณ์ประเภทใดก็ได้ตามประวัติข้อมูล ในกรณีนี้ ฉันได้เลือกห้องสมุดของศาสดา แต่จริงๆ แล้วมันคืออะไร?

เป็นไลบรารีโอเพนซอร์ซ (ใช้ได้กับ R และ Python) ที่สร้างขึ้นโดยทีม Data Science ของ Facebook เพื่อประเมินพฤติกรรมของชุดข้อมูลอนุกรมเวลาตามแบบจำลองเพิ่มเติม ซึ่งปรับแนวโน้มที่ไม่เป็นเชิงเส้นตามฤดูกาลรายวัน รายสัปดาห์ และรายปี โดยคำนึงถึงผลกระทบของวันหยุด
กลับไปที่การใช้งานที่เสนอ (การคาดคะเนปริมาณการค้นหาทั่วไป) สิ่งแรกที่ต้องทำคือติดตั้งไลบรารีต่อไปนี้:

  • Pandas ( pip ติดตั้งแพนด้า ) จัดการและวิเคราะห์โครงสร้างข้อมูล
  • พล็อต ( pip install plotly ) สร้างสรรค์งานกราฟฟิคทุกประเภท
  • ศาสดา ( conda install -c conda-forge fbprophet -y ).

จากนั้นเช่นเคย คุณต้องดำเนินการนำเข้าที่เกี่ยวข้องกับไลบรารีเหล่านี้ หลังจากนี้ สิ่งเดียวที่เหลือให้คุณทำคือดำเนินการสร้างแบบจำลองของการทำนายและการสร้างภาพข้อมูลที่สอดคล้องกัน ในการทำเช่นนี้ ในกรณีของท่านศาสดา คุณต้องทำตามขั้นตอนนี้เท่านั้น:

  • เริ่มต้นวัตถุศาสดาใหม่ด้วยคุณสมบัติที่ต้องการเพื่อสร้างการทำนาย
  • ขอวิธี fit โดยส่งข้อมูลที่ดึงมาจาก GA4 เป็น dataframe คำขอนี้อาจใช้เวลาหลายวินาทีในบางกรณี dataframe ที่มีข้อมูลที่รวบรวมจะต้องประกอบด้วยสองคอลัมน์ที่มีชื่อเหมือนกันเสมอ: ds (ฟิลด์ประเภทวันที่) และ y (ตัวชี้วัดเพื่อการศึกษา)
  • สร้าง dataframe ใหม่ในอนาคตโดยกำหนดจำนวนระยะเวลาที่การคาดการณ์ควรไปถึงจากช่วงวันที่ที่เลือกและความถี่ในการรวบรวมข้อมูล (รายสัปดาห์ รายเดือน ฯลฯ)
  • ขอวิธีการทำนาย ซึ่งจะกำหนดแต่ละแถวของ dataframe ใหม่ในอนาคตเป็นค่าที่คาดการณ์ (yhat)
  • ขอวิธีพล็อตเพื่อดูการคาดการณ์ที่สร้างขึ้น
  • ขอวิธี plot_components ซึ่งช่วยให้เข้าใจแนวโน้มและฤดูกาลของข้อมูลได้ชัดเจน
 ม. = ศาสดา()
ม.พอดี(df)
อนาคต = m.make_future_dataframe(รอบระยะเวลา=365)
พยากรณ์ = m.predict(อนาคต)
m.plot(พยากรณ์)
m.plot_components(พยากรณ์)
plt.show()

แม้ว่าการคาดคะเนที่ต้องการจะถูกสร้างขึ้นในหกขั้นตอนและดูเหมือนค่อนข้างง่าย แต่องค์ประกอบหลายอย่างจะต้องได้รับการพิจารณาซึ่งจะเป็นกุญแจสำคัญในการสร้างการคาดคะเน พวกเขาทั้งหมดส่งผลต่อความเกี่ยวข้องของการทำนายไม่ทางใดก็ทางหนึ่ง ในท้ายที่สุด มันเป็นเรื่องของการสร้างการคาดคะเนที่สอดคล้องกับตรรกะ ในกรณีของบทความนี้ ของปริมาณการค้นหาทั่วไปของเรา สำหรับสิ่งนี้ จำเป็นต้องเข้าใจการตั้งค่าขั้นสูงบางอย่างของศาสดา

  • วันพิเศษและวันหยุด. มีความเป็นไปได้ของการเพิ่มวันพิเศษ
  • ค่าผิดปกติ พวกเขาจะต้องถูกกำจัดหากมีผลกระทบต่อการประมาณการ
  • จุดเปลี่ยน การตรวจจับการเปลี่ยนแปลงของแนวโน้มในช่วงเวลาที่วิเคราะห์
  • การวินิจฉัย การตรวจสอบความถูกต้องตามการวัดข้อผิดพลาดในการทำนายตามการศึกษาข้อมูลในอดีต
  • เพิ่ม. การเลือกระหว่างเชิงเส้นหรือโลจิสติก
  • ฤดูกาล ทางเลือกระหว่างการเติมหรือการคูณ

ตัวเลือกทั้งหมดนี้และอื่น ๆ อีกมากมายมีรายละเอียดครบถ้วนในเอกสารนี้ของห้องสมุดศาสดา

การสร้างสคริปต์ที่สมบูรณ์เพื่อให้เห็นภาพการทำนายปริมาณการใช้ข้อมูล

สิ่งที่เหลืออยู่ในตอนนี้คือการรวมชิ้นส่วนของตัวต่อทั้งหมดในสคริปต์เดียว วิธีปกติในการจัดการปริศนาประเภทนี้คือการสร้างฟังก์ชันสำหรับแต่ละกระบวนการที่มีรายละเอียดก่อนหน้านี้ ในลักษณะที่สามารถดำเนินการได้อย่างมีระเบียบและสะอาด:

 def ga4(property_id, start_date, end_date):
[…]

def พยากรณ์ (สลัว, พบ, ต่อ, ความถี่):
[…]

ถ้า __name__ == "__main__":
มิติข้อมูล เมตริก = ga4(PROPERTY_ID, START_DATE, END_DATE)
การพยากรณ์ (มิติ, เมตริก, งวด, ความถี่)

ก่อนที่จะเห็นภาพผลลัพธ์สุดท้ายของการคาดคะเน ควรพิจารณาปริมาณการค้นหาทั่วไปที่วิเคราะห์แล้วเป็นความคิดที่ดี

ได้อย่างรวดเร็วก่อน คุณจะเห็นได้ว่ากลยุทธ์และการดำเนินการต่างๆ มีผลอย่างไรเมื่อเวลาผ่านไป ต่างจากแชแนลอื่นๆ (เช่น แคมเปญในเครือข่ายการค้นหาที่เสียค่าใช้จ่าย) การเข้าชมที่เกิดจากการค้นหาทั่วไปมักจะมีความผันผวนเพียงเล็กน้อย (หุบเขาหรือยอดเขา) มีแนวโน้มเพิ่มขึ้นหรือลดลงทีละน้อยเมื่อเวลาผ่านไปและบางครั้งอาจได้รับอิทธิพลจากเหตุการณ์ตามฤดูกาล โดยปกติ ความผันผวนที่เห็นได้ชัดเจนจะสัมพันธ์กับการอัปเดตในอัลกอริธึมของเครื่องมือค้นหา (Google, Bing เป็นต้น)

ผลลัพธ์ของสคริปต์สามารถเห็นได้ในภาพต่อไปนี้ ซึ่งมีรายละเอียดปัจจัยสำคัญ เช่น แนวโน้ม ฤดูกาล การคาดการณ์ หรือความถี่ของข้อมูล
หากเราวิเคราะห์การคาดการณ์ที่ได้รับ ก็สามารถสรุปได้ในแบบทั่วไปว่า “หากเรายังคงใช้กลยุทธ์ SEO เดิมจนถึงปัจจุบัน ปริมาณการใช้ข้อมูลจากเสิร์ชเอ็นจิ้นจะค่อยๆ เติบโต” เราสามารถมั่นใจได้ว่า “ความพยายามของเราในการปรับปรุงประสิทธิภาพของเว็บไซต์ การสร้างเนื้อหาที่มีคุณภาพ การจัดหาลิงก์ที่เกี่ยวข้อง ฯลฯ นั้นคุ้มค่า”

การแสดงภาพแนวโน้ม ฤดูกาล และการคาดคะเน แนวโน้มของปริมาณการค้นหาทั่วไป

โดยสรุป ฉันจะแชร์โค้ดทั้งหมดเพื่อให้คุณต้องคัดลอกและเรียกใช้ใน IDE (Integrated Development Environment) ของ Python เท่านั้น มันไปโดยไม่บอกว่าห้องสมุดทั้งหมดที่กล่าวถึงข้างต้นต้องได้รับการติดตั้งเพื่อให้ทำงานได้อย่างถูกต้อง

 นำเข้าแพนด้าเป็น pd
นำเข้า fbprophet
จาก fbprophet นำเข้าศาสดา
จาก fbprophet.plot นำเข้า add_changepoints_to_plot
นำเข้า matplotlib.pyplot เป็น plt
นำเข้าระบบปฏิบัติการ

จาก google.analytics.data_v1beta นำเข้า BetaAnalyticsDataClient
จาก google.analytics.data_v1beta.types นำเข้า DateRange
จาก google.analytics.data_v1beta.types นำเข้ามิติ
จาก google.analytics.data_v1beta.types นำเข้า Metric
จาก google.analytics.data_v1beta.types นำเข้าตัวกรอง
จาก google.analytics.data_v1beta.types นำเข้า FilterExpression
จาก google.analytics.data_v1beta.types นำเข้า FilterExpressionList
จาก google.analytics.data_v1beta.types นำเข้า RunReportRequest

คุณสมบัติ_
START_DATE = '2020-01-01'
END_DATE = '2021-03-31'
ระยะเวลา = 4
ความถี่ = 'ม'

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "[เพิ่มพาธของไฟล์ json ด้วยข้อมูลประจำตัวที่นี่]"

def ga4(property_id, start_date, end_date):
ลูกค้า = BetaAnalyticsDataClient()

คำขอ = RunReportRequest(property='properties/' + property_id,
ขนาด=[มิติ(ชื่อ='วันที่')],
metrics=[Metric(name='eventCount')],
date_ranges=[DateRange(start_date=start_date,
end_date=end_date)],
dimension_filter=ตัวกรองนิพจน์ (
and_group=FilterExpressionList(นิพจน์=[
FilterExpression(ตัวกรอง=ตัวกรอง(field_name='sessionDefaultChannelGrouping',
string_filter=Filter.StringFilter(
value='การค้นหาแบบอินทรีย์',
match_type=Filter.StringFilter.MatchType(
1)))))
FilterExpression(ตัวกรอง=ตัวกรอง(field_name='eventName',
string_filter=Filter.StringFilter(
ค่า='session_start',
match_type=Filter.StringFilter.MatchType(
1))))
]))
)

ตอบกลับ = client.run_report (คำขอ)

x, y = ([] สำหรับฉันในช่วง (2))
สำหรับแถวใน response.rows:
x.append(row.dimension_values[0].value)
y.append(row.metric_values[0].value)
พิมพ์ (row.dimension_values[0].value, row.metric_values[0].value)

ผลตอบแทน x, y

def พยากรณ์ (x, y, p, f):
พิมพ์ ('ศาสดา %s' % fbprophet.__version__)

data = {'ds': x, 'y': y}
df = pd.DataFrame (ข้อมูล คอลัมน์=['ds', 'y'])

m = ศาสดา (เติบโต = 'เชิงเส้น',
changepoint_prior_scale=0.5,
seasonity_mode='สารเติมแต่ง',
daily_seasonality=เท็จ
weekly_seasonality=จริง
yearly_seasonality=จริง
วันหยุด=ไม่มี,
)
ม.พอดี(df)
อนาคต = m.make_future_dataframe(ช่วงเวลา=p, freq=f)
พยากรณ์ = m.predict(อนาคต)

พิมพ์ (พยากรณ์[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head())

fig = m.plot(พยากรณ์, xlabel='Date', ylabel='Visits')
add_changepoints_to_plot(fig.gca(), m, พยากรณ์)
m.plot_components(พยากรณ์)
plt.show()

ถ้า __name__ == "__main__":
channel_group, event_count = ga4(PROPERTY_ID, START_DATE, END_DATE)
การคาดการณ์ (channel_group, event_count, PERIODS, FREQ)

ฉันหวังว่าบทความนี้จะทำหน้าที่เป็นแรงบันดาลใจและจะเป็นประโยชน์อย่างยิ่งต่อคุณในโครงการต่อไปของคุณ หากคุณต้องการเรียนรู้เกี่ยวกับการใช้งานประเภทนี้ต่อไปหรือเรียนรู้เพิ่มเติมเกี่ยวกับการตลาดดิจิทัลด้านเทคนิคเพิ่มเติม โปรดติดต่อฉัน คุณสามารถหาข้อมูลเพิ่มเติมได้ในโปรไฟล์ผู้แต่งของฉันด้านล่าง