Luồng đăng ký (Sign up Flow)
Giờ chúng ta sẽ mô phỏng DGP (quy trình tạo dữ liệu) của một luồng quảng cáo eCommerce, bắt đầu từ bước đăng ký.
Mỗi ngày, chúng ta có nhiều lượt hiển thị quảng cáo (ad impressions), có thể mô hình hóa bằng biến ngẫu nhiên Poisson (RV). Bạn biết rằng \(\lambda\) có phân phối chuẩn với trung bình 100k khách truy cập và độ lệch chuẩn 2000.
Trong hành trình đăng ký, khách hàng nhìn thấy quảng cáo, quyết định có nhấp hay không, rồi quyết định có đăng ký hay không. Vì vậy cả lượt nhấp và lượt đăng ký đều là nhị phân, được mô hình hóa bằng các biến ngẫu nhiên nhị thức (binomial RV). Còn xác suất thành công \(p\) thì sao? Phương án chi phí thấp hiện tại cho tỷ lệ nhấp (click-through rate) là 1% và tỷ lệ đăng ký là 20%. Một phương án chi phí cao hơn có thể tăng tỷ lệ nhấp và đăng ký lên tối đa 20%, nhưng chúng ta không chắc mức cải thiện cụ thể, nên ta mô hình hóa nó như một biến ngẫu nhiên phân phối đều (uniform RV).
Bài tập này là một phần của khóa học
Mô phỏng Thống kê bằng Python
Hướng dẫn bài tập
- Khởi tạo các dictionary
ct_ratevàsu_ratesao cho giá trịhighđược lấy từ phân phối đều trong khoảng giữa giá trịlowvà \(1.2 \times\) giá trịlow. - Mô hình hóa
impressionsnhư một biến ngẫu nhiên Poisson với giá trị trung bìnhlam. - Mô hình hóa
clicksvàsignupsnhư các biến ngẫu nhiên nhị thức vớinlần lượt làimpressionsvàclicks, vàplần lượt làct_rate[cost]vàsu_rate[cost]. - Sau đó, in ra số lượt đăng ký mô phỏng cho phương án chi phí
'high'.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Initialize click-through rate and signup rate dictionaries
ct_rate = {'low':0.01, 'high':np.random.uniform(low=0.01, high=1.2*0.01)}
su_rate = {'low':0.2, 'high':____(low=0.2, high=1.2*____)}
def get_signups(cost, ct_rate, su_rate, sims):
lam = np.random.normal(loc=100000, scale=2000, size=sims)
# Simulate impressions(poisson), clicks(binomial) and signups(binomial)
impressions = ____
clicks = ____
signups = ____
return signups
print("Simulated Signups = {}".format(get_signups('high', ct_rate, su_rate, 1)))