การทดลอง (Experimentation) เป็นวิธีการสำคัญในยุค Digital marketing ปัจจุบันอย่างมากกเลย รู้มั้ยครับว่า..เพลย์ลิสต์ของ Spotify, ปุ่มหยิบใส่ตะกร้าของ Shopee, ข้อความบนปุ่มกดตอนจะซื้อประกัน, การแสดงราคาสินค้าในเว็บ e-commerce ต่างๆ ในความจริงแล้วไม่ได้เกิดจากนักพัฒนาเว็บ อยากจะวางปุ่ม วางราคา วางส่วนลดที่ตำแหน่งไหนยังไงก็ได้ หรือวันหนึ่งตื่นขึ้นมาแล้วมาไอเดียก็เขียนเพิ่มแล้ววางองค์ประกอบนั้นเข้าไปในเว็บได้อย่างนั้นเลย
ทุกการกระทำ หรือการเปลี่ยนแปลงของระบบ โปรแกรม แอพพลิเคชั่นในยุคนี้ล้วนผ่านการทดลอง ทดสอบมาอย่างละเอียดแล้วเท่านั้น เพราะเป้าหมายในการเปลี่ยนคือทำยังไงให้รักษาความสนใจของลูกค้าผู้ใช้งานไว้ได้ และดึงผู้ใช้อย่างเราๆ อยู่บนแพลตฟอร์มของเค้าไปนานๆ นั่นเอง

A/B Testing จึงมีบทบาทสำคัญในการทำทดสอบนี้ เพราะมันทำให้เราไม่ต้องมานั่งตัดสินใจว่าโฆษณาตัวใด แคมเปญตัวไหน ที่ลูกค้าเห็นแล้วจะคลิกเข้ามาดู กดสั่งซื้อได้มากที่สุด
เพราะบางครั้งมนุษย์อาจจะใช้ ้ “อารมณ์ความรู้สึก” ตอนนั้นเองเป็นตัวตัดสินใจก็ได้ ซึ่งมันไม่ได้ช่วยให้เกิดผลดีต่อธุรกิจ เพราะอย่างนั้นการทดสอบอย่าง A/B Testing จึงเป็นตัวช่วยในเรื่องลด bias การตัดสินใจเลือกของบุคคลได้ (ก็คือให้กลุ่มทดลองมาช่วยตัดสินใจแทน)
ในโพสต์นี้หนุ่มก็เลยจะพามาลองใช้ python ทำ A/B Testing กันนะฮะ สุดท้ายแล้วคุณผู้อ่านอาจจะเข้าใจ (หรืองงหนักกว่าเดิม) ในเรื่องของ A/B testing คืออะไร ใช้งานตอนไหน และมีสถิติที่จำเป็นในการสร้างโมเดลและวิเคราะห์ผลยังไงเพิ่มขึ้นอีกซักนิ๊ดด หนุ่มก็เป็นปลื้มแล้วว
A/B Testing คืออะไร
เป็นการทดลองที่ช่วยเปรียบเทียบสิ่งเดียวกันแต่มี 2 เวอร์ชัน ก็อย่างเช่น หากเรามีเว็บไซต์ขายของและอยากรู้ว่าลูกค้าจะกดซื้อสินค้าด้วยปุ่มจ่ายตังค์ที่เป็น สีแดงมากกว่าสีน้ำเงิน หรือไม่ —A/B testing จึงมีซีนสำคัญในการหาคำตอบนี้ของเราได้
หลักการเบื้องต้นคือ เราจะแสดงปุ่มสีน้ำเงินให้ลูกค้าครึ่งนึงเห็น และลูกค้าอีกครึ่งที่เหลือเห็นเป็นปุ่มสีแดง จากนั้นทำการทดลองซัก 1 เดือน (ระหว่างนี้ก็เก็บข้อมูลจำนวนการคลิกชำระเงินของแต่ละกลุ่ม) เมื่อสิ้นสุดการทดลองแล้วเราก็จะเห็นว่า อัตราการกดปุ่มสีไหนที่มีการคลิกมากที่สุด และเลือกปุ่มนั้นในการสร้างปุ่มบนเว็บทางการของเราต่อไป
ฟังดูเหมือนง่ายใช่มะ?
แต่มันจะมีอยู่ e นึง…
เกิดว่า ปุ่มสีแดง ลูกค้ากดไป 100 ครั้ง ส่วนปุ่มสีน้ำเงินถูกกดไป 99 ครั้ง เราแทบจะไม่เห็นความแตกต่างของการคลิกเลยถูกมั้ย? (ห่างแค่ 1 คลิกเองอะ) 🤔 ก็เป็นไปได้ว่า ไม่ใช่สีของปุ่มละที่ช่วยให้มีการคลิกชำระเงินเพิ่มขึ้นมา อาจจะมีตัวการภายนอกอื่นๆ มาร่วมด้วย อย่างเช่น พฤติกรรมของลูกค้าเอง ช่วงเวลาของวัน ข้อความส่วนลด ฯลฯ

