Cihaz üzerinde gerçek zamanlı uygulama içi satın alma optimizasyonu Codelab'i

1. Genel Bakış

1cbf855eda62c306.png

Cihaz üzerinde gerçek zamanlı uygulama içi satın alma optimizasyonu kod laboratuvarına hoş geldiniz. Bu codelab'de, özel bir kişiselleştirme modelini eğitmek ve uygulamanıza dağıtmak için TensorFlow Lite ve Firebase'i nasıl kullanacağınızı öğreneceksiniz.

Bu eğitimde, kişiselleştirme için bir makine öğrenimi modelinin nasıl oluşturulacağı gösterilmektedir. Özellikle de mevcut kullanıcının bulunduğu duruma göre en uygun uygulama içi satın alma (IAP) teklifini tahmin eden bir modelin nasıl oluşturulacağı gösterilmektedir. Bu, bağlama dayalı bir haydut problemi örneğidir. Bu önemli ve yaygın olarak uygulanabilen makine öğrenimi problemi türü hakkında daha fazla bilgiyi bu kod laboratuvarında bulabilirsiniz.

Neler öğreneceksiniz?

  • Firebase Analytics aracılığıyla analiz verileri toplama
  • BigQuery'yi kullanarak analiz verilerini ön işleme
  • Uygulama içi satın alma işlemlerinin (UİSA) cihaz üzerinde optimizasyonu için basit bir ML modeli eğitme
  • TFLite modellerini Firebase ML'ye dağıtma ve uygulamanızdan bunlara erişme
  • Firebase A/B Testi ile farklı modelleri ölçme ve deneme yapma
  • Yinelenen bir ritimde en son verileri kullanarak yeni modeller eğitin ve dağıtın

Gerekenler

  • Android Studio 3.4 veya sonraki sürümler
  • Android 2.3 veya sonraki sürümlerin ve Google Play Hizmetleri 9.8 veya sonraki sürümlerin yüklü olduğu fiziksel bir test cihazı ya da Google Play Hizmetleri 9.8 veya sonraki sürümlerin yüklü olduğu bir Emulator
  • Fiziksel bir test cihazı kullanıyorsanız bağlantı kablosu
  • Makine öğrenimi hakkında başlangıç düzeyinde bilgi

Bu eğitimi nasıl kullanacaksınız?

Yalnızca okuyun Okuyup alıştırmaları tamamlayın

Android uygulaması oluşturma deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Seviye Uzman

2. Sorun Açıklaması

Her seviyenin sonunda kişiselleştirilmiş uygulama içi satın alma (IAP) önerileri göstermek isteyen bir oyun geliştirici olduğunuzu varsayalım. Her seferinde yalnızca sınırlı sayıda IAP seçeneği gösterebilirsiniz ve hangilerinin en iyi dönüşümü sağlayacağını bilemezsiniz. Her kullanıcı ve her oturum farklı olduğundan, beklenen en yüksek ödülü veren IAP teklifini nasıl bulabiliriz?

3. Örnek kodu alın

GitHub deposunu komut satırından kopyalayın.

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

Bu depo şunları içerir:

  1. Kişiselleştirme modelini eğiten ve TFLite modeline paketleyen bir Jupyter not defteri (.ipynb)
  2. Cihaz üzerinde tahmin yapmak için TFLite modelini kullanan örnek bir Kotlin uygulaması

4. Uygulamayı Firebase ile çalıştırma

Bu codelab'de, kurgusal oyun uygulamamız Flappy Sparky'nin IAP'lerini optimize etmeye çalışacağız. Oyun, oyuncunun Sparky'yi kontrol ettiği ve duvar sütunları arasında çarpmadan uçmaya çalıştığı bir yatay kaydırma oyunudur. Seviyenin başında kullanıcıya güçlendirme sunan bir IAP teklifi gösterilir. Bu codelab'de yalnızca uygulamanın IAP optimizasyon bölümünü uygulayacağız.

