A/B testing & Amazon A/B Test Tool

Với mục đích phục vụ cho các chức năng mới của dự án hiện tại. Mình làm 1 bai tìm hiểu về qui trình test A/B và cách thức sử dụng Amazon Test tool này vào cho các ứng dụng Android.

A/B testing là gì?###

A/B testing (còn được gọi là split testing) là một quy trình test mà trong đó hai phiên bản (A và B) sẽ được cùng so sánh trong một môi trường / tình huống được xác định và qua đó đánh giá xem phiên bản nào hiệu quả hơn.

Trong A/B Testing có 2 thuật ngữ là “Control” và “Treatment”

  • Control (A): là những nội dung hiện tại, chưa thay đổi và cần thực hiện A/B Testing.

  • Treatment (B): là những nội dung đã được thay đổi và bạn nghĩ nó mang lại kết quả tốt hơn Control.

Phiên bản ở đây có thể là mọi thứ từ một hình quảng cáo, trang web, mẫu quảng cáo cho tới email và hiệu quả được đánh giá dựa trên mục tiêu của người làm test dành cho các phiên bản này. Ví dụ như số lượng login/sign up hằng ngày, số lượng click, impression, tỉ lệ CVR, CTR v.v...

alt

Một website bán hàng thì có mục tiêu là muốn khách hàng phải mua hàng hoặc mua nhiều hơn. Một app quảng cáo thì có mục tiêu là khách hàng click vào quảng cáo nhiều hơn hoặc cài đặt quảng cáo mình nhiều hơn v.v... Tất cả mọi thứ đều có một mục tiêu nào đó, nhằm khiến cho khách hàng thực hiện một hành động mong muốn nào đó, hành động này được gọi là conversion. Tỉ lệ người thực hiện các hành động đó được gọi là conversion rate (tỉ lệ chuyển đổi).

alt

Quy trình A/B testing

Để thực hiện một quy trình A/B testing thì cần tuân theo các bước sau:

  1. Đặt câu hỏi: Cần phải đặt ra câu hỏi để xác định rõ mục tiêu cho quá trình A/B testing và để được biết sau khi test thì sẽ nhận kết quả là gì. Câu hỏi đặt ra có thể đại loại là: “làm sao để cải thiện CTR của banner quảng cáo?”.

  2. Nghiên cứu tổng quan: Cần phải hiểu và nắm được hành vi của các khách hàng bằng các công cụ thống kê như Google Analysitic.

  3. Đặt ra một giả thuyết: Với câu hỏi có bên trên và những gì biết về hành vi của khách hàng khi thực hiện conversion, bạn hãy thử nghĩ ra một giả thuyết về để giải quyết câu hỏi đặt ra phía trên. Ví dụ như “Nếu mình làm ảnh với hình ảnh một cô gái sexy sẽ có impresion, CVR, CTR cao hơn”.

  4. Xác định mẫu thử và thời gian thực hiện test: Bước tiếp theo là bạn cần phải xác định số lượng khách hàng và thời gian mà sẽ được tiến hành việc A/B testing. Số lượng mẫu thử phải đủ lớn để có thể thấy được sự khác biệt giữa 2 phiên bản A/B một cách rõ rệt sau quá trình test. Thời gian test cũng cần được xác định một cách hợp lý để đảm bảo kết quả không bị ảnh hưởng bởi các tác động từ bên ngoài khiến nhu cầu và hành vi của khách hàng thay đổi.

  5. Tiến hành test: Tạo ra thêm phiên bản mới B để thử nghiệm với phiên bản gốc A. Phiên bản B này sử dụng giả thuyết mà bạn đã đặt ra và sẽ được đo lường về conversion rate với phiên bản A.

  6. Thu thập thông tin và tiến hành phân tích: Nếu sau quá trình A/B testing và bạn thấy được rằng phiên bản B mang lại conversion rate cao hơn phiên bản A thì tức là phiên bản B hiệu quả hơn. Nhưng nếu conversion rate thấp hơn hoặc không thay đổi thì tức là giả thuyết để giải quyết vấn đề của bạn không đúng. Lúc này cần quay lại bước thứ 3 và tìm một giả thuyết mới để tiếp tục.

  7. Cung cấp kết quả cho tất cả các bên liên quan: Gửi các thông tin sau quá trình thử nghiệm cho các bộ phận liên quan (lập trình, thiết kế UI/UX, team tối ưu hóa, v.v…). Quyêt định và cân nhắc có thay thế phiên bản A bằng B không nếu B tốt hơn.