แล้วจะตัดสินใจยังไงว่าลูกค้าคนไหนจะเห็นปุ่มแดง ใครจะเห็นปุ่มน้ำเงิน?
แล้วต้องคลิกกี่ครั้งถึงจะตัดสินใจได้ว่าปุ่มไหนดีกว่ากัน ซัก 10 คลิก หรือ 100 คลิก หรือพันอัพดีนะ?
หากไม่ได้ตั้งเป้าหมายการสอบ A/B ที่ดี ผลลัพธ์ที่ได้มาอาจจะไม่แม่นยำ อาจจะทำให้การลงทุนเปลี่ยนครั้งนั้นเสียเงินไปหลายบาทเลยก็ได้จากยอดขายที่ไม่กระเตื้องขึ้นเลย ยกตัวอย่างเป้าหมายหลักของการทดลอง เช่น
- การเพิ่มอัตราการเปิดอีเมล (Open Rate): เป้าหมายคือ การทำให้ผู้รับเปิดอ่านอีเมลที่เราส่งไปมากขึ้น
- การเพิ่มอัตราการคลิก (Click-Through Rate หรือ CTR): เป้าหมายนี้คือการทำให้ผู้รับคลิกที่ลิงก์หรือปุ่มในอีเมลที่เราส่งไปมากขึ้น
ในโพสต์นี้เลยจะมาทำ best practice ในการใช้งาน A/B testing กัน คุณผู้อ่านลองเอาไปประประยุกต์ใช้โค้ดดูนะฮะ ซึ่งสเต็ปที่สำคัญประกอบด้วย 4 ขั้นตอนคือ
- Create a hypothesis
- Defining Success Metrics
- Calculate Sample Size and Duration
- Analyze A/B Test Results
Run A/B testing ใน python ได้ยังไง
ลองเป็นตัวอย่างเว็บ e-commerce ซักเว็บละกัน:
เจ้าของเว็บคนนึง สมมติชื่อ ตาไมค์ คือตาไมค์ต้องการเปลี่ยนโทนสีของหน้า Landing page (หน้าที่คนคลิกเข้ามาแล้วเจอในตอนแรก) เว็บของเค้าจากสีขาวเป็นสีดำ เพราะเค้าคิดว่าวิธีนี้จะช่วยเพิ่มจำนวนการคลิกบนหน้า Landing page ได้

