Lớp học lập trình về 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ị

1. Tổng quan

1cbf855eda62c306.pngs

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. 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 trình bày cách xây dựng một mô hình học máy cho hoạt động cá nhân hoá, cụ thể là mô hình dự đoán hoạt độ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ề vấn đề máy chia theo bối cảnh, một loại vấn đề học máy quan trọng và có thể áp dụng rộng rãi 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
  • Dữ liệu phân tích tiền xử lý bằng BigQuery
  • Huấn luyện một mô hình học máy đơn giản để tối ưu hoá hoạt động mua hàng trong ứng dụng trên thiết bị
  • Triển khai các mô hình TFLite cho công nghệ học máy của Firebase và truy cập vào các mô hình đó trong ứng dụng của bạn
  • Đ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
  • Đào tạo 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ị thử nghiệm thực tế chạy Android 2.3 trở lên và Dịch vụ Google Play 9.8 trở lên hoặc Trình mô phỏng có Dịch vụ Google Play 9.8 trở lên
  • Nếu bạn sử dụng thiết bị thử nghiệm thực tế, cáp kết nối
  • Kiến thức mới về công nghệ học máy

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ có thể đọc Đọc và hoàn thành bài tập

Bạn đánh giá trải nghiệm xây dựng ứng dụng Android của mình như thế nào?

Người mới tập Trung cấp Thành thạo

2. Tuyên bố vấn đề

Giả sử bạn là một nhà phát triển trò chơi và muốn đưa ra đề xuất về giao dịch mua hàng trong ứng dụng (IAP) được cá nhân hoá ở cuối mỗi cấp độ. Bạn chỉ có thể hiển thị một số ít lựa chọn IAP mỗi lần và bạn không biết lựa chọn nào mang lại lượt chuyển đổi cao nhất. Vì mỗi người dùng và mỗi phiên hoạt động lại khác nhau, làm cách nào để tìm ưu đãi IAP 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:

  1. 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
  2. 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ìm cách tối ưu hoá IAP của ứng dụng trò chơi hư cấu – Flappy Sparky. Trò chơi này là một trò chơi cuộn cảnh, trong đó người chơi điều khiển một chiếc Sparky, cố gắng di chuyển giữa các cột tường mà không va phải chúng. Khi bắt đầu cấp độ, người dùng sẽ thấy một lời đề nghị mua hàng trong ứng dụng nhằm tăng sức mạnh cho họ. Chúng ta sẽ chỉ triển khai phần tối ưu hoá IAP của ứng dụng trong lớp học lập trình này.

Bạn sẽ 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 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 ( AndroidiOS).

5. Thu thập các sự kiện phân tích trong ứng dụng của bạn

Sự kiện trong 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 ML. Ví dụ: mô hình có thể biết được rằng những người dùng chơi lâu hơn có nhiều khả năng tạo giao dịch mua hàng trong ứng dụng để có thêm mạng. Mô hình ML cần dữ liệu đầu vào là các sự kiện phân tích để tìm hiểu thông tin này.

Một số sự kiện phân tích mà chúng tôi 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 đến
  • Người dùng chi tiêu bao nhiêu xu
  • Những mặt hàng 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 sự kiện Analytics nhằm sử dụng trong mô hình của mình. Nếu bạn đã có dữ liệu phân tích mà bạn muốn sử dụng, hãy chuyển sang phần "Đào tạo mô hình tối ưu hoá" của lớp học lập trình này, bạn có thể theo dõi 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 để giúp thu thập các sự kiện này trong Analytics. Firebase Analytics SDK tự động ghi lại một số sự kiện và thuộc tính người dùng. Bảng 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 những sự kiện dành riêng cho ứng dụng của bạn.

Cài đặt Firebase Analytics SDK

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 với Google Analytics. Kho lưu trữ firebase-iap-optimization được sao chép ở đầu lớp học lập trình này đã bao gồm SDK Firebase Analytics.

Ghi lại 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ý các sự kiện cần để huấn luyện mô hình.

