1. Tổng quan
Chào mừng bạn đến với lớp học lập trình Tối ưu hoá giao dịch mua hàng trong ứng dụng theo thời gian thực trên thiết bị. Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng TensorFlow Lite và Firebase để huấn luyện và triển khai một mô hình cá nhân hoá tuỳ chỉnh cho ứng dụng của mình.
Hướng dẫn này cho thấy cách tạo một mô hình học máy để cá nhân hoá, cụ thể là mô hình dự đoán ưu đãi mua hàng trong ứng dụng (IAP) tối ưu dựa trên trạng thái hiện tại của người dùng. Đây là một ví dụ về vấn đề cướp có vũ trang theo bối cảnh, một loại vấn đề quan trọng và có phạm vi áp dụng rộng rãi trong học máy mà bạn sẽ tìm hiểu thêm trong lớp học lập trình này
Kiến thức bạn sẽ học được
- Thu thập dữ liệu phân tích thông qua Firebase Analytics
- Xử lý trước dữ liệu phân tích bằng BigQuery
- Huấn luyện một mô hình ML đơn giản để tối ưu hoá giao dịch mua hàng trong ứng dụng (IAP) trên thiết bị
- Triển khai các mô hình TFLite cho Firebase ML và truy cập vào các mô hình đó từ ứng dụng của bạn
- Đo lường và thử nghiệm nhiều mô hình thông qua tính năng Thử nghiệm A/B trong Firebase
- Huấn luyện và triển khai các mô hình mới bằng dữ liệu mới nhất theo định kỳ
Bạn cần có
- Android Studio phiên bản 3.4 trở lên
- Một thiết bị kiểm thử thực tế chạy Android 2.3 trở lên và Dịch vụ Google Play phiên bản 9.8 trở lên, hoặc một Trình mô phỏng chạy Dịch vụ Google Play phiên bản 9.8 trở lên
- Nếu sử dụng thiết bị kiểm thử thực, hãy dùng cáp kết nối
- Kiến thức cơ bản về học máy
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm của mình khi tạo ứng dụng Android?
2. Tuyên bố vấn đề
Giả sử bạn là một nhà phát triển trò chơi muốn hiển thị các đề xuất mua hàng trong ứng dụng (IAP) được cá nhân hoá ở cuối mỗi cấp độ. Mỗi lần, bạn chỉ có thể hiển thị một số lựa chọn mua hàng trong ứng dụng và bạn không biết lựa chọn nào sẽ có tỷ lệ chuyển đổi cao nhất. Vì mỗi người dùng và mỗi phiên hoạt động đều khác nhau, nên làm cách nào để tìm được ưu đãi mua hàng trong ứng dụng mang lại phần thưởng dự kiến cao nhất?
3. Nhận mã mẫu
Sao chép kho lưu trữ GitHub từ dòng lệnh.
git clone https://github.com/googlecodelabs/firebase-iap-optimization.git
Kho lưu trữ này chứa:
- Một sổ tay Jupyter (.ipynb) huấn luyện mô hình cá nhân hoá và đóng gói mô hình đó thành một mô hình TFLite
- Một ứng dụng Kotlin mẫu sử dụng mô hình TFLite để đưa ra dự đoán trên thiết bị
4. Chạy ứng dụng bằng Firebase
Trong lớp học lập trình này, chúng ta sẽ tối ưu hoá các sản phẩm trong ứng dụng của ứng dụng trò chơi giả tưởng Flappy Sparky. Đây là một trò chơi cuộn ngang, trong đó người chơi điều khiển một chú Sparky, cố gắng bay giữa các cột tường mà không va vào chúng. Khi bắt đầu cấp độ, người dùng sẽ thấy một ưu đãi mua hàng trong ứng dụng giúp họ có được một vật phẩm tăng sức mạnh. Trong lớp học lập trình này, chúng ta sẽ chỉ triển khai phần tối ưu hoá IAP của ứng dụng.
Bạn có thể áp dụng những gì học được ở đây cho ứng dụng của riêng mình được kết nối với một dự án Firebase. Hoặc bạn có thể tạo một dự án Firebase mới cho lớp học lập trình này. Nếu bạn cần trợ giúp để bắt đầu sử dụng Firebase, vui lòng xem hướng dẫn của chúng tôi về chủ đề này ( Android và iOS).
5. Thu thập các sự kiện Analytics trong ứng dụng của bạn
Các sự kiện Analytics cung cấp thông tin chi tiết về hành vi của người dùng và được dùng để huấn luyện mô hình học máy. Ví dụ: mô hình có thể học được rằng những người dùng chơi lâu hơn có nhiều khả năng sẽ mua hàng trong ứng dụng để nhận thêm mạng. Mô hình học máy cần các sự kiện phân tích làm dữ liệu đầu vào để tìm hiểu thông tin này.
Một số sự kiện phân tích mà chúng ta có thể muốn ghi nhật ký bao gồm:
- Thời gian người dùng chơi trò chơi
- Cấp độ mà người dùng đạt được
- Số xu mà người dùng chi tiêu
- Những mặt hàng mà người dùng mua
Tải dữ liệu mẫu xuống (Không bắt buộc)
Trong các bước sau, chúng ta sẽ sử dụng Firebase Analytics để ghi lại các sự kiện phân tích nhằm sử dụng trong mô hình của mình. Nếu đã có dữ liệu phân tích mà bạn muốn sử dụng, hãy chuyển đến phần "Huấn luyện mô hình tối ưu hoá" của lớp học lập trình này và bạn có thể làm theo dữ liệu mẫu của chúng tôi.
Thu thập dữ liệu bằng Firebase Analytics SDK
Chúng tôi sẽ sử dụng Firebase Analytics để thu thập các sự kiện phân tích này. Firebase Analytics SDK tự động thu thập một số sự kiện và thuộc tính người dùng. Bạn cũng có thể xác định các sự kiện tuỳ chỉnh của riêng mình để đo lường những sự kiện dành riêng cho ứng dụng của bạn.
Cài đặt SDK Phân tích Firebase
Bạn có thể bắt đầu sử dụng Firebase Analytics trong ứng dụng của mình bằng cách làm theo tài liệu Bắt đầu sử dụng Google Analytics. Kho lưu trữ firebase-iap-optimization
được sao chép vào đầu lớp học lập trình này đã bao gồm SDK Phân tích Firebase.
Ghi nhật ký sự kiện tuỳ chỉnh
Sau khi thiết lập Firebase Analytics SDK, chúng ta có thể bắt đầu ghi nhật ký những sự kiện cần thiết để huấn luyện mô hình.
Trước khi làm việc đó, điều quan trọng là bạn phải đặt mã nhận dạng người dùng trong sự kiện phân tích để có thể liên kết dữ liệu phân tích cho người dùng đó với dữ liệu hiện có của họ trong ứng dụng.
MainActivity.kt
firebaseAnalytics.setUserId("player1")
Tiếp theo, chúng ta có thể ghi lại các sự kiện của người chơi. Để tối ưu hoá giao dịch mua trong ứng dụng, chúng ta cần ghi lại từng ưu đãi mua trong ứng dụng được trình bày cho người dùng và liệu người dùng có nhấp vào ưu đãi đó hay không. Nhờ đó, chúng ta sẽ có 2 sự kiện phân tích là offer_iap
và offer_accepted
. Chúng ta cũng sẽ theo dõi một offer_id duy nhất để có thể sử dụng mã này sau này nhằm kết hợp các dữ liệu này để xem một ưu đãi có được chấp nhận hay không.
MainActivity.kt
predictButton?.setOnClickListener {
predictionResult = iapOptimizer.predict()
firebaseAnalytics.logEvent("offer_iap"){
param("offer_type", predictionResult)
param("offer_id", sessionId)
}
}
acceptButton?.setOnClickListener {
firebaseAnalytics.logEvent("offer_accepted") {
param("offer_type", predictionResult)
param("offer_id", sessionId)
}
}
Để biết thêm thông tin về cách ghi nhật ký sự kiện tuỳ chỉnh, hãy xem tài liệu về Sự kiện nhật ký của Firebase Analytics.
6. Xử lý trước dữ liệu trong BigQuery
Ở bước cuối cùng, chúng ta đã thu thập các sự kiện về ưu đãi IAP được trình bày cho người dùng và ưu đãi IAP mà người dùng nhấp vào. Ở bước này, chúng ta sẽ kết hợp dữ liệu sự kiện này với dữ liệu người dùng để mô hình của chúng ta có thể học hỏi từ một bức tranh hoàn chỉnh.
Để làm việc này, chúng ta cần bắt đầu bằng cách xuất các sự kiện phân tích sang BigQuery.
Liên kết dự án Firebase với BigQuery
Cách liên kết dự án Firebase và các ứng dụng của dự án đó với BigQuery:
- Đăng nhập Firebase.
- Nhấp vào biểu tượng
, rồi chọn Cài đặt dự án.
- Trên trang Cài đặt dự án, hãy nhấp vào thẻ Tích hợp.
- Trên thẻ BigQuery, hãy nhấp vào Liên kết.
(Không bắt buộc) Xuất các tập hợp Firestore sang BigQuery
Trong bước này, bạn có thể xuất thêm dữ liệu người dùng từ Firestore sang BigQuery để dùng cho việc huấn luyện mô hình. Nếu muốn bỏ qua bước này, hãy chuyển đến phần "Chuẩn bị dữ liệu trong BigQuery" của lớp học lập trình này. Bạn có thể làm theo các sự kiện Firebase Analytics được ghi lại ở bước cuối cùng.
Firestore có thể là nơi bạn lưu trữ ngày đăng ký của người dùng, giao dịch mua hàng trong ứng dụng, cấp độ trong trò chơi, số xu trong tài khoản hoặc bất kỳ thuộc tính nào khác có thể hữu ích trong việc huấn luyện mô hình.
Để xuất các tập hợp Firestore sang BigQuery, bạn có thể cài đặt Tiện ích xuất dữ liệu Firestore sang BigQuery. Sau đó, hãy kết hợp các bảng trong BigQuery để kết hợp dữ liệu này với dữ liệu từ Google Analytics để sử dụng trong mô hình cá nhân hoá và trong phần còn lại của lớp học lập trình này.
Chuẩn bị dữ liệu trong BigQuery
Trong vài bước tiếp theo, chúng ta sẽ sử dụng BigQuery để chuyển đổi dữ liệu thô trong Analytics thành dữ liệu có thể dùng để huấn luyện mô hình.
Để mô hình của chúng tôi tìm hiểu xem nên giới thiệu ưu đãi nào trong ứng dụng dựa trên người dùng và trạng thái trò chơi, chúng ta cần sắp xếp dữ liệu về những nội dung sau:
- người dùng
- trạng thái trò chơi
- ưu đãi được trình bày
- người dùng có nhấp vào mặt hàng được giới thiệu hay không
Tất cả dữ liệu này sẽ cần được sắp xếp thành một hàng duy nhất trong bảng để mô hình của chúng tôi xử lý. May mắn thay, BigQuery được thiết lập để giúp chúng ta thực hiện chính xác điều đó.
BigQuery cho phép tạo "chế độ xem" để sắp xếp truy vấn của bạn. Khung hiển thị là một bảng ảo được xác định bằng một truy vấn SQL. Khi tạo một khung hiển thị, bạn sẽ truy vấn khung hiển thị đó theo cách tương tự như cách bạn truy vấn một bảng. Bằng cách sử dụng dữ liệu này, trước tiên, chúng ta có thể dọn dẹp dữ liệu phân tích.
Để biết mỗi ưu đãi mua hàng trong ứng dụng có được nhấp vào hay không, chúng ta sẽ cần kết hợp các sự kiện offer_iap
và offer_accepted
mà chúng ta đã ghi lại ở bước trước.
all_offers_joined – Khung hiển thị BigQuery
SELECT
iap_offers.*,
CASE
WHEN accepted_offers.accepted IS NULL THEN FALSE ELSE TRUE
END
is_clicked,
FROM
`iap-optimization.ml_sample.accepted_offers` AS accepted_offers
RIGHT JOIN
`iap-optimization.ml_sample.iap_offers` AS iap_offers
ON
accepted_offers.offer_id =iap_offers.offer_id;
all_offers_with_user_data – Khung hiển thị BigQuery
SELECT
offers.is_clicked,
offers.presented_powerup,
offers.last_run_end_reason,
offers.event_timestamp,
users.*
FROM
`iap-optimization.ml_sample.all_offers_joined` AS offers
LEFT JOIN
`iap-optimization.ml_sample.all_users` AS users
ON
users.user_id = offers.user_id;
Xuất tập dữ liệu BigQuery sang Google Cloud Storage
Cuối cùng, chúng ta có thể xuất tập dữ liệu BigQuery sang GCS để sử dụng trong quá trình huấn luyện mô hình.
7. Huấn luyện mô hình tối ưu hoá
Dữ liệu mẫu
Sử dụng dữ liệu của bạn từ bước trước ("Xử lý trước dữ liệu trong BigQuery") hoặc dữ liệu mẫu có thể tải xuống được cung cấp tại đây để làm theo phần còn lại của lớp học lập trình này.
Định nghĩa vấn đề
Trước khi bắt đầu huấn luyện mô hình, hãy dành chút thời gian để xác định vấn đề về băng đảng theo bối cảnh.
Giải thích về thuật toán cướp có chọn lọc
Khi bắt đầu mỗi cấp độ trong Flappy Sparky, người dùng sẽ thấy một đề nghị mua hàng trong ứng dụng để nhận được một vật phẩm tăng cường. Mỗi lần, chúng tôi chỉ có thể hiển thị một lựa chọn mua hàng trong ứng dụng và chúng tôi không biết lựa chọn nào sẽ có lượt chuyển đổi cao nhất. Vì mỗi người dùng và mỗi phiên hoạt động đều khác nhau, nên làm cách nào để tìm được ưu đãi mua hàng trong ứng dụng mang lại phần thưởng dự kiến cao nhất?
Trong trường hợp này, hãy đặt phần thưởng là 0 nếu người dùng không chấp nhận ưu đãi mua hàng trong ứng dụng và đặt giá trị của ưu đãi mua hàng trong ứng dụng nếu họ chấp nhận. Để cố gắng tối đa hoá phần thưởng, chúng ta có thể sử dụng dữ liệu trước đây để huấn luyện một mô hình dự đoán phần thưởng dự kiến cho từng hành động của một người dùng và tìm ra hành động có phần thưởng cao nhất.
Sau đây là những gì chúng ta sẽ sử dụng trong quá trình dự đoán:
- Trạng thái: thông tin về người dùng và phiên hiện tại của họ
- Hành động: Các mặt hàng trong ứng dụng mà chúng ta có thể chọn hiển thị
- Phần thưởng: giá trị của ưu đãi mua hàng trong ứng dụng
Khai thác so với khám phá
Đối với tất cả các vấn đề về thuật toán nhiều tay, thuật toán cần cân bằng giữa việc khám phá (thu thập thêm dữ liệu để tìm hiểu hành động nào mang lại kết quả tối ưu) và khai thác (sử dụng kết quả tối ưu để nhận được phần thưởng cao nhất).
Trong phiên bản này, chúng ta sẽ đơn giản hoá vấn đề này bằng cách chỉ định kỳ huấn luyện mô hình trên đám mây và chỉ đưa ra dự đoán khi sử dụng mô hình trên thiết bị của người dùng (thay vì huấn luyện trên thiết bị của người dùng). Để đảm bảo chúng tôi có đủ dữ liệu huấn luyện sau khi sử dụng mô hình, đôi khi chúng tôi sẽ cần cho người dùng ứng dụng thấy kết quả ngẫu nhiên (ví dụ: 30%). Chiến lược cân bằng giữa khám phá và khai thác này được gọi là Epsilon-greedy.
Huấn luyện mô hình
Bạn có thể sử dụng tập lệnh huấn luyện (training.ipynb
) được cung cấp cùng với lớp học lập trình để bắt đầu. Mục tiêu của chúng tôi là huấn luyện một mô hình dự đoán phần thưởng dự kiến cho từng hành động trong một trạng thái nhất định, sau đó chúng tôi tìm ra hành động mang lại phần thưởng dự kiến cao nhất.
Đào tạo tại địa phương
Cách dễ nhất để bắt đầu huấn luyện mô hình của riêng bạn là tạo bản sao của sổ tay trong mẫu mã cho lớp học lập trình này.
Bạn không cần GPU cho lớp học lập trình này, nhưng nếu cần một máy mạnh hơn để khám phá dữ liệu của riêng mình và huấn luyện mô hình của riêng mình, bạn có thể sử dụng một thực thể Notebook của Nền tảng AI để tăng tốc quá trình huấn luyện.
Trong tập lệnh huấn luyện được cung cấp, chúng tôi đã tạo một trình lặp tạo dữ liệu huấn luyện từ các tệp CSV mà chúng tôi đã xuất từ BigQuery. Sau đó, chúng tôi dùng dữ liệu này để bắt đầu huấn luyện mô hình bằng Keras. Bạn có thể xem thông tin chi tiết về cách huấn luyện mô hình trong phần nhận xét của sổ tay Python.
Đo lường hiệu suất của mô hình
Trong quá trình huấn luyện mô hình, chúng tôi sẽ so sánh mô hình này với một tác nhân ngẫu nhiên chọn các ưu đãi trong ứng dụng một cách ngẫu nhiên để xem mô hình của chúng tôi có thực sự học được hay không. Logic này nằm trong ValidationCallback
.
Vào cuối quá trình huấn luyện, chúng ta sẽ dùng dữ liệu trong test.csv
để kiểm thử lại mô hình. Mô hình chưa từng thấy những dữ liệu này trước đây, vì vậy, chúng ta có thể tin tưởng rằng kết quả không phải do quá khớp. Trong trường hợp này, mô hình hoạt động hiệu quả hơn 28% so với tác nhân ngẫu nhiên.
Xuất mô hình TFLite
Giờ đây, chúng ta đã có một mô hình được huấn luyện sẵn sàng sử dụng, ngoại trừ việc mô hình này hiện ở định dạng TensorFlow. Chúng ta cần xuất mô hình ở định dạng TFLite để có thể chạy trên thiết bị di động.
train.ipynb
converter = tflite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with tf.io.gfile.GFile('iap-optimizer.tflite', 'wb') as f:
f.write(tflite_model)
Từ đây, bạn có thể tải mô hình xuống và gói mô hình đó cùng với ứng dụng của mình.
Bạn có thể triển khai mô hình này cho Firebase ML và để Firebase lưu trữ mô hình của bạn (đối với ứng dụng phát hành công khai). Điều này hữu ích vì 2 lý do chính:
- Chúng ta có thể giảm kích thước cài đặt ứng dụng và chỉ tải mô hình xuống nếu cần
- Bạn có thể cập nhật mô hình thường xuyên và có chu kỳ phát hành khác với toàn bộ ứng dụng
Để tìm hiểu cách triển khai mô hình cho Firebase ML, bạn có thể làm theo lớp học lập trình Thêm Firebase vào ứng dụng Android dựa trên TFLite. Bạn có thể chọn triển khai bằng bảng điều khiển của Firebase hoặc API Python.
8. Đưa ra dự đoán trên thiết bị
Bước tiếp theo là đưa ra dự đoán bằng mô hình trên thiết bị. Bạn có thể tìm thấy một ứng dụng mẫu tải mô hình xuống từ Firebase ML trong thư mục app
của mã mẫu mà bạn đã tải xuống và sử dụng ứng dụng đó để thực hiện suy luận với một số dữ liệu phía máy khách.
Vì đã áp dụng một số bước tiền xử lý trong quá trình huấn luyện mô hình, nên chúng ta sẽ cần áp dụng quy trình tiền xử lý tương tự cho dữ liệu đầu vào của mô hình khi chạy trên thiết bị. Một cách đơn giản để thực hiện việc này là sử dụng một định dạng độc lập với nền tảng và ngôn ngữ, chẳng hạn như tệp JSON chứa bản đồ của mọi đối tượng đến siêu dữ liệu về cách thực hiện quy trình tiền xử lý. Bạn có thể tìm thêm thông tin chi tiết về cách thực hiện việc này trong ứng dụng mẫu.
Tiếp theo, chúng ta cung cấp cho mô hình một dữ liệu đầu vào kiểm thử như sau:
IapOptimzer.kt
val testInput = mapOf(
"coins_spent" to 2048f,
"distance_avg" to 1234f,
"device_os" to "ANDROID",
"game_day" to 10f,
"geo_country" to "Canada",
"last_run_end_reason" to "laser"
)
Mô hình đề xuất sparky_armor
là vật phẩm tăng sức mạnh tốt nhất trong giao dịch mua hàng trong ứng dụng cho người dùng cụ thể này.
Đo lường độ chính xác của mô hình
Để đo lường độ chính xác của mô hình, chúng ta chỉ cần theo dõi các ưu đãi IAP mà mô hình dự đoán và liệu người dùng có nhấp vào các ưu đãi đó hay không bằng cách sử dụng Firebase Analytics. Bạn có thể sử dụng tính năng này cùng với tính năng thử nghiệm A/B trong Firebase để đo lường hiệu suất thực tế của mô hình. Thêm một bước nữa, bạn cũng có thể thực hiện thử nghiệm A/B trên các lần lặp lại khác nhau của mô hình. Bạn có thể tìm hiểu thêm về thử nghiệm A/B bằng Firebase trong tài liệu Tạo thử nghiệm Cấu hình từ xa Firebase thông qua tính năng Thử nghiệm A/B.
9. (Không bắt buộc): Thường xuyên cập nhật mô hình bằng dữ liệu mới
Nếu cần cập nhật mô hình khi có dữ liệu mới, bạn có thể thiết lập một quy trình để huấn luyện lại mô hình theo định kỳ. Để làm việc này, trước tiên, bạn cần đảm bảo rằng bạn có dữ liệu mới để sử dụng cho việc huấn luyện bằng cách sử dụng chiến lược tham lam epsilon mà chúng tôi đã đề cập ở trên. (ví dụ: Sử dụng kết quả dự đoán của mô hình 70% thời gian và sử dụng kết quả ngẫu nhiên 30% thời gian).
Việc định cấu hình một quy trình để huấn luyện và triển khai bằng dữ liệu mới nằm ngoài phạm vi của lớp học lập trình này. Bạn có thể xem Google Cloud AI Platform và TFX để bắt đầu.
10. Xin chúc mừng!
Trong lớp học lập trình này, bạn đã tìm hiểu cách huấn luyện và triển khai một mô hình TFLite trên thiết bị để tối ưu hoá giao dịch mua hàng trong ứng dụng bằng Firebase. Để tìm hiểu thêm về TFLite và Firebase, hãy xem các mẫu TFLite khác và hướng dẫn bắt đầu sử dụng Firebase.
Nếu có thắc mắc, bạn có thể đặt câu hỏi tại Stack Overflow #firebase-machine-learning.
Nội dung đã đề cập
- TensorFlow Lite
- Firebase ML
- Firebase Analytics
- BigQuery
Các bước tiếp theo
- Huấn luyện và triển khai một mô hình tối ưu hoá cho ứng dụng của bạn.