Lập lại quy trình test này từ đầu để giải quyết một câu hỏi, một vấn đề khác. Chú ý là bạn chỉ nên 1 lần chỉ thực hiện 1 kiểm tra và 1 lần chi kểm tra 1 biến.

Amazon Test Tool for Android / Fire OS###

Phần tiếp theo mình sẽ tìm hiểu về APIs mà Amazon cung cấp để thực hiển A/B test cho các apps di động và game. APIs hày hoàn toàn miễn phí, không phụ thuộc vào lưu lượng sử dụng của bạn. Để nhằm phục vụ cho dự án hiện tại thì mình chỉ dịch phần tài liệu cho Android.

alt

Chú ý tại thời điểm hiện tại đây vẫn là bản Beta nhé.

Setting Up Your First A/B Test

Bạn có thể sử dụng A/B Test service để test những thay dổi trong app của bạn trong 1 nhóm users. Với A/B test service, bạn có thể định nghĩa 1 tập hợp 5 sự thay đổi/phiên bản cho 1 biến trong app của bạn. A/B Test Serivce sẽ phân tách thành các version khác nhau của app bạn đến 1 tập/nhóm các users. Và app sẽ thông báo lại hành vi người dùng trở lại A/B Testing service, ví dụ như số lượng conversion, clicks, hoặc là các sự kiện khác mà bạn định nghĩa. A/B Testing service sẽ tổng hợp những sự kiến ấy lại và tạo nên 1 báo cáo tổng hợp về tính hiệu quả của mội sự thay đổi/ phiên bản

Khi quá trình test của bạn được hoàn thành, bạn có thể sử dụng A/B Testing Service để chuyển test thành launch - chức năng cho phép bạn chuyển phiển bản đạt hiệu quả cáo nhất đến tới 100% user. Việc này cho phép bạn có thể deploy bản final version mà ko cần thiết phải làm thêm bất kì 1 thao tác gì khác như up lên bản mới hay v.v....

Để chạy A/B Test Service, bạn cần phải tạo tài khoản dev Amazon, tạo 1 identifier của app của bạn và sử dụng thư viện Amazon Insights SDK để tích hợp A/B Testing APIs vào trong app của bạn.

Chú ý : Bạn cần phải có tài khoản dev Amazon để sử dụng A/B Testing. Buốc này là rất cần thiết kể cản khi bạn ko có ý định phâ phối app của bạn thông qua Amazon AppStore. Ngoài ra bạn ko hề mất tiền để tạo tài khoản Amazon nhé.

Step 1: Generate an Identifier

1 cái identifier là 1 cặp public key để phân biệt app của bạn tới hệ thống Amazon A/B Testing Service và 1 private key để xác nhận những request đến Amazon A/B Testing Service. Cặp public và private keys này có thể sử dụng với cả Analytics và A/B Testing.

Với mội app bạn có thể tạo 1 identifier khác nhau, ví dụ 1 cái cho iOS và 1 cái cho Android. Hoặc bạn cũng có thể sử dụng 1 cặp identifier cho cả 2. Tùy theo việc bạn có muốn nhóm kết quả lại theo các version hay là để riêng rẽ.

Trong console A/B Testing, click vào Create Identifier.

alt

Ấn vào identifier và click Save Identifier

alt

Lưu lại giá trị của public và private keys. Bạn sẽ cần dùng nó để tích hợp SDK vào app.

alt

Step 2: Create Your First Project

Một project định nghĩa 1 vùng mà bạn create, quản lý và xem kết quả cho A/B test. Mỗi Project có thể chỉ có thể có 1active A/B test chạy đồng thời. Tất nhiên bạn có thể chạy nhiều project khác nhau.

Trong A/B Test Console, chọn app identifier từ list dropdown ở bên trái phía trên. Click vào Add a New Project.

alt

Nhập tên projet và mô tả test bạn địn chay và click Save Project.

alt

Step 3: Create a new A/B Test

Một A/B test sẽ mô tả sự thay đổi để test trong app của bạn và làm cách nào app của bạn report những kết quả thay đổi trong hành vi của user. Khi bạn tạo 1 A/B test, bạn cần định nghĩa 1 hoặc nhiều phiên bản để đa dạng hóa và các sự kiện để app send lại kết quả đến A/B Testing service.

Trong A/B test console, chọn Add a New A/B Test.

alt

Chọn tên A/B test và mô tả ngắn gọn.

alt