Burada öğrendiklerinizi, Firebase projesine bağlı kendi uygulamanıza uygulayabilirsiniz. Alternatif olarak, bu kod laboratuvarı için yeni bir Firebase projesi de oluşturabilirsiniz. Firebase'i kullanmaya başlama konusunda yardıma ihtiyacınız varsa lütfen bu konuyla ilgili eğitici içeriklerimize göz atın ( Android ve iOS).

5. Uygulamanızda analiz etkinliklerini toplama

Analytics etkinlikleri, kullanıcı davranışı hakkında bilgi sağlar ve makine öğrenimi modelini eğitmek için kullanılır. Örneğin, model daha uzun süre oynayan kullanıcıların fazladan can almak için UİSA yapma olasılığının daha yüksek olduğunu öğrenebilir. ML modelinin bu bilgileri öğrenmesi için giriş olarak analiz etkinliklerine ihtiyacı vardır.

Günlüğe kaydetmek isteyebileceğimiz bazı analiz etkinlikleri şunlardır:

  • Kullanıcının oyunu ne kadar süre oynadığı
  • Kullanıcının ulaştığı seviye
  • Kullanıcının harcadığı jeton sayısı
  • Kullanıcının satın aldığı öğeler

Örnek verileri indirin (isteğe bağlı)

Aşağıdaki adımlarda, modelimizde kullanacağımız analiz etkinliklerini günlüğe kaydetmek için Firebase Analytics'i kullanacağız. Kullanmak istediğiniz analiz verileriniz varsa bu kod laboratuvarının "Optimizasyon modelini eğitme" bölümüne atlayabilir ve örnek verilerle birlikte ilerleyebilirsiniz.

Firebase Analytics SDK'sı ile Veri Toplama

Bu analiz etkinliklerini toplamak için Firebase Analytics'i kullanırız. Firebase Analytics SDK'sı, bir dizi etkinliği ve kullanıcı özelliğini otomatik olarak yakalar. Ayrıca, uygulamanıza özgü etkinlikleri ölçmek için kendi özel etkinliklerinizi tanımlamanıza olanak tanır.

Firebase Analytics SDK'sını yükleme

Google Analytics'i Kullanmaya Başlama dokümanlarını uygulayarak uygulamanızda Firebase Analytics'i kullanmaya başlayabilirsiniz. Bu kod laboratuvarının başında klonlanan firebase-iap-optimization deposu, Firebase Analytics SDK'sını zaten içerir.

Özel etkinlikleri günlüğe kaydetme

Firebase Analytics SDK'sını ayarladıktan sonra modelimizi eğitmek için ihtiyaç duyduğumuz etkinlikleri günlüğe kaydetmeye başlayabiliriz.

Bunu yapmadan önce, ilgili kullanıcının analiz verilerini uygulamadaki mevcut verileriyle ilişkilendirebilmemiz için Analytics etkinliğinde bir kullanıcı kimliği belirlemek önemlidir.

MainActivity.kt

firebaseAnalytics.setUserId("player1")

Ardından oyuncu etkinliklerini günlüğe kaydedebiliriz. IAP optimizasyonu için kullanıcıya sunulan her IAP teklifini ve bu teklifin kullanıcı tarafından tıklanıp tıklanmadığını günlük kaydına almak isteriz. Bu işlemle offer_iap ve offer_accepted olmak üzere iki Analytics etkinliği elde ederiz. Ayrıca, bir teklifin kabul edilip edilmediğini görmek için bu verileri birleştirmek üzere daha sonra kullanabileceğimiz benzersiz bir offer_id de izleriz.

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

Özel etkinlikleri günlüğe kaydetme hakkında daha fazla bilgi için Firebase Analytics Günlük Etkinlikleri belgelerini inceleyin.

6. BigQuery'de verileri ön işleme

Son adımda, kullanıcıya hangi IAP teklifinin sunulduğu ve kullanıcı tarafından hangi IAP teklifinin tıklandığıyla ilgili etkinlikleri topladık. Bu adımda, modelimizin eksiksiz bir resimden bilgi edinebilmesi için bu etkinlik verilerini kullanıcı verileriyle birleştireceğiz.

Bunu yapmak için öncelikle analiz etkinliklerini BigQuery'ye aktarmamız gerekir.

