วิธีคาดการณ์ปริมาณการค้นหาด้วย 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³
ทำนายข้อมูลผ่านเฟสบุ๊ค ศาสดา
ทุกวันนี้มีตัวเลือกฟรีและที่มีอยู่มากมายในการดำเนินการคาดการณ์ประเภทใดก็ได้ตามประวัติข้อมูล ในกรณีนี้ ฉันได้เลือกห้องสมุดของศาสดา แต่จริงๆ แล้วมันคืออะไร?
เป็นไลบรารีโอเพนซอร์ซ (ใช้ได้กับ 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)
ฉันหวังว่าบทความนี้จะทำหน้าที่เป็นแรงบันดาลใจและจะเป็นประโยชน์อย่างยิ่งต่อคุณในโครงการต่อไปของคุณ หากคุณต้องการเรียนรู้เกี่ยวกับการใช้งานประเภทนี้ต่อไปหรือเรียนรู้เพิ่มเติมเกี่ยวกับการตลาดดิจิทัลด้านเทคนิคเพิ่มเติม โปรดติดต่อฉัน คุณสามารถหาข้อมูลเพิ่มเติมได้ในโปรไฟล์ผู้แต่งของฉันด้านล่าง