Chọn tên của sự kiện mà app bạn sẽ send back thông tin kết quả về A/B test khi nó hiển thị các phiên bản đến user. Phần tên này sẽ phải cùng tên với tên sự kiện mà app gửi trong bước 9 : Record the Visit Event.

alt

Nhập title của phần mục đích và tên của sự kiện conversion mà app sẽ gửi lại kêt quả cho A/B Testing service khi user thao tác 1 action mục đích. Tên của sự kiện này phải trùng với tên sự kiện trong Step 10: Record the Conversion Event.

alt

Click Max nếu mục tiêu business của bạn là tằng goal càng nhiều càng tốt như tăng số lượng in-app purchases. Click Min neeus mục tiêu của bạn là giới hạn đến mức tối đa, ví dụ như giảm phần trăm users bỏ game khi đang chơi.

Bạn có thể add rất nhiêu mục tiêu cho A/B test bằng cách click vào Add Goal và định nghĩa các goal khác. Cho mối A/B test bạn được định nghĩa max là 10 goals.

alt

Bạn có thể sử dụng nhiều mục tiêu để đảm bảo rằng một thay đổi ứng dụng của bạn để cải thiện một mục tiêu không vô tình tạo ra một kết quả không mong muốn trong một mục tiêu khác. Nó cũng cho phép bạn hiểu được phản ứng người dùng phức tạp hơn để thử nghiệm A / B của bạn hơn với một mục tiêu duy nhất. Trong ví dụ này, các thử nghiệm A / B theo dõi thay đổi độ khó một ứng dụng trò chơi ảnh hưởng đến in-game purchases và shares Facebook, và liệu players có hoàn thành level hay bỏ cuộc.

Nhập tên của một biến trong A/B test. Ứng dụng của bạn sử dụng biến này để thay đổi các trải nghiệm của nó mang lại cho người sử dụng. Tên này phải là giống với tên biến mà ứng dụng của bạn lấy từ A / B Testing trong Bước 8: Retrieve a Variation. Bạn có thể xác định tối đa 50 biến mỗi Một thử nghiệm A / B. Bạn có thể chỉnh sửa biến này sau khi thử nghiệm được tạo ra.

Nhập giá trị cho các biến của bạn. Đây có thể là giá trị số hoặc chuỗi. Đây là những giá trị mà A/B Testing service sẽ gửi đến ứng dụng của bạn khi ứng dụng của bạn nhận 1 phiên bản. Bạn có thể xác định tối đa 5 giá trị cho mỗi biến.

Nhập phân phối cho các biến thể của bạn. Con số này xác định cách A/B Testing service phân phối phiên bản đến người dùng của bạn. Tổng phân phối phải bằng 100%. Bạn có thể chỉnh sửa phân phối sau khi bạn bắt đầu một thử nghiệm A/B, nhưng một khi người dùng đã nhận được một sự thay đổi, họ sẽ tiếp tực giữa phiên bản đó cho đến khi bạn kết thúc cuộc thử nghiệm A/B.

alt

Chú ý: bạn nên phân bố các phiên bản dựa trên trafic. Ví dụ, app với traffic cao có thể nhận được kết quả chú yếu bằng việc gửi cho hầu hết các user phiên bản default (Controll) và chỉ 1 vài phiên bản thay thế. App với lượng traffic thấp có thể nhận được kết quả tốt hơn với 1 hoặc nhiều phiên bản.

Nhấn vào xem A/B test của bạn liệu nên nhắm mục tiêu tất cả người dùng, hoặc chỉ một phân khúc người dùng của bạn. Ví dụ, bạn có thể nhắm mục tiêu thử nghiệm A/B để chỉ áp dụng cho thử nghiệm beta. Bạn phải xác định trước kích thước phân đoạn của mình để sử dụng phân đoạn. Để biết thêm thông tin, xem Segmentation.

alt

Click Save.

Integrate the SDK

Step 4: Download the SDK#####

A/B Test cung cấp cho các bạn 2 version của thư viện Amazon Insights SDK, 1 cho Android / Fire OS, 1 cái khác cho bên iOS. Cả 2 đều được available trong Amazon Mobile App SDK.

Step 5: Set Required Permissions#####

Các permission đưới đây là bắt buộc để sử dụng Amazon Insights SDK. Đặt vào file AndroidManifest.xml.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Step 6: Add Libraries to Your Project and Import Amazon Insights#####

Đưa Amazon Insights Android SDK jar vào project. The Amazon Insights jar và tài liệu được đặt trong thư mục /Android/AmazonInsights/ Tiếp, import Amazon Insights vào trong code.