เพื่อจะตัดสินใจเปลี่ยนหน้า Landing page นี้ ตาไมค์จึงทำการทดสอบ A/B testing … มาเริ่มกันเลย
1. Create a hypothesis
สมมติฐานเป็นข้อความตั้งต้นที่กำหนดถึง “สิ่งที่เรากำลังทดสอบและผลลัพธ์ที่คาดว่าจะสังเกตได้”
ในตัวอย่างของตาไมค์ จะได้สมมติฐานคือ:
“การเปลี่ยนสีของหน้า Landing page จากสีขาวเป็นสีดำจะไม่มีผลต่อการคลิก” (~จะหน้าสีขาวหรือหน้าสีดำก็ได้จำนวนการคลิกเท่าๆ กัน)
ประโยคข้างบนเรียกว่า “null hypothesis (H0)” ซึ่งถือว่าไม่มีความแตกต่างที่สำคัญ (no significant) ระหว่าง Control Group (ที่ยังเป็นสีขาวเหมือนเดิม) กับ Treatment Group (หน้าสีดำ)
Treatment Group กลุ่มที่ถูกควบคุม/เปลี่ยนแปลงไปจากเดิม
Control Group ยังแปลได้สองความหมาย คือ 1. ไม่ได้ treatment หรือ 2. ทำพฤติกรรมเหมือนเดิม (ไม่เปลี่ยนแปลง)
หลังจากที่ทำการทดสอบแล้วจะมี 2 ตัวเลือกคือ:
- Reject H0: ปฏิเสธ H0 เพราะว่า มีความแตกต่างที่สำคัญระหว่าง Control Group และกลุ่ม Treatment Group
- Fail to reject H0: ไม่สามารถปฏิเสธ H0 คือ เราไม่สามารถหาความแตกต่างที่สำคัญระหว่าง Control Group และกลุ่ม Treatment ได้
จุดนี้คือ หากเรา Reject null hypothesis (H0) แสดงว่ามีความแตกต่างที่สำคัญเมื่อสีของหน้า Landing page เปลี่ยนจากสีขาวเป็นสีดำ
หากความแตกต่างนี้เป็นไปในทางบวก (positive) ก็คือ จำนวนการการคลิกเพิ่มขึ้น ตาไมค์จึงทำการเปลี่ยนสีของหน้า Landing page ต่อไปได้
คำถามคือ 💗: ความแตกต่างที่สำคัญ (มีนัยยะสำคัญ) ใช้อะไรวัด และมันต้องแตกต่างแค่ไหนล่ะ?
2. Defining Success Metrics
หลังจากกำหนดสมมติฐานแล้ว เราต้องมากำหนด metric ให้กับการทดลองนี้ด้วย ซึ่ง metric นี้จะวัดว่าควร Reject null hypothesis (H0) หรือไม่
ในหน้า Landing page ของตาไมค์ metric ที่ใช้วัดอาจจะเป็น:
- Click-Through-Rate (CTR) อัตราส่วนของจำนวนผู้เข้าชมที่เห็นสีของหน้า Landing page และคลิกเข้าไปดูอะไรซักอย่างในเว็บ
- Clicks per User จำนวนการคลิกต่อผู้เข้าชม 1 คน (Number of Clicks / Number of Unique Users)
- Clicks per Website Visit จำนวนการคลิกเฉลี่ยต่อหนึ่งผู้เข้าชม
เพื่อให้เข้าใจง่ายขอยกตัวอย่างเป็น Click-Through-Rate (CTR) เป็น metric วัดความสำเร็จนะครับ
โดยวิธีนี้ หากหน้าเว็บสีดำ (Treatment Group) มีการคลิกต่อผู้ใช้มากกว่าหน้าเว็บสีขาว (Control Group) อย่างมีนัยยะสำคัญ เราถึงจะ Reject null hypothesis (H0)
3. Calculate Sample Size and Duration
ไปแล้ว 2 ขั้นตอน ต่อมาเราจะต้องกำหนดขนาดตัวอย่าง (sample size) และระยะเวลาที่จะดำเนินการทดลอง
Let’s say ว่าเว็บของตาไมค์มีผู้เข้าชมประมาณ 100,000 รายต่อเดือน
ตาไมค์ต้องคิดต่อว่า จะทำการทดสอบนี้กับ sample size ที่ 10% (~10,000 คน) หรือต้องใช้ 50% (~50,000 คน) หรืออาจจะต้องใช้หมดทั้ง 100,000 คนเลยถึงจะเพียงพอ
จึงเป็นที่มาของหลักการ Statistical power และ MDE (Minimum Detectable Effect)
MDE (Minimum Detectable Effect) ความแตกต่างที่เล็กที่สุดที่เรา care เมื่อผลลัพธ์เปลี่ยนแปลงไป อย่างเช่น หากการทดสอบของตาไมค์ พบว่า CTR เพิ่มขึ้น 0.1% เมื่อใช้หน้า Landing page ใหม่สีดำ ความแตกต่างนี้มีความหมายต่อธุรกิจตาไมค์รึเปล่า?
หรือตาไมค์ต้องการการเปลี่ยนแปลง CTR อย่างน้อย 5% ตาไมค์ถึงจะเปลี่ยนหน้า Landing page เป็นสีดำอันใหม่ (แต่ในการทดสอบจริงอาจจะเปลี่ยนแค่ 2-3% เราก็จะไม่ตรวจพบความแตกต่างนี้)
MDE สามารถช่วยกำหนดขนาด sample size ที่จะใช้ได้ เช่น หากตาไมค์ care เมื่อมีการเปลี่ยนแปลงของ CTR ที่ 0.0001% เค้าอาจจะต้องทดสอบกับผู้ใช้ถึง 1 ล้านคน
เนื่องจากต่อเดือนตาไมค์มีผู้ชมเว็บ 100,000 คน นั่นคือต้องทำการทดสอบนานถึง 10 เดือน กับผู้ชมเยี่ยมเว็บไซต์ 100% ของเค้า (จาก 1 เดือน : 100,000 คน → 10 เดือน : 100,000 x 10 = 1,000,000 คน) หรือก็คือ:
- MDE ต่ำลง (ละเอียดมาก) = ขนาดตัวอย่างที่ใช้จะใหญ่ขึ้น
- MDE สูง (หยาบขึ้น) = ขนาดตัวอย่างที่ใช้ก็จะเล็กลง
ยิ่งเราทำการทดลองนานขึ้นเท่าไร ก็ยิ่งมีแนวโน้มที่จะพบความแตกต่างที่เล็กน้อยระหว่าง Control Group และ Treatment Group มากขึ้นเท่านั้น
ต่อไปจะเป็นตัวอย่างโค้ด Python สำหรับคำนวณ sample size และระยะเวลาของการทดสอบ A/B โดยเราจะ assume ค่า MDE ที่แตกต่างกันดู:
1: Defining Sample Size and Duration Functions
ฟังก์ชันกำหนดขนาดตัวอย่างและฟังก์ชันคำนวณระยะเวลาของการทดสอบ
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import pandas as pd
# ฟังก์ชันแรกจะคำนวณจำนวนผู้ใช้ที่คุณต้องการสำหรับการทดลอง
def calculate_sample_size(baseline_conversion, mde, power=0.8, significance_level=0.05):
expected_conversion = baseline_conversion * (1 + mde)
z_alpha = stats.norm.ppf(1 - significance_level/2)
z_beta = stats.norm.ppf(power)
sd1 = np.sqrt(baseline_conversion * (1 - baseline_conversion))
sd2 = np.sqrt(expected_conversion * (1 - expected_conversion))
numerator = (z_alpha * np.sqrt(2 * sd1**2) + z_beta * np.sqrt(sd1**2 + sd2**2))**2
denominator = (expected_conversion - baseline_conversion)**2
sample_size_per_variant = np.ceil(numerator / denominator)
return int(sample_size_per_variant)
# ฟังก์ชันที่สองจะนำเอาต์พุตของฟังก์ชันแรกมาใช้ในการคำนวณระยะเวลาการทดลอง
# โดยพิจารณาจากจำนวนผู้ใช้รายวันที่มีอยู่ (ในกรณีนี้คือปริมาณการเข้าชมเว็บไซต์ของ ตาไมค์ รายวัน)
def calculate_experiment_duration(sample_size_per_variant, daily_visitors, traffic_allocation=0.5):
visitors_per_variant_per_day = daily_visitors * traffic_allocation / 2
days_required = np.ceil(sample_size_per_variant / visitors_per_variant_per_day)
return int(days_required)
ฟังก์ชันแรก calculate_sample_size จะคำนวณจำนวนผู้ใช้ที่คุณต้องการสำหรับการทดลอง
ฟังก์ชันที่สอง calculate_experiment_duration จะนำเอาต์พุตของฟังก์ชันแรกมาใช้ในการคำนวณระยะเวลาการทดลองโดยพิจารณาจากจำนวนผู้ชมเว็บรายวันที่มีอยู่ (ในกรณีนี้คือปริมาณการเข้าชมเว็บไซต์ของ ตาไมค์)
2: Calculating Sample Sizes for a Range of MDE
ขั้นตอนต่อมา เป็นการคำนวณขนาดตัวอย่าง sample size ตามช่วง MDE ที่กำหนด ทำให้เรารู้ว่า หากต้องการ MDE ที่ระดับเท่านี้ อยากใช้ทดสอบกับผู้ชมประมาณกี่เปอร์เซ็นต์ แสดงออกมาเป็นจำนวนผู้ชมที่เราต้องแบ่งให้กับแต่ละกลุ่ม รวมถึงระยะเวลาที่ต้องใช้ทดสอบด้วย
# Example MDE/sample size tradeoff for ตาไมค์'s website
daily_visitors = 100000 / 30 # Convert monthly to daily visitors
baseline_conversion = 0.05 # ตาไมค์'s current landing page CTR (baseline conv rate of 5%)
# Create a table of sample sizes for different MDEs
mde_values = [0.01, 0.02, 0.03, 0.05, 0.10, 0.15] # 1% to 15% change
traffic_allocations = [0.1, 0.5, 1.0] # 10%, 50%, and 100% of website traffic
results = []
for mde in mde_values:
sample_size = calculate_sample_size(baseline_conversion, mde)
for allocation in traffic_allocations:
duration = calculate_experiment_duration(sample_size, daily_visitors, allocation)
results.append({
'MDE': f"{mde*100:.1f}%",
'Traffic Allocation': f"{allocation*100:.0f}%",
'Sample Size per Variant': f"{sample_size:,}",
'Duration (days)': duration
})
# Create a DataFrame and display the results
df_results = pd.DataFrame(results)
print("Sample Size and Duration for Different MDEs:")
print(df_results)
หากคุณผู้อ่านต้องการนำโค้ดข้างบนไปใช้ สามารถเปลี่ยนพารามิเตอร์ต่อไปนี้ได้นะครับ:
- daily_visitors จำนวนผู้เยี่ยมชมรายเดือน (ในสูตรจะไปเฉลี่ยเป็นรายวันเอง)
- baseline_conversion เมตริกที่เราสังเกตได้จากสถิติเดิม (baseline) ที่มีอยู่ ในโจทย์ Let’s say ว่าเว็บของตาไมค์มี CTR อยู่ที่ 5%
- mde_values ในตัวอย่างนี้ได้ระบุช่วงของ MDE ตั้งแต่ 1% ถึง 15% ซึ่งจะแตกต่างกันไปตามสถานการณ์ทางธุรกิจของคุณผู้อ่าน ตัวอย่างเช่น หากผู้คุณผู้อ่านกำลังทำการทดสอบ A/B สำหรับบริษัทเทคโนโลยีขนาดใหญ่ที่มีผู้ใช้รายเดือนหลายล้านคน คุณผู้อ่านอาจจะมองหา MDE ในช่วง 0.01% ถึง 0.05% ~เพราะเปลี่ยนแปลงเพียงเล็กน้อยก็ถึงเป็นเม็ดเงินที่คุ้มค่า
- traffic_allocations ปริมาณ sample size ของผู้ชมที่เรายินดีจะนำมาใช้ทดสอบ

