1. Tổng quan
Chào mừng bạn đến với lớp học lập trình về tính năng 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ô hình cá nhân hoá tuỳ chỉnh cho ứng dụng của mình.
Hướng dẫn này cho biết cách tạo mô hình học máy để cá nhân hoá, cụ thể là mô hình dự đoán mặt hàng mua hàng trong ứng dụng (IAP) tối ưu dựa trên trạng thái của người dùng hiện tại. Đây là ví dụ về một vấn đề về kẻ cướp theo bối cảnh, một loại vấn đề quan trọng và có thể á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 học máy đơ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 mô hình TFLite cho Firebase ML và truy cập vào các mô hình đó từ ứng dụng
- Đo lường và thử nghiệm với 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 tần suất định kỳ
Bạn cần có
- Android Studio phiên bản 3.4 trở lên
- 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 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, 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 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 giao dịch mua hàng trong ứng dụng có hạn và bạn không biết lựa chọn nào sẽ có tỷ lệ chuyển đổi tốt 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 để chúng ta tìm được mặt hàng trong ứng dụng có thể mang lại phần thưởng dự kiến cao nhất?
3. Tải 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:
- Sổ tay Jupyter (.ipynb) huấn luyện mô hình cá nhân hoá và đóng gói mô hình đó vào mô hình TFLite
- Ứ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ìm cách tối ưu hoá các giao dịch mua hàng trong ứng dụng trò chơi hư cấu – Flappy Sparky. Trò chơi này là một trò chơi cuộn bên, trong đó người chơi điều khiển Sparky, cố gắng bay giữa các cột tường mà không va vào chúng. Ở đầu cấp, người dùng sẽ thấy một ưu đãi mua hàng trong ứng dụng để tăng sức mạnh. Chúng ta sẽ chỉ triển khai phần tối ưu hoá giao dịch mua hàng trong ứng dụng trong lớp học lập trình này.
Bạn có thể áp dụng những gì học được tại đây cho ứng dụng của riêng mình được kết nối với một dự án Firebase. Ngoài ra, 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 các hướng dẫn của chúng tôi về chủ đề này ( Android và iOS).
5. Thu thập sự kiện phân tích trong ứng dụng
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ẽ thực hiện giao dịch mua hàng trong ứng dụng để nhận thêm mạng. Mô hình học máy cần 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 lại bao gồm:
- Thời lượng 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 để 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 với dữ liệu mẫu của chúng tôi.
Thu thập dữ liệu bằng SDK Firebase Analytics
Chúng ta sẽ sử dụng Firebase Analytics để thu thập những sự kiện phân tích này. SDK Firebase Analytics tự động thu thập một số sự kiện và thuộc tính người dùng. API này cũng cho phép bạn xác định các sự kiện tuỳ chỉnh của riêng mình để đo lường các sự kiện dành riêng cho ứng dụng của bạn.
Cài đặt SDK Firebase Analytics
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 nhân bản ở đầu lớp học lập trình này đã bao gồm SDK Firebase Analytics.
Ghi nhật ký sự kiện tuỳ chỉnh
Sau khi thiết lập SDK Firebase Analytics, chúng ta có thể bắt đầu ghi lại các sự kiện cần thiết để huấn luyện mô hình.
Trước khi thực hiện 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 của 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 hàng trong ứng dụng, chúng ta muốn ghi lại từng mặt hàng trong giao dịch mua hàng trong ứng dụng được hiển thị cho người dùng và liệu người dùng có nhấp vào mặt hàng đó hay không. Thao tác này sẽ tạo ra hai 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 liệu 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 ghi nhật ký trong 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 nào được hiển thị cho người dùng và ưu đãi IAP nào được 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 từ một bức tranh hoàn chỉnh.
Để làm việc này, trước tiên, chúng ta cần 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
, rồi chọn Project Settings (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 bộ sưu tập Firestore sang BigQuery
Ở bước này, bạn có thể xuất thêm dữ liệu người dùng từ Firestore sang BigQuery để sử dụng nhằm giúp 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 bộ sưu tập Firestore sang BigQuery, bạn có thể cài đặt Tiện ích xuất BigQuery của Firestore. 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 nhằm sử dụng trong mô hình cá nhân hoá và trong suốt 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 phân tích thô thành dữ liệu có thể dùng để huấn luyện mô hình.
Để mô hình của chúng ta tìm hiểu xem nên hiển thị mặt hàng IAP nào 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 thông tin sau:
- người dùng
- trạng thái trò chơi
- ưu đãi được trình bày
- liệu người dùng có nhấp vào ưu đãi được trình bày hay không
Tất cả dữ liệu này cần được sắp xếp thành một hàng trong bảng để mô hình của chúng ta có thể xử lý. May mắn thay, BigQuery được thiết lập để giúp chúng ta làm điều đó.
BigQuery cho phép tạo "chế độ xem" để sắp xếp truy vấn của bạn. Chế độ xem là một bảng ảo do truy vấn SQL xác định. Khi tạo một thành phần hiển thị, bạn truy vấn thành phần đó giống như cách bạn truy vấn một bảng. Trước tiên, chúng ta có thể sử dụng tính năng này để dọn dẹp dữ liệu phân tích.
Để xem liệu người dùng có nhấp vào từng mặt hàng mua hàng trong ứng dụng hay không, chúng ta cần tham gia các sự kiện offer_iap
và offer_accepted
mà chúng ta đã ghi lại ở bước trước.
all_offers_joined – Chế độ xem 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 – Chế độ xem 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ề kẻ cướp theo bối cảnh.
Giải thích về thuật toán cướp bóc theo bối cảnh
Ở đầu mỗi cấp trong Flappy Sparky, người dùng sẽ thấy một ưu đãi IAP giúp họ tăng cường sức mạnh. Mỗi lần, chúng ta chỉ có thể hiển thị một lựa chọn giao dịch mua hàng trong ứng dụng và chúng ta không biết lựa chọn nào sẽ mang lại lượt chuyển đổi tốt 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 để chúng ta tìm được mặt hàng trong ứng dụng có thể 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 giao dịch mua hàng trong ứng dụng và đặt giá trị giao dịch 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 trong quá khứ để huấn luyện một mô hình dự đoán phần thưởng dự kiến cho mỗi hành động của người dùng và tìm 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 hoạt động hiện tại của họ
- Hành động: Ưu đãi trong ứng dụng mà chúng tôi có thể chọn hiển thị
- Phần thưởng: giá trị của mặt hàng IAP
Lợi dụng so với Khám phá
Đối với tất cả các vấn đề về kẻ cướp 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 của vấn đề này, chúng ta sẽ đơn giản hoá vấn đề này để chỉ huấn luyện mô hình định kỳ trên đám mây và chỉ 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 có đủ dữ liệu huấn luyện sau khi sử dụng mô hình, đôi khi chúng ta cần hiển thị kết quả ngẫu nhiên cho người dùng ứng dụng (ví dụ: 30%). Chiến lược cân bằng hoạt động 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 đào tạo (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 ta là huấn luyện một mô hình dự đoán phần thưởng dự kiến cho mỗi hành động trong một trạng thái, sau đó tìm hành động mang lại phần thưởng dự kiến cao nhất.
Đào tạo cục bộ
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ã mẫu 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ể Máy tính xách tay trên 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 đã sử 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 khi huấn luyện mô hình, chúng ta sẽ so sánh mô hình đó với một tác nhân ngẫu nhiên chọn các mặt hàng IAP một cách ngẫu nhiên để xem liệu mô hình của chúng ta có thực sự học được hay không. Logic này nằm trong ValidationCallback
.
Khi kết thúc 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 này chưa từng thấy những dữ liệu này trước đây, vì vậy, chúng ta có thể tự tin rằng kết quả không phải do quá thích ứng. 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
Bây giờ, 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 đang ở định dạng TensorFlow. Chúng ta cần xuất mô hình dưới đị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ại đây, bạn có thể tải mô hình xuống và gói mô hình đó với ứng dụng của mình.
Đối với ứng dụng chính thức, bạn nên triển khai mô hình này cho Firebase ML và yêu cầu Firebase lưu trữ mô hình của bạn. Việc này rất hữu ích vì hai lý do chính:
- Chúng ta có thể giữ cho kích thước cài đặt ứng dụng nhỏ và chỉ tải mô hình xuống nếu cần
- Mô hình có thể được cập nhật thường xuyên và theo 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ể tham gia lớp học lập trình Thêm Firebase vào ứng dụng Android chạy TFLite. Bạn có thể triển khai bằng bảng điều khiển Firebase hoặc API Python.
8. Dự đoán trên thiết bị
Bước tiếp theo là đưa ra dự đoán bằng cách sử dụ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 xử lý trước trong quá trình huấn luyện mô hình, nên chúng ta cần áp dụng cùng một bước xử lý trước 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 đị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 tính năng đến siêu dữ liệu về cách thực hiện quá trình xử lý trước. Bạn có thể tìm hiểu thêm 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 này cho thấy sparky_armor
là tính năng bổ sung IAP tốt nhất 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 mặt hàng trong ứng dụng mà mô hình dự đoán và liệu người dùng có nhấp vào các mặt hàng đó hay không bằ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. Ngoài ra, bạn cũng có thể thực hiện thử nghiệm A/B trên nhiều lần lặp lại của mô hình. Bạn có thể tìm hiểu thêm về tính năng 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 quy trình để huấn luyện lại mô hình một cách đị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 chiến lược epsilon-greedy 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 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ể tham khảo 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ô 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ó câu hỏi, bạn có thể để lại 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ô hình trình tối ưu hoá cho ứng dụng.