ทำ A/B Testing กับแอพของคุณด้วย Firebase Remote Config และ Google Analytics for Firebase

Jirawatee
Firebase Thailand
4 min readDec 1, 2016

--

จากที่ได้มีโอกาสไปพูดหัวข้อนี้ในงาน GDG DevFest Hackathon Bangkok 2016 ที่ผ่านมา ก็มีหลายทีมที่เข้าแข่งขัน สนใจเข้ามาปรึกษาเรื่อง A/B Testing ด้วย Firebase จึงเป็นที่มาของบทความนี้ และเป็นบทความแรกที่เอา Firebase มากกว่า 1 ตัวมา Integrate ให้ก่อเกิดพลังอันยิ่งใหญ่(Energon)

GDG DevFest Hackathon Bangkok 2016

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

ตัวอย่างเช่น การจะให้แอพมี bubble เพื่อแสดงว่ามีโพสใหม่เพิ่มเข้ามา

การแสดงผล bubble โพสใหม่

จากตัวอย่างจะเห็นว่า bubble โพสใหม่ของ Google+ จะแสดงด้านล่าง และของ Twitter จะอยู่ด้านบน และจากการที่ลองให้ Developers ในงานทายดูว่า แบบไหนคนจะคลิกมากกว่ากัน ผลปรากฎว่า ส่วนมากจะคิดว่า bubble ที่อยู่ด้านบนแบบ Twitter จะถูกคลิกมากกว่า(ตอนจบมีเฉลย)

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

Make sure you’re doing on the right thing.

เอาหละบทความนี้จะแนะนำเครื่องมือที่จะทำให้คุณได้รับเสียงโหวตจากผู้ชมทั่วประเทศ เพื่อให้คุณสามารถปล่อย feature ได้ตรงตามใจผู้ชมมากที่สุดแบบฟรีๆ และนั่นก็คือ Firebase Remote Config + Google Analytics for Firebase

หากใครยังไม่รู้จักบริการทั้ง 2 ตัวนี้สามารถไปทำความรู้จักได้ที่

แต่หากใครรู้จักบริการทั้งคู่แล้ว จะรอไรอะ มาลุยกันเลย โดยก่อนลงมือเราจะต้องคิดนิสนึงว่า A/B Testing ที่เรากำลังจะทดลองนั้น ต้องการทดลองกับคนกลุ่มไหน หรือทั้งหมด ดังเช่น

  • ต้องการทดลองกับจำนวนผู้ใช้ 25% (เพราะบาง feature อาจเป็นระดับ major)
  • ต้องการทดลองกับผู้ใช้ที่เคยจ่ายเงินซื้อ in-app purchase
  • ต้องการทดลองกับผู้ใช้ระบบปฏิบัติการ iOS
  • ต้องการทดลองกับผู้ใช้ที่อยู่ในประเทศไทย
  • ต้องการทดลองกับผู้ใช้ที่ตั้งค่าภาษาในเครื่องเป็นภาษาไทย
  • ต้องการทดลองกับผู้ที่ชอบทานต้มยำกุ้ง(ดึงค่า user property ที่ custom จาก Google Analytics for Firebase)
Firebase Remote Config in Firebase Console

จากเงื่อนไขตัวอย่างด้านบน Firebase Remote Config สามารถที่จะ mix and match หลายๆปัจจัยเข้าด้วยกันได้ แต่ผมจะทดลองง่ายๆโดยเลือกทดลองกับผู้ใช้ 50% ของแอพ โดยแบ่งออกเป็นเงื่อนไข 2 ตัว คือ Experiment_1_Variant_A ให้เปอร์เซ็นไทล์เป็น 0–25% และ Experiment_1_Variant_B ให้เปอร์เซ็นไทล์ที่ 26–50% ตามรูปด้านล่างเลย

ทดลองที่เปอร์เซ็นไทล์ 0 — 25
ทดลองที่เปอร์เซ็นไทล์ 25–50

เปอร์เซ็นไทล์ คือ ตำแหน่งที่บอกว่า
เมื่อเทียบจากร้อยจะมีผู้ได้มากกว่า, น้อยกว่า หรือ เท่ากับ ตำแหน่งนี้กี่คน