3: Visualizing the relationship between sample size and MDE
ขั้นต่อมาเป็นการสร้างภาพความสัมพันธ์ระหว่างขนาดตัวอย่างและ MDE
# สร้างกราฟความสัมพันธ์ ระหว่าง MDE และ sample size
plt.figure(figsize=(10, 6))
mde_range = np.arange(0.01, 0.2, 0.01)
sample_sizes = [calculate_sample_size(baseline_conversion, mde) for mde in mde_range]
plt.plot(mde_range * 100, sample_sizes)
plt.xlabel('Minimum Detectable Effect (%)')
plt.ylabel('Required Sample Size per Variant')
plt.title('Required Sample Size vs. MDE')
plt.grid(True)
plt.tight_layout()
plt.show()

Chart ที่ได้ก็คือ follow ตามกฏที่ว่า MDE ต่ำลง (ละเอียดมาก) ขนาดตัวอย่างที่ใช้จะใหญ่ขึ้น และเมื่อ MDE สูง (หยาบขึ้น) ขนาดตัวอย่างที่ใช้ก็จะยิ่งเล็กลง
เป็น Chart ที่เป็นประโยชน์เมื่อต้องนำเสนอผลลัพธ์ต่อ boss หัวหน้างาน ทีมงานต่างๆ ช่วยให้ทีมตัดสินใจได้ง่ายขึ้นว่า MDE และขนาดตัวอย่างเท่าใดที่ยอมรับได้เมื่อต้องดำเนินการทดลอง
ในโลกแห่งความเป็นจริง การเลือก sample size อาจจะต้องตัดสินใจอย่างรวดเร็ว โดยอาจจะพิจารณาจากระยะเวลา (Timeline) กับงบประมาณ (Budget) ว่าสมเหตุสมผลหรือไม่? → ในบางครั้งงบก็น้อย ระยะเวลาที่ต้องสรุปผลอีก 2 เดือนข้างหน้า สั้นมากก 😭 แต่ก็ต้องสู้กันปายย
มันเป็นสิ่งที่เราต้อง Trade off เสมอระหว่างความถูกต้องทางสถิติกับระยะเวลาที่เรามี หากต้องการความถูกต้องตามแนวทางหลักการสถิติทุกอย่างอาจจะต้องใช้เวลานานถึงจะได้ผลลัพธ์ออกมา
หรืออาจจะยักเยื้องไปคำนวน Sample size จาก Confidence level และ MOE (Margin of Error) เลยว่าที่ Error 5% → Confidence level 95% จากทดลองซ้ำ 100 ครั้ง ได้ผลลัพธ์เหมือนเดิม 95 ครั้ง ต้องใช้จำนวน Sample size เท่าไหร่ที่เว็บไซต์นี้ Sample Size Calculator | SurveyMonkey และใช้ระยะเวลาตามที่ตาไมค์กำหนดเอง