Trước khi làm việc đó, 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 về 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 nhật ký sự kiện của người chơi. Để tối ưu hoá IAP, chúng ta cần ghi lại từng ưu đãi IAP mà người dùng nhìn thấy, cũng như liệu người dùng có nhấp vào ưu đãi đó hay không. Thao tác này sẽ cung cấp cho chúng ta hai sự kiện Analytics - offer_iapoffer_accepted. Chúng tôi cũng sẽ theo dõi một offer_id duy nhất để có thể sử dụng kết hợp những dữ liệu này sau 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 truy cập vào tài liệu về Sự kiện trong nhật ký Firebase Analytics.

6. Dữ liệu tiền xử lý trong BigQuery

Ở bước cuối cùng, chúng ta đã thu thập các sự kiện về việc người dùng nhìn thấy ưu đãi IAP nào và người dùng nhấp vào ưu đãi IAP nà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 điều 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.

Cách liên kết dự án Firebase và các ứng dụng của dự án đó với BigQuery:

  1. Đăng nhập Firebase.
  2. Nhấp vào biểu tượng Cài đặt, rồi chọn Cài đặt dự án.
  3. Trên trang Cài đặt dự án, hãy nhấp vào tab Tích hợp.
  4. 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 trên 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 để dùng cho việc huấn luyện mô hình. Nếu bạn muốn bỏ qua bước này ngay bây giờ, 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 và bạn có thể thực hiện 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ữ thông tin của người dùng ngày đăng ký, số lượt mua hàng trong ứng dụng, cấp độ trong trò chơi, số tiền xu trong số dư hoặc bất kỳ thuộc tính nào khác có thể hữu ích cho việc huấn luyện mô hình.

Để xuất các bộ sưu tập trên Firestore sang BigQuery, bạn có thể cài đặt Tiện ích Firestore BigQuery Export. Sau đó, hãy tham gia 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á của bạn 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 các bước tiếp theo, chúng ta sẽ sử dụng BigQuery để biến dữ liệu phân tích thô thành dữ liệu có thể sử dụng để huấn luyện mô hình của mình.

Để mô hình của chúng ta tìm hiểu ưu đãi IAP nào sẽ hiển thị 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 điều 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 giới thiệu hay không

Tất cả dữ liệu này 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 có thể xử lý. Thật may là BigQuery được thiết lập để giúp chúng tôi làm được điều đó.

BigQuery cho phép tạo "chế độ xem" để sắp xếp cụm từ tìm kiếm có tổ chức. 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ư truy vấn một bảng. Bằng cách này, trước tiên, chúng ta có thể làm sạch dữ liệu phân tích của mình.

Để xem liệu người dùng có nhấp vào từng ưu đãi mua hàng trong ứng dụng hay không, chúng ta cần tham gia các sự kiện offer_iapoffer_accepted mà chúng ta đã đăng nhập ở bước trước.

all_offers_join – 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 tôi có thể xuất tập dữ liệu BigQuery sang GCS để có thể sử dụng tập dữ liệu đó trong quá trình huấn luyện mô hình của mình.

888daa7ba4db8e44.pngS

14d22bf474fae455.pngS

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 đó, "Dữ liệu tiền xử lý trong BigQuery" hoặc dữ liệu mẫu có thể tải xuống được cung cấp ở đâ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 thời gian xác định vấn đề máy chia theo ngữ cảnh của chúng tôi.

Giải thích về băng chia theo ngữ cảnh

Ở đầu mỗi cấp độ trong Flappy Sparky, người dùng sẽ nhận được một lời đề nghị mua hàng trong ứng dụng nhằm tăng sức mạnh cho họ. Chúng tôi chỉ có thể hiển thị một lựa chọn IAP mỗi lần, và chúng tôi không biết lựa chọn nào có tỷ lệ chuyển đổi cao nhất. Vì mỗi người dùng và mỗi phiên hoạt động lại khác nhau, làm cách nào để tìm ưu đãi IAP 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 lời đề nghị mua hàng trong ứng dụng và giá trị IAP nếu họ chấp nhận lời đề nghị đó. Để tìm cách tối đa hoá phần thưởng cho bạn, chúng tôi 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 mà người dùng thực hiện, cũng như tìm ra hành động có phần thưởng cao nhất.

