Codelab tối ưu hóa mua hàng trong ứng dụng trên thiết bị theo thời gian thực

1. Khái quát chung

1cbf855eda62c306.png

Chào mừng bạn đến với lớp học lập trình tối ưu hóa hoạt động mua hàng trong ứng dụng trên thiết bị 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 để đào tạo và triển khai mô hình cá nhân hóa tùy 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ô hình máy học để cá nhân hóa, đặc biệt 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 của người dùng hiện tại. Đây là một ví dụ về vấn đề kẻ cướp theo ngữ cảnh, một vấn đề quan trọng và loại vấn đề máy học 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

Bạn sẽ học được gì

  • Thu thập dữ liệu phân tích thông qua phân tích Firebase
  • Xử lý trước dữ liệu phân tích bằng BigQuery
  • Đào tạo mô hình ML đơn giản để tối ưu hóa hoạt động 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 chúng từ ứng dụng của bạn
  • Đo lường và thử nghiệm các mô hình khác nhau thông qua Thử nghiệm A/B của Firebase
  • Đào tạo và triển khai các mô hình mới bằng cách sử dụng dữ liệu mới nhất theo nhịp độ định kỳ

Những gì bạn cần

  • Phiên bản Android Studio 3.4+
  • Thiết bị thử nghiệm vật lý có Android 2.3+ 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 sử dụng thiết bị kiểm tra vật lý, cáp kết nối
  • Kiến thức ML mới làm quen

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

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

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

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

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

Giả sử bạn là 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 hóa ở cuối mỗi cấp độ. Bạn chỉ có thể hiển thị một số tùy chọn IAP giới hạn mỗi lần và bạn không biết tùy chọn nào sẽ có chuyển đổi tốt nhất. Với mỗi người dùng và mỗi phiên là khác nhau, làm cách nào để chúng tôi tìm được ưu đãi IAP mang lại phần thưởng được mong đợi cao nhất?

3. Lấy 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ổ ghi chép Jupyter (.ipynb) huấn luyện mô hình cá nhân hóa và đóng gói nó thành 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 với Firebase

Trong lớp học lập trình này, chúng tôi sẽ nỗ lực tối ưu hóa IAP của ứng dụng trò chơi hư cấu - Flappy Sparky . Trò chơi là 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. Khi bắt đầu cấp độ, người dùng sẽ nhận được ưu đãi IAP sẽ tăng sức mạnh cho họ. Chúng tôi sẽ chỉ triển khai phần tối ưu hóa 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 vào ứng dụng của riêng bạn được kết nối với dự án Firebase. Ngoài ra, bạn có thể tạo 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 với Firebase, vui lòng xem 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

Các sự kiện phân tích cung cấp thông tin chi tiết về hành vi của người dùng và được dùng để đào tạo mô hình ML. Ví dụ: mô hình có thể biết rằng những người dùng chơi lâu hơn có nhiều khả năng tạo IAP hơn để nhận thêm mạng. Mô hình ML cần các sự kiện phân tích làm đầ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 tôi có thể muốn ghi lại bao gồm:

  • Người dùng chơi trò chơi trong bao lâu
  • Người dùng đạt đến cấp độ nào
  • Người dùng chi bao nhiêu xu
  • Những mặt hàng người dùng mua

Tải xuống dữ liệu mẫu (Tùy chọn)

Trong các bước sau, chúng tôi 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 bạn đã có dữ liệu phân tích muốn sử dụng, hãy chuyển đến phần "Đào tạo mô hình tối ưu hóa" 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 SDK phân tích Firebase

Chúng tôi sẽ sử dụng Firebase Analytics để giúp thu thập các sự kiện phân tích này. SDK Firebase Analytics tự động ghi lại một số sự kiện và thuộc tính người dùng. Nó cũng cho phép bạn xác định các sự kiện tùy 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 phân tích Firebase

Bạn có thể bắt đầu với 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 tùy chỉnh

Sau khi thiết lập SDK Firebase Analytics, chúng tôi có thể bắt đầu ghi nhật ký các sự kiện cần thiết để đào tạo mô hình của mình.