4. Analyze A/B Test Results
หลังจากรู้แล้วว่าจะใช้ขนาด Sample size และระยะเวลาการทดลองเท่าไหร่แล้ว ต่อไปก็มารัน A/B testing กันต่อ ในการวิเคราะห์ผลลัพธ์ของการทดสอบ A/B เราต้องถามคำถามต่อไปนี้:
- มีความแตกต่างระหว่างกลุ่ม A และกลุ่ม B หรือไม่? → ในโจทย์ของเราก็จะเป็น “มีความแตกต่างใน CTR (Click-Through Rate) ระหว่างหน้า Landing page สีขาวและสีดำหรือไม่”
- และความแตกต่างนี้มีความสำคัญทางสถิติ (นัยยะสำคัญทางสถิติ) หรือไม่?
สิ่งที่เราต้องวัดเมื่อต้องวิเคราะห์ผลการทดสอบ A/B testing
- Statistical significance - ความแตกต่างที่สังเกตได้ระหว่าง Control group และ Treatment group ของเรามีความสำคัญทางสถิติ (นัยยะสำคัญทางสถิติ) หรือไม่
- Confidence interval
- Effect size – ขนาดของความแตกต่างระหว่าง Control group และ Treatment group คือเท่าใด
นี่คือโค้ด Python ที่ใช้ดำเนินการคำนวณองค์ประกอบก่อนหน้านี้:
def analyze_ab_test_results(control_visitors, control_conversions,
treatment_visitors, treatment_conversions,
significance_level=0.05):
# Calculate conversion rates
control_rate = control_conversions / control_visitors
treatment_rate = treatment_conversions / treatment_visitors
# Calculate absolute and relative differences
absolute_diff = treatment_rate - control_rate
relative_diff = absolute_diff / control_rate
# Calculate standard errors
control_se = np.sqrt(control_rate * (1 - control_rate) / control_visitors)
treatment_se = np.sqrt(treatment_rate * (1 - treatment_rate) / treatment_visitors)
# Calculate z-score
pooled_se = np.sqrt(control_se**2 + treatment_se**2)
z_score = absolute_diff / pooled_se
# Calculate p-value (two-tailed test)
p_value = 2 * (1 - stats.norm.cdf(abs(z_score)))
# Calculate confidence interval
z_critical = stats.norm.ppf(1 - significance_level/2)
margin_of_error = z_critical * pooled_se
ci_lower = absolute_diff - margin_of_error
ci_upper = absolute_diff + margin_of_error
# Determine if result is statistically significant
is_significant = p_value < significance_level
return {
'control_rate': control_rate,
'treatment_rate': treatment_rate,
'absolute_diff': absolute_diff,
'relative_diff': relative_diff * 100, # Convert to percentage
'margin_of_error': margin_of_error,
'z_score': z_score,
'p_value': p_value,
'ci_lower': ci_lower,
'ci_upper': ci_upper,
'is_significant': is_significant
}
ข้างบนเป็นฟังก์ชันที่ใช้คำนวณ เราเพียงแต่ใส่ค่าพารามิเตอร์เพิ่ม ก็คือ
- control_visitors จำนวนผู้ชมในกลุ่ม Control
- control_conversions จำนวนผู้ชมในกลุ่ม Control ที่มี conversions
- treatment_visitors = จำนวนผู้ชมในกลุ่ม Treatment
- treatment_conversions จำนวนผู้ชมในกลุ่ม Treatmentที่มี conversions
- significance_level นัยยะสำคัญที่เราใช้แบ่งว่า A/B มีความแตกต่างกัน (default 0.05)
assume ว่าผลการทดสอบของตามไมค์ได้ผลลัพธ์ตามด้านล่าง เราจะได้ผลสรุปที่มีลักษณะดังนี้
analyze_ab_test_results(control_visitors = 30000,
control_conversions = 1500,
treatment_visitors = 30000,
treatment_conversions = 1650,
significance_level=0.05)