Firebase projenizi ve bu projedeki uygulamaları BigQuery'ye bağlamak için:

  1. Firebase'de oturum açın.
  2. Ayarlar simgesi simgesini tıklayın ve Proje Ayarları'nı seçin.
  3. Proje Ayarları sayfasında Entegrasyonlar sekmesini tıklayın.
  4. BigQuery kartında Bağlantı'yı tıklayın.

(İsteğe bağlı) Firestore koleksiyonlarınızı BigQuery'ye aktarma

Bu adımda, modeli eğitmeye yardımcı olmak için Firestore'dan BigQuery'ye ek kullanıcı verileri aktarabilirsiniz. Şimdilik bu adımı atlamak istiyorsanız bu kod laboratuvarının "BigQuery'de verileri hazırlama" bölümüne atlayabilirsiniz. Son adımda günlüğe kaydedilen Firebase Analytics etkinliklerini takip edebilirsiniz.

Firestore'da kullanıcıların kaydolma tarihini, yapılan uygulama içi satın alma işlemlerini, oyundaki seviyeleri, bakiyedeki paraları veya modeli eğitmede yararlı olabilecek diğer özellikleri saklayabilirsiniz.

Firestore koleksiyonlarınızı BigQuery'ye aktarmak için Firestore BigQuery Export uzantısını yükleyebilirsiniz. Ardından, bu verileri kişiselleştirme modelinizde ve bu kod laboratuvarının geri kalanında kullanmak üzere Google Analytics'teki verilerle birleştirmek için BigQuery'de tabloları birleştirin.

BigQuery'de verileri hazırlama

Sonraki birkaç adımda, ham analiz verilerini modelimizi eğitmek için kullanılabilecek verilere dönüştürmek üzere BigQuery'yi kullanacağız.

Modelimizin, kullanıcıya ve oyun durumuna göre hangi IAP teklifini sunacağını öğrenmesi için aşağıdakilerle ilgili verileri düzenlememiz gerekir:

  • kullanıcı
  • oyun durumu
  • sunulan teklif
  • Sunulan teklifin tıklanıp tıklanmadığı

Modelimizin bu verileri işleyebilmesi için tüm verilerin bir tabloda tek bir satır halinde düzenlenmesi gerekir. Neyse ki BigQuery tam da bunu yapmamıza yardımcı olacak şekilde tasarlanmıştır.

BigQuery, sorgunuzu düzenli tutmak için "görünümler" oluşturmanıza olanak tanır. Görünüm, SQL sorgusuyla tanımlanan sanal bir tablodur. Oluşturduğunuz görünümleri, tabloları sorguladığınız şekilde sorgularsınız. Bunu kullanarak önce analiz verilerini temizleyebiliriz.

Her uygulama içi satın alma teklifinin tıklanıp tıklanmadığını görmek için önceki adımda günlüğe kaydettiğimiz offer_iap ve offer_accepted etkinliklerini birleştirmemiz gerekir.

all_offers_joined - BigQuery görünümü

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 görünümü

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 veri kümesini Google Cloud Storage'a aktarma

Son olarak, model eğitimimizde kullanabilmek için BigQuery veri kümesini GCS'ye aktarabiliriz.

888daa7ba4db8e44.png

14d22bf474fae455.png

7. Optimizasyon modelini eğitme

Örnek veri

Bu kod laboratuvarının geri kalanını takip etmek için "BigQuery'de verileri ön işleme" adımındaki verilerinizi veya burada sağlanan indirilebilir örnek verileri kullanın.

Problem tanımı

Modeli eğitmeye başlamadan önce bağlamsal haydut problemimizi tanımlayalım.

Bağlamsal çeteler hakkında

Flappy Sparky'de her seviyenin başında kullanıcıya güçlendirme sunan bir IAP teklifi gösterilir. Her seferinde yalnızca bir IAP seçeneği gösterebiliriz ve hangilerinin en iyi dönüşümü sağlayacağını bilmiyoruz. Her kullanıcı ve her oturum farklı olduğundan, beklenen en yüksek ödülü veren IAP teklifini nasıl bulabiliriz?