Trước khi thực hiện điều đó, điều quan trọng là phải đặt ID người dùng trong sự kiện phân tích để chúng tôi 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 hóa IAP, chúng tôi muốn ghi lại từng ưu đãi IAP được hiển thị cho người dùng và liệu ưu đãi đó có được người dùng nhấp vào hay không. Điều này sẽ cung cấp cho chúng tôi hai sự kiện phân tích - offer_iapoffer_accepted . Chúng tôi cũng sẽ theo dõi một Offer_id duy nhất để sau này có thể sử dụng nó nhằm kết hợp những dữ liệu này nhằm xem liệu một đề nghị 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 tùy chỉnh, hãy truy cập tài liệu 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 tôi đã 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. Trong bước này, chúng tôi 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 tôi 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.

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

  1. Đăng nhập vào Firebase.
  2. Nhấp chuột the Settings icon , sau đó chọn Cài đặt dự án.
  3. Trên trang Cài đặt dự án, nhấp vào tab Tích hợp.
  4. Trên thẻ BigQuery, hãy nhấp vào Liên kết.

(Tùy chọn) Xuất bộ sưu tập Firestore của bạn sang BigQuery

Ở bước này, bạn có tùy chọn xuất dữ liệu người dùng bổ sung từ Firestore sang BigQuery để sử dụng nhằm giúp đào tạo mô hình. Nếu bây giờ bạn muốn bỏ qua bước này, hãy chuyển sang 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ể làm theo các sự kiện Firebase Analytics đã ghi ở 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, các giao dịch mua hàng trong ứng dụng được thực hiện, cấp độ trong trò chơi, số dư tiền xu hoặc bất kỳ thuộc tính nào khác có thể hữu ích trong việc đào tạo mô hình.

Để xuất bộ sưu tập Firestore của bạn sang BigQuery, bạn có thể cài đặt Tiện ích mở rộng xuất khẩu 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 để sử dụng trong mô hình cá nhân hóa của bạn 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 một số bước tiếp theo, chúng tôi sẽ sử dụng BigQuery để chuyển đổi dữ liệu phân tích thô thành dữ liệu có thể sử dụng để đào tạo mô hình của chúng tôi.

Để mô hình của chúng tôi 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 tôi 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
  • lời đề nghị được đưa ra
  • liệu ưu đãi được trình bày có được nhấp vào 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 trong bảng để mô hình của chúng tôi xử lý nó. May mắn thay, BigQuery được thiết lập để giúp chúng tôi 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 được xác định bởi truy vấn SQL. Khi tạo một dạng xem, bạn truy vấn nó giống như cách bạn truy vấn một bảng. Bằng cách sử dụng điều 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 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 tham gia các sự kiện offer_iapoffer_accepted mà chúng ta đã đăng nhập ở 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 để có thể sử dụng nó trong quá trình đào tạo mô hình của mình.

888daa7ba4db8e44.png

14d22bf474fae455.png

7. Huấn luyện mô hình tối ưu hóa

Dữ liệu mẫu

Sử dụng dữ liệu của bạn từ bước trước, "Tiền xử lý dữ liệu 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 đào tạo mô hình, chúng ta hãy dành chút thời gian để xác định vấn đề kẻ cướp theo ngữ cảnh.

Kẻ cướp theo ngữ cảnh được giải thích

Khi bắt đầu mỗi cấp độ trong Flappy Sparky, người dùng sẽ nhận được một ưu đãi IAP giúp tăng sức mạnh cho họ. Chúng tôi chỉ có thể hiển thị một tùy chọn IAP mỗi lần và chúng tôi không biết tùy chọn nào sẽ có chuyển đổi tốt nhất. Với mỗi người dùng và mỗi phiên là khác nhau, làm cách nào để chúng tôi tìm được ưu đãi IAP mang lại phần thưởng được mong đợi 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 IAP và giá trị IAP nếu họ chấp nhận. Để cố gắng tối đa hóa phần thưởng của bạn, chúng tôi có thể sử dụng dữ liệu lịch sử của mình để 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 đưa ra và 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 chúng tôi có thể chọn hiển thị
  • Phần thưởng: giá trị của ưu đãi IAP

Khai thác vs thăm dò