import com.amazon.insights.*;
Step 7: Initialize Amazon Insights SDK#####

Khởi tạo Amazon Insights SDK như đưới đây. Sử dụng public key của identifier cho phần key parameter.

// Create a credentials object using the keys from the
// Amazon Apps & Games Developer Portal's A/B Testing site.
InsightsCredentials credentials = AmazonInsights.newCredentials("YOUR_PUBLIC_KEY", "YOUR_PRIVATE_KEY");

// Initialize a new instance of AmazonInsights specifically for your application.
// The AmazonInsights library requires the Android context in order to access
// Android services (i.e. SharedPrefs, etc)
AmazonInsights insightsInstance = AmazonInsights.newInstance(credentials, getApplicationContext());

Note: Thay YOUR_PUBLIC_KEY và YOUR_PRIVATE_KEY với giá trị thật.

Bạn cũng có thể khởi tạo bằng phương pháp sau :

// Create a credentials object using the values from the
// Amazon Apps & Games Developer Portal's A/B Testing site.
InsightsCredentials credentials = AmazonInsights.newCredentials("YOUR_PUBLIC_KEY", "YOUR_PRIVATE_KEY");

// Create an options object with event collection enabled and WAN delivery enabled
InsightsOptions options = AmazonInsights.newOptions(true, true);

// Initialize a new instance of AmazonInsights specifically for your application.
// The AmazonInsights library requires the Android context in order
// to access Android services (i.e. SharedPrefs, etc)
AmazonInsights insightsInstance = AmazonInsights.newInstance(credentials, getApplicationContext(), options);

Nếu bạn không muốn xác định 1 đối tượng InsightsOptions, SDK sẽ khởi tạo với Event Collection được enabled và WAN Delivery disabled.

Step 8: Retrieve a Variation#####

Sau khi khởi tạo SDK trong app của bạn, bạn cần phải request các phiên bản từ Amazon Insights instance bằng cách sử dụng phương thức getABTestClient() để lấy được ABTestClient sau đó invoke phương thức getVariations() ddeer cung cấp tên của Project(s).Khi clients trả về một phiên bản, bạn có thể get được các giá trị biến từ phiên bản đó.

private void onLoadLevel() {
    // Allocate/obtain variations for level 3
    abClient.getVariations("Level 3")
        .setCallback(new InsightsCallback){
            @Override
            public void onComplete(VariationSet variations) {

                // Request a Variation out of the VariationSet
                final Variation level3Variation = variations.getVariation("Level 3");
                final double gameDifficultyMultiplier = level3Variation.getVariableAsDouble("difficultyMultiplier", 1.0);

                // Use the gameDifficultyMultiplier as required in the application (change hitpoints, damage, etc)
            }
           @Override
            public void onError(finalInsightsError error) {

                // base class will record the error to log cat
                super.onError(error);

                // do any additional handling (if needed) if insights could not allocate any variations
             ...
           }

        });

        // Create a visit event when the user starts playing level 3.
        Event level3Start = eventClient.createEvent("level3Start");

        // Record the visit event.
        eventClient.recordEvent(level3Start);
}
Step 9: Record the Visit Event#####

Các sự kiện view chỉ định cho A/B Testing service biêt rằng customer/user đã vừa mới tham gia vào quá trình test. Đoạn code dưới đây sẽ cho biết làm cách nào để tạo và lưu các sự kiện đến Amazon service. Xác nhận tên của sự kiện phải trùng với tên của sự kiện view được xác định trong phần config A/B test trong bước 5. Tại bất kì thời điểm nào, bạn cũng có thể update A/B test configuration để cho khớp tên.

// Create a visit event when the user starts playing level 3.
Event level3Start = eventClient.createEvent("level3Start");
 
// Record the visit event.
eventClient.recordEvent(level3Start);
https://developer.amazon.com/public/apis/manage/ab-testing
Step 10: Record the Conversion Event#####

Sự kiện conversion chỉ định A/B Testing service rằng user vừa mới hoàn thành action goal. Lưu lại sự kiện conversion cho mỗi goal bạn đã xác định ở trọng A/B test.

private void onUpsaleDialogClosed() {
    // Record if the user bought an upgrade (conversion)
    if (userBoughtUpgrade) {
        // Create an event Event
        Event boughtUpgradeEvent = eventClient.createEvent("level3ItemPurchased");

        // Record an event
        eventClient.recordEvent(boughtUpgradeEvent);
    }
}
Step 11: Submit Events to the Website######