e7d3264141498bff.jpeg

Sau đây là những gì chúng tôi sẽ sử dụng trong 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: Ưu đãi IAP mà chúng tôi có thể chọn để hiển thị
  • Phần thưởng: giá trị của ưu đãi IAP

Bóc lột so với khám phá

Đối với tất cả các bài toán thử nghiệm chia nhiều nhánh, thuật toán cần cân bằng giữa khám phá (thu thập nhiều dữ liệu hơn để 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 để có được phần thưởng cao nhất).

Trong phiên bản của bài toán này, chúng tôi sẽ đơn giản hoá việc này để chỉ huấn luyện mô hình định kỳ trên đám mây và chỉ đưa ra thông tin 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 tôi 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 giữa việc khám phá và khai thác này được gọi là Epsilon-greedy.

Huấn luyện mô hình

Để bắt đầu, bạn có thể dùng tập lệnh huấn luyện (training.ipynb) được cung cấp trong lớp học lập trình này. 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 cho một trạng thái, sau đó chúng ta tìm hành động mang lại cho chúng ta 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 một bản sao của sổ tay đó trong đoạn mã mẫu dành 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, thì bạn có thể tải một phiên bản của Sổ tay nền tảng AI để tăng tốc độ tập luyện.

Trong tập lệnh huấn luyện được cung cấp, chúng tôi đã tạo một biến lặp giúp tạo dữ liệu huấn luyện từ các tệp CSV đã 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 tôi sẽ so sánh mô hình đó với một tác nhân ngẫu nhiên chọn ngẫu nhiên các mặt hàng IAP để xem liệu mô hình đó có thực sự đang họ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ẽ 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 tôi có thể tin tưởng rằng kết quả không phải do trang bị quá mức. Trong trường hợp này, mô hình hoạt động tốt 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 tôi đã có một mô hình đã huấn luyện và sẵn sàng sử dụng, ngoại trừ mô hình đó hiện ở định dạng TensorFlow. Chúng tôi cần xuất mô hình ở định dạng TFLite để có thể chạy mô hình đó 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 đó 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à để Firebase lưu trữ mô hình của bạn. Điều này hữu ích vì hai lý do chính:

  1. Chúng ta có thể duy trì kích thước cài đặt ứng dụng nhỏ và chỉ tải mô hình xuống khi cần
  2. Mô hình có thể được cập nhật thường xuyên và với 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 công nghệ học máy của Firebase, bạn có thể thực hiện theo lớp học lập trình Thêm Firebase vào ứng dụng Android sử dụng TFLite. Bạn có thể 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 giúp tải mô hình xuống từ công nghệ học máy Firebase trong thư mục app của mã mẫu mà bạn đã tải xuống, rồi sử dụng ứng dụng đó để tiến hành suy luận với một số dữ liệu phía máy khách.

Do đã áp dụng một số quy trình xử lý trước trong quá trình huấn luyện mô hình, nên chúng ta sẽ cần áp dụng cùng một quy trình xử lý trước cho dữ liệu đầu vào của mô hình khi chạy trên thiết bị. Cách đơn giản để làm 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 trước quá trình xử lý. Bạn có thể tìm thêm 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 này 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à sức mạnh IAP phù hợp nhất cho người dùng cụ thể này.

a3381dbcdbdf811e.png.

Đ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 tôi chỉ cần theo dõi các ưu đãi IAP do mô hình của chúng tôi dự đoán và liệu những ưu đãi đó có được nhấp vào hay không bằng Firebase Analytics. Bạn có thể sử dụng kết hợp này 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. Tiến 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 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 với Firebase trong tài liệu về Tạo thử nghiệm Cấu hình từ xa Firebase bằng 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 của mì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 định kỳ. Để làm được điều này, trước tiên, bạn cần đảm bảo rằng mình có dữ liệu mới để 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 mô hình trong 70% thời gian và sử dụng kết quả ngẫu nhiên trong 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 PlatformTFX để 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ó thắc mắc, 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 của bạn.

Tìm hiểu thêm