กรณีของผู้ที่ลงแอพที่ติด Firebase Remote Config ไว้ จะถูก Random ไปตกตามช่วงต่างๆของเปอร์เซ็นไทล์แบบ balance

ตัวอย่างเปอร์เซ็นไทล์ที่ > 90% หมายความว่าผู้ใช้ที่ถูก random ไปตกที่ 91–100
ซึ่งไม่ได้แปรว่าจำนวนผู้ใช้ มากกว่า 90% จะได้รับการทดลองนี้

จากนั้นก็มาตั้งค่า parameter ชื่อ experiment1 ใน Firebase Remote Config โดยถ้าเข้าเงื่อนไขเปอร์เซ็นไทล์ที่ 0–25% จะได้ค่าเป็น Top ถัดมาถ้าเข้าเงื่อนไขเปอร์เซ็นไทล์ที่ 26–50% จะได้ค่าเป็น Bottom และหากไม่เข้าเงื่อนไขใดๆ จะได้ค่า default เป็น None

Set experiment parameter

ถัดไปให้เข้าไปที่ Analytics ใน Firebase Console เพื่อไปตั้งค่า user property มา 1 ตัวสำหรับเรื่องนี้ ถามว่าทำไมต้องตั้ง คำตอบคือตั้งเพื่อให้ filter ดูข้อมูลใน report ได้ง่าย(ดูผลลัพธ์ตอนท้าย) ตัวอย่างผมตั้งชื่อ MyExperiment และอธิบายชื่อตัวแปรสักนิด วันหลังจะได้ไม่งง

สร้าง user property ใน Google Analytics for Firebase

มาโค้ดกันเถอะ

ตอนนี้ก็ได้เวลาอันเหมาะสมที่จะ…โค้ดกันแล้ว(ตัวอย่างเป็น Android) นะครับ มาเริ่มกันเลย โดยหากสร้างโปรเจคใหม่ก็ไปดูบทความนี้ได้

แต่หากมีโปรเจคอยู่แล้วก็ไป import ตัว dependencies 2 ตัวนี้มา

compile 'com.google.firebase:firebase-core:11.4.2'
compile 'com.google.firebase:firebase-config:11.4.2'

แล้วเราก็มาลงที่เนื้อๆกันเลย(แบบละเอียดให้ไปอ่านจากลิงค์เรื่อง Firebase Remote Config และ Google Analytics for Firebase ที่มีด้านบน)

เริ่มจากการไปสร้างไฟล์ remote_config_defaults.xml ที่ res/xml/ ตามนี้จ้า

<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
<entry>
<key>experiment1</key>
<value>None</value>
</entry>
</defaultsMap>

แล้วก็แว๊บมาที่ MainActivity.java ให้เรียกคำสั่ง fetch ค่าจาก Firebase Remote Config ออกมาและ activate มันซะ จากนั้นให้ดึงค่าจาก param ที่เราตั้งไว้ใน Remote Config ก่อนหน้า นั่นก็คือ experiment1 เมื่อดึงมาแล้วให้เราทำการตั้งค่า user property กับ param ที่เราสร้างไว้ นั่นก็คือ MyExperiment ไปยัง Analytics ยัง…ยัง….ยังไม่จบอีก เราก็เอาค่าที่ดึงจาก Remote Config ไปเป็นตัวตัดสินใจในการแสดงผล เพื่อให้ผู้ใช้ที่เปอร์เซ็นไทล์ 0–25% เห็นแบบหนึ่ง ผู้ใช้ที่เปอร์เซ็นไทล์ 26–50% เห็นแบบหนึ่ง และผู้ใช้อีกครึ่งหนึ่งไม่เจอการทดลองนี้

mFirebaseRemoteConfig.fetch(cacheExpiration).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mFirebaseRemoteConfig.activateFetched();
// ดึงค่าตัวแปรจาก Remote Config
experiment1_variant = mFirebaseRemoteConfig.getString("experiment1");
// ตั้งค่า user property ไปที่ Analytics
mFirebaseAnalytics.setUserProperty("MyExperiment", experiment1_variant);


