ฉันเป็นนักพัฒนาซอฟต์แวร์ที่ทำงานกับระบบทดสอบ A / B ฉันไม่มีภูมิหลังที่มั่นคง แต่ได้รับความรู้ในช่วงไม่กี่เดือนที่ผ่านมา
สถานการณ์จำลองการทดสอบทั่วไปเกี่ยวข้องกับการเปรียบเทียบ URL สองรายการบนเว็บไซต์ เข้าชมผู้เข้าชมLANDING_URL
แล้วจะถูกส่งต่อไปยังสุ่มอย่างใดอย่างหนึ่งหรือURL_CONTROL
URL_EXPERIMENTAL
ผู้เข้าชมเป็นตัวอย่างและเงื่อนไขแห่งชัยชนะจะเกิดขึ้นเมื่อผู้เข้าชมดำเนินการที่ต้องการบนไซต์นั้น นี่ถือเป็นการแปลงและอัตราของอัตราการแปลงคืออัตราการแปลง (โดยทั่วไปจะแสดงเป็นเปอร์เซ็นต์) อัตราการแปลงทั่วไปสำหรับ URL ที่ระบุคือบางสิ่งในขอบเขต 0.01% ถึง 0.08% เราทำการทดสอบเพื่อกำหนดว่า URL ใหม่เปรียบเทียบกับ URL เก่าอย่างไร ถ้าURL_EXPERIMENTAL
แสดงให้เห็นว่าดีกว่าURL_CONTROL
เราแทนด้วยURL_CONTROL
URL_EXPERIMENTAL
เราได้พัฒนาระบบโดยใช้เทคนิคการทดสอบสมมติฐานอย่างง่าย ฉันใช้คำตอบของคำถาม CrossValidated อื่นที่นี่เพื่อพัฒนาระบบนี้
มีการตั้งค่าการทดสอบดังนี้:
- การประมาณการอัตราการแปลง
CRE_CONTROL
ของURL_CONTROL
ถูกคำนวณโดยใช้ข้อมูลประวัติ - อัตราการแปลงเป้าหมายที่ต้องการ
CRE_EXPERIMENTAL
ของURL_EXPERIMENTAL
การตั้งค่า - โดยทั่วไปจะใช้ระดับนัยสำคัญ 0.95
- โดยทั่วไปจะใช้พลังงาน 0.8
เมื่อรวมกันค่าเหล่านี้ทั้งหมดจะถูกใช้เพื่อคำนวณขนาดตัวอย่างที่ต้องการ ฉันใช้ฟังก์ชัน R power.prop.test
เพื่อให้ได้ขนาดตัวอย่างนี้
การทดสอบจะทำงานจนกว่าจะมีการเก็บตัวอย่างทั้งหมด ณ จุดนี้ช่วงความเชื่อมั่นสำหรับ CR_CONTROL
และCR_EXPERIMENTAL
ถูกคำนวณ หากพวกเขาไม่ทับซ้อนกันผู้ชนะสามารถประกาศได้ที่ระดับนัยสำคัญ 0.95 และพลังของ 0.8
ผู้ใช้การทดสอบของเรามีข้อกังวลหลักสองประการ:
1. ในบางช่วงของการทดสอบมีการเก็บตัวอย่างเพียงพอที่จะแสดงผู้ชนะที่ชัดเจนไม่สามารถหยุดการทดสอบได้
2. หากไม่มีการประกาศผู้ชนะในตอนท้ายของการทดสอบเราสามารถเรียกใช้การทดสอบนานขึ้นเพื่อดูว่าเราสามารถรวบรวมตัวอย่างเพียงพอที่จะหาผู้ชนะได้หรือไม่
ควรสังเกตว่ามีเครื่องมือเชิงพาณิชย์มากมายที่ช่วยให้ผู้ใช้ทำสิ่งที่ผู้ใช้ของเราต้องการ ฉันได้อ่านมาแล้วว่ามีข้อผิดพลาดหลายอย่างที่กล่าวมาข้างต้น แต่ฉันก็ได้พบกับความคิดเกี่ยวกับกฎการหยุดและต้องการสำรวจความเป็นไปได้ในการใช้กฎดังกล่าวในระบบของเราเอง
นี่คือสองวิธีที่เราต้องการพิจารณา:
1. ใช้power.prop.test
เปรียบเทียบอัตราการแปลงที่วัดได้ในปัจจุบันกับจำนวนตัวอย่างปัจจุบันและดูว่ามีการเก็บตัวอย่างเพียงพอที่จะประกาศผู้ชนะหรือไม่
ตัวอย่าง: มีการตั้งค่าการทดสอบเพื่อดูว่ามีลักษณะการทำงานต่อไปนี้ในระบบของเราหรือไม่:
CRE_CONTROL
: 0.1CRE_EXPERIMENTAL
: 0.1 * 1.3- ด้วยพารามิเตอร์เหล่านี้ขนาดตัวอย่าง
N
คือ 1774
อย่างไรก็ตามเนื่องจากความก้าวหน้าในการทดสอบและไปถึง 325 ตัวอย่างCRM_CONTROL
(อัตราการแปลงที่วัดได้สำหรับการควบคุม) คือ 0.08 และCRM_EXPERIMENTAL
0.15 power.prop.test
ทำงานในอัตราการแปลงเหล่านี้และN
พบว่าเป็น 325 จำนวนตัวอย่างที่ต้องการเพื่อประกาศCRM_EXPERIMENTAL
ให้เป็นผู้ชนะอย่างแน่นอน! ณ จุดนี้เราหวังว่าการทดสอบจะสิ้นสุดลง ในทำนองเดียวกันหากการทดสอบถึง 1774 ตัวอย่าง แต่ไม่พบผู้ชนะ แต่ถึง 2122 ตัวอย่างซึ่งเพียงพอที่จะแสดงว่าCRM_CONTROL
0.1 และCRM_EXPERIMENTAL
0.128 เป็นผลลัพธ์ที่สามารถประกาศผู้ชนะได้
ในคำถามที่เกี่ยวข้องผู้ใช้แนะนำว่าการทดสอบดังกล่าวมีความน่าเชื่อถือน้อยลงเนื่องจากการส่งเสริมให้หยุดก่อนมีตัวอย่างน้อยลงและยังมีความเสี่ยงต่อการประมาณค่าอคติและข้อผิดพลาด Type I และ Type II เพิ่มขึ้น มีวิธีที่จะทำให้กฎการหยุดนี้ทำงานได้หรือไม่? นี่เป็นวิธีการที่เราชอบเพราะมันหมายถึงเวลาในการเขียนโปรแกรมที่น้อยลงสำหรับเรา บางทีกฎการหยุดนี้อาจทำงานได้โดยเสนอคะแนนหรือคะแนนบางประเภทที่วัดความน่าเชื่อถือของแบบทดสอบที่ควรหยุดก่อน
2. ใช้การวิเคราะห์ลำดับหรือSPRT
วิธีการทดสอบเหล่านี้ได้รับการออกแบบมาให้ตรงกับสถานการณ์ที่เราพบเจอ: ผู้ใช้ของเราจะเริ่มการทดสอบได้อย่างไรและสิ้นสุดในแบบที่พวกเขาไม่ต้องเสียเวลามากเกินไปในการทดสอบ อาจรันการทดสอบนานเกินไปหรือต้องเริ่มการทดสอบใหม่ด้วยพารามิเตอร์อื่น
จากวิธีการสองข้อข้างต้นฉันชอบ SPRT เพราะคณิตศาสตร์เป็นเรื่องง่ายสำหรับฉันที่จะเข้าใจและเพราะดูเหมือนว่าโปรแกรมอาจจะง่ายกว่า อย่างไรก็ตามฉันไม่เข้าใจวิธีใช้ฟังก์ชันความน่าจะเป็นในบริบทนี้ หากใครบางคนสามารถสร้างตัวอย่างของวิธีการคำนวณอัตราส่วนความน่าจะเป็น, ผลรวมสะสมของความน่าจะเป็น - อัตราส่วนและดำเนินการต่อผ่านตัวอย่างที่แสดงสถานการณ์เมื่อเราจะติดตามต่อไปเมื่อใครจะยอมรับสมมติฐานว่างและสมมติฐานทางเลือก ที่จะช่วยเราพิจารณาว่า SPRT เป็นวิธีที่เหมาะสมหรือไม่