실시간 기기 내 인앱 구매 최적화 Codelab

실시간 기기 내 인앱 구매 최적화 Codelab

이 Codelab 정보

subject최종 업데이트: 10월 31, 2022
account_circle작성자: Google 직원

1. 개요

1cbf855eda62c306.png

실시간 기기 내 인앱 구매 최적화 Codelab에 오신 것을 환영합니다. 이 Codelab에서는 TensorFlow Lite와 Firebase를 사용하여 맞춤 맞춤설정 모델을 학습시키고 앱에 배포하는 방법을 알아봅니다.

이 튜토리얼에서는 맞춤설정을 위한 머신러닝 모델을 빌드하는 방법을 보여줍니다. 특히 현재 사용자의 상태를 고려하여 최적의 인앱 구매 (IAP) 혜택을 예측하는 모델을 빌드하는 방법을 보여줍니다. 이는 널리 적용 가능한 중요한 머신러닝 문제 유형인 문맥 배당 문제의 예시로, 이 Codelab에서 자세히 알아봅니다.

학습할 내용

  • Firebase 애널리틱스를 통한 애널리틱스 데이터 수집
  • BigQuery를 사용하여 분석 데이터 전처리
  • 인앱 구매 (IAP)의 기기 내 최적화를 위한 간단한 ML 모델 학습
  • Firebase ML에 TFLite 모델 배포 및 앱에서 액세스
  • Firebase A/B 테스팅을 통해 다양한 모델 측정 및 실험
  • 반복적인 주기로 최신 데이터를 사용하여 새 모델을 학습하고 배포

필요한 사항

  • Android 스튜디오 버전 3.4 이상
  • Android 2.3 이상 및 Google Play 서비스 9.8 이상을 실행하는 실제 테스트 기기 또는 Google Play 서비스 9.8 이상을 실행하는 에뮬레이터
  • 실제 테스트 기기를 사용하는 경우 연결 케이블
  • 초보 ML 지식

본 튜토리얼을 어떻게 사용하실 계획인가요?

Android 앱 빌드 경험을 평가해 주세요.

2. 문제 서술

각 레벨의 끝에 맞춤설정된 인앱 구매 (IAP) 추천을 표시하려는 게임 개발자라고 가정해 보겠습니다. 매번 제한된 수의 IAP 옵션만 표시할 수 있으며, 어떤 옵션이 가장 높은 전환을 가져올지 알 수 없습니다. 사용자와 세션이 모두 다르므로 예상 보상이 가장 높은 IAP 혜택을 찾으려면 어떻게 해야 하나요?

3. 샘플 코드 가져오기

명령줄에서 GitHub 저장소를 클론합니다.

git clone https://github.com/googlecodelabs/firebase-iap-optimization.git

이 저장소에는 다음이 포함됩니다.

  1. 맞춤설정 모델을 학습시키고 TFLite 모델로 패키징하는 Jupyter 노트북 (.ipynb)
  2. TFLite 모델을 사용하여 기기 내에서 예측하는 샘플 Kotlin 앱

4. Firebase로 앱 실행

이 Codelab에서는 가상의 게임 앱인 Flappy Sparky의 IAP를 최적화합니다. 이 게임은 플레이어가 Sparky를 조종하여 벽 기둥 사이를 부딪히지 않고 날아가는 것을 시도하는 사이드 스크롤러입니다. 레벨이 시작되면 사용자에게 강화 효과를 제공하는 IAP 혜택이 표시됩니다. 이 Codelab에서는 앱의 IAP 최적화 부분만 구현합니다.

여기에서 배운 내용을 Firebase 프로젝트에 연결된 자체 앱에 적용할 수 있습니다. 또는 이 Codelab용 새 Firebase 프로젝트를 만들 수도 있습니다. Firebase를 시작하는 데 도움이 필요한 경우 이 주제에 관한 튜토리얼 ( AndroidiOS)을 참고하세요.

5. 앱에서 애널리틱스 이벤트 수집

분석 이벤트는 사용자 행동에 대한 통계를 제공하며 ML 모델을 학습하는 데 사용됩니다. 예를 들어 모델은 게임을 더 오래 플레이하는 사용자가 추가 생명을 얻기 위해 IAP를 사용할 가능성이 더 높다는 것을 학습할 수 있습니다. ML 모델이 이 정보를 학습하려면 입력으로 애널리틱스 이벤트가 필요합니다.

로깅할 수 있는 일부 애널리틱스 이벤트는 다음과 같습니다.

  • 사용자가 게임을 플레이한 시간
  • 사용자가 도달한 등급
  • 사용자가 지출한 코인 수
  • 사용자가 구매하는 상품