Đối với tất cả các bài toán kẻ cướp đa nhánh, thuật toán cần cân bằng giữa việc thăm dò (lấy 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 giải quyết vấn đề của chúng tôi, chúng tôi sẽ đơn giản hóa điều này để chỉ đào tạo mô hình định kỳ 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 (trái ngược với việc đào tạo trên thiết bị của người dùng). Để đảm bảo chúng tôi có đủ dữ liệu đào tạo 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 của mình (ví dụ: 30%). Chiến lược cân bằng giữa thăm dò và khai thác này được gọi là tham lam Epsilon .

Đào tạo người mẫu

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 tôi là đào tạo một mô hình dự đoán phần thưởng mong đợi cho mỗi 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 cho chúng tôi phần thưởng mong đợi cao nhất.

Đào tạo tại địa phương

Cách dễ nhất để bắt đầu đào tạo mô hình của riêng bạn là tạo một bản sao của sổ ghi chép 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 cỗ máy mạnh hơn để khám phá dữ liệu và huấn luyện mô hình của riêng mình, bạn có thể tải phiên bản AI Platform Notebook để tăng tốc độ đào tạo.

Trong tập lệnh đào tạo được cung cấp, chúng tôi đã tạo một trình vòng lặp tạo dữ liệu đào tạo 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 để bắt đầu đào tạo mô hình của mình bằng Keras. Chi tiết về cách huấn luyện mô hình có thể được tìm thấy trong phần bình luận của sổ ghi chép Python.

Đo lường hiệu suất mô hình

Trong khi đào tạo mô hình, chúng tôi sẽ so sánh nó với một tác nhân ngẫu nhiên chọn ngẫu nhiên các ưu đãi IAP để xem liệu mô hình của chúng tôi có thực sự đang học hay không. Logic này tồn tại dưới ValidationCallback .

Khi kết thúc khóa đào tạo, chúng tôi sử dụng dữ liệu trong test.csv để kiểm tra lại mô hình của mình. Mô hình chưa bao giờ nhìn 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 được đào tạo sẵn sàng để sử dụng, ngoại trừ mô hình hiện ở định dạng TensorFlow. Chúng tôi sẽ cần xuất mô hình ở định dạng TFLite để có thể chạy trên thiết bị di động.

tàu.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 xuống mô hình và gói mô hình đó với ứng dụng của mình.

Theo tùy chọn, đối với ứng dụng sản xuất, chúng tôi khuyên bạn nên triển khai mô hình lên 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 tôi có thể giữ kích thước cài đặt ứng dụng ở mức nhỏ và chỉ tải xuống mô hình nếu cần
  2. Mô hình có thể được cập nhật 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 lên Firebase ML, bạn có thể làm theo phần Thêm Firebase vào lớp học lập trình Ứng dụng Android được hỗ trợ bởi TFLite . Bạn có tùy chọn triển khai bằng bảng điều khiển 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 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 xuống mô hình từ Firebase ML trong thư mục app của mã mẫu mà bạn đã tải xuống và sử dụng nó để thực hiện suy luận với một số dữ liệu phía máy khách.

Vì chúng tôi đã áp dụng một số quy trình xử lý trước trong quá trình đào tạo mô hình nên chúng tôi sẽ cần áp dụng quy trình xử lý trước tương tự cho đầu vào 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 tới siêu dữ liệu về cách thực hiện quá trình tiền 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 ví dụ.

Tiếp theo, chúng tôi cung cấp cho mô hình một đầu vào thử nghiệm 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 gợi ý sparky_armor là công cụ tăng sức mạnh IAP tốt nhất cho người dùng cụ thể này.

a3381dbcdbdf811e.png

Đo độ 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 mà mô hình của chúng tôi dự đoán và liệu chúng có được nhấp vào bằng cách sử dụng Firebase Analytics hay không. Bạn có thể sử dụng điều này cùng với thử nghiệm A/B 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 các lần lặp khác nhau của mô hình. Bạn có thể tìm hiểu thêm về thử nghiệm A/B với Firebase trong tài liệu Tạo thử nghiệm cấu hình từ xa Firebase bằng thử nghiệm A/B .

9. (Tùy chọn): Cập nhật mô hình thường xuyên với 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 để đào tạo lại mô hình của mình theo định kỳ. Để làm điều 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 đào tạo bằ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 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 đào tạo 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 đào tạo và triển khai mô hình TFLite trên thiết bị để tối ưu hóa các 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 Firebase.

Nếu có bất kỳ câu hỏi nào, bạn có thể để lại tại Stack Overflow #firebase-machine-learning .

Những gì chúng tôi đã đề cập

  • TensorFlow Lite
  • Firebase ML
  • Phân tích căn cứ hỏa lực
  • BigQuery

Bước tiếp theo

  • Đào tạo và triển khai mô hình tối ưu hóa cho ứng dụng của bạn.

Tìm hiểu thêm