Bu durumda, kullanıcı IAP teklifini kabul etmezse ödülü 0, kabul ederse IAP değerini yapalım. Ödülünüzü en üst düzeye çıkarmaya çalışmak için geçmiş verilerimizden yararlanarak, kullanıcıya sunulan her işlem için beklenen ödülü tahmin eden ve en yüksek ödülü veren işlemi bulan bir model eğitebiliriz.

e7d3264141498bff.jpeg

Tahminde kullanacağımız veriler şunlardır:

  • Durum: Kullanıcı ve mevcut oturumuyla ilgili bilgiler
  • İşlem: Göstermeyi seçebileceğimiz IAP teklifleri
  • Ödül: IAP teklifinin değeri

İstismar ve Keşif

Tüm çok kollu haydut problemlerinde algoritmanın keşif (hangi işlemin optimum sonucu verdiğini öğrenmek için daha fazla veri elde etme) ve sömürü (en yüksek ödülü almak için optimum sonucu kullanma) arasında denge kurması gerekir.

Sorunun bizim versiyonumuzda, modeli yalnızca bulutta düzenli aralıklarla eğitmek ve yalnızca modeli kullanıcının cihazında kullanırken tahmin yapmak (kullanıcı cihazında eğitmenin yanı sıra) olacak şekilde basitleştireceğiz. Modeli kullandıktan sonra yeterli eğitim verisi elde ettiğimizden emin olmak için bazen uygulama kullanıcılarımıza rastgele sonuçlar (ör. %30) göstermemiz gerekir. Keşif ve sömürme arasında denge kuran bu stratejiye Epsilon-açgözlü denir.

Model eğitme

Başlamak için codelab ile birlikte sağlanan eğitim komut dosyasını (training.ipynb) kullanabilirsiniz. Hedefimiz, belirli bir durum için her işleme ilişkin beklenen ödülleri tahmin eden bir model eğitmektir. Ardından, bize en yüksek beklenen ödülleri veren işlemi buluruz.

Yerel olarak eğitim

Kendi modelinizi eğitmeye başlamanın en kolay yolu, bu codelab'in kod örneğindeki not defterinin bir kopyasını oluşturmaktır.

Bu codelab için GPU'ya ihtiyacınız yoktur ancak kendi verilerinizi keşfetmek ve kendi modelinizi eğitmek için daha güçlü bir makineye ihtiyacınız varsa eğitimi hızlandırmak için AI Platform Notebook örneği alabilirsiniz.

Sağlanan eğitim komut dosyasında, BigQuery'den dışa aktardığımız CSV dosyalarından eğitim verileri oluşturan bir iteratör oluşturduk. Ardından, modelimizi Keras ile eğitmeye başlamak için verileri kullandık. Modelin nasıl eğitileceğine dair ayrıntıları Python not defterinin yorumlarında bulabilirsiniz.

Model performansını ölçme

Modeli eğitirken, modelimizin gerçekten öğrenip öğrenmediğini görmek için IAP tekliflerini rastgele seçen rastgele bir temsilciyle karşılaştırırız. Bu mantık ValidationCallback. altında bulunur.

Eğitimin sonunda, modelimizi tekrar test etmek için test.csv'teki verileri kullanırız. Model bu verileri daha önce hiç görmemiştir. Bu nedenle, sonucun aşırı uyum nedeniyle olmadığından emin olabiliriz. Bu durumda model, rastgele temsilciden% 28 daha iyi performans gösterir.

TFLite modelini dışa aktarma

Artık kullanıma hazır bir eğitimli modelimiz var. Ancak şu anda TensorFlow biçiminde. Modelin mobil cihazlarda çalışabilmesi için TFLite biçiminde dışa aktarılması gerekir.

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)

Buradan modeli indirebilir ve uygulamanızla paket haline getirebilirsiniz.