샘플 데이터 다운로드 (선택사항)

다음 단계에서는 Firebase 애널리틱스를 사용하여 모델에 사용할 애널리틱스 이벤트를 로깅합니다. 사용할 애널리틱스 데이터가 이미 있는 경우 이 Codelab의 '최적화 모델 학습' 섹션으로 이동하여 샘플 데이터를 따라 진행할 수 있습니다.

Firebase Analytics SDK로 데이터 수집

Firebase 애널리틱스를 사용하여 이러한 분석 이벤트를 수집합니다. Firebase Analytics SDK는 여러 이벤트와 사용자 속성을 자동으로 캡처합니다. 또한 자체 맞춤 이벤트를 정의하여 앱에 고유한 이벤트를 측정할 수 있습니다.

Firebase Analytics SDK 설치

Google 애널리틱스 시작하기 문서에 따라 앱에서 Firebase 애널리틱스를 시작할 수 있습니다. 이 Codelab의 시작 부분에서 클론한 firebase-iap-optimization 저장소에는 이미 Firebase Analytics SDK가 포함되어 있습니다.

맞춤 이벤트 로깅

Firebase Analytics SDK를 설정한 후에는 모델을 학습하는 데 필요한 이벤트를 로깅할 수 있습니다.

이를 수행하기 전에 해당 사용자의 애널리틱스 데이터를 앱의 기존 데이터와 연결할 수 있도록 애널리틱스 이벤트에서 사용자 ID를 설정해야 합니다.

MainActivity.kt

firebaseAnalytics.setUserId("player1")

이제 플레이어 이벤트를 로깅할 수 있습니다. IAP 최적화를 위해 사용자에게 표시된 각 IAP 혜택과 사용자가 해당 혜택을 클릭했는지 여부를 기록하려고 합니다. 이렇게 하면 offer_iapoffer_accepted라는 두 가지 애널리틱스 이벤트가 생성됩니다. 또한 나중에 이러한 데이터를 결합하여 제품이 수락되었는지 확인하는 데 사용할 수 있도록 고유한 offer_id를 추적합니다.

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)
  }
}

맞춤 이벤트 로깅에 관한 자세한 내용은 Firebase 애널리틱스 이벤트 로그 문서를 참고하세요.

6. BigQuery에서 데이터 전처리

마지막 단계에서 사용자에게 표시되는 IAP 혜택과 사용자가 클릭한 IAP 혜택에 관한 이벤트를 수집했습니다. 이 단계에서는 모델이 전체적인 그림을 바탕으로 학습할 수 있도록 이 이벤트 데이터를 사용자 데이터와 결합합니다.

이를 위해 먼저 분석 이벤트를 BigQuery로 내보내야 합니다.

Firebase 프로젝트 및 앱을 BigQuery에 연결하는 방법은 다음과 같습니다.

  1. Firebase에 로그인합니다.
  2. 설정 아이콘 아이콘을 클릭한 다음 프로젝트 설정을 선택합니다.
  3. 프로젝트 설정 페이지에서 통합 탭을 클릭합니다.
  4. BigQuery 카드에서 연결을 클릭합니다.

(선택사항) Firestore 컬렉션을 BigQuery로 내보내기

이 단계에서는 모델 학습에 사용할 추가 사용자 데이터를 Firestore에서 BigQuery로 내보낼 수 있습니다. 지금은 이 단계를 건너뛰고 이 Codelab의 'BigQuery에서 데이터 준비' 섹션으로 이동하여 마지막 단계에서 로깅된 Firebase Analytics 이벤트를 따라갈 수 있습니다.

Firestore는 사용자의 가입 날짜, 인앱 구매 내역, 게임의 등급, 잔액의 코인 또는 모델 학습에 유용할 수 있는 기타 속성을 저장하는 위치일 수 있습니다.

Firestore 컬렉션을 BigQuery로 내보내려면 Firestore BigQuery Export Extension을 설치하면 됩니다. 그런 다음 BigQuery에서 테이블을 조인하여 이 데이터를 Google 애널리틱스의 데이터와 결합하여 맞춤설정 모델과 이 Codelab의 나머지 부분에서 사용합니다.

BigQuery에서 데이터 준비

다음 몇 단계에서는 BigQuery를 사용하여 원시 분석 데이터를 모델 학습에 사용할 수 있는 데이터로 변환합니다.

모델이 사용자와 게임 상태를 기반으로 표시할 IAP 혜택을 학습하려면 다음에 관한 데이터를 구성해야 합니다.

  • 사용자
  • 게임 상태
  • 제공된 혜택
  • 표시된 제품이 클릭되었는지 여부