วนกลับไปที่หน้า Landing Page ของตาไมค์ ผลลัพธ์ที่ได้คือ หน้า Landing Page สีดำช่วยเพิ่ม CTR ได้อย่างมีนัยสำคัญถึง 10% (relative_diff: 9.9999) ที่นี้ก็เป็นหน้าที่ของตาไมค์แล้วว่าจะตัดสินใจเปลี่ยนสีของหน้า Landing page จากสีขาวเป็นสีดำรึเปล่า เย้! 🫡
Takeaways
ฟิ้วว มาใกล้มากกกเลยฮะ สรุปสุดท้ายแล้วการจะใช้ A/B Testing นั้นมันแล้วแต่ Business Objective ของธุรกิจนั้นๆ เลยว่า ต้องการใช้งานเพื่ออะไร ใช้งานกับอะไร
โดย A/B Testing มี 4 ขั้นตอน คือ ตั้ง hypothesis, metric อะไรที่ใช้วัด hypothesis ที่ตั้งไว้, เลือกจำนวนกลุ่มตัวอย่างและระยะเวลาในการทดสอบ เก็บข้อมูลที่ได้และวิเคราะห์ผล A/B Testing
และ A/B Testing จะทำกี่ครั้งก็ได้จนกว่าจะพอใจในผลลัพธ์ แต่ยังไงก็ต้องแคร์งบฯ แคร์ระยะเวลาด้วย ฮ่าๆๆ หวังว่าตัวอย่างวิธีการทดสอบนี้จะเป็นประโยชน์กับคุณผู้อ่านนะครับ ขอบคุณฮะ







One response to “มาทำ AB Testing ใน python กัน”
[…] python กันไปแล้วในโพสต์นี้ “มาทำ AB Testing ใน python กัน” […]