if ("Top".equals(experiment1_variant)) {
bubbleTop.setVisibility(View.VISIBLE);
} else if ("Bottom".equals(experiment1_variant)) {
bubbleBottom.setVisibility(View.VISIBLE);
}
}
}
});

สุดท้ายของการโค้ด เราก็มา Log event ที่ผู้ใช้คลิกเพื่อเก็บสถิติจากการที่แสดงผล bubble โพสใหม่บนกับล่างแบบเห็นเท่าๆกัน ผู้ใช้คลิกแบบไหนมากกว่ากัน

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.bubble_top:
case R.id.bubble_bottom:
Bundle params = new Bundle();
// แนบค่าที่ได้จาก Firebase Remote Config
params.putString(FirebaseAnalytics.Param.LOCATION, experiment1_variant);
// Log event ชื่อ BubbleClicked เมื่อผู้ใช้คลิก
mFirebaseAnalytics.logEvent("BubbleClicked", params);
break;
}
}

ผมได้เตรียม source code ตัวอย่างของเรื่องนี้ไว้ให้แล้วที่ GitHub เชิญโหลดไปทัศนาได้ครับ

มาดูผลลัพธ์ผ่าน Google Analytics for Firebase กันพวกเรา

เมื่อเวลาแห่งการทดลองได้ผ่านพ้นไป ก็ได้เวลาที่เราจะเข้าไปเก็บเกี่ยวผลผลิต เอ้า รอรัย(รอ Google Analytics for Firebase อัพเดทที่ Console นั่นเอง 555+) ไปดูกัน โดยเข้าไปที่ tab ชื่อ EVENTS ใน Google Analytics for Firebase ตามรูป

Events in Firebase Analytics

เป็นไง เห็น BubbleClicked มั้ย จากภาพจะเห็นว่า มีผู้ใช้ 4 คนที่เจอและคลิกไป 16 ครั้ง แล้วไงหละ มันก็ยังตอบเราไม่ได้ว่า bubble โพสใหม่ ข้างบน หรือ ข้างล่าง ดีกว่ากันช่ายมะ ต่อไปเราจะเพิ่ม Filter โดยกดปุ่ม Add Filter ที่มุมซ้ายบนละนะ โดยจะมีค่าให้เลือก 2 ค่าตามที่เราตั้งค่าใน user property ไป

MyExperiment = Top
MyExperiment = Bottom

จะการ filter ตัว user property ที่ชื่อ MyExperiment เราจะเห็นแล้วว่า 4 คนที่ได้เจอ feature นี้มีพฤติกรรมแบ่งเป็น

  • เจอ Bubble โพสใหม่ด้านบน 2 คน คลิก 5 ครั้ง
  • เจอ Bubble โพสใหม่ด้านล่าง 2 คน คลิก 11 ครั้ง

นั่นก็หมายความแว่…ว่า…ถูกแล้ว!!! แบบที่มี bubble ด้านล่าง มีแนวโน้มที่คนจะคลิกมากกว่านะคร้าาาบ

สรุปกันหน่อย

สรุปว่าบางครั้งสิ่งที่ทีมงานคิด อาจจะไม่ใช่สิ่งที่ผู้ใช้ส่วนใหญ่ถวิลหาก็เป็นได้ ดังนั้น A/B Testing ก็เป็นกระบวนการที่จะทำให้เราได้ยินเสียงผู้ใช้ว่าเขาชอบหรือไม่ หรือชอบแบบไหนมากกว่ากัน มันก็คงจะดีหาก feature ที่เราปล่อยไป มีคนชื่นชอบและใช้งานมันจริง และนั่นจะทำให้เรา Grow และ Earn ในลำดับต่อไปได้ ทั้งหมดนี้ Firebase Remote Config และ Google Analytics for Firebase พร้อมจะช่วยให้คุณได้ยินเสียงผู้ใช้ของคุณแล้ว มา มา เราไปฟังเสียงผู้ใช้กัน…ราตรีสวัสดิ์ พี่น้องชาวไทย

--

--

Jirawatee
Firebase Thailand

Technology Evangelist at LINE Thailand / Google Developer Expert in Firebase