모델이 처리할 수 있도록 이 모든 데이터를 테이블의 단일 행으로 구성해야 합니다. 다행히 BigQuery는 이를 지원하도록 설정되어 있습니다.

BigQuery에서는 '뷰'를 만들어 쿼리를 정리할 수 있습니다. 뷰는 SQL 쿼리로 정의하는 가상 테이블입니다. 뷰를 만들 때는 테이블을 쿼리할 때와 같은 방식으로 쿼리합니다. 이를 사용하여 먼저 분석 데이터를 정리할 수 있습니다.

각 인앱 구매 상품이 클릭되는지 확인하려면 이전 단계에서 로깅한 offer_iapoffer_accepted 이벤트를 결합해야 합니다.

all_offers_joined - 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 - 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;

BigQuery 데이터 세트를 Google Cloud Storage로 내보내기

마지막으로 BigQuery 데이터 세트를 GCS로 내보내기하여 모델 학습에 사용할 수 있습니다.

888daa7ba4db8e44.png

14d22bf474fae455.png

7. 최적화 모델 학습

샘플 데이터

이전 단계인 'BigQuery에서 데이터 사전 처리'의 데이터 또는 여기에 제공된 다운로드 가능한 샘플 데이터를 사용하여 이 Codelab의 나머지 부분을 진행합니다.

문제 정의

모델 학습을 시작하기 전에 컨텍스트 기반 배당금 문제에 대해 자세히 알아보겠습니다.

문맥 배당 설명

Flappy Sparky의 각 레벨 시작 시 사용자에게 부스트 기능을 제공하는 IAP 혜택이 표시됩니다. Google에서는 한 번에 하나의 IAP 옵션만 표시할 수 있으며, 어떤 옵션이 가장 높은 전환을 유도할지 알 수 없습니다. 사용자와 세션이 모두 다르므로 예상 보상이 가장 높은 IAP 혜택을 찾으려면 어떻게 해야 하나요?

이 경우 사용자가 IAP 혜택을 수락하지 않으면 보상을 0으로, 수락하면 IAP 값으로 설정합니다. 보상을 극대화하기 위해 이전 데이터를 사용하여 사용자별로 각 액션의 예상 보상을 예측하는 모델을 학습하고 보상이 가장 높은 액션을 찾을 수 있습니다.

e7d3264141498bff.jpeg

예측에 사용할 항목은 다음과 같습니다.

  • 상태: 사용자 및 현재 세션에 관한 정보
  • 작업: 표시할 수 있는 IAP 혜택
  • 리워드: IAP 혜택의 가치

악용과 탐색 비교

모든 다중 무기 도적 문제의 경우 알고리즘은 탐색 (최적의 결과를 제공하는 작업을 학습하기 위해 더 많은 데이터를 가져옴)과 악용 (최적의 결과를 사용하여 가장 높은 보상을 얻음) 간에 균형을 유지해야 합니다.

이 문제의 버전에서는 클라우드에서 주기적으로 모델을 학습하고 사용자의 기기에서 모델을 사용할 때만 예측을 실행하도록 단순화합니다 (사용자의 기기에서도 학습하는 것과 달리). 모델을 사용한 후 충분한 학습 데이터를 확보하기 위해 경우에 따라 앱 사용자에게 무작위로 결과를 표시해야 합니다 (예: 30%). 탐색과 활용의 균형을 맞추는 이 전략을 이프실론-탐욕스러움이라고 합니다.

모델 학습

Codelab과 함께 제공된 학습 스크립트 (training.ipynb)를 사용하여 시작할 수 있습니다. 목표는 상태에 따라 각 작업의 예상 보상을 예측하는 모델을 학습한 후 예상 보상이 가장 높은 작업을 찾는 것입니다.

로컬에서 학습

자체 모델 학습을 시작하는 가장 쉬운 방법은 이 Codelab의 코드 샘플에 있는 노트북의 사본을 만드는 것입니다.

이 Codelab에는 GPU가 필요하지 않지만 자체 데이터를 탐색하고 자체 모델을 학습하는 데 더 강력한 머신이 필요한 경우 AI Platform Notebook 인스턴스를 사용하여 학습 속도를 높일 수 있습니다.

제공된 학습 스크립트에서 BigQuery에서 내보낸 CSV 파일에서 학습 데이터를 생성하는 반복자를 만들었습니다. 그런 다음 이 데이터를 사용하여 Keras로 모델 학습을 시작했습니다. 모델을 학습하는 방법에 관한 자세한 내용은 Python 노트북의 주석을 참고하세요.

모델 성능 측정

모델을 학습하는 동안 IAP 혜택을 무작위로 선택하는 무작위 상담사와 비교하여 모델이 실제로 학습 중인지 확인합니다. 이 로직은 ValidationCallback.에 있습니다.