Để gửi sự kiện lên server, sử dụng submitEvents() trong EventClient của instance của AmazonInsights.

eventClient.submitEvents();

Amazon khuyến khích bạn gọi submitEvents trong phương thức onPause của mỗi đối tượng Activity mà ghi lại sự kiện, SDK sẽ đẩm bảo rằng bạn không submit 1 sự kiện nào quá nhiều. Nó làm được vậy là vì nó giới hạn số lần submit trong 1 phút. Nếu bạn cố gắng submit sự kiện trong 1 phút của sự kiến trước kia thì submission này sẽ bị bỏ qua.

Starting Your First A/B Test####

Step 12: Start a Test#####

Sau khi bạn đã cấu hình thử nghiệm của bạn A / B và tích hợp các APIs A / B Testing vào ứng dụng của bạn, bạn phải bắt đầu thử nghiệm để cho các A/B Testing service để cung cấp các phiên bản để ứng dụng của bạn và nhận được thông báo sự kiện từ ứng dụng của bạn.

Chỉ có một A/B test có thể được hoạt động cho mỗi dự án. Một khi A/B test đã bắt đầu, bạn có thể thay đổi sự phân bố biến nhưng không phải là giá trị. Thay đổi các phân phối biến thể chỉ ảnh hưởng đến phân bổ biến trong tương lai; nó không ảnh hưởng đến khách hàng đã là một phần của một bài kiểm tra.

Trong A/B Testing console, click Draft Experiments. Click Start.

alt

Step 13: View Results######

Một khi một thử nghiệm đang hoạt động, các thiết bị chạy ứng dụng của bạn có thể nhận được các biến thể và báo cáo kết quả.

Trong A/B Testing console, click Active Experiment. Click vào tiêu đề của A/B test experiment.

alt

A/B testing của bạn cho thấy:

Một bản tóm tắt các kết quả, với biến thể thành công nhất cho mỗi mục đích được gạch chân.

alt

alt

Một chìa khóa để giải thích các kết quả báo cáo.

alt

Step 14: End a Test#####

Khi thử nghiệm của bạn đã chứng minh sự thay đổi tốt nhất cho người dùng của bạn, bạn có thể kết thúc thử nghiệm và phân phối sự biến đổi cho tất cả người dùng của bạn bằng cách chuyển đổi thử nghiệm A / B của bạn thành một mắt. Sau khi bạn chuyển đổi các thử nghiệm vào launch, 100% người dùng của bạn nhận được sự thay đổi.

Trên tab Report tab of the A/B test, hoặc bấm Keep to keep Variation A hoặc bấm vào một nút Switch để thay đổi hành vi của ứng dụng của bạn để một phiên bản mới.

alt

Trong ví dụ này, ta click vào nút Switch cho Variation C. Điều này tạo ra một phiên bản draft cho launch của bạn. Các thử nghiệm A / B sẽ không kết thúc cho đến khi bạn bắt đầu khởi động.

alt

A/B Testing service copy thay đổi mà bạn đã chọn vào một phiên bản dự thảo của một khởi động. Click vào Lưu.

alt

Click Start. Điều này kết thúc thử nghiệm A / B và khiến tất cả các khách hàng mới nhận được sự thay đổi mà bạn đã chọn. Nhấn Yes để xác nhận hành động này.

Click Start.

alt

Debugging and Testing

Phần này mình lười dịch rồi (hihi). Các bạn tự tham khảo tài liệu nhé. Cũng ngắn và ko có gì nhiều đâu.

Nguồn và tài liệu tham khảo :

Bài viết có sử dụng tổng hợp và dịch hình ảnh và nội dung của các bài viết đưới đây :

http://kungfuphp.com/php-nang-cao/ab-testing-la-gi-gioi-thieu-ab-testing-trong-lap-trinh-php.html

http://conversion.vn/ab-testing/

http://thuthuatmarketing.com/digital-marketing/email/email-marketing-co-ban-3-ab-testing/

http://subiz.com/blog/10-bi-kip-ve-a-b-test-ma-nguoi-lam-marketing-can-biet.html

http://lenam.info/phuong-phap-thuc-hien-ab-split-test-kiem-tra-phan-tach-cho-facebook-ad-cua-ban/

https://developer.amazon.com/appsandservices/apis/manage/ab-testing

https://developer.amazon.com/public/apis/manage/ab-testing/doc/a-b-testing-for-android-fire-os