İsteğe bağlı olarak, üretim uygulaması için modeli Firebase ML'ye dağıtmanızı ve Firebase'in modelinizi barındırmasını öneririz. Bu, iki temel nedenden dolayı yararlıdır:

  1. Uygulama yükleme boyutunu küçük tutabilir ve modeli yalnızca gerektiğinde indirebiliriz.
  2. Model, uygulamanın tamamından farklı bir sürüm döngüsü ile düzenli olarak güncellenebilir.

Modeli Firebase ML'ye nasıl dağıtacağınızı öğrenmek için TFLite destekli Android uygulamanıza Firebase'i ekleme codelab'ini inceleyebilirsiniz. Firebase konsolunu veya Python API'yi kullanarak dağıtma seçeneğiniz vardır.

8. Cihaz üzerinde tahmin yapma

Bir sonraki adım, cihaz üzerindeki modeli kullanarak tahmin yapmaktır. İndirdiğiniz örnek kodun app klasöründe, Firebase ML'den bir model indiren örnek bir uygulama bulabilir ve bazı istemci tarafı verileriyle çıkarım yapmak için bu uygulamayı kullanabilirsiniz.

Model eğitimi sırasında bazı ön işlemler uyguladığımız için cihaz üzerinde çalıştırırken model girişine aynı ön işleme uygulamamız gerekir. Bunu yapmanın basit bir yolu, platform ve dile bağlı olmayan bir biçim kullanmaktır (ör. her özelliğin haritasını ve ön işleme işleminin nasıl yapıldığıyla ilgili meta verileri içeren bir JSON dosyası). Bunun nasıl yapıldığıyla ilgili daha fazla bilgiyi örnek uygulamada bulabilirsiniz.

Ardından, modele aşağıdaki gibi bir test girişi veririz:

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

Model, bu kullanıcı için en iyi IAP güçlendiricinin sparky_armor olduğunu öneriyor.

a3381dbcdbdf811e.png

Model doğruluğunu ölçme

Modelimizin doğruluğunu ölçmek için modelimiz tarafından öngörülen uygulama içi teklifleri ve bunların tıklanıp tıklanmadığını Firebase Analytics'i kullanarak izleyebiliriz. Modelin gerçek performansını ölçmek için bunu Firebase A/B testi ile birlikte kullanabilirsiniz. Bir adım daha ileri giderek modelin farklı iterasyonlarında da A/B testleri yapabilirsiniz. A/B Testi ile Firebase Remote Config Denemeleri Oluşturma dokümanında Firebase ile A/B testi hakkında daha fazla bilgi edinebilirsiniz.

9. (İsteğe bağlı): Modeli düzenli olarak yeni verilerle güncelleme

Yeni veriler geldikçe modelinizi güncellemeniz gerekiyorsa modelinizi düzenli olarak yeniden eğitecek bir ardışık düzen oluşturabilirsiniz. Bunu yapmak için öncelikle yukarıda bahsettiğimiz epsilon-açgözlü stratejiyi kullanarak eğitim için kullanabileceğiniz yeni verilerinizin bulunduğundan emin olmanız gerekir. (ör. zamanın% 70'inde model tahmini sonucunu, %30'unda ise rastgele sonuçları kullanın).

Yeni verilerle eğitim ve dağıtım için bir ardışık düzen yapılandırması bu kod laboratuvarının kapsamı dışındadır. Başlamak için Google Cloud AI Platformu ve TFX'e göz atabilirsiniz.

10. Tebrikler!

Bu codelab'de, Firebase'i kullanarak uygulama içi satın alma işlemlerini optimize etmek için cihaz üzerinde TFLite modelini nasıl eğiteceğinizi ve dağıtacağınızı öğrendiniz. TFLite ve Firebase hakkında daha fazla bilgi edinmek için diğer TFLite örneklerine ve Firebase başlangıç kılavuzlarına göz atın.

Sorularınız varsa Stack Overflow #firebase-machine-learning sayfasında paylaşabilirsiniz.

İşlediğimiz konular

  • TensorFlow Lite
  • Firebase ML
  • Firebase Analytics
  • BigQuery

Sonraki adımlar

  • Uygulamanız için bir optimizasyon modeli eğitin ve dağıtın.

Daha Fazla Bilgi