학습이 끝나면 test.csv의 데이터를 사용하여 모델을 다시 테스트합니다. 모델은 이전에 이러한 데이터를 본 적이 없으므로 결과가 과적합으로 인한 것이 아님을 확신할 수 있습니다. 이 경우 모델의 실적이 무작위 상담사보다 28% 우수합니다.

TFLite 모델 내보내기

이제 학습된 모델을 사용할 준비가 되었습니다. 단, 현재 TensorFlow 형식입니다. 모바일 기기에서 실행할 수 있도록 모델을 TFLite 형식으로 내보내야 합니다.

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)

여기에서 모델을 다운로드하고 앱과 함께 번들로 묶을 수 있습니다.

프로덕션 앱의 경우 원하는 경우 모델을 Firebase ML에 배포하고 Firebase에서 모델을 호스팅하도록 하는 것이 좋습니다. 이는 다음과 같은 두 가지 주요 이유로 유용합니다.

  1. 앱 설치 크기를 작게 유지하고 필요한 경우에만 모델을 다운로드할 수 있습니다.
  2. 모델은 전체 앱과는 다른 출시 주기로 정기적으로 업데이트할 수 있습니다.

Firebase ML에 모델을 배포하는 방법을 알아보려면 TFLite 기반 Android 앱에 Firebase 추가 Codelab을 참고하세요. Firebase Console 또는 Python API를 사용하여 배포할 수 있습니다.

8. 기기 내 예측

다음 단계는 기기 내 모델을 사용하여 예측하는 것입니다. 다운로드한 샘플 코드의 app 폴더에서 Firebase ML에서 모델을 다운로드하는 예시 앱을 찾을 수 있으며, 이 앱을 사용하여 일부 클라이언트 측 데이터로 추론을 실행할 수 있습니다.

모델 학습 중에 일부 사전 처리를 적용했으므로 기기 내에서 실행할 때 모델 입력에 동일한 사전 처리를 적용해야 합니다. 이를 수행하는 간단한 방법은 모든 지형지물의 맵과 사전 처리가 실행되는 방식에 관한 메타데이터가 포함된 JSON 파일과 같이 플랫폼과 언어에 독립적인 형식을 사용하는 것입니다. 예시 앱에서 이를 실행하는 방법을 자세히 알아보세요.

다음으로 다음과 같이 모델에 테스트 입력을 제공합니다.

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"
 
)

모델은 이 특정 사용자에게 sparky_armor가 가장 적합한 IAP 업그레이드라고 제안합니다.

a3381dbcdbdf811e.png

모델 정확도 측정

모델 정확도를 측정하려면 Firebase 애널리틱스를 사용하여 모델에서 예측한 IAP 혜택과 클릭 여부를 추적하기만 하면 됩니다. Firebase A/B 테스팅과 함께 사용하여 모델의 실제 성능을 측정할 수 있습니다. 한 단계 더 나아가 모델의 여러 반복에 대해 A/B 테스트를 실행할 수도 있습니다. A/B 테스팅으로 Firebase 원격 구성 실험 만들기 문서에서 Firebase를 사용한 A/B 테스팅에 관해 자세히 알아보세요.

9. (선택사항): 새 데이터로 모델 정기 업데이트

새 데이터가 들어올 때마다 모델을 업데이트해야 하는 경우 파이프라인을 설정하여 모델을 반복적으로 재학습할 수 있습니다. 이렇게 하려면 먼저 위에 언급한 에피론-그리디 전략을 사용하여 학습에 사용할 새 데이터가 있는지 확인해야 합니다. 예를 들어 70% 의 경우 모델 예측 결과를 사용하고 30% 의 경우 무작위 결과를 사용합니다.

새 데이터로 학습 및 배포하기 위한 파이프라인 구성은 이 Codelab의 범위를 벗어납니다. 시작하려면 Google Cloud AI PlatformTFX를 확인하세요.

10. 수고하셨습니다.

이 Codelab에서는 Firebase를 사용하여 인앱 구매를 최적화하기 위한 기기 내 TFLite 모델을 학습하고 배포하는 방법을 알아봤습니다. TFLite 및 Firebase에 대해 자세히 알아보려면 다른 TFLite 샘플과 Firebase 시작 가이드를 살펴보세요.

궁금한 점이 있으면 Stack Overflow #firebase-machine-learning에 남겨주세요.

학습한 내용

  • TensorFlow Lite
  • Firebase ML
  • Firebase 애널리틱스
  • BigQuery

다음 단계

  • 앱용 최적화 도구 모델을 학습시키고 배포합니다.

자세히 알아보기